From 91d1fc4f0f63158173908e1e2a164705bdafe3fa Mon Sep 17 00:00:00 2001 From: Guilherme Lawless Date: Sat, 18 Jan 2020 14:07:30 +0000 Subject: [PATCH 01/87] Request aggregator stats, indent with spaces and add code formatting (#209) * Request aggregator stats, indent with spaces and add code formatting * Use the actual output name of the stats --- docs/running-a-node/troubleshooting.md | 219 +++++++++++++------------ 1 file changed, 113 insertions(+), 106 deletions(-) diff --git a/docs/running-a-node/troubleshooting.md b/docs/running-a-node/troubleshooting.md index 8b8ca2c81..c923cdf6e 100644 --- a/docs/running-a-node/troubleshooting.md +++ b/docs/running-a-node/troubleshooting.md @@ -123,7 +123,7 @@ For implementations details, please see [Statistics API](https://github.com/cryp All configuration nodes and values are optional, with the default values shown in comments below: -``` +```json "node": { ... "statistics": { @@ -153,118 +153,125 @@ All configuration nodes and values are optional, with the default values shown i ``` type: - traffic - traffic_tcp - error - message - block - ledger - rollback - bootstrap - vote - http_callback - peering - ipc - tcp - udp - observer - confirmation_height - drop + traffic + traffic_tcp + error + message + block + ledger + rollback + bootstrap + vote + http_callback + peering + ipc + tcp + udp + observer + confirmation_height + drop + requests details: - all - // error specific - bad_sender - insufficient_work - http_callback - unreachable_host - - // observer specific - observer_confirmation_active_quorum - observer_confirmation_active_conf_height - observer_confirmation_inactive - - // ledger, block, bootstrap - send - receive - open - change - state_block - epoch_block - fork - - // Message specific - keepalive - publish - republish_vote - confirm_req - confirm_ack - node_id_handshake - - // bootstrap, callback - initiate - initiate_lazy - initiate_wallet_lazy - - // Bootstrap specific - bulk_pull - bulk_pull_account - bulk_pull_deserialize_receive_block - bulk_pull_error_starting_request - bulk_pull_failed_account - bulk_pull_receive_block_failure - bulk_pull_request_failure - bulk_push - frontier_req - error_socket_close - - // Vote specific - vote_valid - vote_replay - vote_invalid - vote_overflow - vote_new - vote_cached - - // udp - blocking - overflow - invalid_magic - invalid_network - invalid_header - invalid_message_type - invalid_keepalive_message - invalid_publish_message - invalid_confirm_req_message - invalid_confirm_ack_message - invalid_node_id_handshake_message - outdated_version - - // tcp - tcp_accept_success - tcp_accept_failure - tcp_write_drop - - // ipc - invocations - - // peering - handshake - - // confirmation height - blocks_confirmed - invalid_block + all + + // error specific + bad_sender + insufficient_work + http_callback + unreachable_host + + // observer specific + observer_confirmation_active_quorum + observer_confirmation_active_conf_height + observer_confirmation_inactive + + // ledger, block, bootstrap + send + receive + open + change + state_block + epoch_block + fork + + // Message specific + keepalive + publish + republish_vote + confirm_req + confirm_ack + node_id_handshake + + // bootstrap, callback + initiate + initiate_lazy + initiate_wallet_lazy + + // Bootstrap specific + bulk_pull + bulk_pull_account + bulk_pull_deserialize_receive_block + bulk_pull_error_starting_request + bulk_pull_failed_account + bulk_pull_receive_block_failure + bulk_pull_request_failure + bulk_push + frontier_req + error_socket_close + + // Vote specific + vote_valid + vote_replay + vote_invalid + vote_overflow + vote_new + vote_cached + + // udp + blocking + overflow + invalid_magic + invalid_network + invalid_header + invalid_message_type + invalid_keepalive_message + invalid_publish_message + invalid_confirm_req_message + invalid_confirm_ack_message + invalid_node_id_handshake_message + outdated_version + + // tcp + tcp_accept_success + tcp_accept_failure + tcp_write_drop + + // ipc + invocations + + // peering + handshake + + // confirmation height + blocks_confirmed + invalid_block + + // requests + requests_votes_cached + requests_votes_generated + requests_votes_ignored dir (direction) : - in - out + in + out ``` ### RPC Command #### Counters query: -``` +```json { "action": "stats", "type": "counters" @@ -273,7 +280,7 @@ dir (direction) : #### Counters response -``` +```json { "type": "counters", "created": "2018.03.29 01:46:36", @@ -320,7 +327,7 @@ dir (direction) : #### Samples query: -``` +```json { "action": "stats", "type": "samples" @@ -328,7 +335,7 @@ dir (direction) : ``` #### Samples response -``` +```json { "type": "samples", "created": "2018.03.29 01:47:08", From ebc3e0671c693cb1968035a4ac190d50beae87e8 Mon Sep 17 00:00:00 2001 From: qwahzi Date: Sun, 19 Jan 2020 09:41:31 -0600 Subject: [PATCH 02/87] Updating glossary definitions for unchecked & TPS (#210) * Updating unchecked & TPS definitions Adding a definition for unchecked. Updating the TPS definition to match real world/historical usage (removing "CPS/2") * Update glossary.md Removing duplicate block section --- docs/glossary.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/glossary.md b/docs/glossary.md index 56d7fd76e..8e8f347db 100644 --- a/docs/glossary.md +++ b/docs/glossary.md @@ -98,9 +98,10 @@ The [account](#account) if the block is the first block on the account, otherwis A 256-bit random value usually represented to the user as a 64 character hexidecimal (0-9 and A-F) value. Private keys are derived from a seed. #### Transactions Per Second (TPS) -Often used to refer to the rate of complete transactions between two parties (i.e. a send with a corresponding receive). In the past, TPS was a per-node measurement that represented the perceived network-level transmission rate ([BPS](#blocks-per-second-bps)), but this measurement was found to be somewhat inaccurate due to peering and propagation differences between nodes. TPS is now used to refer to ([Confirmations Per Second](#confirmations-per-second-cps)/2) which is more similar to the TPS metric used by other cryptocurrencies (e.g. Bitcoin). Nano sends do not require a corresponding receive to be [confirmed](#confirmation), but receive blocks do need to be confirmed before received funds can be sent again (see [pending](#pending)). +Historically, TPS was a per-node measurement that represented a node's perception of the rate of transactions on the network ([BPS](#blocks-per-second-bps)). This measurement was found to be inaccurate due to peering and propagation differences between nodes, so [CPS](#confirmations-per-second-cps) is now the preferred term for describing overall Nano network scalability. It's also important to note that while Nano sends do not require a corresponding receive to be [confirmed](#confirmation), a receive block must be confirmed before received funds can be sent again (see [pending](#pending)). #### unchecked (blocks) +Blocks (transactions) that have been downloaded but not yet processed by the Nano node. The node software downloads all bocks from other nodes as unchecked, processes them and adds to block count, confirms the [frontier](#frontier) blocks for each account, and then marks them as [cemented](#cementing). #### unopened account An account address that does not have a first block on it (which must be a block to receive Nano sent from another account, cannot be a block only changing the Representative). From d224d3cd05d3d21c038e6b64746b2abbbed487e9 Mon Sep 17 00:00:00 2001 From: Marco Date: Mon, 20 Jan 2020 18:36:41 +0100 Subject: [PATCH 03/87] Update advanced.md (#212) --- docs/integration-guides/advanced.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/integration-guides/advanced.md b/docs/integration-guides/advanced.md index b36fc4a55..508bddadf 100644 --- a/docs/integration-guides/advanced.md +++ b/docs/integration-guides/advanced.md @@ -42,7 +42,7 @@ sequenceDiagram COLD-->>COLD: Generate & Sign COLD-->>HOT: Return Signed HOT->>Network: Publish Signed - Note over COLD,HOT: Cold/Hot Wallet transfers are done
offline using USB Stick or similar. + Note over COLD,HOT: Cold/Hot Wallet transfers are done offline using USB Stick or similar. ``` --- From 253e088ee393d4f85b29f54db11af995b2f288d4 Mon Sep 17 00:00:00 2001 From: Guilherme Lawless Date: Tue, 21 Jan 2020 14:45:02 +0000 Subject: [PATCH 04/87] New requests_dropped stat (#213) --- docs/running-a-node/troubleshooting.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/running-a-node/troubleshooting.md b/docs/running-a-node/troubleshooting.md index c923cdf6e..ed68b2ba1 100644 --- a/docs/running-a-node/troubleshooting.md +++ b/docs/running-a-node/troubleshooting.md @@ -261,6 +261,7 @@ details: requests_votes_cached requests_votes_generated requests_votes_ignored + requests_dropped dir (direction) : in From a5de8528a9fefb52346de2d640fd561de6f0a75f Mon Sep 17 00:00:00 2001 From: Guilherme Lawless Date: Mon, 27 Jan 2020 14:42:19 +0000 Subject: [PATCH 05/87] Adjusting aggregator stats (#214) --- docs/running-a-node/troubleshooting.md | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/docs/running-a-node/troubleshooting.md b/docs/running-a-node/troubleshooting.md index ed68b2ba1..ab3f4ba67 100644 --- a/docs/running-a-node/troubleshooting.md +++ b/docs/running-a-node/troubleshooting.md @@ -170,6 +170,7 @@ type: observer confirmation_height drop + aggregator requests details: @@ -257,11 +258,16 @@ details: blocks_confirmed invalid_block + // [request] aggregator + aggregator_accepted + aggregator_dropped + // requests - requests_votes_cached - requests_votes_generated - requests_votes_ignored - requests_dropped + requests_cached_hashes, + requests_generated_hashes, + requests_cached_votes, + requests_generated_votes, + requests_unknown dir (direction) : in From 58f0fe5a72b64b789142ac11cfed0e0ddaea0b36 Mon Sep 17 00:00:00 2001 From: Sergey Kroshnin Date: Thu, 30 Jan 2020 17:38:46 +0300 Subject: [PATCH 06/87] Bootstrap attempts and connections/pulls separation (#217) Changes from PR https://github.com/nanocurrency/nano-node/pull/2499 --- docs/commands/rpc-protocol.md | 49 +++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/docs/commands/rpc-protocol.md b/docs/commands/rpc-protocol.md index f75cb3e17..1fddcd6d3 100644 --- a/docs/commands/rpc-protocol.md +++ b/docs/commands/rpc-protocol.md @@ -953,6 +953,55 @@ Returning status of current bootstrap attempt } ``` **Response:** +_versions 21.0+_ +```json +{ + "bootstrap_threads": "2", + "running_attempts_count": "2", + "total_attempts_count": "6", + "connections": { + "clients": "31", + "connections": "45", + "idle": "0", + "target_connections": "64", + "pulls": "1158514" + }, + "attempts": [ + { + "id": "EE778222D6407F94A666B8A9E03D242D", + "mode": "legacy", + "started": "true", + "pulling": "1158544", + "total_blocks": "4311", + "requeued_pulls": "7", + "frontier_pulls": "0", + "frontiers_received": "true", + "frontiers_confirmed": "false", + "frontiers_confirmation_pending": "false", + "duration": "133" + }, + { + "id": "291D2CC32F44E004896C4215A6CDEDAFEF317F6AC802C244E8F4B4F2456175CB", + "mode": "lazy", + "started": "true", + "pulling": "1", + "total_blocks": "1878", + "requeued_pulls": "4", + "lazy_blocks": "1878", + "lazy_state_backlog": "1", + "lazy_balances": "4", + "lazy_destinations": "0", + "lazy_undefined_links": "0", + "lazy_pulls": "13", + "lazy_keys": "2", + "lazy_key_1": "E6D0B5BD5EBDB3CEC7DBC32EDC3C2DBD5ABA17C54E34485A358BF8948039ED6A", + "duration": "17" + } + ] +} +``` +**Response:** +_versions 17.0-20.0_ ```json { "clients": "0", From a8aa87a4144b6909dc80226ef1f55311a7d6cb60 Mon Sep 17 00:00:00 2001 From: Guilherme Lawless Date: Thu, 30 Jan 2020 14:50:12 +0000 Subject: [PATCH 07/87] Work peer hostname support (#216) * Work peer hostname support * Mention v21 --- docs/running-a-node/configuration.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/running-a-node/configuration.md b/docs/running-a-node/configuration.md index 79cc295c3..5ab19dcef 100644 --- a/docs/running-a-node/configuration.md +++ b/docs/running-a-node/configuration.md @@ -189,12 +189,13 @@ As of V18.0, nodes with weight delegated to them under this value in their confi --- #### node.work_peers -Used when offloading work generation to another node or service. Format must be ipv6, preceded by `::ffff:` if ipv4. Hostnames are not allowed at this time. Calls are made to the ip:port designated using the standard RPC format [work_generate](/commands/rpc-protocol#work_generate). Example: +Used when offloading work generation to another node or service. Format must be ipv6, preceded by `::ffff:` if ipv4. Hostnames are supported since v21. Calls are made to the address:port designated using the standard RPC format [work_generate](/commands/rpc-protocol#work_generate). Example: ```toml [node] work_peers = [ - "::ffff:127.0.0.1:7076" + "::ffff:127.0.0.1:7076", + "example.work-peer.org:7000" ] ``` From 3a2b4dde0f2ec2d6cada353df80c15f5e5095905 Mon Sep 17 00:00:00 2001 From: Zach Hyatt <2311564+zhyatt@users.noreply.github.com> Date: Thu, 13 Feb 2020 12:15:54 -0600 Subject: [PATCH 08/87] Remove test case files and links (#225) * Remove test case files and links * Update beta-network.md --- docs/running-a-node/beta-network.md | 4 +-- docs/testcases/Cases.html | 39 ----------------------------- docs/testcases/Results.html | 39 ----------------------------- docs/testcases/resources/sheet.css | 1 - 4 files changed, 1 insertion(+), 82 deletions(-) delete mode 100644 docs/testcases/Cases.html delete mode 100644 docs/testcases/Results.html delete mode 100644 docs/testcases/resources/sheet.css diff --git a/docs/running-a-node/beta-network.md b/docs/running-a-node/beta-network.md index 7c854268d..241b297fe 100644 --- a/docs/running-a-node/beta-network.md +++ b/docs/running-a-node/beta-network.md @@ -109,6 +109,4 @@ Additional details for services who wish to test their integrations on the beta Links for beta testing builds are shared in the #beta_announcements channel on our [Discord server](https://chat.nano.org). Docker tags are also available on https://hub.docker.com/r/nanocurrency/nano-beta/tags. ### Ongoing Test Cases -Beta testing is currently ongoing for V21. See the [test cases](/testcases/Cases.html) and summarized [results](/testcases/Results.html) submitted by developers and community testers. - -If you are interested in helping test on beta and want to collaborate directly with the test cases spreadsheet, please connect with `Zach - ATX#0646` or `Dotcom#9351` in the #beta-net channel on our [Discord server](https://chat.nano.org). \ No newline at end of file +A spreadsheet of some test cases is maintained separately and available for sharing with community members who are involved on the beta network. If you are interested in helping with these test cases, please connect with `Zach - ATX#0646` or `Dotcom#9351` in the #beta-net channel on our [Discord server](https://chat.nano.org). diff --git a/docs/testcases/Cases.html b/docs/testcases/Cases.html deleted file mode 100644 index 9dd83cbbb..000000000 --- a/docs/testcases/Cases.html +++ /dev/null @@ -1,39 +0,0 @@ - -
ABCDEFGHI
1
IDStatusStatus Notes# Test ResultsCategoryNameDetailsDocsGitHub
2
EM1Open0Election ManagementExpected stats from adding passive elections
Capture stats, namely tcp_write_drop, confirm_ack, confirm_req, and active_transactions drop/active/passive . Evaluate if observed stats match expectations.https://docs.nano.org/commands/rpc-protocol/#statshttps://github.com/nanocurrency/nano-node/pull/2440
3
EM2
Open0Election Management
PoW prioritization from adding passive elections
With better election management, PoW prioritization should be more consistent: almost no low difficulty blocks should be getting confirmed until the end of the test, and sending a very high difficulty block (landing in the top 50 blocks, so around 32 times higher than active_difficulty) should quickly get a confirmationhttps://docs.nano.org/integration-guides/the-basics/#difficulty-multiplierhttps://github.com/nanocurrency/nano-node/pull/2440
4
AD1Open0Active DifficultyActive difficulty under saturationActive difficulty has changed to sample the 10th percentile every 500ms (previously median). Default active elections size has changed to 2000 from 10000, meaning under the same saturation test there will be more high difficulty elections in the container, and active_difficulty should be higher (sampling the 1800th element where it was the 5000th before). Ensure that active difficulty evolves smoothly (no spikes)https://docs.nano.org/commands/rpc-protocol/#active_difficultyhttps://github.com/nanocurrency/nano-node/pull/2440
- diff --git a/docs/testcases/Results.html b/docs/testcases/Results.html deleted file mode 100644 index c18bb28d8..000000000 --- a/docs/testcases/Results.html +++ /dev/null @@ -1,39 +0,0 @@ - -
ABCDEFG
1
DateTest IDBuildTesterTest GoalsResults ObservedResources
2
3
- diff --git a/docs/testcases/resources/sheet.css b/docs/testcases/resources/sheet.css deleted file mode 100644 index ee5c02266..000000000 --- a/docs/testcases/resources/sheet.css +++ /dev/null @@ -1 +0,0 @@ -a{text-decoration:none}a:link{color:#15c}a:visited{color:#61c}a:active{color:#d14836}a:hover{text-decoration:underline}.quantumIconsIcon{font-family:'Material Icons Extended';font-weight:normal;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-rendering:optimizeLegibility;text-transform:none;display:inline-block;word-wrap:normal;direction:ltr;font-feature-settings:'liga' 1;-webkit-font-smoothing:antialiased}html[dir="rtl"] .quantumIconsRtlIcon{-moz-transform:scaleX(-1);-o-transform:scaleX(-1);-webkit-transform:scaleX(-1);transform:scaleX(-1);filter:FlipH;-ms-filter:"FlipH"}.ac-renderer{font:normal 13px Arial,sans-serif;position:absolute;background:#fff;border:1px solid #666;-moz-box-shadow:2px 2px 2px rgba(102,102,102,.4);-webkit-box-shadow:2px 2px 2px rgba(102,102,102,.4);width:300px}.ac-row{cursor:pointer;padding:.4em}.ac-highlighted{font-weight:bold}.ac-active{background-color:#b2b4bf}.goog-inline-block{position:relative;display:-moz-inline-box;display:inline-block}* html .goog-inline-block{display:inline}*:first-child+html .goog-inline-block{display:inline}.jfk-button{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;cursor:default;font-size:11px;font-weight:bold;text-align:center;white-space:nowrap;margin-right:16px;height:27px;line-height:27px;min-width:54px;outline:0px;padding:0 8px}.jfk-button-hover{-webkit-box-shadow:0 1px 1px rgba(0,0,0,.1);-moz-box-shadow:0 1px 1px rgba(0,0,0,.1);box-shadow:0 1px 1px rgba(0,0,0,.1)}.jfk-button-selected{-webkit-box-shadow:inset 0px 1px 2px rgba(0,0,0,0.1);-moz-box-shadow:inset 0px 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0px 1px 2px rgba(0,0,0,0.1)}.jfk-button .jfk-button-img{margin-top:-3px;vertical-align:middle}.jfk-button-label{margin-left:5px}.jfk-button-narrow{min-width:34px;padding:0}.jfk-button-collapse-left,.jfk-button-collapse-right{z-index:1}.jfk-button-collapse-left.jfk-button-disabled{z-index:0}.jfk-button-checked.jfk-button-collapse-left,.jfk-button-checked.jfk-button-collapse-right{z-index:2}.jfk-button-collapse-left:focus,.jfk-button-collapse-right:focus,.jfk-button-hover.jfk-button-collapse-left,.jfk-button-hover.jfk-button-collapse-right{z-index:3}.jfk-button-collapse-left{margin-left:-1px;-moz-border-radius-bottomleft:0;-moz-border-radius-topleft:0;-webkit-border-bottom-left-radius:0;-webkit-border-top-left-radius:0;border-bottom-left-radius:0;border-top-left-radius:0}.jfk-button-collapse-right{margin-right:0px;-moz-border-radius-topright:0;-moz-border-radius-bottomright:0;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:0;border-top-right-radius:0;border-bottom-right-radius:0}.jfk-button.jfk-button-disabled:active{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.jfk-button-action{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;background-color:#4d90fe;background-image:-webkit-linear-gradient(top,#4d90fe,#4787ed);background-image:-moz-linear-gradient(top,#4d90fe,#4787ed);background-image:-ms-linear-gradient(top,#4d90fe,#4787ed);background-image:-o-linear-gradient(top,#4d90fe,#4787ed);background-image:linear-gradient(top,#4d90fe,#4787ed);border:1px solid #3079ed;color:#fff}.jfk-button-action.jfk-button-hover{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;background-color:#357ae8;background-image:-webkit-linear-gradient(top,#4d90fe,#357ae8);background-image:-moz-linear-gradient(top,#4d90fe,#357ae8);background-image:-ms-linear-gradient(top,#4d90fe,#357ae8);background-image:-o-linear-gradient(top,#4d90fe,#357ae8);background-image:linear-gradient(top,#4d90fe,#357ae8);border:1px solid #2f5bb7;border-bottom-color:#2f5bb7}.jfk-button-action:focus{-webkit-box-shadow:inset 0 0 0 1px #fff;-moz-box-shadow:inset 0 0 0 1px #fff;box-shadow:inset 0 0 0 1px #fff;border:1px solid #fff;border:rgba(0,0,0,0) solid 1px;outline:1px solid #4d90fe;outline:rgba(0,0,0,0) 0}.jfk-button-action.jfk-button-clear-outline{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;outline:none}.jfk-button-action:active{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.3);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.3);box-shadow:inset 0 1px 2px rgba(0,0,0,0.3);background:#357ae8;border:1px solid #2f5bb7;border-top:1px solid #2f5bb7}.jfk-button-action.jfk-button-disabled{background:#4d90fe;filter:alpha(opacity=50);opacity:0.5}.jfk-button-contrast{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;background-color:#f5f5f5;background-image:-webkit-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:-moz-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:-ms-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:-o-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:linear-gradient(top,#f5f5f5,#f1f1f1);color:#333;border:1px solid #dcdcdc;border:1px solid rgba(0,0,0,0.1)}.jfk-button-contrast.jfk-button-hover,.jfk-button-contrast.jfk-button-clear-outline.jfk-button-hover{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;background-color:#f8f8f8;background-image:-webkit-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-moz-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-ms-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-o-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:linear-gradient(top,#f8f8f8,#f1f1f1);border:1px solid #c6c6c6;color:#111}.jfk-button-contrast:active,.jfk-button-contrast.jfk-button-hover:active{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1);background:#f8f8f8}.jfk-button-contrast.jfk-button-selected,.jfk-button-contrast.jfk-button-clear-outline.jfk-button-selected{background-color:#eee;background-image:-webkit-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-moz-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-ms-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-o-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:linear-gradient(top,#f8f8f8,#f1f1f1);border:1px solid #ccc;color:#333}.jfk-button-contrast.jfk-button-checked,.jfk-button-contrast.jfk-button-clear-outline.jfk-button-checked{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1);background-color:#eee;background-image:-webkit-linear-gradient(top,#eee,#e0e0e0);background-image:-moz-linear-gradient(top,#eee,#e0e0e0);background-image:-ms-linear-gradient(top,#eee,#e0e0e0);background-image:-o-linear-gradient(top,#eee,#e0e0e0);background-image:linear-gradient(top,#eee,#e0e0e0);border:1px solid #ccc;color:#333}.jfk-button-contrast:focus{border:1px solid #4d90fe;outline:none}.jfk-button-contrast.jfk-button-clear-outline{border:1px solid #dcdcdc;outline:none}.jfk-button-contrast.jfk-button-disabled{background:#fff;border:1px solid #f3f3f3;border:1px solid rgba(0,0,0,0.05);color:#b8b8b8}.jfk-button-contrast .jfk-button-img{opacity:.70}.jfk-button-contrast.jfk-button-checked .jfk-button-img,.jfk-button-contrast.jfk-button-selected .jfk-button-img,.jfk-button-contrast.jfk-button-hover .jfk-button-img{opacity:0.9}.jfk-button-contrast.jfk-button-disabled .jfk-button-img{filter:alpha(opacity=33);opacity:0.333}.jfk-button-default{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;background-color:#3d9400;background-image:-webkit-linear-gradient(top,#3d9400,#398a00);background-image:-moz-linear-gradient(top,#3d9400,#398a00);background-image:-ms-linear-gradient(top,#3d9400,#398a00);background-image:-o-linear-gradient(top,#3d9400,#398a00);background-image:linear-gradient(top,#3d9400,#398a00);border:1px solid #29691d;color:#fff;text-shadow:0px 1px rgba(0,0,0,0.1)}.jfk-button-default.jfk-button-hover{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;background-color:#368200;background-image:-webkit-linear-gradient(top,#3d9400,#368200);background-image:-moz-linear-gradient(top,#3d9400,#368200);background-image:-ms-linear-gradient(top,#3d9400,#368200);background-image:-o-linear-gradient(top,#3d9400,#368200);background-image:linear-gradient(top,#3d9400,#368200);border:1px solid #2d6200;border-bottom:1px solid #2d6200;text-shadow:0px 1px rgba(0,0,0,0.3)}.jfk-button-default:focus{-webkit-box-shadow:inset 0 0 0 1px #fff;-moz-box-shadow:inset 0 0 0 1px #fff;box-shadow:inset 0 0 0 1px #fff;border:1px solid #fff;border:rgba(0,0,0,0) solid 1px;outline:1px solid #3d9400;outline:rgba(0,0,0,0) 0}.jfk-button-default.jfk-button-clear-outline{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;outline:none}.jfk-button-default:active{-webkit-box-shadow:inset 0px 1px 2px rgba(0,0,0,0.3);-moz-box-shadow:inset 0px 1px 2px rgba(0,0,0,0.3);box-shadow:inset 0px 1px 2px rgba(0,0,0,0.3);background:#368200;border:1px solid #2d6200;border-top:1px solid #2d6200}.jfk-button-default.jfk-button-disabled{background:#3d9400;filter:alpha(opacity=50);opacity:0.5}.jfk-button-primary{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;background-color:#d14836;background-image:-webkit-linear-gradient(top,#dd4b39,#d14836);background-image:-moz-linear-gradient(top,#dd4b39,#d14836);background-image:-ms-linear-gradient(top,#dd4b39,#d14836);background-image:-o-linear-gradient(top,#dd4b39,#d14836);background-image:linear-gradient(top,#dd4b39,#d14836);border:1px solid transparent;color:#fff;text-shadow:0px 1px rgba(0,0,0,0.1);text-transform:uppercase}.jfk-button-primary.jfk-button-hover{-webkit-box-shadow:0px 1px 1px rgba(0,0,0,0.2);-moz-box-shadow:0px 1px 1px rgba(0,0,0,0.2);box-shadow:0px 1px 1px rgba(0,0,0,0.2);background-color:#c53727;background-image:-webkit-linear-gradient(top,#dd4b39,#c53727);background-image:-moz-linear-gradient(top,#dd4b39,#c53727);background-image:-ms-linear-gradient(top,#dd4b39,#c53727);background-image:-o-linear-gradient(top,#dd4b39,#c53727);background-image:linear-gradient(top,#dd4b39,#c53727);border:1px solid #b0281a;border-bottom-color:#af301f}.jfk-button-primary:focus{-webkit-box-shadow:inset 0 0 0 1px #fff;-moz-box-shadow:inset 0 0 0 1px #fff;box-shadow:inset 0 0 0 1px #fff;border:1px solid #fff;border:rgba(0,0,0,0) solid 1px;outline:1px solid #d14836;outline:rgba(0,0,0,0) 0}.jfk-button-primary.jfk-button-clear-outline{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;outline:none}.jfk-button-primary:active{-webkit-box-shadow:inset 0px 1px 2px rgba(0,0,0,0.3);-moz-box-shadow:inset 0px 1px 2px rgba(0,0,0,0.3);box-shadow:inset 0px 1px 2px rgba(0,0,0,0.3);background-color:#b0281a;background-image:-webkit-linear-gradient(top,#dd4b39,#b0281a);background-image:-moz-linear-gradient(top,#dd4b39,#b0281a);background-image:-ms-linear-gradient(top,#dd4b39,#b0281a);background-image:-o-linear-gradient(top,#dd4b39,#b0281a);background-image:linear-gradient(top,#dd4b39,#b0281a);border:1px solid #992a1b;border-top:1px solid #992a1b}.jfk-button-primary.jfk-button-disabled{background:#d14836;filter:alpha(opacity=50);opacity:0.5}.jfk-slideToggle{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;-webkit-box-shadow:inset 0px 1px 2px 0 rgba(0,0,0,.1);-moz-box-shadow:inset 0px 1px 2px 0 rgba(0,0,0,.1);box-shadow:inset 0px 1px 2px 0 rgba(0,0,0,.1);background-color:#f5f5f5;background-image:-webkit-linear-gradient(top,#eee,#e0e0e0);background-image:-moz-linear-gradient(top,#eee,#e0e0e0);background-image:-ms-linear-gradient(top,#eee,#e0e0e0);background-image:-o-linear-gradient(top,#eee,#e0e0e0);background-image:linear-gradient(top,#eee,#e0e0e0);border:1px solid #ccc;color:#666;font-weight:bold;height:27px;line-height:27px;margin-right:16px;outline:none;overflow:hidden;padding:0;position:relative;width:94px}.jfk-slideToggle-on,.jfk-slideToggle-off,.jfk-slideToggle-thumb{display:inline-block;text-align:center;text-transform:uppercase;width:47px}.jfk-slideToggle-on{-webkit-box-shadow:inset 0 1px 2px 0 rgba(0,0,0,.1);-moz-box-shadow:inset 0 1px 2px 0 rgba(0,0,0,.1);box-shadow:inset 0 1px 2px 0 rgba(0,0,0,.1);background-color:#398bf2;background-image:-webkit-linear-gradient(top,#3b93ff,#3689ee);background-image:-moz-linear-gradient(top,#3b93ff,#3689ee);background-image:-ms-linear-gradient(top,#3b93ff,#3689ee);background-image:-o-linear-gradient(top,#3b93ff,#3689ee);background-image:linear-gradient(top,#3b93ff,#3689ee);color:#fff;height:27px}.jfk-slideToggle-off{-webkit-border-radius:2px 2px 0 0;-moz-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0}.jfk-slideToggle-thumb{-webkit-box-shadow:0px 1px 2px 0 rgba(0,0,0,.1);-moz-box-shadow:0px 1px 2px 0 rgba(0,0,0,.1);box-shadow:0px 1px 2px 0 rgba(0,0,0,.1);background-color:#f5f5f5;background-image:-webkit-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-moz-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-ms-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-o-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:linear-gradient(top,#f8f8f8,#f1f1f1);-webkit-transition:all .130s ease-out;-moz-transition:all .130s ease-out;-o-transition:all .130s ease-out;transition:all .130s ease-out;border:1px solid #ccc;display:block;height:27px;left:-1px;position:absolute;top:-1px}.jfk-slideToggle-thumb::after{content:'';background-image:-webkit-linear-gradient(left,#ccc 50%,transparent 50%),-webkit-linear-gradient(left,#ccc 50%,transparent 50%),-webkit-linear-gradient(left,#ccc 50%,transparent 50%),-webkit-linear-gradient(left,#ccc 50%,transparent 50%),-webkit-linear-gradient(left,#ccc 50%,transparent 50%);background-image:-moz-linear-gradient(left,#ccc 50%,transparent 50%),-moz-linear-gradient(left,#ccc 50%,transparent 50%),-moz-linear-gradient(left,#ccc 50%,transparent 50%),-moz-linear-gradient(left,#ccc 50%,transparent 50%),-moz-linear-gradient(left,#ccc 50%,transparent 50%);background-image:-ms-linear-gradient(left,#ccc 50%,transparent 50%),-ms-linear-gradient(left,#ccc 50%,transparent 50%),-ms-linear-gradient(left,#ccc 50%,transparent 50%),-ms-linear-gradient(left,#ccc 50%,transparent 50%),-ms-linear-gradient(left,#ccc 50%,transparent 50%);background-image:-o-linear-gradient(left,#ccc 50%,transparent 50%),-o-linear-gradient(left,#ccc 50%,transparent 50%),-o-linear-gradient(left,#ccc 50%,transparent 50%),-o-linear-gradient(left,#ccc 50%,transparent 50%),-o-linear-gradient(left,#ccc 50%,transparent 50%);background-image:linear-gradient(left,#ccc 50%,transparent 50%),linear-gradient(left,#ccc 50%,transparent 50%),linear-gradient(left,#ccc 50%,transparent 50%),linear-gradient(left,#ccc 50%,transparent 50%),linear-gradient(left,#ccc 50%,transparent 50%);background-position:0 0,0 2px,0 4px,0 6px,0 8px;background-repeat:repeat-x;background-size:2px 1px;display:block;height:9px;left:15px;position:absolute;top:9px;width:17px}.jfk-slideToggle.jfk-slideToggle-checked .jfk-slideToggle-thumb{left:47px}.jfk-slideToggle:focus{border:1px solid #4d90fe}.jfk-slideToggle.jfk-slideToggle-clearOutline{border:1px solid #ccc}.jfk-button-standard{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;background-color:#f5f5f5;background-image:-webkit-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:-moz-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:-ms-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:-o-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:linear-gradient(top,#f5f5f5,#f1f1f1);color:#333;border:1px solid #dcdcdc;border:1px solid rgba(0,0,0,0.1)}.jfk-button-standard.jfk-button-hover,.jfk-button-standard.jfk-button-clear-outline.jfk-button-hover{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;background-color:#f8f8f8;background-image:-webkit-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-moz-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-ms-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-o-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:linear-gradient(top,#f8f8f8,#f1f1f1);border:1px solid #c6c6c6;color:#111}.jfk-button-standard:active,.jfk-button-standard.jfk-button-hover:active{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1);background:#f8f8f8;color:#111}.jfk-button-standard.jfk-button-selected,.jfk-button-standard.jfk-button-clear-outline.jfk-button-selected{background-color:#eee;background-image:-webkit-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-moz-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-ms-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-o-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:linear-gradient(top,#f8f8f8,#f1f1f1);border:1px solid #ccc;color:#333}.jfk-button-standard.jfk-button-checked,.jfk-button-standard.jfk-button-clear-outline.jfk-button-checked{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1);background-color:#eee;background-image:-webkit-linear-gradient(top,#eee,#e0e0e0);background-image:-moz-linear-gradient(top,#eee,#e0e0e0);background-image:-ms-linear-gradient(top,#eee,#e0e0e0);background-image:-o-linear-gradient(top,#eee,#e0e0e0);background-image:linear-gradient(top,#eee,#e0e0e0);border:1px solid #ccc;color:#333}.jfk-button-standard:focus{border:1px solid #4d90fe;outline:none}.jfk-button-standard.jfk-button-clear-outline{border:1px solid #dcdcdc;border:1px solid rgba(0,0,0,0.1);outline:none}.jfk-button-standard.jfk-button-disabled{background:#fff;border:1px solid #f3f3f3;border:1px solid rgba(0,0,0,0.05);color:#b8b8b8}.jfk-button-standard .jfk-button-img{opacity:.70}.jfk-button-standard.jfk-button-checked .jfk-button-img,.jfk-button-standard.jfk-button-selected .jfk-button-img,.jfk-button-standard.jfk-button-hover .jfk-button-img{opacity:0.9}.jfk-button-standard.jfk-button-disabled .jfk-button-img{filter:alpha(opacity=33);opacity:0.333}.jfk-button-flat{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;border:1px solid transparent;font-size:13px;font-weight:normal;height:21px;line-height:21px;margin-right:1px;min-width:0;padding:0}.jfk-button-flat.jfk-button-hover,.jfk-button-flat.jfk-button-selected,.jfk-button-flat:focus,.jfk-button-flat:active{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.jfk-button-flat .jfk-button-img{height:21px;opacity:.70;width:21px}.jfk-button-flat .jfk-button-label{display:inline-block;margin:0;padding:0 1px}.jfk-button-flat.jfk-button-selected .jfk-button-img,.jfk-button-flat.jfk-button-hover .jfk-button-img{opacity:0.9}.jfk-button-flat.jfk-button-disabled .jfk-button-img{filter:alpha(opacity=33);opacity:0.333}.jfk-button-flat:focus{border:1px solid #4d90fe}.jfk-button-flat.jfk-button-clear-outline{border:1px solid transparent}.jfk-button-mini{background-color:#f5f5f5;background-image:-webkit-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:-moz-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:-ms-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:-o-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:linear-gradient(top,#f5f5f5,#f1f1f1);border:1px solid #dcdcdc;border:1px solid rgba(0,0,0,0.1);color:#333;height:17px;line-height:17px;min-width:22px;text-shadow:0px 1px rgba(0,0,0,0.1)}.jfk-button-mini.jfk-button-hover,.jfk-button-mini.jfk-button-clear-outline.jfk-button-hover{background-color:#f8f8f8;background-image:-webkit-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-moz-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-ms-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-o-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:linear-gradient(top,#f8f8f8,#f1f1f1);border:1px solid #c6c6c6;text-shadow:0px 1px rgba(0,0,0,0.3)}.jfk-button-mini:active{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.jfk-button-mini.jfk-button-checked,.jfk-button-mini.jfk-button-clear-outline.jfk-button-checked{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1);background-color:#e0e0e0;background-image:-webkit-linear-gradient(top,#eee,#e0e0e0);background-image:-moz-linear-gradient(top,#eee,#e0e0e0);background-image:-ms-linear-gradient(top,#eee,#e0e0e0);background-image:-o-linear-gradient(top,#eee,#e0e0e0);background-image:linear-gradient(top,#eee,#e0e0e0);border:1px solid #ccc;color:#333}.jfk-button-mini:focus{border:1px solid #4d90fe}.jfk-button-mini.jfk-button-clear-outline{border:1px solid #dcdcdc}.jfk-button-mini.jfk-button-disabled{background:#fff;border:1px solid #f3f3f3;border:1px solid rgba(0,0,0,0.05);color:#b8b8b8}.goog-modalpopup,.modal-dialog{-webkit-box-shadow:0 4px 16px rgba(0,0,0,.2);-moz-box-shadow:0 4px 16px rgba(0,0,0,.2);box-shadow:0 4px 16px rgba(0,0,0,.2);background:#fff;background-clip:padding-box;border:1px solid #acacac;border:1px solid rgba(0,0,0,.333);outline:0;position:absolute}.goog-modalpopup-bg,.modal-dialog-bg{background:#fff;left:0;position:absolute;top:0}div.goog-modalpopup-bg,div.modal-dialog-bg{filter:alpha(opacity=75);-moz-opacity:.75;opacity:.75}.modal-dialog{color:#000;padding:30px 42px}.modal-dialog-title{background-color:#fff;color:#000;cursor:default;font-size:16px;font-weight:normal;line-height:24px;margin:0 0 16px}.modal-dialog-title-close{height:11px;opacity:0.7;padding:17px;position:absolute;right:0px;top:0px;width:11px}.modal-dialog-title-close:after{content:'';background:url(//ssl.gstatic.com/ui/v1/dialog/close-x.png);position:absolute;height:11px;width:11px;right:17px}.modal-dialog-title-close:hover{opacity:1}.modal-dialog-content{background-color:#fff;line-height:1.4em;word-wrap:break-word}.modal-dialog-buttons{margin-top:16px}.modal-dialog-buttons button{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;background-color:#f5f5f5;background-image:-webkit-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:-moz-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:-ms-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:-o-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:linear-gradient(top,#f5f5f5,#f1f1f1);border:1px solid #dcdcdc;border:1px solid rgba(0,0,0,0.1);color:#333;cursor:default;font-family:inherit;font-size:11px;font-weight:bold;height:29px;line-height:27px;margin:0 16px 0 0;min-width:72px;outline:0;padding:0 8px}.modal-dialog-buttons button:hover,.modal-dialog-buttons button:active{-webkit-box-shadow:0px 1px 1px rgba(0,0,0,0.1);-moz-box-shadow:0px 1px 1px rgba(0,0,0,0.1);box-shadow:0px 1px 1px rgba(0,0,0,0.1);background-color:#f8f8f8;background-image:-webkit-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-moz-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-ms-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-o-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:linear-gradient(top,#f8f8f8,#f1f1f1);border:1px solid #c6c6c6;color:#111}.modal-dialog-buttons button:active{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.modal-dialog-buttons button:focus{border:1px solid #4d90fe}.modal-dialog-buttons button[disabled]{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;background:#fff;background-image:none;border:1px solid #f3f3f3;border:1px solid rgba(0,0,0,0.05);color:#b8b8b8}.modal-dialog-buttons .goog-buttonset-action{background-color:#4d90fe;background-image:-webkit-linear-gradient(top,#4d90fe,#4787ed);background-image:-moz-linear-gradient(top,#4d90fe,#4787ed);background-image:-ms-linear-gradient(top,#4d90fe,#4787ed);background-image:-o-linear-gradient(top,#4d90fe,#4787ed);background-image:linear-gradient(top,#4d90fe,#4787ed);border:1px solid #3079ed;color:#fff}.modal-dialog-buttons .goog-buttonset-action:hover,.modal-dialog-buttons .goog-buttonset-action:active{background-color:#357ae8;background-image:-webkit-linear-gradient(top,#4d90fe,#357ae8);background-image:-moz-linear-gradient(top,#4d90fe,#357ae8);background-image:-ms-linear-gradient(top,#4d90fe,#357ae8);background-image:-o-linear-gradient(top,#4d90fe,#357ae8);background-image:linear-gradient(top,#4d90fe,#357ae8);border:1px solid #2f5bb7;color:#fff}.modal-dialog-buttons .goog-buttonset-action:active{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.3);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.3);box-shadow:inset 0 1px 2px rgba(0,0,0,0.3)}.modal-dialog-buttons .goog-buttonset-action:focus{-webkit-box-shadow:inset 0 0 0 1px #fff;-moz-box-shadow:inset 0 0 0 1px #fff;box-shadow:inset 0 0 0 1px #fff;border:1px solid #fff;border:rgba(0,0,0,0) solid 1px;outline:1px solid #4d90fe;outline:rgba(0,0,0,0) 0}.modal-dialog-buttons .goog-buttonset-action[disabled]{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;background:#4d90fe;color:#fff;filter:alpha(opacity=50);opacity:0.5}.jfk-alert,.jfk-confirm,.jfk-prompt{width:512px}.jfk-textinput{-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;border:1px solid #d9d9d9;border-top:1px solid #c0c0c0;font-size:13px;height:25px;padding:1px 8px}.jfk-textinput:focus{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.3);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.3);box-shadow:inset 0 1px 2px rgba(0,0,0,0.3);border:1px solid #4d90fe;outline:none}.jfk-textinput::-ms-clear{display:none}.apps-action-shortcut-icon{direction:ltr;text-align:left;overflow:hidden;position:relative;vertical-align:middle}.apps-action-shortcut-img:before{content:url(//ssl.gstatic.com/docs/common/shortcut_sprite1.png)}.apps-action-shortcut-img{height:95px;position:absolute;width:21px}.apps-action-shortcut-back{left:0;top:-63px}.apps-action-shortcut-back-white{left:0;top:-21px}.apps-action-shortcut-close-x{left:0;top:-84px}.apps-action-shortcut-search{left:0;top:-42px}.apps-action-shortcut-search-white{left:0;top:0}.apps-ui-material-slide-toggle-container{-ms-flex-align:center;-webkit-align-items:center;align-items:center;background:none;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;height:21px;outline:0;position:relative;width:35px}.apps-ui-material-slide-toggle-thumb{-webkit-transition-duration:0.28s;-moz-transition-duration:0.28s;-o-transition-duration:0.28s;transition-duration:0.28s;-webkit-transition-property:all;-moz-transition-property:all;-o-transition-property:all;transition-property:all;-webkit-transition-timing-function:cubic-bezier(0.4,0.0,0.2,1);-moz-transition-timing-function:cubic-bezier(0.4,0.0,0.2,1);-o-transition-timing-function:cubic-bezier(0.4,0.0,0.2,1);transition-timing-function:cubic-bezier(0.4,0.0,0.2,1);left:0;right:inherit;top:0;will-change:background-color}.apps-ui-material-slide-toggle-container-checked .apps-ui-material-slide-toggle-thumb{left:inherit;right:0}.apps-ui-material-slide-toggle-container-disabled{cursor:not-allowed}.apps-ui-material-slide-toggle-track{background-color:#000;border-radius:7px;height:14px;opacity:0.26;width:35px}.apps-ui-material-slide-toggle-container-checked .apps-ui-material-slide-toggle-track{opacity:0.5}.apps-ui-material-slide-toggle-thumb{background-color:#f1f1f1;border-radius:100%;box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 4px rgba(0,0,0,.24);height:20px;width:20px;position:absolute}.apps-ui-material-slide-toggle-track,.apps-ui-material-slide-toggle-thumb{border:1px solid transparent}.apps-ui-material-slide-toggle-container-focused .apps-ui-material-slide-toggle-thumb{box-shadow:0 0 4px rgba(0,0,0,.14),0 4px 8px rgba(0,0,0,.28)}.apps-ui-material-slide-toggle-container-hover .apps-ui-material-slide-toggle-thumb{box-shadow:0 0 6px rgba(0,0,0,.16),0 6px 12px rgba(0,0,0,.32)}.apps-shortcutshelppopup{top:0;z-index:1002;color:#212121;font-family:roboto,arial,sans-serif;font-size:13px;position:fixed;text-align:center;background:#fafafa none repeat scroll 0;overflow:hidden;box-shadow:rgba(255,255,255,.9) 0px 1px 0px inset,rgba(0,0,0,.03) 0px -1px 0px inset,rgba(0,0,0,.15) 0 15px 10px,rgba(0,0,0,.3) 0 8px 36px;border:1px solid transparent}.apps-shortcutshelppopup input{font-family:roboto,arial,sans-serif}@media print{.apps-shortcutshelppopup{display:none}}.apps-shortcutshelppopup-bg{display:none;left:0;top:0;position:absolute}.apps-shortcutshelppopup-container{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;-moz-box-sizing:border-box;box-sizing:border-box;padding:16px 32px;width:800px;height:600px}.apps-shortcutshelppopup-header,.apps-shortcutshelppopup-content{border-collapse:collapse;width:100%}.apps-shortcutshelppopup-header{-ms-flex:0 0 auto;-webkit-flex:0 0 auto;flex:0 0 auto;border-bottom:1px solid #e5e5e5;text-align:left}.apps-shortcutshelppopup-content{font-size:13px;outline-offset:-1px}.apps-shortcutshelppopup-header-element{display:inline-block;vertical-align:middle;height:48px}.apps-shortcutshelppopup-title-container{white-space:nowrap;text-align:left}.apps-shortcutshelppopup-dialog-title{font-size:16px;color:#212121;display:inline-block;vertical-align:middle}.apps-shortcutshelppopup-input{font-size:13px;margin-left:16px;margin-right:0px;padding:0px 5px;vertical-align:middle;border-right:none;width:250px;height:27px;box-sizing:border-box}.apps-shortcutshelppopup-input-button-img{height:21px;width:21px;display:inline-block}.apps-shortcutshelppopup-input-button{-moz-box-sizing:border-box;box-sizing:border-box;cursor:pointer;display:inline-block;margin-left:0px;vertical-align:middle;border-top-left-radius:0;border-bottom-left-radius:0;line-height:25px}.apps-shortcutshelppopup-tearoff-link{font-size:13px;cursor:pointer;text-decoration:underline;color:#4581ff;vertical-align:middle;display:block;padding:16px 0 13px 0;font-weight:bold}.apps-shortcutshelppopup-close{position:absolute;top:0;right:0;padding-right:30px;padding-top:30px}.apps-shortcutshelppopup-close svg{fill:#5f6368}.apps-shortcutshelppopup-close-nav-widget-enabled{padding-right:18px;padding-top:20px}.apps-shortcutshelppopup-dialog .modal-dialog-title-close{cursor:pointer;position:static;padding:0px;margin:0;margin-left:32px;vertical-align:middle}.apps-shortcutshelppopup-dialog .modal-dialog-title-close:after{background:none;display:none}.apps-shortcutshelppopup-search-banner{-ms-flex:0 0 auto;-webkit-flex:0 0 auto;flex:0 0 auto;text-align:left;height:48px;padding-top:12px;box-sizing:border-box}.apps-shortcutshelppopup-search-banner.apps-shortcutshelppopup-empty-search{position:relative;left:0px;right:0px;text-align:center;top:113px;height:48px}.apps-shortcutshelppopup-reset-search-button{cursor:pointer;text-decoration:underline;position:relative;width:21px;min-width:21px;display:inline-block;margin-right:8px}.apps-shortcutshelppopup-reset-search-button-icon{height:21px;width:21px}.apps-shortcutshelppopup-search-label{margin:0;position:relative;font-size:15px;display:inline-block;vertical-align:middle}.apps-shortcutshelppopup-result-container{-ms-flex:1 1 auto;-webkit-flex:1 1 auto;flex:1 1 auto;overflow:auto}.apps-shortcutshelppopup-content-header{height:48px;padding-top:25px;text-align:left;font-size:13px;color:#212121;white-space:nowrap;margin:0px;-moz-box-sizing:border-box;box-sizing:border-box}.apps-shortcutshelppopup-content-header.apps-shortcutshelppopup-content-header-first{height:32px;padding-top:8px}.apps-shortcutshelppopup-content-element{text-align:left;vertical-align:middle;padding-top:0.15em;border-bottom:1px solid #ececec;height:32px;white-space:nowrap;-moz-box-sizing:border-box;box-sizing:border-box}.apps-shortcutshelppopup-shortcut-desc{color:#757575}.apps-shortcutshelppopup-shortcut-key{font-weight:bold}.apps-shortcutshelppopup-ac-renderer{z-index:1003;font-family:Arial,sans-serif;font-size:13px;position:absolute;background:#fff;border:1px solid #666;box-shadow:2px 2px 2px rgba(102,102,102,.4);width:250px;box-sizing:border-box}.apps-shortcutshelppopup-ac-row{cursor:pointer;padding:.4em}.apps-shortcutshelppopup-ac-renderer .ac-active{background-color:#eee}.apps-shortcutshelpcontentimpl-container{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;background-color:white;height:600px;width:800px}@media screen and (max-width:832px){.apps-shortcutshelpcontentimpl-container{max-width:95vw}}@media screen and (max-height:632px){.apps-shortcutshelpcontentimpl-container{height:95vh}}.apps-shortcutshelpcontentimpl-header{-ms-flex:0 0 auto;-webkit-flex:0 0 auto;flex:0 0 auto;border-bottom:1px solid rgba(0,0,0,0.12);text-align:left;border-collapse:collapse;width:100%;padding:16px 24px;box-sizing:border-box}.apps-shortcutshelpcontentimpl-header-element{display:inline-block;vertical-align:middle}.apps-shortcutshelpcontentimpl-title-container{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;white-space:nowrap;text-align:left}.apps-shortcutshelpcontentimpl-dialog-title{font-size:18px;color:rgba(0,0,0,.87);display:inline-block;vertical-align:middle;padding:16px 0;margin:0;font-weight:500}.apps-shortcutshelpcontentimpl-search{-webkit-box-flex:1;box-flex:1;-ms-flex-positive:1;-webkit-flex-grow:1;flex-grow:1;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;border-radius:4px;margin-left:16px;margin-right:24px;vertical-align:middle;height:48px;padding:0;background-color:rgba(0,0,0,0.05);border:1px solid transparent}.apps-shortcutshelpcontentimpl-search-icon{width:24px;height:24px;margin:12px 8px 0 16px}.apps-shortcutshelpcontentimpl-search-icon svg{fill:#80868b}.apps-shortcutshelpcontentimpl-hc-black .apps-shortcutshelpcontentimpl-search-icon svg{fill:#fff}.apps-shortcutshelpcontentimpl-hc-white .apps-shortcutshelpcontentimpl-search-icon svg{fill:#000}.apps-shortcutshelpcontentimpl-search-focused{box-shadow:0 1px 1px rgba(0,0,0,0.24);background-color:#fff;transition:background-color 75ms}.apps-shortcutshelpcontentimpl-input{border:none;background-color:transparent;padding:0 10px;flex-grow:1;font-size:14px;height:46px;outline:none;box-shadow:none}.apps-shortcutshelpcontentimpl-input:focus{border:none;box-shadow:none}.apps-shortcutshelpcontentimpl-tearoff-link-container{-ms-flex:0 0 auto;-webkit-flex:0 0 auto;flex:0 0 auto;padding:10px;border-top:1px solid rgba(0,0,0,0.12);display:-webkit-inline-box;display:-moz-inline-box;display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex;justify-content:center;align-items:center}.apps-shortcutshelpcontentimpl-tearoff-link-container-override-enabled{-ms-flex:0 0 50%;-webkit-flex:0 0 50%;flex:0 0 50%;padding:10px 0;display:-webkit-inline-box;display:-moz-inline-box;display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex;justify-content:center;align-items:center}.apps-shortcutshelpcontentimpl-tearoff-link-container-legacy-enabled{display:-webkit-inline-box;display:-moz-inline-box;display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex;justify-content:center;align-items:center;padding:10px 20px;text-transform:uppercase}.apps-shortcutshelpcontentimpl-link{font-size:13px;cursor:pointer;padding:9px 16px;border-radius:2px;font-weight:500}.apps-shortcutshelpcontentimpl-link,.apps-shortcutshelpcontentimpl-link:active{color:#1a73e8}.apps-shortcutshelpcontentimpl-link:hover{outline:none}.apps-shortcutshelpcontentimpl-link:focus{text-decoration:underline}.apps-shortcutshelpcontentimpl-link:visited{color:#1a73e8}.apps-shortcutshelpcontentimpl-override-shortcut-link{text-transform:uppercase}.apps-shortcutshelpcontentimpl-legacy-shortcut-link{display:-webkit-inline-box;display:-moz-inline-box;display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex;justify-content:center;align-items:center}.apps-shortcutshelpcontentimpl-override-shortcut-link-disabled{cursor:inherit;opacity:0.6}.apps-shortcutshelpcontentimpl-link.apps-shortcutshelpcontentimpl-override-shortcut-link-disabled:focus,.apps-shortcutshelpcontentimpl-link.apps-shortcutshelpcontentimpl-override-shortcut-link-disabled:hover{text-decoration:none}.apps-shortcutshelpcontentimpl-search-banner{text-align:left;box-sizing:border-box;border-bottom:1px solid rgba(0,0,0,0.12);padding:26px 0}.apps-shortcutshelpcontentimpl-reset-search-button{cursor:pointer;text-decoration:underline;position:relative;width:21px;min-width:21px;display:inline-block;margin:0 8px;padding:0 8px 0 4px;border-color:transparent;background-color:transparent;background-image:none}.apps-shortcutshelpcontentimpl-override-banner{padding:5px 0 0 20px;line-height:16px;white-space:pre;color:rgba(0,0,0,.87)}.apps-shortcutshelpcontentimpl-override-shortcut-key{font-weight:bold}.apps-shortcutshelpcontentimpl-reset-search-button-icon{display:inline-block;vertical-align:middle;height:22px;width:21px}.apps-shortcutshelpcontentimpl-reset-search-button-img{position:absolute}.apps-shortcutshelpcontentimpl-reset-search-button-img:before{content:url('//ssl.gstatic.com/images/icons/material/system/svg/keyboard_arrow_left_24px.svg')}.apps-shortcutshelpcontentimpl-search-label{margin:0;position:relative;font-size:19px;display:inline-block;vertical-align:middle;color:rgba(0,0,0,.87)}.apps-shortcutshelpcontentimpl-ac-renderer{z-index:1003;font-family:Arial,sans-serif;font-size:13px;font-weight:normal;position:absolute;background:#fff;border:1px solid #666;box-shadow:2px 2px 2px rgba(102,102,102,.4);width:250px;box-sizing:border-box}.apps-shortcutshelpcontentimpl-ac-row{cursor:pointer;padding:.4em}.apps-shortcutshelpcontentimpl-ac-renderer .ac-active{background-color:#eee}.apps-shortcutshelpcontentimpl-content-container{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;-ms-flex:1 1 auto;-webkit-flex:1 1 auto;flex:1 1 auto;overflow:auto}.apps-shortcutshelpcontentimpl-sidebar{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;-ms-flex:0 0 192px;-webkit-flex:0 0 192px;flex:0 0 192px;vertical-align:top;position:relative;border-right:1px solid rgba(0,0,0,0.12);overflow-x:hidden;overflow-y:auto}.apps-shortcutshelpcontentimpl-shortcut-content{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;-ms-flex:1 1 auto;-webkit-flex:1 1 auto;flex:1 1 auto;overflow:auto}.apps-shortcutshelpcontentimpl-bottom-bar{-ms-flex:0 0 auto;-webkit-flex:0 0 auto;flex:0 0 auto;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;border-top:1px solid rgba(0,0,0,0.12)}.apps-shortcutshelpcontentimpl-override-container{-ms-flex:0 0 50%;-webkit-flex:0 0 50%;flex:0 0 50%;display:-webkit-inline-box;display:-moz-inline-box;display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex;justify-content:center;align-items:center;box-sizing:border-box;border-left:1px solid rgba(0,0,0,0.12);border-collapse:collapse;padding:10px 0}.apps-shortcutshelpcontentimpl-legacy-help-container{display:-webkit-inline-box;display:-moz-inline-box;display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex;-ms-flex:0 0 50%;-webkit-flex:0 0 50%;flex:0 0 50%;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;justify-content:flex-end}.apps-shortcutshelpcontentimpl-override-button-container{padding-left:16px}.apps-shortcutshelpcontentimpl-override-label{padding:0 5px 0 17px;font-weight:500;color:rgba(0,0,0,.87)}.apps-shortcutshelpcontentimpl-legacy-label{color:rgba(0,0,0,.87);font-weight:500;padding:0 15px 0 17px}.apps-shortcutshelpcontentimpl-legacy-toggle-container{align-items:center;box-sizing:border-box;display:-webkit-inline-box;display:-moz-inline-box;display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex;-ms-flex:0 0 50%;-webkit-flex:0 0 50%;flex:0 0 50%;justify-content:flex-start;padding:0 5px 0 17px}.apps-actiondatawidget{-ms-flex:1 1 auto;-webkit-flex:1 1 auto;flex:1 1 auto;overflow:auto;position:relative;display:inline-block;outline:none;padding:0 5px 0 16px}.apps-actiondatawidget-key-focused{outline:rgba(0,0,0,.87) solid 1px;outline-offset:-1px}.apps-actiondatawidget-content{font-size:13px;outline-offset:-1px;table-layout:fixed;border-spacing:0}.apps-actiondatawidget-content-header{height:48px;padding-top:25px;text-align:left;font-size:13px;color:rgba(0,0,0,.87);white-space:nowrap;margin:0px;-moz-box-sizing:border-box;box-sizing:border-box}.apps-actiondatawidget-content-element{text-align:left;vertical-align:middle;border-bottom:1px solid rgba(0,0,0,0.12);white-space:nowrap;-moz-box-sizing:border-box;box-sizing:border-box;padding:11px 0}.apps-actiondatawidget-shortcut-desc{font-weight:normal;color:rgba(0,0,0,.87);word-wrap:break-word;white-space:normal;width:240px;vertical-align:top}.apps-actiondatawidget-shortcut-key{color:rgba(0,0,0,.87);width:310px}.apps-actiondatawidget-key-extra-padding{display:block;padding-bottom:11px}.apps-actiondatawidget-override-keys-on{color:rgba(0,0,0,.87);display:block}.apps-actiondatawidget-last-item{margin-bottom:2px}.apps-actiondatawidget-last-item-override-enabled{margin-bottom:2px}.apps-actiondatawidget-last-row{height:100%}.apps-actiondatawidget-override-keys-off{color:#bbbbbb;display:block}.apps-actiondatawidget-override-info-icon{height:17px;width:17px;float:right;display:block}.apps-actiondatawidget-override-info-svg{height:17px;width:17px;fill:#bbbbbb}.apps-shortcutshelpcontentimpl-hc-black .apps-actiondatawidget-override-info-svg{fill:white}.apps-actiondatawidget-override-keys-on .apps-actiondatawidget-override-info-svg{fill:#1a73e8}.jfk-tooltip.apps-actiondatawidget-override-info-icon-tooltip,.jfk-tooltip.apps-actiondatawidget-override-info-icon-tooltip-unsupported,.jfk-tooltip.apps-actiondatawidget-override-info-icon-tooltip-legacy{background-color:#727272;padding:7px 8px}.jfk-tooltip.apps-actiondatawidget-override-info-icon-tooltip{width:230px}.jfk-tooltip.apps-actiondatawidget-override-info-icon-tooltip-unsupported{width:182px}.jfk-tooltip.apps-actiondatawidget-override-info-icon-tooltip-legacy{width:190px}.apps-actiondatawidget-override-tooltip-text{line-height:17px}.apps-actiondatawidget-override-info-icon-tooltip .jfk-tooltip-arrowdown .jfk-tooltip-arrowimplafter{border-color:#727272 transparent}.apps-actiondatawidget-override-browser-behavior-msg{color:#c5dbff}.apps-navigationwidget{-ms-flex:1 1 auto;-webkit-flex:1 1 auto;flex:1 1 auto;display:inline-block;vertical-align:top;text-align:left;padding-top:4px;color:rgba(0,0,0,.87);outline:transparent}.apps-navigationwidget-item{min-height:33px;line-height:24px;padding:12px 1px 1px 24px}.apps-navigationwidget-item-selected{color:#1a73e8;font-weight:500;outline:1px solid transparent;outline-offset:-2px}.apps-navigationwidget-item-hover{cursor:pointer;background-color:#eee;outline:1px dotted transparent;outline-offset:-2px}.apps-navigationwidget-item-disabled{opacity:0.2}.appsAddonsCompanionContentholderEl{height:100%;position:relative;width:100%}.jfk-bubble{-webkit-box-shadow:0 1px 3px rgba(0,0,0,.2);-moz-box-shadow:0 1px 3px rgba(0,0,0,.2);box-shadow:0 1px 3px rgba(0,0,0,.2);background-color:#fff;border:1px solid;border-color:#bbb #bbb #a8a8a8;padding:16px;position:absolute;z-index:1201!important}.jfk-bubble-closebtn{background:url("//ssl.gstatic.com/ui/v1/icons/common/x_8px.png") no-repeat;border:1px solid transparent;height:21px;opacity:.4;outline:0;position:absolute;right:2px;top:2px;width:21px}.jfk-bubble-closebtn:focus{border:1px solid #4d90fe;opacity:.8}.jfk-bubble-arrow{position:absolute}.jfk-bubble-arrow .jfk-bubble-arrowimplbefore,.jfk-bubble-arrow .jfk-bubble-arrowimplafter{display:block;height:0;position:absolute;width:0}.jfk-bubble-arrow .jfk-bubble-arrowimplbefore{border:9px solid}.jfk-bubble-arrow .jfk-bubble-arrowimplafter{border:8px solid}.jfk-bubble-arrowdown{bottom:0}.jfk-bubble-arrowup{top:-9px}.jfk-bubble-arrowleft{left:-9px}.jfk-bubble-arrowright{right:0}.jfk-bubble-arrowdown .jfk-bubble-arrowimplbefore,.jfk-bubble-arrowup .jfk-bubble-arrowimplbefore{border-color:#bbb transparent;left:-9px}.jfk-bubble-arrowdown .jfk-bubble-arrowimplbefore{border-color:#a8a8a8 transparent}.jfk-bubble-arrowdown .jfk-bubble-arrowimplafter,.jfk-bubble-arrowup .jfk-bubble-arrowimplafter{border-color:#fff transparent;left:-8px}.jfk-bubble-arrowdown .jfk-bubble-arrowimplbefore{border-bottom-width:0}.jfk-bubble-arrowdown .jfk-bubble-arrowimplafter{border-bottom-width:0}.jfk-bubble-arrowup .jfk-bubble-arrowimplbefore{border-top-width:0}.jfk-bubble-arrowup .jfk-bubble-arrowimplafter{border-top-width:0;top:1px}.jfk-bubble-arrowleft .jfk-bubble-arrowimplbefore,.jfk-bubble-arrowright .jfk-bubble-arrowimplbefore{border-color:transparent #bbb;top:-9px}.jfk-bubble-arrowleft .jfk-bubble-arrowimplafter,.jfk-bubble-arrowright .jfk-bubble-arrowimplafter{border-color:transparent #fff;top:-8px}.jfk-bubble-arrowleft .jfk-bubble-arrowimplbefore{border-left-width:0}.jfk-bubble-arrowleft .jfk-bubble-arrowimplafter{border-left-width:0;left:1px}.jfk-bubble-arrowright .jfk-bubble-arrowimplbefore{border-right-width:0}.jfk-bubble-arrowright .jfk-bubble-arrowimplafter{border-right-width:0}.appsAddonsCompanionPromobubblePromobubblemanagerButton{float:right;margin-top:8px;padding:0}.appsAddonsCompanionPromobubblePromobubblemanagerBubble{outline:none}.companion-app-switcher-container .CSS_GSUITE_ADDONS_INSTALLATION_PROMO{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;background-color:#1a73e8;border-radius:8px;border-width:0;box-shadow:0 1px 2px 0 rgba(26,115,232,0.30),0 2px 6px 2px rgba(26,115,232,0.15);font-family:'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:.875rem;letter-spacing:.25px;padding:12px 16px 8px;width:288px}.CSS_GSUITE_ADDONS_INSTALLATION_PROMO .jfk-button{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#fff;font-family:'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:.875rem;font-weight:500;letter-spacing:.25px;line-height:20px;margin:0 -8px;padding:4px 8px}.CSS_GSUITE_ADDONS_INSTALLATION_PROMO .jfk-button::before{background:#fff;border-radius:4px;content:'';display:block;opacity:0;position:absolute;transform:scale(0);transition-duration:.15s;transition-timing-function:.15s;transition-property:transform,opacity;z-index:-1}.CSS_GSUITE_ADDONS_INSTALLATION_PROMO .jfk-button-disabled{color:rgba(60,64,67,0.38);cursor:default}.CSS_GSUITE_ADDONS_INSTALLATION_PROMO .jfk-button-disabled::before{opacity:0}.CSS_GSUITE_ADDONS_INSTALLATION_PROMO .jfk-button-hover::before{opacity:0.06;transform:scale(1)}.companion-app-switcher-container .CSS_GSUITE_ADDONS_INSTALLATION_PROMO .jfk-bubble-arrowimplbefore,.companion-app-switcher-container .CSS_GSUITE_ADDONS_INSTALLATION_PROMO .jfk-bubble-arrowimplafter{border-color:transparent #1a73e8}.CSS_GSUITE_ADDONS_TITLE{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#fff;font-family:'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:1rem;font-weight:500;line-height:24px;letter-spacing:.25px;margin:0;margin-bottom:4px}.CSS_GSUITE_ADDONS_CONTENT{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:rgba(255,255,255,0.902);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:.875rem;letter-spacing:.2px;line-height:20px}.appsAddonsHostGsmAppfindercontainerEl{align-items:center;display:flex;height:100%;justify-content:center;left:0;position:absolute;top:0;width:100%;z-index:6000}.appsAddonsHostGsmAppfindercontainerMask{background:#fff;height:100%;left:0;opacity:0.5;position:absolute;top:0;width:100%}.appsAddonsHostGsmAppfindercontainerContent{border-radius:4px;box-shadow:rgba(0,0,0,0.2) 0px 4px 16px;outline:none;overflow:hidden;position:relative;z-index:0}.appsAddonsHostGsmAppfindercontainerLoadingScreen{align-items:center;background:#fff;display:flex;height:100%;justify-content:center;left:0;position:absolute;top:0;width:100%}.appsAddonsHostGsmAppfindercontainerLoadingScreenCloseBtn{background:transparent;border:0;cursor:pointer;margin:16px;outline:none;padding:0;position:absolute;right:0;top:0}.appsAddonsHostGsmAppfindercontainerLoadingScreenCloseIcon{fill:#000;height:20px;opacity:0.54;width:20px}.CSS_ADD_ONS_SPINNER_CONTAINER{height:44px;overflow:hidden;position:relative;width:100%}.CSS_ADD_ONS_QUANTUM_SPINNER{height:28px;position:absolute;top:8px;width:28px}.CSS_ADD_ONS_QUANTUM_SPINNER.CSS_ADD_ONS_SPINNER_ACTIVE{animation:container-rotate 1568ms linear infinite}.CSS_ADD_ONS_SPINNER_VCENTER{align-self:center}.CSS_ADD_ONS_SPINNER_LAYER{position:absolute;width:100%;height:100%;opacity:0}.CSS_ADD_ONS_SPINNER_BLUE{border-color:#4285f4}.CSS_ADD_ONS_SPINNER_RED{border-color:#db4437}.CSS_ADD_ONS_SPINNER_YELLOW{border-color:#f4b400}.CSS_ADD_ONS_SPINNER_GREEN{border-color:#0f9d58}.CSS_ADD_ONS_SPINNER_ACTIVE .CSS_ADD_ONS_SPINNER_LAYER.CSS_ADD_ONS_SPINNER_BLUE{animation:fill-unfill-rotate 5332ms cubic-bezier(0.4,0.0,0.2,1) infinite both,blue-fade-in-out 5332ms cubic-bezier(0.4,0.0,0.2,1) infinite both}.CSS_ADD_ONS_SPINNER_ACTIVE .CSS_ADD_ONS_SPINNER_LAYER.CSS_ADD_ONS_SPINNER_RED{animation:fill-unfill-rotate 5332ms cubic-bezier(0.4,0.0,0.2,1) infinite both,red-fade-in-out 5332ms cubic-bezier(0.4,0.0,0.2,1) infinite both}.CSS_ADD_ONS_SPINNER_ACTIVE .CSS_ADD_ONS_SPINNER_LAYER.CSS_ADD_ONS_SPINNER_YELLOW{animation:fill-unfill-rotate 5332ms cubic-bezier(0.4,0.0,0.2,1) infinite both,yellow-fade-in-out 5332ms cubic-bezier(0.4,0.0,0.2,1) infinite both}.CSS_ADD_ONS_SPINNER_ACTIVE .CSS_ADD_ONS_SPINNER_LAYER.CSS_ADD_ONS_SPINNER_GREEN{animation:fill-unfill-rotate 5332ms cubic-bezier(0.4,0.0,0.2,1) infinite both,green-fade-in-out 5332ms cubic-bezier(0.4,0.0,0.2,1) infinite both}.CSS_ADD_ONS_SPINNER_GAP_PATCH{position:absolute;box-sizing:border-box;top:0;width:10%;height:100%;overflow:hidden;border-color:inherit}.CSS_ADD_ONS_SPINNER_GAP_PATCH .CSS_ADD_ONS_SPINNER_CIRCLE{width:1000%}.CSS_ADD_ONS_CIRCLE_CLIPPER{display:inline-block;position:relative;width:50%;height:100%;overflow:hidden;border-color:inherit}.CSS_ADD_ONS_CIRCLE_CLIPPER .CSS_ADD_ONS_SPINNER_CIRCLE{width:200%}.CSS_ADD_ONS_SPINNER_CIRCLE{box-sizing:border-box;height:100%;border-width:3px;border-style:solid;border-color:inherit;border-bottom-color:transparent;border-radius:50%;animation:none}.CSS_ADD_ONS_CIRCLE_CLIPPER.CSS_ADD_ONS_SPINNER_LEFT .CSS_ADD_ONS_SPINNER_CIRCLE{-webkit-transform:rotate(129deg);transform:rotate(129deg)}.CSS_ADD_ONS_CIRCLE_CLIPPER.CSS_ADD_ONS_SPINNER_RIGHT .CSS_ADD_ONS_SPINNER_CIRCLE{-webkit-transform:rotate(-129deg);transform:rotate(-129deg)}.CSS_ADD_ONS_SPINNER_FIT{position:absolute;top:0;bottom:0;right:0;left:0}@keyframes white-fade-in-out{from{opacity:1}25%{opacity:1}26%{opacity:0}89%{opacity:0}90%{opacity:1}100%{opacity:1}}@-webkit-keyframes white-fade-in-out{from{opacity:1}25%{opacity:1}26%{opacity:0}89%{opacity:0}90%{opacity:1}100%{opacity:1}}@keyframes container-rotate{to{transform:rotate(360deg)}}@-webkit-keyframes container-rotate{to{transform:rotate(360deg)}}@keyframes fill-unfill-rotate{12.5%{transform:rotate(135deg)}25%{transform:rotate(270deg)}37.5%{transform:rotate(405deg)}50%{transform:rotate(540deg)}62.5%{transform:rotate(675deg)}75%{transform:rotate(810deg)}87.5%{transform:rotate(945deg)}to{transform:rotate(1080deg)}}@-webkit-keyframes fill-unfill-rotate{12.5%{transform:rotate(135deg)}25%{transform:rotate(270deg)}37.5%{transform:rotate(405deg)}50%{transform:rotate(540deg)}62.5%{transform:rotate(675deg)}75%{transform:rotate(810deg)}87.5%{transform:rotate(945deg)}to{transform:rotate(1080deg)}}@keyframes blue-fade-in-out{from{opacity:1}25%{opacity:1}26%{opacity:0}89%{opacity:0}90%{opacity:1}100%{opacity:1}}@-webkit-keyframes blue-fade-in-out{from{opacity:1}25%{opacity:1}26%{opacity:0}89%{opacity:0}90%{opacity:1}100%{opacity:1}}@keyframes red-fade-in-out{from{opacity:0}15%{opacity:0}25%{opacity:1}50%{opacity:1}51%{opacity:0}}@-webkit-keyframes red-fade-in-out{from{opacity:0}15%{opacity:0}25%{opacity:1}50%{opacity:1}51%{opacity:0}}@keyframes yellow-fade-in-out{from{opacity:0}40%{opacity:0}50%{opacity:1}75%{opacity:1}76%{opacity:0}}@-webkit-keyframes yellow-fade-in-out{from{opacity:0}40%{opacity:0}50%{opacity:1}75%{opacity:1}76%{opacity:0}}@keyframes green-fade-in-out{from{opacity:0}65%{opacity:0}75%{opacity:1}90%{opacity:1}100%{opacity:0}}@-webkit-keyframes green-fade-in-out{from{opacity:0}65%{opacity:0}75%{opacity:1}90%{opacity:1}100%{opacity:0}}.CSS_ADD_ONS_QUANTUM_SPINNER{left:50%;margin-left:-14px}.CSS_ADD_ONS_SPINNER_GAP_PATCH{left:45%}.CSS_ADD_ONS_SPINNER_GAP_PATCH .CSS_ADD_ONS_SPINNER_CIRCLE{left:-450%}.CSS_ADD_ONS_CIRCLE_CLIPPER.CSS_ADD_ONS_SPINNER_LEFT .CSS_ADD_ONS_SPINNER_CIRCLE{border-right-color:transparent}.CSS_ADD_ONS_CIRCLE_CLIPPER.CSS_ADD_ONS_SPINNER_RIGHT .CSS_ADD_ONS_SPINNER_CIRCLE{left:-100%;border-left-color:transparent}.CSS_ADD_ONS_SPINNER_ACTIVE .CSS_ADD_ONS_CIRCLE_CLIPPER.CSS_ADD_ONS_SPINNER_LEFT .CSS_ADD_ONS_SPINNER_CIRCLE{animation:left-spin 1333ms cubic-bezier(0.4,0.0,0.2,1) infinite both}.CSS_ADD_ONS_SPINNER_ACTIVE .CSS_ADD_ONS_CIRCLE_CLIPPER.CSS_ADD_ONS_SPINNER_RIGHT .CSS_ADD_ONS_SPINNER_CIRCLE{animation:right-spin 1333ms cubic-bezier(0.4,0.0,0.2,1) infinite both}@keyframes left-spin{from{transform:rotate(130deg)}50%{transform:rotate(-5deg)}to{transform:rotate(130deg)}}@-webkit-keyframes left-spin{from{transform:rotate(130deg)}50%{transform:rotate(-5deg)}to{transform:rotate(130deg)}}@keyframes right-spin{from{transform:rotate(-130deg)}50%{transform:rotate(5deg)}to{transform:rotate(-130deg)}}@-webkit-keyframes right-spin{from{transform:rotate(-130deg)}50%{transform:rotate(5deg)}to{transform:rotate(-130deg)}}.CSS_ADD_ONS_ELLIPSES{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.add-on-host-container,.add-on-host-content,.add-on-host-failure,.add-on-host-client-not-supported,.add-on-host-loading,.add-on-host-offline{height:100%;width:100%}.add-on-host-container{outline:none;position:relative}.add-on-host-content,.add-on-host-extra-content-container{bottom:0;left:0;outline:none;position:absolute}.add-on-host-content{outline:none;position:absolute}.add-on-host-non-content-wrapper{display:flex;flex-direction:column;height:100%}.add-on-host-non-content-wrapper.isHidden{visibility:hidden}.add-on-host-views-container{flex:1 1 auto;position:relative}.add-on-host-failure,.add-on-host-client-not-supported,.add-on-host-loading,.add-on-host-offline{align-items:center;background:#fff;display:flex;flex-direction:column;justify-content:center;position:absolute;text-align:center}.add-on-host-screen{align-items:center;box-sizing:border-box;display:flex;flex-direction:column;height:100%;justify-content:center;padding:16px;text-align:center;width:100%}.add-on-host-screen-image{width:75px;height:75px}.add-on-host-screen-svg{fill:#5f6368}.add-on-host-screen-primary-message{color:#5f6368;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:16px;font-weight:500;height:48px;letter-spacing:0.2px;line-height:24px;margin:40px 0 0 0}.add-on-host-screen-secondary-message{color:#5f6368;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:12px;height:32px;letter-spacing:0.3px;line-height:16px}.add-on-host-clickable{color:#4285f4;cursor:pointer;font-size:inherit;outline:none;background:transparent;border:none}.add-on-host-retry{bottom:48px;position:absolute;text-transform:uppercase}.add-on-host-loading.add-on-host-loading-hidden{visibility:hidden}.add-on-host-offline-snack-bar{background:#202124;bottom:0;color:#fff;height:112px;position:fixed;transition:transform .218s ease-in-out;width:100%;z-index:99999}.add-on-host-offline-snack-bar.add-on-host-offline-snack-bar-hidden{transform:translate(0,120%)}.add-on-host-offline-snack-bar-content__description{font-family:Roboto,Arial,sans-serif;font-size:14px;letter-spacing:0.2px;line-height:20px;margin:24px 24px 0;vertical-align:top}.add-on-host-offline-snack-bar-content__btn{background:#202124;border:none;color:#fff;cursor:pointer;font-family:Roboto,Arial,sans-serif;font-size:16px;letter-spacing:0.2px;line-height:16px;margin:5px 16px 12px 218px;outline:none;padding:8px;vertical-align:top}.add-on-host-headerbar.companion-shell-header{border:none;height:40px;padding:0 16px}.add-on-host-headerbar .companion-shell-header-element.companion-shell-title-container{line-height:20px}.add-on-host-headerbar .companion-shell-title-text.companion-shell-title-big{font-size:16px}.add-on-host-headerbar .companion-shell-header-element.companion-shell-close-button{align-items:center;display:flex;height:32px;justify-content:center;margin:0;width:32px}.add-on-host-headerbar .companion-shell-header-svg-icon{width:20px;height:20px}.add-on-host-headerbar.companion-shell-header.add-on-host-headerbar-companion-style{height:64px;padding:0 10px}.add-on-host-headerbar.add-on-host-headerbar-companion-style .companion-shell-header-element.companion-shell-close-button{width:40px;height:40px}.docs-material-button{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:box-shadow 0.28s cubic-bezier(0.4,0.0,0.2,1);-moz-transition:box-shadow 0.28s cubic-bezier(0.4,0.0,0.2,1);-o-transition:box-shadow 0.28s cubic-bezier(0.4,0.0,0.2,1);transition:box-shadow 0.28s cubic-bezier(0.4,0.0,0.2,1);border-radius:2px;border:none;cursor:pointer;display:inline-block;font:500 13px Roboto,RobotoDraft,Helvetica,Arial,sans-serif;height:32px;line-height:32px;margin:0 4px;overflow:hidden;outline:none;position:relative;text-align:center;text-transform:uppercase;vertical-align:middle}.docs-material-button-content{position:relative}.docs-material-button-ripple-element{border-radius:50%;left:50%;opacity:0;padding-bottom:200%;position:absolute;top:50%;transition:transform 0s linear 0.2s,opacity 0.2s ease-in;width:200%}.docs-material-button-ripple-effect>.docs-material-button-ripple-element{-webkit-transform:translate(-50%,-50%) scale(1);-moz-transform:translate(-50%,-50%) scale(1);-ms-transform:translate(-50%,-50%) scale(1);-o-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1);opacity:1;transition:transform 0.35s ease-out,opacity 0s linear;visibility:visible}.docs-material-button-disabled{box-shadow:none;cursor:default}.docs-material-button-flat-primary,.docs-material-button-flat-default,.docs-material-button-flat-dark{background-color:transparent;padding:0 8px}.docs-material-button-raised-primary,.docs-material-button-raised-default{padding:0 16px}.docs-material-button-hover.docs-material-button-raised-primary,.docs-material-button-hover.docs-material-button-raised-default{box-shadow:0px 2px 2px 0px rgba(0,0,0,0.14),0px 3px 1px -2px rgba(0,0,0,0.12),0px 1px 5px 0px rgba(0,0,0,0.2)}.docs-material-button-active.docs-material-button-raised-primary,.docs-material-button-active.docs-material-button-raised-default{box-shadow:0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12),0px 2px 4px -1px rgba(0,0,0,0.2)}.docs-material-button-raised-primary{background-color:#4285f4;color:#fff}.docs-material-button-flat-primary{color:#4285f4}.docs-material-button-flat-default{color:rgba(0,0,0,0.54)}.docs-material-button-flat-dark{color:#fff}.docs-material-button-hover.docs-material-button-flat-primary{background-color:rgba(66,133,244,.12)}.docs-material-button-hover.docs-material-button-flat-dark{background-color:rgba(256,256,256,0.1)}.docs-material-button-active.docs-material-button-flat-primary{color:#3367d6}.docs-material-button-raised-primary.docs-material-button-focused{border:1px inset rgba(0,0,0,0.38);background:#3b78e7;line-height:30px;padding:0 15px}.docs-material-button-raised-default.docs-material-button-focused{border:1px solid #4285f4;line-height:30px;padding:0 15px}.docs-material-button-flat-primary.docs-material-button-focused,.docs-material-button-flat-default.docs-material-button-focused{border:1px solid #4285f4;line-height:30px;padding:0 7px}.docs-material-button-flat-dark.docs-material-button-focused{border:1px solid #fff;line-height:30px;padding:0 7px}.docs-material-button.docs-material-button-focused.docs-material-button-no-focus-border{border:none;line-height:32px}.docs-material-button-raised-primary.docs-material-button-focused.docs-material-button-no-focus-border,.docs-material-button-raised-default.docs-material-button-focused.docs-material-button-no-focus-border{padding:0 16px}.docs-material-button-flat-primary.docs-material-button-focused.docs-material-button-no-focus-border,.docs-material-button-flat-default.docs-material-button-focused.docs-material-button-no-focus-border,.docs-material-button-flat-dark.docs-material-button-focused.docs-material-button-no-focus-border{padding:0 8px}.docs-material-button-focused{outline:1px dotted transparent;outline-offset:-4px}.docs-material-button-hover.docs-material-button-flat-default{background-color:rgba(0,0,0,0.12)}.docs-material-button-active.docs-material-button-flat-default{color:rgba(0,0,0,0.87)}.docs-material-button-raised-default{background-color:rgba(0,0,0,.04);color:rgba(0,0,0,0.54)}.docs-material-button-active.docs-material-button-raised-default{color:rgba(0,0,0,0.87)}.docs-material-button-disabled.docs-material-button-flat-primary,.docs-material-button-disabled.docs-material-button-flat-default,.docs-material-button-disabled.docs-material-button-raised-default{background-color:#fff;color:rgba(0,0,0,0.26)}.docs-material-button-disabled.docs-material-button-flat-dark{color:rgba(255,255,255,0.30)}.docs-material-button-disabled.docs-material-button-raised-primary{background-color:rgba(0,0,0,0.12);color:#fff}.docs-material-button-flat-primary>.docs-material-button-ripple-element{background-color:rgba(66,133,244,.32)}.docs-material-button-raised-primary>.docs-material-button-ripple-element{background-color:#3367d6}.docs-material-button-flat-default>.docs-material-button-ripple-element{background-color:rgba(0,0,0,.2)}.docs-material-button-flat-dark>.docs-material-button-ripple-element{background-color:rgba(256,256,256,0.24)}.docs-material-button-raised-default>.docs-material-button-ripple-element{background-color:rgba(0,0,0,0.12)}.docs-material-button-hairline-primary.docs-material-button{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:white;border:1px solid #dadce0!important;color:#188038;text-transform:none}.docs-material-button-hairline-default.docs-material-button{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:white;border:1px solid #dadce0!important;color:#188038;color:#5f6368;text-transform:none}.docs-material-button-hairline-default.docs-material-button-hover,.docs-material-button-hairline-primary.docs-material-button-hover{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#f8fcf9;border:1px solid #c8e7d1!important}.docs-material-button-hairline-default.docs-material-button-focused,.docs-material-button-hairline-primary.docs-material-button-focused,.docs-material-button-hairline-default.docs-material-button-focused.docs-material-button-no-focus-border,.docs-material-button-hairline-primary.docs-material-button-focused.docs-material-button-no-focus-border{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#e7f5eb;border:1px solid #bbe2c6!important}.docs-material-button-hairline-default.docs-material-button-hover.docs-material-button-focused,.docs-material-button-hairline-primary.docs-material-button-hover.docs-material-button-focused{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#dff2e4;border:1px solid #b5e0c1!important}.docs-material-button-hairline-default.docs-material-button-active,.docs-material-button-hairline-primary.docs-material-button-active{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#dff2e4;border:1px solid transparent!important;box-shadow:0 2px 6px 2px rgba(60,64,67,.15)}.docs-material-button-hairline-default.docs-material-button-disabled,.docs-material-button-hairline-primary.docs-material-button-disabled{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:white;border:1px solid #f1f3f4!important;color:#3c4043;opacity:0.38}.docs-material-button-fill-primary.docs-material-button{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff}.docs-material-button-fill-primary.docs-material-button-hover{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;background:#2a8947;box-shadow:0 1px 3px 1px rgba(52,168,83,0.15)}.docs-material-button-fill-primary.docs-material-button-focused,.docs-material-button-fill-primary.docs-material-button-focused.docs-material-button-no-focus-border{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;background:#4f9e67;box-shadow:0 1px 3px 1px rgba(52,168,83,0.15)}.docs-material-button-fill-primary.docs-material-button-hover.docs-material-button-focused{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;background:#62a877;box-shadow:0 1px 3px 1px rgba(52,168,83,0.15)}.docs-material-button-fill-primary.docs-material-button-active{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;background:#62a877;box-shadow:0 2px 6px 2px rgba(52,168,83,0.15)}.docs-material-button-fill-primary.docs-material-button-disabled{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;background:#f1f3f4;color:#3c4043;opacity:0.38}div.CSS_SHORTCUTS_HELP_POPUP{left:10%;width:80%;top:10%;z-index:1002;color:#fff;position:fixed;text-align:center;text-shadow:#000 1px 1px 7px;font-weight:bold;background:#000 none repeat scroll 0;overflow:hidden}@media print{div.CSS_SHORTCUTS_HELP_POPUP{display:none!important}}div.CSS_SHORTCUTS_HELP_POPUP_CONTAINER{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;max-height:inherit;overflow:auto;padding:1em}table.CSS_SHORTCUTS_HELP_POPUP_HEADER,table.CSS_SHORTCUTS_HELP_POPUP_CONTENT{width:100%}.CSS_SHORTCUTS_HELP_POPUP_HEADER_TABLE_ELEMENT{padding-bottom:0.8ex}.CSS_SHORTCUTS_HELP_POPUP_TITLE{font-size:15px;white-space:nowrap;text-align:left}.CSS_SHORTCUTS_HELP_POPUP_TEAROFF_LINK_CONTAINER{color:#dd0;text-align:right}.CSS_SHORTCUTS_HELP_POPUP_TEAROFF_LINK_WRAPPER{position:absolute;top:0;right:0;padding-right:32px;padding-top:16px}.CSS_SHORTCUTS_HELP_CLOSE_PLACEHOLDER{height:11px;width:11px;padding:6px;margin:24px}.CSS_SHORTCUTS_HELP_POPUP_TEAROFF_LINK{font-size:15px;cursor:pointer;text-decoration:underline;color:#dd0}table.CSS_SHORTCUTS_HELP_POPUP_CONTENT{border-top:1px solid #999;font-size:13px}.CSS_SHORTCUTS_HELP_POPUP_CONTENT_HEADER{color:#dd0;padding-top:1em;text-align:left}.CSS_SHORTCUTS_HELP_POPUP_CONTENT_ELEMENT{vertical-align:top;padding-top:0.15em}table.CSS_SHORTCUTS_HELP_POPUP_CONTENT td.CSS_SHORTCUTS_HELP_POPUP_KEY{font-weight:bold;padding-right:0.5em;text-align:right;white-space:nowrap}table.CSS_SHORTCUTS_HELP_POPUP_CONTENT td.CSS_SHORTCUTS_HELP_POPUP_DESCRIPTION{font-weight:normal;text-align:left}span.CSS_SHORTCUTS_HELP_POPUP_KEY_MNEMONIC{font-family:"Courier New";color:#dd0}.CSS_SHORTCUTS_HELP_POPUP_PREF_CONTAINER{border-top:1px solid #999;padding:.5em 0}.CSS_SHORTCUTS_HELP_POPUP_PREF_CONTENT{background:#dd0;color:#000;padding:3px 7px;text-align:left;font-size:13px;text-shadow:none}.CSS_SHORTCUTS_HELP_POPUP_PREF_ENABLED .CSS_SHORTCUTS_HELP_POPUP_PREF_CONTENT{background:none;color:#fff}.CSS_SHORTCUTS_HELP_POPUP_PREF_LINK{cursor:pointer;text-decoration:underline}.CSS_SHORTCUTS_HELP_POPUP_PREF_ENABLED .CSS_SHORTCUTS_HELP_POPUP_PREF_LINK{color:#dd0}.shortcuts-modalpopup-bg{display:none;left:0;top:0;position:absolute}@keyframes spin-clockwise{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.docs-save-indicator-animated{animation:spin-clockwise 2s linear infinite;transform-origin:center}.docs-gm .docs-save-indicator .docs-icon{margin:3px}.docs-gm .docs-save-indicator{border-radius:4px;font-size:12px;color:#5f6368;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500}.docs-gm .docs-save-indicator:hover{background-color:#f1f3f4}.docs-gm .docs-save-indicator:active,.docs-gm .docs-save-indicator.docs-save-indicator-selected{background-color:#e6f4ea;color:#188038}.docs-gm .docs-save-indicator-caption{padding-left:3px;padding-right:5px;vertical-align:middle}.docs-save-indicator-container{vertical-align:top;margin-top:1px}.docs-save-indicator-container .goog-control{outline:none;cursor:pointer}.docs-save-indicator.docs-save-indicator-unsaved-changes{background-color:#fce8e6;color:#d93025}.docs-save-indicator.docs-save-indicator-unsaved-changes:hover{background-color:#fadfdd;color:#d93025}.docs-save-indicator.docs-save-indicator-unsaved-changes:active,.docs-save-indicator.docs-save-indicator-unsaved-changes.docs-save-indicator-selected{background-color:#f5cfce;color:#d93025}.docs-save-indicator-popup{min-width:320px;max-width:420px}.docs-save-indicator-popup.jfk-bubble{outline:none;padding-left:35px}.docs-save-indicator-popup .jfk-bubble-arrow{display:none}.docs-gm .docs-save-indicator-popup-header{padding:0;background-color:#e6f4ea;min-height:40px}.docs-gm .docs-save-indicator-popup-footer{padding:12px 16px 12px 16px}.docs-gm .docs-save-indicator-popup-title-container{padding:0 16px;display:flex;align-items:center}.docs-material .docs-save-indicator-popup-title{font-size:14px;font-weight:500;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;margin:10px 0;color:#188038;width:fit-content}.docs-gm .docs-save-indicator-popup-subtitle-container{padding:0 0 12px}.docs-gm .docs-material .docs-save-indicator-popup-icon,.docs-gm .docs-material .docs-save-indicator-popup-subtitle-icon{margin-right:10px;min-width:24px;height:24px}.docs-save-indicator-popup-subtitle{font-size:12px;font-weight:500;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;color:#3c4043}.docs-save-indicator-popup-text{font-size:12px;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;color:#3c4043;line-height:16px;padding:0 0 12px;max-width:fit-content}.docs-gm .docs-save-indicator-popup.jfk-bubble{padding:0;overflow:hidden;border:0;border-radius:4px}.docs-save-indicator-popup .docs-material-button.docs-save-indicator-popup-button{margin-bottom:12px;margin-left:0px;text-transform:none;height:24px;padding:4px 12px}.docs-save-indicator-unsaved-changes .docs-save-indicator-popup-header{background-color:#fce8e6}.docs-save-indicator-unsaved-changes .docs-save-indicator-popup-title{color:#d93025}.docs-save-indicator-unsaved-changes .docs-save-indicator-popup-button{background-color:#d93025}.docs-save-indicator-unsaved-changes .docs-save-indicator-popup-button.docs-material-button-hover,.docs-save-indicator-unsaved-changes .docs-save-indicator-popup-button.docs-material-button-focused{background-color:#db4036}.docs-save-indicator-unsaved-changes .docs-save-indicator-popup-button.docs-material-button-active{background-color:#e5716a}.docs-save-indicator-unsaved-changes .docs-save-indicator-popup-button.docs-material-button-disabled{background-color:#f1f3f4}.jfk-bubble.jfk-bubble-promo.docs-promo-bubble.docs-save-indicator-promo{box-shadow:0px 2px 6px 2px rgba(26,115,232,0.15);background-color:#188038;border-radius:8px;margin-top:4px;width:262px}.docs-save-indicator-promo .docs-promo-container{padding:16px}.jfk-bubble.jfk-bubble-promo.docs-promo-bubble.docs-save-indicator-promo .jfk-bubble-arrowup .jfk-bubble-arrowimplbefore{border-color:transparent}.jfk-bubble.jfk-bubble-promo.docs-promo-bubble.docs-save-indicator-promo .jfk-bubble-arrowup .jfk-bubble-arrowimplafter{border-color:#188038 transparent}.docs-save-indicator-promo .docs-promo-text-container{width:auto}.docs-save-indicator-promo .docs-promo-header{color:#fff;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:16px;font-weight:500;opacity:1}.docs-save-indicator-promo .docs-promo-body{color:#fff;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;padding:4px 0}.docs-save-indicator-promo .docs-promo-action-container{color:#fff;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;margin:0 0 0 20px;text-transform:none}.docs-save-indicator-promo .docs-promo-action-container:focus{outline-color:#fff}.docs-save-indicator-promo .docs-promo-action-row{padding:0}.docs-companion-app-switcher-container{background-color:white;border-top:1px solid #d9d9d9;box-sizing:border-box;height:calc(100% - 60px);position:absolute;right:0;top:60px;width:56px;z-index:1}.docs-companion-app-switcher-container.docs-companion-app-switcher-container-collapsed{width:0;z-index:1001}.docs-material.docs-companion-app-switcher-container{height:calc(100% - 64px);top:64px}.docs-material.docs-companion-app-switcher-container.docs-companion-app-switcher-container-collapsed{width:0}.docs-companion-app-switcher-container.docs-app-switcher-container-hidden{display:none}.companion-about-panel-button.app-switcher-button{bottom:0;position:absolute}.companion-about-panel-menu-header,.companion-about-panel-menu-text{color:#3c4043}.companion-about-panel-menu-header{font-size:18px;font-weight:500;line-height:24px;padding:6px 24px 2px}.companion-about-panel-menu-separator{border-top:1px solid #f1f3f4;margin:8px 0}.companion-about-panel-menu-item{border:none;cursor:pointer;height:48px;padding:0}.companion-about-panel-menu-item-highlight{background:#f1f3f4}.companion-about-panel-menu-item-icon-container{height:20px;padding:14px 16px 14px 24px;position:absolute;width:20px}.companion-about-panel-menu-item-disabled .companion-about-panel-menu-item-icon{fill:#dadce0}.companion-about-panel-menu-text{font-size:14px;letter-spacing:.2px;line-height:20px;padding:13px 24px 11px 60px}.companion-about-panel-menu-item-disabled .companion-about-panel-menu-text{color:#dadce0;cursor:default}.companion-app-switcher-container{background-color:white;border-left:1px solid #dadce0;box-sizing:border-box;display:flex;flex-direction:column;height:100%;position:relative;width:56px}.companion-app-switcher-guest-container{display:flex;flex:1 0 auto;flex-direction:column;margin-bottom:56px}.companion-app-switcher-add-on-container{display:flex;flex:0 1 100%;flex-direction:column;overflow:hidden;padding-top:16px}.companion-app-switcher-separator,.companion-app-switcher-add-on-container::before{border-top:1px solid #dadce0;content:'';display:block;flex:1 0 auto;margin:0 auto;padding-bottom:16px;width:20px}.companion-app-switcher-separator{margin-top:16px}.companion-theme-dark.companion-app-switcher-container,.companion-theme-light.companion-app-switcher-container{background-color:transparent}.companion-theme-dark.companion-app-switcher-container,.companion-theme-dark .companion-app-switcher-separator,.companion-theme-dark .companion-app-switcher-add-on-container::before{border-color:rgba(255,255,255,.12)}.companion-theme-light.companion-app-switcher-container,.companion-theme-light .companion-app-switcher-separator,.companion-theme-light .companion-app-switcher-add-on-container::before{border-color:rgba(100,121,143,.12)}.companion-guest-app-switcher{flex-grow:1;height:100px;outline:none;overflow:hidden}.companion-app-switcher-loading-indicator{padding:16px 0}.companion-app-switcher-loading-indicator-dot{-webkit-animation:dotLoadingAnimation 1.0s infinite ease-in-out both;animation:dotLoadingAnimation 1.0s infinite ease-in-out both;height:8px;background-color:#757575;border-radius:50%;margin:0 auto 12px;width:8px}.companion-theme-dark .companion-app-switcher-loading-indicator-dot{background-color:#fff}.companion-app-switcher-loading-indicator-dot:last-child{margin-bottom:0}.companion-app-switcher-loading-indicator-dot-1{-webkit-animation-delay:-0.5s;animation-delay:-0.5s}.companion-app-switcher-loading-indicator-dot-2{-webkit-animation-delay:-0.25s;animation-delay:-0.25s}@-webkit-keyframes dotLoadingAnimation{0%,80%,100%{opacity:0.5}40%{opacity:1.0}}@keyframes dotLoadingAnimation{0%,80%,100%{opacity:0.5}40%{opacity:1.0}}.app-switcher-button{cursor:pointer;height:56px;outline:none;pointer-events:none;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1);width:56px}.app-switcher-button-disabled{cursor:default;opacity:.38}.app-switcher-button-focused .app-switcher-button-icon-background,.app-switcher-button-focused.app-switcher-button-hover .app-switcher-button-icon-background,.companion-theme-light .app-switcher-button-hover .app-switcher-button-icon-background,.companion-theme-light .app-switcher-button-open .app-switcher-button-icon-background,.companion-theme-light .app-switcher-button-selected.app-switcher-button-hover .app-switcher-button-icon-background{background-color:#e8eaed}.app-switcher-button-hover .app-switcher-button-icon-background,.app-switcher-button-open .app-switcher-button-icon-background,.companion-theme-light .app-switcher-button-selected .app-switcher-button-icon-background,.companion-theme-light .app-switcher-button-focused .app-switcher-button-icon-background{background-color:#f1f3f4}.companion-theme-dark .app-switcher-button-selected .app-switcher-button-icon-background,.companion-theme-dark .app-switcher-button-focused .app-switcher-button-icon-background{background-color:rgba(255,255,255,.24)}.companion-theme-dark .app-switcher-button-hover .app-switcher-button-icon-background,.companion-theme-dark .app-switcher-button-open .app-switcher-button-icon-background,.companion-theme-dark .app-switcher-button-selected.app-switcher-button-hover .app-switcher-button-icon-background{background-color:rgba(255,255,255,.12)}.app-switcher-button-icon-container{background-color:transparent;background-repeat:no-repeat;background-position:center;background-size:20px 20px;border-radius:50%;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;height:40px;left:8px;pointer-events:auto;position:absolute;top:8px;transition:all .3s cubic-bezier(.4,0,.2,1);width:40px}.app-switcher-button-icon-background{border-radius:50%;display:-webkit-flex;display:flex;height:40px;left:8px;position:absolute;top:8px;transition:all .3s cubic-bezier(.4,0,.2,1);width:40px}.app-switcher-button-icon{display:block;fill:#5f6368;margin:auto;transition:all .3s cubic-bezier(.4,0,.2,1)}.companion-theme-dark .app-switcher-button-icon{fill:#fff}.app-switcher-button-presence .app-switcher-button-icon-background.app-switcher-button-icon-background-inner{-webkit-animation:presence-scale-inner 3s cubic-bezier(0.05,0.69,0.67,1) infinite normal;animation:presence-scale-inner 3s cubic-bezier(0.05,0.69,0.67,1) infinite normal;height:calc(40px - 8px);width:calc(40px - 8px);left:calc((8px/2) + 8px);top:calc((8px/2) + 8px)}.app-switcher-button-presence .app-switcher-button-icon-background.app-switcher-button-icon-background-outer{-webkit-animation:presence-scale-outer 3s cubic-bezier(0.05,0.69,0.67,1) infinite normal;animation:presence-scale-outer 3s cubic-bezier(0.05,0.69,0.67,1) infinite normal;background-color:transparent;border-style:solid;border-width:calc(8px/2);height:40px;width:40px;left:calc(8px - (8px/2));top:calc(8px - (8px/2))}.app-switcher-button-inksplash .app-switcher-button-icon-background.app-switcher-button-icon-background-inner{-webkit-animation:inksplash-scale-background 2s cubic-bezier(0.05,0.69,0.67,1) infinite normal;animation:inksplash-scale-background 2s cubic-bezier(0.05,0.69,0.67,1) infinite normal}.app-switcher-button-inksplash .app-switcher-button-icon-container{-webkit-animation:inksplash-scale-icon 2s cubic-bezier(0.05,0.69,0.67,1) infinite normal;animation:inksplash-scale-icon 2s cubic-bezier(0.05,0.69,0.67,1) infinite normal}@keyframes presence-scale-inner{0%{opacity:0;transform:scale(0.57);visibility:hidden}15%{opacity:0;transform:scale(0.57);visibility:visible}35%{opacity:1;transform:scale(1)}60%{opacity:0;transform:scale(0.57)}100%{opacity:0;transform:scale(0.57);visibility:hidden}}@keyframes presence-scale-outer{0%{opacity:0;transform:scale(0.75);visibility:hidden}34%{opacity:0;transform:scale(0.75);visibility:visible}36%{opacity:0.99}65%{opacity:1}90%{transform:scale(1)}100%{opacity:0;transform:scale(1);visibility:hidden}}@keyframes inksplash-scale-background{0%{opacity:0;transform:scale(0.00)}35%{opacity:0;transform:scale(0.40)}50%{opacity:1}80%{transform:scale(2.05)}100%{opacity:0;transform:scale(0.00)}}@keyframes inksplash-scale-icon{0%{transform:scale(1.00)}20%{transform:scale(1.00)}30%{transform:scale(1.10)}40%{transform:scale(1.00)}100%{transform:scale(1.00)}}.app-switcher-menu{background:#fff;border:1px solid rgba(0,0,0,.2);border-radius:8px;box-shadow:0 1px 2px 0 rgba(60,64,67,.30),0 2px 6px 2px rgba(60,64,67,.15);min-width:180px;outline:none;overflow-y:auto;padding:8px 0;position:absolute;z-index:1202}.companion-collapser-button-container{bottom:0;display:-webkit-flex;display:flex;height:56px;overflow:hidden;position:absolute;right:0;width:56px}.companion-collapser-button-container.companion-collapser-button-container-elevated{margin-bottom:24px}.companion-collapser-button{bottom:0}.companion-collapser-button .app-switcher-button-icon-container,.companion-collapser-button .app-switcher-button-icon-background{border-radius:calc(56px - 8px - 10px)}.companion-collapser-button.app-switcher-button-checked .app-switcher-button-icon-background,.companion-theme-light .companion-collapser-button.app-switcher-button-checked .app-switcher-button-icon-background{background-color:#fff}.companion-collapser-button.app-switcher-button-checked.app-switcher-button-hover .app-switcher-button-icon-background,.companion-theme-light .companion-collapser-button.app-switcher-button-checked.app-switcher-button-hover .app-switcher-button-icon-background{background-color:#f1f3f4}.companion-theme-dark .companion-collapser-button.app-switcher-button-checked .app-switcher-button-icon-background{background-color:#595959}.companion-collapser-button.app-switcher-button-checked.app-switcher-button-focused .app-switcher-button-icon-background,.companion-theme-light .companion-collapser-button.app-switcher-button-checked.app-switcher-button-focused .app-switcher-button-icon-background{background-color:#e8eaed}.companion-collapser-button.app-switcher-button-checked{right:-24px}.companion-collapser-button.app-switcher-button-checked .app-switcher-button-icon-container,.companion-collapser-button.app-switcher-button-checked .app-switcher-button-icon-background{border-bottom-right-radius:0;border-top-right-radius:0;height:20px;left:0;margin:8px 0 8px 8px;padding:10px 0 10px 10px;top:0;width:calc(56px - 8px - 10px)}.companion-collapser-button.app-switcher-button-checked .app-switcher-button-icon-background{box-shadow:0 1px 1px 0 rgba(60,64,67,.3),0 1px 3px 1px rgba(60,64,67,.15)}.companion-collapser-button.app-switcher-button-checked.app-switcher-button-hover{right:0}.companion-collapser-button .app-switcher-button-icon{left:10px;position:absolute;top:10px}html[dir="rtl"] .companion-collapser-button .app-switcher-button-icon,body[dir="rtl"] .companion-collapser-button .app-switcher-button-icon{transform:rotate(180deg)}.companion-theme-dark .companion-collapser-button.app-switcher-button-checked.app-switcher-button-focused .app-switcher-button-icon-container,.companion-theme-dark .companion-collapser-button.app-switcher-button-checked.app-switcher-button-hover .app-switcher-button-icon-container{background-color:#414141}.companion-collapser-button.app-switcher-button-checked .app-switcher-button-icon{margin-left:-6px;transform:rotate(180deg)}.companion-collapser-button.app-switcher-button-checked.app-switcher-button-hover .app-switcher-button-icon{margin-left:0}html[dir="rtl"] .companion-collapser-button.app-switcher-button-checked .app-switcher-button-icon,body[dir="rtl"] .companion-collapser-button.app-switcher-button-checked .app-switcher-button-icon{transform:rotate(0deg)}.acdd-draggable-shadow{background-color:white;background-repeat:no-repeat;border:transparent;border-radius:8px;box-sizing:border-box;color:#666;height:56px;outline:none;padding:0 10px;pointer-events:none;position:fixed;z-index:999}.acdd-draggable-shadow.acdd-draggable-shadow-detail-type{background-position:20px center;background-size:24px 24px;height:56px;width:200px}.acdd-draggable-shadow.acdd-draggable-shadow-image-type{background-position:center;background-size:100% auto;height:120px;width:120px}.acdd-draggable-shadow.acdd-draggable-shadow-image-type.acdd-draggable-shadow-image-captioned{height:156px}.acdd-draggable-shadow-text-wrap{box-sizing:border-box;display:table-cell;padding-left:48px;max-width:200px;vertical-align:middle}.acdd-draggable-shadow-text-wrap .acdd-draggable-shadow-title{font-size:1.1em}.acdd-draggable-shadow-text-wrap .acdd-draggable-shadow-text{opacity:.75;padding-top:2px}.acdd-draggable-shadow-image-type .acdd-draggable-shadow-text{background-color:rgba(32,33,36,.71);border-radius:0 0 8px 8px;bottom:0;color:white;height:36px;left:0;padding:8px 10px;position:absolute;width:100%}.acdd-draggable-shadow .acdd-draggable-shadow-title,.acdd-draggable-shadow .acdd-draggable-shadow-text{box-sizing:border-box;margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.acdd-draggable-shadow .acdd-draggable-shadow-count-bubble{background-color:#202124;border-radius:20px;box-sizing:border-box;color:white;font-size:16px;height:40px;max-width:75%;min-width:40px;overflow:hidden;padding:9px 8px;position:absolute;right:-15px;text-align:center;text-overflow:ellipsis;top:-15px}.acga-topLevelDiv{height:100%;position:relative;width:100%}.acga-content{height:100%;left:0;position:absolute;top:0;width:100%;z-index:0}.agca-gab-unread-notifications::after{content:"";background-color:#db4437;border-radius:50%;height:8px;position:absolute;right:17px;top:17px;width:8px}.companion-guest-app-switcher .app-switcher-button-icon-background-outer{border-color:#e8f0fe}.companion-theme-light .agca-gab-blue .app-switcher-button-icon-background-outer{border-color:rgba(66,133,244,.24)}.agca-gab-green .app-switcher-button-icon-background-outer{border-color:#e6f4ea}.companion-theme-light .agca-gab-green .app-switcher-button-icon-background-outer{border-color:rgba(52,168,83,.24)}.agca-gab-yellow .app-switcher-button-icon-background-outer{border-color:#fef7e0}.companion-theme-light .agca-gab-yellow .app-switcher-button-icon-background-outer{border-color:rgba(251,188,4,.24)}.companion-theme-dark .agca-gab-button .app-switcher-button-icon-background-outer{border-color:rgba(255,255,255,.24)}.companion-guest-app-switcher .app-switcher-button-inksplash .app-switcher-button-icon-background-inner,.companion-guest-app-switcher .app-switcher-button-presence .app-switcher-button-icon-background-inner,.companion-guest-app-switcher .app-switcher-button-selected .app-switcher-button-icon-background-inner,.app-switcher-button-selected.agca-gab-blue.app-switcher-button-focused .app-switcher-button-icon-background-inner{background-color:#e8f0fe}.app-switcher-button-selected.agca-gab-blue.app-switcher-button-hover .app-switcher-button-icon-background-inner{background-color:#d2e3fc}.companion-theme-light .app-switcher-button-inksplash.agca-gab-blue .app-switcher-button-icon-background-inner,.companion-theme-light .app-switcher-button-presence.agca-gab-blue .app-switcher-button-icon-background-inner,.companion-theme-light .app-switcher-button-selected.agca-gab-blue .app-switcher-button-icon-background-inner,.companion-theme-light .app-switcher-button-selected.agca-gab-blue.app-switcher-button-focused .app-switcher-button-icon-background-inner{background-color:rgba(66,133,244,.24)}.companion-theme-light .agca-gab-blue.app-switcher-button-hover .app-switcher-button-icon-background-inner,.companion-theme-light .agca-gab-blue.app-switcher-button-focused .app-switcher-button-icon-background-inner{background-color:rgba(66,133,244,.12)}.app-switcher-button-inksplash.agca-gab-green .app-switcher-button-icon-background-inner,.app-switcher-button-presence.agca-gab-green .app-switcher-button-icon-background-inner,.app-switcher-button-selected.agca-gab-green .app-switcher-button-icon-background-inner,.app-switcher-button-selected.agca-gab-green.app-switcher-button-focused .app-switcher-button-icon-background-inner{background-color:#e6f4ea}.app-switcher-button-selected.agca-gab-green.app-switcher-button-hover .app-switcher-button-icon-background-inner{background-color:#ceead6}.companion-theme-light .app-switcher-button-inksplash.agca-gab-green .app-switcher-button-icon-background-inner,.companion-theme-light .app-switcher-button-presence.agca-gab-green .app-switcher-button-icon-background-inner,.companion-theme-light .app-switcher-button-selected.agca-gab-green .app-switcher-button-icon-background-inner,.companion-theme-light .app-switcher-button-selected.agca-gab-green.app-switcher-button-focused .app-switcher-button-icon-background-inner{background-color:rgba(52,168,83,.24)}.companion-theme-light .agca-gab-green.app-switcher-button-hover .app-switcher-button-icon-background-inner,.companion-theme-light .agca-gab-green.app-switcher-button-focused .app-switcher-button-icon-background-inner{background-color:rgba(52,168,83,.12)}.app-switcher-button-inksplash.agca-gab-yellow .app-switcher-button-icon-background-inner,.app-switcher-button-presence.agca-gab-yellow .app-switcher-button-icon-background-inner,.app-switcher-button-selected.agca-gab-yellow .app-switcher-button-icon-background-inner,.app-switcher-button-selected.agca-gab-yellow.app-switcher-button-focused .app-switcher-button-icon-background-inner{background-color:#fef7e0}.app-switcher-button-selected.agca-gab-yellow.app-switcher-button-hover .app-switcher-button-icon-background-inner{background-color:#feefc3}.companion-theme-light .app-switcher-button-inksplash.agca-gab-yellow .app-switcher-button-icon-background-inner,.companion-theme-light .app-switcher-button-presence.agca-gab-yellow .app-switcher-button-icon-background-inner,.companion-theme-light .app-switcher-button-selected.agca-gab-yellow .app-switcher-button-icon-background-inner,.companion-theme-light .app-switcher-button-selected.agca-gab-yellow.app-switcher-button-focused .app-switcher-button-icon-background-inner{background-color:rgba(251,188,4,.24)}.companion-theme-light .agca-gab-yellow.app-switcher-button-hover .app-switcher-button-icon-background-inner,.companion-theme-light .agca-gab-yellow.app-switcher-button-focused .app-switcher-button-icon-background-inner{background-color:rgba(251,188,4,.12)}.companion-theme-dark .agca-gab-button.app-switcher-button-inksplash .app-switcher-button-icon-background-inner,.companion-theme-dark .agca-gab-button.app-switcher-button-presence .app-switcher-button-icon-background-inner,.companion-theme-dark .agca-gab-button.app-switcher-button-selected .app-switcher-button-icon-background-inner,.companion-theme-dark .agca-gab-button.app-switcher-button-selected.app-switcher-button-focused .app-switcher-button-icon-background-inner{background-color:rgba(255,255,255,.24)}.companion-theme-dark .agca-gab-button.app-switcher-button-hover .app-switcher-button-icon-background-inner,.companion-theme-dark .agca-gab-button.app-switcher-button-focused .app-switcher-button-icon-background-inner{background-color:rgba(255,255,255,.12)}.agca-gab-icon-selection-indicator{background-color:#d704fb;border-radius:3px 0 0 3px;display:none;height:40px;position:absolute;right:1px;top:8px;width:3px}.agca-gab-button.app-switcher-button-selected .agca-gab-icon-selection-indicator{display:inherit}.agca-gab-blue .agca-gab-icon-selection-indicator{background-color:#4285f4}.agca-gab-green .agca-gab-icon-selection-indicator{background-color:#34a853}.agca-gab-yellow .agca-gab-icon-selection-indicator{background-color:#fbbc04}.companion-theme-dark .companion-overflow-menu-button:not(.app-switcher-button-hover) .app-switcher-button-icon-background{opacity:.7}.companion-shell-content-component{background-color:white;box-sizing:border-box;height:100%;left:0;padding-top:64px;position:absolute;top:0;width:100%}.companion-header-in-iframe .companion-shell-guest{padding-top:0}.companion-shell-loading{overflow:hidden;position:absolute;text-align:center}.companion-shell-offline,.companion-shell-permanent-failure,.companion-shell-timed-out,.companion-shell-unavailable{-webkit-align-items:center;align-items:center;display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column;-webkit-justify-content:center;justify-content:center;text-align:center}.companion-shell-offline-description,.companion-shell-offline-title,.companion-shell-unavailable-description,.companion-shell-unavailable-title{color:#5f6368;margin:0 70px}.companion-shell-offline-description,.companion-shell-unavailable-description{font-size:12px;line-height:16px}.companion-shell-offline-title,.companion-shell-unavailable-title{font-size:16px;font-weight:500;margin-bottom:2px;margin-top:34px}.companion-shell-permanent-failure-message,.companion-shell-timed-out-message{margin:10px;max-width:calc(100% - 20px)}.companion-shell-timed-out-retry{color:#4285f4;cursor:pointer;text-transform:uppercase}.companion-shell-iframe{border:0;height:100%;width:100%}.companion-shell-header{align-items:center;background-color:#fff;border-bottom:solid 1px #f1f3f4;box-sizing:border-box;display:-webkit-flex;display:flex;-webkit-flex-direction:row;flex-direction:row;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;height:64px;padding:0 10px;position:relative;z-index:1}.companion-shell-header-element{margin-left:10px;margin-right:10px}.companion-shell-title-container{display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column;-webkit-flex-grow:1;flex-grow:1;justify-content:center;width:1px}.companion-shell-title-element{margin:0}.companion-shell-title-text,.companion-shell-subtitle-text,.companion-shell-subtitle-text .goog-menu-button-caption{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.companion-shell-title-text,.companion-shell-subtitle-text{outline:none}.companion-shell-title-text.companion-shell-title-big{font-size:22px}.companion-shell-header-light-background .companion-shell-title-big{color:rgba(0,0,0,.54)}.companion-shell-header-dark-background .companion-shell-title-big{color:#fff}.companion-shell-title-text.companion-shell-title-small{color:#80868b;font-size:10px;font-weight:500;letter-spacing:1.5px;text-transform:uppercase}.companion-shell-title-text.companion-shell-title-small.companion-shell-subview{left:56px}.companion-shell-dropdown-container{font-size:0}.companion-shell-subtitle-text{color:#5f6368;font-size:16px;font-weight:500;line-height:20px}.companion-shell-subtitle-text.goog-menu-button-open{background-color:#f1f3f4}.companion-shell-subtitle-button{padding:0 2px 0 4px}.companion-shell-subtitle-button .companion-shell-subtitle-text,.companion-shell-subtitle-text .goog-menu-button-caption{padding:0}.companion-shell-subtitle-call-out{color:#1a73e8}.companion-shell-dropdown-button{background:none;border-radius:3px;border-width:0;box-sizing:border-box;cursor:pointer;display:inline-block;margin-left:-4px;max-width:100%;outline:none;padding:0 2px 0 4px}.companion-shell-dropdown-button.companion-shell-dropdown-button-hover{background-color:#f1f3f4}.companion-shell-dropdown-button.companion-shell-dropdown-button-focused,.companion-shell-dropdown-button.companion-shell-dropdown-button-open{background-color:#e8eaed}.companion-shell-dropdown-button.companion-shell-dropdown-button-disabled{opacity:.38}.companion-shell-dropdown-button .companion-shell-dropdown-button-outer-box{display:-webkit-flex;display:flex;-webkit-justify-content:flex-start;justify-content:flex-start}.companion-shell-dropdown-button .companion-shell-dropdown-button-inner-box{display:block;-webkit-flex-shrink:1;flex-shrink:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.companion-shell-dropdown-button-outer-box::after{content:'';display:block;background:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNHB4JyBoZWlnaHQ9JzI0cHgnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nIzVmNjM2OCc+PHBhdGggZD0nTTcgMTBsNSA1IDUtNXonPjwvcGF0aD48cGF0aCBkPSdNMCAwaDI0djI0SDB6JyBmaWxsPSdub25lJz48L3BhdGg+PC9zdmc+") center no-repeat;-webkit-flex-shrink:0;flex-shrink:0;height:20px;margin:0 0 0 4px;padding:0;width:20px}.companion-shell-header-buttons{display:-webkit-flex;display:flex;height:24px;-webkit-justify-content:flex-end;justify-content:flex-end;position:absolute;right:8px;top:18px}.companion-shell-header-button{background:no-repeat center center;background-size:20px 20px;cursor:pointer;height:24px;width:24px}.companion-shell-header-light-background .companion-shell-header-svg-icon{fill:#000;opacity:.54}.companion-shell-header-dark-background .companion-shell-header-svg-icon{fill:#fff}html[dir="rtl"] .companion-shell-back-button,body[dir="rtl"] .companion-shell-back-button,html[dir="rtl"] .companion-shell-escape-hatch-button,body[dir="rtl"] .companion-shell-escape-hatch-button{transform:scaleX(-1)}.companion-shell-header-button.companion-shell-title-element{margin:0}.companion-shell-header-button:hover{opacity:.87}.companion-shell-subtitle-button[aria-disabled="true"],.companion-shell-header-button[aria-disabled="true"]{cursor:not-allowed;opacity:.38}.companion-shell-back-button{margin-right:2px}.goog-menu.companion-shell-drop-down-menu{background:#fff;border-width:0;border-radius:0 0 8px 8px;box-shadow:0px -3px 6px -3px rgba(0,0,0,.12),0 4px 8px -2px rgba(0,0,0,.14);box-sizing:border-box;max-height:400px;overflow-x:hidden;overflow-y:auto;padding-bottom:8px;position:absolute;width:100%;z-index:999}.goog-menuitem.companion-shell-drop-down-entry{border:none;height:40px;padding:0;width:300px}.goog-menuitem-highlight.companion-shell-drop-down-entry{background:#f1f3f4}.goog-menu.companion-shell-drop-down-menu .goog-menuseparator{border-top:1px solid rgba(32,33,36,0.06);margin:8px 0;padding:0}.companion-shell-drop-down-check{display:none;height:20px;padding:10px 16px;position:absolute;right:0;width:20px}.goog-option-selected .companion-shell-drop-down-check{display:block}.companion-shell-drop-down-entry.goog-option-selected{background-image:none}.companion-shell-drop-down-entry .goog-menuitem-checkbox,.companion-shell-drop-down-entry.goog-option-selected .goog-menuitem-checkbox{display:none}.companion-shell-drop-down-entry-text{box-sizing:border-box;font-size:14px;color:#202124;padding:10px 20px;letter-spacing:0.2px;line-height:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:300px}.goog-option-selected .companion-shell-drop-down-entry-text{padding-right:60px}.companion-shell-search-container{align-items:center;background-color:#fff;box-sizing:border-box;display:-webkit-flex;display:flex;-webkit-flex-direction:row;flex-direction:row;height:100%;left:0;padding:0 10px;position:absolute;top:0;width:100%}.companion-shell-search-icon,.companion-shell-search-close{margin-left:10px;margin-right:10px}.companion-shell-search-input{background-color:transparent;border:none;color:#5f6368;-webkit-flex-grow:1;flex-grow:1;font-size:16px;line-height:24px;outline:none;width:100px}.companion-shell-search-input::placeholder{color:#bdc1c6}.companion-shell-search-input::-webkit-input-placeholder{color:#bdc1c6}.companion-shell-search-input:-ms-input-placeholder{color:#bdc1c6}.companion-app-switcher-container .jfk-bubble{padding:16px;border-radius:8px;border-color:#e8eaed;border-width:1px;box-shadow:0 2px 6px rgba(60,64,67,0.3)}.companion-app-switcher-container .jfk-bubble-arrowright .jfk-bubble-arrowimplbefore{border-left-color:#e8eaed;border-right-color:#e8eaed}.app-switcher-notification-bubble{display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column}.app-switcher-notification-bubble .app-switcher-notification-bubble-header{display:-webkit-flex;display:flex;-webkit-flex-direction:row;flex-direction:row;height:32px}.app-switcher-notification-bubble .app-switcher-notification-bubble-image-container{width:32px;border-radius:50%}.app-switcher-notification-bubble .app-switcher-notification-bubble-image-container .app-switcher-notification-bubble-image{width:32px;height:32px;border-radius:50%;margin-right:8px}.app-switcher-notification-bubble .app-switcher-notification-bubble-text{height:calc(14px*2);width:auto;display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column;margin-left:8px;margin-bottom:8px}.app-switcher-notification-bubble .app-switcher-notification-bubble-text:focus{outline:none}.app-switcher-notification-bubble .app-switcher-notification-bubble-title-text{height:14px;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:12px;color:#5f6368}.app-switcher-notification-bubble .app-switcher-notification-bubble-body-text{height:14px;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;color:#3c4043}.app-switcher-notification-bubble .app-switcher-notification-bubble-footer{margin-top:9px;height:32px;display:-webkit-flex;display:flex;-webkit-flex-direction:row;flex-direction:row}.app-switcher-notification-bubble .app-switcher-notification-bubble-footer .jfk-button{text-align:center;font-weight:500;font-family:'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif;padding-left:8px;padding-right:16px;margin:0;height:30px;line-height:30px;color:#ffffff;max-width:300px;font-size:14px;border-radius:15px;-webkit-align-items:center;align-items:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.app-switcher-notification-bubble .app-switcher-notification-bubble-footer .app-switcher-notification-bubble-button-icon{width:16px;height:16px;padding-right:8px;padding-top:calc((30px - 16px)/2 - 1px);padding-bottom:calc((30px - 16px)/2);vertical-align:middle}.app-switcher-notification-bubble .app-switcher-notification-bubble-footer .app-switcher-notification-bubble-spacer{width:8px}.app-switcher-notification-bubble .app-switcher-notification-bubble-call-to-action-button{background-color:rgb(24,128,56)}.app-switcher-notification-bubble .app-switcher-notification-bubble-call-to-action-button.jfk-button-hover{background-color:#2a8947;box-shadow:0 1px 3px 1px rgba(24,128,56,0.15)}.app-switcher-notification-bubble .app-switcher-notification-bubble-call-to-action-button.jfk-button-focused{background-color:#4f9e67;box-shadow:0 1px 3px 1px rgba(24,128,56,0.15)}.app-switcher-notification-bubble .app-switcher-notification-bubble-call-to-action-button.jfk-button-focused.jfk-button-hover{background-color:#62a877;box-shadow:0 1px 3px 1px rgba(24,128,56,0.15)}.app-switcher-notification-bubble .app-switcher-notification-bubble-dismiss-button{background-color:rgb(217,48,37)}.app-switcher-notification-bubble .app-switcher-notification-bubble-dismiss-button.jfk-button-hover{background-color:#d3443b;box-shadow:0 1px 3px 1px rgba(217,48,37,0.15)}.app-switcher-notification-bubble .app-switcher-notification-bubble-dismiss-button.jfk-button-focused{background-color:#e06c64;box-shadow:0 1px 3px 1px rgba(217,48,37,0.15)}.app-switcher-notification-bubble .app-switcher-notification-bubble-dismiss-button.jfk-button-focused.jfk-button-hover{background-color:#e88a84;box-shadow:0 1px 3px 1px rgba(217,48,37,0.15)}.companion-overflow-menu-item{-webkit-align-items:center;align-items:center;cursor:pointer;display:-webkit-flex;display:flex;padding:8px}.companion-overflow-menu-item-highlight{background-color:#f1f3f4}.companion-overflow-menu-item-icon{background:transparent no-repeat center;background-size:20px 20px;border-radius:50%;height:40px;width:40px}.companion-overflow-menu-item-content{padding:0 6px;white-space:nowrap}.companion-overflow-menu-item-disabled{cursor:default;opacity:.38}.companion-server-render .acga-content{-webkit-animation:companion-server-render-guest-content-fadeout 333ms ease 0s 1 normal both paused;animation:companion-server-render-guest-content-fadeout 333ms ease 0s 1 normal both paused}.companion-server-render .companion-shell-splash-screen-ink-splash-color{display:none}.companion-server-render .companion-shell-splash-screen-app-logo{-webkit-animation:none;animation:none}.companion-server-render .companion-shell-splash-screen-beachball{display:none}@keyframes companion-server-render-guest-content-fadeout{from{opacity:.38}to{opacity:0}}.companion-shell{background-color:white;box-sizing:border-box;height:100%;width:300px}.companion-shell-addon-content-container,.companion-shell-guest-content-container,.companion-shell-native-content-container{height:100%}.companion-shell.companion-shell-overlay-content{border:0;box-shadow:0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12),0px 2px 4px -1px rgba(0,0,0,0.2);opacity:1}.companion-shell-app-switcher{bottom:0px;left:0px;position:absolute}.companion-shell-guest-container{height:100%}.companion-shell-splash-screen-container{height:680px;margin-left:50%;position:relative;top:calc(50% - (340px + 64px));transform:translateX(-50%);width:680px}html[dir="rtl"] .companion-shell-splash-screen-container,body[dir="rtl"] .companion-shell-splash-screen-container{transform:translateX(50%)}.companion-shell-splash-screen-ink-splash-color{-webkit-animation:ink-splash-opacity 1s cubic-bezier(0.08,0.8,0.67,1) 400ms 1 normal both,ink-splash-scale 1s cubic-bezier(0.05,0.69,0.67,1) 400ms 1 normal both;animation:ink-splash-opacity 1s cubic-bezier(0.08,0.8,0.67,1) 400ms 1 normal both,ink-splash-scale 1s cubic-bezier(0.05,0.69,0.67,1) 400ms 1 normal both;border-radius:50%;height:100%;width:100%}.companion-shell-splash-screen-calendar>.companion-shell-splash-screen-ink-splash-color{background:#aecbfa}.companion-shell-splash-screen-chat>.companion-shell-splash-screen-ink-splash-color{background:#a8dab5}.companion-shell-splash-screen-keep>.companion-shell-splash-screen-ink-splash-color{background:#fde293}.companion-shell-splash-screen-tasks>.companion-shell-splash-screen-ink-splash-color{background:#aecbfa}.companion-shell-splash-screen-homebase>.companion-shell-splash-screen-ink-splash-color{background:#aecbfa}.companion-shell-splash-screen-maps>.companion-shell-splash-screen-ink-splash-color{background:#3367d6}.companion-shell-splash-screen-voice>.companion-shell-splash-screen-ink-splash-color{background:#a8dab5}.companion-shell-splash-screen-demo>.companion-shell-splash-screen-ink-splash-color{background:#aecbfa}.companion-shell-splash-screen-drive>.companion-shell-splash-screen-ink-splash-color{background:#e8f0fe}.companion-shell-splash-screen-people>.companion-shell-splash-screen-ink-splash-color{background:#aecbfa}@keyframes ink-splash-opacity{from{opacity:1}to{opacity:0}}@keyframes ink-splash-scale{from{transform:scale(0)}to{transform:scale(1)}}.companion-shell-splash-screen-app-logo{-webkit-animation:app-logo-scale 330ms cubic-bezier(0.05,0.62,0.51,1.26) 333ms 1 normal backwards,app-logo-scale-bounce 170ms cubic-bezier(0.29,0,0.73,1) 667ms 1 normal forwards;animation:app-logo-scale 330ms cubic-bezier(0.05,0.62,0.51,1.26) 333ms 1 normal backwards,app-logo-scale-bounce 170ms cubic-bezier(0.29,0,0.73,1) 667ms 1 normal forwards;background-position:center;background-repeat:no-repeat;background-size:128px 128px;bottom:0;height:128px;left:0;margin:auto;position:absolute;right:0;top:0;width:128px}@keyframes app-logo-scale{from{transform:scale(0)}to{transform:scale(1)}}@keyframes app-logo-scale-bounce{0%,100%{transform:scale(1)}20%{transform:scale(0.95)}}.companion-shell-splash-screen-beachball{-webkit-animation:beachball-opacity 330ms linear 1s 1 normal both;animation:beachball-opacity 330ms linear 1s 1 normal both;bottom:0;height:20px;left:0;margin:auto;position:absolute;right:0;top:190px;width:20px}@keyframes beachball-opacity{from{opacity:0}to{opacity:1}}.companion-tooltip{background-color:rgba(60,64,67,.9);border-radius:4px;color:#fff;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;font-weight:500;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;letter-spacing:.3px;line-height:16px;padding:4px 8px;white-space:nowrap;z-index:9999}.docs-companion-sidebar{box-shadow:0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12),0px 2px 4px -1px rgba(0,0,0,0.2);height:100%;outline:none;overflow:hidden;position:absolute;right:0;top:0;width:300px;z-index:901}.goog-custom-button{margin:2px;border:0;padding:0;font-family:Arial,sans-serif;color:#000;background:#ddd url(//ssl.gstatic.com/editor/button-bg.png) repeat-x top left;text-decoration:none;list-style:none;vertical-align:middle;cursor:default;outline:none}.goog-custom-button-outer-box,.goog-custom-button-inner-box{border-style:solid;border-color:#aaa;vertical-align:top}.goog-custom-button-outer-box{margin:0;border-width:1px 0;padding:0}.goog-custom-button-inner-box{margin:0 -1px;border-width:0 1px;padding:3px 4px;white-space:nowrap}* html .goog-custom-button-inner-box{left:-1px}* html .goog-custom-button-rtl .goog-custom-button-outer-box{left:-1px}* html .goog-custom-button-rtl .goog-custom-button-inner-box{right:auto}*:first-child+html .goog-custom-button-inner-box{left:-1px}*:first-child+html .goog-custom-button-rtl .goog-custom-button-inner-box{left:1px}::root .goog-custom-button,::root .goog-custom-button-outer-box{line-height:0}::root .goog-custom-button-inner-box{line-height:normal}.goog-custom-button-disabled{background-image:none!important;opacity:0.3;-moz-opacity:0.3;filter:alpha(opacity=30)}.goog-custom-button-disabled .goog-custom-button-outer-box,.goog-custom-button-disabled .goog-custom-button-inner-box{color:#333!important;border-color:#999!important}* html .goog-custom-button-disabled{margin:2px 1px!important;padding:0 1px!important}*:first-child+html .goog-custom-button-disabled{margin:2px 1px!important;padding:0 1px!important}.goog-custom-button-hover .goog-custom-button-outer-box,.goog-custom-button-hover .goog-custom-button-inner-box{border-color:#9cf #69e #69e #7af!important}.goog-custom-button-active,.goog-custom-button-checked{background-color:#bbb;background-position:bottom left}.goog-custom-button-focused .goog-custom-button-outer-box,.goog-custom-button-focused .goog-custom-button-inner-box{border-color:orange}.goog-custom-button-collapse-right,.goog-custom-button-collapse-right .goog-custom-button-outer-box,.goog-custom-button-collapse-right .goog-custom-button-inner-box{margin-right:0}.goog-custom-button-collapse-left,.goog-custom-button-collapse-left .goog-custom-button-outer-box,.goog-custom-button-collapse-left .goog-custom-button-inner-box{margin-left:0}.goog-custom-button-collapse-left .goog-custom-button-inner-box{border-left:1px solid #fff}.goog-custom-button-collapse-left.goog-custom-button-checked .goog-custom-button-inner-box{border-left:1px solid #ddd}* html .goog-custom-button-collapse-left .goog-custom-button-inner-box{left:0}*:first-child+html .goog-custom-button-collapse-left .goog-custom-button-inner-box{left:0}.goog-flat-button{position:relative;margin:2px;border:1px solid #000;padding:2px 6px;font:normal 13px "Trebuchet MS",Tahoma,Arial,sans-serif;color:#fff;background-color:#8c2425;cursor:pointer;outline:none}.goog-flat-button-disabled{border-color:#888;color:#888;background-color:#ccc;cursor:default}.goog-flat-button-hover{border-color:#8c2425;color:#8c2425;background-color:#eaa4a5}.goog-flat-button-active,.goog-flat-button-selected,.goog-flat-button-checked{border-color:#5b4169;color:#5b4169;background-color:#d1a8ea}.goog-flat-button-focused{border-color:#5b4169}.goog-flat-button-collapse-right{margin-right:0}.goog-flat-button-collapse-left{margin-left:0;border-left:none}.goog-button{color:#036;border-color:#036;background-color:#69c}.goog-button-disabled{border-color:#333;color:#333;background-color:#999}.goog-button-hover{color:#369;border-color:#369;background-color:#9cf}.goog-button-active{color:#69c;border-color:#69c}.goog-clipboard{width:16px;height:16px;background:url(//ssl.gstatic.com/docs/clipboard/icons3.png) no-repeat;vertical-align:middle}.goog-cbi1{background-position:-16px}.goog-cbi2{background-position:-32px}.goog-cbi3{background-position:-48px}.goog-cbi4{background-position:-64px}.goog-cbi5{background-position:-80px}.goog-menu-button{background:#ddd url(//ssl.gstatic.com/editor/button-bg.png) repeat-x top left;border:0;color:#000;cursor:pointer;list-style:none;margin:2px;outline:none;padding:0;text-decoration:none;vertical-align:middle}.goog-menu-button-outer-box,.goog-menu-button-inner-box{border-style:solid;border-color:#aaa;vertical-align:top}.goog-menu-button-outer-box{margin:0;border-width:1px 0;padding:0}.goog-menu-button-inner-box{margin:0 -1px;border-width:0 1px;padding:3px 4px}* html .goog-menu-button-inner-box{left:-1px}* html .goog-menu-button-rtl .goog-menu-button-outer-box{left:-1px;right:auto}* html .goog-menu-button-rtl .goog-menu-button-inner-box{right:auto}*:first-child+html .goog-menu-button-inner-box{left:-1px}*:first-child+html .goog-menu-button-rtl .goog-menu-button-inner-box{left:1px;right:auto}::root .goog-menu-button,::root .goog-menu-button-outer-box,::root .goog-menu-button-inner-box{line-height:0}::root .goog-menu-button-caption,::root .goog-menu-button-dropdown{line-height:normal}.goog-menu-button-disabled{background-image:none!important;opacity:0.3;-moz-opacity:0.3;filter:alpha(opacity=30)}.goog-menu-button-disabled .goog-menu-button-outer-box,.goog-menu-button-disabled .goog-menu-button-inner-box,.goog-menu-button-disabled .goog-menu-button-caption,.goog-menu-button-disabled .goog-menu-button-dropdown{color:#333!important;border-color:#999!important}* html .goog-menu-button-disabled{margin:2px 1px!important;padding:0 1px!important}*:first-child+html .goog-menu-button-disabled{margin:2px 1px!important;padding:0 1px!important}.goog-menu-button-hover .goog-menu-button-outer-box,.goog-menu-button-hover .goog-menu-button-inner-box{border-color:#9cf #69e #69e #7af!important}.goog-menu-button-active,.goog-menu-button-open{background-color:#bbb;background-position:bottom left}.goog-menu-button-focused .goog-menu-button-outer-box,.goog-menu-button-focused .goog-menu-button-inner-box{border-color:orange}.goog-menu-button-caption{padding:0 4px 0 0;vertical-align:top}.goog-menu-button-dropdown{height:15px;width:7px;background:url(//ssl.gstatic.com/editor/editortoolbar.png) no-repeat -388px 0;vertical-align:top}.goog-menu-button-collapse-right,.goog-menu-button-collapse-right .goog-menu-button-outer-box,.goog-menu-button-collapse-right .goog-menu-button-inner-box{margin-right:0}.goog-menu-button-collapse-left,.goog-menu-button-collapse-left .goog-menu-button-outer-box,.goog-menu-button-collapse-left .goog-menu-button-inner-box{margin-left:0}.goog-menu-button-collapse-left .goog-menu-button-inner-box{border-left:1px solid #fff}.goog-menu-button-collapse-left.goog-menu-button-checked .goog-menu-button-inner-box{border-left:1px solid #ddd}.goog-submenu-arrow{color:#000;left:auto;padding-right:6px;position:absolute;right:0;text-align:right}.goog-menuitem-rtl .goog-submenu-arrow{text-align:left;left:0;right:auto;padding-left:6px}.goog-menuitem-disabled .goog-submenu-arrow{color:#ccc}.docs-a11y-ariascreenreader-speakable{position:absolute;left:-10000px}.a11y-settings-dialog{min-width:464px}.a11y-settings-dialog ul,.a11y-settings-dialog li{list-style:none;padding:0;margin:0}.a11y-settings-dialog .a11y-settings-dialog-indent-group{margin-left:30px}.a11y-settings-dialog .a11y-settings-dialog-learn-more{margin-top:8px}.a11y-settings-dialog .a11y-settings-dialog-description-text{margin-right:2px}.a11y-settings-dialog a,.a11y-settings-dialog a:hover,.a11y-settings-dialog a:visited,.a11y-settings-dialog a:focus,.a11y-settings-dialog a:active{color:#1a73e8}.a11y-settings-dialog .docs-material-gm-labeled-checkbox-description a{padding:3px 0}.a11y-settings-dialog a .docs-icon{pointer-events:none}.a11y-settings-dialog .docs-material-gm-dialog-buttons{padding-top:0}.jfk-tooltip{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;-webkit-transition:visibility 0,opacity .13s ease-in;-moz-transition:visibility 0,opacity .13s ease-in;-o-transition:visibility 0,opacity .13s ease-in;transition:visibility 0,opacity .13s ease-in;background-color:#2a2a2a;border:1px solid #fff;color:#fff;cursor:default;display:block;font-size:11px;font-weight:bold;margin-left:-1px;opacity:1;padding:7px 9px;position:absolute;visibility:visible;white-space:pre-wrap;word-break:break-all;word-break:break-word}.jfk-tooltip-hide{-webkit-transition:visibility .13s,opacity .13s ease-out,left 0 linear .13s,top 0 linear .13s;-moz-transition:visibility .13s,opacity .13s ease-out,left 0 linear .13s,top 0 linear .13s;-o-transition:visibility .13s,opacity .13s ease-out,left 0 linear .13s,top 0 linear .13s;transition:visibility .13s,opacity .13s ease-out,left 0 linear .13s,top 0 linear .13s;opacity:0;left:20px!important;top:20px!important;visibility:hidden}.jfk-tooltip-data{display:none}.jfk-tooltip-arrow{pointer-events:none;position:absolute}.jfk-tooltip-arrow .jfk-tooltip-arrowimplbefore,.jfk-tooltip-arrow .jfk-tooltip-arrowimplafter{content:'';display:block;height:0;position:absolute;width:0}.jfk-tooltip-arrow .jfk-tooltip-arrowimplbefore{border:6px solid}.jfk-tooltip-arrow .jfk-tooltip-arrowimplafter{border:5px solid}.jfk-tooltip-arrowdown{bottom:0}.jfk-tooltip-arrowup{top:-6px}.jfk-tooltip-arrowleft{left:-6px}.jfk-tooltip-arrowright{right:0}.jfk-tooltip-arrowdown .jfk-tooltip-arrowimplbefore,.jfk-tooltip-arrowup .jfk-tooltip-arrowimplbefore{border-color:#fff transparent;left:-6px}.jfk-tooltip-arrowdown .jfk-tooltip-arrowimplafter,.jfk-tooltip-arrowup .jfk-tooltip-arrowimplafter{border-color:#2a2a2a transparent;left:-5px}.jfk-tooltip-arrowdown .jfk-tooltip-arrowimplbefore{border-bottom-width:0}.jfk-tooltip-arrowdown .jfk-tooltip-arrowimplafter{border-bottom-width:0}.jfk-tooltip-arrowup .jfk-tooltip-arrowimplbefore{border-top-width:0}.jfk-tooltip-arrowup .jfk-tooltip-arrowimplafter{border-top-width:0;top:1px}.jfk-tooltip-arrowleft .jfk-tooltip-arrowimplbefore,.jfk-tooltip-arrowright .jfk-tooltip-arrowimplbefore{border-color:transparent #fff;top:-6px}.jfk-tooltip-arrowleft .jfk-tooltip-arrowimplafter,.jfk-tooltip-arrowright .jfk-tooltip-arrowimplafter{border-color:transparent #2a2a2a;top:-5px}.jfk-tooltip-arrowleft .jfk-tooltip-arrowimplbefore{border-left-width:0}.jfk-tooltip-arrowleft .jfk-tooltip-arrowimplafter{border-left-width:0;left:1px}.jfk-tooltip-arrowright .jfk-tooltip-arrowimplbefore{border-right-width:0}.jfk-tooltip-arrowright .jfk-tooltip-arrowimplafter{border-right-width:0}.activity-deck,.activity-deck-events-view{height:100%}.activity-list-container{background-color:#fff;font-family:Roboto,arial,sans-serif;font-size:13px;height:100%;position:relative}.activity-list{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;height:100%;overflow-y:scroll;position:relative;z-index:0}.activity-refresh-header{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background-color:#eee;height:0;overflow:hidden;padding-right:16px;position:absolute;top:0;width:100%;z-index:2}.activity-refresh-header .goog-inline-block.goog-flat-button{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background-color:white;color:#15c;cursor:pointer;height:35px;line-height:35px;text-align:center;width:100%}.activity-list-static-header{box-sizing:border-box;left:0;overflow:hidden;padding-bottom:12px;position:absolute;right:16px;top:0;width:auto;z-index:1}.activity-list-static-header .activity-event-section-title{box-shadow:0px 2px 2px 0px rgba(0,0,0,0.14),0px 3px 1px -2px rgba(0,0,0,0.12),0px 1px 5px 0px rgba(0,0,0,0.2)}.drive-white-bg .activity-list-static-header .activity-event-section-title{box-shadow:none}.activity-list-loading{font-size:14px;font-weight:normal;margin-top:16px;text-align:center;width:100%}.activity-list-loading .drive-white-circle{display:none}.activity-list-loading-more.activity-list-loading{font-size:12px;font-weight:normal;margin-top:0;padding-bottom:8px}.activity-list-loading-more.activity-list-loading .activity-list-loading-icon,.activity-list-loading-more.activity-list-loading .activity-list-loading-icon img,.activity-list-loading-more.activity-list-loading .activity-list-loading-message{display:inline-block;vertical-align:middle}.activity-list-loading-more.activity-list-loading .activity-list-loading-message{margin-left:8px;padding-left:14px;padding-top:6px}.activity-list-no-activity{font-size:13px;margin-top:16px;text-align:center;width:100%}.activity-event.activity-event-new{background-color:#ffffd6}.activity-event.activity-event-background-transition{-webkit-transition:background-color 1000ms ease-in;-moz-transition:background-color 1000ms ease-in;-o-transition:background-color 1000ms ease-in;transition:background-color 1000ms ease-in}.activity-list-no-more-events-icon{display:inline-block;margin-bottom:10px}.activity-event{background-color:#fff;border-bottom:1px solid #dadce0;margin:0 0 12px;padding:0 0 12px;position:relative;width:100%}.activity-event>div:first-child{line-height:20px;padding:16px 0}.activity-event-action-icon{height:16px;padding:8px 4px;position:absolute;width:16px}.activity-event-available-action{border-top:1px solid #efefef;margin-left:24px;margin-top:16px;padding-top:16px}.activity-event-action-link-active{color:#4a4a4a;padding:0;position:relative}.activity-event-action-link-active svg{fill:#4a4a4a}.activity-event-action-link-active:focus,.activity-event-action-link-active:hover{color:#4285f4;cursor:pointer}.activity-event-action-link-active:focus svg,.activity-event-action-link-active:hover svg{fill:#4285f4}.activity-event-action-link-used{color:#ccc}.activity-event-action-link-used svg{fill:#ccc}.activity-event-action-text{font-weight:500;text-transform:uppercase}.activity-event-action-text-active{margin-left:32px;padding:8px 0}.activity-event-action-text-used{padding:8px 4px}.activity-list-error,.activity-list-no-more-events.activity-list-no-events{margin-bottom:20px;margin-top:10px;text-align:center}.activity-list-error-icon{display:inline-block;height:24px;margin-bottom:-5px;margin-right:20px;position:relative;width:24px}.activity-list-error-icon svg{bottom:0;position:absolute}.activity-list-events{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text}.activity-list-no-more-events{color:#5f6368;padding:0 24px 0 16px;text-align:left}.activity-list-no-more-events-text{color:#5f6368;font-size:13px;font-weight:normal;margin-bottom:0}.activity-list-no-more-events-description,.activity-list-no-more-events-learn-more{line-height:20px;margin:0;padding:14px 0}.activity-decorated-link{color:#15c;cursor:pointer;outline:none;text-decoration:none}.activity-decorated-link:focus,.activity-decorated-link:hover{text-decoration:underline}.activity-decorated-link:active{color:#d14836}.activity-list-error-try-again{color:#15c;cursor:pointer;outline:none;text-decoration:none}.activity-list-error-try-again:focus,.activity-list-error-try-again:hover,.activity-list-error-try-again .goog-flat-button-hover,.activity-list-error-try-again .goog-flat-button-focus{text-decoration:underline}.activity-list-error-try-again:active{color:#d14836}.activity-list-show-more,.activity-paging-footer-show-more .goog-flat-button{display:block;height:0;margin:0 5px;overflow:hidden}.activity-event-focus{outline:1px solid #4d90fe}.activity-hideable-focus-hidden .activity-event.activity-event-focus{outline:none}.activity-event-person{height:40px;left:16px;position:absolute;width:40px}.activity-event-person img{border-radius:50%;height:100%;width:100%}.activity-event-background svg{border-radius:50%;height:40px;width:40px}.activity-event-person-overlay{left:0;position:absolute;right:0;top:0}.activity-event-admin-icon svg{opacity:0.5}.activity-event-person-icon svg{margin-top:9px}.activity-event-admin-icon.activity-event-person-icon svg{margin-top:7px}.activity-event-drive-icon svg{margin-top:8px}.activity-event-person .activity-event-person-icon-container{border-radius:50%;height:40px;overflow:hidden;text-align:center;width:40px}.activity-event-admin-icon-container{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:2px solid rgba(0,0,0,0.2)}.activity-event-person-icon-text{color:#fff;font-size:16px;line-height:40px;vertical-align:middle}.activity-event-header{margin-left:56px;padding:0 24px 0 16px}.activity-event-details-header{color:#5f6368;font-size:13px;width:auto}.activity-event-details-container{color:#5f6368;font-size:13px;font-weight:500;margin-top:4px}.activity-event-target-list{padding-left:72px}.activity-event-file-approval,.activity-event-people-names{color:#202124;font-weight:500}.activity-event-approval-status{margin-top:4px;font-weight:500}.activity-event-approval-approved{color:#0f9d58}.activity-event-approval-rejected{color:#db4437}.activity-event-action{font-weight:normal}.activity-event-action::before{content:" "}.activity-event-target-number{font-weight:bold}.activity-event-copy-action{font-weight:bold}.activity-event-target-icon{height:16px;position:absolute;width:24px}.activity-event-target.activity-event-target-first{border-top:none}.activity-event-target-icon .drive-shortcut-icon{bottom:2px;left:-4px;position:absolute}.activity-event-target{position:relative}.activity-event-parent{border-bottom:1px solid #efefef;margin-left:72px}.activity-event-target-details{margin-left:32px}.activity-event-target-details.activity-event-locatable-target{margin-right:24px}.activity-event-target-name{font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.activity-list-hidden-text{height:0;overflow:hidden;white-space:nowrap;width:0}.activity-event-target:hover,.activity-event-target:active,.activity-event-target:focus{background-color:#fff}.activity-event-target-name.activity-event-openable-target:hover,.activity-event-target-name.activity-event-openable-target:active,.activity-event-target-name.activity-event-openable-target:focus,.activity-event-target-name .activity-event-openable-target:hover,.activity-event-target-name .activity-event-openable-target:active,.activity-event-target-name .activity-event-openable-target:focus{color:#5f6368;cursor:pointer;outline:none;text-decoration:underline}.activity-event-scopes-show-more-button,.activity-event-scopes-show-less-button{display:flex;margin-left:24px}.activity-event-show-more-button,.activity-event-show-less-button{display:flex;margin-left:6px}.activity-event-toggle-button{border:1px solid transparent;border-radius:4px;box-shadow:none;box-sizing:border-box;color:#4285f4;cursor:pointer;font-family:Google Sans,QUANTUM_FONT_FAMILY;font-size:13px;font-weight:500;height:36px;letter-spacing:0.25px;line-height:16px;outline:none;margin-top:4px;padding:9px 24px 11px 24px}.activity-event-toggle-button-hover{background-color:rgba(66,133,244,.04)}.activity-event-toggle-button-focused{background-color:#e8f0fe}.activity-event-toggle-button-hover.activity-event-toggle-button-focused{background-color:rgba(66,133,244,0.16)}.activity-event-toggle-button-active{background-color:rgba(66,133,244,0.16);box-shadow:0 1px 2px 0 rgba(60,64,67,0.30),0 1px 3px 1px rgba(60,64,67,0.15)}.activity-event-focus .activity-event-toggle-button .activity-event-toggle-button-icon,.activity-event:hover .activity-event-toggle-button .activity-event-toggle-button-icon{visibility:visible}.activity-event:hover .activity-event-toggle-button{cursor:pointer}.activity-event-children{margin-left:24px}.activity-event-target-icon,.activity-event-target-details{padding:7px 0 6px}.activity-event-target-icon-img{max-height:16px;max-width:16px;padding:0 4px}.activity-event-section-title{background-color:#fff;color:#5f6368;font-size:13px;font-weight:500;line-height:48px;margin:0;padding:0 24px 0 16px;position:relative;transition:box-shadow 267ms cubic-bezier(0.4,0.0,0.2,1)}.drive-white-bg .activity-event-section-title{border-bottom:1px solid #dadce0}.activity-event-annotation{color:#5f6368;display:inline;float:right;font-size:12px;font-weight:normal;padding-right:16px;padding-top:0;position:relative}.activity-event-source{display:inline-block;max-width:136px;overflow:hidden;text-overflow:ellipsis;vertical-align:top;white-space:nowrap}.activity-event-info{color:#5f6368;padding-bottom:12px}.activity-event-timestamp{padding:0 16px 0 16px;display:inline}.activity-event-target-parent{color:#bababa;font-size:13px}.activity-event-target-parent.activity-event-openable-target:hover,.activity-event-target-parent.activity-event-openable-target:active,.activity-event-target-parent.activity-event-openable-target:focus{color:#00992c;cursor:pointer;outline:none}.activity-event-locate{height:32px;outline:none;position:absolute;right:3px;top:0;width:24px}.activity-event-locate svg{filter:alpha(opacity=0);opacity:0;margin-left:2px;margin-top:5px}.activity-event-locate:hover,.activity-event-locate:active,.activity-event-locate:focus,.activity-event-target:hover .activity-event-locate:hover,.activity-event-target:active .activity-event-locate:active,.activity-event-target:focus .activity-event-locate:focus{cursor:pointer}.activity-event-locate:hover svg,.activity-event-locate:active svg,.activity-event-locate:focus svg,.activity-event-target:hover .activity-event-locate:hover svg,.activity-event-target:active .activity-event-locate:active svg,.activity-event-target:focus .activity-event-locate:focus svg{filter:alpha(opacity=72);opacity:.72;cursor:pointer}.activity-event-target:hover .activity-event-locate svg,.activity-event-target:active .activity-event-locate svg,.activity-event-target:focus .activity-event-locate svg{filter:alpha(opacity=55);opacity:.55}.activity-event-user-deletion-overlay svg{margin-top:4px}.activity-list .drive-spinner{height:40px}.activity-entry-empty-trash-targets .activity-event-target-name{text-decoration:line-through}.activity-event-rename-old-title{color:#ccc;margin-top:8px;overflow:hidden;text-decoration:line-through;text-overflow:ellipsis;white-space:nowrap}.activity-event-scope-change-detail.activity-event-scope-change-detail-first{border-top:none}.activity-event-scope-change-detail{position:relative;padding:2px 0}.activity-event-scope-icon{border-radius:50%;display:inline-block;overflow:hidden;padding:0;position:relative;vertical-align:middle;z-index:1}.activity-event-scope-icon img{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;height:24px;vertical-align:middle;width:24px}.activity-event-scope-icon-container .activity-event-scope-svg-icon{left:2px;position:absolute;top:2px}.activity-event-scope-background svg{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;height:24px;width:24px}.activity-event-scope-icon .activity-event-scope-icon-container{height:24px;text-align:center;width:24px}.activity-event-scope-icon-text{color:#fff;height:24px;left:0;line-height:24px;position:absolute;top:0;width:24px}.activity-event-scope-element{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;font-weight:lighter;padding-left:48px;width:100%}.activity-event-scope-element-access{color:#5f6368;font-size:13px;float:right;padding-left:8px}.activity-event-scope-element-text{color:#5f6368;font-weight:500}.activity-event-scope-detail-unshared .activity-event-scope-element-text,.activity-event-scope-detail-unshared .activity-event-scope-detail-ba-display-name{text-decoration:line-through}.activity-event-scope-detail-icon-container{display:inline-block;line-height:normal;vertical-align:middle;width:0}.activity-event-scope-detail-unshared{filter:alpha(opacity=50);opacity:0.5}.activity-event-scope-detail-content-container{display:inline-block;line-height:normal;vertical-align:middle;width:100%}.activity-event-scopes-list{margin-top:12px;position:relative;padding:0 24px}.activity-event-scope-detail-ba-container{display:inline-block;margin-left:48px;vertical-align:middle}.activity-event-scope-detail-ba-display-name{color:#202124;font-weight:500}.activity-event-scope-detail-ba-subtext{color:#5f6368;font-size:13px}.activity-team-drive-setting-events{padding-top:10px}.activity-team-drive-setting-detail{display:flex;padding-left:35px}.activity-team-drive-setting-detail:not(:last-child){padding-bottom:10px}.activity-team-drive-setting-description{display:inline-block;font-weight:normal;padding-left:20px}.docs-tabbar{clear:left;display:flex;flex-direction:row;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;float:left;-webkit-justify-content:left;justify-content:left;outline:none}.docs-tabbar-tab{-ms-flex-align:center;-moz-box-align:center;-webkit-box-align:center;box-align:center;-webkit-align-items:center;align-items:center;border-bottom:2px solid transparent;border-top:2px solid transparent;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;cursor:pointer;display:flex;height:48px;box-pack:center;-ms-flex-pack:center;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;max-width:264px;min-width:72px;padding:0px 24px}.docs-tabbar-tab-selected{border-bottom:2px solid #fff}.docs-hc-edge.docs-tabbar-tab.docs-tabbar-tab-selected .docs-tabbar-tablabel,.docs-hc-gecko.docs-tabbar-tab.docs-tabbar-tab-selected .docs-tabbar-tablabel,.docs-hc-ie.docs-tabbar-tab.docs-tabbar-tab-selected .docs-tabbar-tablabel{border-bottom:2px solid #fff;padding-bottom:0px}.docs-hc-edge.docs-tabbar-tab .docs-tabbar-tablabel,.docs-hc-gecko.docs-tabbar-tab .docs-tabbar-tablabel,.docs-hc-ie.docs-tabbar-tab .docs-tabbar-tablabel{padding-bottom:2px}.docs-tabbar-focused .docs-tabbar-tab-selected{background:rgba(255,255,255,0.12)}.docs-tabbar-mouseactive .docs-tabbar-tab{background:transparent}.docs-tabbar .docs-tabbar-tab-active{background:rgba(255,255,255,0.25)}.docs-tabbar-tablabel{color:rgba(255,255,255,0.7);font-family:'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;overflow:hidden;text-overflow:ellipsis;text-transform:uppercase;white-space:nowrap}.docs-tabbar-tab-selected .docs-tabbar-tablabel{color:#fff}.docs-material-labeled-checkbox-checkbox{outline:none}.docs-material-labeled-checkbox .docs-material-labeled-checkbox-checkbox{border:2px solid rgba(0,0,0,0.38);border-radius:2px;cursor:pointer;float:left;height:12px;margin:1px;position:relative;top:4px;vertical-align:middle;width:12px}.docs-material-labeled-checkbox-checkbox.docs-material-labeled-checkbox-checked:before{content:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8cGF0aAogICAgIGQ9Ik0gMC4wNDAzODA1OSwwLjYyNjc3NjcgMC4xNDY0NDY2MSwwLjUyMDcxMDY4IDAuNDI5Mjg5MzIsMC44MDM1NTMzOSAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IE0gMC4yMTcxNTcyOSwwLjgwMzU1MzM5IDAuODUzNTUzMzksMC4xNjcxNTcyOSAwLjk1OTYxOTQxLDAuMjczMjIzMyAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IgogICAgIGlkPSJyZWN0Mzc4MCIKICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgo8L3N2Zz4K");display:block;line-height:12px}.docs-material-labeled-checkbox-checkbox.docs-material-labeled-checkbox-checked{background-color:#4285f4;border:2px solid #4285f4}.docs-material-labeled-checkbox-focused .docs-material-labeled-checkbox-checkbox{border:2px solid #4285f4}.docs-material-labeled-checkbox-disabled .docs-material-labeled-checkbox-checkbox{border-color:rgba(0,0,0,0.26);cursor:default}.docs-material-labeled-checkbox-disabled .docs-material-labeled-checkbox-checkbox.docs-material-labeled-checkbox-checked{background-clip:padding-box;background-color:rgba(0,0,0,0.26);border-color:rgba(0,0,0,0.26)}.docs-material-labeled-checkbox-focused .docs-material-labeled-checkbox-checkbox.docs-material-labeled-checkbox-checked{background-color:#2a56c6;border:2px solid #2a56c6}.docs-material-labeled-checkbox .docs-material-labeled-checkbox-label{color:rgba(0,0,0,0.87);display:block;font:13px Roboto,RobotoDraft,Helvetica,Arial,sans-serif;line-height:20px;margin-left:30px;overflow-wrap:break-word;padding:4px 0;vertical-align:middle;width:auto;word-wrap:break-word}.docs-material-labeled-checkbox.docs-material-labeled-checkbox-disabled .docs-material-labeled-checkbox-label{color:rgba(0,0,0,0.54)}.docs-material-labeled-checkbox .docs-material-labeled-checkbox-description-hide{display:none}div.docs-material-gm-checkbox,span.docs-material-gm-checkbox{border:2px solid #5f6368;border-radius:2px;box-sizing:border-box;cursor:pointer;height:18px;margin:1px;outline:none;top:4px;vertical-align:middle;width:18px;display:inline-block}div.docs-material-gm-checkbox-checked,span.docs-material-gm-checkbox-checked,div.docs-material-gm-checkbox-undetermined,span.docs-material-gm-checkbox-undetermined{background-color:#188038;border:2px solid #188038}div.docs-material-gm-checkbox-checked:before,span.docs-material-gm-checkbox-checked:before{content:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8cGF0aAogICAgIGQ9Ik0gMC4wNDAzODA1OSwwLjYyNjc3NjcgMC4xNDY0NDY2MSwwLjUyMDcxMDY4IDAuNDI5Mjg5MzIsMC44MDM1NTMzOSAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IE0gMC4yMTcxNTcyOSwwLjgwMzU1MzM5IDAuODUzNTUzMzksMC4xNjcxNTcyOSAwLjk1OTYxOTQxLDAuMjczMjIzMyAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IgogICAgIGlkPSJyZWN0Mzc4MCIKICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgo8L3N2Zz4K");display:block;line-height:15px}div.docs-material-gm-checkbox-undetermined:before,span.docs-material-gm-checkbox-undetermined:before{border-top:2px solid white;content:'';display:block;height:0;margin-left:3px;margin-top:6px;width:8px}div.docs-material-gm-checkbox-focused,span.docs-material-gm-checkbox-focused{border:2px solid #188038}div.docs-material-gm-checkbox-disabled,span.docs-material-gm-checkbox-disabled{cursor:default;opacity:.38}div.docs-material-gm-checkbox-disabled.docs-material-gm-checkbox-checked,span.docs-material-gm-checkbox-disabled.docs-material-gm-checkbox-checked{background-clip:padding-box;background-color:#5f6368;border-color:#5f6368;opacity:.38}div.docs-material-gm-checkbox-checked.docs-material-gm-checkbox-focused,span.docs-material-gm-checkbox-checked.docs-material-gm-checkbox-focused{background-color:#188038;border:2px solid #188038}div.docs-material-gm-checkbox-disabled.docs-material-gm-checkbox-undetermined,span.docs-material-gm-checkbox-disabled.docs-material-gm-checkbox-undetermined{background-clip:padding-box;background-color:#5f6368;border-color:#5f6368;opacity:.38}div.docs-material-gm-checkbox-hover,span.docs-material-gm-checkbox-hover,div.docs-material-gm-checkbox-focused,span.docs-material-gm-checkbox-focused{outline:1px dotted transparent;outline-offset:3px}div.docs-material-gm-checkbox-active,span.docs-material-gm-checkbox-active{outline:1px solid transparent;outline-offset:3px}.docs-material-gm-labeled-checkbox{cursor:pointer;max-width:672px;outline:none;padding:8px 0px;width:100%}.docs-material-gm-labeled-checkbox-content{display:inline-block}.docs-material-gm-labeled-checkbox-circle{width:40px;height:40px;border-radius:50%;cursor:pointer;position:absolute;margin-left:-30px;margin-top:-9px}.docs-material-gm-labeled-checkbox-checkbox{border:2px solid #5f6368;border-radius:2px;box-sizing:border-box;cursor:pointer;height:18px;margin:1px;outline:none;top:4px;vertical-align:middle;width:18px;display:inline-block}.docs-material-gm-labeled-checkbox-checkbox.docs-material-gm-labeled-checkbox-checked,.docs-material-gm-labeled-checkbox-checkbox.docs-material-gm-labeled-checkbox-undetermined{background-color:#188038;border:2px solid #188038}.docs-material-gm-labeled-checkbox-checkbox.docs-material-gm-labeled-checkbox-checked:before{content:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8cGF0aAogICAgIGQ9Ik0gMC4wNDAzODA1OSwwLjYyNjc3NjcgMC4xNDY0NDY2MSwwLjUyMDcxMDY4IDAuNDI5Mjg5MzIsMC44MDM1NTMzOSAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IE0gMC4yMTcxNTcyOSwwLjgwMzU1MzM5IDAuODUzNTUzMzksMC4xNjcxNTcyOSAwLjk1OTYxOTQxLDAuMjczMjIzMyAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IgogICAgIGlkPSJyZWN0Mzc4MCIKICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgo8L3N2Zz4K");display:block;line-height:15px}.docs-material-gm-labeled-checkbox-checkbox.docs-material-gm-labeled-checkbox-undetermined:before{border-top:2px solid white;content:'';display:block;height:0;margin-left:3px;margin-top:6px;width:8px}.docs-material-gm-labeled-checkbox-disabled .docs-material-gm-labeled-checkbox-checkbox{cursor:default;opacity:.38}.docs-material-gm-labeled-checkbox-hover .docs-material-gm-labeled-checkbox-checkbox,.docs-material-gm-labeled-checkbox-focused .docs-material-gm-labeled-checkbox-checkbox{outline:1px dotted transparent;outline-offset:3px}.docs-material-gm-labeled-checkbox-active .docs-material-gm-labeled-checkbox-checkbox{outline:1px solid transparent;outline-offset:3px}.docs-material-gm-labeled-checkbox-hover .docs-material-gm-labeled-checkbox-circle{background-color:#5f6368;opacity:.04}.docs-material-gm-labeled-checkbox-focused .docs-material-gm-labeled-checkbox-circle{background-color:#5f6368;opacity:.06}.docs-material-gm-labeled-checkbox-active .docs-material-gm-labeled-checkbox-circle{background-color:#5f6368;opacity:.1}.docs-material-gm-labeled-checkbox-disabled .docs-material-gm-labeled-checkbox-checkbox.docs-material-gm-labeled-checkbox-checked{background-clip:padding-box;background-color:#5f6368;border-color:#5f6368;opacity:.38}.docs-material-gm-labeled-checkbox-disabled .docs-material-gm-labeled-checkbox-checkbox.docs-material-gm-labeled-checkbox-undetermined{background-clip:padding-box;background-color:#5f6368;border-color:#5f6368;opacity:.38}.docs-material-gm-labeled-checkbox-hover .docs-material-gm-labeled-checkbox-checked+.docs-material-gm-labeled-checkbox-circle{background-color:#188038;opacity:.04}.docs-material-gm-labeled-checkbox-focused .docs-material-gm-labeled-checkbox-checked+.docs-material-gm-labeled-checkbox-circle{background-color:#188038;opacity:.06}.docs-material-gm-labeled-checkbox-active .docs-material-gm-labeled-checkbox-checked+.docs-material-gm-labeled-checkbox-circle{background-color:#188038;opacity:.1}.docs-material-gm-labeled-checkbox .docs-material-gm-labeled-checkbox-label{color:#3c4043;cursor:pointer;display:inline-block;font:14px Roboto,RobotoDraft,Helvetica,Arial,sans-serif;line-height:16px;margin-left:12px;overflow-wrap:break-word;padding:3px 0;vertical-align:middle;width:auto;word-wrap:break-word}.docs-material-gm-labeled-checkbox.docs-material-gm-labeled-checkbox-disabled .docs-material-gm-labeled-checkbox-label{opacity:.38}.docs-material-gm-labeled-checkbox .docs-material-gm-labeled-checkbox-description{color:#80868b;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:12px;margin-left:32px;padding:1px 0;width:100%}.docs-material-gm-labeled-checkbox.docs-material-gm-labeled-checkbox-disabled .docs-material-gm-labeled-checkbox-description{opacity:.38}.docs-material-gm-labeled-checkbox .docs-material-gm-labeled-checkbox-description-hide{display:none}.goog-menu{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:0 2px 4px rgba(0,0,0,0.2);-moz-box-shadow:0 2px 4px rgba(0,0,0,0.2);box-shadow:0 2px 4px rgba(0,0,0,0.2);-webkit-transition:opacity 0.218s;-moz-transition:opacity 0.218s;-o-transition:opacity 0.218s;transition:opacity 0.218s;background:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);cursor:default;font-size:13px;margin:0;outline:none;padding:6px 0;position:absolute}.goog-flat-menu-button{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;background-color:#f5f5f5;background-image:-webkit-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:-moz-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:-ms-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:-o-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:linear-gradient(top,#f5f5f5,#f1f1f1);border:1px solid #dcdcdc;color:#333;cursor:default;font-size:11px;font-weight:bold;line-height:27px;list-style:none;margin:0 2px;min-width:46px;outline:none;padding:0 18px 0 6px;text-align:center;text-decoration:none}.goog-flat-menu-button-disabled{background-color:#fff;border-color:#f3f3f3;color:#b8b8b8}.goog-flat-menu-button.goog-flat-menu-button-hover{background-color:#f8f8f8;background-image:-webkit-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-moz-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-ms-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-o-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:linear-gradient(top,#f8f8f8,#f1f1f1);-webkit-box-shadow:0 1px 1px rgba(0,0,0,.1);-moz-box-shadow:0 1px 1px rgba(0,0,0,.1);box-shadow:0 1px 1px rgba(0,0,0,.1);border-color:#c6c6c6;color:#111}.goog-flat-menu-button.goog-flat-menu-button-focused{border-color:#4d90fe}.goog-flat-menu-button.goog-flat-menu-button-open,.goog-flat-menu-button.goog-flat-menu-button-active{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1);background-color:#eee;background-image:-webkit-linear-gradient(top,#eee,#e0e0e0);background-image:-moz-linear-gradient(top,#eee,#e0e0e0);background-image:-ms-linear-gradient(top,#eee,#e0e0e0);background-image:-o-linear-gradient(top,#eee,#e0e0e0);background-image:linear-gradient(top,#eee,#e0e0e0);border:1px solid #ccc;color:#333;z-index:2}.goog-flat-menu-button-caption{vertical-align:top;white-space:nowrap}.goog-flat-menu-button-dropdown{border-color:#777 transparent;border-style:solid;border-width:4px 4px 0 4px;height:0;width:0;position:absolute;right:5px;top:12px}.goog-flat-menu-button .goog-flat-menu-button-img{margin-top:-3px;opacity:.70;vertical-align:middle}.goog-flat-menu-button-active .goog-flat-menu-button-img,.goog-flat-menu-button-open .goog-flat-menu-button-img,.goog-flat-menu-button-selected .goog-flat-menu-button-img,.goog-flat-menu-button-hover .goog-flat-menu-button-img{opacity:0.9}.goog-flat-menu-button-active .goog-flat-menu-button-dropdown,.goog-flat-menu-button-open .goog-flat-menu-button-dropdown,.goog-flat-menu-button-selected .goog-flat-menu-button-dropdown,.goog-flat-menu-button-hover .goog-flat-menu-button-dropdown{border-color:#595959 transparent}.goog-flat-menu-button-left,.goog-flat-menu-button-right{z-index:1}.goog-flat-menu-button-left.goog-flat-menu-button-disabled{z-index:0}.goog-flat-menu-button-right:focus,.goog-flat-menu-button-hover.goog-flat-menu-button-collapse-right{z-index:2}.goog-flat-menu-button-left:focus,.goog-flat-menu-button-hover.goog-flat-menu-button-collapse-left{z-index:2}.goog-flat-menu-button-collapse-left{margin-left:-1px;-moz-border-radius-bottomleft:0;-moz-border-radius-topleft:0;-webkit-border-bottom-left-radius:0;-webkit-border-top-left-radius:0;border-bottom-left-radius:0;border-top-left-radius:0;min-width:0;padding-left:0;vertical-align:top}.goog-flat-menu-button-collapse-right{margin-right:0px;-moz-border-radius-topright:0;-moz-border-radius-bottomright:0;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:0;border-top-right-radius:0;border-bottom-right-radius:0}.goog-menuitem,.goog-tristatemenuitem,.goog-filterobsmenuitem{position:relative;color:#333;cursor:pointer;list-style:none;margin:0;padding:6px 8em 6px 30px;white-space:nowrap}.goog-menu-nocheckbox .goog-menuitem,.goog-menu-noicon .goog-menuitem{padding-left:16px;vertical-align:middle}.goog-menu-noaccel .goog-menuitem{padding-right:44px}.goog-menuitem-disabled{cursor:default}.goog-menuitem-disabled .goog-menuitem-accel,.goog-menuitem-disabled .goog-menuitem-content{color:#ccc!important}.goog-menuitem-disabled .goog-menuitem-icon{filter:alpha(opacity=30);opacity:0.3}.goog-menuitem-highlight,.goog-menuitem-hover{background-color:#eee;border-color:#eee;border-style:dotted;border-width:1px 0;padding-top:5px;padding-bottom:5px}.goog-menuitem-highlight .goog-menuitem-content,.goog-menuitem-hover .goog-menuitem-content{color:#333}.goog-menuitem-checkbox,.goog-menuitem-icon{background-repeat:no-repeat;height:21px;left:3px;position:absolute;right:auto;top:3px;vertical-align:middle;width:21px}.goog-option-selected{background-image:url(//ssl.gstatic.com/ui/v1/menu/checkmark.png);background-repeat:no-repeat;background-position:left center}.goog-option-selected .goog-menuitem-content{color:#333}.goog-menuitem-accel{color:#777;direction:ltr;left:auto;padding:0 6px;position:absolute;right:0;text-align:right}.goog-menuitem-mnemonic-hint{text-decoration:underline}.goog-menuitem-mnemonic-separator{color:#777;font-size:12px;padding-left:4px}.goog-menuseparator{border-top:1px solid #ebebeb;margin-top:6px;margin-bottom:6px}.goog-submenu-arrow{-webkit-transition:all 0.218s;-moz-transition:all 0.218s;-o-transition:all 0.218s;transition:all 0.218s;font-size:70%;left:auto;right:10px;padding-top:3px;padding-right:0;position:absolute;text-align:right;opacity:.5;filter:alpha(opacity=50)}.goog-menuitem-highlight .goog-submenu-arrow,.goog-menuitem-hover .goog-submenu-arrow{-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none;border-left-color:#999;opacity:1.0}.goog-menuitem-disabled .goog-submenu-arrow{color:inherit;opacity:1.0}.docs-material-labeled-select{outline:0;width:100%}.docs-material-labeled-select-outer-box{transition:border-color 300ms ease;border-bottom:1px solid rgba(0,0,0,0.12);cursor:pointer;height:26px;line-height:26px;margin-bottom:1px;width:100%}.docs-material-labeled-select-hover .docs-material-labeled-select-outer-box{border-bottom-color:rgba(0,0,0,0.38)}.docs-material-labeled-select-open .docs-material-labeled-select-outer-box,.docs-material-labeled-select-focused .docs-material-labeled-select-outer-box{border-bottom-width:2px;border-bottom-color:#4285f4;margin-bottom:0px}.docs-material-labeled-select-disabled .docs-material-labeled-select-outer-box{border-bottom:1px dotted rgba(0,0,0,0.12);cursor:default}.docs-material-labeled-select-inner-box{display:flex;justify-content:space-between}.docs-material-labeled-select-caption{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;color:rgba(0,0,0,0.87);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;height:26px;line-height:26px;max-width:100%;overflow:hidden;padding-right:24px;position:relative;text-overflow:ellipsis;white-space:nowrap}.docs-material-labeled-select-disabled .docs-material-labeled-select-caption{color:rgba(0,0,0,0.12)}.docs-material-labeled-select-dropdown{align-items:center;display:flex;height:24px;justify-content:center;width:24px}.docs-material-labeled-select-dropdown-icon{background:no-repeat url(//ssl.gstatic.com/docs/common/material_common_sprite146_grey_medium.svg) -46px -3920px;height:18px;width:18px}.docs-material-labeled-select-hover .docs-material-labeled-select-dropdown-icon,.docs-material-labeled-select-focused .docs-material-labeled-select-dropdown-icon{opacity:0.54}.docs-material-labeled-select-disabled .docs-material-labeled-select-dropdown-icon{opacity:0.12}.docs-material-labeled-select-label{color:#616161;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:11px;line-height:16px}.docs-material-labeled-select-disabled .docs-material-labeled-select-label{opacity:0.12}.docs-material-select{color:rgba(0,0,0,0.87);cursor:pointer;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;height:26px;line-height:26px;outline:0;width:100%}.docs-material-select-disabled{color:rgba(0,0,0,0.12);cursor:default}.docs-material-select-outer-box{transition:border-color 300ms ease;border-bottom:1px solid rgba(0,0,0,0.12);height:26px;line-height:26px;margin-bottom:1px;width:100%}.docs-material-select-hover .docs-material-select-outer-box{border-bottom-color:rgba(0,0,0,0.38)}.docs-material-select-focused .docs-material-select-outer-box,.docs-material-select-open .docs-material-select-outer-box{border-bottom-width:2px;border-bottom-color:#4285f4;margin-bottom:0px}.docs-material-select-disabled .docs-material-select-outer-box{border-bottom:1px dotted rgba(0,0,0,0.12)}.docs-material-select-inner-box{position:relative;width:100%}.docs-material-select-caption{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;height:26px;line-height:26px;max-width:100%;overflow:hidden;padding-right:24px;position:relative;text-overflow:ellipsis;white-space:nowrap}.docs-material-select-dropdown{position:absolute;right:7px;top:10.5px}.docs-material-select-dropdown-icon{transition:opacity 0.3s ease;background:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1IiBoZWlnaHQ9IjMiPjxwb2x5Z29uIHBvaW50cz0iMCwwIDUsMCAyLjUsMyIgZmlsbD0iIzAwMCIvPjwvc3ZnPg==") no-repeat;background-size:contain;height:5px;opacity:0.38;width:9px}.docs-material-select-hover .docs-material-select-dropdown-icon,.docs-material-select-focused .docs-material-select-dropdown-icon{opacity:0.54}.docs-material-select-disabled .docs-material-select-dropdown-icon{opacity:0.12}.docs-material-gm-labeled-select{color:#3c4043;outline:none;width:100%}.docs-material-gm-labeled-select-outer-box{border:1px solid #dadce0;border-radius:4px;box-sizing:border-box;cursor:pointer;padding:8px 6px 8px 8px;width:100%}.docs-material-gm-labeled-select-hover .docs-material-gm-labeled-select-outer-box{background-color:rgba(60,64,67,0.04);border:1px solid #dadce0}.docs-material-gm-labeled-select-open .docs-material-gm-labeled-select-outer-box{background-color:rgba(60,64,67,0.04);border:1px solid transparent}.docs-material-gm-select-open.docs-material-gm-select-hover .docs-material-gm-labeled-select-outer-box{background-color:rgba(60,64,67,0.06)}.docs-material-gm-select-open.docs-material-gm-select-focused .docs-material-gm-labeled-select-outer-box{background-color:rgba(60,64,67,0.08)}.docs-material-gm-labeled-select-disabled .docs-material-gm-labeled-select-outer-box{border:1px solid #dadce0;box-shadow:none;cursor:default}.docs-material-gm-labeled-select-inner-box{align-items:center;display:flex;justify-content:space-between;position:relative;width:100%}.docs-material-gm-labeled-select-content{margin-bottom:8px}.docs-material-gm-labeled-select-caption{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;color:#202124;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;height:20px;line-height:20px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.docs-material-gm-labeled-select-dropdown{align-items:center;display:flex;height:24px;justify-content:center;width:24px}.docs-material-gm-labeled-select-dropdown-icon{background:no-repeat url(//ssl.gstatic.com/docs/common/material_common_sprite146_grey_medium.svg) -46px -3920px;height:18px;width:18px}.docs-material-gm-labeled-select-open .docs-material-gm-labeled-select-dropdown-icon{-moz-transform:rotate(180deg);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.docs-material-gm-labeled-select-label{color:#5f6368;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:12px}.docs-material-gm-select{color:#3c4043;outline:none;width:100%}.docs-material-gm-select-disabled{color:#5f6368;opacity:.38;cursor:default}.docs-material-gm-select-outer-box{border:1px solid #dadce0;border-radius:4px;box-sizing:border-box;cursor:pointer;padding:8px 6px 8px 8px;width:100%}.docs-material-gm-select-outer-box:active{background-color:#fff;border:1px solid transparent;box-shadow:0 2px 6px 2px rgba(60,64,67,.15)}.docs-material-gm-select-hover .docs-material-gm-select-outer-box{background-color:rgba(60,64,67,0.04);border:1px solid #dadce0}.docs-material-gm-select-focused .docs-material-gm-select-outer-box{background-color:rgba(60,64,67,0.06);border:1px solid #dadce0}.docs-material-gm-select-open .docs-material-gm-select-outer-box{background-color:rgba(60,64,67,0.04);border:1px solid transparent}.docs-material-gm-select-open.docs-material-gm-select-hover .docs-material-gm-select-outer-box{background-color:rgba(60,64,67,0.06)}.docs-material-gm-select-open.docs-material-gm-select-focused .docs-material-gm-select-outer-box{background-color:rgba(60,64,67,0.08)}.docs-material-gm-select-disabled .docs-material-gm-select-outer-box{border:1px solid #dadce0;box-shadow:none;cursor:default}.docs-material-gm-select-inner-box{align-items:center;display:flex;justify-content:space-between;position:relative;width:100%}.docs-material-gm-select-caption{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;color:#202124;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;height:20px;line-height:20px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.docs-material-gm-select-dropdown{align-items:center;display:flex;height:24px;justify-content:center;width:24px}.docs-material-gm-select-dropdown-icon{background:no-repeat url(//ssl.gstatic.com/docs/common/material_common_sprite146_grey_medium.svg) -46px -3920px;height:18px;width:18px}.docs-material-gm-select-open .docs-material-gm-select-dropdown-icon{-moz-transform:rotate(180deg);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.docs-material-labeled-text-field{height:40px;line-height:40px;padding-top:5px;position:relative}.docs-material-labeled-text-field-input{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;transition:border-color 200ms cubic-bezier(0.4,0.0,0.2,1);background:none;border:none;border-bottom:1px solid rgba(0,0,0,0.12);color:rgba(0,0,0,0.87);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;height:26px;line-height:26px;outline:none;overflow:hidden;text-overflow:ellipsis;width:100%}.docs-material-labeled-text-field-hover .docs-material-labeled-text-field-input{border-bottom-color:rgba(0,0,0,0.38)}.docs-material-labeled-text-field-focused .docs-material-labeled-text-field-input{border-bottom:2px solid #4285f4}.docs-material-labeled-text-field-disabled .docs-material-labeled-text-field-input{border-bottom:1px dotted rgba(0,0,0,0.12);color:rgba(0,0,0,0.12);cursor:default}.docs-material-labeled-text-field-label{transition:transform 200ms cubic-bezier(0.4,0.0,1,1);color:#616161;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;line-height:45px;position:absolute;transform-origin:left bottom}.docs-material-labeled-text-field-has-text .docs-material-labeled-text-field-label,.docs-material-labeled-text-field-focused .docs-material-labeled-text-field-label{transform:translateY(-22px) scale(.846,.846)}.docs-material-labeled-text-field-focused .docs-material-labeled-text-field-label{color:#4285f4}.docs-material-labeled-text-field-disabled .docs-material-labeled-text-field-label{opacity:0.12}.docs-material-text-area{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;transition:border-color 250ms cubic-bezier(0.4,0.0,0.2,1);background:none;border:none;border-bottom:1px solid rgba(0,0,0,0.12);color:rgba(0,0,0,0.87);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;outline:none;resize:none;width:100%}.docs-material-text-area:hover{border-bottom-color:rgba(0,0,0,0.38)}.docs-material-text-area:focus{border-bottom:2px solid #4285f4}.docs-material-text-area:disabled{border-bottom:1px dotted rgba(0,0,0,0.12);color:rgba(0,0,0,0.12);cursor:default}.docs-material-text-field-input{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;transition:border-color 250ms cubic-bezier(0.4,0.0,0.2,1);background:none;border:none;border-bottom:1px solid rgba(0,0,0,0.12);color:rgba(0,0,0,0.87);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;height:26px;line-height:26px;outline:none;overflow:hidden;text-overflow:ellipsis;width:100%}.docs-material-text-field-hover .docs-material-text-field-input{border-bottom-color:rgba(0,0,0,0.38)}.docs-material-text-field-focused .docs-material-text-field-input{border-bottom:2px solid #4285f4}.docs-material-text-field-disabled .docs-material-text-field-input{border-bottom:1px dotted rgba(0,0,0,0.12);color:rgba(0,0,0,0.12);cursor:default}.drive-spinner{height:44px;overflow:hidden;position:relative}.drive-quantum-spinner{height:28px;left:50%;margin-left:-14px;position:absolute;top:8px;width:28px}.docs-analytics-icon{direction:ltr;text-align:left;overflow:hidden;position:relative;vertical-align:middle}.docs-analytics-img:before{content:url(//ssl.gstatic.com/docs/common/menu_feature_sprite7.svg)}.docs-analytics-img{height:4332px;position:absolute;width:72px}.docs-analytics-hc-edge .docs-analytics-icon,.docs-analytics-hc-gecko .docs-analytics-icon{filter:invert(100%)}.docs-analytics-hc-ie .docs-analytics-icon{-ms-high-contrast-adjust:none;background-color:white}.docs-analytics-arrow-downward-18px{left:0;top:-4296px}.docs-analytics-arrow-drop-down-black-18dp{left:-18px;top:-1944px}.docs-analytics-arrow-right-black-18dp{left:-18px;top:-3658px}.docs-analytics-arrow-upward-18px{left:0;top:-640px}.docs-analytics-close-black-24px{left:-24px;top:-452px}.docs-analytics-close-white-24px{left:-48px;top:-452px}.docs-analytics-info-outline-black-24px{left:-42px;top:-1098px}.docs-analytics-group-in-circle-32px{left:-24px;top:-1748px}.docs-analytics-keyboard-arrow-down-18px{left:-50px;top:-1222px}.docs-analytics-keyboard-arrow-up-18px{left:0;top:-2992px}.docs-analytics-document-icon-kix{left:0;top:-2974px}.docs-analytics-document-icon-punch{left:-24px;top:-1098px}.docs-analytics-document-icon-sketchy{left:-50px;top:-3034px}.docs-analytics-document-icon-ritz{left:-36px;top:-4314px}.docs-analytics-email-icon{left:-24px;top:-4146px}.analytics-dialog{border-radius:8px;height:100%;max-height:586px;max-width:880px;min-width:580px;width:100%}.analytics-dialog.analytics-dialog-collapsed{max-width:684px;width:calc(100% - (2*8px))}.analytics-dialog::before{border:1px solid transparent;border-radius:8px;bottom:-1px;content:'';left:-1px;position:absolute;right:-1px;top:-1px}.analytics-dialog-title{display:none}.analytics-vc-content .docs-material-gm-select-caption{padding-left:8px;width:100%}.analytics-vc-content .docs-material-gm-select-dropdown{padding-right:8px}.analytics-vc-content .docs-material-gm-select-outer-box{padding:0}.analytics-vc-content .goog-menu .goog-menuitem-highlight{border:none}.analytics-btn-fill.jfk-button{cursor:pointer;background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff}.analytics-btn-fill.jfk-button-hover{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;background:#2a8947;box-shadow:0 1px 3px 1px rgba(52,168,83,0.15)}.analytics-btn-fill.jfk-button-focused{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;background:#4f9e67;box-shadow:0 1px 3px 1px rgba(52,168,83,0.15)}.analytics-btn-fill.jfk-button-focused.jfk-button-hover{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;background:#62a877;box-shadow:0 1px 3px 1px rgba(52,168,83,0.15)}.analytics-btn-fill.jfk-button-focused.jfk-button-active{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;background:#62a877;box-shadow:0 2px 6px 2px rgba(52,168,83,0.15)}.analytics-btn-fill.jfk-button-disabled{cursor:default;background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;background:#f1f3f4;color:#3c4043;opacity:0.38}.analytics-btn-hairline.jfk-button{cursor:pointer;background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:white;border:1px solid #dadce0!important;color:#188038}.analytics-btn-hairline.jfk-button-hover{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#f8fcf9;border:1px solid #c8e7d1!important}.analytics-btn-hairline.jfk-button-focused{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#e7f5eb;border:1px solid #bbe2c6!important}.analytics-btn-hairline.jfk-button-focused.jfk-button-hover{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#dff2e4;border:1px solid #b5e0c1!important}.analytics-btn-hairline.jfk-button-focused.jfk-button-active{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#dff2e4;border:1px solid transparent!important;box-shadow:0 2px 6px 2px rgba(60,64,67,.15)}.analytics-btn-hairline.jfk-button-disabled{cursor:default;background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:white;border:1px solid #f1f3f4!important;color:#3c4043;opacity:0.38}.analytics-btn-text.jfk-button{cursor:pointer;background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:white;color:#188038}.analytics-btn-text.jfk-button-hover{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#f8fcf9;color:#188038}.analytics-btn-text.jfk-button-focused{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#e7f5eb;color:#188038}.analytics-btn-text.jfk-button-focused.jfk-button-hover{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#dff2e4;color:#188038}.analytics-btn-text.jfk-button-focused.jfk-button-active{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#dff2e4;color:#188038;box-shadow:0 2px 6px 2px rgba(60,64,67,.15)}.analytics-btn-text.jfk-button-disabled{cursor:default;background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:white;color:#188038;color:#3c4043;opacity:0.38}.analytics-cotc{display:flex;flex-direction:column;-webkit-box-flex:1;box-flex:1;-ms-flex-positive:1;-webkit-flex-grow:1;flex-grow:1;overflow-x:hidden;overflow-y:auto}.analytics-cotc-header{-webkit-align-items:center;align-items:center;display:flex;-ms-flex:0 0 auto;-webkit-flex:0 0 auto;flex:0 0 auto;flex-direction:row;justify-content:space-between;margin:18px 24px 0 24px;overflow:hidden}.analytics-cotc-legend{-webkit-align-items:center;align-items:center;color:#202124;display:flex;-ms-flex:0 0;-webkit-flex:0 0;flex:0 0;flex-direction:row;font-size:12px;margin:40px 24px 40px 45px;text-align:center}.analytics-cotc-legend-box{display:flex;margin-right:8px}.analytics-cotc-legend span{margin-right:24px}.analytics-ct-table{-webkit-align-items:flex-start;align-items:flex-start;border-collapse:collapse;display:flex;flex-direction:column;padding:20px;white-space:nowrap}.analytics-ct-table-header{display:flex;flex-direction:row;-webkit-box-flex:1;box-flex:1;-ms-flex-positive:1;-webkit-flex-grow:1;flex-grow:1}.analytics-ct-table-header-container{display:flex;height:11px;width:100%}.analytics-ct-table-date-container{margin:0;position:absolute}.analytics-ct-table-date{font-size:9px;margin-left:-50%}.analytics-ct-table-date-light{opacity:0.6}.analytics-ct-table-container{display:flex;flex:1 1 auto;overflow-y:auto;width:100%}.analytics-ct-table-contributors{border-collapse:collapse;max-height:100%;overflow-y:auto;table-layout:fixed;width:100%}.analytics-ct-contributor-row{align-items:center;border-right:1px solid #e3e3e3}.analytics-ct-contributor-row:last-child .analytics-ct-table-profile{border-bottom:0}.analytics-ct-contributor-row:last-child .analytics-ct-table-activity-cell-div{border-bottom:0}.analytics-ct-table-profile-container{background-color:#f9f9f9;height:38px;padding:0;width:170px}.analytics-ct-table-profile{-webkit-align-items:center;align-items:center;border-bottom:2px solid #fff;display:flex;flex-direction:row;height:100%;padding:3px 5px}.analytics-ct-table-profile .analytics-profile-image{max-height:24px;max-width:24px}.analytics-ct-table-name{color:#3c4043;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;padding-left:12px}.analytics-ct-table-activity-cell{flex-grow:1;height:38px;padding:0;position:relative}.analytics-ct-table-activity-cell-light-border::before,.analytics-ct-table-activity-cell-dark-border::before,.analytics-ct-table-activity-cell-light-border-disabled::before,.analytics-ct-table-activity-cell-dark-border-disabled::before{content:'';height:100%;position:absolute;left:0;top:0}.analytics-ct-table-activity-cell-light-border::before{border-left:1px solid #eeeeee}.analytics-ct-table-activity-cell-dark-border::before{border-left:1px solid #e0e0e0}.analytics-ct-table-activity-cell-light-border-disabled::before{border-left:1px solid #e0e0e0}.analytics-ct-table-activity-cell-dark-border-disabled::before{border-left:1px solid #dbdbdb}.analytics-ct-table-activity-cell-div{background-color:#f9f9f9;border-bottom:2px solid #fff;height:100%}.analytics-ct-table-activity-cell-div-disabled{background-color:#eeeeee;border-bottom:2px solid #f5f5f5}.analytics-ct-activity-edit-small{background-color:#c4d9f2;height:100%;position:relative}.analytics-ct-activity-comment-fg{background-color:#fff;border-radius:50%;height:4px;left:50%;margin-left:-2px;position:absolute;top:17px;width:4px;z-index:2}.analytics-ct-activity-comment-bg{background-color:#3c4043;border-radius:50%;height:8px;left:50%;margin-left:-4px;position:absolute;top:15px;width:8px;z-index:1}.analytics-ct{display:flex;flex-direction:column;-webkit-box-flex:1;box-flex:1;-ms-flex-positive:1;-webkit-flex-grow:1;flex-grow:1;overflow-x:hidden;overflow-y:auto}.analytics-ct-header{display:flex;flex-direction:row;justify-content:space-between;margin:10px 19px 0}.analytics-ct-header-right{display:flex;flex-direction:row;justify-content:space-around;width:220px}.analytics-ct-header-right .analytics-selector{margin-top:8px;min-width:100px}.analytics-ct-legend{-webkit-align-items:center;align-items:center;-webkit-align-self:flex-end;align-self:flex-end;color:#5f6368;display:flex;-ms-flex:0 0;-webkit-flex:0 0;flex:0 0;flex-direction:row;font-size:12px;margin:0 20px 20px;text-align:center}.analytics-ct-legend-comment,.analytics-ct-legend-edit{display:flex;-webkit-align-items:center;align-items:center}.analytics-ct-legend-comment-circle{background-color:#fff;border-radius:50%;border:2px solid #3c4043;height:4px;width:4px}.analytics-ct-legend-label{margin-left:4px}.analytics-ct-legend-box{-webkit-align-items:center;align-items:center;display:flex;margin-left:12px}.analytics-ct-legend-edit-bar{height:12px;width:4px}.analytics-drp{align-items:center;display:flex;flex-direction:row;margin-left:16px;max-width:400px}.analytics-drp-left,.analytics-drp-right{border-radius:20px;cursor:pointer;height:auto;padding:8px;right:11px}.analytics-drp-left.jfk-button-hover,.analytics-drp-right.jfk-button-hover{background-color:#f1f3f4}.analytics-drp-left.jfk-button-focused,.analytics-drp-right.jfk-button-focused{background-color:#e8eaed}.analytics-drp-left.jfk-button-disabled,.analytics-drp-right.jfk-button-disabled{opacity:0.6;cursor:default}.analytics-drp-date-range{color:#202124;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:16px}.analytics-drpd{-webkit-align-items:center;align-items:center;display:flex;height:28px;margin:auto 3px;padding:0px}.docs-analytics-hc-ie .analytics-drpd{-ms-high-contrast-adjust:none;background-color:white}.analytics-drpd-icon{border-radius:100%;display:inline-block;height:9px;margin-right:8px;width:9px}.analytics-drpd .docs-material-menu-button-flat-default-dropdown{margin:0}.analytics-drpd.docs-material-menu-button-flat-default-hover{background-color:rgba(0,0,0,0.06)}.analytics-drpd.docs-material-menu-button-flat-default-focused{background-color:rgba(0,0,0,0.12);border-color:transparent}.analytics-drp .goog-menu .goog-menuitem{padding:6px 25px 6px 18px}.analytics-dialog-bg,.analytics-od-bg,.analytics-npd-bg{background:rgba(0,0,0,0.6);left:0;position:absolute;top:0}.analytics-dialog-bg,.analytics-od-bg{z-index:1002}.analytics-dialog,.analytics-od,.analytics-npd{background-color:#fff;border:0px;border-radius:8px;box-shadow:0 16px 24px 2px rgba(0,0,0,0.14),0 6px 30px 5px rgba(0,0,0,0.12),0 8px 10px -5px rgba(0,0,0,0.14);display:flex;flex-direction:column;outline:0;position:absolute}.analytics-dialog,.analytics-od{z-index:1003}.analytics-dialog-content,.analytics-od-content,.analytics-npd-content{display:flex;flex-direction:column;-webkit-box-flex:1;box-flex:1;-ms-flex-positive:1;-webkit-flex-grow:1;flex-grow:1;min-height:0}.analytics-npd-bg{z-index:1004}.analytics-npd{z-index:1005}.analytics-ec-content{-webkit-align-items:center;align-items:center;display:flex;flex-direction:column;box-pack:center;-ms-flex-pack:center;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;width:100%}.analytics-ec-message-container{width:100%}.analytics-ec-message{color:rgba(0,0,0,0.6);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:16px;font-weight:400;line-height:24px;padding:16px 128px;text-align:center}.analytics-ec-container{-webkit-align-items:center;align-items:center;display:flex;-ms-flex:1;-webkit-flex:1;flex:1;flex-direction:column;-webkit-box-flex:1;box-flex:1;-ms-flex-positive:1;-webkit-flex-grow:1;flex-grow:1;box-pack:center;-ms-flex-pack:center;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;width:100%;height:100%}.analytics-vhc-feedbackcard{color:rgba(0,0,0,0.87);font-size:11px;font-style:italic;margin:0}.analytics-vhc-feedbackcard-button,.analytics-vhc-feedbackcard-button:link,.analytics-vhc-feedbackcard-button:visited{color:#4285f4;cursor:pointer;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:11px;font-style:italic;height:14px;line-height:14px;margin:0 0 0 2px;text-decoration:none}.analytics-vhfc-card{border-bottom-right-radius:8px;border-top:1px solid #e0e0e0;box-shadow:0 2px 12px 2px rgba(60,64,67,.15);-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin-top:auto;z-index:1}.analytics-vhfc-settings-container,.analytics-vhfc-feedback-container,.analytics-vhfc-nudge-container{-webkit-align-items:center;align-items:center;display:flex;flex-direction:row}.analytics-vhfc-settings-container{height:56px;box-pack:justify;-ms-flex-pack:justify;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;padding:0px 24px}.analytics-vhfc-label{font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;margin-right:24px}.analytics-vhfc-label a:link,.analytics-vhfc-label a:visited{color:#4285f4;text-decoration:none}.analytics-vhfc-feedback-container{background-color:#f5f5f5;border-bottom-right-radius:8px;height:32px;padding:0px 24px}.analytics-vhfc-feedback-container .analytics-vhc-feedbackcard{color:rgba(0,0,0,0.54);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400}.analytics-vhfc-feedback-container .analytics-vhc-feedbackcard-button{font-size:12px;font-style:normal}.analytics-vhfc-nudge-container{background-color:#fff;border-bottom-right-radius:8px;box-pack:justify;-ms-flex-pack:justify;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;height:56px;padding:0px 8px 0px 32px}.analytics-vhfc-nudge-buttons{align-items:center;display:flex;box-pack:justify;-ms-flex-pack:justify;-webkit-box-pack:justify;-webkit-justify-content:flex-end;justify-content:flex-end}.analytics-vhfc-nudge-cancel-button.jfk-button,.analytics-vhfc-nudge-continue-button.jfk-button{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;color:#188038;cursor:pointer;margin:0px 8px;padding-left:8px;padding-right:8px;white-space:normal;word-wrap:break-word}.analytics-vhfc-nudge-cancel-button{color:#80868b}.analytics-vhfc-nudge-cancel-button.jfk-button-hover,.analytics-vhfc-nudge-continue-button.jfk-button-hover{background-color:#f8fcf9}.analytics-vhfc-nudge-cancel-button.jfk-button-focused,.analytics-vhfc-nudge-continue-button.jfk-button-focused{background-color:#e7f5eb}.analytics-vhfc-nudge-cancel-button.jfk-button-focused.jfk-button-hover,.analytics-vhfc-nudge-continue-button.jfk-button-focused.jfk-button-hover{background-color:#dff2e4}.analytics-vhfc-nudge-cancel-button.jfk-button-focused.jfk-button-active,.analytics-vhfc-nudge-continue-button.jfk-button-focused.jfk-button-active{background-color:#dff2e4;box-shadow:0 1px 3px 1px rgba(60,64,67,.15)}.analytics-vhfc-nudge-label{color:#3c4043;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;max-width:300px}.analytics-vhc-groupcard-root{border-bottom:0;position:relative}.analytics-vhc-groupcard-root::after{border-bottom:1px solid #e0e0e0;bottom:0;content:'';display:block;height:0;left:72px;position:absolute;width:calc(100% - 72px)}.analytics-vhc-groupcard-members .analytics-vhc-groupcard-root::after{left:48px;width:calc(100% - 48px)}.analytics-vhc-rowcard-root:last-child::after{display:none}.analytics-vhc-groupcard-root>.analytics-vhc-rowcard-row{border-bottom:1px solid transparent}.analytics-vhc-groupcard-root>.analytics-vhc-rowcard-row::after{border-bottom:0}.analytics-vhc-groupcard-root>.analytics-vhc-rowcard-row>.jfk-button{cursor:pointer;height:calc(48px - 2px);width:calc(100% - 2px)}.analytics-vhc-groupcard-root>.analytics-vhc-rowcard-row>.jfk-button-disabled{cursor:default}.analytics-vhc-groupcard-groupimg{height:32px;margin:0 16px 0 23px;vertical-align:middle;width:32px}.analytics-vhc-groupcard-message{font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:12px;padding:0 0 12px 72px}.analytics-vhc-groupcard-message-warning{color:rgba(0,0,0,0.6);font-style:italic}.analytics-vhc-groupcard-message-error{color:#dd4330}.analytics-vhc-groupcard-members{margin-left:72px}.analytics-vhc-groupcard-members .analytics-vhc-groupcard-members{margin-left:48px}.analytics-vhc-groupcard-members .analytics-vhc-groupcard-message{padding-left:48px}.analytics-vhc-groupcard-members .analytics-vhc-viewcardlist{border-top:0}.analytics-vhc-groupcard-members .analytics-vhc-viewcardlist>div:last-child,.analytics-vhc-groupcard-members .analytics-vhc-viewcardlist>.analytics-vhc-viewercard-root:last-child>.analytics-vhc-rowcard-row{border-bottom:0}.analytics-vhc-groupcard-members .analytics-vhc-rowcard-profile .analytics-profile-image,.analytics-vhc-groupcard-members .analytics-vhc-rowcard-profile .analytics-vhc-groupcard-groupimg{margin-left:0}.analytics-vhc-groupcard-root>.analytics-vhc-rowcard-row .analytics-vhc-rowcard-profile{border:0;box-shadow:none;font-weight:400;margin:0px;min-width:0;padding:0}.analytics-vhc-groupcard-expand-icon{margin-top:-2px}.analytics-vhc-groupcard-contracted .analytics-vhc-groupcard-expand-icon{margin-left:-7px;margin-right:6px}.analytics-vhc-groupcard-expanded .analytics-vhc-groupcard-expand-icon{margin-left:-4px;margin-right:3px}.analytics-vhc-groupcard-expanded>.analytics-vhc-rowcard-row .analytics-vhc-rowcard-time{visibility:hidden}.analytics-vhc-groupcard-expanded>.analytics-vhc-rowcard-row .analytics-vhc-rowcard-tooltip-icon{visibility:hidden}.analytics-lmec-link,.analytics-lmec-link:active,.analytics-lmec-link:hover,.analytics-lmec-link:link,.analytics-lmec-link:visited{color:#4285f4;cursor:pointer;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:16px;font-weight:400;text-decoration:none}.analytics-vhc-listsortbutton{-webkit-align-items:center;align-items:center;cursor:pointer;display:flex;flex-direction:row;margin:auto 24px auto 24px}.analytics-vhc-listsortbutton-mouse-focus{outline:0}.analytics-vhc-listsortbutton:last-child{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin:auto -10px auto 0;width:107px}.analytics-vhc-checkboxes-visible .analytics-vhc-listsortbutton:last-child{margin:auto 72px auto 0;width:107px}.analytics-vhc-listsortbutton-name{color:#5f6368;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;margin:0px 8px 0px 0px}.analytics-vhc-listsortbutton-arrow{height:18px;width:18px}.analytics-vhc-listsortbutton-uwsa .analytics-vhc-listsortbutton-arrow,.analytics-vhc-listsortbutton-uwsd .analytics-vhc-listsortbutton-arrow{visibility:hidden}.analytics-vhc-listsortbutton-ascending .analytics-vhc-listsortbutton-arrow,.analytics-vhc-listsortbutton-descending .analytics-vhc-listsortbutton-arrow{opacity:0.87}.analytics-low-data-treatment-title{color:#25272b;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:28px;padding:0 48px 8px 48px}.analytics-low-data-treatment-description{color:#414549;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:16px;line-height:24px;padding:0 48px 16px 48px}.analytics-low-data-treatment-sharebutton .docs-icon{margin-top:0;margin-bottom:0;margin-right:8px}.analytics-low-data-treatment-sharebutton.jfk-button{align-items:center;align-self:center;display:flex;flex-direction:row;box-pack:justify;-ms-flex-pack:justify;-webkit-box-pack:justify;-webkit-justify-content:center;justify-content:center;margin:0;padding-bottom:9px!important;padding-left:12px!important;padding-right:16px!important}.analytics-nc-container{display:flex;-ms-flex:1;-webkit-flex:1;flex:1;flex-direction:column;-webkit-box-flex:1;box-flex:1;-ms-flex-positive:1;-webkit-flex-grow:1;flex-grow:1;min-height:0}.analytics-nc-navigationarea{display:flex;-ms-flex:1;-webkit-flex:1;flex:1;flex-direction:row;-webkit-box-flex:1;box-flex:1;-ms-flex-positive:1;-webkit-flex-grow:1;flex-grow:1;min-height:0}.analytics-nc-tabbar{background-color:#fff;border-bottom-left-radius:8px;border-right:1px solid #e0e0e0;position:relative;width:256px;z-index:2}.analytics-nc-tabbar-collapsed{width:64px}.analytics-nc-content{display:flex;-ms-flex:1;-webkit-flex:1;flex:1;flex-direction:column;-webkit-box-flex:1;box-flex:1;-ms-flex-positive:1;-webkit-flex-grow:1;flex-grow:1;min-height:0;overflow-x:hidden;width:623px}.analytics-nc-navigationbar{background-color:#fff;border-bottom:1px solid #e0e0e0;border-top-left-radius:8px;border-top-right-radius:8px;z-index:2}.analytics-npd{border-radius:8px;width:490px}.analytics-npd::before{border:1px solid transparent;border-radius:8px;bottom:-1px;content:'';left:-1px;position:absolute;right:-1px;top:-1px}.analytics-npd-title{color:#202124;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:22px;margin:24px 24px 0px 24px}.analytics-npd-paragraph{color:rgba(0,0,0,0.6);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:16px;line-height:24px;margin:24px 24px 0px 24px}.analytics-npd-buttons{display:flex;flex-direction:row;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;box-pack:justify;-ms-flex-pack:justify;-webkit-box-pack:justify;-webkit-justify-content:flex-end;justify-content:flex-end;margin:40px 0 24px 24px}.analytics-npd-cancelbutton{margin:0 8px}.analytics-npd-continuebutton{margin:0 24px 0 8px}.analytics-ntb-container .goog-tab-bar{background-color:#ffffff;margin-top:20px;width:100%}.analytics-ntb-container .goog-tab{-webkit-align-items:center;align-items:center;background-color:#ffffff!important;border:0;border-top-right-radius:20px;border-bottom-right-radius:20px;color:#3c4043;cursor:pointer;display:flex;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;-ms-flex:1;-webkit-flex:1;flex:1;flex-direction:row;-webkit-box-flex:1;box-flex:1;-ms-flex-positive:1;-webkit-flex-grow:1;flex-grow:1;height:44px;margin:0 10px 0 0!important;padding:0!important;text-decoration:none}.analytics-nc-tabbar-collapsed .analytics-ntb-container .goog-tab{border-radius:22px;margin:0 10px!important}.analytics-ntb-container .goog-tab.goog-tab-hover{background-color:#f1f3f4!important}.analytics-ntb-container .goog-tab.goog-tab-selected{background-color:#e6f4ea!important;color:#188038;left:0px}.analytics-ntb-container .goog-tab.goog-tab-selected::before,.analytics-ntb-container .goog-tab-hover::before{border-bottom:1px solid transparent;border-right:1px solid transparent;border-top:1px solid transparent;border-top-right-radius:20px;border-bottom-right-radius:20px;bottom:-1px;content:'';left:0px;position:absolute;right:-1px;top:-1px;z-index:1}.analytics-ntb-container .goog-tab.goog-tab-selected.goog-tab-hover{background-color:#ceead6!important}.analytics-ntb-tab-icon{height:24px;margin:0 16px 0 24px;width:24px}.analytics-nc-tabbar-collapsed .analytics-ntb-tab-icon{margin:0 10px}.analytics-ntb-tab-text{max-width:180px}.analytics-ntb-tab-content{-webkit-align-items:center;align-items:center;display:flex;-ms-flex:1;-webkit-flex:1;flex:1;flex-direction:row;-webkit-box-flex:1;box-flex:1;-ms-flex-positive:1;-webkit-flex-grow:1;flex-grow:1}.analytics-nsc,.analytics-nsc-content{color:#202124;display:flex;flex-direction:column;-webkit-box-flex:1;box-flex:1;-ms-flex-positive:1;-webkit-flex-grow:1;flex-grow:1;overflow-x:hidden;overflow-y:auto}.analytics-nsc-content{margin:24px 32px 0 32px}.analytics-nsc-offline,.analytics-nsc-save-failed{-webkit-align-items:center;align-items:center;background-color:#eeeeee;border-bottom:1px solid #e0e0e0;color:#dd4330;display:flex;flex-direction:row;font-size:13px;height:48px;padding:0 24px 0 24px}.analytics-nsc-heading,.analytics-nsc-subheading{font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;line-height:26px;margin:0 0 16px 0}.analytics-nsc-heading{font-size:18px}.analytics-nsc-subheading{font-size:14px}.analytics-nsc-edit-digest-section{-webkit-align-items:center;align-items:center;display:flex;flex-direction:row;font-size:14px;height:48px;box-pack:justify;-ms-flex-pack:justify;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between}.analytics-nsc-edit-digest-select{min-width:240px;width:auto}.analytics-nsc-edit-section,.analytics-nsc-form-section{margin-bottom:16px}.analytics-nsc-switches{display:flex;flex-direction:row}.analytics-nsc-switches .docs-material-gm-labeled-checkbox,.analytics-nsc-switches .docs-material-gm-labeled-checkbox-label{cursor:pointer}.analytics-nsc-switch{margin-right:32px}.analytics-nsc-footer{-webkit-align-items:center;align-items:center;display:flex;flex-direction:row;height:80px;box-pack:end;-ms-flex-pack:end;-webkit-box-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end;margin:0 32px}.analytics-nsc-cancel-button{margin-right:16px}.analytics-nvtt-content{display:flex;flex-direction:row;padding:9px 7px}.analytics-nvtt-text{color:#fff}.analytics-nvtt-learnmore,.analytics-nvtt-learnmore:visited,.analytics-nvtt-learnmore:link,.analytics-nvtt-learnmore:hover{color:#7baaf7;margin-left:14px;text-decoration:none}.analytics-ndch{-webkit-align-items:center;align-items:center;background-color:#fff;border:1px solid #dadce0;box-sizing:border-box;-webkit-border-radius:16px;-moz-border-radius:16px;border-radius:16px;display:flex;flex-direction:row;height:24px;margin:0px 8px 4px 0px}.analytics-ndch-viewer-icon,.analytics-ndch-group-icon{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;height:20px;margin-left:1px;overflow:hidden;width:20px}.analytics-ndch-text{color:#5f6368;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:12px;font-weight:500;padding-left:8px}.analytics-ndch-remove-button{-webkit-align-items:center;align-items:center;cursor:pointer;display:flex;box-pack:center;-ms-flex-pack:center;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;padding:0 4px 0 3px}.analytics-ndch-remove-button .docs-analytics-icon{opacity:0.87}.analytics-ndch:only-child .analytics-ndch-remove-button{display:none}.analytics-ndch:only-child .analytics-ndch-text{padding-right:8px}.analytics-ndc,.analytics-ndc-body{-webkit-box-flex:1;box-flex:1;-ms-flex-positive:1;-webkit-flex-grow:1;flex-grow:1}.analytics-ndc-body{display:flex;flex-direction:column;overflow-y:auto;padding:32px 32px 0px 32px}.analytics-ndc-send-email-title{color:#202124;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:18px;margin-bottom:16px}.analytics-ndc-chip-title{color:rgba(0,0,0,0.54);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;margin-bottom:8px}.analytics-ndc-chip-container{display:flex;flex-direction:row;-moz-flex-wrap:wrap;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap;max-height:71px;min-height:28px;overflow-y:auto}.analytics-ndc-subject-container{height:36px;margin-top:20px}.analytics-ndc-subject-container input::-ms-clear{display:none}.analytics-ndc-subject-container .docs-material-labeled-text-field{background-color:#fff;border:1px solid #dadce0;border-radius:4px;box-sizing:border-box;display:flex;flex-direction:column;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;height:initial;line-height:initial;padding:0px}.analytics-ndc-subject-container .docs-material-labeled-text-field-hover{border:1px solid #bdc1c6;box-sizing:border-box}.analytics-ndc-subject-container .docs-material-labeled-text-field-focused{border:2px solid #1a73e8;box-sizing:border-box;margin:-1px 0 0 -1px}.analytics-ndc-subject-container .docs-material-labeled-text-field-content{padding:0px 7px}.analytics-ndc-subject-container .docs-material-labeled-text-field-input{padding:0px 8px}.analytics-ndc-subject-container .docs-material-labeled-text-field-input{color:#3c4043;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;height:100%;line-height:normal;padding:9px}.analytics-ndc-subject-container .docs-material-labeled-text-field-label{background-color:#fff;color:#5f6368;font-size:12px;line-height:13px;padding:0 3px;transform:translateY(-7px) scale(1,1)}.analytics-ndc-subject-container .docs-material-labeled-text-field:not(.docs-material-labeled-text-field-focused) .docs-material-labeled-text-field-input{border-bottom-color:transparent}.analytics-ndc-subject-container .docs-material-labeled-text-field-input{border-bottom:0}.analytics-ndc-message-container{background-color:#fff;margin-top:16px;max-height:108px}.analytics-ndc-message-container .docs-material-text-area{border:1px solid #dadce0;border-radius:4px;box-sizing:border-box;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;max-height:108px;min-height:108px;overflow-y:auto!important;padding:7px 9px}.analytics-ndc-message-container .docs-material-text-area:hover{border:1px solid #bdc1c6;box-sizing:border-box}.analytics-ndc-message-container .docs-material-text-area:focus{border:2px solid #1a73e8;box-sizing:border-box;margin:-1px 0 0 -1px}.analytics-ndc-document-info-container{-webkit-align-items:center;align-items:center;background-color:#fff;display:flex;-ms-flex:0 0 auto;-webkit-flex:0 0 auto;flex:0 0 auto;flex-direction:row;margin-top:16px;max-width:100%;outline:none}.analytics-ndc-document-info{-webkit-align-items:center;align-items:center;border-radius:100px;display:flex;flex-direction:row}.analytics-ndc-document-icon-container{outline:none;margin:0 0 0 4px}.analytics-ndc-document-title{color:rgb(60,64,67);display:block;flex-direction:column;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;line-height:16px;overflow:hidden;padding:0px 8px;text-overflow:ellipsis;overflow:hidden;text-overflow:ellipsis;-webkit-box-orient:vertical;-webkit-line-clamp:3;display:-webkit-box;max-height:45px}.analytics-ndc-document-title a{color:#4285f4!important}.analytics-ndc-send-to-myself-container{-webkit-align-items:center;align-items:center;display:flex;flex-direction:row;box-pack:justify;-ms-flex-pack:justify;-webkit-box-pack:justify;-webkit-justify-content:flex-start;justify-content:flex-start;margin-left:-1px;margin-top:12px}.analytics-ndc-send-to-myself-container .docs-material-gm-labeled-checkbox{cursor:pointer}.analytics-ndc-send-to-myself-container .docs-material-gm-labeled-checkbox-label{color:#5f6368;cursor:pointer;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:400}.analytics-ndc-buttons{-webkit-align-items:start;align-items:start;bottom:0;display:flex;flex-direction:row;box-pack:justify;-ms-flex-pack:justify;-webkit-box-pack:justify;-webkit-justify-content:flex-end;justify-content:flex-end;min-height:60px;width:100%}.analytics-ndc-cancel-button{margin:0px 8px}.analytics-ndc-send-email-button{margin:0px 32px 0px 8px}.analytics-ndc-chip-button{-webkit-align-items:center;align-items:center;border:1px solid #dadce0;border-radius:100px;cursor:pointer;display:flex;line-height:normal;margin-right:0;padding:8px}.analytics-ndc-chip-button.jfk-button-focused{background-color:rgba(60,64,67,0.06);border:1px solid #dadce0!important}.analytics-ndc-chip-button.jfk-button-hover{background-color:rgba(60,64,67,0.04)}.analytics-ndc-chip-button.jfk-button-hover.jfk-button-focused{background-color:rgba(60,64,67,0.06)}.analytics-ndc-chip-button.jfk-button-active{background-color:rgba(60,64,67,0.06);box-shadow:0 2px 6px 2px rgba(60,64,67,.15)}.analytics-ndc-toast.docs-ui-toast{border:1px inset;border-color:rgba(255,255,255,0.2) rgba(255,255,255,0.1) rgba(255,255,255,0) rgba(255,255,255,0);box-shadow:0 6px 6px rgba(0,0,0,0.15);padding:14px 24px;z-index:1003}.analytics-ndc-toast.docs-ui-toast .docs-ui-toast-content{color:#fff;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:400}.analytics-vhc-nudgeselectdropdown-container .analytics-ndsd{-webkit-align-items:center;align-items:center;display:flex;margin:auto 0px;padding-left:2px;visibility:hidden}.analytics-vhc-nudgeselectdropdown-container .goog-menu{position:fixed}.analytics-vhc-checkboxes-visible .analytics-ndsd{visibility:visible}.docs-analytics-hc-ie .analytics-ndsd{-ms-high-contrast-adjust:none;background-color:white}.analytics-ndsd-icon-container{height:24px;opacity:0.56;width:24px}.analytics-od{width:384px}.analytics-od,.analytics-od-content{border-radius:8px}.analytics-od-title{display:none}.analytics-od-picture{border-top-left-radius:8px;border-top-right-radius:8px;height:216px}.analytics-od-header{color:rgba(0,0,0,0.87);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:18px;font-weight:500;margin:26px 24px 18px 24px}.analytics-od-body{color:rgba(0,0,0,0.7);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;font-weight:400;margin:0px 24px 0px 24px}.analytics-od-paragraph{line-height:20px;margin:0px 0px 18px 0px}.analytics-od-learnmorebutton,.analytics-od-learnmorebutton:active,.analytics-od-learnmorebutton:hover,.analytics-od-learnmorebutton:link,.analytics-od-learnmorebutton:visited{align-self:left;color:#4285f4;cursor:pointer;text-decoration:none}.analytics-od-settingsbutton,.analytics-od-settingsbutton:focus,.analytics-od-settingsbutton:hover,.analytics-od-okbutton,.analytics-od-okbutton:focus,.analytics-od-okbutton:hover{margin:4px;white-space:normal}.analytics-od-buttons{display:flex;flex-direction:row;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-moz-flex-wrap:wrap;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap;box-pack:justify;-ms-flex-pack:justify;-webkit-box-pack:justify;-webkit-justify-content:center;justify-content:center;margin:18px 24px 24px 24px}.analytics-od-okbutton{min-width:155px;width:auto;width:unset}.analytics-profile-image{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;height:32px;max-height:36px;max-width:36px;width:32px}.analytics-rec-buttons{-webkit-align-items:center;align-items:center;display:flex;flex-direction:row;height:48px}.analytics-vhc-rowcard-root{width:100%}.analytics-vhc-rowcard-row,.analytics-vhc-rowcard-row-button{-webkit-align-items:center;align-items:center;display:flex;flex-direction:row;height:48px;text-align:left;width:100%}.analytics-vhc-rowcard-row{position:relative}.analytics-vhc-rowcard-row::after{border-bottom:1px solid #e0e0e0;bottom:0;content:'';display:block;height:0;left:72px;position:absolute;width:calc(100% - 72px)}.analytics-vhc-groupcard-members .analytics-vhc-rowcard-row::after{left:48px;width:calc(100% - 48px)}.analytics-vhc-rowcard-root:last-child>.analytics-vhc-rowcard-row::after{display:none}.analytics-vhc-rowcard-profile{-webkit-align-items:center;align-items:center;display:flex;flex-direction:row;-webkit-box-flex:1;box-flex:1;-ms-flex-positive:1;-webkit-flex-grow:1;flex-grow:1}.analytics-vhc-rowcard-name{color:#202124;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;margin-right:24px;white-space:normal}.analytics-vhc-rowcard-time{color:#202124;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;margin-right:36px;width:110px}.analytics-vhc-rowcard-row-button>.analytics-vhc-rowcard-time{width:108px}.analytics-vhc-rowcard-time-container{-webkit-align-items:center;align-items:center;display:flex;flex-direction:row}.analytics-vhc-rowcard-timenever .analytics-vhc-rowcard-time{font-style:italic}.analytics-vhc-rowcard-timeabsent .analytics-vhc-rowcard-time,.analytics-vhc-rowcard-iconabsent .analytics-vhc-rowcard-tooltip-icon{visibility:hidden}.analytics-vhc-rowcard-tooltip-icon{opacity:0.56;padding:5px 0 5px 0}.analytics-vhc-rowcard-checkbox-container{display:none;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.analytics-vhc-checkboxes-visible .analytics-vhc-rowcard-checkboxvisible .analytics-vhc-rowcard-checkbox-container,.analytics-vhc-checkboxes-visible .analytics-vhc-rowcard-checkboxinvisible .analytics-vhc-rowcard-checkbox-container{display:inherit;margin:7px 32px 7px 30px;padding:1px}.analytics-vhc-rowcard-checkboxinvisible .analytics-vhc-rowcard-checkbox-container{visibility:hidden}.analytics-vhc-rowcard-spacing{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.analytics-selector{height:30px;min-width:140px}.docs-analytics-hc-ie .analytics-selector .docs-material-select-dropdown{-ms-high-contrast-adjust:none;background-color:white}.analytics-selector-menu.goog-menu .goog-menuitem{font-size:14px;padding-right:30px}.analytics-sc,.analytics-sc-settings{-webkit-box-flex:1;box-flex:1;-ms-flex-positive:1;-webkit-flex-grow:1;flex-grow:1}.analytics-sc-settings{overflow-y:auto}.analytics-sc-settings-loading{visibility:hidden}.analytics-sc-disabled-by-admin-explanation,.analytics-sc-view-visibility-explanation{color:rgba(0,0,0,0.87);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;line-height:18px;margin:24px 24px 0px 24px;padding:0px 100px 0px 0px}.analytics-sc-view-visibility-explanation{border-bottom:1px solid rgba(0,0,0,0.4);padding-bottom:24px}.analytics-sc-disabled-by-admin-explanation-link,.analytics-sc-disabled-by-admin-explanation-link:active,.analytics-sc-disabled-by-admin-explanation-link:hover,.analytics-sc-disabled-by-admin-explanation-link:link,.analytics-sc-disabled-by-admin-explanation-link:visited{color:#4285f4;cursor:pointer;text-decoration:none}.analytics-sc-account-setting,.analytics-sc-document-setting{margin:0 0 0 32px;padding:24px 0px}.analytics-sc-document-setting{border-top:1px solid #e0e0e0}.analytics-sc-account-itemlabel,.analytics-sc-document-itemlabel{color:#202124;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:18px;line-height:24px}.analytics-sc-section-label{color:#3c4043;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;line-height:20px}.analytics-sc-section{-webkit-align-items:center;align-items:center;display:flex;flex-direction:row;justify-content:space-between;margin:16px 32px 0px 0px}.analytics-sc .analytics-sc-account-show-setting-button{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;color:#188038;cursor:pointer;margin-right:0;max-width:200px;white-space:normal;word-wrap:break-word}.analytics-sc-account-show-setting-button.jfk-button-hover{background-color:#f8fcf9}.analytics-sc-account-show-setting-button.jfk-button-focused{background-color:#e7f5eb}.analytics-sc-account-show-setting-button.jfk-button-focused.jfk-button-hover{background-color:#dff2e4}.analytics-sc-account-show-setting-button.jfk-button-focused.jfk-button-active{background-color:#dff2e4;box-shadow:0 1px 3px 1px rgba(60,64,67,.15)}.analytics-sc-account-switch,.analytics-sc-document-switch{margin-left:5px}.analytics-sc-account-explanation,.analytics-sc-document-explanation{color:#25272b;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;line-height:20px;margin:11px 110px 0 0;width:auto}.analytics-sc-account-explanation a:link,.analytics-sc-account-explanation a:visited{color:#4285f4;text-decoration:none}.analytics-sc-buttons{-webkit-align-items:center;align-items:center;bottom:0;display:flex;flex-direction:row;height:84px;box-pack:justify;-ms-flex-pack:justify;-webkit-box-pack:justify;-webkit-justify-content:flex-end;justify-content:flex-end;width:100%}.analytics-sc-cancel-button{margin:0px 8px}.analytics-sc-done-button,.analytics-sc-save-button{margin:0px 32px 0px 8px}.analytics-sc-section .apps-ui-material-slide-toggle-container{cursor:pointer;margin-right:2px}.analytics-sc-section .apps-ui-material-slide-toggle-container.apps-ui-material-slide-toggle-container-disabled{cursor:default}.analytics-sc-section .apps-ui-material-slide-toggle-container-checked .apps-ui-material-slide-toggle-track{background-color:#ceead6;opacity:1}.analytics-sc-section .apps-ui-material-slide-toggle-container-checked .apps-ui-material-slide-toggle-thumb{background-color:#188038}.analytics-sc-section .apps-ui-material-slide-toggle-container-checked.apps-ui-material-slide-toggle-container-disabled .apps-ui-material-slide-toggle-track{opacity:0.07}.analytics-sc-section .apps-ui-material-slide-toggle-container-checked.apps-ui-material-slide-toggle-container-disabled .apps-ui-material-slide-toggle-thumb{opacity:0.26}.analytics-sc-section .apps-ui-material-slide-toggle-thumb{opacity:1.0}.analytics-sc-section .apps-ui-material-slide-toggle-container-focused .apps-ui-material-slide-toggle-thumb{box-shadow:0 0 6px rgba(0,0,0,.16),0 6px 12px rgba(0,0,0,.32);opacity:1.0}.analytics-sc-section .apps-ui-material-slide-toggle-container-hover .apps-ui-material-slide-toggle-thumb{opacity:1.0}.analytics-sc .analytics-ec-container{margin-bottom:72px;margin-top:56px}.analytics-sfc-card{-webkit-align-items:center;align-items:center;background-color:#eeeeee;border-bottom:1px solid #e0e0e0;display:flex;flex-direction:row;height:48px}.analytics-sfc-label{color:#dd4330;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;font-weight:400;margin:0 24px 0 24px}.analytics-sic{background-color:#fff;box-shadow:0 1px 0 0 #dadce0;display:flex;-ms-flex:1;-webkit-flex:1;flex:1;flex-direction:column;-webkit-box-flex:1;box-flex:1;-ms-flex-positive:1;-webkit-flex-grow:1;flex-grow:1}.analytics-sic-content{-webkit-align-items:center;align-items:center;color:#414549;display:flex;-ms-flex:1;-webkit-flex:1;flex:1;-webkit-flex-basis:auto;-ms-flex-basis:auto;flex-basis:auto;flex-direction:row;-webkit-box-flex:1;box-flex:1;-ms-flex-positive:1;-webkit-flex-grow:1;flex-grow:1;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;box-pack:justify;-ms-flex-pack:justify;-webkit-box-pack:justify;-webkit-justify-content:flex-start;justify-content:flex-start;line-height:18px;margin:10px 0;min-height:38px}.analytics-sic-icon{height:20px;margin:0 10px 0 30px;min-width:20px;width:20px}.analytics-sic-text{margin-right:32px}.analytics-shc{overflow:hidden}.analytics-shc .activity-deck{display:flex;-ms-flex:1;-webkit-flex:1;flex:1;min-height:0;position:relative}.analytics-shc .activity-deck-events-view,.analytics-shc .activity-deck-empty-view{display:flex;-ms-flex:1;-webkit-flex:1;flex:1;height:auto;min-height:0;overflow:hidden;width:100%}.analytics-shc .activity-deck-empty-view{-webkit-align-items:center;align-items:center;box-pack:center;-ms-flex-pack:center;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center}.analytics-shc .activity-list{-webkit-box-flex:1;box-flex:1;-ms-flex-positive:1;-webkit-flex-grow:1;flex-grow:1;height:auto;width:100%}.analytics-shc .activity-event-target-list{display:none}.analytics-shc .activity-event-header{-webkit-align-items:center;align-items:center;display:flex;height:40px}.analytics-shc .activity-event-scopes-list{margin-top:0;padding-left:72px}.analytics-shc .activity-event>div:first-child{padding-bottom:0}.analytics-shc .activity-event-scopes-container{padding:8px 0}.analytics-shc .activity-event-scope-change-detail{padding-top:8px}.analytics-shc .activity-event-scope-change-detail.activity-event-scope-change-detail-first{padding-top:2px}.analytics-ssc{-webkit-align-items:center;align-items:center;border-bottom:1px solid #e0e0e0;color:#5f6368;display:flex;flex-direction:row;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;justify-content:space-between;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:12px;font-weight:500;overflow:hidden;padding:8px 12px 8px 16px}.analytics-ssc-summary{margin-right:12px}.analytics-ssc-manage-settings-button.analytics-btn-text.jfk-button{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;font-size:13px}.analytics-ssc-summary{-webkit-align-items:center;align-items:center;display:flex;flex-direction:row}.analytics-ssc-icon{margin-right:8px}.analytics-trc{-webkit-align-items:center;align-items:center;color:rgba(0,0,0,0.87);display:flex;-ms-flex:none;-webkit-flex:none;flex:none;flex-direction:row;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:16px;font-weight:500;margin:24px 24px 18px 24px}.analytics-tb-container{-webkit-align-items:center;align-items:center;display:flex;flex-direction:row;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;height:72px;box-pack:justify;-ms-flex-pack:justify;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between}.analytics-tb-title-text{color:rgba(0,0,0,0.87);font-family:'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:22px;margin:0 0 0 24px}.analytics-tb-close{border:0!important;border-radius:20px;cursor:pointer;display:inline-flex;height:auto;margin:0px;opacity:0.54;padding:8px;position:absolute;right:11px;top:16px;z-index:2}.analytics-tb-close.jfk-button-hover{background-color:#f1f3f4;border:0}.analytics-tb-close.jfk-button-focused{background-color:#e8eaed;border:0}.analytics-ttmw{line-height:13px}.analytics-tt-content{font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:11px;font-weight:500}.analytics-appbar-tt-content{line-height:15px;max-width:320px;padding:0;word-break:normal}.analytics-tpec-total-unique-viewers,.analytics-tpec-explanation{font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:400;padding:0 128px}.analytics-tpec-total-unique-viewers{color:#212121;font-size:16px;line-height:24px;padding-bottom:8px}.analytics-tpec-explanation{color:#757575;font-size:13px}.analytics-tpec-container{-webkit-align-items:center;align-items:center;display:flex;-ms-flex:1;-webkit-flex:1;flex:1;flex-direction:column;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;min-height:132px;text-align:center;width:100%}.analytics-tpec-heading{color:#25272b;font-size:28px;height:36px}.analytics-tpec-paragraph{color:#414549;font-size:16px;margin:8px 0 16px 0;width:400px}.analytics-tpec-viewer-trend-button.jfk-button{-webkit-align-items:center;align-items:center;font-weight:500}.analytics-tc{-webkit-align-items:center;align-items:center;color:rgba(0,0,0,0.87);display:flex;-ms-flex:1 1 auto;-webkit-flex:1 1 auto;flex:1 1 auto;flex-direction:row;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;font-weight:400;min-height:30px}.analytics-tc-message{display:inline}.analytics-tc-comments-count{display:inline;font-weight:500}.analytics-tc-tooltip-icon{margin:0 24px 0 6px;opacity:0.56}.analytics-tuvc{-webkit-align-items:center;align-items:center;color:rgba(0,0,0,0.87);display:flex;-ms-flex:1 1 auto;-webkit-flex:1 1 auto;flex:1 1 auto;flex-direction:row;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;font-weight:400;min-height:30px}.analytics-tuvc-message{display:inline}.analytics-tuvc-viewers-count{display:inline;font-weight:500}.analytics-tuvc-tooltip-icon{margin:0 24px 0 6px;opacity:0.56}.analytics-tcc,.analytics-tcc-chart-container,.analytics-tcc-chart{display:flex;flex-direction:column;-webkit-box-flex:1;box-flex:1;-ms-flex-positive:1;-webkit-flex-grow:1;flex-grow:1;min-height:120px;overflow:hidden}.analytics-tcc-chart .google-visualization-tooltip{pointer-events:none}.analytics-tcc-data-table{position:absolute;overflow:hidden;height:1px;left:-10000px;top:auto;width:1px}.analytics-trend-sparkline-graph{-ms-flex:0 0 auto;-webkit-flex:0 0 auto;flex:0 0 auto;height:60px;position:relative}.analytics-trend-sparkline-chart{height:32px;left:24px;position:absolute;right:24px;top:8px;z-index:3}.analytics-trend-sparkline-chart.analytics-trend-sparkline-dragging{cursor:col-resize}.analytics-trend-sparkline-slider{left:14.5px;position:absolute;right:14.5px;top:8px;z-index:4}.analytics-trend-sparkline-left-bg,.analytics-trend-sparkline-right-bg{border-color:#979797;border-width:1px;position:absolute;bottom:20px;top:8px;background-color:#efefef;z-index:1}.analytics-trend-previous-active-bg{z-index:2}.analytics-trend-bg-selected.analytics-trend-sparkline-left-bg,.analytics-trend-bg-selected.analytics-trend-sparkline-right-bg{border-color:#185abc;border-width:2px}.analytics-trend-sparkline-left-bg{border-style:none dashed none none;left:24px}.analytics-trend-sparkline-right-bg{border-style:none none none dashed;right:24px}.analytics-trend-bg-selected.analytics-trend-sparkline-left-bg{left:23.5px}.analytics-trend-bg-selected.analytics-trend-sparkline-right-bg{right:23.5px}.analytics-slider-thumbimpl{background-color:transparent;cursor:col-resize;height:32px;width:20px}.analytics-trend-sparkline-graph .analytics-twothumbslider{height:32px}.analytics-twothumbslider:focus,.analytics-twothumbslider .goog-twothumbslider-value-thumb:focus,.analytics-twothumbslider .goog-twothumbslider-extent-thumb:focus{outline:none}.analytics-twothumbslider.goog-slider-dragging{cursor:col-resize}.analytics-trend-sparkline-graph .analytics-twothumbslider .goog-twothumbslider-rangehighlight{height:0}.analytics-trend-sparkline-graph .analytics-twothumbslider .goog-twothumbslider-value-thumb,.analytics-trend-sparkline-graph .analytics-twothumbslider .goog-twothumbslider-extent-thumb{height:32px;position:absolute;width:20px;z-index:1}.analytics-trend-sparkline-graph .analytics-twothumbslider .analytics-previous-active-thumb{z-index:2}.analytics-tst{background-color:#8f8f8f;border:0px;border-radius:2px;height:10px;padding:4px 5px;position:absolute}.analytics-tst-content{color:#fff;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:9px;font-weight:400;white-space:nowrap}.analytics-tst-arrow{position:absolute}.analytics-tst-arrowup{top:-5px}.analytics-tst-arrowimplbefore,.analytics-tst-arrowimplafter{display:block;height:0;position:absolute;width:0}.analytics-tst-arrowimplbefore{border:5px solid;border-color:#8f8f8f transparent;border-top-width:0;left:-5px}.analytics-tst-arrowimplafter{border:4px solid;border-color:#8f8f8f transparent;border-top-width:0;left:-4px;top:1px}.analytics-vhc-viewcardlist{width:100%}.analytics-vhc-viewcardlist-scrollable{overflow-y:auto}.analytics-vc-root,.analytics-vc-content,.analytics-vc-low-data-content{display:flex;flex-direction:column;-webkit-box-flex:1;box-flex:1;-ms-flex-positive:1;-webkit-flex-grow:1;flex-grow:1;min-height:1px;position:relative;z-index:1}.analytics-vc-spinner .docs-quantum-spinner{left:0;margin-left:0px}.analytics-vc-spinner .docs-spinner{height:28px}.analytics-vc-spinner{height:28px;left:50%;position:absolute;top:50%;-webkit-transform:translate(-50%,-50%);-moz-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);-o-transform:translate(-50%,-50%);transform:translate(-50%,-50%);width:28px}.analytics-lowdatatreatment{display:flex;flex-direction:column;text-align:center;width:100%}.analytics-vc-low-data-content{align-items:center;justify-content:center}.analytics-vhc-rowcard-root .analytics-profile-image{margin:0 16px 0 24px;vertical-align:middle}.analytics-votc{display:flex;flex-direction:column;-webkit-box-flex:1;box-flex:1;-ms-flex-positive:1;-webkit-flex-grow:1;flex-grow:1;margin-bottom:24px;overflow-x:hidden;overflow-y:auto}.analytics-votc-header{-webkit-align-items:center;align-items:center;display:flex;-ms-flex:0 0 auto;-webkit-flex:0 0 auto;flex:0 0 auto;flex-direction:row;justify-content:space-between;margin:18px 24px 0 24px;overflow:hidden}.analytics-votc-threshold-legend{-webkit-align-items:center;align-items:center;color:#25272b;display:flex;flex-direction:row;font-size:12px;margin:16px 24px 0 45px;text-align:center}.analytics-votc-threshold-legend-box{border-top:1px solid #669df6;height:1px;margin-right:12px;width:20px}.analytics-votc-threshold-tooltip-icon{margin-left:8px;opacity:0.56}.analytics-vhc-container{display:flex;-ms-flex:1;-webkit-flex:1;flex:1;flex-direction:column;-webkit-box-flex:1;box-flex:1;-ms-flex-positive:1;-webkit-flex-grow:1;flex-grow:1;min-height:0}.analytics-vhc-viewhistory{display:flex;-ms-flex:1;-webkit-flex:1;flex:1;flex-direction:column;-webkit-box-flex:1;box-flex:1;-ms-flex-positive:1;-webkit-flex-grow:1;flex-grow:1;min-height:0}.analytics-vhc-button-container{-webkit-align-items:flex-start;align-items:flex-start;display:flex;flex-direction:row;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;height:58px;box-pack:justify;-ms-flex-pack:justify;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between}.analytics-vhc-listsortbutton-container{display:flex;flex-direction:row;-webkit-box-flex:1;box-flex:1;-ms-flex-positive:1;-webkit-flex-grow:1;flex-grow:1;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;box-pack:justify;-ms-flex-pack:justify;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;margin-top:28px}.analytics-vhc-nudgeselectdropdown-container{-webkit-align-items:center;align-items:center;display:flex;margin-right:13px;margin-top:22px;width:60px}.analytics-vhc-nudgeselectdropdown-container .goog-menuitem{font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif}.analytics-vhc-nudgeselectdropdown-container .goog-menuitem.goog-menuitem-highlight{padding-bottom:6px;padding-top:6px}.analytics-vhc-tabbarholder{border-bottom:1px solid #e0e0e0;box-shadow:0 2px 12px 2px rgba(60,64,67,.15)}.analytics-vhc-tabbarholder .docs-tabbar{background-color:#fff;max-width:100%}.analytics-vhc-tabbarholder .docs-tabbar-tab{border-bottom:4px solid transparent;border-top:4px solid transparent}.analytics-vhc-tabbarholder .docs-tabbar-tab-selected{border-bottom:4px solid #2196f3}.analytics-vhc-tabbarholder .docs-tabbar-focused .docs-tabbar-tab-selected{background:#ffffff}.analytics-vhc-tabbarholder .docs-tabbar-mouseactive .docs-tabbar-tab{background:transparent}.analytics-vhc-tabbarholder .docs-tabbar .docs-tabbar-tab-active{background:transparent}.analytics-vhc-tabbarholder .docs-tabbar-tablabel{color:rgba(0,0,0,0.54);font-family:'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;font-weight:500}.analytics-vhc-tabbarholder .docs-tabbar-tab-selected .docs-tabbar-tablabel{color:rgba(0,0,0,0.87)}.analytics-vhc-tabbarholder .docs-tabbar .docs-tabbar-tab{align-items:flex-end;height:48px;padding:0 16px;position:relative;max-width:300px;border:0}.analytics-vhc-tabbarholder .docs-tabbar .docs-tabbar-tab:first-child{margin-left:8px}.analytics-vhc-tabbarholder .docs-tabbar-tab .docs-tabbar-tablabel{color:#5f6368;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;text-transform:none;margin-bottom:8px;text-transform:none}.analytics-vhc-tabbarholder .docs-tabbar-tab-hover .docs-tabbar-tablabel{color:#3c4043}.analytics-vhc-tabbarholder .docs-tabbar-focused .docs-tabbar-tab-hover .docs-tabbar-tablabel{color:#202124}.analytics-vhc-tabbarholder .docs-tabbar-mouseactive .docs-tabbar-tab-hover .docs-tabbar-tablabel{color:#188038}.analytics-vhc-tabbarholder .docs-tabbar-tab-selected .docs-tabbar-tablabel{color:#188038}.analytics-vhc-tabbarholder .docs-tabbar-tab-selected.docs-tabbar-tab-hover .docs-tabbar-tablabel{color:#188038}.analytics-vhc-tabbarholder .docs-tabbar-focused .docs-tabbar-tab-selected.docs-tabbar-tab-hover .docs-tabbar-tablabel{color:#137333}.analytics-vhc-tabbarholder .docs-tabbar-mouseactive .docs-tabbar-tab-selected.docs-tabbar-tab-hover .docs-tabbar-tablabel{color:#137333}.analytics-vhc-tabbarholder .docs-tabbar-tab-selected::before{border-bottom:3px solid #188038;border-radius:3px 3px 0 0;bottom:0;content:'';display:block;height:0;left:12px;position:absolute;width:calc(100% + -24px)}.analytics-vhc-tabbarholder .docs-tabbar-tab-selected.docs-tabbar-tab-hover::before{border-bottom-color:#188038}.analytics-vhc-tabbarholder .docs-tabbar-focused .docs-tabbar-tab-selected.docs-tabbar-tab-hover::before{border-bottom-color:#137333}.analytics-vhc-tabbarholder .docs-tabbar .docs-tabbar-tab-active{background:transparent}.analytics-vhc-tabbarholder .analytics-vhc .analytics-vc-spinner{top:325px}.analytics-vhc-tablabel-domain-name{font-weight:400;text-transform:none}.drive-locking-dialog{border-radius:8px;max-width:500px}.driveLockingDialogbasedialog-title{align-items:center;display:inline-flex}.driveLockingDialogbasedialog-title-icon{background-color:#1976d2;border-radius:50%;margin-right:12px;padding:8px 3px 3px 8px;width:29px;height:29px}.driveLockingDialogbasedialog-title-text{display:block;font-family:'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:22px;line-height:28px}.driveLockingDialogbaseitem-chip{border:1px solid #bdbdbd;border-radius:100px;display:inline-block;font-size:14px;height:32px;margin-top:10px;max-width:calc(100% - 30px);padding-left:15px;padding-right:15px}.driveLockingDialogbaseitem-chip-content{align-items:center;display:flex;height:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.driveLockingDialogbaseitem-chip-icon{width:20px}.driveLockingDialogbaseitem-chip-title{padding-left:10px}.driveLockingDialogbasedrive-lock-dialog-cancel{color:#1976d2}.driveLockingDialogbasedrive-lock-dialog-confirm,.driveLockingDialogbasedrive-lock-dialog-cancel{text-transform:initial}.driveLockingUnlockcontent-text{color:#616161;display:block;font-family:Roboto,Arial,sans-serif;font-size:1rem;font-weight:400;letter-spacing:0.00625em;line-height:1.5rem}.driveLockingUnlockdetails-link{margin-left:4px}#docs-approvals-toast-unlock{cursor:pointer}#docs-approvals-toast-unlock.jfk-button-disabled{display:none}.docs-blameview{display:block;background:#ffffff;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;outline:none;overflow:hidden;width:240px}.docs-blameview-title-container{align-items:center;background:#f8f8f8;display:flex;flex-direction:row;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;justify-content:space-between}.docs-blameview-title{display:block;background:#f8f8f8;color:#3c4043;font-weight:500;font-size:14px;padding:16px;white-space:nowrap}.docs-blameview-nav-container{margin:2px 8px 0 8px}.docs-blameview-previous-edit-button,.docs-blameview-next-edit-button{cursor:pointer;background:transparent;border-radius:2px;height:24px;outline:none}.docs-blameview-nav-container .docs-blameview-previous-edit-button .docs-blameview-button-icon .docs-icon-img:before,.docs-blameview-nav-container .docs-blameview-next-edit-button .docs-blameview-button-icon .docs-icon-img:before,.docs-blameview-nav-container .docs-blameview-previous-edit-button .docs-blameview-button-icon .docs-icon-img,.docs-blameview-nav-container .docs-blameview-next-edit-button .docs-blameview-button-icon .docs-icon-img{content:url(//ssl.gstatic.com/docs/common/material_common_sprite146_green.svg)}.docs-blameview-previous-edit-button.jfk-button-hover,.docs-blameview-next-edit-button.jfk-button-hover,.docs-blameview-previous-edit-button.jfk-button-focused,.docs-blameview-next-edit-button.jfk-button-focused{cursor:pointer;background:#f1f3f4;border-color:transparent}.docs-blameview-previous-edit-button.jfk-button-active,.docs-blameview-next-edit-button.jfk-button-active{cursor:pointer;background:#e6f4ea}.docs-blameview-previous-edit-button.jfk-button-disabled,.docs-blameview-next-edit-button.jfk-button-disabled{cursor:default}.docs-blameview-nav-container .docs-blameview-previous-edit-button.jfk-button-disabled .docs-icon-img:before,.docs-blameview-nav-container .docs-blameview-next-edit-button.jfk-button-disabled .docs-icon-img:before,.docs-blameview-nav-container .docs-blameview-previous-edit-button.jfk-button-disabled .docs-icon-img,.docs-blameview-nav-container .docs-blameview-next-edit-button.jfk-button-disabled .docs-icon-img{content:url(//ssl.gstatic.com/docs/common/material_common_sprite146_grey_dark.svg);opacity:.38}.docs-blameview-button-icon{overflow:hidden;position:relative}.docs-blameview-message{background:#fff;border-bottom-left-radius:4px;border-bottom-right-radius:4px;color:#3c4043;display:block;font-size:14px;line-height:20px;overflow:hidden;overflow-wrap:break-word;padding:13px 16px 13px 16px;text-overflow:ellipsis;white-space:normal}.docs-blameview-header{background:#f8f8f8;display:flex;flex-direction:row;padding:0 16px 10px 16px;white-space:nowrap}.docs-blameview-avatar-holder{display:inline-block;max-width:32px}.docs-blameview-avatar{border-radius:50%;height:32px;width:32px}.docs-blameview-authortimestamp{color:#3c4043;display:inline-block;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:12px;overflow:hidden;padding:0 10px;text-overflow:ellipsis;white-space:nowrap;-webkit-box-flex:1;box-flex:1;-ms-flex-positive:1;-webkit-flex-grow:1;flex-grow:1}.docs-blameview-timestamp{display:block;font-size:12px;margin:0}.docs-blameview-author{display:block;font-size:14px;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;height:18px;margin-bottom:1px;max-width:167px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.docs-blameview-valuecontainer{background:#ffffff;display:flex;flex:1 1 auto;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;justify-content:space-between;line-height:20px;max-height:160px;overflow:hidden;overflow-wrap:break-word;white-space:normal;width:100%}.docs-blame-bold-text{font-style:normal;font-weight:500}.docs-blameview-value-content{color:#3c4043;display:inline;font-style:italic;overflow-x:hidden;overflow-y:auto;overflow-wrap:break-word;padding:10px 16px;word-wrap:break-word}.docs-blameview-value-content-indirect-edit{margin-right:0}.overlay-container-rtl .docs-blameview-value-content-indirect-edit{margin-left:0}.docs-blameview-spinner{background:#fff;overflow:hidden;padding:30px 16px 13px 16px}.docs-blameview-spinner-holder{float:left;height:32px;margin:0 0 0 16px;position:relative}.overlay-container-rtl .docs-blameview-spinner-holder{float:right;margin:0 16px 0 0}.docs-blameview-icon:before{content:url(//ssl.gstatic.com/docs/common/menu_feature_sprite7.svg)}.docs-blameview-icon{height:4332px;position:absolute;width:72px}.docs-blameview-footer{border-top:1px solid #dadce0;display:flex;flex-direction:column;padding:12px 16px 0 16px}.docs-blameview-warning,.docs-blameview-indirect-edit{color:#3c4043;display:block;font-size:12px;line-height:16px;padding-bottom:12px;white-space:normal}a.docs-blameview-warning-info,.docs-blameview-indirect-edit-learnmore a{color:#1a73e8;text-decoration:underline}.docs-blameview-feedback{align-items:center;background:#ffffff;border-top:1px solid #dadce0;display:block;padding-left:16px;padding-right:9px;padding-top:10px;line-height:20px}.docs-blameview-short-feedback{display:none}.docs-blameview-useful-text{color:#3c4043;float:left;font-size:14px;font-style:italic}.docs-blameview-give-thumbs-up{float:right;padding-right:12px}.docs-blameview-thumbs-up-button{float:left;opacity:0.6;padding-right:10px;width:18px}.docs-blameview-thumbs-down-button{float:right;opacity:0.6;width:18px}.docs-blameview-thumbs-up-button:hover,.docs-blameview-thumbs-down-button:hover{cursor:pointer;opacity:1}.docs-blameview-long-feedback{display:none;font-size:14px;font-style:italic}.docs-blameview-long-feedback a,.docs-blameview-long-feedback a:link,.docs-blameview-long-feedback a:visited{color:#1a73e8}.docs-blameview-long-feedback-text{color:#3c4043}.docs-blameview-nav-container .docs-hc-edge.docs-blameview-previous-edit-button .docs-icon-img,.docs-blameview-nav-container .docs-hc-edge.docs-blameview-next-edit-button .docs-icon-img,.docs-blameview-nav-container .docs-hc-gecko.docs-blameview-previous-edit-button .docs-icon-img,.docs-blameview-nav-container .docs-hc-gecko.docs-blameview-next-edit-button .docs-icon-img{filter:brightness(1.5)}.docs-blameview-nav-container .docs-hc-edge.docs-blameview-previous-edit-button.jfk-button-disabled .docs-icon-img,.docs-blameview-nav-container .docs-hc-edge.docs-blameview-next-edit-button.jfk-button-disabled .docs-icon-img,.docs-blameview-nav-container .docs-hc-gecko.docs-blameview-previous-edit-button.jfk-button-disabled .docs-icon-img,.docs-blameview-nav-container .docs-hc-gecko.docs-blameview-next-edit-button.jfk-button-disabled .docs-icon-img{filter:brightness(10);opacity:1}.docs-blameview-nav-container .docs-hc-ie.docs-blameview-previous-edit-button .docs-icon-img,.docs-blameview-nav-container .docs-hc-ie.docs-blameview-next-edit-button .docs-icon-img{-ms-high-contrast-adjust:none;background-color:white}.docs-gm .docs-gm-sidebar-icon{display:flex;align-items:center;margin-right:12px;height:24px;width:24px}.docs-gm .docs-gm-sidebar-icon .docs-gm-sidebar-icon-24{height:24px;margin:0;width:24px}.docs-gm .docs-gm-sidebar-icon-path{fill:#188038}.docs-sidebar-titlebar-icon-button{cursor:pointer;position:absolute;right:10px}.docs-sidebar-gm-titlebar-icon-button{background-color:transparent;border:none!important;border-radius:50%;cursor:pointer;height:26px;margin-left:auto;margin-right:0;padding:6px 0 0 0;position:relative;right:-5px;text-align:center;top:0;width:32px}.docs-sidebar-gm-titlebar-icon-button:hover{background-color:#f1f3f4}.docs-sidebar-gm-titlebar-icon-button:focus{background-color:#e8eaed;outline:none}.docs-clipboard-clearall{font-weight:500}.docs-clipboard-preview{position:absolute;background-color:#fff;color:black;visibility:hidden;width:260px;height:195px;overflow:hidden;font-size:80%;border:1px solid #888;outline:0;padding:2px;top:0;z-index:9999}.docs-clipboard-preview iframe{border:0;padding:0;margin:0;width:100%;height:100%;vertical-align:top}.docs-textcolormenubutton .goog-toolbar-menu-button-outer-box .goog-toolbar-menu-button-inner-box .goog-toolbar-menu-button-caption .goog-color-menu-button-indicator{height:20px;width:22px;bottom:1px}.docs-textcolormenubutton .goog-toolbar-menu-button-outer-box .goog-toolbar-menu-button-inner-box .goog-toolbar-menu-button-caption .goog-color-menu-button-indicator .docs-textcolormenubutton-background-indicator{height:14px;left:4px;position:relative;top:4px;width:14px}.docs-textcolormenubutton .goog-toolbar-menu-button-outer-box .goog-toolbar-menu-button-inner-box .goog-toolbar-menu-button-caption .goog-color-menu-button-indicator .docs-textcolormenubutton-background-indicator .docs-textcolormenubutton-char{bottom:4px;font-size:14px;font-weight:normal;position:relative}.docs-text-color-state-change-button{margin-right:0;padding:0 18px}.jfk-button-standard.docs-c-u-colormenutogglebutton-base.docs-c-u-colormenutogglebutton-extra-visible-border.jfk-button-hover,.jfk-button-standard.docs-c-u-colormenutogglebutton-base.docs-c-u-colormenutogglebutton-extra-visible-border.jfk-button-hover.jfk-button-checked{border:1px solid #000}.docs-text-color-omnibox-icon{float:left;width:16px;height:16px;margin:2px}.docs-docos-activitybox{background:#fff;border:solid 1px #cbcbcb;-moz-box-shadow:-1px 1px 1px rgba(0,0,0,.2);-webkit-box-shadow:0 2px 4px rgba(0,0,0,.2);box-shadow:0 2px 4px rgba(0,0,0,.2);height:550px;padding:12px 0;position:absolute;outline:none;right:20px;top:46px;width:434px;z-index:900}.docs-docos-activitybox-inner{height:100%;overflow:auto}.docs-docos-activitybox.docos-enable-new-header{padding:0!important;height:auto!important}.docs-docos-activitybox.docos-enable-new-header>.docs-docos-activitybox-inner{overflow:visible!important}.docs-docos-caret-inner,.docs-docos-caret-outer{border:9px solid;border-top-width:0;display:block;height:0;margin:0 auto;position:relative;width:0;z-index:901}.docs-docos-caret-inner{border-color:#fff transparent;top:1px}.docs-docos-caret-outer{border-color:#cbcbcb transparent;top:9px}.docos-enable-new-header>.docs-docos-caret-inner{border-color:#f1f1f1 transparent!important}.docos-shelly-icon{background-image:url(//ssl.gstatic.com/docs/common/d-icons30.png);background-repeat:no-repeat;height:14px;width:14px}.docos-icon-close-pane{background-position:0 -21px}.docos-icon-close-pane:hover{background-position:-38px -45px}.docos-icon-grippy{background-position:-38px -94px;width:16px;height:4px}.docos-icon-discussion-button{background-position:-22px -66px;width:14px;height:15px;vertical-align:text-bottom;margin-right:5px}.office-editing-export-error-bubble-close-button{float:right}.office-editing-export-error-bubble{background-color:#fff;border:1px solid transparent;border-radius:8px;box-shadow:0 4px 8px 3px rgba(60,64,67,.15);position:absolute;z-index:1003;color:#5f6368;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;outline:none;padding:24px;white-space:pre-line;width:400px;z-index:99!important}.office-editing-export-error-bubble-title{color:#202124;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:22px;font-weight:400;line-height:28px;font-size:16px;line-height:24px}.office-editing-export-error-bubble-description{line-height:20px;margin-top:16px}.office-editing-export-error-bubble-retry-text{font-size:12px;line-height:16px;margin-top:12px}.office-editing-export-error-bubble-learn-more,.office-editing-export-error-bubble-learn-more:visited{color:#1a73e8;margin-left:8px}.office-editing-onboarding-promo-bubble-dotted-progressbar-dot{background:#ceead6;border-radius:50%;display:inline-block;height:8px;margin-right:8px;width:8px}.office-editing-onboarding-promo-bubble-dotted-progressbar-dot-highlighted{background:#188038}.office-editing-onboarding-dialog{width:480px}.office-editing-onboarding-dialog-logo{height:92px;width:92px}.office-editing-onboarding-dialog-heading{color:#202124;font-size:24px;line-height:32px;padding:16px 0}.office-editing-onboarding-dialog-description{color:#5f6368;font-size:18px;line-height:28px;text-align:center}.office-editing-onboarding-dialog-logo-container,.office-editing-onboarding-dialog-heading,.office-editing-onboarding-dialog-description,.office-editing-onboarding-dialog .docs-material-gm-dialog-buttons{display:flex;justify-content:center}.office-editing-onboarding-dialog .docs-material-gm-dialog-title{padding:18px}.office-editing-onboarding-dialog .docs-material-gm-dialog-title-close{cursor:pointer}.office-editing-onboarding-dialog .docs-material-gm-dialog-buttons{padding-bottom:34px}.office-editing-onboarding-promo-bubble{padding:16px 16px 16px 20px;width:324px}.office-editing-onboarding-promo-bubble-title{color:#202124;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:18px;line-height:24px;padding-bottom:8px}.office-editing-onboarding-promo-bubble-description{color:#3c4043;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;padding-right:24px}.office-editing-onboarding-promo-bubble .docs-material-promo-walkthrough-bubble-buttons{display:block;padding:24px 0 0 0;justify-content:normal}.office-editing-onboarding-promo-bubble .docs-material-promo-walkthrough-bubble-buttons .docs-material-button-fill-primary.docs-material-button{display:inline-block;float:right;height:24px;padding:3px 18px 3px}.office-editing-onboarding-promo-bubble .office-editing-promo-bubble-dotted-progressbar{display:inline-block;float:left}.docs-material .docs-icon,.docs-material .goog-color-menu-button-indicator .docs-icon,.docs-material .sketchy-toolbar-color-menu-button .goog-toolbar-menu-button-caption .docs-icon{height:18px;width:18px;margin:1px 2px 2px 1px}.docs-material .docs-icon-img:before{content:url(//ssl.gstatic.com/docs/common/material_common_sprite146.svg)}.docs-gm .docs-material .docs-icon-img:before{content:url(//ssl.gstatic.com/docs/common/material_common_sprite146_grey_medium.svg)}.docs-material .docs-icon-img{content:url(//ssl.gstatic.com/docs/common/material_common_sprite146.svg)}.docs-gm .docs-material .docs-icon-img{content:url(//ssl.gstatic.com/docs/common/material_common_sprite146_grey_medium.svg)}.docs-material .docs-icon-img-container{height:4622px;position:absolute;width:74px}.docs-material .goog-menuitem-icon .docs-icon-img-container{opacity:0.54}.docs-gm .docs-material .goog-menuitem-icon .docs-icon-img-container{opacity:1}.docs-material .goog-menuitem-icon .docs-icon-document,.docs-material .goog-menuitem-icon .docs-icon-punch,.docs-material .goog-menuitem-icon .docs-icon-presentation,.docs-material .goog-menuitem-icon .docs-icon-spreadsheet,.docs-material .goog-menuitem-icon .docs-icon-form,.docs-material .goog-menuitem-icon .docs-icon-drawing,.docs-material .goog-menuitem-icon .docs-icon-script,.docs-material .goog-menuitem-icon .docs-icon-site{opacity:1}.docs-material .goog-toolbar-button-inner-box .docs-icon,.docs-material .goog-toolbar-menu-button-caption .docs-icon,.docs-material .goog-toolbar-menu-button-caption .goog-color-menu-button-indicator .docs-icon{margin-top:0px}.docs-gm .docs-material .goog-toolbar-button-active .docs-icon-img:before,.docs-gm .docs-material .goog-toolbar-button-checked .docs-icon-img:before,.docs-gm .docs-material .goog-toolbar-button-selected .docs-icon-img:before,.docs-gm .docs-material .goog-toolbar-combo-button-open .docs-icon-img:before,.docs-gm .docs-material .goog-toolbar-menu-button-open .docs-icon-img:before,.docs-gm .docs-material .docs-toolbar-split-create-button.goog-toolbar-button-active .docs-icon-img:before,.docs-gm .docs-material .docs-toolbar-split-create-button.goog-toolbar-menu-button-active .docs-icon-img:before,.docs-gm .docs-material .docs-toolbar-split-create-button.goog-toolbar-menu-button-open .docs-icon-img:before,.docs-gm .docs-material .docs-appbar-circle-button.jfk-button-active .docs-icon-img:before,.docs-gm .docs-material .docs-appbar-circle-button.jfk-button-checked .docs-icon-img:before,.docs-gm .docs-material .docs-analytics-sidebar-tab-selected .docs-icon-img:before,.docs-gm .docs-material.docs-sheet-active-tab .docs-icon-img:before,.docs-gm .docs-material .docs-sheet-button-active .docs-icon-img:before,.docs-gm .docs-material .docs-sheet-button-open .docs-icon-img:before,.docs-gm .docs-material .punch-start-presentation-container .docs-icon-img:before,.docs-gm .docs-material .waffle-named-ranges-promo-title .docs-icon-img:before,.docs-gm .docs-material.goog-flat-menu-button-open .docs-icon-img:before,.docs-gm .docs-material.trix-palette .goog-palette-cell-selected .docs-icon-img:before,.docs-bubble .docs-bubble-button.jfk-button:hover:active .docs-icon-img:before,.docs-save-indicator:active .docs-icon-img:before,.docs-save-indicator.docs-save-indicator-selected .docs-icon-img:before,.docs-material .docs-save-indicator-popup-icon .docs-icon-img:before{content:url(//ssl.gstatic.com/docs/common/material_common_sprite146_green.svg)}.docs-gm .docs-material .goog-toolbar-button-active .docs-icon-img,.docs-gm .docs-material .goog-toolbar-button-checked .docs-icon-img,.docs-gm .docs-material .goog-toolbar-button-selected .docs-icon-img,.docs-gm .docs-material .goog-toolbar-combo-button-open .docs-icon-img,.docs-gm .docs-material .goog-toolbar-menu-button-open .docs-icon-img,.docs-gm .docs-material .docs-toolbar-split-create-button.goog-toolbar-button-active .docs-icon-img,.docs-gm .docs-material .docs-toolbar-split-create-button.goog-toolbar-menu-button-active .docs-icon-img,.docs-gm .docs-material .docs-toolbar-split-create-button.goog-toolbar-menu-button-open .docs-icon-img,.docs-gm .docs-material .docs-appbar-circle-button.jfk-button-active .docs-icon-img,.docs-gm .docs-material .docs-appbar-circle-button.jfk-button-checked .docs-icon-img,.docs-gm .docs-material .docs-analytics-sidebar-tab-selected .docs-icon-img,.docs-gm .docs-material.docs-sheet-active-tab .docs-icon-img,.docs-gm .docs-material .docs-sheet-button-active .docs-icon-img,.docs-gm .docs-material .docs-sheet-button-open .docs-icon-img,.docs-gm .docs-material .punch-start-presentation-container .docs-icon-img,.docs-gm .docs-material .waffle-named-ranges-promo-title .docs-icon-img,.docs-gm .docs-material.goog-flat-menu-button-open .docs-icon-img,.docs-gm .docs-material.trix-palette .goog-palette-cell-selected .docs-icon-img,.docs-bubble .docs-bubble-button.jfk-button:hover:active .docs-icon-img,.docs-save-indicator:active .docs-icon-img,.docs-save-indicator.docs-save-indicator-selected .docs-icon-img,.docs-material .docs-save-indicator-popup-icon .docs-icon-img{content:url(//ssl.gstatic.com/docs/common/material_common_sprite146_green.svg)}.docs-material.clean-palette .docs-icon{margin:4px}.docs-material .docs-omnibox-row-icon .shape-icon{margin:-1px 0 0 -1px}.docs-material .docs-icon-save{left:-40px;top:-3980px}.docs-material .docs-icon-print{left:-46px;top:-4582px}.docs-material .docs-icon-undo,.docs-material .docs-icon-redo-rtl{left:-20px;top:-1158px}.docs-material .docs-icon-redo,.docs-material .docs-icon-undo-rtl{left:0;top:-3534px}.docs-material .docs-icon-copy{left:0;top:-490px}.docs-material .docs-icon-cut{left:-46px;top:-3940px}.docs-material .docs-icon-paste{left:0;top:-3194px}.docs-material .docs-icon-document{left:0;top:-3028px}.docs-material .docs-icon-presentation,.docs-material .docs-icon-punch{left:0;top:-576px}.docs-material .docs-icon-presentation-grey900{left:-20px;top:-2618px}.docs-material .docs-icon-spreadsheet{left:-26px;top:-3134px}.docs-material .docs-icon-form{left:0;top:-3340px}.docs-material .docs-icon-form-black{left:0;top:-1058px}.docs-material .docs-icon-drawing{left:0;top:-4000px}.docs-material .docs-icon-site{left:0;top:-4020px}.docs-material .docs-icon-drawing-black{left:-20px;top:-390px}.docs-material .docs-icon-excel{left:-26px;top:-4516px}.docs-material .docs-icon-powerpoint{left:-40px;top:-4126px}.docs-material .docs-icon-word{left:-26px;top:-3926px}.docs-material .docs-icon-script{left:-40px;top:-2718px}.docs-material .docs-icon-insert-script{left:0;top:-2052px}.docs-material .docs-icon-gadget{left:-26px;top:-3360px}.docs-material .docs-icon-image{left:-52px;top:-3134px}.docs-material .docs-icon-clipboard{left:-20px;top:-1544px}.docs-material .docs-icon-bold{left:-26px;top:-3296px}.docs-material .docs-icon-italic{left:0;top:-2678px}.docs-material .docs-icon-text-color{left:-40px;top:-3628px}.docs-material .docs-icon-align-left{left:-40px;top:-2658px}.docs-material .docs-icon-align-center{left:-40px;top:-302px}.docs-material .docs-icon-align-right{left:0;top:-1704px}.docs-material .docs-icon-align-justify{left:-20px;top:-576px}.docs-material .docs-icon-align-shapes-left{left:0;top:-38px}.docs-material .docs-icon-align-shapes-center{left:0;top:-1198px}.docs-material .docs-icon-align-shapes-right{left:0;top:-4516px}.docs-material .docs-icon-align-shapes-top{left:-20px;top:-2422px}.docs-material .docs-icon-align-shapes-middle{left:-20px;top:-4000px}.docs-material .docs-icon-align-shapes-bottom{left:0;top:-1218px}.docs-material .docs-icon-distribute-shapes-horizontally{left:-40px;top:-2698px}.docs-material .docs-icon-distribute-shapes-vertically{left:-20px;top:-4066px}.docs-material .docs-icon-valign-top{left:0;top:-1158px}.docs-material .docs-icon-valign-middle{left:-46px;top:-2098px}.docs-material .docs-icon-valign-bottom{left:0;top:-1238px}.docs-material .docs-icon-list-number{left:-40px;top:-120px}.docs-material .docs-icon-list-bullet{left:-20px;top:-616px}.docs-material .docs-icon-indent{left:-48px;top:-3254px}.docs-material .docs-icon-outdent{left:-46px;top:-4228px}.docs-material .docs-icon-line-spacing{left:0;top:-140px}.docs-material .docs-icon-columns{left:0;top:-1524px}.docs-material .docs-icon-underline{left:0;top:-1784px}.docs-material .docs-icon-text-bgcolor{left:-26px;top:-4228px}.docs-material .docs-icon-textbox{left:-40px;top:-1926px}.docs-material .docs-icon-shapes{left:-20px;top:-682px}.docs-material .docs-icon-line-width{left:0;top:-2196px}.docs-material .docs-icon-add-trendline{left:0;top:-2256px}.docs-material .docs-icon-data-label{left:0;top:-4396px}.docs-material .docs-icon-next{left:-26px;top:-1320px}.docs-material .docs-icon-previous{left:0;top:-1258px}.docs-material .docs-icon-no-color{left:-20px;top:-2718px}.docs-material .docs-icon-fill-color{left:-20px;top:-4376px}.docs-material .docs-icon-line-color{left:-52px;top:-3114px}.docs-material .docs-icon-line-type{left:0;top:-222px}.docs-material .docs-icon-table{left:0;top:-2860px}.docs-material .docs-icon-comment{left:-22px;top:-722px}.docs-material .docs-icon-comment-blank{left:-20px;top:-120px}.docs-material .docs-icon-comment-blank-highlighted{left:-46px;top:-4274px}.docs-material .docs-icon-comment-blank-grey600{left:-46px;top:-4562px}.docs-material .docs-icon-insert-comment{left:-46px;top:-3900px}.docs-material .docs-icon-insert-comment-24{left:-20px;top:-3756px}.docs-material .docs-icon-trending-up-24{left:-26px;top:-510px}.docs-material .docs-icon-chart{left:-40px;top:-140px}.docs-material .docs-icon-list-number-rtl{left:-26px;top:-4496px}.docs-material .docs-icon-list-bullet-rtl{left:-20px;top:-4106px}.docs-material .docs-icon-indent-rtl{left:0;top:-4314px}.docs-material .docs-icon-outdent-rtl{left:-40px;top:-4396px}.docs-material .docs-icon-line-spacing-rtl{left:0;top:-2946px}.docs-material .docs-icon-text-ltr{left:0;top:-3094px}.docs-material .docs-icon-text-rtl{left:-20px;top:-470px}.docs-material .docs-icon-sheet-rtl{left:0;top:-100px}.docs-material .docs-icon-share{left:0;top:-1584px}.docs-material .docs-icon-subscript{left:0;top:-682px}.docs-material .docs-icon-superscript{left:0;top:-2880px}.docs-material .docs-icon-strikethrough{left:0;top:-2422px}.docs-material .docs-icon-clear-formatting{left:-20px;top:-2402px}.docs-material .docs-icon-link{left:0;top:-1078px}.docs-material .docs-icon-special-character{left:-20px;top:-3782px}.docs-material .docs-icon-close-white{left:-48px;top:-804px}.docs-material .docs-icon-close-small{left:-20px;top:-1946px}.docs-material .docs-icon-close-thin{left:0;top:-1824px}.docs-material .docs-icon-paint-format{left:-26px;top:-3254px}.docs-material .docs-icon-video{left:0;top:-904px}.docs-material .docs-icon-reload{left:0;top:-3802px}.docs-material .docs-icon-reload-rtl{left:0;top:-3860px}.docs-material .docs-icon-insert-page-break{left:-40px;top:-1764px}.docs-material .docs-icon-close{left:-20px;top:-2658px}.docs-material .docs-icon-check{left:-40px;top:-430px}.docs-material .docs-icon-up{left:-52px;top:-3174px}.docs-material .docs-icon-down{left:-42px;top:-3492px}.docs-material .docs-icon-add-page{left:0;top:-3134px}.docs-material .docs-icon-email{left:-20px;top:-2196px}.docs-material .docs-icon-insert-equation{left:-26px;top:-2296px}.docs-material .docs-icon-insert-horizontal-line{left:-40px;top:-536px}.docs-material .docs-icon-tabstop-center-blue500{left:-20px;top:-1300px}.docs-material .docs-icon-tabstop-center-bottom-blue500{left:-20px;top:-1804px}.docs-material .docs-icon-tabstop-left-blue500{left:-40px;top:-4046px}.docs-material .docs-icon-tabstop-right-blue500{left:-26px;top:-1422px}.docs-material .docs-icon-ruler-first-indent-drag-blue500{left:-42px;top:-1044px}.docs-material .docs-icon-border-all{left:-22px;top:-702px}.docs-material .docs-icon-border-right{left:-40px;top:-1564px}.docs-material .docs-icon-border-left{left:-20px;top:-4602px}.docs-material .docs-icon-border-top{left:-46px;top:-1402px}.docs-material .docs-icon-border-bottom{left:0;top:-262px}.docs-material .docs-icon-border-outside{left:0;top:-2216px}.docs-material .docs-icon-border-inside{left:-20px;top:-4476px}.docs-material .docs-icon-border-none{left:-26px;top:-3380px}.docs-material .docs-icon-border-horizontal{left:-46px;top:-3380px}.docs-material .docs-icon-border-vertical{left:-20px;top:-4146px}.docs-material .docs-icon-merge{left:-52px;top:-510px}.docs-material .docs-icon-wrap{left:0;top:-616px}.docs-material .docs-icon-autofilter{left:-40px;top:-282px}.docs-material .docs-icon-autofilter-filled{left:0;top:-998px}.docs-material .docs-icon-insert-function{left:0;top:-784px}.docs-material .docs-icon-insert-formula{left:-20px;top:-3194px}.docs-material .docs-icon-folder-shared{left:-40px;top:-4106px}.docs-material .docs-icon-folder-outline{left:0;top:-3114px}.docs-material .docs-icon-folder-outline-hover{left:-40px;top:-450px}.docs-material .docs-icon-folder-outline-pressed{left:0;top:-2638px}.docs-material .docs-icon-folder-solid{left:-40px;top:-4000px}.docs-material .docs-icon-drive{left:-20px;top:-430px}.docs-material .docs-icon-drive-hover{left:-40px;top:-2052px}.docs-material .docs-icon-drive-pressed{left:0;top:-1764px}.docs-material .docs-icon-drive-large{left:-20px;top:0}.docs-material .docs-icon-drive-large-wrapper{width:36px;height:36px}.docs-material .docs-icon-back{left:0;top:-3300px}.docs-material .docs-icon-back-rtl{left:-40px;top:-864px}.docs-material .docs-icon-arrow-more{left:-40px;top:-262px}.docs-material .docs-icon-arrow-more-rtl{left:-20px;top:-1992px}.docs-material .docs-icon-search-this-document{left:0;top:-3980px}.docs-material .docs-icon-arrow-dropdown{left:-46px;top:-3920px}.docs-material .docs-icon-arrow-dropdown-grey600{left:-40px;top:-4086px}.docs-material .docs-icon-expand-all{left:-20px;top:-282px}.docs-material .docs-icon-word-art{left:-20px;top:-2052px}.docs-material .docs-icon-delete-x{left:0;top:-2098px}.docs-material .docs-icon-settings{left:-20px;top:-2578px}.docs-material .docs-icon-plus{left:-20px;top:-3028px}.docs-material .docs-icon-plus-white{left:-20px;top:-1138px}.docs-material .docs-icon-alert{left:-40px;top:-2900px}.docs-material .docs-icon-alert-error-24-orange600{left:0;top:-510px}.docs-material .docs-icon-trash{left:0;top:-3280px}.docs-material .docs-icon-locked{left:-20px;top:-556px}.docs-material .docs-icon-locked-grey600{left:-52px;top:-3214px}.docs-material .docs-icon-unlocked{left:-40px;top:-662px}.docs-material .docs-icon-add-fonts{left:0;top:-2402px}.docs-material .docs-icon-enter-compact{left:0;top:-3688px}.docs-material .docs-icon-exit-compact{left:-40px;top:-1886px}.docs-material .docs-icon-mode-edit{left:-20px;top:-3628px}.docs-material .docs-icon-mode-review{left:-26px;top:-1382px}.docs-material .docs-icon-mode-review-white{left:-40px;top:-410px}.docs-material .docs-icon-mode-view{left:0;top:-282px}.docs-material .docs-icon-mode-view-white{left:-46px;top:-348px}.docs-material .docs-icon-chat{left:0;top:-3214px}.docs-material .docs-icon-chat-bubble-grey900{left:-40px;top:-1118px}.docs-material .docs-icon-chat-bubble-white{left:-46px;top:-2072px}.docs-material .docs-icon-chat-person-grey900{left:-42px;top:-1054px}.docs-material .docs-icon-chat-person-wide-grey900{left:-26px;top:-1362px}.docs-material .docs-icon-person-add-white{left:-42px;top:-1024px}.docs-material .docs-icon-star{left:0;top:-2012px}.docs-material .docs-icon-duplicate{left:0;top:-2618px}.docs-material .docs-icon-file{left:-20px;top:-4436px}.docs-material .docs-icon-opacity{left:0;top:-3782px}.docs-material .docs-icon-label-slant{left:-46px;top:-3446px}.docs-material .docs-icon-point-size{left:-52px;top:-3234px}.docs-material .docs-icon-question{left:0;top:-4456px}.docs-material .docs-icon-quote{left:-40px;top:-3648px}.docs-material .docs-icon-vertical-gridlines{left:-20px;top:-1504px}.docs-material .docs-icon-left-axis{left:0;top:-2738px}.docs-material .docs-icon-right-axis{left:-20px;top:-4086px}.docs-material .docs-icon-left-axis-gridlines{left:-20px;top:-4416px}.docs-material .docs-icon-right-axis-gridlines{left:-20px;top:-1098px}.docs-material .docs-icon-reset{left:-26px;top:-3440px}.docs-material .docs-icon-drag-move{left:-26px;top:-4248px}.docs-material .docs-icon-col-dragger{left:0;top:-3074px}.docs-material .docs-icon-chrome-store{left:-52px;top:-1684px}.docs-material .docs-icon-fit-area{left:-20px;top:-3960px}.docs-material .docs-icon-zoom-out{left:0;top:-3400px}.docs-material .docs-icon-zoom-tool{left:0;top:-3880px}.docs-material .docs-icon-download{left:-52px;top:-1664px}.docs-material .docs-icon-fusion-table{left:-40px;top:-1300px}.docs-material .docs-icon-spreadsheet-sink{left:0;top:-4436px}.docs-material .docs-icon-send-responses{left:0;top:-2032px}.docs-material .docs-icon-liveform{left:0;top:-1624px}.docs-material .docs-icon-ellipsis{left:0;top:-1462px}.docs-material .docs-icon-html-preview{left:-20px;top:-4456px}.docs-material .docs-icon-grid{left:-20px;top:-2678px}.docs-material .docs-icon-add-animation{left:-20px;top:-1764px}.docs-material .docs-icon-play-filled-24{left:0;top:-4268px}.docs-material .docs-icon-play-filled-error-36{left:0;top:-3822px}.docs-material .docs-icon-playhead{left:0;top:-4066px}.docs-material .docs-icon-playhead-rtl{left:-48px;top:-3340px}.docs-material .docs-icon-unsupported{left:0;top:-4334px}.docs-material .docs-icon-calendar{left:-20px;top:-2880px}.docs-material .docs-zippy-closed{left:-20px;top:-1724px}.docs-material .docs-zippy-open{left:-20px;top:-490px}.docs-material .docs-icon-bookmark{left:-40px;top:-242px}.docs-material .docs-icon-heading{left:0;top:-4374px}.docs-material .docs-icon-file-blue{left:-46px;top:-3466px}.docs-material .docs-icon-web-result{left:-26px;top:-2150px}.docs-material .docs-icon-mic{left:-20px;top:-3802px}.docs-material .docs-icon-mic-plus{left:-40px;top:-1524px}.docs-material .docs-icon-paragraph{left:-20px;top:-2342px}.docs-material .docs-icon-bookmark-black{left:0;top:-2598px}.docs-material .docs-icon-web-result-blue{left:0;top:-596px}.docs-material .docs-icon-popout{left:-20px;top:-2758px}.docs-material .docs-icon-checkbox{left:0;top:-4496px}.docs-material .docs-icon-checkbox-type{left:-40px;top:-222px}.docs-material .docs-icon-dropdown-type{left:-40px;top:-2402px}.docs-material .docs-icon-grid-type{left:-40px;top:-1624px}.docs-material .docs-icon-image-type{left:-26px;top:-4536px}.docs-material .docs-icon-radio-type{left:0;top:-4106px}.docs-material .docs-icon-scale-type{left:-20px;top:-1198px}.docs-material .docs-icon-text-type{left:0;top:-1906px}.docs-material .docs-icon-time-type{left:-20px;top:-1926px}.docs-material .docs-icon-insert-text-block{left:0;top:-830px}.docs-material .docs-icon-accepting-responses-on{left:-42px;top:-702px}.docs-material .docs-icon-accepting-responses-off{left:-20px;top:-596px}.docs-material .docs-icon-decimal-increase{left:-20px;top:-3400px}.docs-material .docs-icon-decimal-decrease{left:0;top:-4476px}.docs-material .docs-icon-settings-white{left:-20px;top:-100px}.docs-material .docs-icon-no-symbol{left:-46px;top:-3688px}.docs-material .docs-icon-crop{left:0;top:-4248px}.docs-material .docs-icon-green-check{left:0;top:-3734px}.docs-material .docs-icon-font-size{left:-52px;top:-2966px}.docs-material .docs-icon-reset-image{left:-40px;top:-4376px}.docs-material .docs-icon-r-squared{left:0;top:-2322px}.docs-material .docs-icon-graph-legend{left:-20px;top:-140px}.docs-material .docs-icon-cast{left:0;top:-556px}.docs-material .docs-icon-wrap-overflow{left:-52px;top:-2986px}.docs-material .docs-icon-wrap-wrap{left:-20px;top:-1564px}.docs-material .docs-icon-wrap-clip{left:0;top:-1278px}.docs-material .docs-icon-highlights{left:-40px;top:-4066px}.docs-material .docs-icon-green-back{left:-26px;top:-322px}.docs-material .docs-icon-arrow-back-white{left:0;top:-2362px}.docs-material .docs-icon-arrow-back-white-rtl{left:0;top:-3466px}.docs-material .docs-icon-help{left:-20px;top:-4396px}.docs-material .docs-icon-highlight-green{left:0;top:-1544px}.docs-material .docs-icon-explore-24{left:0;top:-3048px}.docs-material .docs-icon-explore-black{left:-20px;top:-450px}.docs-material .docs-icon-explore-black-padded{left:-40px;top:-390px}.docs-material .docs-icon-explore-green{left:-52px;top:-3094px}.docs-material .docs-icon-explore-white{left:-40px;top:-2012px}.docs-material .docs-icon-insert-autovis-chart{left:0;top:-4086px}.docs-material .docs-icon-insert-autovis-chart-white{left:-46px;top:-2382px}.docs-material .docs-icon-zoom-in{left:-20px;top:-262px}.docs-material .docs-icon-thumb-up{left:0;top:-1504px}.docs-material .docs-icon-thumb-down{left:-26px;top:-3094px}.docs-material .docs-icon-dlp-warning{left:0;top:0}.docs-material .docs-icon-dogfood{left:0;top:-1926px}.docs-material .docs-icon-add-to-drive{left:-20px;top:-1524px}.docs-material .docs-icon-add-shortcut-to-drive{left:-52px;top:-3006px}.docs-material .docs-icon-paste-without-formatting{left:-20px;top:-662px}.docs-material .docs-icon-qanda{left:-40px;top:-2678px}.docs-material .docs-icon-update-chart{left:-52px;top:-3154px}.docs-material .docs-icon-arrow-back-dark{left:0;top:-2920px}.docs-material .docs-icon-arrow-back-dark-rtl{left:-26px;top:-2124px}.docs-material .docs-icon-open-in-external{left:-20px;top:-3980px}.docs-material .docs-icon-unlink{left:-46px;top:-2362px}.docs-material .docs-icon-bar-chart{left:0;top:-4146px}.docs-material .docs-icon-column-chart{left:-20px;top:-864px}.docs-material .docs-icon-line-chart{left:-40px;top:-616px}.docs-material .docs-icon-pie-chart{left:-20px;top:-4314px}.docs-material .docs-icon-pie-chart-outline{height:18px;left:-46px;top:-4516px;width:18px}.docs-material .docs-icon-named-range{left:0;top:-3260px}.docs-material .docs-icon-clock{left:0;top:-662px}.docs-material .docs-icon-cancel{left:0;top:-3628px}.docs-material .docs-icon-cancel-24{left:-48px;top:-3274px}.docs-material .docs-icon-arrow-line-tool{left:-40px;top:-4456px}.docs-material .docs-icon-arrow-tilted{left:0;top:-1644px}.docs-material .docs-icon-unsupported-black{left:0;top:-1178px}.docs-material .docs-icon-text-rotation-up{left:-20px;top:-4126px}.docs-material .docs-icon-text-rotation-down{left:-40px;top:-1724px}.docs-material .docs-icon-text-rotation-angleup{left:0;top:-2758px}.docs-material .docs-icon-text-rotation-angledown{left:-40px;top:-3400px}.docs-material .docs-icon-text-rotation-vertical{left:-20px;top:-1584px}.docs-material .docs-icon-text-rotation-none{left:0;top:-3668px}.docs-material .docs-icon-keep-lightbulb{left:0;top:-1992px}.docs-material .docs-icon-update-table{left:-20px;top:-3420px}.docs-material .docs-icon-update-slide{left:0;top:-3320px}.docs-material .docs-icon-overflow-three-dots{left:0;top:-2658px}.docs-material .docs-icon-restore{left:0;top:-202px}.docs-material .docs-icon-paragraph-border-between{left:0;top:-1138px}.docs-material .docs-icon-paragraph-border-bottom{left:0;top:-2150px}.docs-material .docs-icon-paragraph-border-left{left:0;top:-4562px}.docs-material .docs-icon-paragraph-border-right{left:-26px;top:-4268px}.docs-material .docs-icon-paragraph-border-top{left:0;top:-368px}.docs-material .docs-icon-diagram-white{left:0;top:-722px}.docs-material .docs-icon-drive-black{left:0;top:-390px}.docs-material .docs-icon-file-upload{left:0;top:-2900px}.docs-material .docs-icon-photos{left:0;top:-4354px}.docs-material .docs-icon-keyboard{left:0;top:-1804px}.docs-material .docs-icon-dogfood-white{left:0;top:-3380px}.docs-material .docs-icon-hierarchy{left:-46px;top:-3760px}.docs-material .docs-icon-transition{left:0;top:-120px}.docs-material .docs-icon-mask{left:-40px;top:-884px}.docs-material .docs-icon-visibility-off{left:-20px;top:-1016px}.docs-material .docs-icon-volume-up{left:0;top:-1346px}.docs-material .docs-icon-volume-up-filled-36{left:-26px;top:-826px}.docs-material .docs-icon-camera{left:-40px;top:-3802px}.docs-material .docs-icon-pivot-table{left:0;top:-2236px}.docs-material .docs-icon-insert-pivot-table{left:-20px;top:-2012px}.docs-material .docs-icon-avatar-anonymous-white-32{left:-40px;top:-1158px}.docs-material .docs-icon-code{left:0;top:-2578px}.docs-material .docs-icon-play{left:-40px;top:-1946px}.docs-material .docs-icon-record{left:-40px;top:-4602px}.docs-material .docs-icon-flip-horizontal{left:-26px;top:-1664px}.docs-material .docs-icon-flip-vertical{left:-20px;top:-4562px}.docs-material .docs-icon-rotate-cw{left:0;top:-1366px}.docs-material .docs-icon-database{left:0;top:-2342px}.docs-material .docs-icon-database-grey600{left:0;top:-1604px}.docs-material .docs-icon-plx{left:0;top:-1724px}.docs-material .docs-icon-bigquery{left:-48px;top:-3300px}.docs-material .docs-icon-insert-dashboard{left:-20px;top:-636px}.docs-material .docs-icon-filter-control{left:-52px;top:-2124px}.docs-material .docs-icon-drag-handle-20{left:-46px;top:-3440px}.docs-material .docs-icon-comment-outline-20{left:-26px;top:-3316px}.docs-material .docs-icon-comment-outline-24{left:0;top:-804px}.docs-material .docs-icon-edit-outline-20{left:-26px;top:-3274px}.docs-material .docs-icon-edit-outline-24{left:-20px;top:-3688px}.docs-material .docs-icon-error-outline-20{left:0;top:-1036px}.docs-material .docs-icon-settings-outline-20{left:-52px;top:-2516px}.docs-material .docs-icon-settings-outline-24{left:-48px;top:-1372px}.docs-material .docs-icon-share-outline-20{left:-26px;top:-1340px}.docs-material .docs-icon-share-outline-24{left:-26px;top:-3214px}.docs-material .docs-icon-time-outline-20{left:-26px;top:-804px}.docs-material .docs-icon-trend-outline-20{left:-26px;top:-2170px}.docs-material .docs-icon-accessibility{left:-26px;top:-2072px}.docs-material .docs-icon-people-24{left:-26px;top:-3154px}.docs-material .docs-icon-reload-white{left:0;top:-3754px}.docs-material .docs-icon-present{left:-20px;top:-1218px}.docs-material .docs-icon-chevron-left-24{left:0;top:-2296px}.docs-material .docs-icon-chevron-right-24{left:-20px;top:-2098px}.docs-material .docs-icon-chevron-down-24{left:-46px;top:-4248px}.docs-material .docs-icon-delete-grey600-24{left:-42px;top:-998px}.docs-material .docs-icon-palette{left:-40px;top:-596px}.docs-material .docs-icon-sheets-table-24{left:0;top:-4536px}.docs-material .docs-icon-notifications-24{left:0;top:-3154px}.docs-material .docs-icon-notifications-20{left:-26px;top:-2920px}.docs-material .docs-icon-spellcheck{left:-46px;top:-3714px}.docs-material .docs-icon-add-item{left:0;top:-1744px}.docs-material .docs-icon-info-outline-grey{left:-20px;top:-2946px}.docs-material .docs-icon-datasheet-24-grey800{left:0;top:-2170px}.docs-material .docs-icon-undo-autocorrect{left:0;top:-2718px}.docs-material .docs-icon-spellbubble-feedback-16{left:-20px;top:-998px}.docs-material .docs-icon-spellbubble-ignore-16{left:-46px;top:-4294px}.docs-material .docs-icon-spellbubble-overflow-three-dots-16{left:-20px;top:-904px}.docs-material .docs-icon-list-24{left:-40px;top:-636px}.docs-material .docs-icon-audio{left:0;top:-3420px}.docs-material .docs-icon-drive-folder{left:-26px;top:-2316px}.docs-material .docs-icon-loading-circle-grey200{left:0;top:-1098px}.docs-material .docs-icon-pdf{left:-26px;top:-2362px}.docs-material .docs-icon-web{left:0;top:-2276px}.docs-material .docs-icon-offline-pin-20{left:0;top:-742px}.docs-material .docs-icon-sync-20{left:-20px;top:-3734px}.docs-material .docs-icon-sync-problem-20{left:-46px;top:-368px}.docs-material .docs-icon-acl-view-only{left:-40px;top:-2860px}.docs-material .docs-icon-acl-view-only-on-brand-color-background{left:0;top:-4294px}.docs-material .docs-icon-acl-comment-only{left:0;top:-4602px}.docs-material .docs-icon-acl-comment-only-on-brand-color-background{left:-26px;top:-4288px}.docs-material .docs-icon-approvals-lock{left:-40px;top:-1078px}.docs-material .docs-icon-approvals-lock-open{left:-26px;top:-1402px}.docs-material .docs-icon-approvals-stamp{left:0;top:-3360px}.docs-material .docs-icon-recall-24{left:0;top:-3900px}.docs-material .docs-icon-feedback{left:0;top:-470px}.docs-material .docs-icon-offline-cloud-24{left:-48px;top:-1346px}.docs-material .docs-icon-arrow-down{left:0;top:-864px}.docs-material .docs-icon-arrow-up{left:-48px;top:-3320px}.docs-material .docs-icon-avatar-grey600{left:-20px;top:-2860px}.docs-material .docs-icon-description-grey600{left:0;top:-4046px}.docs-material .docs-icon-popout-below{left:0;top:-2778px}.docs-material .docs-icon-group{left:0;top:-450px}.docs-material .docs-icon-revisions-grey600{left:0;top:-1118px}.docs-material .docs-icon-popout-viewer-24-white{left:0;top:-342px}.docs-material .docs-icon-maximize-viewer{left:0;top:-3960px}.docs-material .docs-icon-maximize-viewer-24-white{left:-46px;top:-3734px}.docs-material .docs-icon-open-in-external-24-white{left:-46px;top:-322px}.docs-material .docs-icon-copy-24-white{left:0;top:-2124px}.docs-material .docs-icon-sync{left:0;top:-884px}.docs-material .docs-icon-search-insights{left:-20px;top:-2638px}.docs-material .docs-icon-logo-docs-40px{left:-20px;top:-160px}.docs-material .docs-icon-logo-sheets-40px{left:-26px;top:-3048px}.docs-material .docs-icon-logo-slides-40px{left:0;top:-3492px}.docs-material .docs-icon-text-wrapping-wrap{left:0;top:-702px}.docs-material .docs-icon-text-wrapping-break{left:-20px;top:-4046px}.docs-material .docs-icon-text-wrapping-inline{left:0;top:-322px}.docs-material .docs-icon-text-wrapping-wrap-72{left:0;top:-2442px}.docs-material .docs-icon-text-wrapping-break-72{left:0;top:-924px}.docs-material .docs-icon-text-wrapping-inline-72{left:0;top:-3554px}.docs-material .docs-icon-quick-layout-top-left-50{left:-20px;top:-1824px}.docs-material .docs-icon-quick-layout-top-center-50{left:-20px;top:-1238px}.docs-material .docs-icon-quick-layout-top-right-50{left:-20px;top:-1442px}.docs-material .docs-icon-quick-layout-center-left-50{left:-20px;top:-38px}.docs-material .docs-icon-quick-layout-center-50{left:-22px;top:-742px}.docs-material .docs-icon-quick-layout-center-right-50{left:0;top:-2798px}.docs-material .docs-icon-quick-layout-bottom-left-50{left:0;top:-2966px}.docs-material .docs-icon-quick-layout-bottom-center-50{left:0;top:-2516px}.docs-material .docs-icon-quick-layout-bottom-right-50{left:0;top:-4166px}.docs-material .docs-icon-encryption-shield{left:0;top:-242px}.docs-material .docs-icon-cloud-check{left:0;top:-1442px}.docs-material .docs-icon-sync-no-connection{left:-20px;top:-3648px}.docs-material .docs-icon-sync-problem-red500{left:0;top:-302px}.docs-material .docs-icon-sync-saved-locally{left:-40px;top:-576px}.docs-material .docs-icon-sync-disabled{left:-20px;top:-2900px}.docs-material .docs-icon-sync-disabled-red600{left:0;top:-4228px}.docs-material .docs-icon-cloud-check-24{left:-48px;top:-1320px}.docs-material .docs-icon-sync-no-connection-24{left:-20px;top:-4020px}.docs-material .docs-icon-sync-problem-24-red500{left:0;top:-2072px}.docs-material .docs-icon-sync-saved-locally-24{left:0;top:-1664px}.docs-material .docs-icon-sync-disabled-24{left:0;top:-1320px}.docs-material .docs-icon-sync-disabled-24-red600{left:-46px;top:-2296px}.docs-material .docs-icon-auto-awesome{left:-22px;top:-1036px}.docs-material .docs-icon-warning-24{left:0;top:-3440px}.docs-material .docs-icon-info{left:-38px;top:-904px}.docs-material .docs-icon-search-24{left:-46px;top:-4536px}.docs-material .docs-icon-sync-24{left:-48px;top:-2170px}.docs-material .docs-icon-add{left:-26px;top:-3460px}.docs-material .docs-icon-folder{left:-20px;top:-410px}.docs-material .docs-icon-link-24{left:-20px;top:-1966px}.docs-material .docs-icon-link-no-24{left:0;top:-1402px}.docs-material .docs-icon-paste-source-24{left:0;top:-3234px}.docs-material .docs-icon-paste-destination-24{left:0;top:-3926px}.docs-gm .docs-circle-promo-base{height:210px;width:210px;background-color:#188038!important;border-color:#188038!important}.docs-circle-promo-base{border-style:solid;border-width:400px;border-radius:800px;font-size:16px;height:136px;position:absolute;width:136px;z-index:9000}.docs-gm .docs-circle-promo-content{color:white;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:16px;line-height:22px;margin-left:80px;position:relative;width:350px}.docs-circle-promo-content{font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;width:280px}.docs-gm .docs-circle-promo-header{font-family:'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:20px;font-size:var(--docs-material-font-size-22,20px)}.docs-circle-promo-header{font-size:20px;line-height:27px;margin-bottom:16px}.docs-circle-promo-buttons{margin-top:16px}.docs-circle-promo-button{cursor:pointer;font-size:14px;font-weight:500;text-transform:uppercase}.docs-circle-promo-button:hover,.docs-circle-promo-button:focus{opacity:0.87}.docs-circle-promo-continue-button{margin-right:20px}.docs-material-promo-walkthrough-bubble{background-color:#fff;border:1px solid transparent;border-radius:8px;box-shadow:0 4px 8px 3px rgba(60,64,67,.15);position:absolute;z-index:1003}.docs-material-promo-walkthrough-bubble:focus{outline:none}.docs-material-promo-walkthrough-bubble .jfk-bubble-content{min-width:312px;padding:0px 24px 24px}.docs-material-promo-walkthrough-bubble-buttons{display:flex;justify-content:flex-end;padding:24px}.docs-material-promo-walkthrough-bubble .docs-material-button-fill-primary.docs-material-button{margin-left:12px;text-transform:none}.docs-material-promo-walkthrough-bubble-close-button{background-color:transparent;border:none;border-radius:50%;cursor:pointer;margin:0px;outline:0;padding:7px;position:absolute;right:8px;top:8px}.docs-material-promo-walkthrough-bubble-close-button.goog-flat-button-hover{background-color:#f1f3f4}.docs-material-promo-walkthrough-bubble-close-button.goog-flat-button-focused{background-color:#e8eaed;outline:none}.docs-material-promo-walkthrough-bubble .jfk-bubble-arrowdown .jfk-bubble-arrowimplbefore,.docs-material-promo-walkthrough-bubble .jfk-bubble-arrowup .jfk-bubble-arrowimplbefore{border-color:rgba(60,64,67,0.1) transparent}.docs-material-promo-walkthrough-bubble .jfk-bubble-arrowleft .jfk-bubble-arrowimplbefore,.docs-material-promo-walkthrough-bubble .jfk-bubble-arrowright .jfk-bubble-arrowimplbefore{border-color:transparent rgba(60,64,67,0.1)}.docs-binaryupsavewarning{width:512px}.docs-binaryupsavewarning-content-text{color:#5f6368;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:16px}a.docs-binaryupsavewarning-learn-more,a.docs-binaryupsavewarning-learn-more:visited{align-self:center;color:#188038;font-family:var(--docs-material-header-font-family,Roboto,RobotoDraft,Helvetica,Arial,sans-serif);font-size:14px;font-weight:var(--docs-material-font-weight-bold,700);margin-right:auto}.office-editing-feedback{background-color:#e0ffff;height:24px;padding-left:4px}.office-editing-feedback-editor-header{left:0;margin:0 auto;position:absolute;right:0;top:0;width:252px}.office-editing-feedback-warning-dialogs{bottom:0;margin-left:20px;padding-right:4px;position:absolute}.office-editing-feedback-title{float:left;height:24px;line-height:24px}.office-editing-feedback-title-separator{height:24px;line-height:24px;margin:0 4px}.office-editing-feedback-close-button{float:right;cursor:pointer;margin:0 0 0 8px}.office-editing-survey-feedback{background-color:#188038;border-radius:4px;color:#fff;display:inline-block;height:40px;left:0;margin:0 auto;position:absolute;right:0;top:16px;width:348px;z-index:1}.office-editing-survey-feedback-title{float:left;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;line-height:40px;padding:0 32px 0 24px}.office-editing-survey-feedback-take-survey-button{color:#fff;cursor:pointer;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:40px;line-height:40px}.office-editing-survey-feedback-close-button{cursor:pointer;float:right;height:40px;line-height:40px;margin-right:12px;opacity:0.5}.docs-unsupportedofficefeatureswarning{font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;width:512px}.docs-unsupportedofficefeatureswarning-content-restorefiletext{border-bottom:1px solid #bdc1c6;color:#5f6368;font-size:16px;line-height:24px;margin-bottom:23px;margin-top:-8px;padding-bottom:16px}.docs-unsupportedofficefeatureswarning-content-features-list{font-size:14px;max-height:128px;overflow-y:auto}.docs-unsupportedofficefeatureswarning-content-feature{color:#3c4043;margin-bottom:12px}a.docs-unsupportedofficefeatureswarning-learn-more,a.docs-unsupportedofficefeatureswarning-learn-more:visited{align-self:center;color:#188038;font-family:var(--docs-material-header-font-family,Roboto,RobotoDraft,Helvetica,Arial,sans-serif);font-size:14px;font-weight:var(--docs-material-font-weight-bold,700);margin-right:auto}.docs-image-picker-upload{font-family:Roboto,Arial,sans-serif}.docs-image-picker-upload.modal-dialog{padding:0}.docs-image-picker-upload .modal-dialog-title{padding:17px 20px 0}.docs-image-picker-upload .modal-dialog-title-text{font-size:20px}.docs-image-picker-upload .modal-dialog-content{line-height:normal;padding:0 20px}.docs-image-picker-upload .modal-dialog-buttons{border-top:1px solid #e5e5e5;margin-top:20px;padding:17px 20px}.docs-image-picker-upload-container{min-height:300px;min-width:450px}.docs-image-picker-upload-msg-bar{color:#ccc;font-size:16px;font-style:italic;padding:0 0 10px}.docs-image-picker-upload-dropzone-parent{height:100%;width:100%}.docs-image-picker-upload-dropzone-cell{border:#ddd 4px dashed;border-radius:2px;height:100%}.docs-image-picker-upload-dropzone-cell .jfk-button{margin:0}.docs-image-picker-upload-dropzone{height:100%;text-align:center;width:100%}.docs-image-picker-upload-drop-here{color:#ccc;font-size:20pt;padding:0 10px}.docs-image-picker-upload-drop-alt{color:#ccc;font-size:13px;font-weight:500;padding:15px 0 5px}.docs-image-picker-upload-warning{color:#aaa;display:inline-block;font-size:13px;padding:0 20px 0 30px;vertical-align:middle}.pub-dialog-disabled-text{color:#afafaf}.pub-dialog-wrap{font-size:13px;font-size:var(--docs-material-font-size-normal,13px);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;width:500px}.pub-dialog-content-div{padding:0 0 10px 30px}.pub-dialog-input-div{padding-bottom:15px}.pub-dialog-option-vspacer{height:5px}.pub-dialog-info{color:#999;font-size:11px;padding-bottom:2px}.docs-gm .pub-dialog-info{color:#80868b}.docs-gm .pub-dialog-state-published.pub-dialog-info{color:#1a73e8}.pub-dialog-tab{font-family:'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif}.goog-tab-bar.pub-dialog-tab-bar{background:none;border-bottom-color:silver!important;margin-top:20px;padding-left:0!important}.docs-gm .goog-tab-bar.pub-dialog-tab-bar{margin-top:21px;padding-top:0}.goog-tab-bar.pub-dialog-tab-bar .goog-tab.pub-dialog-tab{color:#bdbdbd;cursor:pointer;font-weight:500;margin:1px 15px 0 0;padding:4px 8px;text-decoration:none;top:1px}.docs-gm .goog-tab-bar.pub-dialog-tab-bar .goog-tab.pub-dialog-tab{color:#5f6368;font-size:14px;text-align:center;width:120px}.goog-tab-bar.pub-dialog-tab-bar .goog-tab.pub-dialog-tab.goog-tab-selected,.goog-tab-bar.pub-dialog-tab-bar .goog-tab.pub-dialog-tab.goog-tab-hover{background:none;border-bottom:3px solid #4d90fe;border-left:none;border-right:none;border-top:none;color:black}.docs-gm .goog-tab-bar.pub-dialog-tab-bar .goog-tab.pub-dialog-tab.goog-tab-selected,.docs-gm .goog-tab-bar.pub-dialog-tab-bar .goog-tab.pub-dialog-tab.goog-tab-hover{border-bottom:2px solid #1a73e8}.pub-dialog-document-link,.pub-dialog-embed-code{margin-top:20px;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.pub-dialog-link-content-div{margin-top:10px}.docs-gm .pub-dialog-link-options-container{display:flex}.pub-dialog-embed-code{font-size:13px;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;height:65px}.docs-gm .pub-dialog-embed-code{height:82px!important}.docs-gm .pub-dialog-link-options-document-part-menu-button{margin-right:15px}.pub-dialog-sep-div{padding:20px 0}#pub-dialog-publish-link-button{margin-top:20px}.pub-dialog-sep{border-top-color:#e1e1e1;border-top-style:solid;border-width:1px 0 0 0;color:#bfbfbf;height:0}.goog-zippy-header.pub-dialog-zippy-header{cursor:pointer;display:inline-block;margin:0}.docs-gm .goog-zippy-header.pub-dialog-zippy-header{color:#3c4043}.pub-dialog-zippy-content{margin-left:22px}.docs-gm #pub-dialog-publish-button{color:#5f6368}.goog-zippy-collapsed .pub-dialog-settings-zippy-icon{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}.goog-zippy-expanded .pub-dialog-settings-zippy-icon{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}#pub-dialog-publish-button{margin-top:10px}.pub-dialog-checkbox-container{line-height:22px;margin-top:10px}.docs-link-infilelinksuggestiongroup-cb .docs-link-infilelinksuggestiongroup-cb-openarrow{display:none}.docs-link-infilelinksuggestiongroup-cb.docs-link-infilelinksuggestiongroup-cb-open .docs-link-infilelinksuggestiongroup-cb-openarrow{display:inline-block}.docs-link-infilelinksuggestiongroup-cb.docs-link-infilelinksuggestiongroup-cb-closearrow{display:inline-block}.docs-link-infilelinksuggestiongroup-cb.docs-link-infilelinksuggestiongroup-cb-open .docs-link-infilelinksuggestiongroup-cb-closearrow{display:none}.docs-link-infilelinksuggestiongroup-cb .docs-icon{margin:0 6px}.docs-link-infilelinksuggestiongroup-cb-title{display:inline-block;padding:8px 0}.docs-link-infilelinksuggestiongroup-cb{margin:6px 0;outline:none}.docs-link-infilelinksuggestiongroup-cb:hover,.docs-link-infilelinksuggestiongroup-cb-keyboardfocus{background-color:#eee;cursor:default;outline:none}.goog-zippy-content .docs-link-linksuggestion{padding-left:27px}.docs-linkbubble-link-preview .docs-link-bubble-mime-icon .docs-icon{vertical-align:baseline;width:18px;height:18px;margin:0px}.docs-linkbubble-link-preview #docs-linkbubble-link-text{font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;opacity:1;padding-left:6px;padding-right:6px;text-decoration:none!important;vertical-align:baseline;width:180px}.docs-linkbubble-link-preview .link-previews-broken-link#docs-linkbubble-link-text{color:#80868b!important;cursor:default;font-style:italic;pointer-events:none}.link-previews-before-transition{opacity:.5!important}.link-previews-animate-on-display{animation:fade .15s}@keyframes fade{from{opacity:.5}}.link-previews-fadeable{transition:opacity .15s!important}.docs-linkbubble-link-preview.docs-linkbubble-bubble{padding:6px;border:0px}.docs-linkbubble-link-preview.docs-full-width-card-component{padding-left:0px;padding-right:0px}.docs-linkbubble-link-preview .link-bubble-header{display:flex;align-items:center}.docs-linkbubble-link-preview.docs-full-width-card-component .link-bubble-header{padding-left:6px;padding-right:6px}.docs-gm .docs-linkbubble-bubble,.docs-gm .docs-multi-linkbubble-bubble{background-color:#fff;border-color:#dadce0;border-radius:8px;box-shadow:0 1px 3px 1px rgba(60,64,67,.15);color:#3c4043;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px}.docs-linkbubble-link-preview .docs-link-bubble-mime-icon{height:18px;padding:6px;vertical-align:baseline;width:18px;opacity:1}.docs-linkbubble-link-preview.docs-full-width-card-component .docs-link-bubble-card-component.docs-link-bubble-action-card-component{background-color:#1a73e8;margin-top:4px;padding:10px 12px 4px}.docs-linkbubble-link-preview .docs-link-bubble-favicon{border-radius:2px;height:18px;opacity:1;padding:6px;vertical-align:baseline;width:18px}.docs-linkbubble-link-preview .docs-link-bubble-favicon img{border-radius:2px;height:18px;width:18px}.docs-linkbubble-link-preview .docs-link-bubble-action-card-component:before{background-color:#1a73e8;content:'';height:7px;left:0;bottom:0;position:absolute;width:100%;border-radius:0 0 8px 8px;z-index:-1}.docs-linkbubble-link-preview .docs-link-bubble-card-component .docs-link-bubble-mime-icon{padding:0px}.docs-linkbubble-link-preview .docs-link-bubble-card-component{align-items:center;display:flex;padding:6px}.docs-linkbubble-link-preview.docs-full-width-card-component .docs-link-bubble-card-component{padding:6px 12px}.linkbubble-card-collapsed .docs-link-bubble-card-component{display:none!important}.linkbubble-card-collapsed .docs-link-bubble-card-component.linkbubble-card-non-collapsible{display:flex}.docs-linkbubble-link-preview .docs-link-bubble-title-card-component a{color:#202124!important;flex-grow:1;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;height:18px;overflow:hidden;padding-left:12px;text-overflow:ellipsis;white-space:nowrap;width:0}.docs-linkbubble-link-preview .docs-link-bubble-title-card-component a:hover{text-decoration:none!important}.docs-linkbubble-link-preview .docs-link-bubble-text-card-component span,.docs-linkbubble-link-preview .docs-link-bubble-action-card-component span{flex-direction:column;flex-grow:1;font-size:12px;justify-content:center;line-height:1.3;overflow-wrap:break-word;white-space:normal;width:0;word-wrap:break-word}.docs-linkbubble-link-preview .docs-link-bubble-text-card-component span{color:#80868b!important;cursor:text}.docs-linkbubble-link-preview .docs-link-bubble-action-card-component span{color:#fff!important}.docs-linkbubble-link-preview .docs-link-bubble-thumbnail-container{background-color:#e8eaed;border-radius:4px;display:flex;flex-grow:1;height:141px;overflow:hidden;width:0}.docs-linkbubble-link-preview .docs-link-bubble-thumbnail-container a{display:flex;flex-direction:column;flex-grow:1;justify-content:center;align-items:center}.docs-linkbubble-link-preview .drive-image-thumbnail-component .docs-link-bubble-thumbnail-container a{display:block!important}.drive-image-thumbnail-component .docs-link-bubble-thumbnail-container{border:1px solid #e8eaed}#link-bubble-thumbnail-image{background-position:center;background-repeat:no-repeat;height:100%;width:100%}.default-image-card-component #link-bubble-thumbnail-image,.vertical-image-card-component #link-bubble-thumbnail-image{background-size:contain}.horizontal-image-card-component #link-bubble-thumbnail-image{background-size:cover}.vertical-image-card-component img.link-bubble-drive-thumbnail-image{display:block;height:100%;margin:auto}.default-image-card-component img.link-bubble-drive-thumbnail-image,.horizontal-image-card-component img.link-bubble-drive-thumbnail-image{width:100%}.docs-link-bubble-high-contrast .docs-link-bubble-thumbnail-container a{height:120%;transform:translateY(-10%)}#high-contrast-link-bubble-thumbnail-image{height:100%}.framed-image-card-component img.link-bubble-drive-thumbnail-image{box-shadow:0 0 6px 0 rgba(0,0,0,0.12);margin:6% 7% 0 7%;width:86%}.docs-linkbubble-link-preview .docs-link-bubble-card-component .docs-link-bubble-text-with-icon{padding-left:12px}.docs-linkbubble-link-preview .docs-link-bubble-text-card-component.indented-card-component .text-card-component-text{padding-left:30px}.docs-linkbubble-link-preview .docs-link-bubble-card-component.shrink-vertical-padding-card-component{padding-top:0px}.docs-linkbubble-link-preview .docs-link-bubble-text-card-component.single-line-text-card-component .text-card-component-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.docs-linkbubble-link-preview .docs-link-bubble-separator{background-color:#e8eaed;height:1px;margin:6px}.docs-linkbubble-link-preview.docs-hc-gecko,.docs-linkbubble-link-preview.docs-hc-ie{border:1px solid transparent}.docs-hc-gecko .docs-link-bubble-separator,.docs-hc-ie .docs-link-bubble-separator{height:0px;border:1px solid transparent}.docs-link-bubble-action-container .goog-menuitem{white-space:nowrap}.docs-linkbubble-bubble .goog-menu .goog-option-selected{background-position:8px 50%}.docs-link-bubble-request-access-card-component.docs-link-bubble-card-component{display:flex;flex-direction:column}.docs-link-bubble-request-access-card-component .link-bubble-text-button{display:flex;padding-top:6px;width:100%}.docs-link-bubble-request-access-card-component .link-bubble-text-button .link-bubble-text-button-container{align-items:center;display:flex;flex-grow:1;justify-content:flex-end;white-space:normal;word-break:break-word;width:0}.docs-link-bubble-request-access-card-component .link-bubble-text-button .link-bubble-text-button-info-icon{display:flex;padding:4px}.docs-link-bubble-request-access-card-component .link-bubble-text-button .link-bubble-text-button-info-icon:hover{background-color:rgba(0,0,0,.06);border-radius:50%}.docs-link-bubble-request-access-card-component .request-access-header{display:flex;justify-content:flex-start;width:100%}.docs-link-bubble-request-access-card-component .request-access-header span{color:#80868b;display:flex;flex-grow:1;font-size:12px;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;white-space:normal;width:0}.docs-link-bubble-request-access-card-component .requested-access-text{display:flex;width:100%}.docs-link-bubble-request-access-card-component .requested-access-text span{color:#80868b;display:flex;flex-grow:1;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:12px;font-style:italic;justify-content:flex-end;padding-top:6px;white-space:normal;width:0}.docs-link-bubble-card-component .link-bubble-text-button-text{color:#188038;cursor:pointer;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px!important;font-weight:500;margin-left:4px;padding:4px 8px}.docs-link-bubble-card-component .link-bubble-text-button-text:hover{background-color:#e6f4ea;border-radius:4px}.docs-link-bubble-card-component.docs-link-bubble-action-card-component .link-bubble-text-button-text{color:#fff!important}.docs-link-bubble-card-component.docs-link-bubble-action-card-component .link-bubble-text-button-text:hover{background-color:#1967d2!important}.jfk-bubble.jfk-bubble-promo.docs-promo-bubble.docs-link-previews-details-promo .jfk-bubble-arrowleft .jfk-bubble-arrowimplafter,.jfk-bubble.jfk-bubble-promo.docs-promo-bubble.docs-link-previews-details-promo .jfk-bubble-arrowright .jfk-bubble-arrowimplafter{border-color:transparent #1a73e8}.jfk-bubble.docs-promo-bubble.docs-link-previews-details-promo .docs-promo-text-container{width:auto}.jfk-bubble.docs-promo-bubble.docs-link-previews-details-promo .docs-promo-body{color:#f1f3f4;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;letter-spacing:.2px;padding:4px 0}.jfk-bubble.docs-promo-bubble.docs-link-previews-details-promo .docs-promo-action-container{color:#fff;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;margin:12px 0 0 20px;text-transform:none}.jfk-bubble.docs-promo-bubble.docs-link-previews-details-promo .docs-promo-header{color:#fff;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:16px;font-weight:500;opacity:1}.jfk-bubble.docs-promo-bubble.docs-link-previews-details-promo .docs-promo-action-row{display:flex;flex-direction:row-reverse;padding:0}.jfk-bubble.docs-promo-bubble.docs-link-previews-details-promo .docs-promo-container{padding:16px}.jfk-bubble.docs-promo-bubble.docs-link-previews-details-promo{box-shadow:0px 2px 6px 2px rgba(26,115,232,0.15);background-color:#1a73e8;border-radius:8px;width:251px}.docs-gm .docs-linkbubble-link-preview .docs-link-bubble-mime-icon .docs-icon .docs-icon-grid{content:url(//ssl.gstatic.com/docs/common/material_common_sprite146_green.svg)}.docs-gm .docs-multi-linkbubble-bubble{padding:8px 4px 8px 8px}.docs-multi-linkbubble-bubble .docs-linkbubble-bubble{border:0;border-radius:0;box-shadow:none;padding:0px;position:relative}.docs-gm .docs-linkbubble-multi-link-scrollable-container{background-color:#fff;border-color:#dadce0;color:#3c4043;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;height:auto;max-height:150px;overflow-y:scroll}.docs-link-insertlinkbubble{margin:-1px;min-width:306px;outline:none;padding:1px}.docs-gm .docs-link-insertlinkbubble ::selection{background:#d2e3fc}.docs-link-insertlinkbubble-url-label,.docs-link-insertlinkbubble-text-label{display:block;height:13px;padding:8px 0}.docs-link-insertlinkbubble-text{display:block;width:244px}.docs-gm .docs-material-bubble .docs-link-insertlinkbubble .docs-link-insertlinkbubble-text{box-sizing:content-box;color:#5f6368;height:32px;margin:0;width:294px}.docs-gm .docs-material-bubble .docs-link-insertlinkbubble-text:focus{color:#3c4043}.docs-link-insertlinkbubble-text-label,.docs-link-insertlinkbubble-text{margin-bottom:5px}.docs-gm .docs-link-insertlinkbubble-url-label,.docs-gm .docs-link-insertlinkbubble-text-label{background-color:white;box-shadow:5px 0 0 white,-5px 0 0 white;color:#5f6368;display:inline;font-size:12px;left:12px;margin-bottom:0;max-width:300px;padding:0;position:absolute;top:-8px;word-wrap:break-word}.docs-link-insertlinkbubble-urlholder{float:left;outline:none}.docs-link-insertlinkbubble-suggestionholder{background-color:white;border:1px solid #e5e5e5;border-top:none;-webkit-box-shadow:0 2px 4px rgba(0,0,0,0.2);-moz-box-shadow:0 2px 4px rgba(0,0,0,.2);box-shadow:0 2px 4px rgba(0,0,0,0.2);max-height:207px;overflow-x:hidden;outline:none;position:absolute;width:260px;z-index:1}.docs-gm .docs-link-insertlinkbubble-suggestionholder{border-radius:0 0 8px 8px;color:#3c4043;margin:1px 0px;width:310px}.docs-link-insertlinkbubble-linkchip{width:312px}.docs-link-insertlinkbubble-buttonbar .jfk-button{margin-right:0}.docs-gm .docs-link-insertlinkbubble-buttonbar .jfk-button{margin-left:12px;min-width:87px}.docs-link-insertlinkbubble-error{color:#c5221f;padding:12px 0 0 0}@media print{.docs-link-insertlinkbubble{display:none!important}}.jfk-bubble.docs-calloutbubble-bubble.docs-linkbubble-bubble{z-index:503!important}.docs-gm .docs-link-insertlinkbubble-toppane,.docs-gm .docs-link-insertlinkbubble-bottompane{margin:24px}.docs-gm .docs-link-insertlinkbubble-bottompane{display:flex}.docs-gm .docs-link-insertlinkbubble-toppane,.docs-gm .docs-link-insertlinkbubble-urlcomponent{position:relative}.docs-link-linksuggestion:last-child{margin-bottom:6px}.docs-link-linksuggestion:first-child{margin-top:6px}.docs-link-linksuggestion,.docs-link-chipselectedlinksuggestion{border:none;border-collapse:separate;border-spacing:0 6px;display:table;font-size:90%;height:26px;max-height:26px;outline:none;width:100%}.docs-link-linksuggestion:hover,.docs-link-linksuggestion:focus{background-color:#f1f3f4}.docs-link-linksuggestion-icon{display:table-cell;height:21px;padding:0 6px;vertical-align:middle;width:21px}.docs-link-linksuggestion-url,.docs-link-linksuggestion-title{cursor:default;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:190px}.docs-link-linksuggestion-title:last-child{margin-top:2px}.docs-link-linksuggestion-url{color:#093;font-size:11px}.docs-link-linksuggestiongroup{border-color:#efefef;border-style:solid;border-width:0 0 1px}.docs-link-linksuggestion-testlink,.docs-link-chipselectedlinksuggestion-hide{display:table-cell;height:21px;vertical-align:middle;width:21px}.docs-link-linksuggestion-testlink{opacity:0}.docs-link-chipselectedlinksuggestion-hide{opacity:0.7}.docs-link-chipselectedlinksuggestion-hide:hover{opacity:1}.docs-link-linksuggestion:hover .docs-link-linksuggestion-testlink,.docs-link-linksuggestion:focus .docs-link-linksuggestion-testlink,.docs-link-linksuggestion-testlink:focus{opacity:1}.docs-link-linksuggestion-text{display:table-cell}.docs-link-linksuggestion-link-text{font-size:90%}.docs-link-linksuggestion-action-text{font-size:100%}.docs-link-linksuggestion.docs-link-chipselectedlinksuggestion{background-color:#fff;border-spacing:0 4px;margin:0}.docs-link-linksuggestioncontentbox-statusmessage{color:#222;margin-left:33px;padding:5px 0}.docs-link-linksuggestioncontentbox-explore{color:#333;font-size:90%;margin:6px 0;padding:6px}.docs-link-linksuggestioncontentbox-explore:hover,.docs-link-linksuggestioncontentbox-explore:focus{background-color:#eee;cursor:default;outline:none}.docs-link-linksuggestioncontentbox-exploretext{display:inline-block;overflow:hidden;padding-left:5px;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap;width:196px}.docs-link-linksuggestioncontentbox-statusbar{border-bottom:1px solid #f5f5f5;padding:10px 0;position:relative}.docs-link-linksuggestioncontentbox-statusindicator{bottom:12px;float:left;left:17px;position:relative}.docs-link-linksuggestioncontentbox-offlinenotice{font-style:italic;margin-left:5px;padding:5px 0}.docs-link-urlinput-url{background:transparent!important;border:none!important;box-sizing:border-box;box-shadow:none;display:inline-block;flex-grow:1;height:27px;margin:0;outline:none!important;padding:1px 8px!important}.docs-gm .docs-link-urlinput-url{border-color:#dadce0;border-radius:4px;color:#5f6368;display:block;font-size:14px;height:34px;width:312px}.docs-gm .docs-link-urlinput-url:focus{height:32px;padding:0px 7px!important}.docs-gm .docs-link-urlinput-url::placeholder{color:#9aa0a6}.docs-link-urlinput-action-icon-container{float:right;overflow:hidden;padding:0 0 0 8px;text-align:right;width:21px}.docs-link-urlinput-action-icon{background:transparent!important;border:transparent!important;cursor:pointer;margin:0 0 0 -13px;opacity:.70;white-space:nowrap}.docs-link-urlinput-action-icon:hover,.docs-link-urlinput-action-icon:focus{opacity:0.9}.docs-link-urlinput-url-container{background:#fff;border:1px solid #d9d9d9;border-top:1px solid #c0c0c0;min-width:20px;width:260px;display:flex}.docs-gm .docs-link-urlinput-url-container{border-color:#dadce0;border-radius:4px;box-sizing:border-box;width:312px}.docs-link-urlinput-url-container-focus{border:1px solid #4d90fe!important;box-shadow:inset 0 1px 2px rgba(0,0,0,0.3);outline:none}.docs-gm .docs-link-urlinput-url-container-focus{border:2px solid #4d90fe!important;box-shadow:none;color:#3c4043;padding:0}.docs-link-urlinput-url-error,.docs-link-urlinput-url-error:focus{border-color:#dd4b39}.picker-frame{width:100%;height:100%;border:0;overflow:hidden}.picker.modal-dialog-bg{position:absolute;top:0;left:0;background-color:#fff}.picker.modal-dialog{position:absolute;top:0;left:0;background-color:#fff;border:1px solid #acacac;width:auto;padding:0;z-index:1001;overflow:auto;-moz-box-shadow:rgba(0,0,0,.2) 0 4px 16px;-webkit-box-shadow:rgba(0,0,0,.2) 0 4px 16px;box-shadow:rgba(0,0,0,.2) 0 4px 16px;-webkit-transition:top .5s ease-in-out;-moz-transition:top .5s ease-in-out;-o-transition:top .5s ease-in-out;transition:top .5s ease-in-out}.picker-min{position:absolute;z-index:1002}.picker.modal-dialog-content{font-size:0;padding:0}.picker.modal-dialog-title{height:0;margin:0}.picker.modal-dialog-title-text{display:none}.picker.modal-dialog-buttons{display:none}.picker.modal-dialog{z-index:1201}div.docs-spell-content-box{overflow:auto;width:425px;height:130px;background-color:#e6e6e6;border:none;padding:5px;cursor:default}.docs-spell-content-message{color:#666}.docs-spell-error{border-bottom:1px solid red;cursor:pointer}.docs-spell-error-fixed{border-bottom:1px dotted green;cursor:pointer}.docs-spell-button-set{width:435px;height:30px;margin:20px 0 0 0}div.docs-spell-buttons-left{float:left}div.docs-spell-buttons-right{float:right}div.docs-spell-right-button{margin-right:0}.docs-spell-content-box::-webkit-scrollbar-thumb{border:solid #e6e6e6}#docs-spellcheckslidingdialog-button-change-menu{box-shadow:none;background-color:#4d90fe;background-image:-webkit-linear-gradient(top,#4d90fe,#4787ed);background-image:-moz-linear-gradient(top,#4d90fe,#4787ed);background-image:-ms-linear-gradient(top,#4d90fe,#4787ed);background-image:-o-linear-gradient(top,#4d90fe,#4787ed);background-image:linear-gradient(top,#4d90fe,#4787ed);border:1px solid #3079ed;color:#fff}#docs-spellcheckslidingdialog-button-change-menu:hover{background-color:#357ae8;background-color:#357ae8;background-image:-webkit-linear-gradient(top,#4d90fe,#357ae8);background-image:-moz-linear-gradient(top,#4d90fe,#357ae8);background-image:-ms-linear-gradient(top,#4d90fe,#357ae8);background-image:-o-linear-gradient(top,#4d90fe,#357ae8);background-image:linear-gradient(top,#4d90fe,#357ae8);border:1px solid #2f5bb7;border-bottom-color:#2f5bb7}#docs-spellcheckslidingdialog-button-change-menu.goog-flat-menu-button-focused{-webkit-box-shadow:inset 0 0 0 1px #fff;-moz-box-shadow:inset 0 0 0 1px #fff;box-shadow:inset 0 0 0 1px #fff;border:1px solid #fff;border:rgba(0,0,0,0) solid 1px;outline:1px solid #4d90fe;outline:rgba(0,0,0,0) 0}#docs-spellcheckslidingdialog-button-change-menu .goog-flat-menu-button-dropdown{border-color:white transparent;color:white}#docs-spellcheckslidingdialog-button-change-menu.goog-flat-menu-button-open{box-shadow:inset 0 1px 2px rgba(0,0,0,0.3);background:#357ae8;border:1px solid #2f5bb7;border-top:1px solid #2f5bb7}#docs-spellcheckslidingdialog-button-change-menu.goog-flat-menu-button-disabled{background:#4d90fe;filter:alpha(opacity=50);opacity:0.5}#docs-spellcheckslidingdialog-button-ignore-all{margin-left:10px}.docs-spellcheckslidingdialog-buttons-white-menu.goog-flat-menu-button-disabled,.docs-spellcheckslidingdialog-buttons-white-menu.goog-flat-menu-button-disabled:hover{background:#fff;border:1px solid #dcdcdc!important;filter:alpha(opacity=50);opacity:0.5}.docs-spellcheckslidingdialog-buttons-white-menu.goog-flat-menu-button-focus,.docs-spellcheckslidingdialog-buttons-white-menu:hover{border:1px solid #c6c6c6}.docs-spellcheckslidingdialog-buttons-white-menu:focus{z-index:2}#docs-spellcheckslidingdialog-button-ignore,#docs-spellcheckslidingdialog-button-ignore-menu{margin-bottom:1px}#docs-spellcheckslidingdialog-button-dictionary,#docs-spellcheckslidingdialog-button-dictionary-menu{margin-top:7px}.docs-spellcheckslidingdialog-buttons-action{margin-left:9px;overflow:hidden;text-overflow:ellipsis;width:110px}.docs-spellcheckslidingdialog-count{color:#6a6a6a;padding-left:4px}.goog-menuitem-disabled .docs-spellcheckslidingdialog-count{color:#ccc}#docs-spellcheckslidingdialog-id .docs-slidingdialog-close-container{position:absolute;right:14px;top:10px}#docs-spellcheckslidingdialog-ignore-buttons{padding-top:7px;vertical-align:top}.docs-spellcheckslidingdialog-replacement-input,.docs-spellcheckslidingdialog-replacement-input:focus{background:transparent;border:none;box-shadow:none;font-size:13px;height:25px;margin:0;outline:none;padding:1px 0px;width:100%}.docs-spellcheckslidingdialog-replacement-input-container{background:#fff;border:1px solid #d9d9d9;border-top:1px solid #c0c0c0;min-width:20px;padding:0 8px}.docs-spellcheckslidingdialog-replacement-input-container-focus{border:1px solid #4d90fe;box-shadow:inset 0 1px 2px rgba(0,0,0,0.3);outline:none}.docs-spellcheckslidingdialog-title-text{margin-top:2px;margin-bottom:10px;color:#222;cursor:default}#docs-spellcheckslidingdialog-original-word{font-weight:500}.docs-spellcheckslidingdialog-title-text.docs-spellcheckslidingdialog-no-misspellings{margin-bottom:0;padding-right:33px}#docs-spellcheckslidingdialog-no-misspellings:focus{outline:none}#docs-spellcheckslidingdialog-suggestion-list{box-shadow:none;margin-left:-1px;margin-top:-1px;height:91px;overflow-y:auto;position:relative;width:100%}.docs-spellcheckslidingdialog-container .goog-flat-menu-button{margin:0;height:27px}.docs-spellcheckslidingdialog-container .goog-flat-menu-button-collapse-left{margin-left:-1px}.docs-spellcheckslidingdialog-container .goog-flat-menu-button-collapse-right{min-width:0px;padding-left:0;margin-left:0px;border-radius:0 2px 2px 0}#docs-spellcheckslidingdialog-suggestion-list .goog-menuitem{padding-left:8px}#docs-spellcheckslidingdialog-suggestion-list .goog-menuitem-checkbox{position:inherit}.docs-spellcheckslidingdialog-container table{width:100%}.docs-spellcheckslidingdialog .docs-slidingdialog-holder{min-width:250px}.docs-spellcheckslidingdialog-loading-spinner,.docs-spellcheckslidingdialog-loading-text{display:inline-block;position:relative;transition:left 300ms ease-out;transition:width 300ms ease-out;vertical-align:middle}.docs-gm #docs-spellcheckslidingdialog-id .docs-slidingdialog{padding:16px}.docs-gm #docs-spellcheckslidingdialog-id td{padding:0;vertical-align:top}.docs-gm .docs-spellcheckslidingdialog-title-text{font-size:14px;height:24px;margin:0 0 16px 0;line-height:24px;vertical-align:middle}.docs-gm #docs-spellcheckslidingdialog-button-change,.docs-gm #docs-spellcheckslidingdialog-button-change-menu{background:#188038;background-image:none;border:1px solid transparent;border-radius:4px;box-shadow:none;box-sizing:border-box;color:#fff;font-family:'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;height:36px;letter-spacing:0.25px;line-height:16px}.docs-gm #docs-spellcheckslidingdialog-button-change.jfk-button-hover,.docs-gm #docs-spellcheckslidingdialog-button-change-menu.goog-flat-menu-button-hover{background:#2a8947;box-shadow:0 1px 3px 1px rgba(52,168,83,0.15)}.docs-gm #docs-spellcheckslidingdialog-button-change.jfk-button-focused,.docs-gm #docs-spellcheckslidingdialog-button-change-menu.goog-flat-menu-button-focused{background:#4f9e67;box-shadow:0 1px 3px 1px rgba(52,168,83,0.15)}.docs-gm #docs-spellcheckslidingdialog-button-change.jfk-button-focused.jfk-button-hover,.docs-gm #docs-spellcheckslidingdialog-button-change-menu.goog-flat-menu-button-focused.goog-flat-menu-button-hover{background:#62a877;box-shadow:0 1px 3px 1px rgba(52,168,83,0.15)}.docs-gm #docs-spellcheckslidingdialog-button-change.jfk-button-active,.docs-gm #docs-spellcheckslidingdialog-button-change-menu.goog-flat-menu-button-active{background:#62a877;box-shadow:0 2px 6px 2px rgba(52,168,83,0.15)}.docs-gm #docs-spellcheckslidingdialog-button-change.jfk-button-disabled,.docs-gm #docs-spellcheckslidingdialog-button-change-menu.goog-flat-menu-button-disabled{background:#f1f3f4;color:#3c4043;opacity:0.38}.docs-gm #docs-spellcheckslidingdialog-button-ignore,.docs-gm #docs-spellcheckslidingdialog-button-ignore-menu,.docs-gm #docs-spellcheckslidingdialog-button-dictionary,.docs-gm #docs-spellcheckslidingdialog-button-dictionary-menu{background:#fff;background-image:none;border:1px solid #dadce0;border-radius:4px;box-shadow:none;box-sizing:border-box;color:#188038;font-family:'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;height:36px;letter-spacing:0.25px;line-height:16px;margin-bottom:0;margin-top:8px}.docs-gm #docs-spellcheckslidingdialog-button-ignore.jfk-button-hover,.docs-gm #docs-spellcheckslidingdialog-button-ignore-menu.goog-flat-menu-button-hover,.docs-gm #docs-spellcheckslidingdialog-button-dictionary.jfk-button-hover,.docs-gm #docs-spellcheckslidingdialog-button-dictionary-menu.goog-flat-menu-button-hover{background:#f8fcf9;border:1px solid #c8e7d1}.docs-gm #docs-spellcheckslidingdialog-button-ignore.jfk-button-focused,.docs-gm #docs-spellcheckslidingdialog-button-ignore-menu.goog-flat-menu-button-focused,.docs-gm #docs-spellcheckslidingdialog-button-dictionary.jfk-button-focused,.docs-gm #docs-spellcheckslidingdialog-button-dictionary-menu.goog-flat-menu-button-focused{background:#e7f5eb;border:1px solid #bbe2c6}.docs-gm #docs-spellcheckslidingdialog-button-ignore.jfk-button-focused.jfk-button-hover,.docs-gm #docs-spellcheckslidingdialog-button-ignore-menu.goog-flat-menu-button-focused.goog-flat-menu-button-hover,.docs-gm #docs-spellcheckslidingdialog-button-dictionary.jfk-button-focused.jfk-button-hover,.docs-gm #docs-spellcheckslidingdialog-button-dictionary-menu.goog-flat-menu-button-focused.goog-flat-menu-button-hover{background:#dff2e4;border:1px solid #b5e0c1}.docs-gm #docs-spellcheckslidingdialog-button-ignore.jfk-button-active,.docs-gm #docs-spellcheckslidingdialog-button-ignore-menu.goog-flat-menu-button-active,.docs-gm #docs-spellcheckslidingdialog-button-dictionary.jfk-button-active,.docs-gm #docs-spellcheckslidingdialog-button-dictionary-menu.goog-flat-menu-button-active{background:#dff2e4;border:1px solid transparent;box-shadow:0 2px 6px 2px rgba(60,64,67,.15)}.docs-gm #docs-spellcheckslidingdialog-button-ignore.jfk-button-disabled,.docs-gm #docs-spellcheckslidingdialog-button-ignore-menu.goog-flat-menu-button-disabled,.docs-gm #docs-spellcheckslidingdialog-button-dictionary.jfk-button-disabled,.docs-gm #docs-spellcheckslidingdialog-button-dictionary-menu.goog-flat-menu-button-disabled{background:#fff;border:1px solid #f1f3f4;color:#3c4043;opacity:0.38}.docs-gm #docs-spellcheckslidingdialog-button-change,.docs-gm #docs-spellcheckslidingdialog-button-ignore,.docs-gm #docs-spellcheckslidingdialog-button-dictionary{border-radius:4px 0 0 4px;margin-left:16px;padding:9px 8px 11px 8px;width:156px}.docs-gm #docs-spellcheckslidingdialog-button-change,.docs-gm #docs-spellcheckslidingdialog-button-change.jfk-button-focused,.docs-gm #docs-spellcheckslidingdialog-button-change.jfk-button-hover,.docs-gm #docs-spellcheckslidingdialog-button-change.jfk-button-hover.jfk-button-focused,.docs-gm #docs-spellcheckslidingdialog-button-change.jfk-button-active,.docs-gm #docs-spellcheckslidingdialog-button-change.jfk-button-disabled{border-right:1px solid #ceead6}.docs-gm #docs-spellcheckslidingdialog-button-change-menu,.docs-gm #docs-spellcheckslidingdialog-button-change-menu.goog-flat-menu-button-focused,.docs-gm #docs-spellcheckslidingdialog-button-change-menu.goog-flat-menu-button-hover,.docs-gm #docs-spellcheckslidingdialog-button-change-menu.goog-flat-menu-button-hover.goog-flat-menu-button-focused,.docs-gm #docs-spellcheckslidingdialog-button-change-menu.goog-flat-menu-button-active,.docs-gm #docs-spellcheckslidingdialog-button-change-menu.goog-flat-menu-button-disabled{border-left:1px solid #ceead6}.docs-gm #docs-spellcheckslidingdialog-button-change-menu,.docs-gm #docs-spellcheckslidingdialog-button-ignore-menu,.docs-gm #docs-spellcheckslidingdialog-button-dictionary-menu{border-radius:0 4px 4px 0;padding:8px;width:41px}.docs-gm #docs-spellcheckslidingdialog-button-change-menu .goog-flat-menu-button-dropdown,.docs-gm #docs-spellcheckslidingdialog-button-ignore-menu .goog-flat-menu-button-dropdown,.docs-gm #docs-spellcheckslidingdialog-button-dictionary-menu .goog-flat-menu-button-dropdown{right:15px;top:15px}.docs-gm #docs-spellcheckslidingdialog-replacement-input{border:1px solid #dadce0;border-radius:4px;box-sizing:border-box;color:#3c4043;padding:1px 8px;font-size:14px;height:36px;margin:8px 0;margin:0}.docs-gm #docs-spellcheckslidingdialog-replacement-input:focus{border:2px solid #1a73e8;box-shadow:none;padding:0px 7px}.docs-gm .docs-spellcheckslidingdialog-replacement-input-container{background:transparent;border:none;padding:0;width:156px}.docs-gm .docs-spellcheckslidingdialog-replacement-input-container-focus{border:none;box-shadow:none;outline:none}.docs-gm #docs-spellcheckslidingdialog-suggestion-list{box-shadow:0 1px 3px 1px rgba(60,64,67,.15);height:auto;margin:0;width:156px}.docs-gm #docs-spellcheckslidingdialog-id .docs-slidingdialog-close-container{height:24px;right:16px;top:16px;width:24px}.docs-gm #docs-spellcheckslidingdialog-id .docs-slidingdialog-button-close{opacity:0.54}.docs-gm #docs-spellcheckslidingdialog-id .docs-slidingdialog-button-close.goog-flat-button-hover,.docs-gm #docs-spellcheckslidingdialog-id .docs-slidingdialog-button-close.goog-flat-button-focused,.docs-gm #docs-spellcheckslidingdialog-id .docs-slidingdialog-button-close.goog-flat-button-active{opacity:0.87}.docs-gm #docs-spellcheckslidingdialog-id .docs-slidingdialog-button-close.goog-flat-button-focused{outline:none}.docs-gm #docs-spellcheckslidingdialog-no-misspellings-footer .jfk-button{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff}.docs-gm #docs-spellcheckslidingdialog-no-misspellings-footer .jfk-button:last-child{margin-right:0}.docs-gm #docs-spellcheckslidingdialog-no-misspellings-footer .jfk-button.jfk-button-hover{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;background:#2a8947;box-shadow:0 1px 3px 1px rgba(52,168,83,0.15)}.docs-gm #docs-spellcheckslidingdialog-no-misspellings-footer .jfk-button.jfk-button-focused{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;background:#4f9e67;box-shadow:0 1px 3px 1px rgba(52,168,83,0.15)}.docs-gm #docs-spellcheckslidingdialog-no-misspellings-footer .jfk-button.jfk-button-focused.jfk-button-hover{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;background:#62a877;box-shadow:0 1px 3px 1px rgba(52,168,83,0.15)}.docs-gm #docs-spellcheckslidingdialog-no-misspellings-footer .jfk-button.jfk-button-active,.docs-gm #docs-spellcheckslidingdialog-no-misspellings-footer .jfk-button.jfk-button-active.jfk-button-focused.jfk-button-hover{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;background:#62a877;box-shadow:0 2px 6px 2px rgba(52,168,83,0.15)}.docs-userdictionary-butterbar-item{font-weight:normal}.docs-userdictionarydialog-button-add{margin-left:0px;margin-right:0px;padding:0px;width:100%}.docs-userdictionarydialog-list-container{background-color:#fff;border:1px solid #ececec;height:415px;margin-top:16px;overflow-y:auto;position:relative;width:315px}.docs-gm .docs-userdictionarydialog-list-container{height:232px;min-width:464px;width:auto;width:unset}.docs-userdictionarydialog-list-container:focus{outline:none}.docs-userdictionarydialog-button-add-container{border-left:30px solid white;max-width:125px}.docs-gm .docs-userdictionarydialog-button-add-container{border-left:0;margin-left:16px}.docs-userdictionarydialog-input{margin-left:0px;vertical-align:middle;width:100%}.docs-gm .docs-userdictionarydialog-input{width:364px}.docs-userdictionarydialog-row-container{border-bottom:1px solid #ececec;padding:10px;min-width:275px}.docs-gm .docs-userdictionarydialog-row-container{border-bottom:1px solid #dadce0;padding:10px 16px;width:432px}.docs-gm .docs-userdictionarydialog-list-container-ie .docs-userdictionarydialog-row-container{padding-left:20px;padding-right:20px;width:424px}.docs-userdictionarydialog-row-container-hover{background-color:#eee}.docs-gm .docs-userdictionarydialog-row-container-hover{background-color:#f1f3f4}.docs-userdictionarydialog-row-content{display:inline-block;width:250px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle}.docs-gm .docs-userdictionarydialog-row-content{color:#3c4043}.docs-userdictionarydialog-list-remove-button{background-color:transparent;border:none;margin:0;padding:0;position:absolute;right:3px}.docs-gm .docs-userdictionarydialog-list-remove-button{left:424px}.docs-gm .docs-userdictionarydialog-list-container-ie .docs-userdictionarydialog-list-remove-button{left:420px}.docs-gm .docs-material.docs-userdictionarydialog-list-remove-button .docs-icon{height:24px;margin:0;width:24px}.docs-userdictionarydialog-top-container{border-collapse:separate;display:table;width:100%}.docs-userdictionarydialog-top-container>div{display:table-cell}.docs-templatestoast.docs-ui-toast{z-index:1003}.docs-calloutbubble-anchor{position:absolute}.docs-calloutbubble-bubble.jfk-bubble{padding:0px;z-index:99!important}@media print{.docs-calloutbubble-anchor{display:none!important}}.docs-dismissible-bar{margin-top:0;position:absolute;width:500px}.docs-dismissible-bar .docs-dismissible-bar-content{background:rgba(0,0,0,0.8);-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;color:#fff;left:-50%;overflow:hidden;position:relative;z-index:1001}.docs-dismissible-bar .docs-dismissible-bar-header{border-bottom:1px solid #000;float:left;width:100%}.docs-dismissible-bar .docs-dismissible-bar-title{float:left;font-size:15px;font-weight:500;margin:16px 15px}.docs-dismissible-bar .docs-dismissible-bar-description{border-top:1px solid #444;box-sizing:border-box;color:#bbb;float:left;padding:10px 15px 15px;text-align:left;width:100%}.docs-dismissible-bar .docs-dismissible-bar-dismiss-button{float:right;margin:10px 10px 10px 0}.docs-dismissible-bar .docs-dismissible-bar-black-button{background-color:#454545;background-repeat:repeat-x;border:solid 1px #111;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;box-shadow:0px 1px 1px 0px rgba(0,0,0,0.05),inset 0px 1px 0px 0px rgba(255,255,255,0.2);color:#ddd;cursor:pointer;background-color:#4b4b4b;background-image:-webkit-linear-gradient(top,#4b4b4b,#3b3b3b);background-image:-moz-linear-gradient(top,#4b4b4b,#3b3b3b);background-image:-ms-linear-gradient(top,#4b4b4b,#3b3b3b);background-image:-o-linear-gradient(top,#4b4b4b,#3b3b3b);background-image:linear-gradient(top,#4b4b4b,#3b3b3b);text-shadow:0 1px 0 rgba(0,0,0,0.8)}.docs-dismissible-bar .docs-dismissible-bar-black-button.jfk-button-hover{background:rgba(255,255,255,0.1);border:1px solid #141414;box-shadow:0 0 0 transparent inset;color:#fff}.docs-dismissible-bar .docs-dismissible-bar-black-button.jfk-button-active,.docs-dismissible-bar .docs-dismissible-bar-black-button.jfk-button-focused{border-color:#fff}.docs-indeterminate-loading-bar{background:#c6dafc;height:100%;position:relative;width:100%}.docs-indeterminate-loading-bar>div{-webkit-animation:docs-indeterminate-loading-animation 2s linear infinite;-moz-animation:docs-indeterminate-loading-animation 2s linear infinite;-o-animation:docs-indeterminate-loading-animation 2s linear infinite;animation:docs-indeterminate-loading-animation 2s linear infinite;background:#4285f4;height:100%;position:absolute;transition:width .2s cubic-bezier(.4,0,.2,1)}@keyframes docs-indeterminate-loading-animation{0%{left:0%;width:0}50%{left:25%;width:75%}75%{left:100%;width:0%}}.docs-loading-indicator{height:48px;left:50%;margin:-24px 0 0 -24px;position:absolute;top:50%;width:48px}.docs-loading-indicator-small{height:20px;left:50%;margin:-10px 0 0 -10px;position:absolute;top:50%;width:20px}.docs-sidebar-toggle-tabs-jfk.docs-sidebar-toggle-tabs{background-color:#fafafa;border-bottom:1px solid #bdbdbd;width:100%}.docs-sidebar-toggle-tabs-jfk .jfk-button.docs-sidebar-toggle-tab{width:50%;border:none;color:#646464;cursor:pointer;font-size:13px;height:40px;line-height:42px;margin:0;text-align:center}.docs-sidebar-toggle-tabs-jfk .jfk-button.docs-sidebar-toggle-tab-inactive{font-weight:normal}.docs-sidebar-toggle-tabs-jfk .jfk-button.docs-sidebar-toggle-tab-active{font-weight:500;border-bottom:3px solid #3367d6}.docs-sidebar-toggle-tabs-jfk .jfk-button-focused.docs-sidebar-toggle-tab-inactive{border-bottom:3px solid #4d90fe}.docs-sidebar-toggle-tabs-material.docs-sidebar-toggle-tabs{background-color:#eeeeee;width:100%}.docs-sidebar-toggle-tabs-material .jfk-button.docs-sidebar-toggle-tab{width:50%;border:none;cursor:pointer;font-size:13px;font-family:'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif;text-transform:uppercase;height:41px;line-height:43px;margin:0;text-align:center}.docs-sidebar-toggle-tabs-material .jfk-button.docs-sidebar-toggle-tab-inactive{color:rgba(0,0,0,0.54)}.docs-sidebar-toggle-tabs-material .jfk-button.docs-sidebar-toggle-tab-active{color:rgba(0,0,0,0.87);border-bottom:2px solid #4285f4}.docs-sidebar-toggle-tabs-material .jfk-button-focused.docs-sidebar-toggle-tab-inactive{border-bottom:2px dotted #4285f4}.docs-sidebar-toggle-tabs-material .jfk-button-active.jfk-button-focused.docs-sidebar-toggle-tab-inactive{border-bottom:none}.docs-spinner{height:44px;overflow:hidden;position:relative}.docs-quantum-spinner{height:28px;left:50%;margin-left:-14px;position:absolute;top:0;width:28px}.docs-loading-indicator-small .docs-quantum-spinner{height:20px;margin-left:-10px;top:0;width:20px}.docs-white-circle{background:white;border-radius:50%;box-shadow:0 2px 6px rgba(0,0,0,0.4);-moz-box-shadow:0 2px 6px rgba(0,0,0,0.4);-webkit-box-shadow:0 2px 6px rgba(0,0,0,0.4);height:44px;left:50%;margin-left:-22px;position:absolute;width:44px}.docs-quantum-spinner.active{-webkit-animation:container-rotate 1568ms linear infinite;animation:container-rotate 1568ms linear infinite}@-webkit-keyframes container-rotate{to{-webkit-transform:rotate(360deg)}}@keyframes container-rotate{to{transform:rotate(360deg)}}.spinner-layer{position:absolute;width:100%;height:100%;opacity:0}.spinner-blue{border-color:#4285f4}.spinner-red{border-color:#db4437}.spinner-yellow{border-color:#f4b400}.spinner-green{border-color:#0f9d58}.active .spinner-layer.spinner-blue{-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(0.4,0.0,0.2,1) infinite both,blue-fade-in-out 5332ms cubic-bezier(0.4,0.0,0.2,1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(0.4,0.0,0.2,1) infinite both,blue-fade-in-out 5332ms cubic-bezier(0.4,0.0,0.2,1) infinite both}.active .spinner-layer.spinner-red{-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(0.4,0.0,0.2,1) infinite both,red-fade-in-out 5332ms cubic-bezier(0.4,0.0,0.2,1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(0.4,0.0,0.2,1) infinite both,red-fade-in-out 5332ms cubic-bezier(0.4,0.0,0.2,1) infinite both}.active .spinner-layer.spinner-yellow{-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(0.4,0.0,0.2,1) infinite both,yellow-fade-in-out 5332ms cubic-bezier(0.4,0.0,0.2,1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(0.4,0.0,0.2,1) infinite both,yellow-fade-in-out 5332ms cubic-bezier(0.4,0.0,0.2,1) infinite both}.active .spinner-layer.spinner-green{-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(0.4,0.0,0.2,1) infinite both,green-fade-in-out 5332ms cubic-bezier(0.4,0.0,0.2,1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(0.4,0.0,0.2,1) infinite both,green-fade-in-out 5332ms cubic-bezier(0.4,0.0,0.2,1) infinite both}@-webkit-keyframes fill-unfill-rotate{12.5%{-webkit-transform:rotate(135deg)}25%{-webkit-transform:rotate(270deg)}37.5%{-webkit-transform:rotate(405deg)}50%{-webkit-transform:rotate(540deg)}62.5%{-webkit-transform:rotate(675deg)}75%{-webkit-transform:rotate(810deg)}87.5%{-webkit-transform:rotate(945deg)}to{-webkit-transform:rotate(1080deg)}}@keyframes fill-unfill-rotate{12.5%{transform:rotate(135deg)}25%{transform:rotate(270deg)}37.5%{transform:rotate(405deg)}50%{transform:rotate(540deg)}62.5%{transform:rotate(675deg)}75%{transform:rotate(810deg)}87.5%{transform:rotate(945deg)}to{transform:rotate(1080deg)}}@-webkit-keyframes blue-fade-in-out{from{opacity:1}25%{opacity:1}26%{opacity:0}89%{opacity:0}90%{opacity:1}100%{opacity:1}}@keyframes blue-fade-in-out{from{opacity:1}25%{opacity:1}26%{opacity:0}89%{opacity:0}90%{opacity:1}100%{opacity:1}}@-webkit-keyframes red-fade-in-out{from{opacity:0}15%{opacity:0}25%{opacity:1}50%{opacity:1}51%{opacity:0}}@keyframes red-fade-in-out{from{opacity:0}15%{opacity:0}25%{opacity:1}50%{opacity:1}51%{opacity:0}}@-webkit-keyframes yellow-fade-in-out{from{opacity:0}40%{opacity:0}50%{opacity:1}75%{opacity:1}76%{opacity:0}}@keyframes yellow-fade-in-out{from{opacity:0}40%{opacity:0}50%{opacity:1}75%{opacity:1}76%{opacity:0}}@-webkit-keyframes green-fade-in-out{from{opacity:0}65%{opacity:0}75%{opacity:1}90%{opacity:1}100%{opacity:0}}@keyframes green-fade-in-out{from{opacity:0}65%{opacity:0}75%{opacity:1}90%{opacity:1}100%{opacity:0}}.spinner-gap-patch{position:absolute;box-sizing:border-box;top:0;left:45%;width:10%;height:100%;overflow:hidden;border-color:inherit}.spinner-gap-patch .spinner-circle{width:1000%;left:-450%}.spinner-circle-clipper{display:inline-block;position:relative;width:50%;height:100%;overflow:hidden;border-color:inherit}.spinner-circle-clipper .spinner-circle{width:200%}.spinner-circle{box-sizing:border-box;height:100%;border-width:3px;border-style:solid;border-color:inherit;border-bottom-color:transparent!important;border-radius:50%;-webkit-animation:none;animation:none}.spinner-circle-clipper.spinner-left .spinner-circle{border-right-color:transparent!important;-webkit-transform:rotate(129deg);transform:rotate(129deg)}.spinner-circle-clipper.spinner-right .spinner-circle{left:-100%;border-left-color:transparent!important;-webkit-transform:rotate(-129deg);transform:rotate(-129deg)}.active .spinner-circle-clipper.spinner-left .spinner-circle{-webkit-animation:left-spin 1333ms cubic-bezier(0.4,0.0,0.2,1) infinite both;animation:left-spin 1333ms cubic-bezier(0.4,0.0,0.2,1) infinite both}.active .spinner-circle-clipper.spinner-right .spinner-circle{-webkit-animation:right-spin 1333ms cubic-bezier(0.4,0.0,0.2,1) infinite both;animation:right-spin 1333ms cubic-bezier(0.4,0.0,0.2,1) infinite both}@-webkit-keyframes left-spin{from{-webkit-transform:rotate(130deg)}50%{-webkit-transform:rotate(-5deg)}to{-webkit-transform:rotate(130deg)}}@keyframes left-spin{from{transform:rotate(130deg)}50%{transform:rotate(-5deg)}to{transform:rotate(130deg)}}@-webkit-keyframes right-spin{from{-webkit-transform:rotate(-130deg)}50%{-webkit-transform:rotate(5deg)}to{-webkit-transform:rotate(-130deg)}}@keyframes right-spin{from{transform:rotate(-130deg)}50%{transform:rotate(5deg)}to{transform:rotate(-130deg)}}.spinner-fit{position:absolute;top:0;bottom:0;right:0;left:0}.docs-working-bar{color:#222;display:none;font:13px/1.4 arial,sans-serif;margin-top:0;min-width:124px;position:absolute;z-index:1001;transition:218ms ease-in}.docs-working-bar-slideup{-webkit-transform:translateY(-60px);-moz-transform:translateY(-60px);-ms-transform:translateY(-60px);-o-transform:translateY(-60px);transform:translateY(-60px)}.docs-working-bar-display{display:block}.docs-working-bar .message{background:rgba(0,0,0,.8);border-radius:3px;color:#fff;left:-50%;padding:16px;position:relative}.docs-working-bar .message *{vertical-align:middle}.docs-working-bar .message .icon{margin-right:16px}.docs-working-bar .spinner{display:inline-block}.docs-working-bar .label{font-weight:normal}@keyframes script-working-bar-spin{from{transform:rotate(0deg);-ms-transform:rotate(0deg)}to{transform:rotate(360deg);-ms-transform:rotate(360deg)}}@-webkit-keyframes script-working-bar-spin{from{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(360deg)}}.docs-working-bar .spinner .icon{animation:script-working-bar-spin 1.5s infinite linear;-webkit-animation:script-working-bar-spin 1.5s infinite linear}.docs-material-colorpalette{outline:none}.docs-material-colorpalette-cell{border-radius:50%}.docs-material-colorpalette-colorswatch{border-radius:50%;box-sizing:border-box;cursor:pointer;height:20px;margin:1px 1px 0 0;width:20px}.docs-material-colorpalette-table{border-spacing:1px;padding:1px 0}.docs-material-colorpalette-cell.docs-material-colorpalette-cell-hover .docs-material-colorpalette-colorswatch{box-shadow:0 0 3px 1px #bdc1c6}.docs-material-colorpalette-colorswatch.docs-material-colorpalette-colorswatch-border{border:1px solid #dadce0}.docs-customcolorpalette-add-custom-color-button:hover{background-color:#e8eaed;border-radius:4px;cursor:pointer}.docs-material-colorpalette-cell.docs-material-colorpalette-cell-selected .docs-material-colorpalette-colorswatch{background:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNnB4IiBoZWlnaHQ9IjE2cHgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0iIzAwMDAwMCI+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMSwgMCwgMCwgMSkiPjxwYXRoIGQ9Ik0wIDBoNDh2NDhIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTggMzIuMzRMOS42NiAyNGwtMi44MyAyLjgzTDE4IDM4bDI0LTI0LTIuODMtMi44M3oiLz48L2c+PC9zdmc+);background-position:center;background-repeat:no-repeat}.docs-material-colorpalette-cell.docs-material-colorpalette-cell-selected .docs-material-colorpalette-colorswatch.docs-material-colorpalette-colorswatch-dark{background:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNnB4IiBoZWlnaHQ9IjE2cHgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0iI0ZGRkZGRiI+PHBhdGggZD0iTTAgMGg0OHY0OEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xOCAzMi4zNEw5LjY2IDI0bC0yLjgzIDIuODNMMTggMzhsMjQtMjQtMi44My0yLjgzeiIvPjwvc3ZnPg==);background-position:center;background-repeat:no-repeat}.docs-hc-gecko .docs-material-colorpalette-colorswatch,.docs-hc-ie .docs-material-colorpalette-colorswatch{border:1px solid #dadce0}.docs-material-color-picker-base{cursor:pointer;height:26px;min-width:40px;outline:none}.docs-material-color-picker-base-disabled,.docs-material-color-picker-base-disabled .docs-material-color-picker-base{cursor:default}.docs-material-color-picker-base-outer-box{transition:background 250ms cubic-bezier(0.4,0.0,0.2,1);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background:rgba(0,0,0,0.04);border-radius:2px;height:100%;padding:2px 4px;width:100%}.docs-material-color-picker-base-open .docs-material-color-picker-base-outer-box{background:rgba(0,0,0,0.12)}.docs-material-color-picker-base-inner-box{width:100%}.docs-material-color-picker-base-indicator{border-bottom:3px solid transparent;height:18px;width:22px}.docs-material-color-picker-base-disabled .docs-material-color-picker-base-indicator{opacity:0.12}.docs-material-color-picker-base-indicator .docs-icon{transition:opacity 250ms cubic-bezier(0.4,0.0,0.2,1);-webkit-transform:scale(0.9);-moz-transform:scale(0.9);-ms-transform:scale(0.9);-o-transform:scale(0.9);transform:scale(0.9);height:14px;left:1px;opacity:0.54;width:18px}.docs-material-color-picker-base-focused .docs-material-color-picker-base-indicator .docs-icon,.docs-material-color-picker-base-open .docs-material-color-picker-base-indicator .docs-icon{opacity:0.87}.docs-material-color-picker-base-dropdown{float:right}.docs-material-color-picker-base-dropdown-icon{transition:opacity 250ms cubic-bezier(0.4,0.0,0.2,1);background:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1IiBoZWlnaHQ9IjMiPjxwb2x5Z29uIHBvaW50cz0iMCwwIDUsMCAyLjUsMyIgZmlsbD0iIzAwMCIvPjwvc3ZnPg==") no-repeat;background-size:contain;height:8px;opacity:0.54;position:relative;top:9px;width:8px}.docs-material-color-picker-base-focused .docs-material-color-picker-base-dropdown-icon,.docs-material-color-picker-base-open .docs-material-color-picker-base-dropdown-icon{opacity:0.87}.docs-material-color-picker-base-disabled .docs-material-color-picker-base-dropdown-icon{opacity:0.12}.docs-material-color-picker-dragger{border:2px solid white;border-radius:50%;box-shadow:0 0 3px 1px #bdc1c6;cursor:pointer;position:absolute;z-index:3}.docs-material-color-swatch-wrapper{border-radius:50%;display:inline-block;position:relative;vertical-align:middle}.docs-material-color-swatch-color{box-shadow:0 0 0 1px transparent}.docs-material-color-swatch-element{border-radius:50%;height:100%;position:absolute;width:100%}.docs-material-color-swatch-wrapper-hover{box-shadow:0 0 0 1px #c8e7d1}.docs-material-color-swatch-wrapper-focused{box-shadow:0 0 0 1px #bbe2c6;outline:none}.docs-material-color-swatch-border{box-shadow:0 0 0 1px #e8eaed}.docs-material-color-swatch-checkbox-background{background-image:url(https://ssl.gstatic.com/docs/common/checkboard.png);background-size:10px}.docs-hc-ie .docs-material-color-swatch-color,.docs-hc-gecko .docs-material-color-swatch-color{border:1px solid #dadce0}.docs-gm-color-picker{color:#3c4043;outline:none;width:100%}.docs-gm-color-picker-outer-box{border:1px solid #dadce0;border-radius:4px;box-sizing:border-box;cursor:pointer;padding:8px 6px 8px 8px;width:100%}.docs-gm-color-picker .docs-gm-color-picker-outer-box{width:auto}.docs-gm-color-picker-hover .docs-gm-color-picker-outer-box{background-color:rgba(60,64,67,0.04);border:1px solid #dadce0}.docs-gm-color-picker-open .docs-gm-color-picker-outer-box{background-color:rgba(60,64,67,0.04);border:1px solid transparent}.docs-material-gm-select-open.docs-material-gm-select-hover .docs-gm-color-picker-outer-box{background-color:rgba(60,64,67,0.06)}.docs-material-gm-select-open.docs-material-gm-select-focused .docs-gm-color-picker-outer-box{background-color:rgba(60,64,67,0.08)}.docs-gm-color-picker-disabled{color:#5f6368;opacity:.38;cursor:default}.docs-gm-color-picker-disabled .docs-gm-color-picker-outer-box{border:1px solid #dadce0;box-shadow:none;cursor:default}.docs-gm-color-picker-inner-box{align-items:center;display:flex;justify-content:space-between;position:relative;width:100%}.docs-gm-color-picker-inner-box{align-items:center;display:flex;justify-content:space-between;position:relative;width:100%}.docs-gm-color-picker-caption{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;color:#202124;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;height:20px;line-height:20px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;height:22px;width:22px;border-radius:50%;border:1px solid #dadce0;margin:0;outline:none}.docs-gm-color-picker-dropdown{align-items:center;display:flex;height:24px;justify-content:center;width:24px}.docs-gm-color-picker-dropdown-icon{background:no-repeat url(//ssl.gstatic.com/docs/common/material_common_sprite146_grey_medium.svg) -46px -3920px;height:18px;width:18px}.docs-gm-color-picker-open .docs-gm-color-picker-dropdown-icon{-moz-transform:rotate(180deg);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.docs-gm-labeled-color-picker{color:#3c4043;outline:none;width:100%}.docs-gm-labeled-color-picker-outer-box{border:1px solid #dadce0;border-radius:4px;box-sizing:border-box;cursor:pointer;padding:8px 6px 8px 8px;width:100%}.docs-gm-labeled-color-picker .docs-gm-labeled-color-picker-outer-box{width:auto}.docs-gm-labeled-color-picker-hover .docs-gm-labeled-color-picker-outer-box{background-color:rgba(60,64,67,0.04);border:1px solid #dadce0}.docs-gm-labeled-color-picker-open .docs-gm-labeled-color-picker-outer-box{background-color:rgba(60,64,67,0.04);border:1px solid transparent}.docs-material-gm-select-open.docs-material-gm-select-hover .docs-gm-labeled-color-picker-outer-box{background-color:rgba(60,64,67,0.06)}.docs-material-gm-select-open.docs-material-gm-select-focused .docs-gm-labeled-color-picker-outer-box{background-color:rgba(60,64,67,0.08)}.docs-gm-labeled-color-picker-disabled{color:#5f6368;opacity:.38;cursor:default}.docs-gm-labeled-color-picker-disabled .docs-gm-labeled-color-picker-outer-box{border:1px solid #dadce0;box-shadow:none;cursor:default}.docs-gm-labeled-color-picker-inner-box{align-items:center;display:flex;justify-content:space-between;position:relative;width:100%}.docs-gm-labeled-color-picker-inner-box{align-items:center;display:flex;justify-content:space-between;position:relative;width:100%}.docs-gm-labeled-color-picker-caption{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;color:#202124;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;height:20px;line-height:20px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;height:22px;width:22px;border-radius:50%;border:1px solid #dadce0;margin:0;outline:none}.docs-gm-labeled-color-picker-dropdown{align-items:center;display:flex;height:24px;justify-content:center;width:24px}.docs-gm-labeled-color-picker-dropdown-icon{background:no-repeat url(//ssl.gstatic.com/docs/common/material_common_sprite146_grey_medium.svg) -46px -3920px;height:18px;width:18px}.docs-gm-labeled-color-picker-open .docs-gm-labeled-color-picker-dropdown-icon{-moz-transform:rotate(180deg);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.docs-gm-labeled-color-picker-label{color:#5f6368;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:12px;margin-bottom:8px;display:inline-block}.docs-material-hsv-color-picker{padding-bottom:15px}.docs-material-hsv-color-picker-information{padding:0 0 15px 0;width:100%}.docs-material-hsv-color-picker-input{border:1px solid #dadce0;border-radius:4px;box-sizing:border-box;color:#3c4043;padding:1px 8px;font-size:14px;height:36px;margin:8px 0;width:90px}.docs-material-hsv-color-picker-input:focus{border:2px solid #1a73e8;box-shadow:none;padding:0px 7px}.docs-material-info-element{display:inline-block;margin-right:15px}.docs-material-hsv-color-picker-title{text-transform:uppercase}.docs-material-hsv-color-picker-text{color:#5f6368;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:11px;font-weight:500;padding:10px 0 0 0}.docs-material-hue-slider-background{background:linear-gradient(to right,hsl(0,100%,50%),hsl(60,100%,50%),hsl(120,100%,50%),hsl(180,100%,50%),hsl(240,100%,50%),hsl(300,100%,50%),hsl(360,100%,50%))}.docs-material-opacity-slider-checkbox-background{background-image:url(https://ssl.gstatic.com/docs/common/checkboard.png);background-size:10px}.docs-material-color-picker-saturation-value-background{border:1px solid white;box-sizing:border-box}.docs-material-color-picker-saturation-value{height:150px;outline:none;position:relative;width:100%}.docs-material-color-picker-overlay{border-radius:4px;height:100%;left:0;position:absolute;top:0px;width:100%}.docs-material-color-picker-saturation-overlay{background:linear-gradient(to right,#fff 0%,rgba(255,255,255,0) 100%);z-index:1}.docs-material-color-picker-value-overlay{background:linear-gradient(to bottom,transparent 0%,#000 100%);z-index:2}.docs-material-color-slider{box-sizing:border-box;outline:0;padding:8px 0;position:relative}.docs-material-color-slider-background{border-radius:4px;display:inline-block;height:10px;position:absolute;width:100%}.docs-material-color-slider-wrapper{position:relative;width:100%}.docs-material-color-slider-thumb{height:16px;pointer-events:inherit;top:-5px;width:16px}.docs-material-color-slider-track{left:0;position:absolute;top:0}.docs-material-color-slider-checkbox-background{background-image:url(https://ssl.gstatic.com/docs/common/checkboard.png);background-size:10px}.docs-material-slider{box-sizing:border-box;padding:8px;position:relative;outline:0}.docs-material-slider-horizontal{height:calc(30px + 2*8px);min-width:128px}.docs-material-slider-vertical{width:calc(30px + 2*8px);min-height:128px}.docs-material-slider-wrapper{position:absolute}.docs-material-slider-horizontal .docs-material-slider-wrapper{left:8px;height:2px;right:8px;top:23px}.docs-material-slider-vertical .docs-material-slider-wrapper{bottom:8px;left:23px;top:8px;width:2px}.docs-material-slider-thumb{pointer-events:inherit;position:absolute}.docs-material-slider-horizontal .docs-material-slider-thumb{top:50%;width:calc(2*8px)}.docs-material-slider-vertical .docs-material-slider-thumb{left:50%;height:calc(2*8px)}.docs-material-slider-focus-ring{background-color:rgba(66,133,244,0.38);border-radius:50%;left:calc(-0.5*30px);height:30px;opacity:0;pointer-events:inherit;position:absolute;top:calc(-0.5*30px);transform:scale(0);transition:transform .4s cubic-bezier(.25,.8,.25,1),opacity .4s cubic-bezier(.25,.8,.25,1);width:30px}.docs-material-slider-rtl .docs-material-slider-focus-ring{left:inherit;right:calc(-0.5*30px)}.docs-material-slider-thumb-grabber{background-color:#4285f4;border-color:#4285f4;border-radius:50%;border-style:solid;box-sizing:border-box;cursor:pointer;height:20px;position:absolute;transform:scale(0.7);transition:transform .4s cubic-bezier(.25,.8,.25,1);width:20px}.docs-material-slider-horizontal.docs-material-slider-ltr .docs-material-slider-thumb-grabber{bottom:calc(-0.5*20px);left:calc(-0.5*20px)}.docs-material-slider-horizontal.docs-material-slider-rtl .docs-material-slider-thumb-grabber{bottom:calc(-0.5*20px);right:calc(-0.5*20px)}.docs-material-slider-vertical .docs-material-slider-thumb-grabber{left:calc(-0.5*20px);top:calc(-0.5*20px)}.docs-material-slider-track-wrapper{left:0px;position:absolute;top:0px}.docs-material-slider-horizontal .docs-material-slider-track-wrapper{height:2px;width:100%}.docs-material-slider-vertical .docs-material-slider-track-wrapper{height:100%;width:2px}.docs-material-slider-track{position:absolute}.docs-material-slider-horizontal .docs-material-slider-track{height:2px}.docs-material-slider-vertical .docs-material-slider-track{width:2px}.docs-material-slider.docs-material-slider-horizontal.docs-hc-edge .docs-material-slider-track,.docs-material-slider.docs-material-slider-horizontal.docs-hc-ie .docs-material-slider-track,.docs-material-slider.docs-material-slider-horizontal.docs-hc-gecko .docs-material-slider-track{height:0;outline:solid 2px}.docs-material-slider.docs-material-slider-vertical.docs-hc-edge .docs-material-slider-track,.docs-material-slider.docs-material-slider-vertical.docs-hc-ie .docs-material-slider-track,.docs-material-slider.docs-material-slider-vertical.docs-hc-gecko .docs-material-slider-track{width:0;outline:solid 2px}.docs-material-slider-track-on{background-color:#4285f4}.docs-material-slider-track-off{background-color:#bdbdbd}.docs-material-slider.goog-slider-disabled .docs-material-slider-thumb-grabber,.docs-material-slider.goog-slider-disabled .docs-material-slider-track-on{background-color:#bdbdbd;border-color:#bdbdbd;cursor:default}.docs-material-slider:not(.docs-material-slider-mouse-focused):not(.goog-slider-disabled):focus .docs-material-slider-focus-ring{opacity:1;transform:scale(1)}.docs-material-slider.docs-material-slider-mouse-focused:not(.goog-slider-disabled) .docs-material-slider-thumb-grabber{transform:scale(1)}.docs-material-slider-ltr.docs-material-slider-horizontal .docs-material-slider-track-on,.docs-material-slider-rtl.docs-material-slider-horizontal .docs-material-slider-track-off{left:0px}.docs-material-slider-ltr.docs-material-slider-horizontal .docs-material-slider-track-off,.docs-material-slider-rtl.docs-material-slider-horizontal .docs-material-slider-track-on{right:0px}.docs-material-slider-vertical .docs-material-slider-track-on{bottom:0px}.docs-material-slider-vertical .docs-material-slider-track-off{top:0px}.docs-material-menu-button-flat-primary,.docs-material-menu-button-flat-default,.docs-material-menu-button-raised-primary,.docs-material-menu-button-raised-default{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border-radius:2px;border:1px solid transparent;cursor:pointer;display:inline-block;font:500 13px Roboto,RobotoDraft,Helvetica,Arial,sans-serif;height:32px;line-height:30px;margin:0 4px;text-transform:uppercase;vertical-align:middle}.docs-material-menu-button-raised-primary,.docs-material-menu-button-raised-default{padding:0 6px 0 16px}.docs-material-menu-button-flat-primary,.docs-material-menu-button-flat-default{padding:0 0 0 8px}.docs-material-menu-button-flat-primary{color:#4285f4}.docs-material-menu-button-flat-primary-hover{background-color:rgba(66,133,244,.12)}.docs-material-menu-button-flat-primary-active{background-color:rgba(66,133,244,.32);color:#3387d6}.docs-material-menu-button-flat-primary-focused{border:1px solid #4285f4;outline:none}.docs-material-menu-button-flat-default{background-color:#fff;color:rgba(0,0,0,0.54)}.docs-material-menu-button-flat-default-hover{background-color:rgba(102,102,102,.2)}.docs-material-menu-button-flat-default-active{background-color:rgba(0,0,0,.2);color:rgba(0,0,0,0.87)}.docs-material-menu-button-flat-default-focused{border:1px solid #4285f4;outline:none}.docs-material-menu-button-raised-primary{background-color:#4285f4;color:#fff}.docs-material-menu-button-raised-primary-hover,.docs-material-menu-button-raised-default-hover{box-shadow:0px 2px 2px 0px rgba(0,0,0,0.14),0px 3px 1px -2px rgba(0,0,0,0.12),0px 1px 5px 0px rgba(0,0,0,0.2)}.docs-material-menu-button-raised-primary-active,.docs-material-menu-button-raised-default-active{box-shadow:0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12),0px 2px 4px -1px rgba(0,0,0,0.2)}.docs-material-menu-button-raised-primary-active{background-color:#3387d6}.docs-material-menu-button-raised-primary-focused{background-color:#4285f4;border:1px inset rgba(0,0,0,0.38);outline:none}.docs-material-menu-button-raised-default{background-color:rgba(0,0,0,.04);color:rgba(0,0,0,0.54)}.docs-material-menu-button-raised-default-active{background-color:rgba(0,0,0,0.12);color:rgba(0,0,0,0.87)}.docs-material-menu-button-raised-default-focused{border:1px solid #4285f4;color:rgba(0,0,0,0.54);outline:none}.docs-material-menu-button-flat-primary-disabled,.docs-material-menu-button-flat-default-disabled,.docs-material-menu-button-raised-default-disabled{background-color:#fff;color:rgba(0,0,0,0.26);cursor:auto}.docs-material-menu-button-raised-primary-disabled{background-color:rgba(0,0,0,0.12);color:#fff;cursor:auto}.docs-material-menu-button-flat-primary-disabled,.docs-material-menu-button-flat-default-disabled,.docs-material-menu-button-raised-default-disabled,.docs-material-menu-button-raised-primary-disabled{box-shadow:none}.docs-material-menu-button-flat-default-caption,.docs-material-menu-button-flat-primary-caption,.docs-material-menu-button-raised-default-caption,.docs-material-menu-button-raised-primary-caption{float:left;vertical-align:middle}.docs-material-menu-button-flat-default-dropdown,.docs-material-menu-button-flat-primary-dropdown{height:24px;margin:3px 0 3px 2px}.docs-material-menu-button-raised-default-dropdown,.docs-material-menu-button-raised-primary-dropdown{height:24px;margin:3px 0 3px 8px}.docs-material-menu-button-raised-primary-dropdown-icon{fill:#fff}.docs-material-menu-button-flat-default-dropdown-icon,.docs-material-menu-button-raised-default-dropdown-icon{fill:rgba(0,0,0,0.54)}.docs-material-menu-button-flat-primary-dropdown-icon{fill:#4285f4;opacity:0.54}.docs-material-menu-button-raised-default-disabled .docs-material-menu-button-raised-default-dropdown-icon,.docs-material-menu-button-flat-default-disabled .docs-material-menu-button-flat-default-dropdown-icon,.docs-material-menu-button-flat-primary-disabled .docs-material-menu-button-flat-primary-dropdown-icon{fill:rgba(0,0,0,0.26);opacity:1.0}.addon-sidebar-card{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;border-bottom:1px solid rgba(0,0,0,.12);outline:none;padding:14px 16px 8px 16px}.addon-sidebar-card-header{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;padding-bottom:8px}.addon-sidebar-card-header-content{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;width:100%}.addon-sidebar-card-icon{height:24px;padding-right:16px;padding-top:2px;width:24px}.addon-sidebar-card-icon img{height:24px;width:24px}.addon-sidebar-card-title{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;width:100%}.addon-sidebar-card-title-caption.goog-control-focused{outline:none;text-decoration:underline}.addon-sidebar-card-title-caption.goog-control-hover{text-decoration:underline}.addon-sidebar-card-title-caption{color:rgba(0,0,0,0.87);cursor:pointer;font-size:15px;font-weight:500;line-height:20px;margin-right:9px;max-height:38px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.addon-sidebar-card-two-line-title-caption{display:-webkit-box;visibility:visible;-webkit-line-clamp:2;-webkit-box-orient:vertical;white-space:normal;word-break:break-word;word-wrap:break-word}.addon-sidebar-card-check{color:#455a64;height:18px;margin:1px 0 0 auto;width:18px}.addon-sidebar-card-category{color:rgba(0,0,0,0.54);font-size:13px;font-weight:400;line-height:20px}.addon-sidebar-card-summary{color:rgba(0,0,0,0.54);font-size:13px;font-weight:400;line-height:20px;overflow:hidden;padding:0 0 8px 40px;text-overflow:ellipsis}.addon-sidebar-with-banner .addon-sidebar-card{border-bottom:none;padding-top:16px}.addon-sidebar-with-banner .addon-sidebar-card-header{padding-bottom:16px}.addon-sidebar-with-banner .addon-sidebar-card-title-caption{max-width:194px}.addon-sidebar-with-banner .addon-sidebar-card-icon{height:40px;padding-top:0px;width:40px}.addon-sidebar-with-banner .addon-sidebar-card-icon img{height:40px;width:40px}.addon-sidebar-with-banner .addon-sidebar-card-title{font-size:16px}.addon-sidebar-with-banner .addon-sidebar-card-summary{font-size:14px;padding:0 0 24px 0}.addon-sidebar-card-button.docs-material-button-flat-primary,.addon-sidebar-card-menu-button.docs-material-menu-button-flat-primary{margin-left:32px}.addon-sidebar-card-button.docs-material-button-raised-primary,.addon-sidebar-card-menu-button.docs-material-menu-button-raised-primary{margin-left:0px}.addon-sidebar-card-button.docs-material-button-flat-primary,.addon-sidebar-card-button.docs-material-button-raised-primary{height:32px;line-height:32px}.addon-sidebar-card-button.docs-material-button-flat-primary{padding:0 8px}.addon-sidebar-card-menu-button.docs-material-menu-button-flat-primary,.addon-sidebar-card-menu-button.docs-material-menu-button-raised-primary{height:32px;line-height:32px}.addon-sidebar-card-menu-button.docs-material-menu-button-flat-primary{padding:0 2px 0 8px}.addon-sidebar-card-menu-button .docs-material-menu-button-flat-primary-caption,.addon-sidebar-card-menu-button .docs-material-menu-button-raised-primary-caption{line-height:32px}.addon-sidebar-card-menu-button .docs-material-menu-button-flat-primary-dropdown,.addon-sidebar-card-menu-button .docs-material-menu-button-raised-primary-dropdown{margin-top:3px}.goog-menuitem.addon-sidebar-menu-item-with-flat,.goog-menuitem.addon-sidebar-menu-item-with-raised{padding-right:30px}.addon-sidebar-menu-item-with-flat .goog-menuitem-content{max-width:174px;overflow:hidden;text-overflow:ellipsis}.addon-sidebar-menu-item-with-raised .goog-menuitem-content{max-width:206px;overflow:hidden;text-overflow:ellipsis}.addon-sidebar{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;background:#fff;border-left:1px solid #d9d9d9;color:#222;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;outline:none;position:absolute;right:0;width:300px}.addon-sidebar-header{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;background:#616161;color:#fff;font-size:15px;font-weight:500;padding:10px 16px 9px 16px;position:relative}.addon-sidebar-close{cursor:pointer;height:21px;position:absolute;right:13px;top:7px;width:21px}.addon-sidebar-content{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;height:100%;width:300px;overflow-y:overlay}.addon-sidebar-introduction{border-bottom:1px solid rgba(0,0,0,.12);color:rgba(0,0,0,.54);font-size:11px;font-weight:500;line-height:15px;padding:10px 16px 10px 16px}.addon-sidebar-banner{display:inline-grid;position:relative}.addon-sidebar-banner-image{display:block;height:auto;width:300px}.addon-sidebar-banner-image-overlay{background-image:linear-gradient(-180deg,rgba(0,0,0,0.00) 0%,rgba(0,0,0,0.01) 30%,rgba(0,0,0,0.03) 50%,rgba(0,0,0,0.06) 70%,rgba(0,0,0,0.09) 90%,rgba(0,0,0,0.11) 96%,rgba(0,0,0,0.13) 100%);bottom:0;position:absolute;width:300px;height:80px}.addon-sidebar-spinner{position:fixed;top:50%;width:300px}.addon-sidebar-empty-caption{position:fixed;text-align:center;top:50%;width:300px}.addon-sidebar-empty-title{color:rgba(0,0,0,0.87);font-size:15px;font-weight:700;line-height:18px;padding-bottom:8px}.addon-sidebar-empty-description{color:rgba(0,0,0,0.50);font-size:13px;font-weight:500;line-height:18px}.script-application-sidebar{background:#fff;border-left:1px solid #d9d9d9;color:#222;position:absolute;right:0;width:300px}.script-application-sidebar-header{background:#616161;border:1px solid #616161;color:#fff;font-size:13px;font-weight:bold;height:15px;padding:10px 0 10px 12px;position:relative}.script-application-sidebar-close{cursor:pointer;position:absolute;right:6px;top:8px}.script-application-sidebar-content{bottom:0;position:absolute;top:37px;width:100%}#docs-script-button-bar .jfk-button{margin-right:9px}.docs-script-button-bar-text{color:#777;display:inline-block;margin-left:10px;margin-right:20px;max-width:55px;outline:none;overflow:hidden;text-overflow:ellipsis;vertical-align:text-bottom;white-space:nowrap}.docs-script-button-bar-text:hover{cursor:pointer;text-decoration:underline}.docs-script-button-bar-bubble{width:175px}.docs-script-button-bar-bubble-content{text-align:left;white-space:normal}.script-errorfield{border-color:#dd4b39!important}.script-errormsg{color:#dd4b39!important}.script-promo-menu-item{border:0px;min-height:90px;max-width:354px;padding:0px!important}.script-promo-menu-item-content{vertical-align:middle;padding:10px 20px}.script-promo-menu-item-description{color:#4a4a4a;font-size:13px}.script-promo-menu-item-icon{display:inline-block;height:75px;vertical-align:middle;width:75px}.script-promo-menu-item-text{display:inline-block;max-width:170px;padding-left:10px;vertical-align:middle;white-space:pre-line}.script-promo-menu-item-title{color:#222222;font-weight:bold;font-size:18px}.func-entry{border-top:1px solid #ffffff;border-left:1px solid #ffffff;border-right:1px solid #ffffff;border-bottom:1px solid #e5e5e5;cursor:default;outline:none}.func-entry:focus{border:1px solid #4d90fe!important}.func-entry-checked{border-top:1px solid #ffc;border-left:1px solid #ffc;border-right:1px solid #ffc;border-bottom:1px solid #e5e5e5;background-color:#ffc}.func-entry-func,.func-entry-lib{width:305px;margin-left:5px;padding-top:4px;padding-bottom:4px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.func-entry-rb{float:left;padding-left:8px;width:18px;height:26px}.func-entry-rb{background-image:url(//ssl.gstatic.com/ui/v1/radiobutton/unchecked.png);background-position:center center;background-repeat:no-repeat}.func-entry-checked .func-entry-rb{background-image:url(//ssl.gstatic.com/ui/v1/radiobutton/checked.png)}.modal-dialog.docs-dialog.gsm-widget{border:0;border-radius:0;box-shadow:none;padding:0}.modal-dialog.docs-dialog.gsm-widget .modal-dialog-title{display:none;height:0;margin:0}.gsm-widget .modal-dialog-buttons{display:none}.gsm-widget .modal-dialog-content{background-color:transparent}.script-help-dialog{min-width:392px}.script-help-dialog-content-left{border:1px solid #e5e5e5;height:160px;overflow-y:auto;vertical-align:top;width:254px}.script-help-dialog-content-section{padding:16px}.script-help-dialog-content-left-gsm-onhold{background-color:#fad2cf}.script-help-dialog-content-title{display:flex;font-weight:700;padding-bottom:8px}.script-help-dialog-content-title-caution-icon{padding-right:4px}.script-help-dialog-buttons{min-width:102px;max-width:200px;padding-left:16px;vertical-align:top}.script-help-dialog-buttons .jfk-button{display:block;margin-right:0px;margin-bottom:16px;padding:0px 8px 0px 8px;width:100%}.script-manager-box{border:none;height:450px;width:700px}.script-prompt-contents DIV{min-width:300px;max-width:700px;max-height:350px;overflow:auto}.script-prompt-contents INPUT{width:100%}.script-app-dialog{z-index:1003}.script-app-contents{padding:0px}.script-error-message{max-height:1em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block}.script-error-dialog-content{max-height:400px;max-width:600px;overflow:auto}.script-postinstallbubble-dialog{outline:none}.script-postinstallbubble-content{max-width:293px}.script-postinstallbubble-dialog .jfk-bubble-closebtn{right:8px;top:8px}.script-postinstallbubble-title{font-size:16px;margin-bottom:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:274px}.script-postinstallbubble-description{font:normal 13px/1.4 arial,sans-serif;margin-bottom:13px}.script-reportissue-dialog-content{width:456px}.script-reportissue-dialog-description{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;font-family:arial,sans-serif;height:100px;resize:none;vertical-align:top;width:100%}.script-reportissue-dialog-nonanonymous-control{vertical-align:top;width:20px}.script-reportissue-dialog-nonanonymous-label{vertical-align:top;width:436px}.script-reportissue-dialog-nonanonymous-optional-text{color:#777}.script-explorer-contents{height:350px;width:700px;overflow:hidden}.func-header{width:100%;border-top:1px solid #e5e5e5;color:#555;cursor:default;font-weight:bold;text-transform:uppercase}.func-actions{margin-bottom:14px}#func-action-new{margin-right:22px!important}#func-action-reload{position:absolute;right:26px;width:45px}#func-action-reload .docs-icon{opacity:0.7}.func-header-func,.func-header-lib{width:307px;margin-left:5px;padding-top:4px;padding-bottom:4px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.func-header-rb{width:26px}.func-entries{max-height:272px;border-top:1px solid #e5e5e5;overflow-x:hidden;overflow-y:auto}.func-entries:focus{outline:none}.func-none,.func-loading{width:640px;cursor:default;padding-top:4px;padding-bottom:4px}.func-none{margin-left:30px}.func-loading{background:transparent url(//ssl.gstatic.com/docs/script/images/spin-wait.gif) no-repeat 0 4px;padding-left:20px;margin-left:12px}.webstore-widget{padding:0}.webstore-widget .modal-dialog-title{border-bottom:1px solid #acacac;margin:0;padding:16px 12px}.active-account-dialog-email{font-weight:500;word-break:break-all}.active-account-dialog .modal-dialog-content{display:flex}.active-account-dialog-display-name{font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;line-height:12px;padding:8px;display:flex;align-items:center}.active-account-dialog-avatar{background-color:#9aa0a6;border-radius:50%;object-fit:cover;height:32px;width:32px}.active-account-dialog .modal-dialog-buttons{margin-top:32px}.modal-dialog.active-account-dialog{display:table;max-width:464px;table-layout:fixed}.goog-checkbox{border:1px solid #1c5180;display:-moz-inline-box;display:inline-block;font-size:1px;height:11px;margin:0 4px 0 1px;vertical-align:text-bottom;width:11px}.goog-checkbox-checked{background:#fff url(//ssl.gstatic.com/closure/check-sprite.gif) no-repeat 2px center}.goog-checkbox-undetermined{background:#bbb url(//ssl.gstatic.com/closure/check-sprite.gif) no-repeat 2px center}.goog-checkbox-unchecked{background:#fff}.goog-checkbox-disabled{border:1px solid lightgray;background-position:-7px}.jfk-checkbox{-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;background-color:rgba(255,255,255,.05);border:1px solid #c6c6c6;border:1px solid rgba(155,155,155,.57);font-size:1px;height:11px;margin:0px 4px 0px 1px;outline:0;vertical-align:text-bottom;width:11px}.jfk-checkbox-undetermined{background-color:#fff;background-color:rgba(255,255,255,.65)}.jfk-checkbox-checked{background-color:#fff;background-color:rgba(255,255,255,.65)}.jfk-checkbox-hover{-webkit-box-shadow:inset 0px 1px 1px rgba(0,0,0,.1);-moz-box-shadow:inset 0px 1px 1px rgba(0,0,0,.1);box-shadow:inset 0px 1px 1px rgba(0,0,0,.1);border:1px solid #b2b2b2}.jfk-checkbox-active{background-color:#ebebeb}.jfk-checkbox-focused{border:1px solid #4d90fe}.jfk-checkbox-clearOutline.jfk-checkbox-focused{border:1px solid #c6c6c6;border:1px solid rgba(155,155,155,.57)}.jfk-checkbox-disabled,.jfk-checkbox-clearOutline.jfk-checkbox-disabled{background-color:#fff;border:1px solid #f1f1f1;cursor:default}.jfk-checkbox-checkmark{height:15px;outline:0;width:15px;left:0;position:relative;top:-3px}.jfk-checkbox-undetermined .jfk-checkbox-checkmark{background:url(//ssl.gstatic.com/ui/v1/menu/checkmark-partial.png) no-repeat -5px -3px;background-image:-webkit-image-set(url(//ssl.gstatic.com/ui/v1/menu/checkmark-partial.png) 1x,url(//ssl.gstatic.com/ui/v1/menu/checkmark-partial_2x.png) 2x)}.jfk-checkbox-checked .jfk-checkbox-checkmark{background:url(//ssl.gstatic.com/ui/v1/menu/checkmark.png) no-repeat -5px -3px;background-image:-webkit-image-set(url(//ssl.gstatic.com/ui/v1/menu/checkmark.png) 1x,url(//ssl.gstatic.com/ui/v1/menu/checkmark_2x.png) 2x)}.jfk-colormenu.goog-menu{padding:0}.jfk-palette{cursor:default;outline:none}.jfk-palette-table{empty-cells:show;margin:16px}.jfk-palette-cell{border:1px solid transparent;cursor:pointer;margin:0;position:relative}.jfk-palette-cell-hover{border:1px solid #000}.jfk-palette-cell-selected{outline:1px solid #000}.jfk-palette-colorswatch{height:16px;width:16px}.jfk-palette-cell-selected>.jfk-palette-colorswatch{background:url(//ssl.gstatic.com/ui/v1/colorpicker/checkmark.png) no-repeat 50% 50%}.jfk-colorwell{border:1px solid #d9d9d9}.jfk-butterBar{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;-webkit-box-shadow:0px 2px 4px rgba(0,0,0,0.2);-moz-box-shadow:0px 2px 4px rgba(0,0,0,0.2);box-shadow:0px 2px 4px rgba(0,0,0,0.2);-webkit-transition:all 0s linear 1s,opacity 1s;-moz-transition:all 0s linear 1s,opacity 1s;-o-transition:all 0s linear 1s,opacity 1s;transition:all 0s linear 1s,opacity 1s;border-style:solid;border-width:0;font-size:11px;height:0;opacity:0;visibility:hidden;overflow:hidden;padding:0;text-align:center}.jfk-butterBar-info{background-color:#f9edbe;border-color:#f0c36d;color:#333}.jfk-butterBar-error{background-color:#484848;border-color:#202020;color:#fff}.jfk-butterBar-promo{background-color:#d6e9f8;border-color:#4d90f0;color:#333}.jfk-butterBar-warning{background-color:#dd4b39;border-color:#602019;color:#fff}.jfk-butterBar-shown{-webkit-transition:opacity 0.218s;-moz-transition:opacity 0.218s;-o-transition:opacity 0.218s;transition:opacity 0.218s;border-width:1px;min-height:14px;height:auto;opacity:1;visibility:visible;padding:6px 16px}.jfk-butterBar-mini.jfk-butterBar-shown{padding:2px 16px}.goog-link-button{position:relative;color:#15c;text-decoration:underline;cursor:pointer}.goog-link-button-disabled{color:#ccc;text-decoration:none;cursor:default}.goog-toolbar{background:#f5f5f5;border-top:1px solid #e5e5e5;border-bottom:1px solid #ebebeb;outline:0;padding:8px 0 4px 0;position:relative;zoom:1}.jfk-freestanding-menu-button{-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;background:url(//ssl.gstatic.com/ui/v1/disclosure/light-grey-disclosure-arrow-down.png) center no-repeat;border:1px solid #e5e5e5;height:11px;width:11px;cursor:pointer}.jfk-freestanding-menu-button-hover,.jfk-freestanding-menu-button-active,.jfk-freestanding-menu-button-open{background:url(//ssl.gstatic.com/ui/v1/disclosure/dark-grey-disclosure-arrow-down.png) center no-repeat #eee;border-color:#c6c6c6}.jfk-select .goog-flat-menu-button-caption{overflow:hidden;width:100%}.jfk-select .goog-flat-menu-button-dropdown{background:url(//ssl.gstatic.com/ui/v1/disclosure/grey-disclosure-arrow-up-down.png) center no-repeat;border:none;height:11px;margin-top:-4px;width:7px}.jfk-progressStatus{color:#202020}.jfk-progressText{color:#999}.jfk-progressStatus,.jfk-progressText{line-height:18px}.jfk-progressBar-blocking .progress-bar-horizontal,.jfk-progressBar-nonBlocking .progress-bar-horizontal{border:1px solid #999;padding:1px;width:320px}.jfk-progressBar-blocking .progress-bar-thumb{background-color:#6188f5;height:5px}.jfk-progressBar-nonBlocking .progress-bar-thumb{background-color:#ccc;height:5px}.jfk-progressBar-blocking.jfk-progressBar-tall .progress-bar-thumb,.jfk-progressBar-nonBlocking.jfk-progressBar-tall .progress-bar-thumb{height:8px}.jfk-progressBar-blocking .progress-bar-thumb{-webkit-animation:jfk-progressBar-bg 0.8s linear 0s infinite;-moz-animation:jfk-progressBar-bg 0.8s linear 0s infinite;-o-animation:jfk-progressBar-bg 0.8s linear 0s infinite;animation:jfk-progressBar-bg 0.8s linear 0s infinite;background-position:0 0;background-repeat:repeat-x;background-size:16px 8px;background-color:#6188f5;background-image:-webkit-linear-gradient(315deg,transparent,transparent 33%,rgba(0,0,0,.12) 33%,rgba(0,0,0,.12) 66%,transparent 66%,transparent);background-image:-moz-linear-gradient(315deg,transparent,transparent 33%,rgba(0,0,0,.12) 33%,rgba(0,0,0,.12) 66%,transparent 66%,transparent);background-image:-ms-linear-gradient(315deg,transparent,transparent 33%,rgba(0,0,0,.12) 33%,rgba(0,0,0,.12) 66%,transparent 66%,transparent);background-image:-o-linear-gradient(315deg,transparent,transparent 33%,rgba(0,0,0,.12) 33%,rgba(0,0,0,.12) 66%,transparent 66%,transparent);background-image:linear-gradient(315deg,transparent,transparent 33%,rgba(0,0,0,.12) 33%,rgba(0,0,0,.12) 66%,transparent 66%,transparent)}.jfk-progressBar-blocking.jfk-progressBar-tall .progress-bar-thumb{-webkit-animation:jfk-progressBar-bg-tall 0.8s linear 0s infinite;-moz-animation:jfk-progressBar-bg-tall 0.8s linear 0s infinite;-o-animation:jfk-progressBar-bg-tall 0.8s linear 0s infinite;animation:jfk-progressBar-bg-tall 0.8s linear 0s infinite;background-size:20px 10px}@-webkit-keyframes jfk-progressBar-bg{0%{background-position:0 0}100%{background-position:-16px 0}}@-moz-keyframes jfk-progressBar-bg{0%{background-position:0 0}100%{background-position:-16px 0}}@-o-keyframes jfk-progressBar-bg{0%{background-position:0 0}100%{background-position:-16px 0}}@keyframes jfk-progressBar-bg{0%{background-position:0 0}100%{background-position:-16px 0}}@-webkit-keyframes jfk-progressBar-bg-tall{0%{background-position:0 0}100%{background-position:-20px 0}}@-moz-keyframes jfk-progressBar-bg-tall{0%{background-position:0 0}100%{background-position:-20px 0}}@-o-keyframes jfk-progressBar-bg-tall{0%{background-position:0 0}100%{background-position:-20px 0}}@keyframes jfk-progressBar-bg-tall{0%{background-position:0 0}100%{background-position:-20px 0}}.jfk-progressbar .progress-bar-horizontal,.jfk-progressbar .progress-bar-vertical{border-color:#999}.jfk-progressbar .progress-bar-thumb{background-color:#ccc}.jfk-radiobutton{display:inline-block;outline:none;padding:5px 7px;position:relative}.jfk-radiobutton-radio{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background:url(//ssl.gstatic.com/ui/v1/radiobutton/unchecked.png) -3px -3px;background:rgba(255,255,255,0);border:1px solid rgba(198,198,198,1);height:15px;left:7px;margin:0;outline:none;position:absolute;text-align:left;top:6px;width:15px}.jfk-radiobutton:active .jfk-radiobutton-radio{background:rgba(235,235,235,1);border-color:rgba(182,182,182,1)}.jfk-radiobutton:hover .jfk-radiobutton-radio{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.1);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.1);box-shadow:inset 0 1px 1px rgba(0,0,0,.1);border-color:rgba(182,182,182,1)}.jfk-radiobutton:focus .jfk-radiobutton-radio{border-color:rgba(77,144,254,1)}.jfk-radiobutton-checked .jfk-radiobutton-radio{background:url(//ssl.gstatic.com/ui/v1/radiobutton/checked.png) -3px -3px;background:rgba(255,255,255,0)}.jfk-radiobutton.jfk-radiobutton:focus .jfk-radiobutton-radio{background:url(//ssl.gstatic.com/ui/v1/radiobutton/unchecked_focused.png) -3px -3px;background:rgba(255,255,255,0)}.jfk-radiobutton-checked.jfk-radiobutton:focus .jfk-radiobutton-radio{background:url(//ssl.gstatic.com/ui/v1/radiobutton/checked_focused.png) -3px -3px;background:rgba(255,255,255,0)}.jfk-radiobutton-checked .jfk-radiobutton-radio::after{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;background:rgba(96,96,96,1);border:2px solid #606060;box-sizing:border-box;content:'';display:block;height:7px;left:3px;position:relative;top:3px;width:7px}.jfk-radiobutton .jfk-radiobutton-label{display:block;cursor:default;margin-left:22px}.jfk-radiobutton-disabled .jfk-radiobutton-radio{background:url(//ssl.gstatic.com/ui/v1/radiobutton/unchecked-disabled.png) -3px -3px;background:rgba(255,255,255,0);border-color:rgba(241,241,241,1)}.jfk-radiobutton-disabled.jfk-radiobutton-checked .jfk-radiobutton-radio{background:url(//ssl.gstatic.com/ui/v1/radiobutton/checked-disabled.png) -3px -3px;background:rgba(255,255,255,0)}.jfk-radiobutton-disabled.jfk-radiobutton-checked .jfk-radiobutton-radio::after{background:rgba(184,184,184,1)}.jfk-radiobutton-disabled .jfk-radiobutton-label{color:rgb(184,184,184)}.jfk-radiobutton-disabled:active .jfk-radiobutton-radio,.jfk-radiobutton-disabled:hover .jfk-radiobutton-radio{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;background:rgba(255,255,255,1);border-color:rgba(241,241,241,1)}::-webkit-scrollbar{height:16px;overflow:visible;width:16px}::-webkit-scrollbar-button{height:0;width:0}::-webkit-scrollbar-track{background-clip:padding-box;border:solid transparent;border-width:0 0 0 4px}::-webkit-scrollbar-track:horizontal{border-width:4px 0 0}::-webkit-scrollbar-track:hover{background-color:rgba(0,0,0,.05);box-shadow:inset 1px 0 0 rgba(0,0,0,.1)}::-webkit-scrollbar-track:horizontal:hover{box-shadow:inset 0 1px 0 rgba(0,0,0,.1)}::-webkit-scrollbar-track:active{background-color:rgba(0,0,0,.05);box-shadow:inset 1px 0 0 rgba(0,0,0,.14),inset -1px 0 0 rgba(0,0,0,.07)}::-webkit-scrollbar-track:horizontal:active{box-shadow:inset 0 1px 0 rgba(0,0,0,.14),inset 0 -1px 0 rgba(0,0,0,.07)}.jfk-scrollbar-dark::-webkit-scrollbar-track:hover{background-color:rgba(255,255,255,.1);box-shadow:inset 1px 0 0 rgba(255,255,255,.2)}.jfk-scrollbar-dark::-webkit-scrollbar-track:horizontal:hover{box-shadow:inset 0 1px 0 rgba(255,255,255,.2)}.jfk-scrollbar-dark::-webkit-scrollbar-track:active{background-color:rgba(255,255,255,.1);box-shadow:inset 1px 0 0 rgba(255,255,255,.25),inset -1px 0 0 rgba(255,255,255,.15)}.jfk-scrollbar-dark::-webkit-scrollbar-track:horizontal:active{box-shadow:inset 0 1px 0 rgba(255,255,255,.25),inset 0 -1px 0 rgba(255,255,255,.15)}::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.2);background-clip:padding-box;border:solid transparent;border-width:1px 1px 1px 6px;min-height:28px;padding:100px 0 0;box-shadow:inset 1px 1px 0 rgba(0,0,0,.1),inset 0 -1px 0 rgba(0,0,0,.07)}::-webkit-scrollbar-thumb:horizontal{border-width:6px 1px 1px;padding:0 0 0 100px;box-shadow:inset 1px 1px 0 rgba(0,0,0,.1),inset -1px 0 0 rgba(0,0,0,.07)}::-webkit-scrollbar-thumb:hover{background-color:rgba(0,0,0,.4);box-shadow:inset 1px 1px 1px rgba(0,0,0,.25)}::-webkit-scrollbar-thumb:active{background-color:rgba(0,0,0,0.5);box-shadow:inset 1px 1px 3px rgba(0,0,0,0.35)}.jfk-scrollbar-dark::-webkit-scrollbar-thumb{background-color:rgba(255,255,255,.3);box-shadow:inset 1px 1px 0 rgba(255,255,255,.15),inset 0 -1px 0 rgba(255,255,255,.1)}.jfk-scrollbar-dark::-webkit-scrollbar-thumb:horizontal{box-shadow:inset 1px 1px 0 rgba(255,255,255,.15),inset -1px 0 0 rgba(255,255,255,.1)}.jfk-scrollbar-dark::-webkit-scrollbar-thumb:hover{background-color:rgba(255,255,255,.6);box-shadow:inset 1px 1px 1px rgba(255,255,255,.37)}.jfk-scrollbar-dark::-webkit-scrollbar-thumb:active{background-color:rgba(255,255,255,.75);box-shadow:inset 1px 1px 3px rgba(255,255,255,.5)}.jfk-scrollbar-borderless::-webkit-scrollbar-track{border-width:0 1px 0 6px}.jfk-scrollbar-borderless::-webkit-scrollbar-track:horizontal{border-width:6px 0 1px}.jfk-scrollbar-borderless::-webkit-scrollbar-track:hover{background-color:rgba(0,0,0,.035);box-shadow:inset 1px 1px 0 rgba(0,0,0,.14),inset -1px -1px 0 rgba(0,0,0,.07)}.jfk-scrollbar-borderless.jfk-scrollbar-dark::-webkit-scrollbar-track:hover{background-color:rgba(255,255,255,.07);box-shadow:inset 1px 1px 0 rgba(255,255,255,.25),inset -1px -1px 0 rgba(255,255,255,.15)}.jfk-scrollbar-borderless::-webkit-scrollbar-thumb{border-width:0 1px 0 6px}.jfk-scrollbar-borderless::-webkit-scrollbar-thumb:horizontal{border-width:6px 0 1px}::-webkit-scrollbar-corner{background:transparent}body::-webkit-scrollbar-track-piece{background-clip:padding-box;background-color:#f5f5f5;border:solid #fff;border-width:0 0 0 3px;box-shadow:inset 1px 0 0 rgba(0,0,0,.14),inset -1px 0 0 rgba(0,0,0,.07)}body::-webkit-scrollbar-track-piece:horizontal{border-width:3px 0 0;box-shadow:inset 0 1px 0 rgba(0,0,0,.14),inset 0 -1px 0 rgba(0,0,0,.07)}body::-webkit-scrollbar-thumb{border-width:1px 1px 1px 5px}body::-webkit-scrollbar-thumb:horizontal{border-width:5px 1px 1px}body::-webkit-scrollbar-corner{background-clip:padding-box;background-color:#f5f5f5;border:solid #fff;border-width:3px 0 0 3px;box-shadow:inset 1px 1px 0 rgba(0,0,0,.14)}.goog-slider{position:relative;outline:0}.goog-slider-horizontal{height:18px}.goog-slider-vertical{width:18px}.goog-slider-thumb{background-color:#f5f5f5;background-image:-webkit-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:-moz-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:-ms-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:-o-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:linear-gradient(top,#f5f5f5,#f1f1f1);-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;-webkit-transition:background-color 0.218s,border-color 0.218s,background-image 0.218s;-moz-transition:background-color 0.218s,border-color 0.218s,background-image 0.218s;-o-transition:background-color 0.218s,border-color 0.218s,background-image 0.218s;transition:background-color 0.218s,border-color 0.218s,background-image 0.218s;border:1px solid #dcdcdc;height:16px;position:absolute;width:16px}.goog-slider-thumb:hover{background-color:#f8f8f8;background-image:-webkit-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-moz-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-ms-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-o-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:linear-gradient(top,#f8f8f8,#f1f1f1);border-color:#c6c6c6}.goog-slider-scale{position:absolute}.goog-slider-horizontal .goog-slider-scale{border-top:1px solid #ccc;top:8px;width:100%}.goog-slider-vertical .goog-slider-scale{border-left:1px solid #ccc;height:100%;left:8px}.jfk-twothumbslider{position:relative;outline:0}.goog-twothumbslider-horizontal{height:18px}.goog-twothumbslider-vertical{width:18px}.goog-twothumbslider-horizontal .goog-twothumbslider-value-thumb,.goog-twothumbslider-horizontal .goog-twothumbslider-extent-thumb{position:absolute;height:0;width:16px}.goog-twothumbslider-vertical .goog-twothumbslider-value-thumb,.goog-twothumbslider-vertical .goog-twothumbslider-extent-thumb{position:absolute;height:16px;width:0}.jfk-slider-thumbimpl{background-color:#999;border:1px solid #999;-webkit-transition:background-color 0.218s,border-color 0.218s,background-image 0.218s;-moz-transition:background-color 0.218s,border-color 0.218s,background-image 0.218s;-o-transition:background-color 0.218s,border-color 0.218s,background-image 0.218s;transition:background-color 0.218s,border-color 0.218s,background-image 0.218s}.jfk-twothumbslider:hover .jfk-slider-thumbimpl,.jfk-twothumbslider.goog-slider-dragging .jfk-slider-thumbimpl{background-color:#fff}.jfk-twothumbslider.goog-slider-dragging .goog-slider-thumb-dragging .jfk-slider-thumbimpl{background-color:#535252;border-color:#535252}.goog-twothumbslider-horizontal .jfk-slider-thumbimpl{height:16px;width:8px}.goog-twothumbslider-horizontal .goog-twothumbslider-value-thumb .jfk-slider-thumbimpl{-webkit-border-radius:8px 0 0 8px;-moz-border-radius:8px 0 0 8px;border-radius:8px 0 0 8px}.goog-twothumbslider-horizontal .goog-twothumbslider-extent-thumb .jfk-slider-thumbimpl{-webkit-border-radius:0 8px 8px 0;-moz-border-radius:0 8px 8px 0;border-radius:0 8px 8px 0;margin-left:8px}.goog-twothumbslider-vertical .jfk-slider-thumbimpl{height:8px;width:16px}.goog-twothumbslider-vertical .goog-twothumbslider-value-thumb .jfk-slider-thumbimpl{margin-top:8px;-webkit-border-radius:0 0 8px 8px;-moz-border-radius:0 0 8px 8px;border-radius:0 0 8px 8px}.goog-twothumbslider-vertical .goog-twothumbslider-extent-thumb .jfk-slider-thumbimpl{-webkit-border-radius:8px 8px 0 0;-moz-border-radius:8px 8px 0 0;border-radius:8px 8px 0 0}.jfk-slider-scale{background-color:#e5e5e5;position:absolute;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.goog-twothumbslider-horizontal .jfk-slider-scale{height:6px;top:6px;width:100%}.goog-twothumbslider-vertical .jfk-slider-scale{height:100%;left:6px;width:6px}.goog-twothumbslider-rangehighlight{background-color:#c6c6c6;position:absolute;-webkit-transition:background-color 0.218s,border-color 0.218s,background-image 0.218s;-moz-transition:background-color 0.218s,border-color 0.218s,background-image 0.218s;-o-transition:background-color 0.218s,border-color 0.218s,background-image 0.218s;transition:background-color 0.218s,border-color 0.218s,background-image 0.218s}.jfk-twothumbslider:hover .goog-twothumbslider-rangehighlight,.jfk-twothumbslider.goog-slider-dragging .goog-twothumbslider-rangehighlight{background-color:#535252}.jfk-twothumbslider.goog-slider-dragging .goog-twothumbslider-rangehighlight{background-image:url(//ssl.gstatic.com/ui/v1/slider/rangehighlight-active-gray.png)}.goog-twothumbslider-horizontal .goog-twothumbslider-rangehighlight{height:6px;top:6px}.goog-twothumbslider-vertical .goog-twothumbslider-rangehighlight{left:6px;width:6px}.docs-butterbar-container{font-weight:500;height:0;position:absolute;text-align:center;top:23px;width:100%;z-index:999}.docs-gm .docs-butterbar-container{font-weight:normal;font-weight:var(--docs-material-font-weight-normal,normal)}.docs-butterbar-container.docs-butterbar-container-compact{top:50px}.docs-butterbar-wrap{display:inline-block;padding-bottom:5px}.docs-gm .jfk-butterBar{align-items:center;border-radius:4px;border-style:none;display:flex;flex-wrap:wrap;font-size:13px;font-size:var(--docs-material-font-size-normal,13px);height:fit-content;min-height:40px;padding:0px 24px}.docs-gm .jfk-butterBar-info{background-color:#e6f4ea;color:#202124;white-space:normal}.docs-gm .jfk-butterBar-warning{background-color:#d93025}.docs-gm .jfk-butterBar-error{background-color:#202124;color:#dadce0}.docs-butterbar-dismiss,.docs-butterbar-link,a.docs-butterbar-link:link,a.docs-butterbar-link:visited,.docs-butterbar-link-no-pad,a.docs-butterbar-link-no-pad:link,a.docs-butterbar-link-no-pad:visited{color:#666;cursor:pointer;text-decoration:underline}.docs-butterbar-dismiss,.docs-butterbar-link,a.docs-butterbar-link:link,a.docs-butterbar-link:visited{padding-left:6px}.docs-gm .docs-butterbar-dismiss{font-size:16px;margin-left:80px;padding:0;text-decoration:none;flex:1;text-align:end}.jfk-butterBar-warning .docs-butterbar-dismiss,.jfk-butterBar-warning .docs-butterbar-link,.jfk-butterBar-warning a.docs-butterbar-link:link,.jfk-butterBar-warning a.docs-butterbar-link:visited,.jfk-butterBar-warning .docs-butterbar-link-no-pad,.jfk-butterBar-warning a.docs-butterbar-link-no-pad:link,.jfk-butterBar-warning a.docs-butterbar-link-no-pad:visited{color:#111}.jfk-butterBar-error .docs-butterbar-dismiss,.jfk-butterBar-error .docs-butterbar-link,.jfk-butterBar-error a.docs-butterbar-link:link,.jfk-butterBar-error a.docs-butterbar-link:visited,.jfk-butterBar-error .docs-butterbar-link-no-pad,.jfk-butterBar-error a.docs-butterbar-link-no-pad:link,.jfk-butterBar-error a.docs-butterbar-link-no-pad:visited{color:#add8e6}.docs-gm .docs-butterbar-dismiss,.docs-gm .docs-butterbar-link,.docs-gm a.docs-butterbar-link:link,.docs-gm a.docs-butterbar-link:visited,.docs-gm .docs-butterbar-link-no-pad,.docs-gm a.docs-butterbar-link-no-pad:link,.docs-gm a.docs-butterbar-link-no-pad:visited{font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-family:var(--docs-material-header-font-family,"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif)}.docs-gm .jfk-butterBar-info .docs-butterbar-dismiss,.docs-gm .jfk-butterBar-info .docs-butterbar-link,.docs-gm .jfk-butterBar-info a.docs-butterbar-link:link,.docs-gm .jfk-butterBar-info a.docs-butterbar-link:visited,.docs-gm .jfk-butterBar-info .docs-butterbar-link-no-pad,.docs-gm .jfk-butterBar-info a.docs-butterbar-link-no-pad:link,.docs-gm .jfk-butterBar-info a.docs-butterbar-link-no-pad:visited{color:#188038}.docs-gm .jfk-butterBar-warning .docs-butterbar-dismiss,.docs-gm .jfk-butterBar-warning .docs-butterbar-link,.docs-gm .jfk-butterBar-warning a.docs-butterbar-link:link,.docs-gm .jfk-butterBar-warning a.docs-butterbar-link:visited,.docs-gm .jfk-butterBar-warning .docs-butterbar-link-no-pad,.docs-gm .jfk-butterBar-warning a.docs-butterbar-link-no-pad:link,.docs-gm .jfk-butterBar-warning a.docs-butterbar-link-no-pad:visited{color:#fff}.docs-gm .jfk-butterBar-error .docs-butterbar-dismiss,.docs-gm .jfk-butterBar-error .docs-butterbar-link,.docs-gm .jfk-butterBar-error a.docs-butterbar-link:link,.docs-gm .jfk-butterBar-error a.docs-butterbar-link:visited,.docs-gm .jfk-butterBar-error .docs-butterbar-link-no-pad,.docs-gm .jfk-butterBar-error a.docs-butterbar-link-no-pad:link,.docs-gm .jfk-butterBar-error a.docs-butterbar-link-no-pad:visited{color:#34a853}.docs-gm .jfk-butterBar-info .docs-butterbar-dismiss:hover,.docs-gm .jfk-butterBar-info .docs-butterbar-link:hover,.docs-gm .jfk-butterBar-info .docs-butterbar-link-no-pad:hover{color:#0d652d}.docs-gm .jfk-butterBar-warning .docs-butterbar-dismiss:hover,.docs-gm .jfk-butterBar-warning .docs-butterbar-link:hover,.docs-gm .jfk-butterBar-warning .docs-butterbar-link-no-pad:hover{color:#fad2cf}.docs-gm .jfk-butterBar-error .docs-butterbar-dismiss:hover,.docs-gm .jfk-butterBar-error .docs-butterbar-link:hover,.docs-gm .jfk-butterBar-error .docs-butterbar-link-no-pad:hover{color:#81c995}.docs-ml-noselect{-webkit-touch-callout:none;-webkit-user-drag:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#docs-chrome{background:white;outline:none}#docs-header{position:relative;-ms-flex:1 1 auto;-webkit-flex:1 1 auto;flex:1 1 auto}#docs-header.docs-og-minibar{max-height:31px}#docs-header-container{display:flex;-webkit-justify-content:flex-end;justify-content:flex-end}#docs-banner-container{display:flex;-webkit-justify-content:flex-end;justify-content:flex-end}.docs-incompatibility-banner{background-color:#e6f4ea;border:0;color:#188038;display:flex;font-size:13px;height:32px;justify-content:center;white-space:nowrap;width:100%;-ms-flex:1 1;-webkit-flex:1 1;flex:1 1}.docs-hc-ie.docs-incompatibility-banner .docs-incompatibility-banner-view-details-button,.docs-hc-edge.docs-incompatibility-banner .docs-incompatibility-banner-view-details-button,.docs-hc-gecko.docs-incompatibility-banner .docs-incompatibility-banner-view-details-button{border:1px solid transparent}.docs-incompatibility-banner-text{line-height:32px;max-width:calc(100% - 140px);overflow:hidden;text-overflow:ellipsis}.docs-incompatibility-banner-view-details-button{align-self:center;background-color:inherit;border:none;color:#188038;cursor:pointer;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;line-height:24px;margin-left:32px;min-width:42px;overflow:hidden}.docs-full-height-sidebar-placeholder{-ms-flex:0 0 0px;-webkit-flex:0 0 0px;flex:0 0 0px}.docs-full-height-sidebar-placeholder.expanded{-webkit-flex-basis:300px;-ms-flex-basis:300px;flex-basis:300px}.docs-sidebar-header-text{font-family:'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;left:20px;position:absolute;font-size:13px;font-size:var(--docs-material-font-size-normal,13px)}#docs-bars{position:relative;overflow:hidden}#docs-titlebar-container{margin-left:40px;position:relative}#docs-branding-container{height:60px;margin-top:26px;position:absolute;width:40px;z-index:1}#docs-branding-container a{display:inline-block;height:60px;width:40px}.docs-og-minibar #docs-branding-container{margin-top:0}#docs-titlebar{clear:both;font-size:18px;height:24px;padding:0;padding-top:7px;width:100%}#docs-header.docs-og-minibar #docs-titlebar{height:24px;padding-top:0}#docs-header.docs-og-minibar #docs-titlebar-container{top:-21px}#docs-header.docs-og-minibar .docs-titlebar-buttons{top:19px}.docs-exp{border-radius:6px;border:1px solid #800;color:#800;float:left;font-size:11px;margin-right:8px;padding:0 5px;text-align:center;white-space:nowrap}#docs-drive-logo{height:60px;position:absolute;width:40px;opacity:0;transition:all 125ms linear}#docs-branding-logo{height:60px;position:absolute;width:40px;transition:all 125ms linear}#docs-branding-container.docs-branding-default{background-color:#d1d1d1}#docs-branding-container.docs-branding-documents{background-color:#4285f4}#docs-branding-container.docs-branding-spreadsheets{background-color:#0f9d58}#docs-branding-container.docs-branding-presentations{background-color:#f4b400}#docs-branding-container.docs-branding-drawings{background-color:#db4437}#docs-branding-container.docs-branding-forms{background-color:#673ab7}#docs-branding-container.docs-branding-scripts{background-color:#4285f4}#docs-branding-container:not(.docs-branding-crossfade-transition-disabled):hover #docs-drive-logo{opacity:1}#docs-branding-container:not(.docs-branding-crossfade-transition-disabled):hover #docs-branding-logo{opacity:0}#docs-branding-container.docs-branding-default:hover #docs-drive-logo{opacity:0}#docs-branding-container.docs-branding-default:hover #docs-branding-logo{opacity:1}.docs-butter{text-align:center}.docs-butter-inner{border-radius:3px;font-size:13px;font-weight:500;margin:0 auto 5px;padding:5px 7px}.docs-butter-info{background:#f6bc5d;color:#222}.docs-butter-info-link{color:#0658b5}.docs-butter-warning{background:#c00;color:#fff}.docs-butter-warning-link{color:#c3d9ff}#docs-chrome-cover-container{width:100%;z-index:990}#docs-chrome-cover{height:60px}#docs-transient-bar-container{left:50%;position:absolute;top:100%;width:0}.docs-fading-toolbar-message{background-color:#fff;border:#999 solid;border-width:0px 0px 1px 0px;color:#999;font-size:28px;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;position:absolute;text-align:center}.docs-title-outer{margin-left:17px;white-space:nowrap}.docs-title-outer.docs-title-inline-rename{margin-left:12px}.docs-title{display:inline-block;outline:none}.docs-title-input{border:1px solid transparent;border-radius:2px!important;color:#fff;font-size:18px;font-variant-ligatures:no-contextual;height:20px;line-height:22px;margin:0;min-width:1px;padding:2px 7px;visibility:hidden}.docs-title-input-label{font-size:18px;font-variant-ligatures:no-contextual;line-height:22px;margin:0;overflow:hidden;padding:2px 8px;pointer-events:none;position:absolute;text-overflow:ellipsis;top:0;white-space:pre;z-index:1}.docs-title-input-label-inner{display:inline;line-height:22px}.docs-title-input:hover{border-color:#e5e5e5}.docs-title-input:focus{-webkit-appearance:none;-moz-appearance:none;border:1px solid #4d90fe!important;box-shadow:inset 0px 1px 2px rgba(0,0,0,0.1);color:#000;outline:none}.docs-title-input::-ms-clear{display:none}.docs-title-inner{color:#333;font-size:18px;max-width:600px;margin:2px 4px 1px 3px;overflow:hidden;text-overflow:ellipsis;white-space:pre}.docs-title .docs-title-untitled,.docs-title-input-label.docs-title-untitled{color:#777;font-style:italic}.docs-title-widget{font-family:'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif;height:27px;width:auto}.docs-title-widget-enabled:hover .docs-title{background-color:#eee;cursor:pointer}.docs-title-widget .docs-back-container a{display:none}.docs-title-widget:hover .docs-back-container a{display:inline-block}.docs-back-container{height:21px;opacity:0.6;padding-right:9px;margin-top:1px;vertical-align:top;width:21px}.docs-back-container:hover{opacity:0.9}.docs-titlebar-badges{vertical-align:top}.docs-titlebar-badges.docs-badges-hidden-with-width{width:0;overflow:hidden}.docs-parent-collections-container-outer{outline:none}.docs-dlp-container,.docs-star-container,.docs-folder-container,.docs-activity-indicator-container{height:29px;margin-top:2px;vertical-align:top;padding-right:2px}.office-editing-file-extension{background-color:#188038;border:1px solid transparent;border-radius:4px;box-sizing:border-box;color:#fff;cursor:default;font-family:'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:13px;height:21px;line-height:21px;margin:0 8px 0 0;padding:0 5px 0 4px;text-transform:uppercase;-webkit-font-smoothing:antialiased}.docs-templates-badge-container{vertical-align:middle}.docs-templates-badge{background-color:#5a5a5a;border-radius:16px;color:white;font-size:13px;padding:0 11px;height:24px;line-height:24px}#docs-encrypted-doc-indicator .docs-icon-encryption-shield{content:url(//ssl.gstatic.com/docs/common/material_common_sprite146_green.svg);left:0;top:-242px}#docs-dlp,#docs-star,#docs-info,#docs-folder,#docs-activity-indicator,#docs-encrypted-doc-indicator,.docs-title-save-label{margin-left:4px;outline:none}#docs-star{padding-top:1px}#docs-activity-indicator{padding-left:4px;padding-top:2px}#docs-dlp .docs-icon-img{opacity:0.45}#docs-dlp:hover .docs-icon-img{opacity:0.55}#docs-folder.goog-control-active .docs-icon-img{opacity:0.65}#docs-folder .docs-icon-img{opacity:0.60}#docs-folder.goog-control-hover .docs-icon-img{opacity:0.70}#docs-folder.goog-control-open .docs-icon-img{opacity:0.80}#docs-star.jfk-star-hover,#docs-folder.goog-control-hover .docs-icon-img{cursor:pointer}#docs-dlp,#docs-star,#docs-folder .docs-icon{vertical-align:baseline}.docs-debug-info,.docs-debug-info a{color:#777!important;font-size:8px}.docs-debug-container{margin-right:6px;margin-top:55px;vertical-align:top;font-size:8px}.docs-titlebar-buttons{font-family:'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif;padding:0 44px 0 0;position:absolute;right:0;text-align:right;top:26px;vertical-align:middle;white-space:nowrap}.docs-debug-container.docs-debug-info{display:flex;position:absolute;right:0;top:0;z-index:1000}.docs-titlebar-button{z-index:1}#docs-docos-commentsbutton{margin-right:9px}#docs-titlebar-save{text-align:center}#docs-docos-commentsbutton,#docs-titlebar-share-client-button div{height:24px;padding-bottom:3px;vertical-align:middle}#docs-titlebar-share-client-button div.jfk-button{margin-right:0}#docs-docos-commentsbutton{cursor:default}.docs-titlebar-buttons .goog-menu-button-dropdown{position:relative;top:2px;vertical-align:baseline}.docs-menubar{cursor:default;display:inline-block;font-size:13px;font-size:var(--docs-material-font-size-normal,13px);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;height:29px;margin-left:52px;outline:none;position:relative;white-space:nowrap}.docs-menubar .goog-control{padding:3px 7px 5px 7px;margin-top:2px;border:1px solid transparent;outline:none}.docs-menubar .goog-control-hover{background:#eee;border-color:#eee}.docs-menubar .goog-control-open{background:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-bottom:none;-moz-box-shadow:0 2px 4px rgba(0,0,0,0.2);-webkit-box-shadow:0 2px 4px rgba(0,0,0,0.2);box-shadow:0 2px 4px rgba(0,0,0,0.2);color:black;z-index:1003}.docs-menubar .goog-control-disabled{color:#ccc}#docs-menubars{white-space:nowrap}#docs-editor-container{background:#eee;padding:0}#docs-editor{background:#eee;outline:none}#docs-editor.companion-enabled{width:calc(100% - 56px)}.docs-gaia-disabled{color:#999;cursor:text}.docs-hide-label{display:none}.docs-title-save-label{color:#777;display:inline-block;margin-left:14px;max-width:250px;overflow:hidden;vertical-align:text-bottom;white-space:nowrap}.docs-title-save-label-with-icon .docs-title-save-label-text{max-width:calc(100% - 24px)}.docs-title-save-label-text{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;vertical-align:text-bottom;white-space:nowrap;font-size:13px;font-size:var(--docs-material-font-size-normal,13px)}.docs-title-save-label-text:hover,.docs-title-save-label-text-focused{cursor:pointer;text-decoration:underline}.docs-title-save-label-disabled>.docs-title-save-label-text:hover{cursor:auto;text-decoration:none}:not(.docs-title-save-label-disabled)>.docs-title-save-label-text-link{text-decoration:underline}.docs-material.docs-title-save-label .docs-title-save-label-icon{cursor:pointer;margin:0 0 -1px 7px;opacity:0.54;vertical-align:text-bottom}.docs-title-save-label-text:empty+.docs-title-save-label-icon{display:none}.docs-title-save-label-unsaved-changes{background-color:#fce4e2;color:#da362c;border-radius:4px;margin-bottom:-5px;margin-left:9px;padding:5px}.docs-title-save-label-unsaved-changes-button{cursor:pointer;display:none;font-weight:bold;margin-left:10px;outline:none}.docs-title-save-label-unsaved-changes .docs-title-save-label-unsaved-changes-button{display:inline-block}.docs-title-save-label-unsaved-changes-button.goog-flat-button-disabled{cursor:default;color:rgba(0,0,0,0.26)}#blob-notice-button{border:none;border-radius:4px;background-color:#fce8e6;color:#c5221f;cursor:pointer;font-family:'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;margin:0 0 0 14px;outline:0;padding:4px 8px;white-space:nowrap}.docs-hc-ie#blob-notice-button,.docs-hc-edge#blob-notice-button,.docs-hc-gecko#blob-notice-button{border:1px solid transparent}.docs-rename-dialog,.docs-edit-description-dialog{width:340px}.docs-rename-dialog .modal-dialog-userInput,.docs-edit-description-dialog .modal-dialog-userInput{width:300px}.docs-gm .docs-rename-dialog,.docs-gm .docs-edit-description-dialog{min-width:312px;width:auto;width:unset}.docs-gm .docs-rename-dialog .modal-dialog-content{font-size:12px}.docs-gm .docs-rename-dialog .modal-dialog-userInput{width:100%}#docs-help-anchor{left:30%;position:absolute}#docs-help-anchor-right{right:0;position:absolute}.docs-faux-link{color:#20c;cursor:pointer;text-decoration:underline}.docs-offscreen{position:absolute;left:-10000px;top:-10000px}.docs-offscreen-z-index{position:absolute;left:0px;top:-1px;z-index:-2;opacity:0}.modal-dialog-bg,.goog-modalpopup-bg{z-index:1002}.modal-dialog,.goog-modalpopup{z-index:1003}.goog-menu{z-index:1003}#docs-menu-shield{background-color:#fff;position:absolute;z-index:1004}.docs-menu-hide-mnemonics .goog-menuitem-mnemonic-hint{text-decoration:none}.docs-menu-hide-mnemonics .goog-menuitem-mnemonic-separator{display:none}.goog-menu.goog-menu-noaccel .apps-menuitem{padding-right:10px}.goog-menu.goog-menu-noicon .goog-menuitem.apps-menuitem{padding-left:16px}.goog-menuitem.apps-menuitem{padding:6px 10px 6px 30px;white-space:normal}.goog-menuitem-highlight.apps-menuitem{border-style:none;padding-bottom:6px;padding-top:6px}.apps-menuitem .goog-menuitem-label{padding-right:6px}.apps-menuitem .goog-menuitem-accel,.docs-gm .goog-menuitem .goog-menuitem-accel{float:right;padding:0px 0px 0px 24px;position:relative}.docs-halfhovermenuitem .goog-submenu-arrow,.apps-menuitem .goog-submenu-arrow,.docs-gm .goog-menuitem .goog-submenu-arrow{float:right;padding-left:35px;position:relative;right:0px}.apps-menuitem.goog-menuitem-ie{padding:3px 10px 20px 30px}.apps-menuitem .goog-menuitem-icon-ie{float:left;top:0em}.apps-menuitem .goog-menuitem-label-ie{float:left}.modal-dialog-content{font-size:13px;font-size:var(--docs-material-font-size-normal,13px)}input{font-family:inherit}body{background-color:white;color:black;font-weight:normal;font-size:13px;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;margin:0}.jfk-activityIndicator{display:inline-block;position:relative;direction:ltr}.jfk-activityIndicator,.jfk-activityIndicator-icon,.jfk-activityIndicator-circle,.jfk-activityIndicator-circle-transition{height:19px;width:19px}.jfk-activityIndicator-small.jfk-activityIndicator,.jfk-activityIndicator-small .jfk-activityIndicator-icon,.jfk-activityIndicator-small .jfk-activityIndicator-circle,.jfk-activityIndicator-small .jfk-activityIndicator-circle-transition{height:16px;width:16px}.jfk-activityIndicator-icon{background:url(//ssl.gstatic.com/ui/v1/activityindicator/offline.png) center no-repeat}.jfk-activityIndicator-small .jfk-activityIndicator-icon{background:url(//ssl.gstatic.com/ui/v1/activityindicator/offline_16.png) center no-repeat}.jfk-activityIndicator-icon{-webkit-transition:opacity .218s linear .44s;-moz-transition:opacity .218s linear .44s;-o-transition:opacity .218s linear .44s;transition:opacity .218s linear .44s;top:0;left:0;position:absolute;opacity:0}.jfk-activityIndicator-circle{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;top:0;left:0;position:absolute}.jfk-activityIndicator-mask{overflow:hidden;position:absolute}.jfk-activityIndicator-circle-transition{position:relative}.jfk-activityIndicator-transition{-webkit-transition:all .22s ease-in;-moz-transition:all .22s ease-in;-o-transition:all .22s ease-in;transition:all .22s ease-in}.jfk-activityIndicator-transition-second{-webkit-transition:all .22s ease-out .22s;-moz-transition:all .22s ease-out .22s;-o-transition:all .22s ease-out .22s;transition:all .22s ease-out .22s}.jfk-bubble.jfk-bubble-promo{background-color:#f9edbe;border:1px solid #f0c36d}.jfk-bubble-promo .jfk-bubble-arrowdown .jfk-bubble-arrowimplbefore,.jfk-bubble-promo .jfk-bubble-arrowup .jfk-bubble-arrowimplbefore{border-color:#f0c36d transparent}.jfk-bubble-promo .jfk-bubble-arrowdown .jfk-bubble-arrowimplafter,.jfk-bubble-promo .jfk-bubble-arrowup .jfk-bubble-arrowimplafter{border-color:#f9edbe transparent}.jfk-bubble-promo .jfk-bubble-arrowleft .jfk-bubble-arrowimplbefore,.jfk-bubble-promo .jfk-bubble-arrowright .jfk-bubble-arrowimplbefore{border-color:transparent #f0c36d}.jfk-bubble-promo .jfk-bubble-arrowleft .jfk-bubble-arrowimplafter,.jfk-bubble-promo .jfk-bubble-arrowright .jfk-bubble-arrowimplafter{border-color:transparent #f9edbe}.jfk-star{display:inline-block;height:19px;text-align:center;width:19px;padding:2px}.jfk-star:before{content:url(//ssl.gstatic.com/ui/v1/star/star4.png);content:-webkit-image-set(url(//ssl.gstatic.com/ui/v1/star/star4.png) 1x,url(//ssl.gstatic.com/ui/v1/star/star4_2x.png) 2x)}.jfk-star-hover:before{content:url(//ssl.gstatic.com/ui/v1/star/star-hover4.png);content:-webkit-image-set(url(//ssl.gstatic.com/ui/v1/star/star-hover4.png) 1x,url(//ssl.gstatic.com/ui/v1/star/star-hover4_2x.png) 2x)}.jfk-star-active:before{content:url(//ssl.gstatic.com/ui/v1/star/star-active4.png);content:-webkit-image-set(url(//ssl.gstatic.com/ui/v1/star/star-active4.png) 1x,url(//ssl.gstatic.com/ui/v1/star/star-active4_2x.png) 2x)}.jfk-star-checked:before{content:url(//ssl.gstatic.com/ui/v1/star/star-lit4.png);content:-webkit-image-set(url(//ssl.gstatic.com/ui/v1/star/star-lit4.png) 1x,url(//ssl.gstatic.com/ui/v1/star/star-lit4_2x.png) 2x)}.jfk-star-checked.jfk-star-hover:before{content:url(//ssl.gstatic.com/ui/v1/star/star-lit-hover4.png);content:-webkit-image-set(url(//ssl.gstatic.com/ui/v1/star/star-lit-hover4.png) 1x,url(//ssl.gstatic.com/ui/v1/star/star-lit-hover4_2x.png) 2x)}.jfk-star-checked.jfk-star-active:before{content:url(//ssl.gstatic.com/ui/v1/star/star-lit-active4.png);content:-webkit-image-set(url(//ssl.gstatic.com/ui/v1/star/star-lit-active4.png) 1x,url(//ssl.gstatic.com/ui/v1/star/star-lit-active4_2x.png) 2x)}.apps-share-sprite{background-image:url(//ssl.gstatic.com/docs/documents/share/images/sprite-22.svg)}.sharing-aria-region{position:absolute;top:-1000px;height:1px;overflow:hidden}.share-butterbar-container{font-family:Roboto,arial,sans-serif;font-size:13px;font-weight:bold;position:fixed;display:inline-block;padding-bottom:5px}.share-client-dialog .share-butterbar-container{font-family:arial,sans-serif}.share-butterbar-container .jfk-butterBar-shown{height:21px}.share-butterbar-top{top:23px}.share-butterbar-zindex{z-index:3021}.share-butter-icon{opacity:.55;display:inline-block;width:21px;height:21px;margin-bottom:1px;margin-top:1px;margin-right:1px;vertical-align:middle}.share-butter-message,.share-butter-link{line-height:21px}.share-butter-link,.share-butter-link:visited{color:#15c;text-decoration:none;cursor:pointer}.share-butter-link:focus{outline:none}.share-butter-link:active{color:#d14836}.share-butter-link:disabled{color:#222;cursor:default}.share-butter-copy-icon{background-position:0 -120px}.share-butter-specific-people-icon{background-position:0 -72px}.share-butter-person-link-icon{background-position:0 -294px}.share-client-dialog{max-height:100%;overflow:auto;width:auto!important;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}* html .share-client-dialog{max-height:none!important;overflow:visible!important}*:first-child+html .share-client-dialog{max-height:none!important;overflow:visible!important}.share-client-dialog .modal-dialog-content{padding:0}.share-client-dialog .modal-dialog-title{padding:0}.share-client-dialog .share-client-dialog-hidden-title{height:0;margin:0;padding:0}.share-client-dialog .modal-dialog-title{font-family:arial,sans-serif;font-weight:normal}.share-client-content-iframe{height:100%;width:100%;border:none}.share-client-dialog .modal-dialog-buttons{display:none}.share-client-error-dialog{font-family:arial,sans-serif;font-size:12px;width:400px}.share-client-loading-contents{height:99px;text-align:center;width:454px}.share-client-spinner{background-image:url(//ssl.gstatic.com/docs/documents/share/images/spinner-1.gif);display:inline-block;margin-top:41px;width:16px;height:16px}.inline-share-ui-status{font-size:12pt;font-weight:bold;height:19px;padding:5px 10px;background-color:#f1f4ff}.inline-share-ui-overlay{position:absolute;z-index:150;background-color:#fff;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"}.share-client-panel-dialog-share{height:100%;width:100%}.share-client-panel-dialog-overlay{position:absolute;z-index:150}.share-client-offscreen{position:absolute!important;left:-10000px!important;top:-10000px!important}.share-client-loading-dialog{font-family:arial,sans-serif}.share-client-debug{display:none;position:absolute;bottom:0;right:0;color:#777;font-size:10px}.team-drive-share-client-dialog{border:none;border-radius:2px;box-shadow:0px 24px 38px 3px rgba(0,0,0,0.14),0px 9px 46px 8px rgba(0,0,0,0.12),0px 11px 15px -7px rgba(0,0,0,0.2);overflow:hidden;padding:0}.full-screen-share-client-dialog{background-color:transparent!important;border:none!important;height:100vh;overflow:hidden;padding:0!important;width:100vw!important}.full-screen-share-client-dialog .modal-dialog-content{background:transparent;height:100%;width:100%}.modal-dialog.share-client-dialog.team-drive-share-client-dialog{padding:0}.full-screen-share-client-dialog .modal-dialog-title,.team-drive-share-client-dialog .modal-dialog-title{display:none}.jfk-tooltip{z-index:30000}.scb-container,.scb-icon{display:inline-block}.scb-button-icon{margin:-3px 2px 0px -5px;vertical-align:middle!important}.scb-tooltip-contents{color:#fff;font-size:13px;max-width:300px}.scb-tooltip-title{font-size:14px;font-weight:bold}.scb-tooltip-text{font-weight:normal}.scb-tooltip-icon-container{width:25px;vertical-align:top}.scb-tooltip-separator{border-top:1px solid #555555;margin:2px 0}.jfk-button-standard .scb-button-icon{opacity:.70}.jfk-button-standard.jfk-button-checked .scb-button-icon,.jfk-button-standard.jfk-button-selected .scb-button-icon,.jfk-button-standard.jfk-button-hover .scb-button-icon{opacity:0.9}.jfk-button-standard.jfk-button-disabled .scb-button-icon{opacity:0.333}.scb-public-icon-white,.scb-unlisted-icon-white,.scb-domain-public-icon-white,.scb-domain-unlisted-icon-white,.scb-privately-shared-icon-white,.scb-private-icon-white,.scb-invalid-icon-white,.scb-dlp-icon{width:21px;height:21px;background-repeat:no-repeat;vertical-align:bottom}.scb-public-icon-white{background-position:0 -802px}.scb-unlisted-icon-white{background-position:0 -48px}.scb-domain-public-icon-white{background-position:0 -243px}.scb-domain-unlisted-icon-white{background-position:0 -599px}.scb-privately-shared-icon-white{background-position:0 -318px}.scb-private-icon-white{background-position:0 -219px}.scb-invalid-icon-white{background-position:0 -623px}.scb-dlp-icon{background-position:0 -898px}.docs-branding-presentations .scb-public-icon-white{background-position:0 -671px}.docs-branding-presentations .scb-unlisted-icon-white{background-position:0 -294px}.docs-branding-presentations .scb-domain-public-icon-white{background-position:0 -850px}.docs-branding-presentations .scb-domain-unlisted-icon-white{background-position:0 -551px}.docs-branding-presentations .scb-privately-shared-icon-white{background-position:0 -72px}.docs-branding-presentations .scb-private-icon-white{background-position:0 -575px}.docs-branding-presentations .scb-invalid-icon-white{background-position:0 -826px}.docs-branding-icon{direction:ltr;text-align:left;height:60px;overflow:hidden;vertical-align:middle;width:40px}.docs-branding-icon-img:before{content:url(//ssl.gstatic.com/docs/common/branding_sprite1.svg)}.docs-branding-icon-img{position:absolute}.docs-branding-icon-drive,.docs-branding-icon-default{left:0;top:0}.docs-branding-icon-documents{left:0;top:-180px}.docs-branding-icon-spreadsheets{left:0;top:-300px}.docs-branding-icon-presentations{left:0;top:-360px}.docs-branding-icon-drawings{left:0;top:-60px}.docs-branding-icon-forms{left:0;top:-120px}.docs-branding-icon-scripts{left:0;top:-240px}.docs-icon{direction:ltr;text-align:left;height:21px;overflow:hidden;vertical-align:middle;width:21px}.docs-icon-img:before{content:url(//ssl.gstatic.com/docs/common/jfk_sprite186.png)}.docs-icon-img{*background:url(//ssl.gstatic.com/docs/common/jfk_sprite186.png)}.docs-icon-img-legacy{background:url(//ssl.gstatic.com/docs/common/jfk_sprite186.png)}.docs-icon-img-container{height:4167px;position:absolute;width:42px}.goog-color-menu-button-indicator .docs-icon{height:19px}.goog-menuitem-icon .docs-icon-img-container{opacity:.70}.goog-menuitem-icon .docs-icon-document,.goog-menuitem-icon .docs-icon-punch,.goog-menuitem-icon .docs-icon-presentation,.goog-menuitem-icon .docs-icon-spreadsheet,.goog-menuitem-icon .docs-icon-form,.goog-menuitem-icon .docs-icon-drawing,.goog-menuitem-icon .docs-icon-script,.goog-menuitem-icon .docs-icon-site{opacity:1}.docs-icon-save{left:0;top:-1077px}.docs-icon-print{left:0;top:-528px}.docs-icon-undo,.docs-icon-redo-rtl{left:0;top:-759px}.docs-icon-redo,.docs-icon-undo-rtl{left:-21px;top:-1434px}.docs-icon-copy{left:0;top:-2694px}.docs-icon-cut{left:0;top:-2085px}.docs-icon-paste{left:-21px;top:-528px}.docs-icon-document{left:-21px;top:-1392px}.docs-icon-presentation{left:-21px;top:-444px}.docs-icon-punch{left:-21px;top:-444px}.docs-icon-spreadsheet{left:-21px;top:-1014px}.docs-icon-form{left:-21px;top:-1140px}.docs-icon-form-black{left:0;top:-1203px}.docs-icon-drawing{left:0;top:-4044px}.docs-icon-site{left:-21px;top:-2442px}.docs-icon-drawing-black{left:-21px;top:-2904px}.docs-icon-excel{left:-21px;top:-2253px}.docs-icon-powerpoint{left:-21px;top:-2043px}.docs-icon-word{left:0;top:-2778px}.docs-icon-script{left:-21px;top:-3393px}.docs-icon-code{left:-21px;top:-3393px}.docs-icon-insert-script{left:-21px;top:-2673px}.docs-icon-gadget{left:0;top:-2295px}.docs-icon-image{left:0;top:-2442px}.docs-icon-clipboard{left:0;top:-864px}.docs-icon-bold{left:0;top:-1035px}.docs-icon-italic{left:0;top:-3540px}.docs-icon-text-color{left:-21px;top:-2148px}.docs-icon-align-left{left:0;top:-3750px}.docs-icon-align-center{left:-21px;top:-1623px}.docs-icon-align-right{left:-21px;top:-2274px}.docs-icon-align-justify{left:0;top:-2253px}.docs-icon-align-shapes-left{left:-21px;top:-591px}.docs-icon-align-shapes-center{left:0;top:-1140px}.docs-icon-align-shapes-right{left:0;top:-4104px}.docs-icon-align-shapes-top{left:0;top:-2463px}.docs-icon-align-shapes-middle{left:0;top:-801px}.docs-icon-align-shapes-bottom{left:0;top:-402px}.docs-icon-distribute-shapes-horizontally{left:-21px;top:-1371px}.docs-icon-distribute-shapes-vertically{left:-21px;top:-3687px}.docs-icon-valign-top{left:0;top:-3771px}.docs-icon-valign-middle{left:0;top:-297px}.docs-icon-valign-bottom{left:-21px;top:-3582px}.docs-icon-list-number{left:0;top:-3624px}.docs-icon-list-bullet{left:0;top:-2232px}.docs-icon-indent{left:0;top:-3876px}.docs-icon-outdent{left:-21px;top:-864px}.docs-icon-line-spacing{left:-21px;top:-1497px}.docs-icon-columns{left:0;top:-1056px}.docs-icon-underline{left:0;top:-675px}.docs-icon-text-bgcolor{left:-21px;top:-192px}.docs-icon-textbox{left:-21px;top:-1329px}.docs-icon-shapes{left:-21px;top:-2127px}.docs-icon-line-width{left:-21px;top:-2358px}.docs-icon-add-trendline{left:-21px;top:-87px}.docs-icon-data-label{left:0;top:-1602px}.docs-icon-next{left:-21px;top:-2988px}.docs-icon-previous{left:0;top:-1434px}.docs-icon-no-color{left:-21px;top:-2106px}.docs-icon-fill-color{left:0;top:-3645px}.docs-icon-line-color{left:-21px;top:-2694px}.docs-icon-line-type{left:0;top:-2967px}.docs-icon-table{left:0;top:-3351px}.docs-icon-comment{left:-21px;top:-66px}.docs-icon-comment-blank{left:0;top:-3393px}.docs-icon-comment-blank-highlighted{left:0;top:-1560px}.docs-icon-insert-comment{left:-21px;top:-66px}.docs-icon-chart{left:0;top:-423px}.docs-icon-list-number-rtl{left:-21px;top:-2064px}.docs-icon-list-bullet-rtl{left:-21px;top:-3918px}.docs-icon-indent-rtl{left:0;top:-1497px}.docs-icon-outdent-rtl{left:0;top:-2820px}.docs-icon-line-spacing-rtl{left:-21px;top:-2085px}.docs-icon-text-ltr{left:0;top:-192px}.docs-icon-text-rtl{left:-21px;top:-2421px}.docs-icon-sheet-rtl{left:-21px;top:-972px}.docs-icon-share{left:0;top:-3201px}.docs-icon-subscript{left:0;top:-3456px}.docs-icon-superscript{left:-21px;top:-3960px}.docs-icon-strikethrough{left:0;top:-486px}.docs-icon-clear-formatting{left:0;top:-1707px}.docs-icon-link{left:-21px;top:-4125px}.docs-icon-special-character{left:-21px;top:-696px}.docs-icon-close-white{left:-21px;top:-2463px}.docs-icon-close-small{left:-21px;top:-3309px}.docs-icon-close-thin{left:-21px;top:-2022px}.docs-icon-paint-format{left:0;top:-591px}.docs-icon-video{left:0;top:-3414px}.docs-icon-reload{left:-21px;top:-4146px}.docs-icon-reload-rtl{left:0;top:-3960px}.docs-icon-insert-page-break{left:-21px;top:-3666px}.docs-icon-close{left:-21px;top:-654px}.docs-icon-check{left:-21px;top:-1791px}.docs-icon-up{left:-21px;top:-3159px}.docs-icon-down{left:-21px;top:-402px}.docs-icon-add-page{left:0;top:-1959px}.docs-icon-email{left:-21px;top:-108px}.docs-icon-insert-equation{left:-21px;top:-2400px}.docs-icon-insert-horizontal-line{left:-21px;top:-3117px}.docs-icon-tabstop-center{left:0;top:-3792px}.docs-icon-tabstop-center-bottom{left:0;top:-339px}.docs-icon-tabstop-left{left:0;top:-255px}.docs-icon-tabstop-right{left:-21px;top:-1707px}.docs-icon-border-all{left:0;top:-1329px}.docs-icon-border-right{left:0;top:-45px}.docs-icon-border-left{left:-21px;top:-1098px}.docs-icon-border-top{left:0;top:-4083px}.docs-icon-border-bottom{left:-21px;top:-45px}.docs-icon-border-outside{left:-21px;top:-213px}.docs-icon-border-inside{left:-21px;top:-2001px}.docs-icon-border-none{left:0;top:-885px}.docs-icon-border-horizontal{left:0;top:-1245px}.docs-icon-border-vertical{left:0;top:-1644px}.docs-icon-merge{left:0;top:-2022px}.docs-icon-wrap{left:-21px;top:-1749px}.docs-icon-autofilter{left:0;top:-4125px}.docs-icon-autofilter-filled{left:-21px;top:-381px}.docs-icon-insert-function{left:0;top:-3477px}.docs-icon-insert-formula{left:0;top:-738px}.docs-icon-folder-shared{left:0;top:-3117px}.docs-icon-folder-outline{left:0;top:-381px}.docs-icon-folder-outline-hover{left:0;top:-2673px}.docs-icon-folder-outline-pressed{left:-21px;top:-171px}.docs-icon-folder-solid{left:0;top:-2568px}.docs-icon-drive{left:-21px;top:-3624px}.docs-icon-drive-grey{left:-21px;top:-1077px}.docs-icon-drive-grey-hover{left:0;top:-2526px}.docs-icon-drive-grey-pressed{left:0;top:-2358px}.docs-icon-drive-hover{left:0;top:-1665px}.docs-icon-drive-pressed{left:-21px;top:-150px}.docs-icon-drive-large{left:0;top:-1266px}.docs-icon-back{left:0;top:-822px}.docs-icon-back-rtl{left:-21px;top:-3834px}.docs-icon-arrow-more{left:0;top:-276px}.docs-icon-arrow-more-rtl{left:0;top:-993px}.docs-icon-search-this-document{left:0;top:-24px}.docs-icon-arrow-dropdown{left:0;top:-3981px}.docs-icon-word-art{left:-21px;top:-4083px}.docs-icon-delete-x{left:0;top:-2904px}.docs-icon-settings{left:0;top:-780px}.docs-icon-drive-large-wrapper{width:42px;height:42px}.docs-icon-plus{left:0;top:-1392px}.docs-icon-plus-white{left:0;top:-3096px}.docs-icon-alert{left:-21px;top:-3180px}.docs-icon-trash{left:0;top:-507px}.docs-icon-locked{left:-21px;top:-3729px}.docs-icon-unlocked{left:0;top:-2589px}.docs-icon-add-fonts{left:-21px;top:-507px}.docs-icon-enter-compact{left:0;top:-2736px}.docs-icon-exit-compact{left:0;top:-1539px}.docs-icon-mode-edit{left:0;top:-213px}.docs-icon-mode-review{left:-21px;top:-318px}.docs-icon-mode-review-white{left:0;top:-3372px}.docs-icon-mode-view{left:0;top:-654px}.docs-icon-mode-view-white{left:0;top:-3330px}.docs-icon-chat{left:-21px;top:-2946px}.docs-icon-star{left:0;top:-1182px}.docs-icon-duplicate{left:-21px;top:-3855px}.docs-icon-file{left:0;top:-2862px}.docs-icon-opacity{left:0;top:-3561px}.docs-icon-label-slant{left:0;top:-2106px}.docs-icon-point-size{left:-21px;top:-549px}.docs-icon-question{left:0;top:-3687px}.docs-icon-vertical-gridlines{left:-21px;top:-2631px}.docs-icon-left-axis{left:-21px;top:-1686px}.docs-icon-right-axis{left:0;top:-3897px}.docs-icon-left-axis-gridlines{left:-21px;top:-3561px}.docs-icon-right-axis-gridlines{left:0;top:-3729px}.docs-icon-reset{left:0;top:-2043px}.docs-icon-drag-move{left:0;top:-3435px}.docs-icon-col-dragger{left:-21px;top:-927px}.docs-icon-chrome-store{left:-21px;top:-3051px}.docs-icon-fit-area{left:0;top:-3603px}.docs-icon-zoom-out{left:-21px;top:-2526px}.docs-icon-zoom-tool{left:0;top:-2610px}.docs-icon-download{left:0;top:-2946px}.docs-icon-fusion-table{left:-21px;top:-2841px}.docs-icon-spreadsheet-sink{left:0;top:-2064px}.docs-icon-send-responses{left:0;top:-234px}.docs-icon-liveform{left:-21px;top:-423px}.docs-icon-ellipsis{left:0;top:-1833px}.docs-icon-html-preview{left:-21px;top:-2505px}.docs-icon-grid{left:-21px;top:-3264px}.docs-icon-add-animation{left:0;top:-150px}.docs-icon-playhead{left:0;top:-444px}.docs-icon-playhead-rtl{left:0;top:-3519px}.docs-icon-unsupported{left:0;top:-906px}.docs-icon-calendar{left:0;top:-2001px}.docs-zippy-closed{left:0;top:-1728px}.docs-zippy-open{left:-21px;top:-2967px}.docs-icon-bookmark{left:-21px;top:-1182px}.docs-icon-heading{left:0;top:-3030px}.docs-icon-file-blue{left:-21px;top:-1350px}.docs-icon-web-result{left:0;top:-1518px}.docs-icon-mic{left:-21px;top:-1917px}.docs-icon-paragraph{left:0;top:-2274px}.docs-icon-bookmark-black{left:0;top:-1770px}.docs-icon-web-result-blue{left:0;top:-465px}.docs-icon-popout{left:-21px;top:-570px}.docs-icon-checkbox{left:-21px;top:-3414px}.docs-icon-checkbox-type{left:-21px;top:-1308px}.docs-icon-dropdown-type{left:-21px;top:-1644px}.docs-icon-grid-type{left:0;top:-3498px}.docs-icon-image-type{left:0;top:-2925px}.docs-icon-radio-type{left:0;top:-2505px}.docs-icon-scale-type{left:-21px;top:-2883px}.docs-icon-text-type{left:-21px;top:-3009px}.docs-icon-time-type{left:0;top:-972px}.docs-icon-insert-text-block{left:0;top:-3834px}.docs-icon-accepting-responses-on{left:-21px;top:-1119px}.docs-icon-accepting-responses-off{left:0;top:-1371px}.docs-icon-decimal-increase{left:0;top:-3918px}.docs-icon-decimal-decrease{left:0;top:-1308px}.docs-icon-settings-white{left:-21px;top:-3498px}.docs-icon-no-symbol{left:0;top:-2757px}.docs-icon-crop{left:0;top:-3708px}.docs-icon-green-check{left:0;top:-3051px}.docs-icon-font-size{left:0;top:-1413px}.docs-icon-reset-image{left:0;top:-2421px}.docs-icon-r-squared{left:0;top:-2169px}.docs-icon-graph-legend{left:0;top:-2883px}.docs-icon-cast{left:0;top:-1917px}.docs-icon-wrap-overflow{left:-21px;top:-24px}.docs-icon-wrap-wrap{left:-21px;top:-1602px}.docs-icon-wrap-clip{left:0;top:-3309px}.docs-icon-highlights{left:-21px;top:-3939px}.docs-icon-green-back{left:0;top:-360px}.docs-icon-arrow-back-white{left:0;top:-3072px}.docs-icon-arrow-back-white-rtl{left:0;top:-630px}.docs-icon-help{left:0;top:-1875px}.docs-icon-highlight-green{left:-21px;top:-3201px}.docs-icon-explore-black{left:-21px;top:-2799px}.docs-icon-explore-black-padded{left:0;top:-3180px}.docs-icon-explore-green{left:0;top:-3813px}.docs-icon-explore-white{left:0;top:-1686px}.docs-icon-insert-autovis-chart{left:-21px;top:-738px}.docs-icon-insert-autovis-chart-white{left:0;top:-1455px}.docs-icon-zoom-in{left:0;top:-2316px}.docs-icon-thumb-up{left:0;top:-1098px}.docs-icon-thumb-down{left:0;top:-2547px}.docs-icon-dlp-warning{left:0;top:-3582px}.docs-icon-dogfood{left:0;top:-4065px}.docs-icon-add-to-drive{left:0;top:-3939px}.docs-icon-paste-without-formatting{left:-21px;top:-1980px}.docs-icon-qanda{left:-21px;top:-2610px}.docs-icon-update-chart{left:0;top:-1161px}.docs-icon-arrow-back-dark{left:0;top:-3285px}.docs-icon-arrow-back-dark-rtl{left:0;top:-948px}.docs-icon-open-in-external{left:-21px;top:-759px}.docs-icon-unlink{left:0;top:-1350px}.docs-icon-bar-chart{left:-21px;top:-2337px}.docs-icon-column-chart{left:0;top:-1014px}.docs-icon-line-chart{left:0;top:-549px}.docs-icon-pie-chart{left:-21px;top:-1413px}.docs-icon-pie-chart-outline{height:24px;left:0;top:0;width:24px}.docs-icon-named-range{left:0;top:-3243px}.docs-icon-clock{left:0;top:-696px}.docs-icon-cancel{left:-21px;top:-255px}.docs-icon-arrow-line-tool{left:0;top:-4002px}.docs-icon-arrow-tilted{left:-21px;top:-2190px}.docs-icon-unsupported-black{left:-21px;top:-3222px}.docs-icon-text-rotation{left:-21px;top:-2379px}.docs-icon-text-rotation-up{left:0;top:-2148px}.docs-icon-text-rotation-down{left:0;top:-3264px}.docs-icon-text-rotation-angleup{left:-21px;top:-3030px}.docs-icon-text-rotation-angledown{left:-21px;top:-3813px}.docs-icon-text-rotation-vertical{left:0;top:-717px}.docs-icon-text-rotation-none{left:-21px;top:-2652px}.docs-icon-keep-lightbulb{left:-21px;top:-717px}.docs-icon-update-table{left:-21px;top:-3540px}.docs-icon-update-slide{left:-21px;top:-1560px}.docs-icon-overflow-three-dots{left:-21px;top:-2232px}.docs-icon-restore{left:-21px;top:-4002px}.docs-icon-paragraph-border-between{left:0;top:-129px}.docs-icon-paragraph-border-bottom{left:0;top:-1854px}.docs-icon-paragraph-border-left{left:-21px;top:-3876px}.docs-icon-paragraph-border-right{left:-21px;top:-2295px}.docs-icon-paragraph-border-top{left:0;top:-3666px}.docs-icon-diagram-white{left:-21px;top:-1875px}.docs-icon-drive-black{left:-21px;top:-1812px}.docs-icon-file-upload{left:0;top:-2379px}.docs-icon-photos{left:-21px;top:-906px}.docs-icon-keyboard{left:0;top:-318px}.docs-icon-dogfood-white{left:0;top:-2715px}.docs-icon-hierarchy{left:-21px;top:-843px}.docs-icon-timeline{left:0;top:-3138px}.docs-icon-process{left:0;top:-2841px}.docs-icon-transition{left:0;top:-612px}.docs-icon-mask{left:0;top:-1224px}.docs-icon-visibility-off{left:0;top:-2337px}.docs-icon-volume-up{left:-21px;top:-3372px}.docs-icon-camera{left:-21px;top:-2484px}.docs-icon-pivot-table{left:0;top:-1623px}.docs-icon-insert-pivot-table{left:0;top:-3159px}@media screen and (-webkit-min-device-pixel-ratio:2){.docs-icon-img{content:url(//ssl.gstatic.com/docs/common/jfk_sprite_hdpi124.png)}.docs-icon-img-container{height:4380px;position:absolute;width:42px}.docs-icon-save{left:0;top:-3870px}.docs-icon-print{left:0;top:-1578px}.docs-icon-undo,.docs-icon-redo-rtl{left:0;top:-3282px}.docs-icon-redo,.docs-icon-undo-rtl{left:-21px;top:-1137px}.docs-icon-copy{left:-21px;top:-3282px}.docs-icon-cut{left:0;top:-360px}.docs-icon-paste{left:-21px;top:-594px}.docs-icon-document{left:0;top:-42px}.docs-icon-presentation{left:-21px;top:-2292px}.docs-icon-punch{left:-21px;top:-2292px}.docs-icon-spreadsheet{left:-21px;top:-510px}.docs-icon-form{left:-21px;top:-990px}.docs-icon-form-black{left:-21px;top:-3660px}.docs-icon-drawing{left:-21px;top:-3828px}.docs-icon-site{left:0;top:-3177px}.docs-icon-drawing-black{left:0;top:-3618px}.docs-icon-excel{left:0;top:-84px}.docs-icon-powerpoint{left:-21px;top:-3492px}.docs-icon-word{left:-21px;top:-864px}.docs-icon-script{left:-21px;top:-2862px}.docs-icon-code{left:-21px;top:-2862px}.docs-icon-insert-script{left:-21px;top:-3261px}.docs-icon-gadget{left:0;top:-2145px}.docs-icon-image{left:0;top:-4146px}.docs-icon-clipboard{left:-21px;top:-1683px}.docs-icon-bold{left:-21px;top:-1200px}.docs-icon-italic{left:-21px;top:-759px}.docs-icon-text-color{left:0;top:-738px}.docs-icon-align-left{left:0;top:-510px}.docs-icon-align-center{left:0;top:-4083px}.docs-icon-align-right{left:-21px;top:-3198px}.docs-icon-align-justify{left:0;top:-2061px}.docs-icon-align-shapes-left{left:-21px;top:-1704px}.docs-icon-align-shapes-center{left:0;top:-2799px}.docs-icon-align-shapes-right{left:0;top:-615px}.docs-icon-align-shapes-top{left:0;top:-1053px}.docs-icon-align-shapes-middle{left:-21px;top:-2355px}.docs-icon-align-shapes-bottom{left:0;top:-3345px}.docs-icon-distribute-shapes-horizontally{left:-21px;top:-105px}.docs-icon-distribute-shapes-vertically{left:0;top:-3093px}.docs-icon-valign-top{left:0;top:-2967px}.docs-icon-valign-middle{left:0;top:-318px}.docs-icon-valign-bottom{left:-21px;top:-2208px}.docs-icon-list-number{left:0;top:-2757px}.docs-icon-list-bullet{left:-21px;top:-3870px}.docs-icon-indent{left:-21px;top:-1431px}.docs-icon-outdent{left:-21px;top:-4104px}.docs-icon-line-spacing{left:-21px;top:-4041px}.docs-icon-columns{left:0;top:-2463px}.docs-icon-underline{left:-21px;top:-1494px}.docs-icon-text-bgcolor{left:-21px;top:-2187px}.docs-icon-textbox{left:0;top:-1557px}.docs-icon-shapes{left:-21px;top:0}.docs-icon-line-width{left:0;top:-2862px}.docs-icon-add-trendline{left:0;top:-3051px}.docs-icon-data-label{left:0;top:-4314px}.docs-icon-next{left:-21px;top:-2271px}.docs-icon-previous{left:0;top:-2208px}.docs-icon-no-color{left:0;top:-1095px}.docs-icon-fill-color{left:0;top:-2355px}.docs-icon-line-color{left:-21px;top:-381px}.docs-icon-line-type{left:0;top:-1116px}.docs-icon-table{left:-21px;top:-1872px}.docs-icon-comment{left:0;top:-1326px}.docs-icon-comment-blank{left:0;top:-4167px}.docs-icon-comment-blank-highlighted{left:0;top:-489px}.docs-icon-insert-comment{left:0;top:-1326px}.docs-icon-chart{left:0;top:-1431px}.docs-icon-list-number-rtl{left:-21px;top:-2988px}.docs-icon-list-bullet-rtl{left:0;top:-1284px}.docs-icon-indent-rtl{left:0;top:-1977px}.docs-icon-outdent-rtl{left:0;top:-63px}.docs-icon-line-spacing-rtl{left:0;top:-1221px}.docs-icon-text-ltr{left:-21px;top:-4188px}.docs-icon-text-rtl{left:0;top:-678px}.docs-icon-sheet-rtl{left:-21px;top:-234px}.docs-icon-share{left:0;top:-105px}.docs-icon-subscript{left:0;top:-2103px}.docs-icon-superscript{left:0;top:-4041px}.docs-icon-strikethrough{left:0;top:-3135px}.docs-icon-clear-formatting{left:0;top:-1389px}.docs-icon-link{left:0;top:-4335px}.docs-icon-special-character{left:-21px;top:-2082px}.docs-icon-close-white{left:-21px;top:-1242px}.docs-icon-close-small{left:0;top:-3996px}.docs-icon-close-thin{left:0;top:-2988px}.docs-icon-paint-format{left:0;top:-2694px}.docs-icon-video{left:-21px;top:-2019px}.docs-icon-reload{left:-21px;top:-3975px}.docs-icon-reload-rtl{left:-21px;top:-1620px}.docs-icon-insert-page-break{left:-21px;top:-3639px}.docs-icon-close{left:0;top:-1137px}.docs-icon-check{left:0;top:-1242px}.docs-icon-up{left:-21px;top:-531px}.docs-icon-down{left:-21px;top:-3723px}.docs-icon-add-page{left:-21px;top:-1788px}.docs-icon-email{left:-21px;top:-3156px}.docs-icon-insert-equation{left:-21px;top:-3072px}.docs-icon-insert-horizontal-line{left:-21px;top:-2418px}.docs-icon-tabstop-center{left:0;top:-1872px}.docs-icon-tabstop-center-bottom{left:-21px;top:-780px}.docs-icon-tabstop-left{left:-21px;top:-2757px}.docs-icon-tabstop-right{left:0;top:-1515px}.docs-icon-border-all{left:0;top:-1179px}.docs-icon-border-right{left:0;top:-1683px}.docs-icon-border-left{left:-21px;top:-678px}.docs-icon-border-top{left:0;top:-2568px}.docs-icon-border-bottom{left:-21px;top:-822px}.docs-icon-border-outside{left:0;top:-3387px}.docs-icon-border-inside{left:-21px;top:-3345px}.docs-icon-border-none{left:-21px;top:-189px}.docs-icon-border-horizontal{left:0;top:-1305px}.docs-icon-border-vertical{left:-21px;top:-1662px}.docs-icon-merge{left:-21px;top:-3534px}.docs-icon-wrap{left:-21px;top:-4146px}.docs-icon-autofilter{left:0;top:-4272px}.docs-icon-autofilter-filled{left:0;top:-3660px}.docs-icon-insert-function{left:0;top:-1368px}.docs-icon-insert-formula{left:0;top:-3681px}.docs-icon-folder-shared{left:-21px;top:-3240px}.docs-icon-folder-outline{left:0;top:-1200px}.docs-icon-folder-outline-hover{left:-21px;top:-1914px}.docs-icon-folder-outline-pressed{left:0;top:-885px}.docs-icon-folder-solid{left:-21px;top:-573px}.docs-icon-drive{left:0;top:-2334px}.docs-icon-drive-grey{left:0;top:-4125px}.docs-icon-drive-grey-hover{left:-18px;top:-3786px}.docs-icon-drive-grey-pressed{left:0;top:-573px}.docs-icon-drive-hover{left:-21px;top:-2334px}.docs-icon-drive-pressed{left:0;top:-3450px}.docs-icon-drive-large{left:0;top:-3576px}.docs-icon-back{left:0;top:-4293px}.docs-icon-back-rtl{left:0;top:-2547px}.docs-icon-arrow-more{left:-21px;top:-3891px}.docs-icon-arrow-more-rtl{left:0;top:-531px}.docs-icon-search-this-document{left:0;top:-423px}.docs-icon-arrow-dropdown{left:-21px;top:-969px}.docs-icon-word-art{left:-21px;top:-297px}.docs-icon-delete-x{left:0;top:-3891px}.docs-icon-settings{left:-21px;top:-4335px}.docs-icon-drive-large-wrapper{width:42px;height:42px}.docs-icon-plus{left:0;top:-1998px}.docs-icon-plus-white{left:0;top:-2082px}.docs-icon-alert{left:-21px;top:-3408px}.docs-icon-trash{left:-21px;top:-3303px}.docs-icon-locked{left:0;top:-1410px}.docs-icon-unlocked{left:0;top:-1704px}.docs-icon-add-fonts{left:-21px;top:-318px}.docs-icon-enter-compact{left:0;top:-126px}.docs-icon-exit-compact{left:-21px;top:-2967px}.docs-icon-mode-edit{left:-21px;top:-3030px}.docs-icon-mode-review{left:0;top:-468px}.docs-icon-mode-review-white{left:0;top:-255px}.docs-icon-mode-view{left:-21px;top:-1998px}.docs-icon-mode-view-white{left:0;top:-1074px}.docs-icon-chat{left:-21px;top:-2040px}.docs-icon-star{left:0;top:-4188px}.docs-icon-duplicate{left:-21px;top:-1452px}.docs-icon-file{left:0;top:-1452px}.docs-icon-opacity{left:-21px;top:-2694px}.docs-icon-label-slant{left:-21px;top:-1116px}.docs-icon-point-size{left:0;top:-2376px}.docs-icon-question{left:-21px;top:-657px}.docs-icon-vertical-gridlines{left:0;top:-1788px}.docs-icon-left-axis{left:-21px;top:-3765px}.docs-icon-right-axis{left:0;top:-1662px}.docs-icon-left-axis-gridlines{left:0;top:-657px}.docs-icon-right-axis-gridlines{left:-21px;top:-4083px}.docs-icon-reset{left:-21px;top:-1032px}.docs-icon-drag-move{left:0;top:-3555px}.docs-icon-col-dragger{left:-21px;top:-1767px}.docs-icon-chrome-store{left:0;top:-3492px}.docs-icon-fit-area{left:0;top:-3975px}.docs-icon-zoom-out{left:0;top:-2589px}.docs-icon-zoom-tool{left:0;top:-3828px}.docs-icon-download{left:-21px;top:-423px}.docs-icon-fusion-table{left:-21px;top:-3954px}.docs-icon-spreadsheet-sink{left:0;top:-3030px}.docs-icon-send-responses{left:-21px;top:-2145px}.docs-icon-liveform{left:0;top:-3912px}.docs-icon-ellipsis{left:0;top:-3471px}.docs-icon-html-preview{left:-21px;top:-3807px}.docs-icon-grid{left:0;top:-990px}.docs-icon-add-animation{left:0;top:-2484px}.docs-icon-playhead{left:0;top:-2229px}.docs-icon-playhead-rtl{left:0;top:-843px}.docs-icon-unsupported{left:0;top:-1011px}.docs-icon-calendar{left:-21px;top:-3912px}.docs-zippy-closed{left:-21px;top:-1347px}.docs-zippy-open{left:0;top:-2673px}.docs-icon-bookmark{left:-21px;top:-2397px}.docs-icon-heading{left:0;top:-3408px}.docs-icon-file-blue{left:0;top:-2418px}.docs-icon-web-result{left:0;top:-3072px}.docs-icon-mic{left:0;top:-4251px}.docs-icon-paragraph{left:0;top:-339px}.docs-icon-bookmark-black{left:0;top:-147px}.docs-icon-web-result-blue{left:-21px;top:-1011px}.docs-icon-popout{left:0;top:-906px}.docs-icon-checkbox{left:-21px;top:-4062px}.docs-icon-checkbox-type{left:0;top:-3429px}.docs-icon-dropdown-type{left:0;top:-189px}.docs-icon-grid-type{left:-21px;top:-2946px}.docs-icon-image-type{left:0;top:-3240px}.docs-icon-radio-type{left:0;top:-3303px}.docs-icon-scale-type{left:0;top:-2715px}.docs-icon-text-type{left:-21px;top:-2736px}.docs-icon-time-type{left:-21px;top:-552px}.docs-icon-insert-text-block{left:-21px;top:-3681px}.docs-icon-accepting-responses-on{left:0;top:-1347px}.docs-icon-accepting-responses-off{left:0;top:-2505px}.docs-icon-decimal-increase{left:-21px;top:-1536px}.docs-icon-decimal-decrease{left:0;top:-2271px}.docs-icon-settings-white{left:0;top:-1893px}.docs-icon-no-symbol{left:0;top:-1956px}.docs-icon-crop{left:0;top:-2778px}.docs-icon-green-check{left:0;top:-3513px}.docs-icon-font-size{left:0;top:-1032px}.docs-icon-reset-image{left:-21px;top:-3366px}.docs-icon-r-squared{left:0;top:-3933px}.docs-icon-graph-legend{left:0;top:-3849px}.docs-icon-cast{left:0;top:-2019px}.docs-icon-wrap-overflow{left:0;top:-948px}.docs-icon-wrap-wrap{left:-21px;top:-2124px}.docs-icon-wrap-clip{left:0;top:-3639px}.docs-icon-highlights{left:0;top:-3744px}.docs-icon-green-back{left:-21px;top:-2715px}.docs-icon-arrow-back-white{left:0;top:-4017px}.docs-icon-arrow-back-white-rtl{left:0;top:-2439px}.docs-icon-help{left:0;top:-1851px}.docs-icon-highlight-green{left:0;top:-1536px}.docs-icon-explore-black{left:0;top:-1473px}.docs-icon-explore-black-padded{left:0;top:-3114px}.docs-icon-explore-green{left:0;top:-381px}.docs-icon-explore-white{left:0;top:-3534px}.docs-icon-insert-autovis-chart{left:0;top:-2610px}.docs-icon-insert-autovis-chart-white{left:0;top:-297px}.docs-icon-zoom-in{left:-21px;top:-1389px}.docs-icon-thumb-up{left:-21px;top:-339px}.docs-icon-thumb-down{left:-21px;top:-4251px}.docs-icon-dlp-warning{left:-21px;top:-255px}.docs-icon-dogfood{left:0;top:-3786px}.docs-icon-add-to-drive{left:0;top:-21px}.docs-icon-paste-without-formatting{left:0;top:-1158px}.docs-icon-qanda{left:0;top:-3198px}.docs-icon-update-chart{left:0;top:-594px}.docs-icon-arrow-back-dark{left:0;top:-210px}.docs-icon-arrow-back-dark-rtl{left:0;top:-444px}.docs-icon-open-in-external{left:0;top:-234px}.docs-icon-unlink{left:0;top:-276px}.docs-icon-bar-chart{left:0;top:0}.docs-icon-column-chart{left:-21px;top:-2568px}.docs-icon-line-chart{left:-21px;top:-927px}.docs-icon-pie-chart{left:0;top:-717px}.docs-icon-pie-chart-outline{height:24px;left:0;top:-4356px;width:24px}.docs-icon-named-range{left:0;top:-3765px}.docs-icon-clock{left:-21px;top:-843px}.docs-icon-cancel{left:0;top:-1767px}.docs-icon-arrow-line-tool{left:0;top:-168px}.docs-icon-arrow-tilted{left:0;top:-864px}.docs-icon-unsupported-black{left:-21px;top:-3471px}.docs-icon-text-rotation{left:0;top:-1830px}.docs-icon-text-rotation-up{left:0;top:-3009px}.docs-icon-text-rotation-down{left:0;top:-822px}.docs-icon-text-rotation-angleup{left:-21px;top:-1557px}.docs-icon-text-rotation-angledown{left:-21px;top:-1095px}.docs-icon-text-rotation-vertical{left:0;top:-2946px}.docs-icon-text-rotation-none{left:0;top:-2904px}.docs-icon-keep-lightbulb{left:-21px;top:-2610px}.docs-icon-update-table{left:-21px;top:-1179px}.docs-icon-update-slide{left:-21px;top:-2652px}.docs-icon-overflow-three-dots{left:0;top:-969px}.docs-icon-restore{left:-21px;top:-2229px}.docs-icon-paragraph-border-between{left:-21px;top:-3429px}.docs-icon-paragraph-border-bottom{left:-21px;top:-1977px}.docs-icon-paragraph-border-left{left:-21px;top:-615px}.docs-icon-paragraph-border-right{left:-21px;top:-1893px}.docs-icon-paragraph-border-top{left:0;top:-2250px}.docs-icon-diagram-white{left:0;top:-2397px}.docs-icon-drive-black{left:0;top:-3324px}.docs-icon-file-upload{left:-21px;top:-1221px}.docs-icon-photos{left:-21px;top:-4230px}.docs-icon-keyboard{left:-21px;top:-3135px}.docs-icon-dogfood-white{left:0;top:-2040px}.docs-icon-hierarchy{left:0;top:-1263px}.docs-icon-timeline{left:0;top:-1809px}.docs-icon-process{left:-21px;top:-2166px}.docs-icon-transition{left:-21px;top:-699px}.docs-icon-mask{left:-21px;top:-21px}.docs-icon-visibility-off{left:0;top:-2883px}.docs-icon-volume-up{left:0;top:-2652px}.docs-icon-camera{left:-21px;top:-2925px}.docs-icon-pivot-table{left:-21px;top:-2841px}.docs-icon-insert-pivot-table{left:0;top:-2313px}}#googlebar-coldstart{height:28px;line-height:28px;background-color:transparent;padding:0 30px;z-index:1003}.googlebar-coldstart-email-container{background-color:#fff;float:right;height:inherit}.googlebar-coldstart-email{color:#999;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:11px;padding:0 15px}.modal-dialog a{color:#15c}.docs-material #docs-branding-container{margin-top:0;width:64px}.docs-material .docs-branding-icon,.docs-material #docs-branding-container a,.docs-material #docs-branding-logo,.docs-material #docs-drive-logo{height:40px;width:40px}.docs-material #docs-branding-container a,.docs-material #docs-branding-container .docs-branding-logo-no-link{border-radius:50%;margin:4px 0 4px 8px;padding:8px}.docs-material #docs-branding-container a:focus{background-color:rgba(0,0,0,.06);outline:none}.docs-material #docs-menubar,.docs-material #docs-titlebar-container{margin-left:64px}.docs-material .docs-title-outer{margin-left:0}.docs-material #docs-folder{margin-top:1px}.docs-material #docs-branding-container{background-color:inherit}.docs-material .docs-branding-icon-img:before{content:url(//ssl.gstatic.com/docs/common/material_common_sprite146.svg)}.docs-material .docs-branding-icon-documents{left:-20px;top:-160px}.docs-material .docs-branding-icon-drawings{left:-20px;top:-2216px}.docs-material .docs-branding-icon-default,.docs-material .docs-branding-icon-forms,.docs-material .docs-branding-icon-scripts,.docs-material .docs-branding-icon-drive{left:-20px;top:-4334px}.docs-material .docs-branding-icon-spreadsheets{left:-26px;top:-3048px}.docs-material .docs-branding-icon-presentations{left:0;top:-3492px}.docs-material #docs-branding-container:not(.docs-branding-crossfade-transition-disabled):hover #docs-drive-logo{opacity:0}.docs-material #docs-branding-container:not(.docs-branding-crossfade-transition-disabled):hover #docs-branding-logo{opacity:1}.docs-material #docs-activity-indicator{padding-top:3px}.docs-material .docs-titlebar-badges .jfk-activityIndicator{vertical-align:top}.docs-material #docs-header #docs-titlebar{padding-top:9px}.docs-material #docs-header #docs-titlebar-container{max-height:33px}.docs-material .docs-menubar{height:31px}.docs-material #docs-branding-container,.docs-material #docs-chrome-cover{height:64px}.docs-material .docs-appbar-circle-button.jfk-button{box-shadow:none;background-color:transparent;background-image:none;cursor:pointer;height:40px;width:40px;border-radius:50%;border-width:1px;border-style:solid;border-color:transparent;box-shadow:none;background-clip:padding-box;cursor:pointer;-webkit-tap-highlight-color:transparent;min-width:0;padding:0;margin:0 9px 0 0}.docs-material .docs-appbar-circle-button.jfk-button .docs-icon{height:24px;width:24px;opacity:0.54}.docs-gm .docs-material .docs-appbar-circle-button.jfk-button .docs-icon{opacity:1}.docs-material .docs-appbar-circle-button.jfk-button-hover,.docs-material .docs-appbar-circle-button.jfk-button:focus{background-color:rgba(0,0,0,.06)}.docs-material .docs-appbar-circle-button.jfk-button-active,.docs-material .docs-appbar-circle-button.jfk-button-checked{background-color:rgba(0,0,0,0.12)}.docs-gm .docs-material .docs-appbar-circle-button.jfk-button-active,.docs-gm .docs-material .docs-appbar-circle-button.jfk-button-checked{background-color:#e6f4ea}.docs-material .docs-appbar-circle-button.jfk-button-active .docs-icon,.docs-material .docs-appbar-circle-button.jfk-button-checked .docs-icon{opacity:0.87}.docs-gm .docs-material .docs-appbar-circle-button.jfk-button-active .docs-icon,.docs-gm .docs-material .docs-appbar-circle-button.jfk-button-checked .docs-icon{opacity:1}.docs-material .docs-appbar-circle-button.jfk-button-disabled .docs-icon{opacity:.26}.docs-gm .docs-material .docs-appbar-circle-button.jfk-button-disabled .docs-icon{opacity:.38}.docs-material .docs-appbar-circle-button.jfk-button-disabled{cursor:inherit}.docs-material .docs-chat.jfk-button{display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;transition:background 0.2s 0.1s;background-color:#e8eaed;background-image:none}.docs-gm .docs-material .docs-chat.jfk-button,.docs-gm .docs-material .docs-chat.jfk-button.jfk-button-clear-outline,.docs-gm .docs-material .docs-chat.jfk-button.jfk-button-active.jfk-button-focused{background-color:#fff;border:2px solid #dadce0;box-shadow:0 0 0 2px #fff}.docs-gm .docs-material .docs-chat.jfk-button.jfk-button-focused{background-color:#fff}.docs-material .docs-chat.jfk-button,.docs-material .docs-chat.jfk-button.jfk-button-clear-outline,.docs-material .docs-chat.jfk-button.jfk-button-active.jfk-button-focused{height:32px;width:32px;border-radius:50%;border-width:2px;border-style:solid;border-color:#fff;box-shadow:none;background-clip:padding-box;cursor:pointer;-webkit-tap-highlight-color:transparent;margin:0 0 0 -8px}.docs-material .docs-chat.jfk-button.jfk-button-hover{background-color:#dadce0}.docs-gm .docs-material .docs-chat.jfk-button.jfk-button-hover,.docs-gm .docs-material .docs-chat.jfk-button.jfk-button-hover.jfk-button-clear-outline,.docs-gm .docs-material .docs-chat.jfk-button.jfk-button-hover.jfk-button-focused{background-color:#dadce0}.docs-gm .docs-material .docs-chat.jfk-button.jfk-button-hover.jfk-button-clear-outline.jfk-button-focused.jfk-button-active{margin:0 0 0 -8px}.docs-material .docs-chat.jfk-button.jfk-button-active{background-color:#bdc1c6}.docs-material .docs-chat.jfk-button.jfk-button-focused{border:4px solid rgba(0,0,0,0.12);margin:-2px -2px -2px -10px}.docs-gm .docs-material .docs-chat.jfk-button.jfk-button-focused{border:4px solid rgba(0,0,0,0.12);margin:-2px -2px -2px -10px;box-shadow:none}.docs-material .docs-chat.jfk-button .docs-icon{-webkit-transition-duration:200ms;-moz-transition-duration:200ms;-o-transition-duration:200ms;transition-duration:200ms;-webkit-transition-property:opacity;-moz-transition-property:opacity;-o-transition-property:opacity;transition-property:opacity;-webkit-transition-timing-function:cubic-bezier(0.4,0.0,0.2,1);-moz-transition-timing-function:cubic-bezier(0.4,0.0,0.2,1);-o-transition-timing-function:cubic-bezier(0.4,0.0,0.2,1);transition-timing-function:cubic-bezier(0.4,0.0,0.2,1);opacity:.71;margin:0}.docs-material .docs-chat.jfk-button.jfk-button-active .docs-icon,.docs-material .docs-chat.jfk-button.jfk-button-checked .docs-icon,.docs-material .docs-chat.jfk-button.jfk-button-focused .docs-icon,.docs-material .docs-chat.jfk-button.jfk-button-hover .docs-icon{opacity:.86}.docs-material .docs-chat.jfk-button.jfk-button-disabled .docs-icon{opacity:0.50}.docs-material .docs-chat-badge{border-radius:50%;border:1px solid #fff;right:-3px;top:-3px}.docs-gm .docs-explore-feedback-title,.docs-gm .docs-explore-feedback-button{font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:12px}.docs-gm .docs-explore-sidebar-title-heading,.docs-gm .docs-explore-sidebar-title-heading-button{font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:16px;font-weight:500;line-height:24px;position:relative;left:auto;height:auto;max-width:calc(100% - 64px);padding:0;right:auto;top:auto}.docs-gm .docs-explore-sidebar-title-heading-button{font-family:'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:16px}.docs-gm .docs-explore-serp-webresultscard-header-text,.docs-gm .docs-explore-serp-webresultscard-allresults-text{font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px}.docs-gm .docs-explore-serp-enterpriseresultscard-allresults-text{font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px}.docs-gm .docs-explore-serp-enterpriseresult-embeddeditems-show-more-button{font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500}.docs-gm .docs-explore-serp-enterpriseresult-snippet{font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:12px}.docs-gm .docs-explore-serp-enterpriseresult-title{font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px}.docs-gm .docs-explore-searchbar-labelinput{font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px}.docs-gm .docs-explore-card-title-heading{color:#3c4043;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;line-height:24px;text-transform:none}.docs-gm .docs-explore-card-more-button{color:#1a73e8;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;line-height:20px}.docs-gm .docs-explore-card-subtitle{color:#80868b;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:12px;line-height:16px}.docs-material.goog-menu.goog-menu-nocheckbox .goog-menuitem,.docs-material.goog-menu.goog-menu-noicon .goog-menuitem{padding-left:16px}.docs-material.goog-menu .goog-menuitem{padding-left:36px}.docs-material.goog-menu .apps-menuitem .goog-menuitem-checkbox,.docs-material.goog-menu .apps-menuitem .goog-menuitem-icon{left:8px}.docs-material.goog-menu .apps-menuitem.goog-option-selected{background-position:left 5px center}.docs-gm .docs-material.goog-menu .apps-menuitem.goog-option-selected{background-image:none}.docs-gm .docs-material.goog-menu .apps-menuitem.goog-option-selected .goog-menuitem-checkbox{background:no-repeat url(//ssl.gstatic.com/docs/common/material_common_sprite146.svg) -40px -430px;height:18px;width:18px;top:50%;margin-top:-9px}.docs-gm .docs-menubar .goog-control{border:1px solid transparent;border-radius:4px;box-shadow:none;color:#202124;cursor:pointer;font-size:14px;letter-spacing:.2px;padding:4px 6px}.docs-gm .docs-menubar .goog-control-hover{background-color:#f1f3f4}.docs-gm .docs-menubar .goog-control-open{background-color:#e6f4ea}.docs-gm .docs-menubar .goog-control-active,.docs-gm .docs-menubar .goog-control:hover:active{background-color:#ceead6}.docs-gm .docs-menubar .goog-control-disabled{color:#9aa0a6;background-color:white;cursor:default}.docs-gm .docs-menubar .docs-menu-button-open-below,.docs-gm .docs-menubar .docs-menu-button-open-above{z-index:1003}.docs-gm .docs-menubar .goog-control.docs-menu-button-open-below{border-bottom-left-radius:0;border-bottom-right-radius:0}.docs-gm .goog-menu.docs-menu-attached-button-above{border-top-left-radius:0}.docs-gm .goog-menu.docs-menu-attached-button-below{border-bottom-left-radius:0}.docs-gm .goog-menu{border:1px solid transparent;border-radius:4px;box-shadow:0 2px 6px 2px rgba(60,64,67,.15);max-height:calc(100vh - 70px);overflow-y:auto}.docs-gm .goog-menu .goog-dimension-picker,.docs-gm .goog-menu.docs-fontmenu{overflow:hidden}.docs-gm .goog-menu.docs-omnibox-parent,.docs-gm .goog-menu.docs-ruler-context-menu{overflow:visible}.docs-gm .docs-fontmenu{max-height:none;max-height:unset}.docs-gm .goog-menuseparator{border-top:1px solid #dadce0;margin:8px 0 8px 36px}.docs-gm .docs-colormenuitems .goog-menuseparator,.docs-gm .waffle-conditionalformat-default-menu .goog-menuseparator{margin-left:0}.docs-gm .goog-menu-noicon .goog-menuseparator{margin-left:13px}.docs-gm .goog-menuitem{color:#202124;font-size:14px;letter-spacing:.2px;line-height:20px;white-space:normal}.docs-gm .goog-menu .goog-menuitem{padding:6px 15px 6px 38px}.docs-gm .goog-menu-noicon .goog-menuitem{padding-left:15px}.docs-gm .goog-menu .apps-menuitem .goog-menuitem-checkbox,.docs-gm .goog-menu .apps-menuitem .goog-menuitem-icon{margin:7px 8px 7px 12px;left:0;top:0}.docs-gm .goog-menuitem .goog-menuitem-content{min-height:20px}.docs-gm .goog-menuitem .goog-submenu-arrow{padding-top:0}.docs-gm .goog-menuitem .docs-toolbar-mode-switcher-menu-description,.docs-gm .goog-menuitem .docs-display-density-toolbar-menuitem-description,.docs-gm .goog-menuitem .punch-qanda-presenter-view-menu-item-description{color:#80868b;font-size:12px;line-height:1}.docs-gm .goog-menuitem-highlight{background-color:#f1f3f4}.docs-gm .goog-menuitem.goog-menuitem-highlight{border-color:#f1f3f4;border-style:dotted;border-width:1px 0;padding-top:5px;padding-bottom:5px}.docs-gm .apps-menuitem.goog-menuitem-highlight{border:none;padding-top:6px;padding-bottom:6px}.docs-gm .docs-submenuitem.goog-menuitem{padding-bottom:0;padding-right:10px;padding-top:0}.docs-gm .docs-fontmenu .goog-menuitem{padding-bottom:6px;padding-right:48px;padding-top:6px}.docs-gm .docs-submenuitem.goog-menuitem-highlight{border:none;border-bottom:1px solid #e6e6e6}.docs-gm .docs-fontmenu .goog-menuitem-highlight{border:none}.docs-gm .goog-menuitem-disabled,.docs-gm .goog-menuitem-disabled .goog-menuitem-content{color:#9aa0a6!important}.docs-gm .goog-menuitem-active:hover:active{background-color:#e8eaed}.docs-gm .goog-menuitem-accel,.docs-gm .goog-menuitem-disabled .goog-menuitem-accel{color:#80868b;font-weight:500}.docs-gm .docs-ruler-context-menu-arrow-before{border:0}.docs-gm .docs-omnibox-autocomplete .goog-menuitem-icon{top:auto}.docs-material #docs-presence-container{display:flex;-webkit-align-items:center;align-items:center;height:36px;margin:0 8px 0 0}.docs-material .docs-presence-plus-widget{display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:flex-end;justify-content:flex-end}.docs-material .docs-presence-plus-widget-open .docs-presence-plus-widget-status{display:none}.docs-material .docs-presence-plus-widget-collabs{height:36px}.docs-material .docs-presence-plus-collab-widget-container{margin:0 0 0 -8px;overflow:visible;height:auto;width:auto}.docs-material .docs-presence-plus-collab-widget{display:flex}.docs-material .docs-presence-plus-collab-widget-color-block,.docs-material.docs-presence-plus-widget-overflow-menu .docs-presence-plus-collab-widget-color-block{height:32px;width:32px;border-radius:50%;border-width:2px;border-style:solid;border-color:#fff;box-shadow:none;background-clip:padding-box;cursor:pointer;-webkit-tap-highlight-color:transparent;background-color:#fff;opacity:1;overflow:visible}.docs-material .docs-presence-plus-collab-widget-image-container,.docs-material.docs-presence-plus-widget-overflow-menu .docs-presence-plus-collab-widget-image-container{height:32px;width:32px;border-radius:50%;padding:0;overflow:visible;display:inline-block;opacity:.5;box-shadow:0 0 1px 0 white}.docs-material .docs-presence-plus-collab-widget-active .docs-presence-plus-collab-widget-image-container{opacity:1}.docs-material .docs-presence-plus-collab-widget-image-border,.docs-material.docs-presence-plus-widget-overflow-menu .docs-presence-plus-collab-widget-image-border{height:28px;width:28px;border-radius:50%;margin:2px;border:none}.docs-material .docs-presence-plus-collab-widget-image,.docs-material.docs-presence-plus-widget-overflow-menu .docs-presence-plus-collab-widget-image{height:28px;width:28px;border-radius:50%;padding:0;left:0}.docs-material .docs-presence-plus-collab-widget-focus:focus{outline:none}.docs-material .docs-presence-plus-collab-widget-focus:focus .docs-presence-plus-collab-widget-color-block{border:4px solid rgba(0,0,0,0.12);margin:-2px}.docs-material .docs-presence-plus-widget-overflow-button{height:32px;width:32px;border-radius:50%;border-width:2px;border-style:solid;border-color:#fff;box-shadow:none;background-clip:padding-box;cursor:pointer;-webkit-tap-highlight-color:transparent;margin:0 0 0 -8px;background-color:#e8eaed;background-image:none;color:rgba(32,33,36,.71)}.docs-material .docs-presence-plus-widget-overflow-button.goog-flat-menu-button-focused{border:4px solid rgba(0,0,0,0.12);color:rgba(32,33,36,.86);margin:-2px -2px -2px -10px}.docs-material .docs-presence-plus-widget-overflow-button.goog-flat-menu-button-focused.goog-flat-menu-button-open{border:2px solid rgba(255,255,255,1);margin:0 0 0 -8px}.docs-material .docs-presence-plus-widget-overflow-button.goog-flat-menu-button-open{background-color:#e8eaed;z-index:auto}.docs-material .docs-presence-plus-widget-overflow-button.goog-flat-menu-button-hover{box-shadow:none;background-color:#dadce0;color:rgba(32,33,36,.86)}.docs-material .docs-presence-plus-widget-overflow-button.goog-flat-menu-button-active{background-color:#bdc1c6;color:rgba(32,33,36,.86)}.docs-material .docs-presence-plus-widget-overflow-button.goog-flat-menu-button-open .goog-flat-menu-button-caption{-webkit-transition-duration:200ms;-moz-transition-duration:200ms;-o-transition-duration:200ms;transition-duration:200ms;-webkit-transition-property:opacity;-moz-transition-property:opacity;-o-transition-property:opacity;transition-property:opacity;-webkit-transition-timing-function:cubic-bezier(0.4,0.0,0.2,1);-moz-transition-timing-function:cubic-bezier(0.4,0.0,0.2,1);-o-transition-timing-function:cubic-bezier(0.4,0.0,0.2,1);transition-timing-function:cubic-bezier(0.4,0.0,0.2,1);-webkit-transition-delay:100ms;-moz-transition-delay:100ms;-o-transition-delay:100ms;transition-delay:100ms;opacity:0}.docs-material .docs-presence-plus-widget-overflow-button.goog-flat-menu-button-open .goog-flat-menu-button-dropdown{-webkit-transition-duration:200ms;-moz-transition-duration:200ms;-o-transition-duration:200ms;transition-duration:200ms;-webkit-transition-property:opacity;-moz-transition-property:opacity;-o-transition-property:opacity;transition-property:opacity;-webkit-transition-timing-function:cubic-bezier(0.4,0.0,0.2,1);-moz-transition-timing-function:cubic-bezier(0.4,0.0,0.2,1);-o-transition-timing-function:cubic-bezier(0.4,0.0,0.2,1);transition-timing-function:cubic-bezier(0.4,0.0,0.2,1);-webkit-transition-delay:100ms;-moz-transition-delay:100ms;-o-transition-delay:100ms;transition-delay:100ms;opacity:1}.docs-material .docs-presence-plus-widget-overflow-button .goog-flat-menu-button-caption{-webkit-transition-duration:200ms;-moz-transition-duration:200ms;-o-transition-duration:200ms;transition-duration:200ms;-webkit-transition-property:opacity;-moz-transition-property:opacity;-o-transition-property:opacity;transition-property:opacity;-webkit-transition-timing-function:cubic-bezier(0.4,0.0,0.2,1);-moz-transition-timing-function:cubic-bezier(0.4,0.0,0.2,1);-o-transition-timing-function:cubic-bezier(0.4,0.0,0.2,1);transition-timing-function:cubic-bezier(0.4,0.0,0.2,1);left:-2px;line-height:32px;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:12px;font-weight:500}.docs-material .docs-presence-plus-widget-overflow-button .goog-flat-menu-button-dropdown{-webkit-transition-duration:200ms;-moz-transition-duration:200ms;-o-transition-duration:200ms;transition-duration:200ms;-webkit-transition-property:opacity;-moz-transition-property:opacity;-o-transition-property:opacity;transition-property:opacity;-webkit-transition-timing-function:cubic-bezier(0.4,0.0,0.2,1);-moz-transition-timing-function:cubic-bezier(0.4,0.0,0.2,1);-o-transition-timing-function:cubic-bezier(0.4,0.0,0.2,1);transition-timing-function:cubic-bezier(0.4,0.0,0.2,1);right:10px;opacity:0;border-width:0 6px 6px;border-color:rgba(32,33,36,.71) transparent}.docs-material .docs-presence-plus-widget-overflow-button.goog-flat-menu-button-active .goog-flat-menu-button-dropdown,.docs-material .docs-presence-plus-widget-overflow-button.goog-flat-menu-button-focused .goog-flat-menu-button-dropdown,.docs-material .docs-presence-plus-widget-overflow-button.goog-flat-menu-button-hover .goog-flat-menu-button-dropdown{border-color:rgba(32,33,36,.86) transparent}.docs-material.docs-presence-plus-widget-overflow-menu{max-height:340px;width:256px;padding:4px 0 8px 0;border-radius:2px;box-shadow:0px 2px 2px 0px rgba(0,0,0,0.14),0px 3px 1px -2px rgba(0,0,0,0.12),0px 1px 5px 0px rgba(0,0,0,0.2)}.docs-material.docs-presence-plus-widget-overflow-menu .goog-menuheader{display:flex;-webkit-align-items:center;align-items:center;margin-left:16px;height:40px;color:rgba(0,0,0,0.54);font-weight:500}.docs-material.docs-presence-plus-widget-overflow-menu .docs-presence-plus-collab-widget-container{margin:0;height:48px;width:100%}.docs-material.docs-presence-plus-widget-overflow-menu .docs-presence-plus-collab-widget-color-block{margin:0 16px 0;border:none}.docs-material.docs-presence-plus-widget-overflow-menu .docs-presence-plus-collab-widget{display:flex;-webkit-align-items:center;align-items:center;height:48px}.docs-material.docs-presence-plus-widget-overflow-menu .docs-presence-plus-collab-widget-name{color:rgba(0,0,0,0.87);margin:0}.docs-material.docs-presence-plus-widget-overflow-menu .docs-presence-plus-collab-widget-idle-text{color:rgba(0,0,0,0.54);margin-left:6px;font-size:13px}@keyframes material-collab-join{from{opacity:0}to{opacity:1}}@-webkit-keyframes material-collab-join{from{opacity:0}to{opacity:1}}.docs-material .docs-presence-plus-collab-widget-enter-material{-webkit-animation-name:material-collab-join;-moz-animation-name:material-collab-join;-o-animation-name:material-collab-join;animation-name:material-collab-join;-webkit-animation-timing-function:cubic-bezier(0,0,.2,1);-moz-animation-timing-function:cubic-bezier(0,0,.2,1);-o-animation-timing-function:cubic-bezier(0,0,.2,1);animation-timing-function:cubic-bezier(0,0,.2,1);-webkit-animation-duration:200ms;-moz-animation-duration:200ms;-o-animation-duration:200ms;animation-duration:200ms;-webkit-animation-fill-mode:both;animation-fill-mode:both}.docs-material .docs-presence-plus-collab-widget-exit-material{-webkit-animation-name:material-collab-join;-moz-animation-name:material-collab-join;-o-animation-name:material-collab-join;animation-name:material-collab-join;-webkit-animation-direction:reverse;-moz-animation-direction:reverse;-o-animation-direction:reverse;animation-direction:reverse;-webkit-animation-timing-function:cubic-bezier(.4,0,.2,1);-moz-animation-timing-function:cubic-bezier(.4,0,.2,1);-o-animation-timing-function:cubic-bezier(.4,0,.2,1);animation-timing-function:cubic-bezier(.4,0,.2,1);-webkit-animation-duration:200ms;-moz-animation-duration:200ms;-o-animation-duration:200ms;animation-duration:200ms;-webkit-animation-fill-mode:both;animation-fill-mode:both}.docs-gm .docs-title-input:focus{border:2px solid #1a73e8!important;margin:-1px;box-shadow:none;border-radius:4px!important}.docs-material .docs-titlebar-button{display:inline-flex;align-items:center;justify-content:center}.docs-revisions-sidebar .docs-revisions-sidebar-title{height:64px}.docs-material .docs-debug-container{margin-right:16px}.docs-material #docs-docos-commentsbutton{box-shadow:none;background-color:transparent;background-image:none;cursor:pointer;height:40px;width:40px;border-radius:50%;border-width:1px;border-style:solid;border-color:transparent;box-shadow:none;background-clip:padding-box;cursor:pointer;-webkit-tap-highlight-color:transparent;min-width:0;padding:0;margin:0 9px 0 0}.docs-material #docs-docos-commentsbutton.jfk-button.jfk-button-hover,.docs-material #docs-docos-commentsbutton:focus{background-color:rgba(0,0,0,.06)}.docs-material #docs-docos-commentsbutton.jfk-button.jfk-button-active,.docs-material #docs-docos-commentsbutton.jfk-button.jfk-button-checked{background-color:rgba(0,0,0,0.12)}.docs-gm .docs-material #docs-docos-commentsbutton.jfk-button.jfk-button-active,.docs-gm .docs-material #docs-docos-commentsbutton.jfk-button.jfk-button-checked{background-color:#e6f4ea}.docs-material #docs-docos-commentsbutton .docs-icon{height:24px;width:24px;opacity:0.54}.docs-material #docs-docos-commentsbutton.jfk-button.jfk-button-active .docs-icon,.docs-material #docs-docos-commentsbutton.jfk-button.jfk-button-checked .docs-icon{opacity:0.87}.docs-material #docs-docos-commentsbutton.jfk-button.jfk-button-disabled .docs-icon{opacity:.26}.docs-gm .docs-material #docs-docos-commentsbutton .docs-icon{opacity:1}.docs-gm .docs-material #docs-docos-commentsbutton.jfk-button.jfk-button-active .docs-icon,.docs-gm .docs-material #docs-docos-commentsbutton.jfk-button.jfk-button-checked .docs-icon{opacity:1}.docs-gm .docs-material #docs-docos-commentsbutton.jfk-button.jfk-button-disabled .docs-icon{opacity:.38}.docs-material #docs-docos-commentsbutton.jfk-button.jfk-button-disabled,.docs-material #docs-titlebar-share-client-button .jfk-button.jfk-button-disabled,.docs-material #docs-script-button-bar .jfk-button.jfk-button-disabled{cursor:inherit}.docs-material #docs-titlebar-share-client-button .jfk-button{box-shadow:none;background-color:#4285f4;background-image:none;cursor:pointer;border-color:transparent!important;border-radius:2px;border-width:1px;border-style:inset;color:#fff;font-size:13px;height:30px;padding:0 14px;text-transform:uppercase;font-size:var(--docs-material-font-size-normal,13px);margin-right:12px;padding:0 7px;min-width:0}.docs-material #docs-titlebar-share-client-button .jfk-button-disabled{background-color:rgba(0,0,0,0.12);opacity:1}.docs-material #docs-titlebar-share-client-button .jfk-button .scb-button-icon{margin:0 3px 0 -4px}.docs-material #docs-titlebar-share-client-button .jfk-button:focus{border-color:rgba(0,0,0,0.38)!important}.docs-material #docs-titlebar-share-client-button .jfk-button.jfk-button-hover{box-shadow:0px 2px 2px 0px rgba(0,0,0,0.14),0px 3px 1px -2px rgba(0,0,0,0.12),0px 1px 5px 0px rgba(0,0,0,0.2)}.docs-material #docs-titlebar-share-client-button .jfk-button.jfk-button-active,.docs-material #docs-titlebar-share-client-button .jfk-button.jfk-button-checked{box-shadow:0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12),0px 2px 4px -1px rgba(0,0,0,0.2);background-color:#3367d6}.docs-material #docs-script-button-bar .jfk-button{box-shadow:none;background-color:rgba(0,0,0,.04);background-image:none;cursor:pointer;border-color:transparent!important;border-radius:2px;border-width:1px;border-style:inset;color:rgba(0,0,0,0.54);font-size:13px;height:30px;padding:0 14px;text-transform:uppercase;margin-right:8px}.docs-material #docs-script-button-bar .jfk-button.jfk-button-disabled{background-color:#fff;color:rgba(0,0,0,0.26)}.docs-material #docs-script-button-bar .jfk-button:focus{border-color:#4285f4!important;color:rgba(0,0,0,.60)}.docs-material #docs-script-button-bar .jfk-button.jfk-button-hover{box-shadow:0px 2px 2px 0px rgba(0,0,0,0.14),0px 3px 1px -2px rgba(0,0,0,0.12),0px 1px 5px 0px rgba(0,0,0,0.2);color:rgba(0,0,0,.60)}.docs-material #docs-script-button-bar .jfk-button.jfk-button-active,.docs-material #docs-script-button-bar .jfk-button.jfk-button-checked{box-shadow:0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12),0px 2px 4px -1px rgba(0,0,0,0.2);background-color:rgba(0,0,0,0.12);color:rgba(0,0,0,0.87)}.docs-material #docs-titlebar-share-client-button .jfk-button.jfk-button-clear-outline,.docs-material #docs-script-button-bar .jfk-button.jfk-button-clear-outline{border-color:transparent!important}#docs-docos-caret{display:none}.docs-material .docs-docos-activitybox{top:60px}.docs-material #docs-header .docs-titlebar-buttons{align-items:center;background-color:#fff;display:flex;height:64px;padding:0 12px 0 16px;top:0;z-index:900}.docs-material #docs-header .docs-titlebar-buttons.docs-titlebar-occluding::before{background:linear-gradient(to right,transparent,rgba(60,64,67,.1) 70%,rgba(60,64,67,.2) 100%);content:'';height:100%;left:-6px;position:absolute;width:6px;top:0}.docs-material #docs-header .docs-titlebar-buttons-rtl.docs-titlebar-occluding::before{background:linear-gradient(to left,transparent,rgba(60,64,67,.1) 70%,rgba(60,64,67,.2) 100%)}.docs-material #docs-header .docs-titlebar-buttons #docs-titlebar-edit-buttons{display:inherit;align-items:inherit}.docs-material .docs-titlebar-buttons .onegoogle-material-minibar{text-align:left}.docs-material #googlebar-coldstart{height:32px;width:32px;border-radius:50%;background-color:#0f9d58;margin:0 8px 0 0;padding:0;z-index:auto}.docs-material #googlebar-coldstart .docs-icon-img{opacity:0.54}.docs-gm .docs-title-untitled{font-style:normal}.docs-gm #docs-titlebar-share-client-button .jfk-button{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;padding:9px 16px 10px 12px;text-transform:capitalize}.docs-gm #docs-titlebar-share-client-button .jfk-button-disabled{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;background:#f1f3f4;color:#3c4043;opacity:0.38;padding:9px 16px 10px 12px}.docs-gm #docs-titlebar-share-client-button .jfk-button .scb-button-icon{margin:0 3px 0 -4px}.docs-gm #docs-titlebar-share-client-button .jfk-button:focus{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;background:#4f9e67;box-shadow:0 1px 3px 1px rgba(52,168,83,0.15);padding:9px 16px 10px 12px;border-color:transparent!important}.docs-gm #docs-titlebar-share-client-button .jfk-button.jfk-button-hover{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;background:#2a8947;box-shadow:0 1px 3px 1px rgba(52,168,83,0.15);padding:9px 16px 10px 12px}.docs-gm #docs-titlebar-share-client-button .jfk-button.jfk-button-hover:focus{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;background:#62a877;box-shadow:0 1px 3px 1px rgba(52,168,83,0.15);padding:9px 16px 10px 12px}.docs-gm #docs-titlebar-share-client-button .jfk-button.jfk-button-active,.docs-gm #docs-titlebar-share-client-button .jfk-button.jfk-button-checked{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;background:#62a877;box-shadow:0 2px 6px 2px rgba(52,168,83,0.15);padding:9px 16px 10px 12px}.docs-gm #docs-titlebar-share-client-button .decoupled-docs-share-button.docs-titlebar-button.jfk-button{padding:9px 16px 10px 16px}.docs-material #docs-recall-titlebar-search-menu-container{align-self:flex-start;margin:12px 16px 0px 16px}.goog-toolbar-button,.goog-toolbar-menu-button{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;background:0;border-color:transparent;border-style:solid;border-width:1px;outline:none;padding:0;height:24px;color:#333;line-height:24px;list-style:none;font-size:11px;font-weight:bold;text-decoration:none;vertical-align:middle;cursor:default}.goog-toolbar-button-outer-box,.goog-toolbar-button-inner-box .goog-toolbar-menu-button-outer-box,.goog-toolbar-menu-button-inner-box{border:0;vertical-align:top}.goog-toolbar-button-outer-box,.goog-toolbar-menu-button-outer-box{margin:0;padding:0}.goog-toolbar-button-inner-box,.goog-toolbar-menu-button-inner-box{padding:0 2px}.goog-toolbar-button-hover,.goog-toolbar-button-active,.goog-toolbar-button-checked,.goog-toolbar-button-selected{color:#222;padding:0}.goog-toolbar-button-hover,.goog-toolbar-menu-button-hover{border-color:#c6c6c6!important;color:#222}.goog-toolbar-menu-button-open{color:#222}.goog-toolbar-button-hover,.goog-toolbar-menu-button-hover{-webkit-box-shadow:0 1px 1px rgba(0,0,0,.1);-moz-box-shadow:0 1px 1px rgba(0,0,0,.1);box-shadow:0 1px 1px rgba(0,0,0,.1);background-color:#f8f8f8;background-image:-webkit-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-moz-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-ms-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-o-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:linear-gradient(top,#f8f8f8,#f1f1f1)}.goog-toolbar-button-active,.goog-toolbar-menu-button-active{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1);background-color:#f6f6f6;background-image:-webkit-linear-gradient(top,#f6f6f6,#f1f1f1);background-image:-moz-linear-gradient(top,#f6f6f6,#f1f1f1);background-image:-ms-linear-gradient(top,#f6f6f6,#f1f1f1);background-image:-o-linear-gradient(top,#f6f6f6,#f1f1f1);background-image:linear-gradient(top,#f6f6f6,#f1f1f1);border-color:#c6c6c6}.goog-toolbar-button-selected,.goog-toolbar-button-checked,.goog-toolbar-menu-button-open{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1);background-color:#eee;background-image:-webkit-linear-gradient(top,#eee,#e0e0e0);background-image:-moz-linear-gradient(top,#eee,#e0e0e0);background-image:-ms-linear-gradient(top,#eee,#e0e0e0);background-image:-o-linear-gradient(top,#eee,#e0e0e0);background-image:linear-gradient(top,#eee,#e0e0e0);border-color:#ccc}.goog-toolbar-button-disabled,.goog-toolbar-menu-button-disabled{color:#222!important;opacity:0.3;filter:alpha(opacity=30)}.goog-toolbar-button-collapse-right,.goog-toolbar-button-collapse-right .goog-toolbar-button-outer-box,.goog-toolbar-button-collapse-right .goog-toolbar-button-inner-box{margin-right:0}.goog-toolbar-button-collapse-left,.goog-toolbar-button-collapse-left .goog-toolbar-button-outer-box,.goog-toolbar-button-collapse-left .goog-toolbar-button-inner-box{margin-left:0}.goog-toolbar-menu-button-dropdown{background:url(//ssl.gstatic.com/ui/v1/disclosure/small-grey-disclosure-arrow-down.png) center no-repeat;float:right;margin:10px 2px 0 3px;padding:0;opacity:.8;vertical-align:middle;width:5px;height:7px;*float:none;*position:relative;*top:-3px}.goog-toolbar-separator{border-left:1px solid #ccc;height:17px;line-height:normal;list-style:none;margin:0 2px;outline:none;overflow:hidden;padding:0;text-decoration:none;vertical-align:middle;width:0}.goog-toolbar-select .goog-toolbar-menu-button-dropdown{background:url(//ssl.gstatic.com/ui/v1/disclosure/small-grey-disclosure-arrow-down.png) center no-repeat;height:11px;margin-top:7px;width:7px;-webkit-transform:none;-moz-transform:none;transform:none;filter:none}.goog-toolbar-menu-button-caption{padding:0;margin:0}.docs-material #docs-toolbar-wrapper{border-top:1px solid #e0e0e0;border-bottom:1px solid #e0e0e0;background:#fff;box-shadow:none}.docs-gm #docs-toolbar-wrapper{border-top:1px solid #dadce0;border-bottom:1px solid #dadce0}.docs-material #docs-side-toolbar{margin:0 21px 0 0}.docs-material.companion-enabled #docs-side-toolbar{margin:0 4px 0 0}.docs-material #docs-toolbar-wrapper,.docs-material #docs-equationtoolbar,.docs-material .docs-printpreview-toolbar{padding:0 21px 0 22px}.docs-material #docs-equationtoolbar,.docs-material .docs-printpreview-toolbar{background:#fff}.docs-material #docs-equationtoolbar{border-top-width:0;border-bottom:1px solid #e0e0e0}.docs-material.companion-enabled #docs-equationtoolbar{padding-right:4px}.docs-gm #docs-equationtoolbar .goog-toolbar-menu-button-inner-box{padding-top:0}.docs-gm #docs-equationtoolbar .goog-toolbar-menu-button-caption{padding-top:2px}#hide-equation-toolbar-button{float:right}.docs-gm #docs-omnibox-toolbar .docs-omnibox-input{height:26px}.docs-gm #docs-omnibox-toolbar .docs-omnibox-autocomplete{margin:6px 4px 6px 1px}.docs-gm .goog-toolbar,.docs-gm #docs-toolbar{min-height:38px}.docs-material .goog-toolbar-button,.docs-material .goog-toolbar-combo-button,.docs-material .goog-toolbar-menu-button{box-shadow:none;background-color:#fff;background-image:none;cursor:pointer;border-color:transparent!important;border-radius:2px;border-width:1px}.docs-material .goog-toolbar-button-hover,.docs-material .goog-toolbar-menu-button-hover,.docs-material .goog-toolbar-combo-button-hover,.docs-material .docs-toolbar-button-split-sympathy-hover,.docs-material .docs-toolbar-split-create-button,.docs-material .docs-toolbar-split-create-button.goog-toolbar-button-hover,.docs-material .docs-toolbar-split-create-button.goog-toolbar-menu-button-hover,.docs-gm .docs-material.trix-palette .goog-palette-cell-hover{box-shadow:none;background-color:rgba(0,0,0,.06);background-image:none;cursor:pointer;border-color:transparent!important;border-radius:2px;border-width:1px;cursor:pointer}.docs-gm .docs-material .goog-toolbar-button-hover,.docs-gm .docs-material .goog-toolbar-menu-button-hover,.docs-gm .docs-material .goog-toolbar-combo-button-hover,.docs-gm .docs-material .docs-toolbar-button-split-sympathy-hover,.docs-gm .docs-material .docs-toolbar-split-create-button,.docs-gm .docs-material .docs-toolbar-split-create-button.goog-toolbar-button-hover,.docs-gm .docs-material .docs-toolbar-split-create-button.goog-toolbar-menu-button-hover .docs-gm .docs-material.trix-palette .goog-palette-cell-hover{background-color:#f1f3f4}.docs-material .goog-toolbar-button-active,.docs-material .goog-toolbar-button-checked,.docs-material .goog-toolbar-button-selected,.docs-material .goog-toolbar-combo-button-open,.docs-material .goog-toolbar-menu-button-open,.docs-material .docs-toolbar-split-create-button.goog-toolbar-button-active,.docs-material .docs-toolbar-split-create-button.goog-toolbar-menu-button-active,.docs-material .docs-toolbar-split-create-button.goog-toolbar-menu-button-open,.docs-gm .docs-material.trix-palette .goog-palette-cell-selected{box-shadow:none;background-color:rgba(0,0,0,0.12);background-image:none;cursor:pointer;border-color:transparent!important;border-radius:2px;border-width:1px}.docs-gm .docs-material .goog-toolbar-button-active,.docs-gm .docs-material .goog-toolbar-button-checked,.docs-gm .docs-material .goog-toolbar-button-selected,.docs-gm .docs-material .goog-toolbar-combo-button-open,.docs-gm .docs-material .goog-toolbar-menu-button-open,.docs-gm .docs-material .docs-toolbar-split-create-button.goog-toolbar-button-active,.docs-gm .docs-material .docs-toolbar-split-create-button.goog-toolbar-menu-button-active,.docs-gm .docs-material .docs-toolbar-split-create-button.goog-toolbar-menu-button-open,.docs-gm .docs-material.trix-palette .goog-palette-cell-selected{background-color:#e6f4ea;color:#188038}.docs-material .docs-access-level-indicator-view{box-shadow:none;background-color:#4d90fe;background-image:none;cursor:pointer;border-color:transparent!important;border-radius:2px;border-width:1px}.docs-material .docs-access-level-indicator-comment{box-shadow:none;background-color:#1aa863;background-image:none;cursor:pointer;border-color:transparent!important;border-radius:2px;border-width:1px}.docs-gm .docs-material .docs-access-level-indicator-view{background-color:#1a73e8;color:#fff!important}.docs-gm .docs-material .docs-access-level-indicator-comment{background-color:#1aa863;color:#fff!important}.docs-material .goog-toolbar-button,.docs-material .goog-toolbar-menu-button{margin:3px 1px 0;height:26px;line-height:26px;color:rgba(0,0,0,.7)}.docs-material .goog-toolbar-button-inner-box,.docs-material .goog-toolbar-menu-button-inner-box{height:26px;min-width:26px}.docs-material .docs-toolbar-button-split-left .goog-toolbar-button-inner-box{min-width:26px}.docs-material .goog-toolbar-toggle-button.goog-toolbar-button-checked+.goog-toolbar-toggle-button.goog-toolbar-button-checked{border-left-color:#ccc;border-left-style:solid;border-left-width:1px;border-top-left-radius:2px;border-bottom-left-radius:2px;margin-left:1px}.docs-material .goog-toolbar-toggle-button.goog-toolbar-button-checked+.goog-toolbar-toggle-button.goog-toolbar-button-checked .goog-toolbar-button-outer-box .goog-toolbar-button-inner-box,.docs-material .goog-toolbar-toggle-button.goog-toolbar-button-checked+.goog-toolbar-toggle-button.goog-toolbar-button-checked.goog-toolbar-button-hover .goog-toolbar-button-outer-box .goog-toolbar-button-inner-box{margin-left:0}.docs-material .goog-toolbar-button .docs-icon,.docs-material .goog-toolbar-menu-button .docs-icon{opacity:0.54}.docs-gm .docs-material .goog-toolbar-button .docs-icon,.docs-gm .docs-material .goog-toolbar-menu-button .docs-icon,.docs-gm .docs-material .goog-toolbar-combo-button-dropdown,.docs-gm .docs-material .goog-toolbar-menu-button-dropdown{opacity:1}.docs-material .goog-toolbar-button-hover .docs-icon,.docs-material .goog-toolbar-button-selected .docs-icon,.docs-material .goog-toolbar-button-checked .docs-icon,.docs-material .goog-toolbar-button-active .docs-icon,.docs-material .goog-toolbar-menu-button-hover .docs-icon,.docs-material .goog-toolbar-menu-button-selected .docs-icon,.docs-material .goog-toolbar-menu-button-checked .docs-icon,.docs-material .goog-toolbar-menu-button-open .docs-icon,.docs-material .docs-bgcolor-toolbar-menu-button .goog-toolbar-menu-button-icon{opacity:0.87}.docs-gm .docs-material .goog-toolbar-button-hover .docs-icon,.docs-gm .docs-material .goog-toolbar-button-selected .docs-icon,.docs-gm .docs-material .goog-toolbar-button-checked .docs-icon,.docs-gm .docs-material .goog-toolbar-button-active .docs-icon,.docs-gm .docs-material .goog-toolbar-menu-button-hover .docs-icon,.docs-gm .docs-material .goog-toolbar-menu-button-selected .docs-icon,.docs-gm .docs-material .goog-toolbar-menu-button-checked .docs-icon,.docs-gm .docs-material .goog-toolbar-menu-button-open .docs-icon,.docs-gm .docs-material .docs-bgcolor-toolbar-menu-button .goog-toolbar-menu-button-icon{opacity:1}.docs-gm .goog-toolbar-button-inner-box,.docs-gm .goog-toolbar-menu-button-inner-box{height:24px;min-width:24px}.docs-gm .goog-toolbar-button .docs-icon{margin:0 0 1px 0}.docs-gm .goog-toolbar-button.docs-icon-toolbar-button-with-text .docs-icon-toolbar-button-with-text-icon-container{margin-right:4px}.docs-gm .goog-toolbar-menu-button.docs-textcolormenubutton .docs-icon{margin-top:1px}.docs-material .goog-toolbar-separator.goog-inline-block{border-left:1px solid #e0e0e0;margin:0 3px}.docs-material .docs-toolbar-small-separator+div.goog-toolbar-button,.docs-material .docs-toolbar-small-separator+div.goog-toolbar-menu-button{margin-left:1px}.docs-gm .goog-toolbar-separator.goog-inline-block{border-left:1px solid #dadce0;margin:9px 4px;height:20px}.docs-material .docs-toolbar-button-split-left,.docs-material .docs-toolbar-button-split-left.goog-inline-block{margin-right:0}.docs-material .docs-toolbar-button-split-right,.docs-material .docs-toolbar-button-split-right.goog-inline-block{margin-left:0}.docs-material .docs-toolbar-button-split-right.goog-toolbar-button-hover,.docs-material .docs-toolbar-button-split-right.goog-toolbar-menu-button-hover,.docs-material .docs-toolbar-button-split-right.docs-toolbar-button-split-sympathy-hover,.docs-material .docs-toolbar-button-split-left+.docs-toolbar-button-split-right.goog-toolbar-menu-button-open,.docs-material .docs-toolbar-split-create-button+.docs-toolbar-button-split-right{border-left-color:rgba(0,0,0,0.12)!important}.docs-gm .docs-material .docs-toolbar-button-split-right.goog-toolbar-button-hover,.docs-gm .docs-material .docs-toolbar-button-split-right.goog-toolbar-menu-button-hover,.docs-gm .docs-material .docs-toolbar-button-split-right.docs-toolbar-button-split-sympathy-hover,.docs-gm .docs-material .docs-toolbar-button-split-left+.docs-toolbar-button-split-right.goog-toolbar-menu-button-open,.docs-gm .docs-material .docs-toolbar-split-create-button+.docs-toolbar-button-split-right{border-left-color:#f1f3f4!important}.docs-material .docs-toolbar-split-create-button.goog-toolbar-menu-button{margin-right:3px}.docs-material .goog-toolbar-menu-button-dropdown,.docs-material .docs-toolbar-split-create-button .goog-toolbar-menu-button-dropdown,.docs-material .goog-toolbar-combo-button-dropdown{margin-top:10px}.docs-gm .docs-gm-arrow .docs-icon{margin:0}.docs-material .goog-toolbar-select .goog-toolbar-menu-button-dropdown{margin-top:8px}.docs-gm .docs-gm-arrow.goog-toolbar-menu-button-dropdown,.docs-gm .docs-toolbar-split-create-button .goog-toolbar-menu-button-dropdown,.docs-gm .docs-gm-arrow.goog-toolbar-combo-button-dropdown{background:none;margin:0 -1px 0 -3px;width:13px}.docs-gm .goog-toolbar-select .goog-toolbar-menu-button-outer-box .goog-toolbar-menu-button-inner-box .goog-toolbar-menu-button-dropdown{margin-right:-1px}.docs-material .goog-toolbar-combo-button{height:26px;line-height:26px;vertical-align:inherit;margin:0 1px}.docs-material .goog-toolbar-combo-button-input{color:rgba(0,0,0,.7)}.docs-material .goog-toolbar-combo-button-hover .goog-toolbar-combo-button-input{border-right-color:rgba(0,0,0,0.12)!important}.docs-material .goog-toolbar-combo-button-input,.docs-material .goog-toolbar-combo-button-input:focus{height:22px!important}.docs-material .goog-toolbar-combo-button-input:focus{border:1px solid #4d90fe!important}.docs-gm .goog-toolbar-button,.docs-gm .goog-toolbar-menu-button,.docs-gm .goog-toolbar-combo-button,.docs-gm #docs-equationtoolbar .goog-toolbar-button,.docs-gm #docs-equationtoolbar .goog-toolbar-menu-button,.docs-gm .trix-palette .goog-palette-cell{height:24px;line-height:24px;margin:6px 1px;top:0}.docs-gm .goog-toolbar-button-disabled,.docs-gm .goog-toolbar-menu-button-disabled,.docs-gm .trix-palette .goog-palette-cell-disabled{color:#5f6368!important;cursor:inherit;opacity:.38}.docs-gm .goog-toolbar-combo-button-input{box-sizing:border-box;height:20px!important;width:48px!important}.docs-gm .goog-toolbar-combo-button-open{background-color:#f1f3f4}.docs-gm .goog-toolbar-combo-button-input::selection{background-color:#e6f4ea}.docs-gm .goog-toolbar-combo-button-input:focus{border:2px solid #1a73e8!important;border-radius:4px;padding:0 7px}.docs-material .goog-color-menu-button-indicator{height:20px;border-bottom-color:transparent}.docs-material .docs-textcolormenubutton .goog-toolbar-menu-button-outer-box .goog-toolbar-menu-button-inner-box .goog-toolbar-menu-button-caption .goog-color-menu-button-indicator{bottom:0}.docs-material.docs-toolbar-more-bubble{border:0;box-shadow:0px 2px 2px 0px rgba(0,0,0,0.14),0px 3px 1px -2px rgba(0,0,0,0.12),0px 1px 5px 0px rgba(0,0,0,0.2);border-radius:2px}.docs-material.docs-toolbar-more-bubble .jfk-bubble-arrowup .jfk-bubble-arrowimplafter,.docs-material.docs-toolbar-more-bubble .jfk-bubble-arrowup .jfk-bubble-arrowimplbefore{border-color:transparent}.docs-material.docs-toolbar-more-toolbar{background:#fff;border-radius:2px;padding:0 4px}.docs-gm .docs-toolbar-more-bubble{border-radius:4px;box-shadow:0 2px 6px 2px rgba(60,64,67,.15)}.docs-gm .docs-toolbar-more-toolbar{border-radius:4px}.docs-material .docs-bgcolor-toolbar-menu-button:after,.docs-material .docs-bgcolor-toolbar-menu-button.goog-toolbar-menu-button-hover:hover:after{background-image:none}.docs-material .docs-bgcolor-toolbar-menu-button.goog-toolbar-menu-button-hover:hover{border-color:transparent!important}.docs-gm .docs-bgcolor-toolbar-menu-button .docs-icon-arrow-dropdown{left:-20px;top:-222px}.docs-gm .jfk-tooltip{}.jfk-button{font-family:'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500}.jfk-button-flat{font-weight:normal}.goog-toolbar-button,.goog-toolbar-menu-button{font-weight:500;font-size:11px;font-size:var(--docs-material-font-size-12,11px)}.docs-gm #docs-editor,.docs-gm #docs-editor-container{background:#f8f9fa}.goog-tab{font-family:'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500}.goog-flat-menu-button-caption{font-weight:500;font-weight:var(--docs-material-font-weight-normal,500)}.modal-dialog-buttons{font-family:'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif}.modal-dialog-buttons button{font-weight:500}.modal-dialog-title{font-size:16px;font-size:var(--docs-material-font-size-22,16px)}.goog-flat-menu-button{font-weight:500}.jfk-countrypicker-countryCurrent,.jfk-countrypicker-countryCurrent:hover{font-weight:500}.jfk-accordion .goog-zippy-expanded{font-weight:500}.jfk-titleLink{font-weight:500}.jfk-countrypicker-countryCurrent,.jfk-countrypicker-countryCurrent:hover{font-weight:500}.jfk-slideToggle{font-weight:500}.jfk-tooltip{font-weight:500;font-size:11px;font-size:var(--docs-material-font-size-12,11px)}.jfk-bubble-arrowdown .jfk-bubble-arrowimplbefore,.jfk-bubble-arrowup .jfk-bubble-arrowimplbefore{border-color:#dadce0 transparent}.apps-shortcutshelpcontentimpl-title-container{font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-family:var(--docs-material-header-font-family,Roboto,RobotoDraft,Helvetica,Arial,sans-serif)}.apps-shortcutshelppopup-title-container{font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-family:var(--docs-material-header-font-family,Roboto,RobotoDraft,Helvetica,Arial,sans-serif)}.docs-gm .docs-debug-container{font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif}.docs-gm .docs-rotationhandle-circle,.docs-gm .docs-rotationhandle-stick,.docs-gm .docs-squarehandleselectionbox-handle,.docs-gm .waffle-obj-drag-component{background-color:#1a73e8}.docs-gm .docs-rotationhandle-outline,.docs-gm .docs-squarehandleselectionbox-border{border-color:#1a73e8}.docs-gm .docs-rotationhandle-stick{height:24px}.docs-gm .punch-animation-sidebar-play,.docs-gm .punch-animation-sidebar-stop,.docs-gm .waffle-filterbox-button-container .jfk-button-action,.docs-gm .docs-suggestiondialog-accept-container .jfk-button,.docs-gm .docs-suggestiondialog-accept-container .goog-flat-menu-button,.docs-gm .docs-offline-optinpromo-buttons .jfk-button-action{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;cursor:pointer}.docs-gm .punch-animation-sidebar-play.jfk-button-hover,.docs-gm .punch-animation-sidebar-stop.jfk-button-hover,.docs-gm .waffle-filterbox-button-container .jfk-button-action.jfk-button-hover,.docs-gm .docs-suggestiondialog-accept-container .jfk-button-hover,.docs-gm .docs-suggestiondialog-accept-container .goog-flat-menu-button-hover,.docs-gm .docs-offline-optinpromo-buttons .jfk-button-action.jfk-button-hover{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;background:#2a8947;box-shadow:0 1px 3px 1px rgba(52,168,83,0.15)}.docs-gm .punch-animation-sidebar-play.jfk-button-focused,.docs-gm .punch-animation-sidebar-stop.jfk-button-focused,.docs-gm .waffle-filterbox-button-container .jfk-button-action.jfk-button-focused,.docs-gm .docs-suggestiondialog-accept-container .jfk-button-focused,.docs-gm .docs-suggestiondialog-accept-container .goog-flat-menu-button-focused,.docs-gm .docs-offline-optinpromo-buttons .jfk-button-action.jfk-button-focused{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;background:#4f9e67;box-shadow:0 1px 3px 1px rgba(52,168,83,0.15)}.docs-gm .punch-animation-sidebar-play.jfk-button-hover.jfk-button-focused,.docs-gm .punch-animation-sidebar-stop.jfk-button-hover.jfk-button-focused,.docs-gm .waffle-filterbox-button-container .jfk-button-action.jfk-button-hover.jfk-button-focused,.docs-gm .docs-suggestiondialog-accept-container .jfk-button-hover.jfk-button-focused,.docs-gm .docs-suggestiondialog-accept-container .goog-flat-menu-button-hover.goog-flat-menu-button-focused,.docs-gm .docs-offline-optinpromo-buttons .jfk-button-action.jfk-button-hover.jfk-button-focused{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;background:#62a877;box-shadow:0 1px 3px 1px rgba(52,168,83,0.15)}.docs-gm .punch-animation-sidebar-play.jfk-button-pressed,.docs-gm .punch-animation-sidebar-stop.jfk-button-pressed,.docs-gm .waffle-filterbox-button-container .jfk-button-action.jfk-button-pressed,.docs-gm .docs-suggestiondialog-accept-container .jfk-button-pressed,.docs-gm .docs-suggestiondialog-accept-container .goog-flat-menu-button-pressed,.docs-gm .docs-offline-optinpromo-buttons .jfk-button-action.jfk-button-pressed{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;background:#62a877;box-shadow:0 2px 6px 2px rgba(52,168,83,0.15)}.docs-gm .punch-animation-sidebar-play.jfk-button-disabled,.docs-gm .punch-animation-sidebar-stop.jfk-button-disabled,.docs-gm .waffle-filterbox-button-container .jfk-button-action.jfk-button-disabled,.docs-gm .docs-suggestiondialog-accept-container .jfk-button-disabled,.docs-gm .docs-suggestiondialog-accept-container .goog-flat-menu-button-disabled,.docs-gm .docs-offline-optinpromo-buttons .jfk-button-action.jfk-button-disabled{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;background:#f1f3f4;color:#3c4043;opacity:0.38;cursor:default}.docs-gm .docs-image-effect-adjustment-reset-button,.docs-gm .waffle-filterbox-button-container .jfk-button-standard,.docs-gm .docs-suggestiondialog-reject-container .jfk-button,.docs-gm .docs-suggestiondialog-reject-container .goog-flat-menu-button,.docs-gm .docs-offline-optinpromo-buttons .jfk-button-standard{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:white;border:1px solid #dadce0!important;color:#188038;cursor:pointer}.docs-gm .docs-image-effect-adjustment-reset-button.jfk-button-hover,.docs-gm .waffle-filterbox-button-container .jfk-button-standard.jfk-button-hover,.docs-gm .docs-suggestiondialog-reject-container .jfk-button-hover,.docs-gm .docs-suggestiondialog-reject-container .goog-flat-menu-button-hover,.docs-gm .docs-offline-optinpromo-buttons .jfk-button-standard.jfk-button-hover{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#f8fcf9;border:1px solid #c8e7d1!important}.docs-gm .docs-image-effect-adjustment-reset-button.jfk-button-focused,.docs-gm .waffle-filterbox-button-container .jfk-button-standard.jfk-button-focused,.docs-gm .docs-suggestiondialog-reject-container .jfk-button-focused,.docs-gm .docs-suggestiondialog-reject-container .goog-flat-menu-button-focused,.docs-gm .docs-offline-optinpromo-buttons .jfk-button-standard.jfk-button-focused{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#e7f5eb;border:1px solid #bbe2c6!important}.docs-gm .docs-image-effect-adjustment-reset-button.jfk-button-hover.jfk-button-focused,.docs-gm .waffle-filterbox-button-container .jfk-button-standard.jfk-button-hover.jfk-button-focused,.docs-gm .docs-suggestiondialog-reject-container .jfk-button-hover.jfk-button-focused,.docs-gm .docs-suggestiondialog-reject-container .goog-flat-menu-button-hover.goog-flat-menu-button-focused,.docs-gm .docs-offline-optinpromo-buttons .jfk-button-standard.jfk-button-hover.jfk-button-focused{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#dff2e4;border:1px solid #b5e0c1!important}.docs-gm .docs-image-effect-adjustment-reset-button.jfk-button-pressed,.docs-gm .waffle-filterbox-button-container .jfk-button-standard.jfk-button-pressed,.docs-gm .docs-suggestiondialog-reject-container .jfk-button-pressed,.docs-gm .docs-suggestiondialog-reject-container .goog-flat-menu-button-pressed,.docs-gm .docs-offline-optinpromo-buttons .jfk-button-standard.jfk-button-pressed{}.docs-gm .docs-image-effect-adjustment-reset-button.jfk-button-disabled,.docs-gm .waffle-filterbox-button-container .jfk-button-standard.jfk-button-disabled,.docs-gm .docs-suggestiondialog-reject-container .jfk-button-disabled,.docs-gm .docs-suggestiondialog-reject-container .goog-flat-menu-button-disabled,.docs-gm .docs-offline-optinpromo-buttons .jfk-button-standard.jfk-button-disabled{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:white;border:1px solid #f1f3f4!important;color:#3c4043;opacity:0.38;cursor:default}.docs-gm .modal-dialog button,.docs-gm .modal-dialog .jfk-button-standard{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:white;border:1px solid #dadce0!important;color:#188038}.docs-gm .modal-dialog button:hover,.docs-gm .modal-dialog .jfk-button-standard.jfk-button-hover{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#f8fcf9;border:1px solid #c8e7d1!important}.docs-gm .modal-dialog button:focus,.docs-gm .modal-dialog .jfk-button-standard.jfk-button-focused{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#e7f5eb;border:1px solid #bbe2c6!important}.docs-gm .modal-dialog button:hover:focus,.docs-gm .modal-dialog .jfk-button-standard.jfk-button-hover.jfk-button-focused{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#dff2e4;border:1px solid #b5e0c1!important}.docs-gm .modal-dialog button:active,.docs-gm .modal-dialog button:focus:active,.docs-gm .modal-dialog .jfk-button-standard.jfk-button-active,.docs-gm .modal-dialog .jfk-button-standard.jfk-button-focus.jfk-button-active{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#dff2e4;border:1px solid transparent!important;box-shadow:0 2px 6px 2px rgba(60,64,67,.15)}.docs-gm .modal-dialog button[disabled],.docs-gm .modal-dialog .jfk-button-standard.jfk-button-disabled{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:white;border:1px solid #f1f3f4!important;color:#3c4043;opacity:0.38}.docs-gm .modal-dialog .goog-buttonset-action,.docs-gm .modal-dialog .jfk-button-action,.docs-gm .docs-material-bubble .jfk-button-action{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff}.docs-gm .modal-dialog .goog-buttonset-action:hover,.docs-gm .modal-dialog .jfk-button-action.jfk-button-hover,.docs-gm .docs-material-bubble .jfk-button-action.jfk-button-hover{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;background:#2a8947;box-shadow:0 1px 3px 1px rgba(52,168,83,0.15)}.docs-gm .modal-dialog .goog-buttonset-action:focus,.docs-gm .modal-dialog .jfk-button-action.jfk-button-focused,.docs-gm .docs-material-bubble .jfk-button-action.jfk-button-focused{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;background:#4f9e67;box-shadow:0 1px 3px 1px rgba(52,168,83,0.15)}.docs-gm .modal-dialog .goog-buttonset-action:hover:focus,.docs-gm .modal-dialog .jfk-button-action.jfk-button-hover.jfk-button-focused,.docs-gm .docs-material-bubble .jfk-button-action.jfk-button-hover.jfk-button-focused{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;background:#62a877;box-shadow:0 1px 3px 1px rgba(52,168,83,0.15)}.docs-gm .modal-dialog .goog-buttonset-action:active,.docs-gm .modal-dialog .goog-buttonset-action:focus:active,.docs-gm .modal-dialog .jfk-button-action.jfk-button-active,.docs-gm .modal-dialog .jfk-button-action.jfk-button-focus.jfk-button-active,.docs-gm .docs-material-bubble .jfk-button-action.jfk-button-active,.docs-gm .docs-material-bubble .jfk-button-action.jfk-button-focus.jfk-button-active{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;background:#62a877;box-shadow:0 2px 6px 2px rgba(52,168,83,0.15)}.docs-gm .modal-dialog .goog-buttonset-action[disabled],.docs-gm .modal-dialog .jfk-button-action.jfk-button-disabled,.docs-gm .docs-material-bubble .jfk-button-action.jfk-button-disabled{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;background:#f1f3f4;color:#3c4043;opacity:0.38}.docs-gm .modal-dialog .goog-flat-button,.docs-gm .modal-dialog button,.docs-gm .modal-dialog .goog-buttonset-action,.docs-gm .modal-dialog .jfk-button-standard,.docs-gm .modal-dialog .jfk-button-action,.docs-gm .docs-material-bubble .jfk-button-standard,.docs-gm .docs-material-bubble .jfk-button-action{cursor:pointer}.docs-gm .modal-dialog .goog-flat-button.goog-flat-button-disabled,.docs-gm .modal-dialog button[disabled],.docs-gm .modal-dialog .goog-buttonset-action[disabled],.docs-gm .modal-dialog .jfk-button-standard.jfk-button-disabled,.docs-gm .modal-dialog .jfk-button-action.jfk-button-disabled,.docs-gm .docs-material-bubble .jfk-button-standard.jfk-button-disabled,.docs-gm .docs-material-bubble .jfk-button-action.jfk-button-disabled{cursor:default}.docs-gm .modal-dialog .jfk-textinput{border:1px solid #dadce0;border-radius:4px;box-sizing:border-box;color:#3c4043;padding:1px 8px;font-size:14px;height:36px;margin:8px 0}.docs-gm .modal-dialog textarea.jfk-textinput{min-height:36px;height:auto;height:unset;padding:7px 8px}.docs-gm.docs-material-gm-dialog textarea.jfk-textinput{min-height:52px;max-height:52px;min-width:100%;height:auto;height:unset;padding:7px 8px}.docs-gm.docs-material-gm-dialog .jfk-textinput,.docs-gm .docs-material-bubble .jfk-textinput{border:1px solid #dadce0;border-radius:4px;box-sizing:border-box;color:#3c4043;padding:1px 8px;font-size:14px;height:36px;margin:8px 0}.docs-gm.docs-material-gm-dialog .jfk-textinput:focus,.docs-gm .docs-material-bubble .jfk-textinput:focus{border:2px solid #1a73e8;box-shadow:none;padding:0px 7px}.docs-gm.docs-material-gm-dialog textarea.jfk-textinput:focus{padding:6px 7px}.docs-material-gm-dialog-title-close:hover{opacity:1}.docs-gm .docs-material-gm-dialog-title-close{background-color:transparent;border-radius:50%;cursor:pointer;line-height:18px;text-align:center}.docs-gm .docs-material-gm-dialog-title-close:hover{background-color:#f1f3f4}.docs-gm .docs-material-gm-dialog-title-close:focus{background-color:#e8eaed;outline:none}.docs-gm .modal-dialog .jfk-textinput.sketchy-guiderow-position{margin:0}.docs-gm .modal-dialog .jfk-textinput:focus{border:2px solid #1a73e8;box-shadow:none;padding:0px 7px}.docs-gm .modal-dialog textarea.jfk-textinput:focus{padding:6px 7px}.docs-gm .modal-dialog,.docs-gm .docs-offline-optinpromo.jfk-bubble,.docs-gm .docs-sync-indicator-popup.jfk-bubble{background-color:#fff;border:1px solid transparent;border-radius:8px;box-shadow:0 4px 8px 3px rgba(60,64,67,.15);position:absolute;z-index:1003;padding:24px}.docs-gm .picker.modal-dialog{padding:0;z-index:1201}.docs-gm .modal-dialog,.docs-gm .modal-dialog-content,.docs-gm #docs-offline-optinpromo-description,.docs-gm #docs-offline-optinpromo-learn-more-container{color:#3c4043}.docs-gm #docs-offline-optinpromo-title{border-bottom:none;padding:24px}.docs-gm .modal-dialog-title-text,.docs-gm .docs-offline-optinpromo-title-text{color:#202124;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:22px;font-weight:400;line-height:28px}.docs-gm .docs-offline-optinpromo-buttons{display:flex;flex-direction:row-reverse}.docs-gm .docs-offline-optinpromo-confirm-buttons{margin-top:24px}.docs-gm .docs-offline-optinpromo-buttons .jfk-button{cursor:pointer;margin-left:16px;margin-right:0}.docs-gm .modal-dialog-buttons,.docs-gm .docs-findandreplacedialog-buttons{display:flex;justify-content:flex-end;margin-top:24px}.docs-gm .modal-dialog-buttons button{margin:0 0 0 12px}.docs-gm .modal-dialog-buttons button:first-child{margin-left:0}.docs-gm .docs-dialog .modal-dialog-title{position:relative}.docs-gm .docs-dialog .modal-dialog-title-text{display:inline-block;max-width:calc(100% - 32px);min-width:200px}.docs-gm .docs-dialog .modal-dialog-title-close{background-color:transparent;border-radius:50%;cursor:pointer;height:18px;line-height:18px;padding:7px;right:0;text-align:center;top:-3px;width:18px}.docs-gm .docs-dialog .modal-dialog-title-close:hover{background-color:#f1f3f4}.docs-gm .docs-dialog .modal-dialog-title-close:focus{background-color:#e8eaed;outline:none}.docs-gm .docs-dialog .modal-dialog-title-close:after{position:relative;right:0;top:0}.docs-gm .modal-dialog .docs-flatcolormenubutton .goog-flat-menu-button-caption,.docs-gm .sketchy-shape-effects-shadow-tile .docs-flatcolormenubutton .goog-flat-menu-button-caption{height:22px;width:22px;border-radius:50%;border:1px solid #dadce0;margin:0;outline:none}.docs-gm .modal-dialog .docs-flatcolormenubutton.goog-flat-menu-button,.docs-gm .sketchy-shape-effects-shadow-tile .docs-flatcolormenubutton.goog-flat-menu-button{padding:6px 0 6px 6px}.docs-gm div.goog-modalpopup-bg,.docs-gm div.modal-dialog-bg{background-color:#000;left:0;position:absolute;top:0;z-index:1002;opacity:.6!important}.docs-gm ::-webkit-scrollbar-track{box-shadow:none;margin:0 4px}.docs-gm ::-webkit-scrollbar-track:hover{box-shadow:none;background:none}.docs-gm ::-webkit-scrollbar-thumb{border-style:solid;border-color:transparent;border-width:4px;background-color:#dadce0;border-radius:8px;box-shadow:none}.docs-gm ::-webkit-scrollbar-thumb:hover{background-color:#80868b}.docs-gm ::-webkit-scrollbar-thumb:active{background-color:#5f6368}.docs-gm .modal-dialog .goog-flat-menu-button,.docs-gm .sketchy-shape-effects-shadow-tile .goog-flat-menu-button{border:1px solid #dadce0;border-radius:4px;box-sizing:border-box;cursor:pointer;padding:8px 6px 8px 8px;width:100%;align-items:center;background:none;color:#3c4043;display:inline-flex;justify-content:space-between;outline:none;position:relative;width:auto;width:unset}.docs-gm .modal-dialog .goog-flat-menu-button-disabled,.docs-gm .sketchy-shape-effects-shadow-tile .goog-flat-menu-button-disabled{color:#5f6368;opacity:.38;cursor:default}.docs-gm .modal-dialog .goog-flat-menu-button:active,.docs-gm .sketchy-shape-effects-shadow-tile .goog-flat-menu-button:active{background-color:#fff;border:1px solid transparent;box-shadow:0 2px 6px 2px rgba(60,64,67,.15)}.docs-gm .modal-dialog .goog-flat-menu-button-hover,.docs-gm .sketchy-shape-effects-shadow-tile .goog-flat-menu-button-hover{background-color:rgba(60,64,67,0.04);border:1px solid #dadce0;box-shadow:none}.docs-gm .modal-dialog .goog-flat-menu-button-focused,.docs-gm .sketchy-shape-effects-shadow-tile .goog-flat-menu-button-focused{background-color:rgba(60,64,67,0.06);border:1px solid #dadce0}.docs-gm .modal-dialog .goog-flat-menu-button-open,.docs-gm .sketchy-shape-effects-shadow-tile .goog-flat-menu-button-open{background-color:rgba(60,64,67,0.04);border:1px solid transparent}.docs-gm .modal-dialog .goog-flat-menu-button-hover.goog-flat-menu-button-open,.docs-gm .sketchy-shape-effects-shadow-tile .goog-flat-menu-button-hover.goog-flat-menu-button-open{background-color:rgba(60,64,67,0.06)}.docs-gm .modal-dialog .goog-flat-menu-button-focused.goog-flat-menu-button-open,.docs-gm .sketchy-shape-effects-shadow-tile .goog-flat-menu-button-focused.goog-flat-menu-button-open{background-color:rgba(60,64,67,0.08)}.docs-gm .modal-dialog .goog-flat-menu-button-disabled,.docs-gm .sketchy-shape-effects-shadow-tile .goog-flat-menu-button-disabled{border:1px solid #dadce0;box-shadow:none;cursor:default}.docs-gm .modal-dialog .goog-flat-menu-button-caption,.docs-gm .sketchy-shape-effects-shadow-tile .goog-flat-menu-button-caption{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;color:#202124;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;height:20px;line-height:20px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.docs-gm .modal-dialog .goog-flat-menu-button-disabled .goog-flat-menu-button-caption,.docs-gm .sketchy-shape-effects-shadow-tile .goog-flat-menu-button-disabled .goog-flat-menu-button-caption{color:#5f6368;opacity:.38;cursor:default}.docs-gm .modal-dialog .goog-flat-menu-button-dropdown,.docs-gm .sketchy-shape-effects-shadow-tile .goog-flat-menu-button-dropdown{background:no-repeat url(//ssl.gstatic.com/docs/common/material_common_sprite146_grey_medium.svg) -46px -3920px;height:18px;width:18px;border:none;margin-top:0;position:relative;right:0;top:0}.docs-gm .modal-dialog .goog-flat-menu-button-disabled .goog-flat-menu-button-dropdown,.docs-gm .sketchy-shape-effects-shadow-tile .goog-flat-menu-button-disabled .goog-flat-menu-button-dropdown{opacity:.38}.docs-gm .modal-dialog .goog-flat-menu-button-disabled.goog-flat-menu-button:active,.docs-gm .sketchy-shape-effects-shadow-tile .goog-flat-menu-button-disabled.goog-flat-menu-button:active{border:1px solid #dadce0;box-shadow:none;cursor:default;box-shadow:none}.docs-gm .modal-dialog .goog-flat-menu-button-open .goog-flat-menu-button-dropdown,.docs-gm .sketchy-shape-effects-shadow-tile .goog-flat-menu-button-open .goog-flat-menu-button-dropdown{-moz-transform:rotate(180deg);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.docs-gm .modal-dialog .jfk-radiobutton-disabled .jfk-radiobutton-label{color:#5f6368;opacity:.38;cursor:default}.docs-gm .share-butterbar-container{font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-family:var(--docs-material-header-font-family,"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif);font-size:13px;font-size:var(--docs-material-font-size-normal,13px);font-weight:normal;font-weight:var(--docs-material-font-weight-normal,normal)}.docs-gm .share-client-dialog .share-butterbar-container{font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-family:var(--docs-material-header-font-family,"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif)}.docs-gm .share-butterbar-container .jfk-butterBar-shown{height:40px;padding:0 16px}.docs-gm .share-butterbar-container .jfk-butterBar-shown>span{display:flex;padding-top:4px}.docs-gm .share-butter-icon{margin-right:8px}.docs-gm .share-butter-link,.docs-gm .share-butter-link:visited{color:#188038;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-family:var(--docs-material-header-font-family,"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif);font-size:16px;margin-left:80px}.docs-gm .share-butter-link:hover,.docs-gm .share-butter-link:active{color:#0d652d}.docs-gm .share-butter-link:disabled{color:#188038}.docs-display-density-comfortable#docs-toolbar-wrapper{min-height:calc(35px + 9px - 2px)}.docs-display-density-comfortable.goog-menu .goog-menuitem:not(.docs-submenuitem){padding-top:9px;padding-bottom:9px}.docs-display-density-comfortable .waffle-function-category-row-description{display:block}.docs-display-density-comfortable .shape-palette .goog-palette-cell{padding:5px}.docs-display-density-comfortable.waffle-function-category-row.waffle-function-category-active{padding:5px 10px}.docs-display-density-comfortable.goog-menu:not(.docs-fontmenu) .goog-menuitem:not(.waffle-colormenuitems-scheme-header-edit-button):not(.docs-submenuitem):not(.apps-menuitem):not(.docs-menuitem-add-fonts).goog-menuitem-highlight{padding-top:calc(9px - 1px);padding-bottom:calc(9px - 1px);border-width:1px 0}.docs-display-density-comfortable.goog-menu .goog-menuitem-icon{top:calc(9px - 1px)}.docs-display-density-comfortable.goog-menu .goog-menuitem-highlight:not(.apps-menuitem):not(.docs-menuitem-add-fonts) .goog-menuitem-icon{top:calc(calc(9px - 1px) - 1px)}.docs-gm .docs-display-density-comfortable.goog-menu .apps-menuitem .goog-menuitem-icon{top:0;margin-top:11px;margin-bottom:11px}.docs-gm .docs-display-density-comfortable.goog-menu .goog-menuitem-highlight:not(.apps-menuitem) .goog-menuitem-icon{top:0;margin-top:10px;margin-bottom:10px}.docs-display-density-comfortable .goog-palette-cell{padding:4px}#t-border-palette.docs-display-density-comfortable .goog-palette-cell{padding:4px 6px 4px 4px}#t-border-palette.docs-display-density-comfortable #t-border-style-menu-button{margin-top:6px}#t-border-palette.docs-display-density-comfortable .goog-toolbar-color-menu-button{padding-top:3px;padding-bottom:3px}.docs-display-density-comfortable.trix-palette .goog-palette-cell{display:inline-block;margin:2px;padding:4px 6px 4px 4px}.docs-display-density-comfortable.trix-palette .goog-palette-table{margin:0}#t-text-rotation-palette td:not(.goog-palette-cell),.docs-display-density-comfortable.trix-palette{padding:0}.docs-display-density-comfortable .goog-inline-block.goog-toolbar-combo-button.waffle-text-rotation-combobox{padding-top:3px;padding-bottom:3px;margin:4px}.docs-display-density-comfortable.waffle-ac-renderer .waffle-function-autocomplete-row-description{display:block}.docs-display-density-comfortable.goog-menu .docs-omnibox-input{padding-top:5px;padding-bottom:5px;height:33px}.docs-display-density-comfortable .docs-material-colorpalette-cell{padding:2px}.docs-display-density-comfortable .docs-material-colorpalette-colorswatch{height:24px;width:24px}.docs-gm .docs-display-density-comfortable.docs-colormenuitems .goog-menuitem.colormenuitems-custom-header-add-button{padding:10px 0}.docs-gm .goog-menu.docs-display-density-comfortable .goog-menuitem.colormenuitems-no-color{padding-top:9px;padding-bottom:9px;border-width:1px 0}.docs-display-density-comfortable.docs-colormenuitems .goog-menuitem.goog-inline-block.waffle-colormenuitems-scheme-header-edit-button{padding:5px}.docs-display-density-comfortable.docs-colormenuitems .goog-menuitem-highlight.waffle-colormenuitems-scheme-header-edit-button{padding-top:4px;padding-bottom:4px;border-width:1px 0}.docs-display-density-comfortable.docs-colormenuitems .goog-menuseparator{margin:10px 0}.docs-display-density-comfortable.goog-menu .docs-omnibox-autocomplete{padding-top:6px;padding-bottom:6px}.docs-display-density-comfortable.goog-menu .docs-omnibox-autocomplete.goog-menuitem-highlight{padding-top:calc(6px - 1px);padding-bottom:calc(6px - 1px)}.docs-display-density-comfortable .goog-toolbar .goog-toolbar-button,.docs-display-density-comfortable .goog-toolbar .goog-toolbar-combo-button,.docs-display-density-comfortable .goog-toolbar .goog-toolbar-menu-button{padding:2px;margin-left:2px;margin-right:2px}.docs-display-density-comfortable .docs-toolbar-more-toolbar{min-height:calc(35px + 2*2px)}.docs-display-density-comfortable .goog-toolbar .goog-toolbar-separator.goog-inline-block{height:calc(35px + 2*2px)}.docs-gm .docs-display-density-comfortable .goog-toolbar .goog-toolbar-separator.goog-inline-block{height:24px}.docs-display-density-comfortable .goog-toolbar .docs-toolbar-button-split-left{margin-right:0}.docs-display-density-comfortable .goog-toolbar .docs-toolbar-button-split-right{margin-left:0}.docs-display-density-comfortable .goog-toolbar .docs-omnibox-input{height:29px}.docs-display-density-comfortable .goog-toolbar .docs-omnibox-autocomplete{margin-right:2px}.docs-display-density-comfortable.docs-colormenuitems .docs-c-u-colormenutogglebutton-base{padding:4px 33px}.docs-display-density-comfortable.docs-colormenuitems .jfk-palette-table{width:100%}.docs-display-density-comfortable.docs-colormenuitems .jfk-palette-row{display:flex;-webkit-justify-content:space-between;justify-content:space-between}.docs-display-density-comfortable.docs-colormenuitems .jfk-palette-colorswatch,.docs-display-density-comfortable.docs-colormenuitems .docs-colormenuitems-custom-palette .jfk-palette-cell{height:22px;width:22px}.docs-display-density-comfortable.goog-menu.docs-fontmenu .docs-menuitem-add-fonts{border-color:#eee}.docs-display-density-comfortable.goog-menu.docs-fontmenu .goog-menuitem.docs-submenuitem{padding-top:9px;padding-bottom:9px;border:0}.docs-display-density-comfortable.goog-menu.docs-fontmenu .goog-menuitem.docs-submenuitem::before{line-height:38px}.docs-display-density-comfortable.goog-menu.docs-fontmenu .docs-submenuitem-splitbutton{height:calc(38px - 2px);line-height:calc(38px - 2px)}body:not(.docs-gm) .docs-display-density-comfortable.goog-menu .goog-menuitem-ie{padding-top:7px;padding-bottom:24px}body:not(.docs-gm) .docs-display-density-comfortable.goog-menu .goog-menuitem-icon-ie{top:4px}.docs-display-density-toolbar-menuitem-label{font-weight:500;padding-bottom:4px}.docs-display-density-toolbar-menuitem-description{font-size:11px;color:#777}.docs-display-density-comfortable .goog-toolbar.chart-toolbar-with-omnibox{display:flex;-ms-flex-align:center;-moz-box-align:center;-webkit-box-align:center;box-align:center;-webkit-align-items:center;align-items:center}.docs-display-density-comfortable .goog-toolbar.chart-toolbar-with-omnibox .sheet-toolbar-button{margin-right:calc(2px*2)}.docs-chat.jfk-button{border-radius:0;height:28px;margin-left:2px;margin-right:0px;min-width:24px;vertical-align:top}.docs-chat.jfk-button .docs-icon{opacity:.70}.docs-chat.jfk-button.jfk-button-checked .docs-icon{opacity:0.9}.docs-chat.jfk-button.jfk-button-disabled .docs-icon{opacity:0.333}.docs-chat-badge{background:#db4437;border-radius:6px;display:none;height:12px;pointer-events:none;position:absolute;right:-4px;top:-4px;width:12px}.docs-chat-badge-visible{display:block}.docs-chat-badge.docs-chat-hc-gecko{filter:url("data:image/svg+xml;utf8,\00003csvg%20xmlns=\000027http://www.w3.org/2000/svg\000027\00003e\00003cfilter%20id=\000027invertColor\000027\00003e\00003cfeColorMatrix%20type=\000027matrix\000027%20values=\000027-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0\000027/\00003e\00003c/filter\00003e\00003c/svg\00003e#invertColor")}.docs-chat-badge.docs-chat-hc-ie{-ms-high-contrast-adjust:none;background-color:white}.docs-chat-message-tooltip-container{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;box-shadow:0 1px 1px 0 rgba(0,0,0,0.14),0 2px 1px -1px rgba(0,0,0,0.12),0 1px 3px 0 rgba(0,0,0,0.2);background-color:#fafafa;padding:12px;z-index:501}.docs-chat-message-tooltip-container .jfk-bubble-arrowup .jfk-bubble-arrowimplafter{border-color:#fafafa transparent}.docs-chat-message-tooltip-container .jfk-bubble-arrowup .jfk-bubble-arrowimplbefore{border-color:rgba(0,0,0,0.3) transparent}.docs-chat-message-tooltip{font-size:13px;height:32px;line-height:18px;position:relative;text-align:left;width:192px}.docs-chat-message-tooltip-subject{opacity:.87;font-weight:500}.docs-chat-message-tooltip-content{opacity:.54;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-break:break-all;word-wrap:break-word}.docs-chat-pane-container{border-left:1px solid #d9d9d9;outline:none;position:absolute;right:0;top:0;width:300px}.docs-gm .docs-chat-pane-container{overflow:hidden;box-shadow:-3px 0px 6px -3px rgba(60,64,67,.15),3px 0px 6px -3px rgba(60,64,67,.15);border-left:0}.docs-chat-pane{background-color:#fff;font-size:13px;height:100%;overflow:hidden;position:relative;z-index:801}.docs-gm .docs-chat-pane{font-size:14px}.docs-chat-users{background:#f5f5f5;color:#000;margin:0;max-height:33%;outline-style:none;overflow:auto;padding:8px 0 3px 0;text-align:left;vertical-align:top}.docs-chat-users-empty{display:none}.docs-chat-messages{background-color:#fff;box-sizing:border-box;color:rgba(0,0,0,.87);outline-style:none;overflow:auto;padding:16px 24px 0px 16px;position:relative;vertical-align:middle}.docs-gm .docs-chat-messages{color:#3c4043;letter-spacing:.25px;padding:16px 16px 0px 16px}.docs-chat-edit-container{background:#eee;bottom:0;height:96px;margin:0;outline:0;position:absolute;width:100%}.docs-gm .docs-chat-edit-container{background-color:#fff}.docs-chat-edit-box{border:1px solid #5ea0e3;box-sizing:border-box;font-size:100%;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;height:64px;left:16px;outline:0;overflow:auto;padding:8px;position:relative;top:16px;width:268px;resize:none}.docs-gm .docs-chat-edit-box{border:1px solid #dadce0;border-radius:4px;box-sizing:border-box;color:#3c4043;padding:1px 8px;font-size:14px;height:36px;margin:8px 0}.docs-gm .docs-chat-edit-box{height:64px;margin:0;padding:8px}.docs-chat-edit-box::-webkit-input-placeholder,.docs-chat-edit-box::-moz-placeholder,.docs-chat-edit-box:-ms-input-placeholder{color:#5f6368}.docs-chat-edit-box-focus{outline:1px solid #5ea0e3}.docs-gm .docs-chat-edit-box-focus{border:2px solid #1a73e8;box-shadow:none;padding:0px 7px}.docs-gm .docs-chat-edit-box-focus{padding:7px}.docs-chat-roster{width:250px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;word-break:break-all;word-wrap:break-word}.docs-gm .docs-chat-roster{width:240px}.label-input-label{color:#a9a9a9}.docs-chat-status{color:gray;line-height:12px}.docs-chat-name{font-weight:500}.docs-gm .docs-chat-name{font-weight:500}.docs-chat-message.docs-chat-status-message{margin-bottom:0px}.docs-chat-message{line-height:18px;margin-bottom:2px;outline-style:none;word-wrap:break-word;white-space:pre-wrap}.docs-chat-first-series-message{margin-top:10px}.docs-user-roster{margin:0;outline-style:none;padding:0 0 10px 1em;position:relative}.docs-user-roster-name{color:#666;left:2.7em;position:absolute;top:0}.docs-user-roster-bubble{height:13px;margin-right:1px;top:1px;vertical-align:text-bottom;width:13px}.docs-user-roster-bubble-clickable{cursor:pointer}.docs-chat-anon{color:gray;font-size:11px;padding:6px 24px 3px 16px}.docs-chat-title-bar{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;background-color:#616161;border-bottom:1px solid #616161;border-top:1px solid #616161;color:#fff;height:15px;padding:10px 0 10px 12px;position:relative}.docs-gm .docs-chat-title-bar{display:flex;align-items:center;color:#202124;background-color:#fff;height:56px;padding:0 16px;border-bottom:1px solid #dadce0;border-top:1px solid #dadce0;font-family:'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:16px;z-index:1;padding-right:56px;letter-spacing:.1px}.docs-chat-title-bar-highlight{background-color:#4285f4;border-bottom-color:#4285f4;border-top-color:#4285f4;color:#fff}.docs-chat-title{font-weight:500}.docs-gm .docs-chat-title-bar.docs-chat-shadow{box-shadow:0 2px 6px 2px rgba(60,64,67,.15)}.docs-gm .docs-chat-edit-container.docs-chat-shadow{box-shadow:0 -2px 6px 2px rgba(60,64,67,.15)}.docs-sidebar-close-button.docs-chat-close-button{float:right;top:8px}.docs-sidebar-gm-close-button.docs-chat-close-button{position:absolute;right:11px;top:12px}.docs-presence-widget{cursor:pointer;height:19px;margin:0 0 5px 0;outline:0;position:absolute;right:44px;top:11px;width:207px}#docs-presence-menubar .docs-presence-widget{top:5px}#docs-presence .docs-presence-widget{display:inline-block;position:relative;right:auto;text-align:left;width:auto}.docs-presence-widget-inner{border:1px solid transparent;height:17px;margin-bottom:8px}#docs-presence .docs-presence-widget-inner{display:inline-block;max-width:190px}.docs-presence-widget-normal .docs-presence-widget-inner{background:#fff;border-color:#fff;color:#666}.docs-presence-widget-hover .docs-presence-widget-inner,.docs-presence-widget-focused .docs-presence-widget-inner{background:#f3f3f3;border-color:#f3f3f3;color:#222!important}.docs-presence-widget-open .docs-presence-widget-inner{background:#f3f3f3;border-color:#e5e5e5;color:#666}.docs-presence-widget-notify .docs-presence-widget-inner{color:#fff}.docs-presence-widget-arrow{position:absolute!important;top:0}.docs-presence-widget-content{font-size:11px;line-height:18px;max-width:98px;overflow:hidden;padding:0 4px;text-overflow:ellipsis;white-space:nowrap}#docs-presence .docs-presence-widget-content{max-width:90px;position:relative;vertical-align:top}.docs-presence-widget-collab{max-width:90px;overflow:hidden;position:absolute;right:4px;top:1px}#docs-presence .docs-presence-widget-collab{display:inline-block;margin-right:4px;position:relative;right:auto;top:auto}.docs-presence-widget-collab .docs-user-roster-bubble{margin:1px;vertical-align:baseline}#docs-presence-container{height:29px;margin-right:10px;vertical-align:middle}#docs-presence{vertical-align:top}.docs-presence-plus-widget{max-width:250px;outline:0;text-align:left}#docs-bars .docs-presence-plus-widget{position:absolute;overflow:hidden;right:0;top:2px}.docs-presence-plus-widget-inner{vertical-align:top}.docs-presence-plus-widget-status{color:#222;display:none;text-align:right;margin:8px 10px 0 0}.docs-presence-plus-widget-open .docs-presence-plus-widget-status{display:block}.docs-presence-plus-widget-collabs{height:30px}.docs-presence-plus-widget-open .docs-presence-plus-widget-collabs{display:none}.docs-presence-plus-widget-overflow-button{border-radius:0;height:28px;margin:0 2px 0 -1px;min-width:0;padding:0;width:13px}.docs-presence-plus-widget-overflow-button .goog-flat-menu-button-dropdown{right:3px}.docs-presence-plus-widget-overflow-menu{max-height:300px;outline:none;overflow:auto;padding:7px;text-align:left;white-space:nowrap}.docs-presence-plus-widget-overflow,.docs-presence-plus-collab-widget-container{height:30px;overflow:hidden;vertical-align:top}.docs-presence-plus-collab-widget-color-block{height:30px;overflow:hidden;width:25px}.docs-presence-plus-collab-widget-menuitem,.docs-gm .goog-menu .docs-presence-plus-collab-widget-menuitem.goog-menuitem,.docs-gm .goog-menu .docs-presence-plus-collab-widget-menuitem.goog-menuitem-highlight{border-style:none;padding:0}.docs-presence-plus-collab-widget-container{margin:0 2px;width:25px}.docs-presence-plus-collab-widget-color-block{opacity:.5;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"}.docs-presence-plus-collab-widget-active .docs-presence-plus-collab-widget-color-block{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}.docs-presence-plus-collab-widget-exit .docs-presence-plus-collab-widget-color-block{height:0;width:0}.docs-presence-plus-collab-widget-image,.docs-presence-plus-collab-widget-image-container{height:25px;padding-bottom:5px;width:25px}.docs-presence-plus-collab-widget-image-container{overflow:hidden}.docs-presence-plus-collab-widget-image-border{border-bottom:1px solid #fff;height:24px}.docs-presence-plus-collab-widget-idle-text{color:#777;font-size:11px}.docs-presence-plus-collab-widget-active .docs-presence-plus-collab-widget-idle-text{display:none}.docs-presence-plus-widget-overflow-button-collabs{margin:0}@-webkit-keyframes color-join{from{margin-top:25px}to{margin-top:0}}@-moz-keyframes color-join{from{margin-top:25px}to{margin-top:0}}@-ms-keyframes color-join{from{margin-top:25px}to{margin-top:0}}.docs-presence-plus-collab-widget-enter .docs-presence-plus-collab-widget-color-block{-webkit-animation-name:color-join;-moz-animation-name:color-join;-ms-animation-name:color-join;-webkit-animation-duration:.5s;-moz-animation-duration:.5s;-ms-animation-duration:.5s}@-webkit-keyframes image-join{0%{height:0;padding-bottom:0}33%{height:0;padding-bottom:0}100%{height:25px;padding-bottom:5px}}@-moz-keyframes image-join{0%{height:0;padding-bottom:0}33%{height:0;padding-bottom:0}100%{height:25px;padding-bottom:5px}}@-ms-keyframes image-join{0%{height:0;padding-bottom:0}33%{height:0;padding-bottom:0}100%{height:25px;padding-bottom:5px}}.docs-presence-plus-collab-widget-enter .docs-presence-plus-collab-widget-image-container{-webkit-animation-name:image-join;-moz-animation-name:image-join;-ms-animation-name:image-join;-webkit-animation-duration:1.5s;-moz-animation-duration:1.5s;-ms-animation-duration:1.5s;-webkit-animation-timing-function:ease-in;-moz-animation-timing-function:ease-in;-ms-animation-timing-function:ease-in}@-webkit-keyframes collab-exit{0%{height:30px;width:25px;margin:0;opacity:.5}25%{height:30px;width:25px;margin:0;opacity:.5}99%{height:0;width:0;margin:15px 12px}100%{height:0;width:0;margin:0}}@-moz-keyframes collab-exit{0%{height:30px;width:25px;margin:0;opacity:.5}25%{height:30px;width:25px;margin:0;opacity:.5}99%{height:0;width:0;margin:15px 12px}100%{height:0;width:0;margin:0}}@-ms-keyframes collab-exit{0%{height:30px;width:25px;margin:0;opacity:.5}25%{height:30px;width:25px;margin:0;opacity:.5}99%{height:0;width:0;margin:15px 12px}100%{height:0;width:0;margin:0}}.docs-presence-plus-collab-widget-exit .docs-presence-plus-collab-widget-color-block{-webkit-animation-name:collab-exit;-moz-animation-name:collab-exit;-ms-animation-name:collab-exit;-webkit-animation-duration:1s;-moz-animation-duration:1s;-ms-animation-duration:1s}@-webkit-keyframes collab-image-exit{0%{margin:0;padding-bottom:5px}25%{margin:0;padding-bottom:5px}100%{margin-top:-15px;margin-left:-12px}}@-moz-keyframes collab-image-exit{0%{margin:0;padding-bottom:5px}25%{margin:0;padding-bottom:5px}100%{margin-top:-15px;margin-left:-12px}}@-ms-keyframes collab-image-exit{0%{margin:0;padding-bottom:5px}25%{margin:0;padding-bottom:5px}100%{margin-top:-15px;margin-left:-12px}}.docs-presence-plus-collab-widget-exit .docs-presence-plus-collab-widget-image{-webkit-animation-name:collab-image-exit;-moz-animation-name:collab-image-exit;-ms-animation-name:collab-image-exit;-webkit-animation-duration:1s;-moz-animation-duration:1s;-ms-animation-duration:1s}.docs-presence-plus-widget-overflow-menu .docs-presence-plus-collab-widget-container{display:block;height:25px;margin:0 0 5px;width:auto}.docs-presence-plus-widget-overflow-menu .docs-presence-plus-collab-widget-color-block{width:30px}.docs-presence-plus-widget-overflow-menu .docs-presence-plus-collab-widget{height:25px;padding-right:20px}.docs-presence-plus-widget-overflow-menu .docs-presence-plus-collab-widget-image{position:relative;left:-1px}.docs-presence-plus-widget-overflow-menu .docs-presence-plus-collab-widget-image,.docs-presence-plus-widget-overflow-menu .docs-presence-plus-collab-widget-image-container{padding-bottom:0}.docs-presence-plus-widget-overflow-menu .docs-presence-plus-collab-widget-image-container{padding-left:5px}.docs-presence-plus-widget-overflow-menu .docs-presence-plus-collab-widget-image-border{border-bottom:none;border-left:1px solid #fff;height:25px}.docs-presence-plus-widget-overflow-menu .docs-presence-plus-collab-widget-name{color:#222;font-size:13px;margin:4px 0 0 5px;vertical-align:top}.talk_roster{display:none}.docs-chat-mole-hidden>div{top:-10000px!important;left:-10000px!important}.talk_chat_widget{z-index:900!important}.docs-copydocdialog{width:360px}.docs-copydocdialog-filenameinput{width:250px}.docs-copydocdialog-warning,.docs-copydocdialog-destination-sharewarning{color:#999;font-size:11px}.docs-copydocdialog-checkbox{font-size:14px;letter-spacing:0.2px;padding-top:5px;vertical-align:top}.docs-gm .docs-copydocdialog-checkbox{cursor:pointer;padding-top:8px}.docs-gm .docs-copydocdialog-checkbox .jfk-checkbox{margin-top:-8px;margin-right:8px}.docs-copydocdialog-checkbox.docs-copydocdialog-collaboratorcheckbox{padding-top:0}.docs-gm .docs-copydocdialog{min-width:312px;width:auto;width:unset}.docs-gm .docs-copydocdialog .docs-copydocdialog-filenameinput{width:100%}.docs-gm .docs-copydocdialog .docs-copydocdialog-destination-button{height:34px;width:294px}.docs-gm .docs-copydocdialog-destination-img{top:3px}.docs-gm .docs-copydocdialog-destination-name{vertical-align:sub}.docs-copydocdialog-checkbox-disabled{opacity:.38}.docs-gm .docs-copydocdialog-includeresolvedcommentscheckbox .jfk-checkbox{vertical-align:top;margin-top:-4px}.docs-copydocdialog-checkbox-label{width:285px;display:inline-block}.docs-copydocdialog-destination-button,.docs-copydocdialog-filenameinput{margin-top:4px}.docs-copydocdialog-destination-button{border:1px solid #ddd;margin-right:0;overflow:hidden;position:relative;text-align:left;text-overflow:ellipsis;width:250px}.docs-copydocdialog-destination-button.jfk-button-focused{border:1px solid #4d90fe}.docs-copydocdialog-destination-section{margin-top:16px}.docs-copydocdialog-destination-img{height:10px;margin-right:5px;position:relative;top:2px;width:13px}.docs-copydocdialog-description{font-size:16px;height:72px;letter-spacing:0.15px;line-height:24px;vertical-align:top;width:312px}.docs-gm .docs-copydocdialog-description{height:auto;height:unset;color:#5f6368;max-width:464px;width:100%}.goog-menu.picker-min.docs-copydocdialog-destination-picker{z-index:1003}.modal-dialog.docs-dialog.docs-copy-endangered-dialog{z-index:1007;width:376px}.modal-dialog-bg.docs-copy-endangered-dialog-bg{z-index:1006}.docs-gm .modal-dialog.docs-dialog.docs-copy-endangered-dialog{min-width:464px;width:auto;width:unset}.docs-dialog.docs-hc-gecko .modal-dialog-title-close:after{filter:invert(100%)}.docs-dialog.docs-hc-ie .modal-dialog-title-close:after{-ms-high-contrast-adjust:none;background-color:white}.docs-dialog .modal-dialog-title-close{opacity:0.54}.docs-dialog .modal-dialog-title-close:hover{opacity:0.87}.modal-dialog-title-text{font-family:'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:normal}.docs-dialog .modal-dialog-title-close:after{background:none;right:13px;top:14px;content:url(//ssl.gstatic.com/images/icons/material/system/svg/close_18px.svg);height:18px;width:18px}.docs-details-dialog{min-width:200px}.docs-details-error{margin-left:10px;margin-top:40px}.docs-details-loading{background-image:url(//ssl.gstatic.com/docs/common/loading_animation.gif);height:50px;margin:auto;width:50px}.docs-details-table{border-collapse:collapse}.docs-details-field{font-size:13px;font-weight:500;height:27px;width:100px}#docs-details-folder{margin-right:6px;opacity:0.45;outline:none;vertical-align:bottom}.docs-details-value{height:27px;max-width:200px}.docs-gm .docs-details-dialog{min-width:312px;padding:24px}.docs-gm .docs-details-dialog .modal-dialog-title-text{color:#3c4043;font-size:22px;font-weight:normal;height:28px}.docs-gm .docs-details-field,.docs-gm .docs-details-value{font-size:14px;height:20px;padding:8px 0}.docs-gm .docs-details-field{color:#3c4043;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;min-width:100px;padding-right:20px}.docs-gm .docs-details-value{color:#202124;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif}.picker-iframe.picker-min{-moz-box-shadow:rgba(0,0,0,.2) 0 4px 16px;-webkit-box-shadow:rgba(0,0,0,.2) 0 4px 16px;box-shadow:rgba(0,0,0,.2) 0 4px 16px;color:#000;padding:0;position:absolute;z-index:1002}.picker-iframe.picker-minew .picker-min-frame-up{background-color:#f1f1f1}.picker-iframe.picker-white-callout.picker-minew .picker-min-frame-up{background-color:#fff}.picker-iframe.picker-min.goog-menu{border-color:#ccc;line-height:0;max-height:none;overflow:visible}.picker-iframe.picker-min-top{margin-top:15px}.picker-iframe.picker-minew.picker-min-top{margin-top:9px}.picker-iframe.picker-min-bottom{margin-top:-15px}.picker-iframe.picker-minew.picker-min-bottom{margin-top:-9px}.picker-iframe .picker-min-arrow-up,.picker-iframe .picker-min-arrow-down{position:absolute;width:32px;z-index:0}.picker-iframe .picker-min-arrow-up{top:-15px}.picker-iframe.picker-minew .picker-min-arrow-up{top:-10px;width:20px}.picker-iframe .picker-min-arrow-down{bottom:-16px}.picker-iframe.picker-minew .picker-min-arrow-down{bottom:-10px;width:20px}.picker-iframe .picker-min-arrow-inner,.picker-iframe .picker-min-arrow-border{border:16px solid;height:0;position:absolute;width:0}.picker-iframe.picker-minew .picker-min-arrow-inner,.picker-iframe.picker-minew .picker-min-arrow-border{border:10px solid}.picker-iframe.picker-minew .picker-min-arrow-up .picker-min-arrow-inner{border-color:#f1f1f1 transparent}.picker-iframe.picker-white-callout.picker-minew .picker-min-arrow-up .picker-min-arrow-inner{border-color:#fff transparent}.picker-iframe .picker-min-arrow-up .picker-min-arrow-inner{border-color:#fff transparent;top:1px;z-index:1}.picker-iframe .picker-min-arrow-down .picker-min-arrow-inner{border-color:#fff transparent;bottom:1px;z-index:1}.picker-iframe .picker-min-arrow-up .picker-min-arrow-border,.picker-iframe .picker-min-arrow-down .picker-min-arrow-border{border-color:rgba(0,0,0,0.2) transparent}.picker-iframe .picker-min-arrow-down .picker-min-arrow-border{bottom:0}.picker-iframe .picker-min-arrow-up .picker-min-arrow-inner,.picker-iframe .picker-min-arrow-up .picker-min-arrow-border{border-top-width:0}.picker-iframe .picker-min-arrow-down .picker-min-arrow-inner,.picker-iframe .picker-min-arrow-down .picker-min-arrow-border{border-bottom-width:0}.drive-organize-atd-popup{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;vertical-align:middle}.drive-organize-atd-popup-undo-btn{margin:auto}.drive-organize-popup{position:absolute;z-index:1002;-webkit-box-shadow:rgba(0,0,0,0.2) 0 4px 16px;-moz-box-shadow:rgba(0,0,0,0.2) 0 4px 16px;box-shadow:rgba(0,0,0,0.2) 0 4px 16px;background-color:#f1f1f1;border:1px solid rgba(0,0,0,0.2);color:#6e6e6e;font-size:13px;font-weight:normal;text-align:left;white-space:nowrap}.drive-organize-popup-outline-hidden *:focus{outline:none}.drive-organize-popup-content{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;padding:10px}.drive-organize-popup-message{overflow:hidden;text-overflow:ellipsis;-webkit-box-orient:vertical;-webkit-line-clamp:6;display:-webkit-box;max-height:90px;margin:auto;max-width:160px;padding-right:10px;word-break:break-word}.drive-organize-button{display:inline-block;margin:auto}.drive-organize-popup-link-btn{color:#15c;cursor:pointer;padding:0 7px}.drive-organize-popup-close-btn{cursor:pointer;height:15px;padding:3px;vertical-align:middle}.drive-organize-popup-link-btn.drive-organize-button-hover{text-decoration:underline}.drive-organize-popup-arrow{position:absolute;width:20px}.drive-organize-popup-arrow .drive-organize-popup-triangle-before,.drive-organize-popup-arrow .drive-organize-popup-triangle-after{content:'';display:block;height:0;position:absolute;width:0}.drive-organize-popup-arrow .drive-organize-popup-triangle-before{border:10px solid}.drive-organize-popup-arrow .drive-organize-popup-triangle-after{border:9px solid}.drive-organize-popup-arrowdown{bottom:0}.drive-organize-popup-arrowup{top:-10px}.drive-organize-popup-arrowdown .drive-organize-popup-triangle-before,.drive-organize-popup-arrowup .drive-organize-popup-triangle-before{border-color:rgba(0,0,0,0.2) transparent;left:0}.drive-organize-popup-arrowdown .drive-organize-popup-triangle-after,.drive-organize-popup-arrowup .drive-organize-popup-triangle-after{border-color:#f1f1f1 transparent;left:1px}.drive-organize-popup-arrowdown .drive-organize-popup-triangle-before{border-bottom-width:0}.drive-organize-popup-arrowdown .drive-organize-popup-triangle-after{border-bottom-width:0}.drive-organize-popup-arrowup .drive-organize-popup-triangle-before{border-top-width:0}.drive-organize-popup-arrowup .drive-organize-popup-triangle-after{border-top-width:0;top:2px}.drive-organize-dialog{-webkit-box-shadow:0 4px 16px rgba(0,0,0,.2);-moz-box-shadow:0 4px 16px rgba(0,0,0,.2);box-shadow:0 4px 16px rgba(0,0,0,.2);background:#fff;background-clip:padding-box;color:#000;font-family:inherit;outline:0;padding:24px;position:absolute;width:560px;z-index:2204}.drive-organize-dialog-bg{background:#000;left:0;position:absolute;top:0;z-index:2203}div.drive-organize-dialog-bg{filter:alpha(opacity=50);opacity:.50}.drive-organize-dialog-title{background-color:#fff;color:#000;cursor:default;font-size:20px;font-weight:normal;line-height:24px}.drive-organize-dialog-title-close{height:11px;margin:24px;opacity:0.7;padding:6px;position:absolute;right:0;top:0;width:11px}.drive-organize-dialog-title-close:after{background:url(//ssl.gstatic.com/ui/v1/dialog/close-x.png);content:'';height:11px;position:absolute;width:11px}.drive-organize-dialog-title-close:hover{opacity:1}.drive-organize-dialog-content{background-color:#fff;font-size:16px;line-height:1.4em;padding-top:24px;padding-bottom:24px;word-wrap:break-word}.drive-organize-dialog-buttons{text-align:right}.drive-organize-dialog-buttons .drive-organize-button{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;background-color:#f5f5f5;background-image:-webkit-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:-moz-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:-ms-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:-o-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:linear-gradient(top,#f5f5f5,#f1f1f1);border:1px solid #dcdcdc;border:1px solid rgba(0,0,0,0.1);color:#444;cursor:default;font-family:inherit;font-size:11px;font-weight:bold;height:29px;line-height:27px;margin:0 0 0 16px;min-width:72px;outline:0;padding:0 8px}.drive-organize-dialog-buttons .drive-organize-button:hover,.drive-organize-dialog-buttons .drive-organize-button:active{-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1);background-color:#f8f8f8;background-image:-webkit-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-moz-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-ms-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-o-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:linear-gradient(top,#f8f8f8,#f1f1f1);border:1px solid #c6c6c6;color:#333}.drive-organize-dialog-buttons .drive-organize-button:active{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.drive-organize-dialog-buttons .drive-organize-button:focus{border:1px solid #4d90fe}.drive-organize-dialog-buttons .drive-organize-button[disabled]{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;background:#fff;background-image:none;border:1px solid #f3f3f3;border:1px solid rgba(0,0,0,0.5);color:rgba(0,0,0,.26)}.drive-organize-dialog-buttons .goog-buttonset-action{background-color:#4d90fe;background-image:-webkit-linear-gradient(top,#4d90fe,#4787ed);background-image:-moz-linear-gradient(top,#4d90fe,#4787ed);background-image:-ms-linear-gradient(top,#4d90fe,#4787ed);background-image:-o-linear-gradient(top,#4d90fe,#4787ed);background-image:linear-gradient(top,#4d90fe,#4787ed);border:1px solid #3079ed;color:#fff}.drive-organize-dialog-buttons .goog-buttonset-action:hover,.drive-organize-dialog-buttons .goog-buttonset-action:active{background-color:#357ae8;background-image:-webkit-linear-gradient(top,#4d90fe,#357ae8);background-image:-moz-linear-gradient(top,#4d90fe,#357ae8);background-image:-ms-linear-gradient(top,#4d90fe,#357ae8);background-image:-o-linear-gradient(top,#4d90fe,#357ae8);background-image:linear-gradient(top,#4d90fe,#357ae8);border:1px solid #2f5bb7;color:#fff}.drive-organize-dialog-buttons .goog-buttonset-action:active{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.3);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.3);box-shadow:inset 0 1px 2px rgba(0,0,0,0.3)}.drive-organize-dialog-buttons .goog-buttonset-action:focus{-webkit-box-shadow:inset 0 0 0 1px #fff;-moz-box-shadow:inset 0 0 0 1px #fff;box-shadow:inset 0 0 0 1px #fff;border:1px solid #fff;border:rgba(0,0,0,0) solid 1px;outline:1px solid #4d90fe;outline:rgba(0,0,0,0) 0}.drive-organize-dialog-buttons .goog-buttonset-action[disabled]{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;background:#4d90fe;color:#fff;filter:alpha(opacity=50);opacity:0.5}.drive-organize-dialog .goog-menu{box-shadow:none;margin-bottom:-24px;padding:0;position:relative;z-index:inherit}.drive-organize-dialog .goog-menuitem{color:#000;font-size:13px;height:16px;margin:0;opacity:.87;padding:0 0 24px 16px}.drive-organize-dialog-parent-name{font-weight:bold}.drive-organize-dialog-list-item{display:block;overflow:hidden;text-overflow:ellipsis}.drive-organize-dialog .goog-menuitem-highlight{border-left:0;background-color:inherit}.drive-organize-dialog .goog-menuitem-content{margin:0}.drive-organize-dialog .goog-menuitem-highlight .goog-menuitem-content,.drive-organize-dialog .goog-option-selected .goog-menuitem-content{color:inherit}.drive-organize-dialog .goog-menuitem-checkbox{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background:rgba(255,255,255,0);border:1px solid rgba(198,198,198,1);height:15px;left:0;margin:0;outline:none;position:absolute;text-align:left;top:2px;width:15px}.drive-organize-dialog .goog-menuitem-active .goog-menuitem-checkbox{background:rgba(235,235,235,1);border-color:rgba(182,182,182,1)}.drive-organize-dialog .goog-menuitem-highlight .goog-menuitem-checkbox{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.1);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.1);box-shadow:inset 0 1px 1px rgba(0,0,0,.1);border-color:rgba(182,182,182,1)}.drive-organize-dialog .goog-menuitem-focus .goog-menuitem-checkbox{border-color:rgba(77,144,254,1)}.drive-organize-dialog .goog-option-selected{background:rgba(255,255,255,0)}.drive-organize-dialog .goog-option-selected .goog-menuitem-checkbox::after{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;background:rgba(96,96,96,1);content:'';display:block;height:7px;left:3px;position:relative;top:3px;width:7px}.modal-dialog.docs-endangered-doc-warning-dialog{z-index:1007}.modal-dialog-bg.docs-endangered-doc-warning-dialog-bg{z-index:1006}.docs-gm .modal-dialog.docs-endangered-doc-warning-dialog{min-width:464px;width:auto;width:unset}.fatal-error-dialog-container{display:table;width:374px}.fatal-error-dialog-contents{display:table-row;min-height:100px}.fatal-error-dialog-contents a:hover{cursor:pointer}.fatal-error-message{display:table-cell;vertical-align:middle;width:320px}.fatal-error-debug-text{font-size:85%;height:200px;width:90%}.docs-invite-favicon{height:16px;margin-right:5px;vertical-align:sub;width:16px}.docs-invite-header{height:77px;max-height:77px;width:100%;overflow-x:hidden;overflow-y:hidden;background:#f5f5f5;font-size:12.5px;color:#444;border-bottom:1px solid #d9d9d9}.docs-invite-header>div{display:table;width:100%;height:100%;max-height:inherit}.docs-invite-button{margin-right:25px}.docs-invite-fixedcol{display:table-cell;vertical-align:middle;white-space:nowrap}.docs-invite-flexcol{display:table-cell;width:100%;vertical-align:middle;max-height:inherit}.docs-invite-inviter-img{height:60px;border:1px solid #ccc;margin-left:25px}.docs-invite-heavy{font-weight:500;color:#222}.docs-invite-business-icon{margin-left:40px}.docs-invite-msg{margin:0px 10px 0px 25px;max-height:inherit;line-height:2.0}.docs-invite-business-header{position:absolute;z-index:1}.docs-parent-collections-container-prefix,.docs-parent-collections-container-text{color:rgba(0,0,0,.54);padding-left:4px}.docs-parent-collections-container-folder-name{color:rgba(0,0,0,.87);font-size:14px;padding-left:4px;bottom:1px}.docs-parent-collections-container{padding:2px 4px 0px 2px}.docs-parent-collections-container:hover,.docs-parent-collections-container:focus{background-color:#eeeeee;border-radius:2px}.docs-parent-collections-container-icon{bottom:2px;opacity:.54}.request-comment-access-toast-link{text-transform:uppercase;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-weight:500!important}.modal-dialog.docs-dialog.docs-restore-dialog{z-index:1007}.modal-dialog-bg.docs-restore-dialog-bg{z-index:1006}.docs-gm .modal-dialog.docs-dialog.docs-restore-dialog{min-width:464px;width:auto;width:unset}#docs-toolbar-iterator-label{color:rgba(0,0,0,0.87);font-size:13px;line-height:24px;margin-right:10px;margin-top:4px;vertical-align:middle}#docs-toolbar-iterator-previous,#docs-toolbar-iterator-next{margin-left:3px;margin-right:3px}.docs-in-editor-sync-state-icon{float:right;margin:0 0 0 24px;vertical-align:middle}.docs-in-editor-sync-state-icon .docs-icon{height:20px;margin:0;opacity:1;width:20px}.docs-in-editor-animated-sync{-webkit-animation-duration:2s;-moz-animation-duration:2s;-o-animation-duration:2s;animation-duration:2s;-webkit-animation-iteration-count:infinite;-moz-animation-iteration-count:infinite;-o-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-name:spin;-moz-animation-name:spin;-o-animation-name:spin;animation-name:spin;-webkit-animation-timing-function:linear;-moz-animation-timing-function:linear;-o-animation-timing-function:linear;animation-timing-function:linear;-webkit-transform-origin:center;-moz-transform-origin:center;-ms-transform-origin:center;-o-transform-origin:center;transform-origin:center}@keyframes spin{0%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}100%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}100%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0deg)}}.docs-offline-optindialog-short-disclaimer{margin-top:20px}.docs-offline-optindialog-disclaimer-link{cursor:pointer}#docs-offline-optindialog-disclaimer-link.docs-offline-optindialog-disclaimer-link-disabled{color:#ccc;pointer-events:none;text-decoration:none}.docs-offline-optindialog-disclaimer{margin-top:20px;max-width:400px}.docs-offline-optinpromo.jfk-bubble{font-size:13px;max-width:500px;outline:none;padding-left:24px;padding-top:11px;position:fixed;right:15px;top:113px}.docs-offline-optinpromo .jfk-bubble-arrow{display:none}#docs-offline-optinpromo-title{font-size:19px;font-weight:500;margin:12px 0}.docs-offline-optinpromo-notice{color:#767676;font-size:11px;margin:14px 0}.docs-offline-optinpromo-notice a{text-decoration:none}.docs-offline-optinpromo hr{border-top-color:#e1e1e1;border-top-style:solid;border-width:1px 0 0 0}.docs-offline-optinpromo-confirm-buttons{margin-top:15px}.docs-offline-welcomepromo{width:400px}.docs-offline-welcomepromo .modal-dialog-content{padding-right:80px;position:relative}.doc-offline-welcomepromo-img{position:absolute;right:0;top:-25px}.docs-gm #docs-offline-optinpromo-title,.docs-gm .docs-offline-optinpromo-buttons{padding:0}.docs-labelinputmenuitem{outline:none;padding-right:30px;padding-left:30px}#docs-omnibox-toolbar .docs-omnibox-autocomplete{margin-right:4px}.docs-omnibox-autocomplete{margin-top:4px}.docs-omnibox-input{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:100%;min-width:178px}.docs-omnibox-input::-webkit-input-placeholder{color:#777;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:11px;font-weight:500;opacity:1;padding-top:2px}.docs-omnibox-input::-moz-placeholder{color:#777;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:11px;font-weight:500;opacity:1}.docs-omnibox-input:-ms-input-placeholder{color:#777;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:11px;font-weight:500;opacity:1}.docs-gm .docs-omnibox-input.jfk-textinput{border:1px solid #dadce0;border-radius:4px;box-sizing:border-box;color:#3c4043;padding:1px 8px;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;line-height:16px;height:20px}.docs-gm .docs-omnibox-input.jfk-textinput::placeholder{font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;line-height:16px}.docs-gm .docs-omnibox-input.jfk-textinput:focus{border:2px solid #1a73e8;box-shadow:none;padding:0px 7px}.docs-omnibox-autocomplete .ac-renderer{box-shadow:0 2px 4px rgba(0,0,0,0.2);border:1px solid #ccc;background-color:#fff;min-width:250px;outline:medium none;position:fixed;width:auto;z-index:1003}.docs-omnibox-autocomplete .ac-highlighted{font-weight:500}.docs-omnibox-autocomplete .ac-active{background-color:#eee}.docs-omnibox-row-content{font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif}.docs-promo-title-prefix{color:#d25342;font-weight:500}.docs-promo-title{color:#333;font-weight:500}.docs-promo-content{color:#666;cursor:pointer}.docs-promo-dismiss-link{color:#15c;cursor:pointer}.jfk-bubble.jfk-bubble-promo.docs-promo-bubble .jfk-bubble-arrowdown .jfk-bubble-arrowimplbefore,.jfk-bubble.jfk-bubble-promo.docs-promo-bubble .jfk-bubble-arrowup .jfk-bubble-arrowimplbefore{border-color:rgba(0,0,0,.1) transparent}.jfk-bubble.jfk-bubble-promo.docs-promo-bubble .jfk-bubble-arrowleft .jfk-bubble-arrowimplbefore,.jfk-bubble.jfk-bubble-promo.docs-promo-bubble .jfk-bubble-arrowright .jfk-bubble-arrowimplbefore{border-color:transparent rgba(0,0,0,.1)}.jfk-bubble.jfk-bubble-promo.docs-promo-bubble .jfk-bubble-arrowdown .jfk-bubble-arrowimplafter{border:10px solid;border-bottom-width:0;border-color:#fafafa transparent}.jfk-bubble.jfk-bubble-promo.docs-promo-bubble .jfk-bubble-arrowup .jfk-bubble-arrowimplafter{border:10px solid;border-top-width:0;border-color:#fafafa transparent}.jfk-bubble.jfk-bubble-promo.docs-promo-bubble .jfk-bubble-arrowleft .jfk-bubble-arrowimplafter{border:10px solid;border-left-width:0;border-color:transparent #fafafa}.jfk-bubble.jfk-bubble-promo.docs-promo-bubble .jfk-bubble-arrowright .jfk-bubble-arrowimplafter{border:10px solid;border-right-width:0;border-color:transparent #fafafa}.jfk-bubble.docs-promo-bubble{background-color:#fafafa;border:none;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;box-shadow:rgba(255,255,255,.9) 0 1px 0 inset,rgba(0,0,0,.03) 0 -1px 0 inset,rgba(0,0,0,.15) 0 15px 10px,rgba(0,0,0,.3) 0 8px 36px;padding:0}.docs-promo-text-container{width:363px;word-wrap:break-word}.docs-promo-text-container-ltr{float:right}.docs-promo-container{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:24px 16px 0 16px}.docs-promo-icon-container{width:48px;height:48px;margin-right:16px;float:left}.docs-promo-header{color:#000;opacity:0.87;font-size:15px;font-weight:500}.docs-promo-header-prefix{color:#d25342}.docs-promo-body{color:#666;font-size:13px;line-height:20px;padding-top:20px}.docs-promo-action-row{font-weight:500;padding-top:20px;padding-right:8px;padding-bottom:24px;position:relative;text-align:right}.docs-promo-action-row a,.docs-promo-action-row a:link,.docs-promo-action-row a:active,.docs-promo-action-row a:hover,.docs-promo-action-row a:visited{text-decoration:none}.docs-promo-action-row a,.docs-promo-action-row a:link,.docs-promo-action-row a:active,.docs-promo-action-row a:hover,.docs-promo-action-row a:visited{color:#4285f4}.docs-promo-action-container{color:#4285f4;cursor:pointer;text-transform:uppercase}.docs-promo-action-button-right{margin-left:12.5px;float:right}.docs-promo-action-button-left{margin-right:12.5px}.docs-revisions-chromecover-titlebar{-ms-flex-align:center;-moz-box-align:center;-webkit-box-align:center;box-align:center;-webkit-align-items:center;align-items:center;display:flex;flex-direction:row;-webkit-box-flex:1;box-flex:1;-ms-flex-positive:1;-webkit-flex-grow:1;flex-grow:1;box-pack:start;-ms-flex-pack:start;-webkit-box-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;font-size:16px;max-width:50vw}.docs-gm .docs-revisions-chromecover-titlebar{font-size:18px;line-height:24px}.docs-revisions-chromecover-titlebar-name-label{font-family:'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:normal;font-weight:var(--docs-material-font-weight-bold,normal);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.docs-gm .docs-revisions-chromecover-titlebar-name-label{font-weight:400}.docs-revisions-chromecover-titlebar[class*="docs-hc"] .docs-revisions-chromecover-titlebar-button-action{border:1px solid #fff}.docs-revisions-chromecover-titlebar-button-back-container{height:100%;min-width:58px}.docs-revisions-chromecover-titlebar-button-back{background-color:transparent;border:0;cursor:pointer;left:18px;margin:0;outline:0;padding:0}.docs-revisions-chromecover-titlebar-button-back.docs-material .docs-icon{height:21px;width:21px;margin:0;padding-bottom:3px}.docs-revisions-chromecover-titlebar-button-action{-ms-flex-align:center;-moz-box-align:center;-webkit-box-align:center;box-align:center;-webkit-align-items:center;align-items:center;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;display:flex;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-tap-highlight-color:transparent;background-color:#0f9d58;border:none;color:#fff;cursor:pointer;font-family:'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;height:36px;margin:0 0 0 24px;outline:none;padding:0 16px;text-transform:uppercase;white-space:nowrap;will-change:box-shadow,filter,background-color,color}.docs-gm .docs-revisions-chromecover-titlebar-button-action{padding:0 24px;text-transform:none}.docs-revisions-chromecover-titlebar-button-action,.docs-revisions-chromecover-titlebar-button-action.goog-flat-button-active,.docs-revisions-chromecover-titlebar-button-action.goog-flat-button-hover{-webkit-transition-duration:0.28s;-moz-transition-duration:0.28s;-o-transition-duration:0.28s;transition-duration:0.28s;-webkit-transition-property:box-shadow,filter,background-color,color;-moz-transition-property:box-shadow,filter,background-color,color;-o-transition-property:box-shadow,filter,background-color,color;transition-property:box-shadow,filter,background-color,color;-webkit-transition-timing-function:cubic-bezier(0.4,0.0,0.2,1);-moz-transition-timing-function:cubic-bezier(0.4,0.0,0.2,1);-o-transition-timing-function:cubic-bezier(0.4,0.0,0.2,1);transition-timing-function:cubic-bezier(0.4,0.0,0.2,1)}.docs-revisions-chromecover-titlebar-button-action.goog-flat-button-active,.docs-revisions-chromecover-titlebar-button-action.goog-flat-button-focused{filter:brightness(88%)}.docs-revisions-chromecover-titlebar-button-action.goog-flat-button-active{box-shadow:0 6px 10px 0 rgba(0,0,0,0.14),0 1px 18px 0 rgba(0,0,0,0.12),0 3px 5px -1px rgba(0,0,0,0.2)}.docs-revisions-chromecover-titlebar-button-action.goog-flat-button-hover:not(.goog-flat-button-active){box-shadow:0 2px 2px 0 rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.12),0 1px 5px 0 rgba(0,0,0,0.2)}.docs-revisions-chromecover-content{-ms-flex-align:center;-moz-box-align:center;-webkit-box-align:center;box-align:center;-webkit-align-items:center;align-items:center;display:flex;flex-direction:row;box-pack:start;-ms-flex-pack:start;-webkit-box-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start;height:inherit}.docs-revisions-chromecover-content-exclude-sidebar-width{width:calc(100% - 250px)}.docs-gm .docs-revisions-chromecover-content-exclude-sidebar-width{width:calc(100% - 300px)}.docs-revisions-chromecover-content-color-default{background-color:#424242;color:#fff}.docs-gm .docs-revisions-chromecover-content-color-default{background-color:#fff;color:#202124}.docs-revisions-icon{cursor:pointer;direction:ltr;height:24px;min-height:24px;min-width:24px;outline:none;position:relative;text-align:left;vertical-align:middle;width:24px}.docs-hc-gecko .docs-revisions-icon{filter:invert(100%)}.docs-hc-ie .docs-revisions-icon{-ms-high-contrast-adjust:none;background-color:#fff}.docs-revisions-icon-rtl{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.docs-revisions-icon-focused:before{-webkit-transform:scale(1.375);-moz-transform:scale(1.375);-ms-transform:scale(1.375);-o-transform:scale(1.375);transform:scale(1.375);-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;background-color:#000;content:'';display:block;height:inherit;opacity:.12;position:absolute;width:inherit}.docs-revisions-icon-img-mask{height:inherit;overflow:hidden;position:absolute;width:inherit}.docs-revisions-icon-img:before{content:url(//ssl.gstatic.com/docs/common/revisions_sprite1.svg)}.docs-revisions-icon-img{height:72px;position:absolute;width:24px}.docs-revisions-icon-open .docs-revisions-icon-arrow{left:0;top:-48px}.docs-revisions-icon-arrow{left:0;top:0}.docs-revisions-icon-overflow{left:0;top:-24px}.docs-revisions-sidebar{display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;background-color:#fff;height:100%;outline-style:none;position:absolute;right:0;width:250px;z-index:2}.docs-gm .docs-revisions-sidebar{overflow:hidden;box-shadow:-3px 0px 6px -3px rgba(60,64,67,.15),3px 0px 6px -3px rgba(60,64,67,.15);width:300px}.docs-revisions-sidebar-header{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.docs-gm .docs-revisions-sidebar-header{background-color:#fff;color:#202124}.docs-revisions-sidebar[class*="docs-hc"]{border-left:1px solid #fff}.docs-revisions-sidebar[class*="docs-hc"]>.docs-revisions-sidebar-header{border-bottom:1px solid #fff}.docs-revisions-sidebar-header-bg-color-brand{background-color:#0f9d58}.docs-revisions-sidebar-header-text-color-brand{color:#fff}.docs-revisions-sidebar-title{-ms-flex-align:center;-moz-box-align:center;-webkit-box-align:center;box-align:center;-webkit-align-items:center;align-items:center;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:flex;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;font-family:'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:16px;height:60px;padding:18px;width:100%}.docs-gm .docs-revisions-sidebar-title{font-size:16px;line-height:24px;padding:20px 16px}.docs-revisions-sidebar-name-filter-switch-container{-ms-flex-align:center;-moz-box-align:center;-webkit-box-align:center;box-align:center;-webkit-align-items:center;align-items:center;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:flex;border-top:1px solid rgba(255,255,255,0.2);height:47px;justify-content:space-between;padding:14px 14px 14px 18px;width:100%}.docs-gm .docs-revisions-sidebar-name-filter-switch-container{border-bottom:1px solid #dadce0;border-top:1px solid #dadce0;padding:12px 16px;height:40px}.docs-revisions-sidebar-name-filter-switch-container label{color:#fff;cursor:pointer;font-size:12px;font-weight:normal;opacity:0.87;word-break:break-word}.docs-gm .docs-revisions-sidebar-name-filter-switch-container label{color:#3c4043;line-height:16px}.docs-revisions-sidebar-revisions-list{position:relative;overflow:auto;overflow-x:hidden}body:not(.docs-gm) .docs-revisions-sidebar-revisions-list::-webkit-scrollbar{width:11px}body:not(.docs-gm) .docs-revisions-sidebar-revisions-list::-webkit-scrollbar-thumb{border-width:1px}body:not(.docs-gm) .docs-revisions-sidebar-revisions-list::-webkit-scrollbar-track{border-width:0}.docs-revisions-sidebar-actions{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;border-top:1px solid #cfcfcf;padding:9px 14px}.docs-revisions-sidebar-detail-button,#docs-revisions-sidebar-iw-button{margin-top:9px}.docs-revisions-sidebar-date-group{-ms-flex-align:center;-moz-box-align:center;-webkit-box-align:center;box-align:center;-webkit-align-items:center;align-items:center;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:flex;background-color:#f5f5f5;border-bottom:1px solid #eee;color:#616161;font-size:13px;font-weight:500;height:35px;padding-left:18px}.docs-gm .docs-revisions-sidebar-date-group{color:#3c4043;background-color:#fff;font-size:11px;font-weight:500;line-height:21px;text-transform:uppercase}.docs-revisions-sidebar-revisions-list-container{overflow:auto}.docs-revisions-sidebar-revisions-empty-container{display:flex;-ms-flex-align:center;-moz-box-align:center;-webkit-box-align:center;box-align:center;-webkit-align-items:center;align-items:center;-ms-flex:1 0 auto;-webkit-flex:1 0 auto;flex:1 0 auto}.docs-revisions-sidebar-revisions-empty{color:#616161;margin:0 18px;text-align:center}.docs-gm .docs-revisions-sidebar-revisions-empty-details{color:#80868b;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;line-height:20px}.docs-revisions-sidebar-revisions-empty-title{font-size:15px;font-weight:500}.docs-gm .docs-revisions-sidebar-revisions-empty-title{color:#3c4043;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:16px;font-weight:500;line-height:24px}.docs-revisions-sidebar-revisions-empty-details,.docs-revisions-sidebar-revisions-empty-title{margin-bottom:8px}a.docs-revisions-sidebar-revisions-empty-learn-more{color:#4285f4}.docs-gm a.docs-revisions-sidebar-revisions-empty-learn-more{color:#1a73e8;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;line-height:20px}.docs-ui-toast.docs-revisions-snack{z-index:1001}.docs-revisions-snack .docs-ui-toast-control{font-weight:500;text-transform:uppercase}.docs-revisions-snapshot-prompt .jfk-textinput{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;height:29px;margin-top:16px;width:100%}.docs-revisions-snapshot-prompt-loading-indicator,.docs-revisions-snapshot-prompt-loading-indicator .docs-spinner{-ms-flex-align:center;-moz-box-align:center;-webkit-box-align:center;box-align:center;-webkit-align-items:center;align-items:center;display:flex;box-pack:center;-ms-flex-pack:center;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center}.docs-revisions-snapshot-prompt-loading-indicator{min-height:96px;min-width:300px}.docs-revisions-snapshot-prompt-loading-indicator .docs-spinner{height:32px;width:32px}.docs-revisions-snapshot-prompt-loading-indicator .docs-quantum-spinner{margin:0;position:initial}.docs-revisions-switch{cursor:pointer;margin-left:14px}.docs-revisions-switch[class*="docs-hc"]>.apps-ui-material-slide-toggle-thumb,.docs-revisions-switch[class*="docs-hc"]>.apps-ui-material-slide-toggle-track{border:1px solid #fff;will-change:border-style}.docs-revisions-switch .apps-ui-material-slide-toggle-thumb{background-color:#bdbdbd}.docs-gm .docs-revisions-switch .apps-ui-material-slide-toggle-thumb{background-color:#fff}.docs-revisions-switch .apps-ui-material-slide-toggle-track{background-color:#fff;opacity:.3}.docs-gm .docs-revisions-switch .apps-ui-material-slide-toggle-track{background-color:#9aa0a6;opacity:1}.docs-revisions-switch.apps-ui-material-slide-toggle-container-checked .apps-ui-material-slide-toggle-thumb{background-color:#fafafa}.docs-gm .docs-revisions-switch.apps-ui-material-slide-toggle-container-checked .apps-ui-material-slide-toggle-thumb{background-color:#0f9d58}.docs-revisions-switch.apps-ui-material-slide-toggle-container-checked .apps-ui-material-slide-toggle-track{background-color:#000;opacity:.38}.docs-gm .docs-revisions-switch.apps-ui-material-slide-toggle-container-checked .apps-ui-material-slide-toggle-track{background-color:#0f9d58}.docs-revisions-tile{outline:none;position:relative}.docs-revisions-tile-content-wrapper{padding-bottom:12px;border-bottom:1px solid #eee}.docs-revisions-tile-selected{background-color:#e2f3eb}.docs-revisions-tile-hover:not(.docs-revisions-tile-selected){background-color:#f5f5f5}.docs-revisions-tile-header{display:flex;flex-direction:column;font-size:13px;font-size:var(--docs-material-font-size-normal,13px);padding:12px 18px 3px 36px;position:relative}.docs-revisions-tile-actions,.docs-revisions-tile-collaborator-list{margin:0 18px 0 36px}.docs-gm .docs-revisions-tile-actions{font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;line-height:16px;padding-top:3px}.docs-revisions-tile-collaborator{display:flex;flex-direction:column;font-size:12px}.docs-revisions-tile-collaborator-name{-ms-flex-align:center;-moz-box-align:center;-webkit-box-align:center;box-align:center;-webkit-align-items:center;align-items:center;display:flex;color:#585858}.docs-gm .docs-revisions-tile-collaborator{line-height:16px}.docs-gm .docs-revisions-tile-collaborator-name{color:#3c4043;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif}.docs-revisions-tile-collaborator-link{line-height:1;margin-top:3px}.docs-gm .docs-revisions-tile-collaborator-link{font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;line-height:16px;margin-top:3px}.docs-revisions-tile-indented{margin-left:50px}.docs-revisions-tile-indented .docs-revisions-tile-header{padding-left:0}.docs-revisions-tile-indented .docs-revisions-tile-actions,.docs-revisions-tile-indented .docs-revisions-tile-collaborator-list{margin-left:0}.docs-revisions-tile-caption-v0{color:#808080;font-size:11px}.docs-revisions-tile-show-v0{color:#4275d6;font-size:11px}.docs-revisions-tile-show-v0-link{cursor:pointer;font-weight:500}.docs-revisions-tile-swatch{width:8px;height:8px;margin-right:5px}.docs-gm .docs-revisions-tile-swatch{border-radius:50%}.docs-revisions-tile-arrow-button,.docs-revisions-tile-menu-button{position:absolute}.docs-revisions-tile-arrow-button{left:9px;top:10px}.docs-revisions-tile-menu-button{right:9px;top:10px}.docs-revisions-tile-shade{border-bottom:1px solid #eee;cursor:progress;height:100%;position:absolute;width:100%;z-index:1}.docs-revisions-tile-shade:before{background-color:#fff;content:'';display:block;height:inherit;opacity:0.95;width:inherit}.docs-revisions-tile-shade .docs-spinner{-ms-flex-align:center;-moz-box-align:center;-webkit-box-align:center;box-align:center;-webkit-align-items:center;align-items:center;display:flex;box-pack:center;-ms-flex-pack:center;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-transform:scale(0.5);-moz-transform:scale(0.5);-ms-transform:scale(0.5);-o-transform:scale(0.5);transform:scale(0.5);height:48px;left:50%;margin:-24px 0 0 -24px;position:absolute;top:50%;width:48px}.docs-revisions-tile-shade .docs-quantum-spinner{margin:0;position:initial}.docs-revisions-tile-descriptor{color:#000;font-size:14px}.docs-gm .docs-revisions-tile-descriptor{font-style:italic}.docs-revisions-tile-selected .docs-revisions-tile-descriptor{font-weight:500}.docs-gm .docs-revisions-tile-selected .docs-revisions-tile-descriptor,.docs-gm .docs-revisions-tile-selected .docs-revisions-tile-text-box~.docs-revisions-tile-descriptor{color:#188038}.docs-revisions-tile-text-box~.docs-revisions-tile-descriptor{color:#585858;font-size:12px;font-weight:normal;margin-top:3px}.docs-gm .docs-revisions-tile-descriptor,.docs-gm .docs-revisions-tile-text-box~.docs-revisions-tile-descriptor{color:#3c4043;font-size:12px;font-weight:400;line-height:16px}.docs-revisions-tile-text-box{-webkit-transition-duration:0.28s;-moz-transition-duration:0.28s;-o-transition-duration:0.28s;transition-duration:0.28s;-webkit-transition-property:border-color;-moz-transition-property:border-color;-o-transition-property:border-color;transition-property:border-color;-webkit-transition-timing-function:cubic-bezier(0.4,0.0,0.2,1);-moz-transition-timing-function:cubic-bezier(0.4,0.0,0.2,1);-o-transition-timing-function:cubic-bezier(0.4,0.0,0.2,1);transition-timing-function:cubic-bezier(0.4,0.0,0.2,1);background:transparent;border-radius:2px;border:1px solid transparent;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;margin:-3px;margin-right:18px;outline:0;padding:2px;resize:none;will-change:border-color}.docs-revisions-tile-text-box:hover:enabled{border-color:#9e9e9e}.docs-revisions-tile-text-box:focus:enabled{border-color:#498dff}.docs-revisions-tile-text-box:disabled{color:#000;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.docs-revisions-tile-selected .docs-revisions-tile-text-box{font-weight:500}.docs-gm .docs-revisions-tile-text-box{font-weight:400;line-height:20px}.docs-gm .docs-revisions-tile-selected .docs-revisions-tile-text-box{color:#188038;font-weight:700}.docs-gm docs-revisions-tile-text-box:disabled{color:#3c4043}.alt-text-dialog-content textarea{font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif}#alt-text-dialog-title,#alt-text-dialog-description{width:400px}#alt-text-dialog-description{height:100px;padding-top:6px;padding-left:9px}.alt-text-dialog-content td{padding-top:10px;vertical-align:top}.alt-text-dialog-content tr{margin:5px 0}.alt-text-dialog-content label{font-weight:500;padding-right:30px;position:relative;top:5px}.alt-text-dialog-intro{max-width:500px;padding:5px 0}.docs-bubble{background-color:#fff;border-radius:2px;border:1px solid;border-color:#bbb #bbb #a8a8a8;-moz-box-shadow:0 1px 3px rgba(0,0,0,.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,.2);-ms-box-shadow:0 1px 3px rgba(0,0,0,.2);box-shadow:0 1px 3px rgba(0,0,0,.2);color:#666;cursor:default;padding:12px 20px;position:absolute;z-index:502;white-space:nowrap}.docs-bubble.docs-linkbubble-bubble{z-index:503}.docs-bubble-link,.docs-bubble a{color:#15c!important;cursor:pointer;text-decoration:none!important}.docs-bubble a{display:inline-block;max-width:400px;text-overflow:ellipsis;overflow:hidden;vertical-align:bottom}.docs-bubble-link:hover,.docs-bubble a:hover{text-decoration:underline!important}.docs-bubble-label{font-weight:500}a.docs-bubble-link-disabled{color:#ccc!important;text-decoration:none!important}.docs-bubble .docs-bubble-button .docs-icon{vertical-align:baseline;width:18px;height:18px;margin:0px}.docs-bubble .docs-bubble-button{box-shadow:none;background-color:transparent;background-image:none;cursor:pointer;height:18px;width:18px;border-radius:50%;border-width:0px;border-style:solid;border-color:transparent;box-shadow:none;background-clip:padding-box;cursor:pointer;-webkit-tap-highlight-color:transparent;min-width:auto;min-width:unset;margin-right:0px;padding:6px}.docs-bubble .docs-bubble-button.jfk-button:hover,.docs-bubble .docs-bubble-button.jfk-button:focus{background-color:rgba(0,0,0,.06)}.docs-bubble .docs-bubble-button.jfk-button:hover:active,.docs-bubble .docs-bubble-button.jfk-button.goog-toolbar-button-checked{background-color:#e6f4ea}.docs-hc-gecko .docs-bubble-button,.docs-hc-ie .docs-bubble-button{border:1px solid transparent}.docs-clipboardshortcutsdialog{color:#666}.docs-clipboardshortcutsdialog-shortcut{padding-right:40px}.docs-clipboardshortcutsdialog-mac .docs-clipboardshortcutsdialog-shortcut{padding-right:95px}.docs-clipboardshortcutsdialog-shortcut-command{padding-bottom:5px}.docs-clipboardshortcutsdialog-shortcuts{padding:15px 0}.docs-clipboardshortcutsdialog-shortcut-command{line-height:1.0;font-size:36px;font-weight:500}.modal-dialog.color-dialog{padding:10px}.color-dialog>.modal-dialog-title{display:none}.color-dialog>.modal-dialog-buttons{margin-top:8px;padding-left:18px}.docs-colormenuitems-header{padding-left:5px}.docs-colormenuitems-custom-header{margin-left:-23px}.docs-gm .colormenuitems-custom-header-add-button .docs-colormenuitems-custom-header,.docs-gm .docs-colormenuitems-scheme-header{margin-left:5px}.docs-gm .docs-colormenuitems .goog-menuitem.colormenuitems-custom-header-add-button{border-radius:4px;border-width:1px 0;font-size:13px;padding:2px 0}.docs-gm .goog-menuitem.colormenuitems-custom-header-add-button.goog-menuitem-highlight{border-width:0}.docs-gm .docs-colormenuitems-scheme-header{padding:4px 0 4px 5px}.docs-gm .goog-menu .goog-menuitem.colormenuitems-no-color{border-color:transparent;border-style:dotted;border-width:1px;padding:5px 15px 5px 38px}.docs-gm .docs-colormenuitems .docs-colormenuitems-scheme-header,.docs-gm .docs-colormenuitems .docs-colormenuitems-custom-header{color:#3c4043;font-size:11px;font-weight:500;letter-spacing:.8px;padding-left:0px;text-transform:uppercase}.docs-gm .docs-colormenuitems .docs-text-color-state-change-button.jfk-button{background-color:#fff;background-image:none;border:none;box-shadow:none;color:#5f6368;cursor:pointer;font-size:14px}.docs-gm .docs-colormenuitems .docs-text-color-state-change-button.jfk-button-checked{border-bottom:2px solid #0f9d58;color:#202124}.docs-colormenuitems.goog-menu{padding:10px}.docs-colormenuitems .jfk-palette-table{margin:0;padding:3px}.docs-colormenuitems .jfk-palette-cell-hover{border:1px solid #fff;outline:1px solid #000}.docs-colormenuitems-theme-header{padding-top:5px}.docs-colormenuitems-custom-palette .jfk-palette-cell{border-color:#ccc;height:16px;width:16px}.docs-colormenuitems-custom-palette .jfk-palette-cell-selected{border-color:black;outline:none}.goog-color-menu-button.goog-menu-button{background-color:#f5f5f5;background-image:-webkit-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:-moz-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:-ms-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:-o-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:linear-gradient(top,#f5f5f5,#f1f1f1)}.goog-color-menu-button .goog-menu-button-outer-box,.goog-color-menu-button .goog-menu-button-inner-box{border-color:rgba(0,0,0,0.1)}.goog-color-menu-button.goog-menu-button-focused .goog-menu-button-outer-box,.goog-color-menu-button.goog-menu-button-focused .goog-menu-button-inner-box{border-color:#4d90fe}.goog-color-menu-button.goog-menu-button-open .goog-menu-button-outer-box,.goog-color-menu-button.goog-menu-button-open .goog-menu-button-inner-box{border-color:rgba(0,0,0,0.1)}.goog-color-menu-button.goog-menu-button-hover .goog-menu-button-outer-box,.goog-color-menu-button.goog-menu-button-hover .goog-menu-button-inner-box{border-color:rgba(0,0,0,0.1)!important}.goog-color-menu-button.goog-menu-button-hover .goog-menu-button-outer-box{box-shadow:0 1px 1px rgba(0,0,0,.1)}.docs-flatcolormenubutton.goog-flat-menu-button{min-width:0px}.docs-flatcolormenubutton .goog-flat-menu-button-caption{display:inline-block;height:14px;outline:1px solid #bbb;vertical-align:middle;width:14px}.docs-copy-link{width:500px}.copy-link-dialog{color:black;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;white-space:normal}.copy-link-butter-holder{position:absolute;top:0px;padding-top:16px;left:220px}.copy-link-dialog button.copy-link-done-button,.copy-link-dialog button.copy-link-done-button:hover{box-shadow:none;background-color:#4d90fe;background-color:#4d90fe;background-image:-webkit-linear-gradient(top,#4d90fe,#4787ed);background-image:-moz-linear-gradient(top,#4d90fe,#4787ed);background-image:-ms-linear-gradient(top,#4d90fe,#4787ed);background-image:-o-linear-gradient(top,#4d90fe,#4787ed);background-image:linear-gradient(top,#4d90fe,#4787ed);border:1px solid #3079ed;color:#fff}.docs-chromeextensioninstalldialog-image{vertical-align:top}.docs-chromeextensioninstalldialog-textpart{width:360px;padding:0 0 15px 25px;color:#333}.docs-chromeextensioninstalldialog-note{padding:25px 0 0 0;color:#666}.docs-chromeextensioninstalldialog-noteV2{color:#666;padding:10px 0 0 0}.docs-chromeextensioninstalldialog-shortcuts{color:#666}.docs-findbar-input{width:170px;height:19px}.docs-gm .docs-findbar-content,.docs-gm .docs-gotobar-content{height:36px}.docs-slidingdialog .docs-findbar-text{border:1px solid #aaa;font-size:11px;height:16px;margin-right:4px;padding:2px;width:172px}.docs-slidingdialog #docs-findbar-spinner{display:inline-block;position:relative;transition:left 300ms ease-out;transition:width 300ms ease-out;vertical-align:middle}.docs-gm .docs-slidingdialog #docs-findbar-button-previous,.docs-gm .docs-slidingdialog #waffle-gotobar-button-go{margin-left:8px;margin-right:8px}.docs-slidingdialog #docs-findbar-button-next{margin-right:8px}.docs-gm .docs-slidingdialog .goog-toolbar-separator{height:24px;width:2px;margin:0 8 0 0px;position:center;vertical-align:middle}.docs-slidingdialog #docs-findbar-button-more-options{margin-right:8px}.docs-findbar-button-previous-rtl{margin-left:-1px}.docs-findbar-content .jfk-button-disabled{background-color:#f5f5f5;border-color:rgba(0,0,0,0.1);border-color:#dcdcdc}.docs-gm .docs-findbar-content .jfk-button-disabled,.docs-gm .docs-gotobar-content .jfk-button-disabled{opacity:.38}.docs-gm .docs-findbar-content .jfk-button,.docs-gm .docs-gotobar-content .jfk-button{background-image:none;background-color:transparent;border-color:transparent;margin:0 8px 0 0;min-width:24px;vertical-align:middle}.docs-gm .docs-findbar-content .jfk-button-hover,.docs-gm .docs-gotobar-content .jfk-button-hover{box-shadow:none;background-color:rgba(0,0,0,.06);background-image:none;cursor:pointer;border-color:transparent!important;border-radius:2px;border-width:1px}.docs-gm .docs-findbar-content .jfk-button-active,.docs-gm .docs-gotobar-content .jfk-button-active{box-shadow:none;background-color:rgba(0,0,0,0.12);background-image:none;cursor:pointer;border-color:transparent!important;border-radius:2px;border-width:1px}.docs-findinput-container{background:#fff;border:1px solid #d9d9d9;border-top:1px solid #c0c0c0;min-width:20px;padding:0 8px;width:100%}.docs-findinput-container-focus{border:1px solid #4d90fe;box-shadow:inset 0 1px 2px rgba(0,0,0,0.3);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.3);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.3);outline:none}.docs-gm .docs-findinput-container,.docs-gm .docs-gotoinput-container{border:1px solid #dadce0;border-radius:4px;box-sizing:border-box;color:#3c4043;padding:1px 8px;font-size:14px;height:36px;margin:8px 0;margin:0}.docs-gm .docs-findinput-container-focus,.docs-gm .docs-gotoinput-container:focus{border:2px solid #1a73e8;box-shadow:none;padding:0px 7px}.docs-findinput-input,.docs-findinput-input:focus{background:transparent!important;border:none!important;box-shadow:none!important;-moz-box-shadow:none!important;-webkit-box-shadow:none!important;font-size:13px;height:25px;margin:0;outline:none!important;padding:1px 0px!important;width:100%}.docs-findinput-count-container{max-width:120px;overflow:hidden;padding:0 8px 0 4px;text-align:right}.docs-findinput-count{color:#ccc;white-space:nowrap}#fontSizeSelect .goog-toolbar-menu-button-caption,#docs-font-size .goog-toolbar-menu-button-caption{overflow:hidden;text-overflow:ellipsis;width:20px;white-space:nowrap}#fontSizeSelect .goog-toolbar-combo-button-caption,#docs-font-size .goog-toolbar-combo-button-caption{width:48px!important}#fontSizeSelect .goog-toolbar-combo-button-input,#docs-font-size .goog-toolbar-combo-button-input{width:28px}.hsv,.hsva{position:relative;width:182px;height:185px}.hsv label span,.hsva label span{display:none}.hsv-hs-backdrop,.hsv-hs-image,.hsva-hs-backdrop,.hsva-hs-image{position:absolute;top:45px;left:10px;width:128px;height:128px;border:1px solid #999}.hsv-hs-backdrop,.hsva-hs-backdrop{background-color:#000}.hsv-hs-image,.hsv-v-image,.hsv-hs-handle,.hsv-v-handle,.hsva-hs-image,.hsva-v-image,.hsva-a-image,.hsva-hs-handle,.hsva-v-handle,.hsva-a-handle,.hsva-swatch-backdrop{background-image:url(//ssl.gstatic.com/docs/drawings/images/hsva-sprite-sm.png)}.hsv-noalpha .hsv-hs-image,.hsv-noalpha .hsv-v-image,.hsv-noalpha .hsv-hs-handle,.hsv-noalpha .hsv-v-handle,.hsva-noalpha .hsva-hs-image,.hsva-noalpha .hsva-v-image,.hsva-noalpha .hsva-a-image,.hsva-noalpha .hsva-hs-handle,.hsva-noalpha .hsva-v-handle,.hsva-noalpha .hsva-a-handle,.hsva-noalpha .hsva-swatch-backdrop{background-image:url(//ssl.gstatic.com/docs/drawings/images/hsva-sprite-sm.gif)}.hsv-hs-image,.hsva-hs-image{background-position:0 0}.hsv-hs-handle,.hsva-hs-handle{position:absolute;left:5px;top:40px;width:11px;height:11px;overflow:hidden;background-position:0 -128px}.hsv-v-image,.hsva-v-image,.hsva-a-image{position:absolute;top:45px;left:155px;width:9px;height:128px;border:1px solid #999;background-color:#fff;background-position:-128px 0}.hsv-v-handle,.hsva-v-handle,.hsva-a-handle{position:absolute;top:40px;left:148px;width:25px;height:11px;background-position:-11px -128px;overflow:hidden}.hsv-swatch,.hsva-swatch,.hsva-swatch-backdrop{position:absolute;top:10px;right:auto;left:10px;width:30px;height:22px;border:1px solid #999;background-color:#fff}.hsv-input,.hsva-input{position:absolute;top:10px;right:auto;left:50px;width:75px}.hsva{width:205px}.hsva-a-image{left:182px;background-position:-137px 0}.hsva-a-handle{left:175px}.hsva-swatch,.hsva-swatch-backdrop{background-position:-36px -128px}.hsva-swatch{z-index:5}.hsva-swatch-backdrop{z-index:1}.docs-loading-animation{width:28px;height:6px;position:absolute;margin:auto;bottom:0;left:0;right:0;top:0}.docs-loading-animation-dot-1,.docs-loading-animation-dot-2,.docs-loading-animation-dot-3{background-color:rgba(0,0,0,.2);border-radius:6px;display:inline-block;height:6px;position:absolute;width:6px}.docs-loading-animation-dot-1{-webkit-animation:docs-loading-animation-pulse 1s ease-in-out infinite 0s;-moz-animation:docs-loading-animation-pulse 1s ease-in-out infinite 0s;-o-animation:docs-loading-animation-pulse 1s ease-in-out infinite 0s;animation:docs-loading-animation-pulse 1s ease-in-out infinite 0s;left:0}.docs-loading-animation-dot-2{-webkit-animation:docs-loading-animation-pulse 1s ease-in-out infinite .33s;-moz-animation:docs-loading-animation-pulse 1s ease-in-out infinite .33s;-o-animation:docs-loading-animation-pulse 1s ease-in-out infinite .33s;animation:docs-loading-animation-pulse 1s ease-in-out infinite .33s;left:50%;margin-left:-3px}.docs-loading-animation-dot-3{-webkit-animation:docs-loading-animation-pulse 1s ease-in-out infinite .66s;-moz-animation:docs-loading-animation-pulse 1s ease-in-out infinite .66s;-o-animation:docs-loading-animation-pulse 1s ease-in-out infinite .66s;animation:docs-loading-animation-pulse 1s ease-in-out infinite .66s;right:0}@-webkit-keyframes docs-loading-animation-pulse{0%,40%,100%{background-color:rgba(0,0,0,.2);-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}15%{background-color:rgba(0,0,0,1);-webkit-transform:scale(1.2);-moz-transform:scale(1.2);-ms-transform:scale(1.2);-o-transform:scale(1.2);transform:scale(1.2)}}@keyframes docs-loading-animation-pulse{0%,40%,100%{background-color:rgba(0,0,0,.2);-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}15%{background-color:rgba(0,0,0,1);-webkit-transform:scale(1.2);-moz-transform:scale(1.2);-ms-transform:scale(1.2);-o-transform:scale(1.2);transform:scale(1.2)}}.docs-slidingdialog-button-close:focus{outline:1px solid #4d90fe}.docs-gm .docs-slidingdialog-close-container{padding-top:3px;vertical-align:middle}.docs-gm .docs-slidingdialog-close-container .goog-flat-button{cursor:pointer}.docs-gm .docs-slidingdialog .docs-icon-close{opacity:1}.docs-slidingdialog{background-color:#fff;border-bottom:1px solid #d9d9d9;border-top:none;border-left:1px solid #d9d9d9;border-right:1px solid #d9d9d9;margin-top:-1px;padding:10px 12px;outline:none}.docs-gm .docs-slidingdialog{border-bottom-right-radius:8px;border-bottom-left-radius:8px;padding:16px 12px}.docs-slidingdialog .jfk-textinput{border-top-color:#d9d9d9;margin-right:0}.docs-slidingdialog .jfk-textinput:focus{border-top-color:#4d90fe}.docs-slidingdialog .goog-custom-button-inner-box{padding:1px 2px 0 2px}.docs-slidingdialog .goog-custom-button{margin:-2px 0 0 0}.docs-slidingdialog .docs-icon-up,.docs-slidingdialog .docs-icon-down,.docs-slidingdialog .docs-icon-close,.docs-slidingdialog .docs-icon-ellipsis,.docs-slidingdialog .docs-icon-overflow-three-dots{opacity:.40}.docs-gm .docs-slidingdialog .docs-icon-img{opacity:1}.docs-slidingdialog .jfk-button{vertical-align:top}.docs-slidingdialog .goog-flat-button{background-color:transparent;border:0;cursor:default;margin:0;padding:0}.docs-slidingdialog .goog-flat-button-hover{background-color:transparent}.docs-slidingdialog-holder{margin-top:-1px;overflow:hidden;position:absolute;right:44px;z-index:507;min-width:300px}.docs-slidingdialog-wrapper{left:0;position:relative;width:100%}.jfk-button.docs-submenuitem-splitbutton{background-color:#eee;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;border-bottom-right-radius:0;border-radius:0;border-right:none!important;border-top-right-radius:0;color:#6e6e6e;cursor:pointer;font-size:70%;font-weight:normal;height:57px;left:auto;line-height:59px;margin:0;min-height:26px;min-width:0;padding:0;position:absolute;right:0;top:0;width:34px;-moz-border-radius-topright:0;-moz-border-radius-bottomright:0;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:0}.goog-menuitem.docs-submenuitem{border:none;border-bottom:1px solid #e6e6e6;height:59px;padding-top:0;padding-bottom:0}.goog-menuitem.docs-submenuitem .goog-menuitem-content{height:59px;line-height:59px}.goog-menuitem.docs-submenuitem .goog-menuitem-checkbox{height:59px;top:0}.docs-squarehandleselectionbox-border{position:absolute;border:1px solid #0096fd;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;z-index:30;background-color:rgba(0,0,0,0)}.docs-squarehandleselectionbox-handle{position:absolute;border:1px solid #fff;background-color:#0096fd;width:7px;height:7px;font-size:0;z-index:40}.docs-ui-toast{align-items:center;border-radius:2px;display:flex;flex-direction:row;background-color:#323232;bottom:24px;color:white;font-size:14px;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;left:24px;line-height:20px;min-width:288px;max-width:568px;outline:none;padding:17px 24px;position:absolute;z-index:999}.docs-gm .docs-ui-toast{background-color:#202124;border-radius:4px;box-shadow:0 4px 8px 3px rgba(60,64,67,.15);color:#dadce0;padding:16px 24px}.docs-ui-toast-content{flex-grow:1;flex-shrink:1;display:inline-block}.docs-ui-toast-control-bar{flex-grow:0;flex-shrink:0;color:#a1c2fa;cursor:pointer;display:inline-block;margin-left:24px}.docs-gm .docs-ui-toast-control-bar{color:#34a853}.docs-ui-toast-control{display:inline-block;outline:none;padding-left:10px;font-weight:500}.docs-gm .docs-ui-toast-control{font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:16px;font-weight:500;text-transform:none}.docs-ui-toast-close-bar{cursor:pointer;display:inline-block;margin-left:24px}.docs-ui-toast-close{display:inline-block;background-color:transparent;border:0}.goog-toolbar-combo-button{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;background:0;border-color:transparent;border-style:solid;border-width:1px;outline:none;padding:0;height:24px;color:#333;line-height:24px;list-style:none;font-size:11px;font-weight:500;text-decoration:none;vertical-align:middle;cursor:default;top:2px}.goog-toolbar-combo-button-outer-box,.goog-toolbar-combo-button-inner-box{border:0;vertical-align:top}.goog-toolbar-combo-button-outer-box{margin:0;padding:0}.goog-toolbar-combo-button-inner-box{padding:0 2px;margin:0 1px}.goog-toolbar-combo-button-hover{box-shadow:0 1px 1px rgba(0,0,0,.1);background-color:#f8f8f8;background-image:-webkit-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-moz-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-ms-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-o-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:linear-gradient(top,#f8f8f8,#f1f1f1);border-color:#c6c6c6!important;color:#222}.goog-toolbar-combo-button-active{box-shadow:inset 0 1px 2px rgba(0,0,0,.1);background-color:#f6f6f6;background-image:-webkit-linear-gradient(top,#f6f6f6,#f1f1f1);background-image:-moz-linear-gradient(top,#f6f6f6,#f1f1f1);background-image:-ms-linear-gradient(top,#f6f6f6,#f1f1f1);background-image:-o-linear-gradient(top,#f6f6f6,#f1f1f1);background-image:linear-gradient(top,#f6f6f6,#f1f1f1);border-color:#c6c6c6}.goog-toolbar-combo-button-open{box-shadow:inset 0 1px 2px rgba(0,0,0,.1);background-color:#eee;background-image:-webkit-linear-gradient(top,#eee,#e0e0e0);background-image:-moz-linear-gradient(top,#eee,#e0e0e0);background-image:-ms-linear-gradient(top,#eee,#e0e0e0);background-image:-o-linear-gradient(top,#eee,#e0e0e0);background-image:linear-gradient(top,#eee,#e0e0e0);border-color:#ccc;color:#222}.goog-toolbar-combo-button-disabled{color:#222!important;opacity:0.3;filter:alpha(opacity=30)}.goog-toolbar-combo-button-dropdown{background:url(//ssl.gstatic.com/ui/v1/disclosure/small-grey-disclosure-arrow-down.png) center no-repeat;float:right;margin:9px 0 0 0px;padding:0 0 0 1px;min-width:7px;opacity:.8;vertical-align:middle;width:5px;height:7px;*float:none;*position:relative;*top:-3px}.goog-toolbar-combo-button-caption{padding:0;margin:0 0 0 -3px}.docs-toolbar-small-separator+div.goog-toolbar-combo-button{margin:4px 1px 0 -1px}.goog-toolbar-combo-button-input{background:transparent;border:1px solid transparent!important;color:#333;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif!important;font-size:12px!important;font-weight:500!important;height:20px!important;overflow:hidden!important}.goog-toolbar-combo-button-hover .goog-toolbar-combo-button-input{border-right:1px solid #d9d9d9!important}.goog-toolbar-combo-button-open .goog-toolbar-combo-button-input{background:transparent;border-right:1px solid transparent!important}.goog-toolbar-combo-button-input:focus{box-shadow:inset 0 1px 2px rgba(0,0,0,0.3);-webkit-user-select:text!important;-moz-user-select:text!important;background:#fff;border:1px solid #4d90fe!important;height:20px;outline:none}.docs-toolbar-zoom-combobox .goog-toolbar-menu-button-caption{overflow:hidden;text-overflow:ellipsis;width:20px;white-space:nowrap}.docs-toolbar-zoom-combobox .goog-toolbar-combo-button-caption{width:48px!important}.docs-toolbar-zoom-combobox .goog-toolbar-combo-button-input{width:28px}.docs-material-dialog{background:#fff;border-radius:2px;border:none;box-shadow:0px 16px 24px 2px rgba(0,0,0,0.14),0px 6px 30px 5px rgba(0,0,0,0.12),0px 8px 10px -5px rgba(0,0,0,0.2);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;position:absolute;z-index:1003}.docs-material-dialog-bg{background-color:#000;left:0;position:absolute;top:0;z-index:1002}.docs-material-dialog:focus{outline:none}.docs-material-dialog-title{border-bottom:1px solid rgba(0,0,0,0.12);padding:24px 24px 20px 24px}.docs-material-dialog-title-draggable{cursor:move}.docs-material-dialog-title-text{font:500 21px Roboto,RobotoDraft,Helvetica,Arial,sans-serif;padding-right:38px}.docs-material-dialog-title-close{border:1px solid transparent;border-radius:2px;box-sizing:border-box;cursor:pointer;display:block;height:20px;opacity:0.54;position:absolute;right:24px;top:26px;width:20px}.docs-material-dialog-title-close:focus{border-color:#4285f4;opacity:1.0;outline:none}.docs-material-dialog-title-close:hover{opacity:1.0}.docs-material-dialog-content{padding:24px}.docs-material-dialog-buttons{float:right;padding:8px 4px 14px 4px}.docs-material-dialog-buttons:after{clear:both;content:"";display:block;height:0;width:0}.docs-material-gm-dialog{background-color:#fff;border:1px solid transparent;border-radius:8px;box-shadow:0 4px 8px 3px rgba(60,64,67,.15);position:absolute;z-index:1003}.docs-material-gm-dialog-bg{background-color:#000;left:0;position:absolute;top:0;z-index:1002}.docs-material-gm-dialog:focus{outline:none}.docs-material-gm-dialog-title{border-bottom:none;padding:24px}.docs-material-gm-dialog-title-text{color:#202124;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:22px;font-weight:400;line-height:28px}.docs-material-gm-dialog-title-close{height:24px;position:absolute;right:24px;top:26px;width:24px}.docs-material-gm-dialog-content{min-width:312px;padding:0px 24px 24px}.docs-material-gm-dialog-buttons{display:flex;justify-content:flex-end;padding:24px}.docs-material-gm-dialog .docs-material-button-fill-primary.docs-material-button{margin-left:12px;text-transform:none}.docs-material-gm-dialog .docs-material-button-hairline-default.docs-material-button{text-transform:none}.docs-charts-editor-material-color-picker{color:rgba(0,0,0,0.87);cursor:pointer;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;line-height:21px;outline:none;width:100%}.docs-charts-editor-material-color-picker-disabled{color:rgba(0,0,0,0.12);cursor:default}.docs-charts-editor-material-color-picker-outer-box{transition:border-color 0.3s ease;border-bottom:1px solid rgba(0,0,0,0.12);margin-bottom:1px;padding-bottom:5px;width:100%}.docs-charts-editor-material-color-picker-hover .docs-charts-editor-material-color-picker-outer-box,.docs-charts-editor-material-color-picker-focused .docs-charts-editor-material-color-picker-outer-box{border-bottom-color:rgba(0,0,0,0.38)}.docs-charts-editor-material-color-picker-open .docs-charts-editor-material-color-picker-outer-box{border-bottom-width:2px;border-bottom-color:#4285f4;margin-bottom:0px}.docs-charts-editor-material-color-picker-inner-box{width:100%}.docs-charts-editor-material-color-picker-disabled .docs-charts-editor-material-color-picker-outer-box{border-bottom:1px dotted rgba(0,0,0,0.12)}.docs-charts-editor-material-color-picker-indicator{border:1px solid rgba(0,0,0,0.12);border-radius:2px;float:left;height:20px;margin-top:6px;position:relative;top:1px;width:20px}.docs-charts-editor-material-color-picker-text{overflow:hidden;padding-left:4px;padding-right:28px;position:relative;text-overflow:ellipsis;top:10px;vertical-align:middle;white-space:nowrap}.docs-charts-editor-material-color-picker-dropdown{position:absolute;right:8px;top:0px}.docs-charts-editor-material-color-picker-dropdown-icon{transition:opacity 0.3s ease;background:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1IiBoZWlnaHQ9IjMiPjxwb2x5Z29uIHBvaW50cz0iMCwwIDUsMCAyLjUsMyIgZmlsbD0iIzAwMCIvPjwvc3ZnPg==") no-repeat;background-size:contain;height:8px;opacity:0.38;position:relative;top:19px;width:8px}.docs-gm .docs-charts-editor-material-color-picker-dropdown-icon{opacity:1}.docs-charts-editor-material-color-picker-hover .docs-charts-editor-material-color-picker-dropdown-icon,.docs-charts-editor-material-color-picker-focused .docs-charts-editor-material-color-picker-dropdown-icon{opacity:0.54}.docs-gm .docs-charts-editor-material-color-picker-hover .docs-charts-editor-material-color-picker-dropdown-icon,.docs-gm .docs-charts-editor-material-color-picker-focused .docs-charts-editor-material-color-picker-dropdown-icon{opacity:1}.docs-charts-editor-material-color-picker-disabled .docs-charts-editor-material-color-picker-dropdown-icon{opacity:0.12}.docs-gm .docs-charts-editor-material-color-picker-disabled .docs-gm .docs-charts-editor-material-color-picker-dropdown-icon{opacity:.38}.docs-charts-editor-material-combo-box{height:26px;line-height:26px;outline:0;width:100%}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-combo-box{height:42px;line-height:42px}.docs-charts-editor-material-combo-box-disabled{cursor:default}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-combo-box-disabled{color:#5f6368;opacity:.38;cursor:default}.docs-charts-editor-material-combo-box .docs-charts-editor-material-combo-box-outer-box{transition:border-color 0.3s ease;border-bottom:1px solid rgba(0,0,0,0.12);height:26px;line-height:26px;margin-bottom:1px;width:100%}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-combo-box .docs-charts-editor-material-combo-box-outer-box{border:1px solid #dadce0;border-radius:4px;box-sizing:border-box;cursor:pointer;padding:8px 6px 8px 8px;width:100%;height:42px;line-height:42px;padding:8px}.docs-charts-editor-material-combo-box-hover .docs-charts-editor-material-combo-box-outer-box,.docs-charts-editor-material-combo-box-focused .docs-charts-editor-material-combo-box-outer-box{border-bottom-color:rgba(0,0,0,0.38)}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-combo-box-hover .docs-charts-editor-material-combo-box-outer-box{background-color:rgba(60,64,67,0.04);border:1px solid #dadce0}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-combo-box-focused .docs-charts-editor-material-combo-box-outer-box{background-color:rgba(60,64,67,0.06);border:1px solid #dadce0}.docs-charts-editor-material-combo-box-open .docs-charts-editor-material-combo-box-outer-box{border-bottom-width:2px;border-bottom-color:#4285f4;margin-bottom:0px}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-combo-box-open .docs-charts-editor-material-combo-box-outer-box{background-color:rgba(60,64,67,0.04);border:1px solid transparent}.docs-charts-editor-material-combo-box-disabled .docs-charts-editor-material-combo-box-outer-box{border-bottom:1px dotted rgba(0,0,0,0.12)}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-combo-box-disabled .docs-charts-editor-material-combo-box-outer-box{border:1px solid #dadce0;box-shadow:none;cursor:default}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-combo-box-inner-box{align-items:center;display:flex;justify-content:space-between;position:relative;width:100%;height:100%}.docs-charts-editor-material-combo-box-inner-box{width:100%}.docs-charts-editor-material-combo-box-caption{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding-right:28px;width:100%}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-combo-box-caption{padding-right:0}.docs-charts-editor-material-combo-box-input,.docs-charts-editor-material-combo-box-input:focus{background:none;border:none;box-shadow:none;color:rgba(0,0,0,0.87);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;height:26px;line-height:26px;padding:0;width:100%}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-combo-box-caption .docs-charts-editor-material-combo-box-input,.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-combo-box-caption .docs-charts-editor-material-combo-box-input:focus{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;color:#202124;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;height:20px;line-height:20px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border:none;padding:0}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-combo-box-disabled .docs-charts-editor-material-combo-box-input{color:rgba(0,0,0,0.26)}.docs-charts-editor-material-combo-box-disabled .docs-charts-editor-material-combo-box-input{background:none;color:rgba(0,0,0,0.12);cursor:default}.docs-charts-editor-material-combo-box-dropdown{position:absolute;right:8px;top:10px}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-combo-box-dropdown{align-items:center;display:flex;height:24px;justify-content:center;width:24px;position:static}.docs-charts-editor-material-combo-box-dropdown-icon{transition:opacity 0.3s ease;background:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1IiBoZWlnaHQ9IjMiPjxwb2x5Z29uIHBvaW50cz0iMCwwIDUsMCAyLjUsMyIgZmlsbD0iIzAwMCIvPjwvc3ZnPg==") no-repeat;background-size:contain;cursor:pointer;height:8px;opacity:0.38;width:8px}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-combo-box-dropdown-icon{background:no-repeat url(//ssl.gstatic.com/docs/common/material_common_sprite146_grey_medium.svg) -46px -3920px;height:18px;width:18px;opacity:1}.docs-charts-editor-material-combo-box-hover .docs-charts-editor-material-combo-box-dropdown-icon,.docs-charts-editor-material-combo-box-focused .docs-charts-editor-material-combo-box-dropdown-icon{opacity:0.54}.docs-charts-editor-material-combo-box-disabled .docs-charts-editor-material-combo-box-dropdown-icon{opacity:0.12}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-combo-box-disabled .docs-charts-editor-material-combo-box-dropdown-icon{opacity:.26}.docs-charts-editor-material-icon-menu-button{cursor:pointer;height:26px;margin:0;min-width:40px;outline:none;user-select:none}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-icon-menu-button{height:auto;min-width:34px}.docs-charts-editor-material-icon-menu-button-disabled{cursor:default}.docs-charts-editor-material-icon-menu-button .docs-icon-img{transition:opacity 200ms cubic-bezier(0.4,0.0,0.2,1);opacity:0.54}.docs-gm .docs-charts-editor-material-icon-menu-button .docs-icon-img{opacity:1.0}.docs-charts-editor-material-icon-menu-button-disabled .docs-icon-img{opacity:0.12}.docs-gm .docs-charts-editor-material-icon-menu-button-disabled .docs-icon-img{opacity:.38}.docs-charts-editor-material-icon-menu-button-outer-box{transition:background 250ms cubic-bezier(0.4,0.0,0.2,1);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background:rgba(0,0,0,0.04);border-radius:1px;height:26px;line-height:26px;margin-right:4px;padding:0px 4px;width:100%}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-icon-menu-button-outer-box{background:#fff;border:2px solid #fff;border-radius:4px;height:100%;line-height:34px;margin-right:0;padding:0}.docs-charts-editor-material-icon-menu-button-open .docs-charts-editor-material-icon-menu-button-outer-box{background:rgba(0,0,0,0.12)}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-icon-menu-button-open .docs-charts-editor-material-icon-menu-button-outer-box{background:#e6f4ea}.docs-charts-editor-material-icon-menu-button-inner-box{width:100%}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-icon-menu-button-caption{margin-left:2px}.docs-charts-editor-material-icon-menu-button-dropdown{position:absolute;right:0;top:0}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-icon-menu-button-dropdown{left:15px}.docs-charts-editor-material-icon-menu-button-dropdown-icon{transition:opacity 250ms cubic-bezier(0.4,0.0,0.2,1);background:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1IiBoZWlnaHQ9IjMiPjxwb2x5Z29uIHBvaW50cz0iMCwwIDUsMCAyLjUsMyIgZmlsbD0iIzAwMCIvPjwvc3ZnPg==") no-repeat;background-size:contain;height:8px;opacity:0.54;position:relative;top:9px;width:8px}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-icon-menu-button-dropdown-icon{background:no-repeat url(//ssl.gstatic.com/docs/common/material_common_sprite146_grey_medium.svg) -46px -3920px;height:18px;opacity:1;width:18px}.docs-charts-editor-material-icon-menu-button-focused .docs-charts-editor-material-icon-menu-button-dropdown-icon,.docs-charts-editor-material-icon-menu-button-open .docs-charts-editor-material-icon-menu-button-dropdown-icon{opacity:0.87}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-icon-menu-button-open .docs-icon-img{content:url(//ssl.gstatic.com/docs/common/material_common_sprite146_green.svg)}.docs-gm .docs-charts-editor-material-icon-menu-button-focused .docs-gm .docs-charts-editor-material-icon-menu-button-dropdown-icon,.docs-gm .docs-charts-editor-material-icon-menu-button-open .docs-gm .docs-charts-editor-material-icon-menu-button-dropdown-icon{opacity:1}.docs-charts-editor-material-icon-menu-button-disabled .docs-charts-editor-material-icon-menu-button-dropdown-icon{opacity:0.12}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-icon-menu-button-disabled .docs-charts-editor-material-icon-menu-button-dropdown-icon{opacity:.26}.docs-gm .docs-charts-editor-material-icon-menu-button-disabled .docs-gm .docs-charts-editor-material-icon-menu-button-dropdown-icon{opacity:.38}.docs-charts-editor-material-menu-button{color:rgba(0,0,0,0.87);cursor:pointer;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;height:26px;line-height:26px;outline:0;width:100%}.docs-charts-editor-material-menu-button-disabled{color:rgba(0,0,0,0.12);cursor:default}.docs-charts-editor-material-menu-button-outer-box{transition:border-color 0.3s ease;border-bottom:1px solid rgba(0,0,0,0.12);height:26px;line-height:26px;margin-bottom:1px;width:100%}.docs-charts-editor-material-menu-button-hover .docs-charts-editor-material-menu-button-outer-box,.docs-charts-editor-material-menu-button-focused .docs-charts-editor-material-menu-button-outer-box{border-bottom-color:rgba(0,0,0,0.38)}.docs-charts-editor-material-menu-button-open .docs-charts-editor-material-menu-button-outer-box{border-bottom-width:2px;border-bottom-color:#4285f4;margin-bottom:0px}.docs-charts-editor-material-menu-button-disabled .docs-charts-editor-material-menu-button-outer-box{border-bottom:1px dotted rgba(0,0,0,0.12)}.docs-charts-editor-material-menu-button-inner-box{display:flex;width:100%}.docs-charts-editor-material-menu-button-caption{display:inline-block;line-height:26px;overflow:hidden;padding-right:28px;position:relative;text-overflow:ellipsis;white-space:nowrap;-ms-flex:1;-webkit-flex:1;flex:1}.docs-charts-editor-material-menu-button-dropdown{position:absolute;right:8px;top:10px;white-space:nowrap}.docs-charts-editor-material-menu-button-dropdown-icon{transition:opacity 0.3s ease;background:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1IiBoZWlnaHQ9IjMiPjxwb2x5Z29uIHBvaW50cz0iMCwwIDUsMCAyLjUsMyIgZmlsbD0iIzAwMCIvPjwvc3ZnPg==") no-repeat;background-size:contain;height:8px;opacity:0.38;width:8px}.docs-charts-editor-material-menu-button-hover .docs-charts-editor-material-menu-button-dropdown-icon,.docs-charts-editor-material-menu-button-focused .docs-charts-editor-material-menu-button-dropdown-icon{opacity:0.54}.docs-gm .docs-charts-editor-material-menu-button-hover .docs-charts-editor-material-menu-button-dropdown-icon,.docs-gm .docs-charts-editor-material-menu-button-focused .docs-charts-editor-material-menu-button-dropdown-icon{opacity:1}.docs-charts-editor-material-menu-button-disabled .docs-charts-editor-material-menu-button-dropdown-icon{opacity:0.12}.docs-gm .docs-charts-editor-material-menu-button-disabled .docs-gm .docs-charts-editor-material-menu-button-dropdown-icon{opacity:.38}.docs-charts-editor-material-text-area textarea{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;transition:border-bottom-color 0.3s ease;background:none;border:none;border-bottom:1px solid rgba(0,0,0,0.12);color:rgba(0,0,0,0.87);font-family:'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;height:26px;line-height:26px;min-height:26px;outline:none;padding:0;width:100%;resize:none;white-space:pre;overflow-wrap:normal;overflow-y:scroll;overflow-x:hidden}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-text-area textarea{transition:border-color 0.3s ease;color:#3c4043;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;height:42px;line-height:36px;min-height:42px}.docs-charts-editor-material-text-area textarea::placeholder{color:rgba(0,0,0,0.38)}.docs-charts-editor-material-text-area textarea::-webkit-input-placeholder{color:rgba(0,0,0,0.38)}.docs-charts-editor-material-text-area textarea::-moz-placeholder{color:rgba(0,0,0,0.38)}.docs-charts-editor-material-text-area textarea:-ms-input-placeholder{color:rgba(0,0,0,0.38)}.docs-charts-editor-material-text-area textarea::-ms-input-placeholder{color:rgba(0,0,0,0.38)}.docs-charts-editor-material-text-area textarea:hover,.docs-charts-editor-material-text-area-hover textarea{border-bottom-color:rgba(0,0,0,0.38)}.docs-charts-editor-material-text-area textarea:focus,.docs-charts-editor-material-text-area-focus textarea{box-shadow:none;border:none;border-bottom:2px solid #4285f4}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-text-area textarea:focus,.docs-charts-editor-material-text-area-focus textarea{border:2px solid #4285f4}.docs-charts-editor-material-text-area textarea:disabled,.docs-charts-editor-material-text-area-disabled textarea{background:none;border-bottom:1px dotted rgba(0,0,0,0.12);color:rgba(0,0,0,0.12)}.docs-charts-editor-material-textbutton{transition:background 200ms cubic-bezier(0.4,0.0,0.2,1);background:rgba(0,0,0,0.04);border-radius:2px;cursor:pointer;height:26px;margin-right:4px;outline:none;padding:4px;text-align:center}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-textbutton{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:white;border:1px solid #dadce0!important;color:#188038;height:24px;padding:3px 12px 5px;margin-right:0}.docs-charts-editor-material-textbutton-label{color:#2196f3;font-size:12px;text-transform:uppercase}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-textbutton-label{color:#188038;font-size:14px;letter-spacing:.25px;line-height:14px;text-transform:none}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-textbutton-disabled .docs-charts-editor-material-textbutton-label{color:#3c4043;opacity:.38}.docs-charts-editor-material-textbutton-outer-box{vertical-align:-webkit-baseline-middle}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-textbutton-outer-box{vertical-align:baseline}.docs-charts-editor-material-textbutton-hover,.docs-charts-editor-material-textbutton-focused{}.docs-charts-editor-material-textbutton-focused{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#e7f5eb;border:1px solid #bbe2c6!important;height:24px;padding:3px 12px 5px}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-textbutton-hover{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#f8fcf9;border:1px solid #c8e7d1!important;height:24px;padding:3px 12px 5px}.docs-charts-editor-material-textbutton-checked{background:rgba(0,0,0,0.12)}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-textbutton-checked{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#dff2e4;border:1px solid transparent!important;box-shadow:0 2px 6px 2px rgba(60,64,67,.15);height:24px;padding:3px 12px 5px}.docs-charts-editor-material-textbutton-disabled{cursor:default}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-textbutton-disabled{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:white;border:1px solid #f1f3f4!important;height:24px;padding:3px 12px 5px}.docs-charts-editor-material-textbutton .docs-icon-img{transition:opacity 200ms cubic-bezier(0.4,0.0,0.2,1);opacity:0.54}.docs-gm .docs-charts-editor-material-textbutton .docs-icon-img{opacity:1}.docs-charts-editor-material-textbutton-focused .docs-icon-img,.docs-charts-editor-material-textbutton-checked .docs-icon-img{opacity:0.87}.docs-gm .docs-charts-editor-material-textbutton-focused .docs-icon-img,.docs-gm .docs-charts-editor-material-textbutton-checked .docs-icon-img{opacity:1}.docs-charts-editor-material-textbutton-disabled .docs-icon-img{opacity:0.12}.docs-gm .docs-charts-editor-material-textbutton-disabled .docs-icon-img{opacity:.38}.docs-charts-editor-material-text-input input{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;transition:border-bottom-color 0.3s ease;background:none;border:none;border-bottom:1px solid rgba(0,0,0,0.12);color:rgba(0,0,0,0.87);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;height:26px;line-height:26px;outline:none;padding:0;width:100%}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-text-input .jfk-textinput{transition:border-color 0.3s ease;height:42px;line-height:42px;margin:0}.docs-charts-editor-material-text-input input::placeholder{color:rgba(0,0,0,0.38)}.docs-charts-editor-material-text-input input::-webkit-input-placeholder{color:rgba(0,0,0,0.38)}.docs-charts-editor-material-text-input input::-moz-placeholder{color:rgba(0,0,0,0.38)}.docs-charts-editor-material-text-input input:-ms-input-placeholder{color:rgba(0,0,0,0.38)}.docs-charts-editor-material-text-input input::-ms-input-placeholder{color:rgba(0,0,0,0.38)}.docs-charts-editor-material-text-input input:hover,.docs-charts-editor-material-text-input-hover input{border-bottom-color:rgba(0,0,0,0.38)}.docs-charts-editor-material-text-input input:focus,.docs-charts-editor-material-text-input-focus input{box-shadow:none;border:none;border-bottom:2px solid #4285f4}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-text-input input:focus,.docs-charts-editor-material-text-input-focus input{box-shadow:none;border:2px solid #4285f4}.docs-charts-editor-material-text-input input:disabled,.docs-charts-editor-material-text-input-disabled input{background:none;border-bottom:1px dotted rgba(0,0,0,0.12);color:rgba(0,0,0,0.12)}.docs-charts-editor-material-togglebutton{transition:background 200ms cubic-bezier(0.4,0.0,0.2,1);background:rgba(0,0,0,0.04);border-radius:2px;cursor:pointer;height:26px;line-height:26px;margin-right:4px;outline:none;text-align:center;width:26px}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-togglebutton{background:#fff;border:2px solid #fff;border-radius:4px;height:34px;line-height:34px;margin-right:0;width:30px}.docs-charts-editor-material-togglebutton-hover,.docs-charts-editor-material-togglebutton-focused{}.docs-charts-editor-material-togglebutton-checked{background:rgba(0,0,0,0.12)}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-togglebutton-checked{background:#e6f4ea}.docs-charts-editor-material-togglebutton-checked.docs-charts-editor-material-togglebutton-hover,.docs-charts-editor-material-togglebutton-checked.docs-charts-editor-material-togglebutton-focused{}.docs-charts-editor-material-togglebutton-checked.docs-charts-editor-material-togglebutton-active{}.docs-charts-editor-material-togglebutton-disabled{cursor:default}.docs-charts-editor-material-togglebutton .docs-icon-img{transition:opacity 200ms cubic-bezier(0.4,0.0,0.2,1);opacity:0.54}.docs-gm .docs-charts-editor-material-togglebutton .docs-icon-img{opacity:1}.docs-charts-editor-material-togglebutton-focused .docs-icon-img,.docs-charts-editor-material-togglebutton-checked .docs-icon-img{opacity:0.87}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-togglebutton-checked .docs-icon-img{content:url(//ssl.gstatic.com/docs/common/material_common_sprite146_green.svg)}.docs-gm .docs-charts-editor-material-togglebutton-focused .docs-icon-img,.docs-gm .docs-charts-editor-material-togglebutton-checked .docs-icon-img{opacity:1}.docs-charts-editor-material-togglebutton-disabled .docs-icon-img{opacity:0.12}.docs-gm .docs-charts-editor-material-togglebutton-disabled .docs-icon-img{opacity:.38}.docs-charts-editor-material-toolbar-color-picker{cursor:pointer;height:26px;min-width:40px;outline:none;user-select:none}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-toolbar-color-picker{color:#3c4043;outline:none;width:100%;height:42px;max-width:100%;width:auto}.docs-charts-editor-material-toolbar-color-picker-disabled{cursor:default}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-toolbar-color-picker-disabled{color:#5f6368;opacity:.38;cursor:default}.docs-charts-editor-material-toolbar-color-picker-outer-box{transition:background 250ms cubic-bezier(0.4,0.0,0.2,1);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background:rgba(0,0,0,0.04);border-radius:2px;height:100%;padding:2px 4px;width:100%}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-toolbar-color-picker-outer-box{border:1px solid #dadce0;border-radius:4px;box-sizing:border-box;cursor:pointer;padding:8px 6px 8px 8px;width:100%;background:#fff;max-width:100%;width:auto}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-toolbar-color-picker-hover .docs-charts-editor-material-toolbar-color-picker-outer-box{background-color:rgba(60,64,67,0.04);border:1px solid #dadce0}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-toolbar-color-picker-disabled .docs-charts-editor-material-toolbar-color-picker-outer-box{border:1px solid #dadce0;box-shadow:none;cursor:default}.docs-charts-editor-material-toolbar-color-picker-open .docs-charts-editor-material-toolbar-color-picker-outer-box{background:rgba(0,0,0,0.12)}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-toolbar-color-picker-open .docs-charts-editor-material-toolbar-color-picker-outer-box{background-color:rgba(60,64,67,0.04);border:1px solid transparent}.docs-charts-editor-material-toolbar-color-picker-inner-box{width:100%}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-toolbar-color-picker-inner-box{align-items:center;display:flex;justify-content:space-between;position:relative;width:100%;height:100%}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-toolbar-color-picker-content-container{width:80%}.docs-charts-editor-material-toolbar-color-picker-indicator{border-bottom:3px solid transparent;height:18px;width:22px}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-toolbar-color-picker-indicator{height:22px;width:22px;border-radius:50%;border:1px solid #dadce0;margin:0;outline:none}.docs-charts-editor-material-toolbar-color-picker-disabled .docs-charts-editor-material-toolbar-color-picker-indicator{opacity:0.12}.docs-gm .docs-charts-editor-material-toolbar-color-picker-disabled .docs-charts-editor-material-toolbar-color-picker-indicator{opacity:.38}.docs-charts-editor-material-toolbar-color-picker-indicator .docs-icon{transition:opacity 250ms cubic-bezier(0.4,0.0,0.2,1);-webkit-transform:scale(0.9);-moz-transform:scale(0.9);-ms-transform:scale(0.9);-o-transform:scale(0.9);transform:scale(0.9);height:14px;left:1px;opacity:0.54;width:18px}.docs-gm .docs-charts-editor-material-toolbar-color-picker-indicator .docs-icon{opacity:1}.docs-charts-editor-material-toolbar-color-picker-focused .docs-charts-editor-material-toolbar-color-picker-indicator .docs-icon,.docs-charts-editor-material-toolbar-color-picker-open .docs-charts-editor-material-toolbar-color-picker-indicator .docs-icon{opacity:0.87}.docs-gm .docs-charts-editor-material-toolbar-color-picker-focused .docs-charts-editor-material-toolbar-color-picker-indicator .docs-icon,.docs-gm .docs-charts-editor-material-toolbar-color-picker-open .docs-charts-editor-material-toolbar-color-picker-indicator .docs-icon{opacity:1}.docs-charts-editor-material-toolbar-color-picker-text{transition:color 250ms cubic-bezier(0.4,0.0,0.2,1);color:rgba(0,0,0,0.54);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:11px;padding:3px 8px 3px 2px;top:1px}.docs-gm .docs-charts-editor-material-toolbar-color-picker-text{color:rgba(0,0,0,0.87)}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-toolbar-color-picker-text{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;color:#202124;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;height:20px;line-height:20px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;height:100%;padding:3px 5px;max-width:65%}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-toolbar-color-picker-caption{height:100%}.docs-charts-editor-material-toolbar-color-picker-focused .docs-charts-editor-material-toolbar-color-picker-text,.docs-charts-editor-material-toolbar-color-picker-open .docs-charts-editor-material-toolbar-color-picker-text{color:rgba(0,0,0,0.87)}.docs-charts-editor-material-toolbar-color-picker-disabled .docs-charts-editor-material-toolbar-color-picker-text{color:rgba(0,0,0,0.12)}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-toolbar-color-picker-disabled .docs-charts-editor-material-toolbar-color-picker-text{color:rgba(0,0,0,0.26)}.docs-charts-editor-material-toolbar-color-picker-dropdown{float:right}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-toolbar-color-picker-dropdown{align-items:center;display:flex;height:24px;justify-content:center;width:24px}.docs-charts-editor-material-toolbar-color-picker-dropdown-icon{transition:opacity 250ms cubic-bezier(0.4,0.0,0.2,1);background:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1IiBoZWlnaHQ9IjMiPjxwb2x5Z29uIHBvaW50cz0iMCwwIDUsMCAyLjUsMyIgZmlsbD0iIzAwMCIvPjwvc3ZnPg==") no-repeat;background-size:contain;height:8px;opacity:0.54;position:relative;top:9px;width:8px}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-toolbar-color-picker-dropdown-icon{background:no-repeat url(//ssl.gstatic.com/docs/common/material_common_sprite146_grey_medium.svg) -46px -3920px;height:18px;width:18px;opacity:1;top:0}.docs-charts-editor-material-toolbar-color-picker-focused .docs-charts-editor-material-toolbar-color-picker-dropdown-icon,.docs-charts-editor-material-toolbar-color-picker-open .docs-charts-editor-material-toolbar-color-picker-dropdown-icon{opacity:0.87}.docs-gm .docs-charts-editor-material-toolbar-color-picker-focused .docs-charts-editor-material-toolbar-color-picker-dropdown-icon,.docs-gm .docs-charts-editor-material-toolbar-color-picker-open .docs-charts-editor-material-toolbar-color-picker-dropdown-icon{opacity:1}.docs-gm .waffle-gm-sidebar .docs-charts-editor-material-toolbar-color-picker-open .docs-charts-editor-material-toolbar-color-picker-dropdown-icon{-moz-transform:rotate(180deg);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.docs-charts-editor-material-toolbar-color-picker-disabled .docs-charts-editor-material-toolbar-color-picker-dropdown-icon{opacity:0.12}.docs-gm .docs-charts-editor-material-toolbar-color-picker-disabled .docs-charts-editor-material-toolbar-color-picker-dropdown-icon{opacity:.38}.docs-charts-editor-overflow-menu-button{outline:none;cursor:pointer}.docs-charts-editor-overflow-menu-button-icon{transition:opacity 0.3s ease;background:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgdmlld2JveD0iMCAwIDIwIDIwIiBoZWlnaHQ9IjIwIj48cGF0aCBkPSJtMTAgNmMxLjEgMCAyLTAuOSAyLTJzLTAuOS0yLTItMi0yIDAuOS0yIDIgMC45IDIgMiAyem0wIDJjLTEuMSAwLTIgMC45LTIgMnMwLjkgMiAyIDIgMi0wLjkgMi0yLTAuOS0yLTItMnptMCA2Yy0xLjEgMC0yIDAuOS0yIDJzMC45IDIgMiAyIDItMC45IDItMi0wLjktMi0yLTJ6Ii8+PC9zdmc+") no-repeat;opacity:0.38;height:21px;position:relative;right:5px;top:6px;width:21px}.docs-gm .waffle-gm-sidebar .docs-charts-editor-overflow-menu-button-icon{right:12px;top:7px}.docs-charts-editor-overflow-menu-button-hover .docs-charts-editor-overflow-menu-button-icon,.docs-charts-editor-overflow-menu-button-focused .docs-charts-editor-overflow-menu-button-icon{opacity:0.54}.docs-charts-editor-overflow-menu-button-disabled .docs-charts-editor-overflow-menu-button-icon{opacity:0.12}.docs-charts-editor-overflow-menu-button-caption{min-height:21px;overflow:hidden;padding-right:28px;position:absolute;text-overflow:ellipsis;top:10px;white-space:nowrap}.docs-charts-editor-material-icon-menu-button-palette .toolbar-icon,.docs-charts-editor-material-icon-menu-button-palette .docs-common-icon{margin:3px 5px 4px 2px}.docs-charts-editor-material-icon-menu-button-palette .goog-palette-cell{border:0}.docs-charts-editor-material-icon-menu-button-palette .goog-palette-table{border:0;margin:0 4px}.docs-charts-editor-material-icon-menu-button-palette .goog-palette-cell-hover{background:#eeeeee}.docs-charts-editor-chip-content{display:flex;background-color:#f1f3f4;border-radius:32px;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;height:32px;overflow:hidden;position:relative;white-space:nowrap}.docs-gm .waffle-gm-sidebar .docs-charts-editor-chip-content{border-radius:36px;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;height:36px}.docs-charts-editor-chip-content>*{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.docs-charts-editor-chip-label{-webkit-box-flex:1;box-flex:1;-ms-flex-positive:1;-webkit-flex-grow:1;flex-grow:1;-webkit-flex-shrink:1;-ms-flex-negative:1;flex-shrink:1;cursor:default;line-height:32px;margin-left:16px;overflow:hidden;text-overflow:ellipsis;vertical-align:top}.docs-gm .waffle-gm-sidebar .docs-charts-editor-chip-label{line-height:36px;margin-right:10px}.docs-charts-editor-chip-button{box-shadow:none;cursor:pointer;margin:0;min-width:0;outline:0;padding:0;position:absolute;right:0}.docs-charts-editor-chip.docs-charts-editor-chip-invalid .docs-charts-editor-chip-content{border:1px solid #db4437}.docs-charts-editor-chip.docs-charts-editor-chip-invalid .docs-charts-editor-chip-error-message{display:block}.docs-charts-editor-chip-error-message{color:#db4437;display:none;font-size:11px;left:8px;position:relative;top:3px}.docs-charts-editor-collapsible-header{transition:color 250ms cubic-bezier(0.4,0.0,0.2,1);color:rgba(0,0,0,0.54);cursor:pointer;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;font-weight:500;height:42px;line-height:42px;position:relative}.docs-gm .waffle-gm-sidebar .docs-charts-editor-collapsible-header{background-color:#f8f9fa;color:#80868b;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;height:56px;line-height:56px}.docs-charts-editor-collapsible-header.goog-control-open{color:rgba(0,0,0,0.87)}.docs-charts-editor-collapsible-header.goog-control-disabled{color:rgba(0,0,0,0.26);cursor:default}.docs-charts-editor-collapsible-header.goog-control-focused{color:rgba(0,0,0,0.87);outline:none}.docs-gm .waffle-gm-sidebar .docs-charts-editor-collapsible-header.goog-control-focused{color:#3c4043}.docs-charts-editor-collapsible-title{height:42px;line-height:42px;margin:0 2px 0 16px;overflow:hidden;text-overflow:ellipsis;width:190px}.docs-gm .waffle-gm-sidebar .docs-charts-editor-collapsible-title{height:56px;line-height:56px;padding:0 36px}.docs-charts-editor-collapsible-summary{color:rgba(0,0,0,0.54);height:42px;line-height:42px;overflow:hidden;position:absolute;right:42px;text-align:right;text-overflow:ellipsis;width:115px}.docs-gm .waffle-gm-sidebar .docs-charts-editor-collapsible-summary{height:56px;line-height:56px}.goog-control-disabled .docs-charts-editor-collapsible-summary{color:#888}.docs-charts-editor-collapsible-icon{transition:all 250ms cubic-bezier(0.4,0.0,0.2,1);background:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgdmlld0JveD0iMCAwIDE4IDE4Ij48ZyBzdHlsZT0iZmlsbDpub25lO3N0cm9rZS13aWR0aDoxO3N0cm9rZTpub25lIj48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg5IDkpc2NhbGUoMSAtMSl0cmFuc2xhdGUoLTkgLTkpIj48cmVjdCB3aWR0aD0iMTgiIGhlaWdodD0iMTgiLz48cG9seWdvbiBwb2ludHM9IjkgNSAzIDExIDQuNCAxMi40IDkgNy44IDEzLjYgMTIuNCAxNSAxMSIgZmlsbD0iIzAwMCIvPjwvZz48L2c+PC9zdmc+");height:18px;opacity:0.54;position:absolute;right:16px;top:11px;width:18px}.docs-gm .waffle-gm-sidebar .docs-charts-editor-collapsible-icon{background:none;height:20px;left:16px;top:20px;transform:rotate(-90deg);width:20px}.docs-gm .waffle-gm-sidebar .docs-charts-editor-collapsible-icon .docs-icon{height:20px;vertical-align:top;width:20px}.goog-control-checked .docs-charts-editor-collapsible-icon{opacity:0.87;transform:rotate(-180deg)}.docs-gm .waffle-gm-sidebar .goog-control-checked .docs-charts-editor-collapsible-icon{top:14px;transform:none}.docs-gm .waffle-gm-sidebar .goog-control-focused .docs-charts-editor-collapsible-icon{opacity:0.87}.goog-control-disabled .docs-charts-editor-collapsible-icon{display:none}.docs-charts-editor-collapsible-content{transition:max-height 0.25s cubic-bezier(0.4,0.0,0.2,1);overflow:hidden}.docs-gm .waffle-gm-sidebar .docs-charts-editor-collapsible-content{background-color:#fff}.docs-charts-editor-collapsible-content-animating{transition:none}.docs-charts-editor-collapsible-content>div{padding:0 16px 6px 16px}.docs-charts-editor-collapsible-content.docs-charts-editor-collapsible-content-no-padding>div{padding:0}.docs-gm .waffle-gm-sidebar .docs-charts-editor-customize-tab .docs-charts-editor-bundle.docs-charts-editor-parent-bundle>.docs-charts-editor-collapsible-opened{box-shadow:0 1px 3px 1px rgba(60,64,67,.15);border:2px solid #fff;border-radius:8px}.docs-gm .waffle-gm-sidebar .docs-charts-editor-collapsible-opened .docs-charts-editor-collapsible-header{background-color:#fff;color:#3c4043}.docs-charts-editor-back-tab-header-back{float:left;margin:8px 16px 0 16px;right:auto}.docs-charts-editor-back-tab-header-title.jfk-button.docs-sidebar-toggle-tab{width:auto}.docs-charts-editor-labeledinput-error{color:#db4437;display:none;font-size:11px;margin-bottom:4px;margin-top:4px}.docs-charts-editor-labeledinput-haserror .docs-charts-editor-labeledinput-error{display:block}.docs-gm .waffle-gm-sidebar .docs-charts-editor-labeledinput-haserror input:hover{border-color:#c53929}.docs-charts-editor-labeledinput-haserror input,.docs-charts-editor-labeledinput-haserror input:focus{border-bottom:2px solid #db4437}.docs-gm .waffle-gm-sidebar .docs-charts-editor-labeledinput-haserror input,.docs-gm .waffle-gm-sidebar .docs-charts-editor-labeledinput-haserror input:focus{border:2px solid #db4437}.docs-charts-editor-labeledinput-haserror input:hover:not(:focus){border-bottom-color:#c53929}.docs-charts-editor-labeledselect-menu-style-wide{width:255px}.docs-charts-editor-labeledselect-menu-style-narrow{width:146px}.docs-gm .waffle-gm-sidebar .docs-material-gm-labeled-select-disabled .docs-material-gm-labeled-select-caption{color:rgba(0,0,0,0.26)}.docs-gm .waffle-gm-sidebar .docs-material-gm-labeled-select-disabled .docs-material-gm-labeled-select-dropdown-icon{opacity:.26}.docs-explore-icon{direction:ltr;text-align:left;overflow:hidden;position:relative;vertical-align:middle}.docs-explore-img:before{content:url(//ssl.gstatic.com/docs/common/menu_feature_sprite7.svg)}.docs-explore-img{height:4332px;position:absolute;width:72px}.docs-explore-hc-gecko .docs-explore-icon{filter:invert(100%)}.docs-explore-hc-ie .docs-explore-icon{-ms-high-contrast-adjust:none;background-color:white}.docs-explore-auto-awesome-grey{left:0;top:-4314px}.docs-explore-back-white{left:0;top:-4194px}.docs-explore-back-white-rtl{left:-36px;top:-640px}.docs-explore-cite-black{left:-42px;top:-2992px}.docs-explore-cite-black-18{left:-48px;top:-4128px}.docs-explore-docs-18{left:0;top:-2974px}.docs-explore-drawing-18{left:-50px;top:-3034px}.docs-explore-email-18{left:-36px;top:-3946px}.docs-explore-excel-18{left:-24px;top:-4128px}.docs-explore-expand-down{left:0;top:-1748px}.docs-explore-expand-up{left:0;top:-164px}.docs-explore-file-18{left:0;top:-1080px}.docs-explore-filter-button-black-18{left:0;top:-434px}.docs-explore-folder-18{left:-20px;top:-4194px}.docs-explore-form-18{left:-18px;top:-1122px}.docs-explore-forward-arrow-black{left:0;top:-4170px}.docs-explore-forward-arrow-black-rtl{left:-18px;top:-988px}.docs-explore-google-logo{left:-24px;top:-3840px}.docs-explore-group-blue-18{left:-18px;top:-4314px}.docs-explore-group-black-18{left:0;top:-1122px}.docs-explore-image-18{left:-24px;top:-164px}.docs-explore-insert-black{left:0;top:-3840px}.docs-explore-insert-black-18{left:-18px;top:-640px}.docs-explore-keep-yellow-18{left:0;top:-3658px}.docs-explore-lock-black-18{left:-50px;top:-2474px}.docs-explore-more-black{left:-48px;top:-4146px}.docs-explore-pdf-18{left:0;top:-988px}.docs-explore-powerpoint-18{left:-18px;top:-3946px}.docs-explore-preview-white{left:0;top:-4128px}.docs-explore-question-green{left:-50px;top:-2454px}.docs-explore-search-black{left:-18px;top:-2992px}.docs-explore-search-close-white{left:0;top:-1098px}.docs-explore-search-history-black{left:0;top:-452px}.docs-explore-sheets-18{left:-36px;top:-4314px}.docs-explore-sites-18{left:0;top:-1944px}.docs-explore-slides-18{left:-24px;top:-1098px}.docs-explore-thumb-down-18{left:-50px;top:-3052px}.docs-explore-thumb-up-18{left:0;top:-2522px}.docs-explore-video-18{left:0;top:-3946px}.docs-explore-word-18{left:-50px;top:-3016px}.docs-explore-show-more-14{left:0;top:-4152px}.docs-explore-promo-icon-wrapper{background-color:white;border-radius:50px;display:flex;height:100px;left:-46px;position:absolute;top:-36px;width:100px}.docs-explore-promo-icon{cursor:pointer;display:block;margin:auto}.waffle-assistant-entry{background-color:rgba(255,255,255,0.8);border:none;border-left:1px solid #c2c2c2;float:right;height:38px;padding-right:10px}.waffle-assistant-entry-button{border:1px solid transparent;cursor:pointer;height:34px;transition:padding 0.5s cubic-bezier(0.4,0.0,0.2,1);width:100%}.waffle-assistant-entry-button-icon{display:inline-block;position:relative;padding:7px 0 7px 8px}.waffle-assistant-entry-label{color:#0f9d58;display:inline-block;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:12px;overflow:hidden;padding-left:8px;transition:all 0.5s cubic-bezier(0.4,0.0,0.2,1);vertical-align:middle}.waffle-assistant-entry-button-black-icon{display:none;opacity:.54}.waffle-assistant-entry-inactive{border-left:1px solid transparent;background-color:transparent}.waffle-assistant-entry-inactive .waffle-assistant-entry-button-black-icon{display:block}.waffle-assistant-entry-inactive .waffle-assistant-entry-button-green-icon{display:none}.waffle-assistant-entry-inactive .waffle-assistant-entry-label{color:#737373;opacity:0;padding-right:0}.waffle-assistant-entry-expanded{background-color:rgba(255,255,255,0.8);border-left:1px solid #c2c2c2}.waffle-assistant-entry-expanded .waffle-assistant-entry-label{opacity:1;padding-right:6px}.waffle-assistant-entry-opened{background-color:#dadada;border-left:1px solid #c2c2c2;box-shadow:inset 0 0 6px rgba(0,0,0,.22)}.waffle-assistant-entry-opened .waffle-assistant-entry-button-black-icon{display:block}.waffle-assistant-entry-opened .waffle-assistant-entry-button-green-icon{display:none}.waffle-assistant-entry-opened .waffle-assistant-entry-label{color:#737373}.waffle-assistant-link-button{color:#4285f4;display:inline;text-decoration:underline}.waffle-assistant-link-button:hover,.waffle-assistant-link-button:focus{cursor:pointer;text-decoration:underline}.waffle-assistant-link-button:focus{margin:0 2px;outline-color:#4285f4;outline-width:2px}.waffle-assistant-button{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;border:1px solid transparent;border-radius:2px;font-size:11px;font-weight:500;margin-right:0;min-width:40px;opacity:0.8;padding:0;text-align:center;white-space:nowrap}.waffle-assistant-button-focused{border:1px solid #5e97f6;outline:none}.waffle-assistant-button-hover,.waffle-assistant-button-focused,.waffle-assistant-button-holder .waffle-assistant-button.waffle-assistant-button-hover,.waffle-assistant-button-holder .waffle-assistant-button.waffle-assistant-button-focused{cursor:pointer;opacity:1}.waffle-assistant-button-holder .waffle-assistant-button{height:24px;min-width:24px;opacity:0.6;padding:2px}.waffle-assistant-dragged-formula{box-shadow:1px 1px 4px rgba(0,0,0,0.28);background-color:#fff;border:1px solid #e0e0e0;line-height:22px;overflow-wrap:break-word;word-wrap:break-word}.waffle-assistant-formula-insertion-rect{background-color:#000;opacity:0.06}.waffle-assistant-visible{visibility:visible}.docs-ui-toast.waffle-assistant-toast{box-shadow:0px 2px 2px 0px rgba(0,0,0,0.14),0px 3px 1px -2px rgba(0,0,0,0.12),0px 1px 5px 0px rgba(0,0,0,0.2);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:flex;bottom:60px;color:rgba(255,255,255,0.87);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;font-weight:500;left:auto;line-height:20px;min-width:0;padding:14px 24px;right:15px;width:286px}.waffle-assistant-toast-content{-ms-flex:1;-webkit-flex:1;flex:1;font-weight:400;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.waffle-assistant-toast-action{color:#a0c1fc;text-transform:uppercase}.waffle-assistant-panel-title-bar{height:20px}.waffle-assistant-panel-back-button{cursor:pointer}.waffle-assistant-panel-back-button-icon{height:20px;margin-bottom:1px}.waffle-assistant-panel-pane{height:100%}.waffle-assistant-sidepanel.waffle-sidebar-container{box-shadow:0px 2px 2px 0px rgba(0,0,0,0.14),0px 3px 1px -2px rgba(0,0,0,0.12),0px 1px 5px 0px rgba(0,0,0,0.2);background:#f1f1f1;width:320px}.waffle-assistant-title.waffle-sidebar-title{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;transition:height .3s;background-color:#0f9d58;font-family:'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;line-height:20px;min-height:36px;padding:0px}.waffle-assistant-title .waffle-sidebar-title-close{right:11px;top:6px}.waffle-assistant-title-bar,.waffle-assistant-panel-title-bar{display:flex;-webkit-align-items:center;align-items:center}.waffle-assistant-replaceable-title,.waffle-assistant-title-bar{padding:8px 12px}.waffle-assistant-replaceable-title .waffle-assistant-title-bar{padding:0}.waffle-assistant-title-text{-ms-flex:1;-webkit-flex:1;flex:1;-webkit-align-items:center;align-items:center;font-weight:500;padding-left:12px}.waffle-assistant-title-icon{height:20px;position:relative;width:20px}.waffle-assistant-sidepane-content.waffle-sidebar-content{overflow:hidden}.waffle-assistant-scroll-pane{background:#f1f1f1;height:100%;overflow-x:hidden;overflow-y:auto}.waffle-assistant-scroll-pane-content{height:100%}.waffle-assistant-scroll-pane-feature-content{height:100%}.waffle-assistant-expanded-panel{height:100%;width:320px}.waffle-assistant-spinner-container{text-align:center;pointer-events:none;position:absolute;width:100%}.waffle-assistant-expanded-panel .waffle-assistant-spinner-container{display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;height:100%}.waffle-assistant-empty-list{display:flex;background:#fff;color:rgb(46%,46%,46%);height:100%;text-align:center;width:320px}.waffle-assistant-empty-list-content{font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;margin:auto 24px;width:100%}.waffle-assistant-empty-list svg{padding-bottom:24px}.waffle-assistant-empty-list-title{color:rgb(46%,46%,46%);font-size:15px;font-weight:500}.waffle-assistant-empty-list-body{color:rgb(46%,46%,46%);font-size:13px;padding:8px 0}.waffle-assistant-empty-list-link{font-size:13px;font-weight:400;margin:0}.waffle-assistant-empty-list-link span,.waffle-assistant-empty-list-link a{color:#1a73e8;cursor:pointer}.waffle-assistant-empty-list-link a:hover{text-decoration:none}.waffle-assistant-feature-section{box-shadow:0 2px 2px rgba(0,0,0,0.10);background:white;margin-bottom:8px}.waffle-assistant-feature-section:last-child{margin-bottom:0}.waffle-assistant-section-header{display:flex;-webkit-align-items:center;align-items:center;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;padding:16px 16px 0 16px;position:relative;width:288px}.waffle-assistant-section-title{-ms-flex:1;-webkit-flex:1;flex:1;color:rgba(0,0,0,0.54);font-size:13px;font-weight:600;height:15px;line-height:15px;text-transform:uppercase}.jfk-button.waffle-assistant-section-more-button{border:0;color:#1a73e8;cursor:pointer;height:15px;font-size:13px;line-height:15px;margin-right:16px;text-transform:uppercase}.jfk-button.waffle-assistant-section-more-button:focus{border:1px solid #5e97f6;outline:none}.waffle-assistant-section-content{padding-bottom:10px}.waffle-assistant-scroll-pane::-webkit-scrollbar{width:12px}.docs-gm .waffle-assistant-scroll-pane::-webkit-scrollbar-thumb{background-color:#dadce0}.waffle-assistant-scroll-pane::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,0.2);background-clip:padding-box;border:solid transparent;border-width:1px 1px 1px 2px;box-shadow:none;min-height:28px;padding:1px}.docs-gm .waffle-assistant-scroll-pane::-webkit-scrollbar-thumb:hover{background-color:#bdc1c6}.waffle-assistant-scroll-pane::-webkit-scrollbar-thumb:hover{box-shadow:none}.docs-gm .waffle-assistant-scroll-pane::-webkit-scrollbar-thumb:active{background-color:#80868b}.docs-gm .waffle-assistant-scroll-pane::-webkit-scrollbar-track{border:none}.waffle-assistant-scroll-pane::-webkit-scrollbar-track{background-clip:border-box;background-color:#f8f8f8;border:solid #d9d9d9;border-width:1px;box-shadow:none}.docs-gm .waffle-assistant-scroll-pane::-webkit-scrollbar-track:hover{border:none}.waffle-assistant-scroll-pane::-webkit-scrollbar-track:hover{background-color:#f8f8f8;background-clip:border-box;box-shadow:none;border:solid #d9d9d9;border-width:1px}.waffle-assistant-card{background:#fff;border-bottom:1px solid #e0e0e0;margin-bottom:8px;outline:0;overflow:hidden;position:relative}.waffle-assistant-feature-section .waffle-assistant-card{margin-bottom:0}.waffle-assistant-panel-pane .waffle-assistant-card{box-shadow:0 2px 2px rgba(0,0,0,0.10)}.waffle-assistant-card-spinner-container{position:absolute;text-align:center;top:50%;transform:translateY(-50%);width:100%}.waffle-assistant-card-inner{position:relative}.waffle-assistant-padded-card{padding:15px}.waffle-assistant-button-holder{background-color:rgba(255,255,255,0.7);padding:3px;position:absolute;top:0;z-index:1}.waffle-assistant-dragger-card .waffle-assistant-button-holder,.waffle-assistant-dragger-card .waffle-assistant-chart-highlights,.waffle-assistant-dragger-card .waffle-assistant-facet-section{display:none}.waffle-assistant-card-draggable{cursor:move}.waffle-assistant-readonly .waffle-assistant-card:hover{cursor:default}.waffle-assistant-card-options{-webkit-border-radius:0 0 0 2px;-moz-border-radius:0 0 0 2px;border-radius:0 0 0 2px;box-shadow:-1px 1px 3px #d3d3d3;right:0}.waffle-assistant-padded-card{padding:15px}.waffle-assistant-feedback-card-content{-ms-flex:1;-webkit-flex:1;flex:1;vertical-align:middle;line-height:19px}.waffle-assistant-feedback-card-text{margin:2px 0}.waffle-assistant-feedback-card{box-shadow:0px 2px 4px rgba(0,0,0,.3);display:flex;background-color:white;cursor:default;margin:5px;max-height:500px;overflow:hidden;padding:15px;width:250px}.waffle-assistant-feedback-card-close-button{-webkit-align-self:flex-start;align-self:flex-start;min-width:auto}.waffle-assistant-card .waffle-assistant-feedback-card{transition:all .1s}.waffle-assistant-dragger-card .waffle-assistant-feedback-card{display:none}.waffle-assistant-card .waffle-assistant-feedback-card-hidden{padding:0 15px 0 15px;margin:0 5px 0 5px;max-height:0}.waffle-assistant-insert-chart-button.jfk-button,.waffle-assistant-zoom-button.jfk-button,.waffle-assistant-thumbs-down-button.jfk-button,.waffle-assistant-thumbs-up-button.jfk-button{cursor:pointer;display:block;height:24px;margin:0 auto 0 auto;min-width:24px;opacity:.6;padding:1px;width:24px}.waffle-assistant-insert-chart-button.jfk-button:hover,.waffle-assistant-zoom-button.jfk-button:hover,.waffle-assistant-thumbs-down-button.jfk-button:hover,.waffle-assistant-thumbs-up-button.jfk-button:hover{opacity:.8}.waffle-assistant-insert-chart-button.jfk-button:active,.waffle-assistant-zoom-button.jfk-button:active,.waffle-assistant-thumbs-down-button.jfk-button:active,.waffle-assistant-thumbs-up-button.jfk-button:active{opacity:1}.waffle-assistant-thumbs-down-icon{background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -150px 0;height:24px;width:24px}.waffle-assistant-thumbs-up-icon{background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -113px -46px;height:24px;width:24px}.waffle-assistant-button-separator{border-bottom:1px solid #d3d3d3;height:0;margin:3px;width:21px}.waffle-assistant-card-feedback-container{display:flex;-webkit-align-items:flex-end;align-items:flex-end;-webkit-justify-content:center;justify-content:center;background:rgba(0,0,0,0.38);height:100%;position:absolute;width:100%;z-index:1}.waffle-assistant-feedback-card-hidden{display:none!important}.waffle-assistant-thumbs-container,.waffle-assistant-facet-thumbs-container{border-top:1px dashed #e0e0e0;color:#616161}.waffle-assistant-thumbs{display:flex;-webkit-align-items:center;align-items:center;height:40px;line-height:16px;padding:0 15px}.waffle-assistant-thumbs-button-holder{display:flex}.waffle-assistant-thumbs-up-button,.waffle-assistant-thumbs-down-button{min-width:30px!important}.waffle-assistant-thumbs-text{-ms-flex:1;-webkit-flex:1;flex:1;text-transform:uppercase}.waffle-assistant-quicksum-panel{background:#fff;border-bottom:1px solid #e0e0e0;line-height:19px;margin-bottom:8px;padding:15px;position:relative}.waffle-assistant-scroll-pane-feature-content .waffle-assistant-quicksum-panel{box-shadow:0 2px 2px rgba(0,0,0,0.10)}.waffle-assistant-quicksum-entry{border:1px solid transparent;color:#757575;cursor:move;font-family:Roboto,Arial,sans-serif;padding:0 5px}.waffle-assistant-quicksum-entry:hover,.waffle-assistant-quicksum-entry:focus{border:1px solid #5e97f6}.waffle-assistant-quicksum-panel-readonly .waffle-assistant-quicksum-entry:hover,.waffle-assistant-quicksum-panel-readonly .waffle-assistant-quicksum-entry:focus{border:1px solid transparent}.waffle-assistant-quicksum-panel-readonly .waffle-assistant-quicksum-entry{border:1px solid transparent;cursor:default}.waffle-assistant-quicksum-entry-name{font-weight:500;margin-right:10px}.waffle-assistant-quicksum-entry-value{float:right}.waffle-assistant-walkthrough-promo-content{font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;line-height:22px;padding:15px 20px;width:300px}.waffle-assistant-walkthrough-promo-header{font-size:20px}.waffle-assistant-walkthrough-promo-button{cursor:pointer;font-size:14px;font-weight:500;text-transform:uppercase}.waffle-assistant-walkthrough-promo-continue-button{color:#5e97f5;margin-right:10px}.waffle-assistant-walkthrough-promo-close-button{margin-left:10px;opacity:0.7}.waffle-april2018-promo-base,.waffle-assistant-entry-promo{background-color:#0f9d58;border-color:#0f9d58;bottom:-500px;right:-450px}.waffle-april2018-promo-content,.waffle-assistant-entry-promo .docs-explore-promo-content{left:-300px;top:-170px;width:360px}.range-border.waffle-assistant-table-range-border{border-color:#0f9d58;border-style:dashed;line-height:0}.waffle-assistant-table-range-rect{background-color:#0f9d58;opacity:0.06;pointer-events:none}.range-border.waffle-assistant-header-range-border{border-color:#f09300;border-style:dashed;line-height:0}.waffle-assistant-header-range-rect{background-color:#f09300;opacity:0.06;pointer-events:none}.waffle-assistant-card .docs-charts-tooltip{font-size:10px;padding:4px 8px;line-height:1.1em}.waffle-assistant-highlight-styled-rect{background-color:#34a853;opacity:0.06;pointer-events:none}.range-border.waffle-assistant-highlight-styled-border{border-color:#34a853;border-style:dashed}.waffle-assistant-highlight-styled-rect-red{background-color:#ea4335;opacity:0.06;pointer-events:none}.range-border.waffle-assistant-highlight-styled-border-red{border-color:#ea4335;border-style:dashed}.waffle-assistant-mouseover-highlight-styled-rect{background-color:#34a853;opacity:0.25;pointer-events:none}.range-border.waffle-assistant-mouseover-highlight-styled-border{border-color:#34a853;border-style:dashed}.waffle-assistant-mouseover-highlight-styled-rect-red{background-color:#ea4335;opacity:0.25;pointer-events:none}.range-border.waffle-assistant-mouseover-highlight-styled-border-red{border-color:#ea4335;border-style:dashed}.waffle-inline-assistant-sidebar-category-label{color:#3c4043;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;height:27px;letter-spacing:0.25px;line-height:27px}.waffle-inline-assistant-sidebar-column-type-description{color:#3c4043;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:12px;line-height:16px;letter-spacing:0.3px;font-weight:normal;padding:8px 8px 4px 16px}.waffle-inline-assistant-sidebar-intro{color:#80868b;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;padding:16px 16px 6px}.waffle-inline-assistant-sidebar-accepted-container{margin:0 20px;text-align:center}.waffle-inline-assistant-sidebar-accept-back{margin-right:0}.waffle-inline-assistant-sidebar-empty-container{margin:20px;text-align:center}.waffle-inline-assistant-sidebar-accepted-message,.waffle-inline-assistant-sidebar-empty-message{color:#3c4043;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;letter-spacing:0.2px;margin:15px}.waffle-inline-assistant-sidebar-empty-check{filter:invert(100%);height:30px;padding:10px}.waffle-assistant-floating-popup{box-shadow:0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12),0px 2px 4px -1px rgba(0,0,0,0.2);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background:white;border-radius:10px;bottom:30px;left:55px;padding:18px;position:absolute;width:320px;z-index:20}.waffle-assistant-popup-view{box-shadow:0 2px 6px 2px rgba(60,64,67,.15);display:table;position:absolute}.waffle-assistant-popup-suggestion{background:#fff;color:#3c4043;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;overflow:hidden;outline:none;margin:2px 10px;padding:8px 0 8px 14px;position:relative;text-align:left;cursor:pointer}.waffle-assistant-popup-suggestion:hover,.waffle-assistant-popup-suggestion:focus{background:rgba(0,0,0,.06)}.waffle-assistant-popup-suggestion:active{background:rgba(0,0,0,0.12)}.waffle-assistant-popup-suggestion-text{font-size:14px;line-height:21px;white-space:normal;word-wrap:break-word}.docs-material-gm-checkbox.waffle-assistant-card-checkbox{border:2px solid #80868b;float:left;margin-top:-1px;position:absolute;top:50%;transform:translateY(-50%)}.docs-material-gm-checkbox-checked.waffle-assistant-card-checkbox{border:2px solid #188038}.waffle-assistant-card-unchecked-hovered-checkbox{opacity:0.7}.waffle-assistant-card-checkbox-disabled{opacity:0.6}.waffle-inline-assistant-sidebar-accept{float:right;margin:16px}.waffle-inline-assistant-sidebar-survey-container{background-color:#f8f9fa;cursor:pointer;padding:12px;text-align:center}.waffle-inline-assistant-sidebar-accepted-container .waffle-inline-assistant-sidebar-survey-container{margin:0 -20px}.waffle-inline-assistant-sidebar-survey-link{color:#188038!important;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;letter-spacing:0.25px}.waffle-inline-assistant-sidebar-survey-link:hover{text-decoration:none}.waffle-inline-assistant-sidebar-survey-container:hover,.waffle-inline-assistant-sidebar-survey-container:focus{background:rgba(0,0,0,.06)}.waffle-inline-assistant-sidebar-survey-container:active{background:rgba(0,0,0,0.12)}.waffle-inline-assistant-sidebar{background-color:white}.waffle-inline-assistant-sidebar .waffle-sidebar-footer-container{background-color:white;border-top:1px solid #dadce0}.waffle-assistant-card-text{color:#5f6368;display:inline-block;font-size:14px;letter-spacing:0.2px;line-height:20px;margin-left:32px;margin-right:40px;white-space:normal;word-wrap:break-word}.waffle-assistant-card-feedback{display:inline-block;position:absolute;right:0;top:50%;transform:translateY(-50%)}.waffle-assistant-feedback-button{outline:none}.waffle-assistant-card-text .waffle-assistant-feedback-button{float:right}.waffle-assistant-form{margin-left:32px}.waffle-assistant-form .jfk-textinput{width:100%}.waffle-inline-assistant-sidebar-category-show-more-button{color:#3c4043;cursor:pointer;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:normal;letter-spacing:0.2px;margin:4px 14px 10px;text-align:left}.waffle-inline-assistant-sidebar-category-show-more-button:hover,.waffle-inline-assistant-sidebar-category-show-more-button:focus{background:rgba(0,0,0,.06)}.waffle-inline-assistant-sidebar-category-show-more-button:active{background:rgba(0,0,0,0.12)}.waffle-inline-assistant-sidebar-divider{border-top:1px solid #dadce0;margin:6px 15px 8px}.waffle-inline-assistant-sidebar-category-show-more-button .docs-icon{height:24px;margin:0 4px 0 0;width:24px}.docs-auto-fix{filter:invert(37%) sepia(93%) saturate(360%) hue-rotate(86deg) brightness(88%) contrast(100%)}.waffle-inline-assistant-sidebar-category-show-more-button.jfk-button-hover{box-shadow:none}.waffle-inline-assistant-sidebar-category-header{color:#188038;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;overflow:hidden;padding:8px 3px 0 16px}.waffle-inline-assistant-sidebar-category-check-all{color:#188038;cursor:pointer;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;float:right;font-size:13px;font-weight:500;letter-spacing:0.25px;margin-right:3px}.waffle-inline-assistant-sidebar-category-check-all.jfk-button-hover{box-shadow:none}.waffle-inline-assistant-sidebar-category-check-all:hover,.waffle-inline-assistant-sidebar-category-check-all:focus{background:rgba(0,0,0,.06)}.waffle-inline-assistant-sidebar-category-check-all:active{background:rgba(0,0,0,0.12)}.waffle-inline-assistant-rec-range{color:#188038;font-weight:500}.waffle-inline-assistant-rec-range-red{color:#d93025;font-weight:500}.waffle-inline-assistant-rec-detail{color:#202124;font-weight:500;white-space:nowrap}.waffle-assistant-popup-num-patterns{font-weight:500}.waffle-assistant-popup-button-row{margin-top:18px;text-align:right}.jfk-button-action.waffle-assistant-popup-button{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff}.jfk-button-action.waffle-assistant-popup-button.goog-button-hover{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;background:#2a8947;box-shadow:0 1px 3px 1px rgba(52,168,83,0.15)}.jfk-button-action.waffle-assistant-popup-button.goog-button-focused{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;background:#4f9e67;box-shadow:0 1px 3px 1px rgba(52,168,83,0.15)}.jfk-button-action.waffle-assistant-popup-button.goog-button-hover.goog-button-focused{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;background:#62a877;box-shadow:0 1px 3px 1px rgba(52,168,83,0.15)}.jfk-button-standard.waffle-assistant-popup-button{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:white;border:1px solid #dadce0!important;color:#188038}.jfk-button-standard.waffle-assistant-popup-button.goog-button-hover{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#f8fcf9;border:1px solid #c8e7d1!important}.jfk-button-standard.waffle-assistant-popup-button.goog-button-focused{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#e7f5eb;border:1px solid #bbe2c6!important}.jfk-button-standard.waffle-assistant-popup-button.goog-button-hover.goog-button-focused{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#dff2e4;border:1px solid #b5e0c1!important}.waffle-assistant-popup-button-review{margin-right:0}.waffle-assistant-popup-button-dismiss{background-color:#f1f3f4}.waffle-assistant-popup-logo{float:left;margin-right:18px;min-width:0;outline:none;padding:3px}.waffle-feedback-troubleshoot-item{color:#5f6368;font-size:11px;width:168px}.waffle-feedback-troubleshoot-item-icon,.waffle-feedback-troubleshoot-item-text{display:inline}.waffle-assistant-feedback-dialog,.waffle-assistant-feedback-product-info-dialog{font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif}.waffle-assistant-feedback-dialog{min-width:464px;max-width:512px}.waffle-assistant-feedback-dialog .docs-material-gm-dialog-content{font-size:14px;padding-bottom:0}.waffle-assistant-feedback-dialog-radio-button{padding:8px}.waffle-assistant-feedback-dialog-radio-button .jfk-radiobutton-radio{left:0}.waffle-assistant-feedback-dialog-radio-button .jfk-radiobutton-label{margin-left:16px}.waffle-assistant-feedback-dialog-feedback-radio-buttons-control .waffle-assistant-feedback-dialog-radio-button{display:block}.waffle-assistant-feedback-dialog-legal{margin-right:16px;max-width:256px}.waffle-assistant-feedback-dialog-legal-information-text{color:#80868b}.waffle-assistant-feedback-dialog-product-info-display-text{color:#5f6368;cursor:pointer;padding-top:10px;text-decoration:underline}.waffle-assistant-feedback-dialog-header{color:#1967d2;font-weight:500;padding:8px 0;text-transform:uppercase}.waffle-assistant-feedback-product-info-dialog .docs-material-gm-dialog-content{max-height:568px;overflow:auto;overflow-wrap:break-word;width:466px}.waffle-assistant-feedback-product-info-dialog dt{font-weight:500}.waffle-assistant-feedback-dialog .jfk-textinput{border:1px solid #dadce0;border-radius:4px;box-sizing:border-box;color:#3c4043;padding:1px 8px;font-size:14px;height:36px;margin:8px 0}.waffle-assistant-feedback-dialog textarea.jfk-textinput{height:auto;height:unset;min-height:52px;min-width:100%;max-height:52px;padding:7px 8px}.waffle-assistant-feedback-dialog .jfk-textinput:focus{border:2px solid #1a73e8;box-shadow:none;padding:0px 7px}.waffle-assistant-feedback-dialog textarea.jfk-textinput:focus{padding:6px 7px}.waffle-assistant-insert-chart-button.jfk-button{position:relative;left:-1px}.waffle-assistant-zoom-button.jfk-button{position:relative;left:1px}.waffle-assistant-chart-preview{cursor:move;height:238px;width:271px}.waffle-assistant-readonly .waffle-assistant-chart-preview{cursor:default}.waffle-assistant-chart-preview.waffle-assistant-dragged-card{background-color:#fff;border:1px solid #e0e0e0;z-index:1000}.waffle-assistant-chart-highlights{border-left:3px solid #0f9d58;color:#616161;cursor:text;padding-left:15px;margin-top:20px;margin-bottom:20px;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text}.waffle-assistant-facet-section{background-color:#fafafa;cursor:default}.waffle-assistant-facet-header{font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;padding:8px 16px}.waffle-assistant-facet-content-wrapper{max-height:1000px;position:relative;transition:all .2s}.waffle-assistant-facet-charts-wrapper-hidden,.waffle-assistant-facet-charts-wrapper-hidden .waffle-assistant-facet-charts-container{margin-top:0;margin-bottom:0;max-height:0}.waffle-assistant-facet-charts-container{overflow-y:hidden;margin:24px 16px 0;max-height:1000px;transition:all .2s;width:350px}.waffle-assistant-pie-icon{background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -501px 0;display:inline-block;height:24px;margin-right:10px;opacity:.5;vertical-align:middle;width:24px}.waffle-assistant-facet-chart-larger-icon{height:24px;width:24px}.waffle-assistant-facet-top-text{color:#757575;display:inline-block;overflow:hidden;text-overflow:ellipsis;vertical-align:middle;width:185px}.waffle-assistant-facet-title{font-weight:500}.waffle-assistant-facet-toggle{color:#4285f4;cursor:pointer;float:right;font-size:13px;font-weight:normal;line-height:24px;margin-right:0;min-width:initial;outline:none;text-align:right}.waffle-assistant-facet-toggle:hover{box-shadow:none}.waffle-assistant-facet-chart-row{margin-bottom:16px;white-space:nowrap}.waffle-assistant-single-facet{display:inline-block;margin-right:16px;vertical-align:bottom}.waffle-assistant-single-facet-title{color:#757575;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:12px;white-space:normal;width:130px}.waffle-assistant-faceted-chart{border:1px solid #e0e0e0;cursor:move;height:98px;margin-top:5px;outline:none;overflow:hidden;width:134px}.waffle-assistant-facet-by-color-container{padding:15px}.waffle-assistant-facet-by-color{border:none;height:270px;margin-top:0;overflow:hidden;width:271px}.waffle-assistant-facet-white-section{background-color:#fff}.waffle-assistant-readonly .waffle-assistant-faceted-chart{cursor:default}.waffle-assistant-word-cloud-card{padding:16px 16px 24px}.waffle-assistant-word-cloud-content-container{background-color:#fff;color:rgba(0,0,0,.54);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif}.waffle-assistant-word-cloud-title{color:#757575;font-size:13px;margin-bottom:10px}.waffle-assistant-styled-rect{opacity:0.1}.waffle-assistant-answers-logging-message-container{display:flex;background:#f4f4f4;margin:10px 0;padding:7px}.waffle-assistant-answers-logging-message{-ms-flex:1;-webkit-flex:1;flex:1;color:#757575;font-size:11px;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;line-height:20px;margin-left:5px}.waffle-assistant-answers-learn-more,.waffle-assistant-answers-logging-opt-out{padding:0 5px;text-decoration:none}.waffle-assistant-answers-logging-opt-out{border-left:1px solid rgba(0,0,0,0.12)}.waffle-assistant-section-content .waffle-assistant-answers-input{margin:16px 16px 0}.waffle-assistant-suggested-questions{padding-bottom:15px}.waffle-assistant-section-content .waffle-assistant-answers-input{padding-bottom:5px}.waffle-assistant-replaceable-title .waffle-assistant-answers-input{margin:10px 0;padding-bottom:0px}.waffle-assistant-answers-query-box{box-shadow:0px 0px 2px 0px rgba(0,0,0,0.12),0px 2px 2px 0px rgba(0,0,0,0.24);display:flex;-webkit-align-items:center;align-items:center;background:#fafafa;border-radius:2px;height:40px;line-height:40px}.waffle-assistant-replaceable-title .waffle-assistant-answers-query-box{background:#fafafa;width:295px}.waffle-assistant-answers-query-box.waffle-assistant-answers-query-box-focused,.waffle-assistant-answers-query-box:hover{background:#fff}.waffle-assistant-replaceable-title .waffle-assistant-answers-query-box-focused,.waffle-assistant-replaceable-title .waffle-assistant-answers-query-box:hover{background:#fafafa}.waffle-assistant-replaceable-title .waffle-assistant-answers-query-box-focused{border-bottom-left-radius:0;border-bottom-right-radius:0}.waffle-assistant-answers-input-container{display:flex;-ms-flex:8;-webkit-flex:8;flex:8}.waffle-assistant-replaceable-title .waffle-assistant-answers-input-box{padding:0 5px 0 10px}.waffle-assistant-answers-input-box{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background:transparent;border:none;height:40px;line-height:15px;outline:none;padding:0 5px;width:100%}.waffle-assistant-answers-input-with-icon .waffle-assistant-answers-input-box{padding-left:40px}.waffle-assistant-answers-toolbar-enabled .waffle-assistant-answers-input-box::-webkit-input-placeholder{color:#80868b!important;font:14px 'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif!important}.waffle-assistant-answers-toolbar-enabled .waffle-assistant-answers-input-box::-moz-placeholder{color:#80868b!important;font:14px 'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif!important}.waffle-assistant-answers-toolbar-enabled .waffle-assistant-answers-input-box:-moz-placeholder{color:#80868b!important;font:14px 'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif!important}.waffle-assistant-answers-toolbar-enabled .waffle-assistant-answers-input-box:-ms-input-placeholder{color:#80868b!important;font:14px 'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif!important}.waffle-assistant-answers-input-box::-webkit-input-placeholder{color:#80868b!important;font:14px 'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif!important}.waffle-assistant-answers-input-box::-moz-placeholder{color:#80868b!important;font:14px 'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif!important;line-height:40px!important}.waffle-assistant-answers-input-box:-moz-placeholder{color:#80868b!important;font:14px 'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif!important;line-height:40px!important}.waffle-assistant-answers-input-box:-ms-input-placeholder{color:#80868b!important;font:14px 'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif!important}.waffle-assistant-answers-search-icon{display:none;position:absolute}.waffle-assistant-answers-input-with-icon .waffle-assistant-answers-search-icon{display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center}.waffle-assistant-answers-search-icon,.waffle-assistant-answers-input-controls{height:40px;width:40px}.waffle-assistant-answers-query-box-button{height:40px}.waffle-assistant-answers-search-icon .docs-icon-img,.waffle-assistant-answers-clear-query-button .docs-icon-img{opacity:0.7}.waffle-assistant-answers-spinner-container{display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;height:40px;width:40px}.waffle-assistant-answers-spinner-container .waffle-spinner{height:25px;width:25px}.waffle-assistant-answers-output{background:rgba(0,0,0,0.12)}.waffle-assistant-answers-toolbar-ac-renderer,.waffle-assistant-answers-ac-renderer{box-shadow:0px 0px 2px 0px rgba(0,0,0,0.12),0px 2px 2px 0px rgba(0,0,0,0.24);background:#fafafa;border-bottom-left-radius:2px;border-bottom-right-radius:2px;color:#616161;font-family:'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:12px;line-height:20px;position:absolute;width:295px;z-index:10000}.waffle-assistant-answers-toolbar-ac-renderer{-webkit-transform:translate(-1px,-5px);-moz-transform:translate(-1px,-5px);-ms-transform:translate(-1px,-5px);-o-transform:translate(-1px,-5px);transform:translate(-1px,-5px);background:#fff;border-bottom-left-radius:8px;border-bottom-right-radius:8px;width:250px}.waffle-assistant-answers-ac-row{cursor:default;padding:10px}.waffle-assistant-answers-ac-row-suggested-query:first-child,:not(.waffle-assistant-answers-ac-row-suggested-query)+.waffle-assistant-answers-ac-row-suggested-query,.waffle-assistant-answers-ac-row-session-query:first-child,:not(.waffle-assistant-answers-ac-row-session-query)+.waffle-assistant-answers-ac-row-session-query,.waffle-assistant-answers-ac-row-entity:first-child,:not(.waffle-assistant-answers-ac-row-entity)+.waffle-assistant-answers-ac-row-entity{border-top:1px solid rgba(0,0,0,0.12)}.waffle-assistant-answers-ac-active{background:#f5f5f5;cursor:pointer}.waffle-assistant-answers-ac-highlighted{font-weight:700}.waffle-assistant-answers-ac-suggestion{display:flex}.waffle-assistant-answers-ac-suggestion-icon-container{margin-right:5px;opacity:0.7;width:24px}.waffle-assistant-answers-ac-suggestion-text{-ms-flex:8;-webkit-flex:8;flex:8;overflow:hidden;text-overflow:ellipsis;-webkit-box-orient:vertical;-webkit-line-clamp:3;display:-webkit-box;max-height:60px;overflow:hidden;overflow-wrap:break-word;word-wrap:break-word}.waffle-assistant-answercard-content{-webkit-user-select:auto;-moz-user-select:auto;-ms-user-select:auto;color:#757575}.waffle-assistant-answercard-question-container,.waffle-assistant-answercard-answer-container,.waffle-assistant-answercard-error-container{line-height:20px}.waffle-assistant-answercard-answer-container,.waffle-assistant-answercard-error-container,.waffle-assistant-answercard-question-container{padding:5px 0}.waffle-assistant-answercard-answer-container{margin-top:5px}.waffle-assistant-answercard-question-container.waffle-assistant-button,.waffle-assistant-answercard-error-container{display:flex}.waffle-assistant-answercard-question-container.waffle-assistant-button{-webkit-align-items:initial;align-items:initial;color:#757575;padding:5px 16px;opacity:1;text-align:left;white-space:normal;font-weight:400;font-size:13px}.waffle-assistant-answercard-question-container.waffle-assistant-button-hover,.waffle-assistant-answercard-question-container.waffle-assistant-button-focused{background-color:#f5f5f5;outline:none}.waffle-assistant-answercard-question-header,.waffle-assistant-answercard-answer-header{color:#0f9d58;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;font-weight:500;padding-bottom:3px;text-transform:uppercase}.waffle-assistant-button .waffle-assistant-answercard-question-header{opacity:0.7}.waffle-assistant-button .waffle-assistant-answercard-question-header,.waffle-assistant-answercard-error-image{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;height:18px;margin-right:10px;width:18px}.waffle-assistant-answercard-error-image{opacity:0.5}.waffle-assistant-answercard-question-content,.waffle-assistant-answercard-interpret-content,.waffle-assistant-answercard-answer-content,.waffle-assistant-answercard-error-content{overflow:hidden}.waffle-assistant-answercard-interpret-content{font-style:italic;padding-bottom:6px}.waffle-assistant-button .waffle-assistant-answercard-question-content,.waffle-assistant-answercard-error-content{-ms-flex:1;-webkit-flex:1;flex:1}.waffle-assistant-answercard-question,.waffle-assistant-answercard-interpret,.waffle-assistant-answercard-answer-col,.waffle-assistant-answercard-formula,.waffle-assistant-answercard-error{overflow:hidden;text-overflow:ellipsis}.waffle-assistant-answercard-question,.waffle-assistant-answercard-interpret,.waffle-assistant-errorcard-text{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text}.waffle-assistant-answercard-question-unused-phrase{text-decoration:line-through}.waffle-assistant-answercard-question-used-entity{font-weight:700}.waffle-assistant-answercard-answer-rowheader{display:flex;border-bottom:1px solid #979797;font-weight:700;margin-top:0;padding:4px 0 0}.waffle-assistant-answercard-answer-rows{max-height:200px;overflow-x:hidden;overflow-y:auto}.waffle-assistant-answercard-answer-row{display:flex;border-bottom:1px dashed #979797;padding:4px 0}.waffle-assistant-answercard-answer-row:first-child{margin-top:0}.waffle-assistant-answercard-answer-list-row.waffle-assistant-answercard-answer-row{font-weight:400}.waffle-assistant-answercard-answer-list-row.waffle-assistant-answercard-answer-row:last-child{border-bottom:1px dashed #979797}.waffle-assistant-answercard-answer-row:last-child{border:none;margin-bottom:0}.waffle-assistant-answercard-answer-col{-ms-flex:2;-webkit-flex:2;flex:2;margin:0 2px}.waffle-assistant-answercard-answer-col:first-child{margin-left:0}.waffle-assistant-answercard-answer-col:last-child{margin-right:0}.waffle-assistant-answercard-answer-col:nth-child(even){-ms-flex:1;-webkit-flex:1;flex:1;text-align:right}.waffle-assistant-answercard-answer-empty{color:rgba(0,0,0,0.54);font-weight:400;font-style:italic}.waffle-assistant-answercard-answer{color:rgba(0,0,0,0.54);font-weight:700}.waffle-assistant-answercard-info-msgs{font-size:12px;color:#949494;line-height:15px;margin:5px 0}.waffle-assistant-answercard-formula-holder{color:#757575;font-size:12px;font-style:italic;line-height:18px;margin-top:10px}.waffle-assistant-answercard-formula{display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;border:1px solid #4285f4;margin-top:5px}.waffle-assistant-readonly-card .waffle-assistant-answercard-formula{border:1px solid transparent}.waffle-assistant-answercard-formula-display{display:flex}.waffle-assistant-answercard-formula-help{background:#4285f4;color:#fff;padding-left:5px}.waffle-assistant-answercard-see-formula-link,.waffle-assistant-answercard-hide-formula-link{color:#757575}.waffle-assistant-answercard-formula-icon{display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;background:rgba(0,0,0,0.12);min-height:28px;width:30px}.waffle-assistant-answercard-formula-text-container{-ms-flex:1;-webkit-flex:1;flex:1;border-radius:3px;overflow-wrap:break-word;word-wrap:break-word;white-space:pre-wrap}.waffle-assistant-answercard-formula-text:hover,.waffle-assistant-answercard-formula-text:focus{outline:none}.waffle-assistant-answercard-formula-text:hover{cursor:move}.waffle-assistant-readonly-card .waffle-assistant-answercard-formula-text:hover{cursor:default}.waffle-assistant-answercard-formula-text{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background:#f5f5f5;max-width:257px;padding:5px}.waffle-assistant-answercard-feedback-container{border-top:1px dashed #e0e0e0;padding:0 15px}.waffle-assistant-answercard-feedback-link{color:#757575;line-height:40px}.waffle-assistant-answers-range-styled-rect{opacity:0.20}.waffle-assistant-answers-styled-rect{opacity:0.06}.waffle-assistant-answers-range-styled-rect,.waffle-assistant-answers-styled-rect{background-color:#0f9d58;pointer-events:none}.waffle-assistant-answers-range-styled-border,.waffle-assistant-answers-styled-border{border-color:#0f9d58!important;border-style:dashed!important;line-height:0}.waffle-assistant-answers-suggestioncard{color:#757575}.waffle-assistant-answers-suggestioncard .waffle-assistant-answercard-error-container{padding:15px;padding-bottom:0}.waffle-assistant-suggestionscard-header{color:#0f9d58;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;font-weight:500;line-height:20px;padding-bottom:3px;padding-left:15px;padding-right:15px;padding-top:20px;text-transform:uppercase}.waffle-assistant-errorcard-content,.waffle-assistant-errorcard-text{line-height:20px}.waffle-assistant-answers-previousheadercard{color:#757575;padding:20px 15px 10px;text-transform:uppercase}.waffle-assistant-answercard-chart{height:200px;width:278px}.waffle-assistant-answercard-pivot-content{margin-bottom:10px;max-height:200px;overflow:hidden;width:278px}.waffle-pivottable-pivot-canvas{border:1px solid rgba(0,0,0,0.12)}.waffle-pivottable-pivot-canvas:hover,.waffle-pivottable-pivot-canvas:focus{border:1px solid #4285f4;cursor:pointer}.waffle-assistant-answercard-tabs{-ms-flex-align:center;-moz-box-align:center;-webkit-box-align:center;box-align:center;-webkit-align-items:center;align-items:center;display:flex;box-pack:center;-ms-flex-pack:center;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;text-align:center}.waffle-assistant-answercard-chart-tab,.waffle-assistant-answercard-formula-tab,.waffle-assistant-answercard-pivot-tab{-ms-flex:1;-webkit-flex:1;flex:1;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:12px;line-height:18px}.waffle-assistant-answercard-chart-tab.goog-tab.goog-tab-selected,.waffle-assistant-answercard-formula-tab.goog-tab.goog-tab-selected,.waffle-assistant-answercard-pivot-tab.goog-tab.goog-tab-selected{background:#9e9e9e;color:#fff;cursor:default;font-weight:500}.waffle-assistant-answercard-chart-tab.goog-tab,.waffle-assistant-answercard-formula-tab.goog-tab,.waffle-assistant-answercard-pivot-tab.goog-tab{border:1px solid rgba(0,0,0,0.1);color:#8f8f8f;cursor:pointer;padding:2px 4px;text-decoration:none}.waffle-assistant-answercard-chart-tab.goog-tab{border-top-right-radius:2px;border-bottom-right-radius:2px}.waffle-assistant-answercard-formula-tab.goog-tab,.waffle-assistant-answercard-pivot-tab.goog-tab{border-top-left-radius:2px;border-bottom-left-radius:2px}.waffle-assistant-answercard-tabs.goog-tab-bar{background:inherit;margin-bottom:10px}.waffle-assistant-answercard-insert-chart,.waffle-assistant-answercard-insert-pivot{color:rgba(0,0,0,0.87);float:right;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;font-weight:500;margin:0 5px}.waffle-assistant-answercard-chart-type-select,.waffle-assistant-answercard-chart-type-select:hover,.waffle-assistant-answercard-chart-type-select:focus{background:none;border-color:transparent;color:rgba(0,0,0,0.87);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;padding:0 18px 0 0}.waffle-assistant-answercard-chart-type-select:hover .goog-flat-menu-button-caption{text-decoration:underline}.waffle-answers-panel{height:100%}.waffle-dbsource-configbar-answers-wrapper{display:flex;-ms-flex:1;-webkit-flex:1;flex:1;-webkit-justify-content:flex-end;justify-content:flex-end;opacity:0.28;position:relative}.waffle-dbsource-configbar-answers-wrapper.waffle-assistant-answers-toolbar-enabled{opacity:1}.waffle-dbsource-configbar-answers-wrapper .waffle-assistant-answers-input{margin:0;padding-bottom:0px;width:250px}.waffle-dbsource-configbar-answers-wrapper .waffle-assistant-answers-query-box,.waffle-dbsource-configbar-answers-wrapper.waffle-assistant-answers-toolbar-enabled .waffle-assistant-answers-query-box{box-shadow:none;transition:all 200ms ease-out;background:#f1f3f4;border-radius:8px;height:36px;line-height:36px;width:250px}.waffle-dbsource-configbar-answers-wrapper.waffle-assistant-answers-toolbar-enabled .waffle-assistant-answers-query-box.waffle-assistant-answers-query-box-focused,.waffle-dbsource-configbar-answers-wrapper.waffle-assistant-answers-toolbar-enabled .waffle-assistant-answers-query-box:hover{box-shadow:0px 3px 4px 0px rgba(0,0,0,0.14),0px 3px 3px -2px rgba(0,0,0,0.12),0px 1px 8px 0px rgba(0,0,0,0.2);background:white}.waffle-dbsource-configbar-answers-wrapper .waffle-assistant-answers-query-box.waffle-assistant-answers-query-box-focused,.waffle-dbsource-configbar-answers-wrapper .waffle-assistant-answers-query-box:hover{background:#f1f3f4}.waffle-dbsource-configbar-answers-wrapper .waffle-assistant-answers-search-icon,.waffle-dbsource-configbar-answers-wrapper .waffle-assistant-answers-input-controls,.waffle-dbsource-configbar-answers-wrapper .waffle-assistant-answers-query-box-button{height:36px}.waffle-dbsource-configbar-answers-wrapper .waffle-assistant-answers-input-box{color:#80868b;font-size:14px;height:36px}.waffle-answers-bar .waffle-assistant-answers-query-box{box-shadow:none;border:1px solid #dadce0;border-radius:8px;background:#fff;opacity:0.5}.waffle-answers-button.jfk-button{background:none;border:none;border-radius:50%;height:30px;margin:0 9px 0 0;min-width:30px;opacity:0.5;padding:5px}.waffle-answers-button.jfk-button-hover{background-color:rgba(0,0,0,.06)}.waffle-answers-bar.waffle-assistant-answers-toolbar-enabled .waffle-assistant-answers-query-box{opacity:1}.waffle-answers-bar.waffle-assistant-answers-toolbar-enabled .waffle-answers-button{opacity:1}.waffle-answers-bar .waffle-assistant-answers-input{margin:2px 4px 2px;width:250px}.waffle-answers-bar.waffle-assistant-answers-toolbar-enabled .waffle-assistant-answers-query-box.waffle-assistant-answers-query-box-focused,.waffle-answers-bar.waffle-assistant-answers-toolbar-enabled .waffle-assistant-answers-query-box:hover{box-shadow:0px 1px 1px 0px rgba(0,0,0,0.14),0px 2px 1px -1px rgba(0,0,0,0.12),0px 1px 3px 0px rgba(0,0,0,0.2)}.waffle-assistant-datavalidation-rule-group{margin:16px}.waffle-assistant-datavalidation-rule-holder{border:1px solid #ccc;cursor:pointer;display:block;margin-bottom:5px;padding:1px;width:258px}.waffle-assistant-datavalidation-description{color:rgba(0,0,0,0.54);display:inline-block;text-overflow:ellipsis}.waffle-assistant-datavalidation-apply-button.jfk-button{color:#1a73e8;cursor:pointer;display:inline-block;float:right;font-size:13px;text-align:right;text-transform:uppercase}.waffle-assistant-datavalidation-range{font-weight:500}.waffle-assistant-datavalidation-details{display:inline-block;margin-bottom:12px;width:100%}.waffle-assistant-datavalidation-detail-chip{background-color:#eeeeee;border:1px solid #e0e0e0;border-radius:11px;color:rgba(0,0,0,.87);display:inline-block;line-height:21px;margin:3px;max-width:234px;overflow:hidden;padding:0 16px;text-overflow:ellipsis;white-space:nowrap}.waffle-assistant-conditionalformat-rule-group{margin:16px}.waffle-assistant-conditionalformat-rule-holder{border:1px solid #ccc;cursor:pointer;display:block;margin-bottom:5px;padding:1px;width:258px}.waffle-assistant-conditionalformat-format-preview{border:1px solid transparent;display:inline-table;height:21px;margin:1px;overflow:hidden;text-align:center}.waffle-assistant-conditionalformat-format-preview.one-rule{max-width:254px;width:254px}.waffle-assistant-conditionalformat-format-preview.two-rules{max-width:125px;width:125px}.waffle-assistant-conditionalformat-format-preview.three-rules{max-width:82px;width:82px}.waffle-assistant-conditionalformat-format-preview-label{display:block;height:17px;line-height:17px;max-height:17px;padding:2px;text-overflow:ellipsis}.waffle-assistant-conditionalformat-format-preview.one-rule .waffle-assistant-conditionalformat-format-preview-label{max-width:250px;width:250px}.waffle-assistant-conditionalformat-format-preview.two-rules .waffle-assistant-conditionalformat-format-preview-label{max-width:121px;width:121px}.waffle-assistant-conditionalformat-format-preview.three-rules .waffle-assistant-conditionalformat-format-preview-label{max-width:78px;width:78px}.waffle-assistant-conditionalformat-description{color:#757575;display:inline-block;height:21px;line-height:21px;text-overflow:ellipsis;width:237px}.waffle-assistant-conditionalformat-edit-button.jfk-button{cursor:pointer;width:21px}.waffle-assistant-banding-recommendation{margin:16px;overflow:hidden}.waffle-assistant-banding-color-picker-container{padding-bottom:5px}.waffle-assistant-banding-color-picker-container .waffle-banding-color-picker-table{border-spacing:8px;margin-left:-8px}.waffle-assistant-banding-range-wrapper{border:1px solid transparent;color:#757575;display:inline-block;float:left;line-height:21px;text-align:left}.waffle-assistant-banding-range{font-weight:500}.waffle-assistant-formatting-edit-button{color:#5e97f5;cursor:pointer;display:inline-block;float:right;text-align:right;text-transform:uppercase}.waffle-assistant-insert-pivottable-button.jfk-button{left:-1px}.waffle-assistant-pivottable-rule-group{margin:16px}.waffle-assistant-pivottable-rule-holder{border:1px solid #ccc;cursor:pointer;display:block;margin-bottom:5px;padding:1px;width:258px}.waffle-assistant-pivottable-description{color:#757575;display:inline-block;height:21px;line-height:21px;text-overflow:ellipsis;width:237px}.waffle-assistant-zoom-button.jfk-button{left:1px;position:relative}.waffle-pivottable-preview-pane{display:flex;-ms-flex:1;-webkit-flex:1;flex:1;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;-webkit-justify-content:center;justify-content:center;max-height:80%;max-width:80%}.waffle-pivot-suggestion-preview-insert.jfk-button-focused{border:1px solid #5e97f6!important;outline:none}.waffle-pivottable-canvas{overflow:auto;background:white}.waffle-pivottable-canvas-content{padding:25px}.waffle-pivottable-preview-interpret{-webkit-align-items:left;align-items:left;color:white;max-width:500px;margin-bottom:10px;overflow:visible;overflow-wrap:break-word;padding:5px;text-overflow:ellipsis}.waffle-pivottable-lightbox{-webkit-align-items:center;align-items:center;display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;background-color:rgba(0,0,0,0.85);height:100%;left:0;position:absolute;top:0;width:100%;z-index:1000}.waffle-assistant-tables-recommendation{display:flex;margin-bottom:15px;overflow:hidden}.waffle-assistant-table-range-container{margin-right:20px;width:50%}.waffle-assistant-header-range-container{width:50%}.waffle-assistant-tables-range-wrapper{-ms-flex:1;-webkit-flex:1;flex:1;border:1px solid transparent;border-bottom:1px solid #d0d0d0;color:rgba(0,0,0,.54);font-size:11px;line-height:21px;text-align:left}.waffle-assistant-header-range-container .waffle-assistant-tables-range-wrapper{border-bottom:none}.waffle-assistant-tables-range-wrapper .waffle-range-selection-input,.waffle-assistant-tables-range-wrapper .waffle-range-selection-input-focus,.waffle-assistant-tables-range-wrapper .waffle-range-selection-input:focus{border:1px solid transparent;color:rgba(0,0,0,.87);font-size:13px;line-height:21px;padding:0 4px!important;text-align:left}.waffle-assistant-tables-range-wrapper .waffle-range-selection-container-focus{border:none;box-shadow:none;outline:none}.waffle-assistant-tables-range-wrapper .waffle-range-selection-button{cursor:default;height:26px}.waffle-assistant-tables-range-wrapper input:disabled{background-color:transparent}.waffle-assistant-table-canvas{border:1px solid #dcdcdc;display:block;margin:0 auto}.waffle-assistant-canvas-container{margin-top:10px;overflow:hidden}.waffle-assistant-tables-edit-headers-button{display:flex}.waffle-assistant-tables-edit-headers-button .docs-charts-editor-material-menu-button-caption{font-size:13px;height:24px;overflow:hidden;text-align:left;text-overflow:ellipsis;width:100%}.waffle-assistant-tables-edit-headers-button .docs-charts-editor-material-menu-button{margin:0;width:100%}.waffle-tables-popup{background:white;border-radius:2px;box-shadow:0 2px 10px rgba(0,0,0,0.3);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;margin:0 10px;outline:none;overflow:hidden;position:relative;top:45px}.waffle-tables-popup-answers-enabled{top:38px}.waffle-tables-popup-header{background-color:#eeeeee;padding:12px 15px 12px 20px}.waffle-tables-popup-title{color:rgba(0,0,0,87);font-size:16px;font-weight:500}.waffle-tables-popup-content{font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;padding:16px 16px 0}.waffle-tables-popup-buttons{display:flex;flex-direction:row-reverse;padding:8px 8px 8px 24px}.waffle-tables-popup-button{background:none;border:none;border-radius:2px;color:#4285f4;cursor:pointer;display:inline-block;height:36px;margin-left:8px;min-width:64px;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;letter-spacing:0;line-height:36px;overflow:hidden;outline:none;padding:0 8px;position:relative;text-align:center;text-decoration:none;text-transform:uppercase;vertical-align:middle}.waffle-assistant-tables-edit-range-button{border:none;float:right;font-family:'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;font-weight:500;height:100%;padding:0 14px;text-transform:uppercase;white-space:nowrap}.waffle-assistant-sidepane-tables-range{float:left;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;padding:12px 0px 12px 12px;position:relative;top:50%;transform:translateY(-50%);-ms-flex:1;-webkit-flex:1;flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.waffle-tables-bar-content{overflow:hidden;text-overflow:ellipsis}.waffle-sidebar-tables-bar{box-shadow:inset 0 -2px 2px rgba(0,0,0,.1);background:#f1f1f1;color:#5f5f5f;height:40px;overflow:hidden;vertical-align:middle;display:flex}.waffle-assistant-tables-range-wrapper .waffle-range-selection-container{border:none}.waffle-sidebar-overlay{background-color:rgba(51,51,51,0.3);bottom:0;left:0;overflow-y:auto;position:absolute;right:0;top:0;z-index:1003}.waffle-assistant-table-bar-range{font-weight:500}.waffle-assistant-table-first-header{display:inline-block;font-weight:500;max-width:95px;overflow:hidden;padding-bottom:2px;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap}.waffle-assistant-tables-scroll-pane{bottom:0;height:auto;left:0;position:absolute;right:0;top:40px}.waffle-assistant-tables-range-error{color:#c53929;font-size:11px;padding-top:2px}.waffle-assistant-tables-range-error-input{border-bottom:1px solid #c53929}.docs-action-new-badge{background-color:#c6dafc;border-radius:2px;color:#2a56c6;display:inline-block;float:right;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:11px;font-weight:500;margin-left:15px;margin-top:-4px;padding:5px 8px;text-transform:uppercase}.docs-gm .docs-action-new-badge{background-color:transparent;border-radius:4px;border:1px solid #188038;box-sizing:border-box;color:#188038;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;height:24px;line-height:24px;margin-top:-2px;padding:0px 8px;text-transform:none;vertical-align:middle}.docs-action-new-badge-submenu .docs-action-new-badge{margin-right:-27px}.docs-action-new-badge-submenu{display:inline-block;margin-bottom:-4px;margin-right:-5px;min-width:calc(100% - 40px)}.docs-action-new-badge-text-ie{float:left}.docs-action-new-badge-clearfix-ie:after{clear:both;content:"";display:table}.docs-action-updated-dot{background-color:#188038;border-radius:50%;display:inline-block;float:right;height:9px;width:9px;margin-top:5px}.docs-action-updated-dot-submenu .docs-action-updated-dot{margin-right:-15px}.docs-action-updated-dot-submenu{display:inline-block;margin-bottom:-6px;margin-right:-5px;min-width:calc(100% - 40px)}.docs-action-updated-dot-shortcut-keys .docs-action-updated-dot{margin-right:-27px}.docs-action-updated-dot-shortcut-keys{display:inline-block;margin-bottom:-4px;margin-right:12px}.apps-marquee{font:bold 13px Arial,sans-serif;height:0;left:20%;position:fixed;_position:absolute;text-align:center;top:0;width:60%;z-index:1001}.apps-marquee-item{display:inline-block;margin:0 5px 4px;color:#fff999}.apps-marquee-text{background:#fff999;border-color:#fff999;border-style:solid;border-width:0 3px;color:black;padding:2px 5px 2px}.apps-marquee-round-bottom{border-left:3px dotted transparent;border-right:3px dotted transparent;border-top:3px solid}.apps-marquee-round-top{border-left:3px dotted transparent;border-right:3px dotted transparent;border-bottom:3px solid}.apps-marquee-warning{color:#a00}.apps-marquee-warning .apps-marquee-text{background:#a00;border-color:#a00;color:white}.apps-promo{position:absolute;z-index:10000;font-size:11px}.apps-promo-arrow-container{position:relative}.apps-promo-arrow{position:absolute;background:transparent url(//ssl.gstatic.com/docs/common/promo_arrows-0.png) no-repeat}.apps-promo-close{position:relative;top:-5px;width:16px;height:16px;float:right;cursor:pointer;background:transparent url(//ssl.gstatic.com/docs/common/promo_close-0.png) no-repeat}.apps-promo-popup{background:#fff;box-shadow:0 7px 7px #666;-moz-box-shadow:0 7px 7px #666;-webkit-box-shadow:0 7px 7px #666;border:1px solid #ccc;width:275px;padding:15px;padding-right:10px}.apps-promo-header-content{font-weight:bold;font-size:14px}.apps-promo-content{padding-top:15px;font-size:13px}.apps-promo-buttons{padding-top:15px;padding-left:4px}.apps-promo-buttons a{font-size:13px;vertical-align:middle;margin-left:15px}.apps-promo-buttons-inner{display:inline}.apps-promo-buttons-inner .goog-imageless-button-content{white-space:nowrap}.apps-toast{font-size:13px;bottom:-200px;width:227px;display:block;opacity:1;position:absolute;z-index:50}.apps-toast-top{height:18px;width:227px;opacity:1;background:url("//ssl.gstatic.com/docs/common/toastBackTop-ltr-1.png")}.apps-toast-fill{height:92px;width:227px;opacity:1;background:url("//ssl.gstatic.com/docs/common/toastBackFill-0.png");z-index:51}.apps-toast-title{font-weight:bold;padding:0px 20px}.apps-toast-content{padding:0 20px 8px}html{overflow:hidden}.waffle,.grid-fixed-table{font-size:13px;table-layout:fixed;border-collapse:separate;border-style:none;border-spacing:0;width:0;cursor:default}.mimic-overlay{position:absolute;z-index:4}.mimic-overlay-canvas{display:block}.scroll-container{position:absolute;overflow:auto;border-width:0;padding:0;margin:0;z-index:1;top:0;left:0}.native-scrollbar{overflow:auto;position:absolute;border-width:0;padding:0;margin:0;top:0;left:0}.static-overlay-container{z-index:6}.grid-container{background-color:#eee;overflow:hidden;position:relative;z-index:0}.grid-table-container{overflow:hidden;z-index:3;position:relative}.ritz.grid-container table.waffle svg{display:block}.fixed-table-container{overflow:visible;z-index:4}.docs-guides-htmlguiderenderer{z-index:14}.fixed4-inner-container,.fixed4-outer-container,.grid4-inner-container,.grid4-outer-container{position:relative;vertical-align:top}.fixed4-outer-container,.grid4-outer-container{overflow:visible}.fixed4-inner-container,.grid4-inner-container{overflow:hidden}.fixed4-inner-container{z-index:4}.grid4-inner-container{z-index:3}.grid-fixed-wrapper{overflow:hidden;white-space:nowrap}.grid-scrollable-wrapper{white-space:nowrap}.uberlay{position:absolute;height:0;width:0;top:0}.overlay-container-ltr{position:absolute;height:0;width:0;top:0;left:0}.overlay-container-rtl{position:absolute;height:0;width:0;top:0;right:0}.focused-overlay-container{position:absolute;overflow:hidden;pointer-events:none}.grid-vertical-scroll{width:20px}.grid-horizontal-scroll{height:20px;float:right}.header-bg{background-color:#e8eef7}.waffle-measurement-table{position:absolute;width:0;height:0;overflow:hidden}.cell-input{width:100%;height:100%;margin:0;outline:none;cursor:text;-webkit-user-modify:read-write-plaintext-only;white-space:pre-wrap;-webkit-transform:translateZ(0);background-color:white}.waffle-formula-preview-decorator{background:white;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;box-shadow:0 1px 2px rgba(0,0,0,0.5);color:#3266d5;font-family:Inconsolata,monospace,arial,sans,sans-serif;font-size:13px;line-height:17px;padding:3px 2px 3px 7px}.waffle-formula-preview-decorator.waffle-formula-preview-equals-aligned::before,.waffle-formula-preview-decorator.waffle-formula-preview-partial::before{background-color:white;bottom:-4.5px;box-shadow:2px 2px 2px rgba(0,0,0,0.2);content:'\0000a0';display:block;margin-left:-5px;height:10px;position:absolute;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg);width:10px}.waffle-formula-preview-decorator.waffle-formula-preview-partial::before{left:50%}.waffle-formula-preview-result{display:inline-block;max-width:280px;overflow:hidden;text-overflow:ellipsis;vertical-align:top}.waffle-formula-preview-button{display:inline-block;margin:-2px;opacity:.35;-webkit-transform:scale(.6,.6);-moz-transform:scale(.6,.6);-ms-transform:scale(.6,.6);-o-transform:scale(.6,.6);transform:scale(.6,.6)}.waffle-formula-preview-button:hover{opacity:.7}.selection{position:absolute;opacity:0.20;z-index:5}.input-box{position:absolute;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;font-style:normal;font-variant:normal;font-weight:400;text-align:left;top:-10000px;max-height:9900px;max-width:9900px;border:2px #5292f7 solid;padding:0 2px;margin:0;z-index:15;resize:none;overflow:auto;white-space:pre-wrap;outline:none;box-shadow:0 2px 5px rgba(0,0,0,0.4);word-wrap:break-word}.docs-gm .input-box{border-color:#1a73e8;box-shadow:0 2px 6px 2px rgba(60,64,67,.15)}.input-box-disable-box-shadow{box-shadow:none}.IE .input-box{padding-top:1px}.disabled-input{-webkit-user-modify:read-only;color:#777}.text-sizer,.input-capturer{position:absolute;top:-4000px}.range-border{position:absolute;border-width:0;border-style:solid;padding:0;_overflow:hidden}.border-opacity{filter:alpha(opacity=30);opacity:0.3}.cell-border{line-height:1px}.active-cell-border{border-color:#4285f4;line-height:1px;z-index:7}.docs-gm .active-cell-border{border-color:#1a73e8}.selection-border{border-color:#4285f4;line-height:0;z-index:7}.docs-gm .selection-border{border-color:#1a73e8}.selection-border-cover{position:absolute;z-index:7}.selection-border-dragging{border-style:dashed;border-color:#4285f4;line-height:0;z-index:7}.docs-gm .selection-border-dragging{border-color:#1a73e8}.waffle-clipboard-border{border-color:#4285f4;border-style:dashed;line-height:0}.docs-gm .waffle-clipboard-border{border-color:#1a73e8}.autofill-border{border-color:gray;border-style:dashed;line-height:0}.array-border{border-color:#1a73e8;border-style:solid;line-height:0}.autofill-handle{position:absolute;background-color:#4285f4;border:1px solid white;width:6px;height:6px;_overflow:hidden;z-index:8;margin-top:1px}.docs-gm .autofill-handle{background-color:#1a73e8}.autofill-handle-rtl{border-width:1px 1px 0 0}.autofill-handle-ltr{border-width:1px 0 0 1px}.autofill-cover{position:absolute;cursor:crosshair;width:8px;height:8px;z-index:9}.postpaste-parent{background:#f5f5f5;border:1px solid #d9d9d9;box-shadow:inset 0 1px 0 0 #fff;background-color:#f5f5f5;background-image:-webkit-linear-gradient(top,#f5f5f5,#eee);background-image:-moz-linear-gradient(top,#f5f5f5,#eee);background-image:-ms-linear-gradient(top,#f5f5f5,#eee);background-image:-o-linear-gradient(top,#f5f5f5,#eee);background-image:linear-gradient(top,#f5f5f5,#eee);position:absolute;z-index:8}.docs-gm .postpaste-parent{background:#fff;border:none;box-shadow:0 1px 3px 1px rgba(60,64,67,.15);border-radius:4px}.goog-toolbar-menu-button.postpaste-container{margin:0;min-width:0px;border-color:transparent!important}.docs-gm .goog-toolbar-menu-button.postpaste-container{border:none!important;height:100%;width:100%}.docs-gm .postpaste-container.goog-toolbar-menu-button-open.goog-toolbar-menu-button-hover{background:#ceead6}.goog-toolbar-menu-button-focused.postpaste-container{border-color:#c6c6c6!important}.goog-toolbar-menu-button-open.postpaste-container{border-color:#c6c6c6!important}.goog-menuitem.postpaste-menu-item{padding-right:26px;padding-left:15px}.post-paste-menu{margin:12px 3px 0 0}.goog-toolbar-menu-button-dropdown.postpaste-arrow{right:0;margin-right:-3px;margin-left:-15px}.docs-gm .postpaste-clipboard-icon{margin-left:8px;margin-top:4px}.docs-gm .overlay-container-rtl .postpaste-clipboard-icon{margin-right:26px}.docs-gm .goog-toolbar-menu-button-dropdown.postpaste-arrow{left:0;margin-left:32px;margin-top:4px;position:absolute}.docs-gm .overlay-container-rtl .goog-toolbar-menu-button-dropdown.postpaste-arrow{margin-right:10px}.waffle-texttocolumns-overlay{position:absolute;z-index:8}.waffle-dbsource-container{position:absolute;z-index:8}.waffle-texttocolumns-wrapper{background:#f5f5f5;border:1px solid #d9d9d9;padding:2px}.waffle-texttocolumns-separator-label{font-size:11px;font-weight:500;margin:2px;top:0}.waffle-texttocolumns-custom-input{position:absolute;top:3px;width:120px}.waffle-blameview{background:#fff;border-radius:8px;box-shadow:0 2px 6px 2px rgba(60,64,67,.15);display:flex;outline:none;overflow:hidden;position:absolute;width:240px}.waffle-blameview-cell-ref{font-family:Inconsolata,monospace,arial,sans,sans-serif;font-style:normal}.waffle-blameview-formula-text{font-family:Inconsolata,monospace,arial,sans,sans-serif;font-style:normal}a.waffle-blameview-image-link{color:#1a73e8;font-style:italic;text-decoration:underline}.freezebar .freezebar-drop,.freezebar .freezebar-handle-bar,.resizer,.resizer-hover .resizer-handle-bar,.resizer-drop,.rowcol-dragger .rowcol-dragger-handle,.rowcol-dragger .rowcol-dragger-handle-bar,.rowcol-dragger .rowcol-dragger-drop{display:none;outline:0}.freezebar-active .freezebar-drop,.freezebar-active .freezebar-handle-bar,.resizer-hover,.resizer-active,.resizer-active .resizer-handle-bar,.resizer-active .resizer-drop,.rowcol-dragger-hover .rowcol-dragger-handle,.rowcol-dragger-active .rowcol-dragger-handle,.rowcol-dragger-active .rowcol-dragger-handle-bar,.rowcol-dragger-active .rowcol-dragger-drop{display:block}.resizer{z-index:7;position:absolute}.resizer-handle{position:relative;border-style:none}.resizer-horizontal-handle{height:5px;cursor:n-resize;background:#4d90fe}.resizer-vertical-handle{width:5px;cursor:e-resize;background:#4d90fe}.resizer-rtl .resizer-vertical-handle{cursor:w-resize}.resizer-horizontal-handle-bar{position:absolute;height:1px;background-color:#4d90fe;top:2px;overflow:hidden}.resizer-vertical-handle-bar{position:absolute;width:1px;background-color:#4d90fe;left:2px;border:0;padding:0;overflow:hidden}.freezebar-handle,.freezebar-drop{position:absolute;z-index:6}.freezebar-handle-bar,.freezebar-drop-bar{position:relative;z-index:7}.freezebar-vertical-handle-bar{width:2px;background:#dbe5f7;border-color:#a5c6fe;border-style:solid;border-width:0 1px;opacity:0.45;filter:alpha(opacity=45)}.freezebar-horizontal-handle-bar{height:2px;background:#dbe5f7;border-color:#a5c6fe;border-style:solid;border-width:1px 0;opacity:0.45;filter:alpha(opacity=45)}.freezebar-vertical-handle{width:4px;background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAIAAABSh8vJAAAAEElEQVQYV2PYgwQYRjnEcgDquNOBEawK+wAAAABJRU5ErkJggg==") no-repeat}.overlay-container-rtl .freezebar-vertical-handle{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAIAAABSh8vJAAAAEElEQVQYV2PYgwQYRjnEcgDquNOBEawK+wAAAABJRU5ErkJggg==") no-repeat;background-position:top right}.freezebar-vertical-handle-invisible{width:4px}.freezebar-active .freezebar-vertical-handle{width:5px}.freezebar-hover .freezebar-horizontal-handle{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC4AAAAECAIAAAB+7JowAAAAFUlEQVQY02NYeuzfIEEMo04Z3E4BAHKzu4gtAIWGAAAAAElFTkSuQmCC") no-repeat;z-index:7}.freezebar-hover .freezebar-vertical-handle{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAIAAABSh8vJAAAAE0lEQVQYV2NYeuwfHDGMcojlAADmjOdhimOdggAAAABJRU5ErkJggg==") no-repeat;z-index:7}.overlay-container-rtl .freezebar-hover .freezebar-horizontal-handle{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC4AAAAECAIAAAB+7JowAAAAFUlEQVQY02NYeuzfIEEMo04Z3E4BAHKzu4gtAIWGAAAAAElFTkSuQmCC") no-repeat;background-position:top right}.overlay-container-rtl .freezebar-hover .freezebar-vertical-handle{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAIAAABSh8vJAAAAE0lEQVQYV2NYeuwfHDGMcojlAADmjOdhimOdggAAAABJRU5ErkJggg==") no-repeat;background-position:top right}.freezebar-horizontal-handle{height:4px;background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC4AAAAECAIAAAB+7JowAAAAEklEQVQY02PYM2gAw6hTBrdTAFI0lXC16jX6AAAAAElFTkSuQmCC") no-repeat}.overlay-container-rtl .freezebar-horizontal-handle{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC4AAAAECAIAAAB+7JowAAAAEklEQVQY02PYM2gAw6hTBrdTAFI0lXC16jX6AAAAAElFTkSuQmCC") no-repeat;background-position:top right}.overlay-container-rtl .freezebar-horizontal-drop{background-position:right}.freezebar-horizontal-handle-invisible{height:4px}.freezebar-active .freezebar-horizontal-handle{height:5px}.freezebar-origin-rtl,.freezebar-origin-ltr{height:23px;width:45px;position:absolute;top:0px;border:1px #ccc solid}.freezebar-origin-ltr{background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -205px 0;left:0px;border-width:0 1px 1px 0}.freezebar-origin-rtl{background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -305px -62px;right:0px;border-width:0 0 1px 1px}.freezebar-vertical-drop{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAIAAABSh8vJAAAAEklEQVQYV2NInfsHjhhGOcRyAFpkv0GBZT1JAAAAAElFTkSuQmCC") no-repeat;width:4px}.freezebar-horizontal-drop{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC4AAAAECAIAAAB+7JowAAAAFUlEQVQoz2NInftnkCCGUacMbqcAAL1HbqBCYk6sAAAAAElFTkSuQmCC") no-repeat;height:4px}.freezebar-vertical-drop-bar{width:4px;background-color:#afbbd1;border-width:2px 1px 2px 2px}.freezebar-horizontal-drop-bar{height:4px;overflow:hidden;background-color:#afbbd1;border-width:2px 2px 1px 2px}.waffle-incelldropdownselect-menu-vertical{overflow-y:auto}.rowcol-dragger{position:absolute;z-index:6}.rowcol-dragger-drop-bar,.rowcol-dragger-handle-bar{z-index:6;position:absolute;background-color:#777;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.rowcol-dragger-handle-bar{border:2px solid #36c;opacity:0.20;filter:alpha(opacity=20)}.rowcol-dragger-horizontal-handle{width:36px}.rowcol-dragger-horizontal-drop-bar{height:2px}.rowcol-dragger-vertical-handle{height:23px}.rowcol-dragger-vertical-drop-bar{width:2px}.rowcol-dragger-handle,.rowcol-dragger-drop{position:absolute;z-index:6}.jfk-freestanding-menu-button.waffle-kennedy-column-menu-button{background:url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNyIgaGVpZ2h0PSI0IiAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBmaWxsPSIjQkRCREJEIiBkPSJNMCAwTDcgMCBMMy41IDR6Ii8+PC9zdmc+") center no-repeat;background-color:#f8f8f8;z-index:7}.jfk-freestanding-menu-button-hover.waffle-kennedy-column-menu-button{background:url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNyIgaGVpZ2h0PSI0IiAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBmaWxsPSIjNjE2MTYxIiBkPSJNMCAwTDcgMCBMMy41IDR6Ii8+PC9zdmc+") center no-repeat;background-color:#f8f8f8}.jfk-freestanding-menu-button-hover.waffle-column-type-button{box-shadow:0px -1px 5px rgba(128,134,139,0.09),0px 3px 5px rgba(128,134,139,0.06),0px 1px 2px rgba(60,64,67,0.3),0px 1px 3px rgba(60,64,67,0.15)}.jfk-freestanding-menu-button-focused.waffle-column-type-button{background:#ffffff;box-shadow:0px -1px 5px rgba(128,134,139,0.09),0px 3px 5px rgba(128,134,139,0.06),0px 1px 2px rgba(60,64,67,0.3),0px 1px 3px rgba(60,64,67,0.15);opacity:0.32}.goog-flat-menu-button-hover.waffle-add-column-type-button{box-shadow:0px -1px 5px rgba(128,134,139,0.09),0px 3px 5px rgba(128,134,139,0.06),0px 1px 2px rgba(60,64,67,0.3),0px 1px 3px rgba(60,64,67,0.15)}.goog-flat-menu-button-focused.waffle-add-column-type-button{opacity:0.67}a.in-cell-link{text-decoration:underline;cursor:default}.docs-bubble-link.docs-bubble-link-visited{color:#673ab7!important}.docs-gm .docs-material .docs-link-insertlinkbubble .docs-icon-grid,.docs-gm .docs-material .docs-link-insertlinkbubble .docs-icon-grid:before{content:url(//ssl.gstatic.com/docs/common/material_common_sprite146_green.svg)}.annotation-bubble{position:absolute;z-index:14;margin:0 0 0 -2px;padding:0;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;max-width:200px}.annotation-editable{background-color:white;border:none;border-left:3px solid #222;box-shadow:0px 3px 6px rgba(0,0,0,0.2);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;margin:0;padding:6px;width:100%}.docs-gm .annotation-editable{border:1px solid rgba(60,64,67,.15);border-radius:4px;box-shadow:0 2px 6px 2px rgba(60,64,67,.15);color:#5f6368;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:12px;font-weight:500;outline:none;padding:8px}.annotation-attribution{background-color:#fff;padding:13px 10px;font-size:13px;box-shadow:0px 3px 6px rgba(0,0,0,0.2)}.annotation-attribution-invalid{border-left:5px solid #ff5621}.annotation-attribution-help{border-left:5px solid #f29400}.annotation-attribution-error{border-left:5px solid #c53929}.annotation-importrange{background-color:#ffffff;border:1px solid #ff0000;box-shadow:2px 2px 6px #888;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;margin:0;overflow-x:hidden;text-align:left;vertical-align:top;width:100%}.annotation-attribution-rebranded strong{display:block;font-size:13px;font-weight:500;margin-bottom:6px}.annotation-attribution-error strong{color:#c53929}.annotation-attribution-help strong{color:#f29400}.annotation-attribution-invalid strong{color:#ff5621}.annotation-attribution-rebranded span{display:block;line-height:1.25em}.annotation-importrange-error-msg-box{margin-bottom:10px;text-align:left}.waffle-footer-container{height:4000px;position:relative;z-index:3}.waffle-background-container{background-color:#eee;width:50000px;height:0px;position:absolute;top:0;z-index:-1}.addRowsWidget-ltr{color:#222;float:left;padding:6px 0 0 45px;direction:ltr}.addRowsWidget-rtl{color:#222;float:right;padding:6px 45px 0 0;direction:ltr}div.addRowsButton-ltr{margin-top:0;margin-right:2px;vertical-align:middle}div.addRowsButton-rtl{margin-top:0;margin-left:2px;vertical-align:middle}div.addRowsText{color:#000000;padding-top:5px;vertical-align:middle}.addRowsError-ltr{color:#c00;float:left;padding:13px 0 0 10px}.addRowsError-rtl{color:#c00;float:right;padding:13px 10px 0 0}.addRowsInput{margin:0 4px 0 4px;vertical-align:middle}.waffle-formula-help-popup P{margin-top:0}.waffle-formula-help-popup a:visited{color:#15c}.waffle-formula-help-popup{position:absolute;top:0px;left:0px;-moz-border-radius:2px 2px 2px 2px;border-radius:2px 2px 2px 2px;-moz-box-shadow:0 2px 4px rgba(0,0,0,0.2);-webkit-box-shadow:0 2px 4px rgba(0,0,0,0.2);box-shadow:0 2px 4px rgba(0,0,0,0.2);background-color:#ffffff;border:1px solid #cccccc;padding:16px;width:400px;margin-left:-1px;margin-top:-1px;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;font-weight:400;font-style:normal;color:#333333;white-space:normal}.waffle-input-box-decorator{border-style:none;border-width:0px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;font-weight:500;overflow:visible;position:absolute;white-space:nowrap;z-index:15}.waffle-input-box-locator{background-color:#4589eb;border-radius:1px;box-shadow:0px 1px 2px rgba(0,0,0,0.5);color:white;font-size:12px;line-height:14px;padding:6px 7px 4px 7px}.waffle-input-box-formula-help-decorator{background:#6da1ff;border:2px solid #5790f6;border-right:none;color:white;-webkit-border-radius:2px 0 0 2px;-moz-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px;cursor:pointer;font-size:11px;height:20px;line-height:13px;padding:2px 2px}.waffle-formula-bar-formula-help-decorator{-webkit-border-radius:2px 2px 2px 2px;-moz-border-radius:2px 2px 2px 2px;border-radius:2px 2px 2px 2px;border-right:2px solid #5790f6;height:18px;line-height:11px}.waffle-collab-presence{z-index:7;position:absolute;padding:0px 1px 0px 2px;background-color:#65ad89;color:white;font-size:10px;font-weight:500;-moz-box-sizing:border-box}.docs-gm .waffle-collab-presence{border-radius:2px;box-sizing:border-box;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:12px;font-weight:500;line-height:12px;padding:1px 2px}#waffle-loading-screen{background-color:#fff;width:100%;font-size:15px;display:none}.waffle-loading-rows{width:100%;font-size:12px;padding:5px 30px}.waffle-loading-rows-spinner{vertical-align:text-bottom;width:16px;height:16px;margin:0px 10px}.waffle-hyperlink-icon{display:inline-block;position:absolute}.waffle-hyperlink-icon-visited:after{background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -565px -12px;cursor:pointer;width:12px;height:12px;display:block;float:right;content:"";margin-top:4px;margin-bottom:-1px}.waffle-hyperlink-icon:after{background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -70px -24px;cursor:pointer;width:12px;height:12px;display:block;float:right;content:"";margin-top:4px;margin-bottom:-1px}.waffle-hyperlink-tooltip:hover{background:#fff;box-shadow:0px 0px 2px 0px rgba(0,0,0,0.20),0px 2px 3px 0px rgba(0,0,0,0.30)}.waffle-hyperlink-tooltip{background:#fcfcfc;box-shadow:0px 0px 2px 0px rgba(0,0,0,0.15),0px 1px 2px 0px rgba(0,0,0,0.40);border-radius:1px;display:inline-block;padding:5px 18px 5px 7px;position:absolute}.waffle-hyperlink-tooltip-link{font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;color:#15c;line-height:19px;padding:5px 7px 5px 0;text-decoration:none;white-space:nowrap}a.waffle-hyperlink-tooltip-link{color:#15c}.waffle-hyperlink-tooltip-link:hover{text-decoration:none}.waffle-multilink-tooltip{position:absolute}.waffle-insert-link-selection-overlay{background-color:rgba(140,196,116,0.25);overflow:hidden;position:absolute;z-index:16}.waffle-column-menu-button{background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -168px -43px;cursor:pointer;list-style:none;width:12px;height:12px;outline:none;position:absolute;z-index:7}.waffle-column-menu-button-hover,.waffle-column-menu-button-checked,.waffle-column-menu-button-focused{background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -83px -34px}.waffle-column-menu-button-disabled{cursor:default;filter:alpha(opacity=30);opacity:0.3}.waffle-column-type-button{background:none;border-radius:2px;cursor:pointer;height:18px;list-style:none;outline:none;position:absolute;width:18px;z-index:7}.waffle-add-column-type-button{background-color:#dadce0;border-radius:2px;cursor:pointer;height:18px;outline:none;width:18px;z-index:7}.waffle-add-column-type-button .docs-icon{left:-1px;top:-1px}.waffle-add-column-type-button .docs-icon-img:before{content:url(//ssl.gstatic.com/docs/common/material_common_sprite146.svg)}.waffle-calculated-column-button{background:#80868b;border:none;cursor:pointer;list-style:none;opacity:0;outline:none;position:absolute;z-index:7}.waffle-calculated-column-button:hover{opacity:1}.waffle-disclaimer{font-size:11px;background-color:#ececec;color:#656565;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;height:20px}#waffle-disclaimer-content{border-bottom:1px solid #c0c0c0;border-left:0 none;border-right:0 none;padding-left:47px}.waffle-disclaimer-link{color:#77c;padding-left:3px}.apps-toast{z-index:16}.apps-toast-fill{z-index:17}.trix-offscreen{position:absolute;left:-10000px;top:-10000px}#promo-target{display:inline}#waffle-grid-container{margin-right:auto}#docs-editor-container{touch-action:none;-ms-scroll-chaining:none}.border-style-menu-item-container{background-position:left 15px center;padding-left:30px!important;padding-right:40px!important}.border-style-menu-item{height:12px;min-height:12px!important}.border-style-menu-item .border-style-menu-icon{position:relative;left:15px;top:-4px}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.border-style-menu-item .border-style-menu-icon{position:relative;left:15.5px;top:-4.78px}}@media screen and (-moz-windows-theme){.border-style-menu-item .border-style-menu-icon{position:relative;left:15px;top:-4.5px}}#t-border-palette .goog-palette-cell-selected{background-color:#e1e1e1}#t-border-palette .goog-palette-cell{padding:2px}#t-border-palette .goog-palette-table{border-right:1px solid #eee}span.jfk-checkbox{margin-bottom:1px}.match-paren{background-color:#e5e5e5;font-weight:500}.match-string{background-color:#eee}.error-code,.boolean{color:#15c}.active-range{box-shadow:0 0 6px 2px #333;opacity:0.1;pointer-events:none}.inactive{opacity:0.5}.formula-error{color:#dd4b39}.argument-error,.formula-eval-error{color:#dd4b39;text-decoration:underline}.number{color:#15c}.string{color:green}.default-formula-text-color{color:black}.insert-range-indicator{background:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4IiBoZWlnaHQ9IjMiIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNjY2MiPjxwYXRoIGQ9Ik0wLjUgMEwwLjUgM00wIDIuNUw4IDIuNU03LjUgM0w3LjUgMCIvPjwvc3ZnPg==") bottom no-repeat;background-size:contain;width:8px;margin-left:2px;cursor:default}.insert-range-indicator:after{content:" "}.formula-replace-text{text-decoration:underline}.trix-tooltip-link{color:#4285f4}.trix-tooltip-link:hover{text-decoration:underline}.formula-content{font-family:Inconsolata,monospace,arial,sans,sans-serif;font-size:14px}#apps-debug-tracers{display:none}.jfk-bubble.waffle-error-bubble{background-color:#fff3f2;border:1px solid #db4437;border-radius:1px;box-shadow:0 1px 2px 0 rgba(0,0,0,0.1);color:#c5221f;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:12px;font-weight:500;letter-spacing:-0.1px;line-height:16px;max-width:200px;padding:8px;transition:opacity 200ms ease-in}.waffle-function-localization-promo{background-color:#fafafa;bottom:100px;box-shadow:1px 2px 5px rgba(0,0,0,0.28);color:#616161;height:180px;padding:20px;position:absolute;right:25px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;width:350px;z-index:1000}.waffle-function-localization-promo-title{font-size:18px;font-weight:500;margin:5px 0 20px 0}.waffle-function-localization-promo-body{font-size:13px;line-height:22px}.waffle-function-localization-promo-button-bar{bottom:25px;right:25px;line-height:22px;position:absolute}.jfk-button.waffle-function-localization-promo-no-button{color:#0f9d58;cursor:pointer;margin-right:10px;padding:5px}.jfk-button.waffle-function-localization-promo-yes-button{background-color:#0f9d58;color:#fafafa;cursor:pointer;padding:5px}.apps-ui-material-slide-toggle-container-checked .apps-ui-material-slide-toggle-track{background-color:#ceead6;opacity:1}.apps-ui-material-slide-toggle-container-checked .apps-ui-material-slide-toggle-thumb{background-color:#188038}.apps-actiondatawidget-shortcut-desc{width:278px}.apps-actiondatawidget-shortcut-key{line-height:17px;width:251px;padding-left:24px}.apps-actiondatawidget-content{width:100%}::-ms-clear,::-ms-reveal{display:none}.waffle-rich-text-link,a.waffle-rich-text-link{color:#15c;text-decoration:underline}.waffle-rich-text-link-popup{background-color:#fff;border:1px solid;border-color:#bbb #bbb #a8a8a8;padding:12px 20px;position:absolute;white-space:nowrap;z-index:15}.waffle-dataconnectormenu-note{color:rgba(0,0,0,0.38);font-size:11px;padding-left:8px}.docs-gm .waffle-cellinput-range-picker,.waffle-cellinput-range-picker{width:100px;font-size:14px;height:28px;border:2px solid #d9d9d9;margin:5px 5px 0 0}.docs-gm .waffle-cellinput-range-picker:focus{border:2px solid #d9d9d9;padding:1px 8px}.docs-charts-editor{margin-right:10px}.docs-charts-editor .docs-charts-editor-toggle-tabs{position:absolute;top:0;width:100%}.docs-charts-editor .docs-charts-editor-scroll-pane{bottom:0;position:absolute;top:43px;overflow:auto;width:100%}.docs-gm .waffle-gm-sidebar .docs-charts-editor .docs-charts-editor-scroll-pane .docs-charts-editor-customize-tab{background-color:#f8f9fa;bottom:0;position:absolute;top:0;width:100%}.docs-charts-editor-control-label{color:#616161;font-size:11px;line-height:16px;margin-right:2px}.docs-gm .waffle-gm-sidebar .docs-charts-editor-control-label{color:#5f6368;display:block;font-size:12px;line-height:15px;margin-bottom:8px}.docs-charts-editor-row,.docs-charts-editor-tall-row{font-size:0}.docs-charts-editor-row>.docs-charts-editor-col{font-size:13px;vertical-align:top}.docs-charts-editor-row>.docs-charts-editor-col>div{margin:10px 0 10px 0}.docs-charts-editor-checkboxes-container{margin:10px 0}.docs-charts-editor-checkboxes-container-no-bottom-margin{margin:10px 0 0}.docs-charts-editor-checkboxes-container .docs-material-gm-labeled-checkbox{padding:4px 0}.docs-charts-editor-row>.docs-charts-editor-col>div>.docs-material-labeled-checkbox{margin:0}.docs-charts-editor-tall-row>.docs-charts-editor-col>div{margin:20px 0 20px 0}.docs-charts-editor-tall-row:first-child .docs-charts-editor-col>div{margin-top:10px}.docs-charts-editor-col.col-100{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:100%}.docs-charts-editor-col.col-50{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:inline-block;width:50%}.docs-charts-editor-col.col-50:first-of-type{padding-right:10px}.docs-charts-editor-col.col-50:last-of-type{padding-left:10px}.docs-charts-editor-col.col-70-left{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:inline-block;padding-right:10px;width:70%}.docs-charts-editor-col.col-30-right{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:inline-block;padding-left:10px;width:30%}.docs-charts-editor-col.col-60-left{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:inline-block;padding-right:10px;width:60%}.docs-charts-editor-col.col-40-right{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:inline-block;padding-left:10px;width:40%}.docs-charts-editor-col.col-50 .docs-material-gm-labeled-checkbox-content{max-width:80%}.docs-charts-editor-col.col-50>div>.docs-material-labeled-checkbox{margin-top:24px}.docs-charts-editor-scroll-pane.docs-charts-editor-scroll-pane-custom-sidebar::-webkit-scrollbar{width:12px}.docs-charts-editor-scroll-pane.docs-charts-editor-scroll-pane-custom-sidebar::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,0.2);background-clip:padding-box;border:solid transparent;border-width:1px 2px 1px 2px;box-shadow:none;min-height:28px;padding:1px}.docs-charts-editor-scroll-pane.docs-charts-editor-scroll-pane-custom-sidebar::-webkit-scrollbar-thumb:hover{box-shadow:none}.docs-charts-editor-scroll-pane.docs-charts-editor-scroll-pane-custom-sidebar::-webkit-scrollbar-track{background-clip:border-box;background-color:#f5f5f5;border:solid #e0e0e0;border-width:1px;box-shadow:none}.docs-charts-editor-scroll-pane.docs-charts-editor-scroll-pane-custom-sidebar::-webkit-scrollbar-track:hover{background-color:#f5f5f5;background-clip:border-box;box-shadow:none;border:solid #e0e0e0;border-width:1px}.docs-charts-editor-bundle.docs-charts-editor-parent-bundle{border-bottom:1px solid rgba(0,0,0,0.12)}.docs-gm .waffle-gm-sidebar .docs-charts-editor-customize-tab .docs-charts-editor-bundle.docs-charts-editor-parent-bundle{border-bottom:2px solid #f8f9fa}.docs-gm .waffle-gm-sidebar .docs-charts-editor-customize-tab .docs-charts-editor-bundle.docs-charts-editor-parent-bundle>div{border:2px solid #f8f9fa}.docs-charts-editor-bundle.docs-charts-editor-parent-bundle.docs-charts-editor-open-bundle{padding:8px 16px 6px 16px}.docs-charts-editor-selector-bundle-selector-wrapper{padding:0 16px}.docs-gm .waffle-gm-sidebar .docs-charts-editor-selector-bundle-selector-wrapper{padding:8px 16px}.docs-charts-editor-selector-bundle-selector-label{color:rgba(0,0,0,0.54);display:inline-block;line-height:26px;vertical-align:top}.docs-charts-editor-selector-bundle-selector{display:inline-block;padding-left:12px;max-width:160px}.docs-gm .waffle-gm-sidebar .docs-charts-editor-selector-bundle-selector{max-width:100%;padding-left:0;width:100%}.docs-charts-editor-selector-bundle-selector .docs-material-labeled-select-outer-box{border:none;margin-bottom:0px}.docs-charts-editor-selector-bundle-selector .docs-material-gm-labeled-select-outer-box{box-shadow:0 1px 3px 1px rgba(60,64,67,.15);border:none;margin-bottom:0px}.docs-charts-editor-selector-bundle-selector .docs-material-labeled-select-caption{font-weight:500}.docs-charts-editor-selector-bundle-selector .docs-material-gm-labeled-select-caption{color:#188038;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;letter-spacing:.25px}.docs-charts-editor-selector-bundle-selector .docs-material-labeled-select-content{display:none}.docs-charts-editor-selector-bundle-selector .docs-material-gm-labeled-select-content{display:none}.docs-charts-editor-selector-bundle-selector .docs-material-gm-labeled-select-focused .docs-material-gm-labeled-select-outer-box,.docs-charts-editor-selector-bundle-selector .docs-material-gm-labeled-select-open .docs-material-gm-labeled-select-outer-box{background-color:#f1f3f4}.docs-charts-editor-selector-bundle-selector .docs-material-gm-labeled-select-hover .docs-material-gm-labeled-select-outer-box{background-color:#f8f9fa}.docs-charts-editor-selector-bundle{background:#fafafa;padding:4px 16px 6px 16px}.docs-gm .waffle-gm-sidebar .docs-charts-editor-selector-bundle{background:transparent}.docs-charts-editor-selector-bundle .docs-charts-editor-selector-bundle-header{color:#616161;font-size:13px;margin-bottom:-4px;padding-top:8px}.docs-gm .waffle-gm-sidebar .docs-charts-editor-selector-bundle .docs-charts-editor-selector-bundle-header{color:#3c4043;font-size:14px;font-weight:500;letter-spacing:.2px;line-height:24px;padding:10px 0}.docs-charts-editor-bundle-container{padding:0 16px 6px}.docs-charts-editor-basic-bundle .docs-charts-editor-bundle.docs-charts-editor-parent-bundle{border-bottom:none}.docs-charts-editor-basic-bundle .docs-charts-editor-bundle.docs-charts-editor-parent-bundle.docs-charts-editor-open-bundle{padding-bottom:0px}.docs-charts-editor-basic-bundle .docs-charts-editor-row,.docs-charts-editor-data-picker-bundle .docs-charts-editor-row{overflow:hidden}.docs-charts-editor-data-picker-bundle .docs-charts-editor-bundle.docs-charts-editor-parent-bundle{border-bottom:none;padding-top:0}.docs-charts-editor-alert-bundle{color:rgba(0,0,0,0.54);line-height:22px;text-align:center}.docs-charts-editor-alert-bundle .docs-charts-editor-bundle.docs-charts-editor-parent-bundle{-ms-flex-align:center;-moz-box-align:center;-webkit-box-align:center;box-align:center;-webkit-align-items:center;align-items:center;border-bottom:none;bottom:0;display:flex;left:0;position:absolute;right:0;top:0}.docs-charts-editor-alert-bundle .docs-charts-editor-bundle.docs-charts-editor-parent-bundle>div{width:100%}.docs-charts-editor-alert-bundle-icon{background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSIjRTBFMEUwIj48cGF0aCBkPSJNOSAxN0g3di03aDJ2N3ptNCAwaC0yVjdoMnYxMHptNCAwaC0ydi00aDJ2NHptMi41IDJoLTE1VjVoMTV2MTR6bTAtMTZoLTE1Yy0xIDAtMiAxLTIgMnYxNGMwIDEgMSAyIDIgMmgxNWMxIDAgMi0xIDItMlY1YzAtMS0xLTItMi0yeiIvPjxwYXRoIGZpbGw9Im5vbmUiIGQ9Ik0wIDBoMjR2MjRIMHoiLz48L3N2Zz4=");background-position:center;background-repeat:no-repeat;background-size:100px 100px;height:100px;width:100%}.docs-charts-editor-pill-remove-button{transition:background-color 0.2s ease;background:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+ICA8cGF0aCBmaWxsPSIjZjBmMGYwIiBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPjwvc3ZnPg==");background-color:#bfbfbf;border-radius:16px;bottom:2px;height:16px;margin:8px;position:absolute;width:16px}.docs-gm .waffle-gm-sidebar .docs-charts-editor-pill-remove-button{background:none;border:none;float:right;position:relative;width:auto}.docs-charts-editor-pill-remove-button.jfk-button-hover{background-color:#aaa}.docs-charts-editor-pill{background-color:#fff;border-radius:6px;box-shadow:0 0 2px 0 #bdbdbd;padding-left:10px;padding-right:10px}.docs-gm .waffle-gm-sidebar .docs-charts-editor-pill{border-radius:0;box-shadow:none;padding-left:0;padding-right:0}.docs-charts-editor-pill-remove{position:relative;width:16px}.docs-gm .waffle-gm-sidebar .docs-charts-editor-pill-remove{width:100%}.docs-charts-editor-pill-flex{display:flex}.docs-charts-editor-pill-flex-col{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-ms-flex:50%;-webkit-flex:50%;flex:50%;display:inline-block;padding-left:10px}.docs-charts-editor-pill-flex-col:first-of-type{padding-left:0px}.docs-charts-editor-pill-fixed-col{padding-left:10px}.docs-charts-editor-pill-fixed-col:first-of-type{padding-left:0px}.docs-charts-editor-column-names-menu-wrapper{display:none}.docs-charts-editor-column-names-menu-enabled{width:460px!important}.docs-charts-editor-column-names-menu-enabled .docs-charts-editor-toggle-tabs{border-bottom:1px solid #dadce0}.docs-charts-editor-column-names-menu-enabled .docs-charts-editor-scroll-pane{overflow-y:hidden}.docs-charts-editor-column-names-menu-enabled .docs-charts-editor-basic-tab{display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;height:100%;overflow:hidden}.docs-charts-editor-column-names-menu-enabled .docs-charts-editor-basic-tab-bundle-wrapper{border-right:1px solid #dadce0;height:100%;overflow-y:auto;width:300px}.docs-charts-editor-column-names-menu-enabled .docs-charts-editor-column-names-menu-wrapper{display:block;height:100%;overflow-y:auto;width:160px}.docs-charts-editor-column-names-menu-enabled .docs-charts-editor-customize-tab{overflow-y:auto}.docs-gm .waffle-gm-sidebar .docs-charts-editor-customize-tab hr{background-color:#dadce0;border:0;height:1px;margin:17px -16px}.docs-charts-editor-charttype-select-icon{float:left}.docs-charts-editor-charttype-select-icon>svg{height:18px;width:18px;margin-right:10px;vertical-align:sub}.docs-material-select-disabled .docs-charts-editor-charttype-select-icon{opacity:0.12}.docs-charts-editor-charttype-new{background-color:#000;border:1px solid #fff;border-radius:1px;bottom:1px;color:#fff;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:10px;font-weight:500;height:16px;line-height:17px;opacity:.54;padding:0 4px;position:absolute;right:1px;text-transform:uppercase}.docs-charts-editor-chart-type-select .docs-material-gm-select-caption{width:100%}.docs-charts-editor-charttype-menu{box-shadow:0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12),0px 2px 4px -1px rgba(0,0,0,0.2);background-color:white;margin-left:-12px;margin-top:5px;overflow-x:hidden;overflow-y:scroll;padding:10px 16px;position:absolute;width:270px;z-index:3}.docs-charts-editor-charttype-option{border:1px solid #bdbdbd;cursor:pointer;height:45px;margin:0 23px 10px 0;overflow:hidden;padding:2px;position:relative;width:67px}.docs-charts-editor-palette-label{color:rgba(0,0,0,0.87);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px}.docs-charts-editor-charttype-menu .goog-palette{display:inline-block;margin-bottom:0px;margin-top:10px}.docs-charts-editor-charttype-menu .goog-palette-cell{border:0;cursor:inherit}.docs-charts-editor-charttype-menu .goog-palette-table{border:0;margin:5px 0 0 0}.goog-palette-cell-hover .docs-charts-editor-charttype-option{border:1px solid #9e9e9e}.goog-palette-cell-selected .docs-charts-editor-charttype-option{box-shadow:0 0 0 4px #c6dafc}.docs-charts-editor-charttype-option-canvas{direction:ltr;height:45px;width:67px}.docs-charts-editor-charttype-option-gviz-org-chart{-webkit-transform:scale(0.61,0.68);-moz-transform:scale(0.61,0.68);-ms-transform:scale(0.61,0.68);-o-transform:scale(0.61,0.68);transform:scale(0.61,0.68);background:url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -1428px no-repeat}.docs-charts-editor-charttype-option-gviz-radar-chart{-webkit-transform:scale(0.60,0.60);-moz-transform:scale(0.60,0.60);-ms-transform:scale(0.60,0.60);-o-transform:scale(0.60,0.60);transform:scale(0.60,0.60);background:url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -2233px no-repeat}.docs-charts-editor-charttype-option-gviz-annotated-timeline-chart{-webkit-transform:scale(0.61,0.68);-moz-transform:scale(0.61,0.68);-ms-transform:scale(0.61,0.68);-o-transform:scale(0.61,0.68);transform:scale(0.61,0.68);background:url("//ssl.gstatic.com/charts/static/thumbs17.png") 0 -1895px no-repeat}.docs-charts-editor-charttype-option-gviz-table-chart{-webkit-transform:scale(0.61,0.68);-moz-transform:scale(0.61,0.68);-ms-transform:scale(0.61,0.68);-o-transform:scale(0.61,0.68);transform:scale(0.61,0.68);background:url("//ssl.gstatic.com/charts/static/thumbs17.png") 0 -1351px no-repeat}.docs-charts-editor-charttype-option-gviz-geo-chart{-webkit-transform:scale(0.61,0.68);-moz-transform:scale(0.61,0.68);-ms-transform:scale(0.61,0.68);-o-transform:scale(0.61,0.68);transform:scale(0.61,0.68);background:url("//ssl.gstatic.com/charts/static/thumbs17.png") 0 -2772px no-repeat}.docs-charts-editor-charttype-option-gviz-geo-chart-with-markers{-webkit-transform:scale(0.61,0.68);-moz-transform:scale(0.61,0.68);-ms-transform:scale(0.61,0.68);-o-transform:scale(0.61,0.68);transform:scale(0.61,0.68);background:url("//ssl.gstatic.com/charts/static/thumbs17.png") 0 -612px no-repeat}.docs-charts-editor-charttype-option-disabled-chart{opacity:0.25}.docs-charts-editor-charttype-option-gviz-org-chart,.docs-charts-editor-charttype-option-gviz-radar-chart,.docs-charts-editor-charttype-option-gviz-annotated-timeline-chart,.docs-charts-editor-charttype-option-gviz-table-chart,.docs-charts-editor-charttype-option-gviz-geo-chart,.docs-charts-editor-charttype-option-gviz-geo-chart-with-markers{-webkit-transform-origin:0 0;-moz-transform-origin:0 0;-ms-transform-origin:0 0;-o-transform-origin:0 0;transform-origin:0 0;float:left;height:67px;width:110px}.docs-charts-editor-gauge-colored-range-bundle{border-top:1px dashed #9e9e9e;margin-top:20px;padding-top:5px}.docs-charts-editor-gauge-colored-range-bundle .docs-charts-editor-row>.docs-charts-editor-col>div{margin:0}.docs-charts-editor-gauge-colored-range-bundle .docs-charts-editor-row{margin-top:10px}.docs-charts-editor-pie-slice-format-labeledsection{color:#3c4043;font-size:14px;font-weight:500;letter-spacing:.2px;line-height:24px;margin-bottom:0;padding:10px 0}.docs-gm .waffle-gm-sidebar .docs-charts-editor-pie-slice-options hr{background-color:#dadce0;border:0;height:1px;margin:17px -16px}.docs-charts-editor-recommendation-zippy{background-color:#e6f4ea;border:1px solid #ceead6;border-radius:4px}.docs-charts-editor-recommendation-zippy-header{padding:4px 0}.docs-charts-editor-recommendation-zippy-header-icon{display:inline-block;padding:0 8px}.docs-charts-editor-recommendation-zippy-header-text{color:#3c4043;font-weight:500}.docs-charts-editor-recommendation-zippy-toggle{font-weight:400;text-transform:none}.docs-charts-editor-recommendation-zippy-header-left{float:left;line-height:32px}.docs-charts-editor-recommendation-zippy-header-right{float:right}.docs-charts-editor-recommendation-zippy-header:after{content:"";clear:both;display:table}.docs-charts-editor-recommendation-zippy-body{padding:0 4px;text-align:center}.docs-charts-editor-recommendation-zippy .goog-palette-cell{border:0;cursor:inherit}.docs-charts-editor-recommendation-zippy .goog-palette-table{border:0;margin:5px 0 0 0;width:100%}.docs-charts-editor-recommendation-zippy .waffle-charteditor-recommendation-palette.goog-palette{border-bottom:none;display:inline-block;margin:0;padding:0;width:100%}.docs-charts-editor-recommendation-zippy .waffle-charteditor-recommendation-option{background-color:white;height:75px;margin:4px 6px 8px 8px;max-width:114px;padding:0;width:initial}.docs-charts-editor-series-select-color{height:10px;left:-15px;margin:0;position:relative;top:1px;width:10px}.docs-gm .docs-charts-editor-series-select-color{border-radius:50%;height:15px;top:3px;width:15px}.docs-charts-editor-series-select .docs-material-gm-labeled-select-caption>div{color:#202124;padding-left:20px}.docs-charts-editor-series-point-shape-icon{fill:rgba(0,0,0,0.87);height:12px;margin-bottom:-1px;margin-right:9px;width:12px}.goog-menuitem-content .docs-charts-editor-series-point-shape-icon{margin-left:-12px}.docs-charts-editor-series-line-dash-type-icon{height:2px;stroke:rgba(0,0,0,0.87);width:75px;vertical-align:middle}.docs-charts-editor-series-item-selection-dialog-input-default-caption{color:#bdbdbd}.docs-charts-editor-series-format-labeledsection .docs-charts-editor-control-label.docs-charts-editor-labeledsection,.docs-charts-editor-series-format-data-point-button .docs-charts-editor-control-label.docs-charts-editor-labeledactionablebutton-label{color:#3c4043;font-size:14px;font-weight:500;letter-spacing:.2px;line-height:24px;margin-bottom:0;padding:10px 0}.docs-charts-editor-series-format-label-hide{display:none}.docs-gm .waffle-gm-sidebar .docs-charts-editor-series-format-data-point-button>div{display:flex;justify-content:space-between}.docs-charts-editor-series-format-data-point-button .docs-charts-editor-labeledactionablebutton{padding:10px 0}.col-50.docs-charts-editor-series-format-data-point-button{padding:10px 0;text-align:right}.docs-charts-editor-series-single-item-style-item-select{max-width:70%}.docs-charts-editor-table-border-container{background:#fdfdfd;border-top:1px solid #e0e0e0;padding:0 16px 6px}.docs-charts-editor-table-border-container .docs-charts-editor-col.col-50>div>.docs-material-labeled-checkbox{margin-top:24px}.docs-charts-editor-textstyle-toolbar{border:1px solid #d8d8d8;border-radius:1px;margin:6px 0;padding:0 4px}#docs-charts-editor-textstyle-font-family .goog-toolbar-menu-button-caption{overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap;width:67px}#docs-charts-editor-textstyle-font-size .goog-toolbar-combo-button-caption{width:32px}#docs-charts-editor-textstyle-font-size .goog-toolbar-combo-button-input{width:12px}.docs-charts-editor-textstyle-container{border:1px solid #dadce0;border-radius:4px;display:inline-block;height:40px;line-height:40px}.docs-charts-editor-textstyle-separator{border-left:1px solid #dadce0;height:25px;margin:7px 1px;vertical-align:top}.docs-gm .waffle-gm-sidebar .docs-charts-editor-textstyle-italic{margin-left:-1px}.docs-gm .waffle-gm-sidebar .docs-charts-editor-col.docs-charts-editor-waterfall-connector-line-color{width:48%}.docs-gm .waffle-gm-sidebar .docs-charts-editor-col.docs-charts-editor-waterfall-connector-line-thickness{width:52%}.docs-charts-editor-waterfall-add-total-button{color:#4285f4;font-weight:500;padding:2px 1px 0px 1px;text-transform:uppercase}.docs-gm .waffle-gm-sidebar .docs-charts-editor-waterfall-last-value-total .docs-material-gm-labeled-checkbox-content{width:80%}.docs-gm .waffle-gm-sidebar .docs-charts-editor-waterfall-add-total-column{margin-bottom:10px}.docs-charts-editor-waterfall-total-column-label{-ms-flex:1;-webkit-flex:1;flex:1}.docs-charts-contextual-editor{bottom:0;left:0;margin-right:0;position:absolute;right:0;top:0;transition:transform 0.3s ease;transform:translateX(0%)}.docs-charts-contextual-editor-hide{transform:translateX(100%)}.waffle-charteditor-external-menu-button,.waffle-charteditor-external-menu-button-outer-box,.waffle-charteditor-external-menu-button-inner-box,.waffle-charteditor-external-menu-button-caption,.waffle-charteditor-external-menu-button-dropdown{cursor:pointer;display:block}.waffle-charteditor-data-constraint-disabled .waffle-charteditor-external-menu-button,.waffle-charteditor-data-constraint-disabled .waffle-charteditor-external-menu-button-outer-box,.waffle-charteditor-data-constraint-disabled .waffle-charteditor-external-menu-button-inner-box,.waffle-charteditor-data-constraint-disabled .waffle-charteditor-external-menu-button-caption,.waffle-charteditor-data-constraint-disabled .waffle-charteditor-external-menu-button-dropdown{cursor:not-allowed}.waffle-charteditor-external-menu-button{outline:none}.waffle-charteditor-external-menu-button-dropdown{height:0}.docs-charts-editor-chip.waffle-charteditor-external-menu-button-focused:not(.waffle-charteditor-external-menu-button-open) .docs-charts-editor-chip-content,.waffle-charteditor-pickerchip.waffle-charteditor-external-menu-button-focused:not(.waffle-charteditor-external-menu-button-open) .docs-charts-editor-chip-content{outline:5px auto #4285f4;outline-offset:-3px}.waffle-charteditor-filter-button-container{display:flex}.waffle-charteditor-filter-button-label{-webkit-box-flex:1;box-flex:1;-ms-flex-positive:1;-webkit-flex-grow:1;flex-grow:1;color:#202124;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;letter-spacing:0.2px;line-height:44px}.waffle-charteditor-filter-cards{margin-bottom:48px}.waffle-charteditor-filter-card{background-color:#f1f3f4;border-radius:8px;padding:0 10px 10px 10px}.waffle-charteditor-filter-card:not(:last-child){margin-bottom:10px}.waffle-charteditor-filter-card-top-row{-webkit-align-items:center;align-items:center;display:flex;padding-bottom:2px}.waffle-charteditor-filter-card-top-row>div{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.waffle-charteditor-filter-card-remove{margin-right:-10px}.waffle-charteditor-filter-card-top-row>.waffle-charteditor-filter-card-label{-webkit-box-flex:1;box-flex:1;-ms-flex-positive:1;-webkit-flex-grow:1;flex-grow:1;-webkit-flex-shrink:1;-ms-flex-negative:1;flex-shrink:1;overflow:hidden;text-overflow:ellipsis}.waffle-charteditor-filter-card-label{color:#424242;font-size:14px;padding-left:8px}.waffle-charteditor-filter-card-select-label{color:#5f6368;font-size:11px;padding-bottom:3px;padding-left:2px}.docs-gm .waffle-gm-sidebar .waffle-charteditor-filter-card-select .jfk-select{background-color:#fff;padding-bottom:2px;padding-top:2px;text-align:left;width:100%}.docs-gm .waffle-gm-sidebar .waffle-charteditor-filter-card-select .jfk-select.goog-flat-menu-button-hover{background-color:rgba(60,64,67,0.04);border:1px solid #dadce0}.docs-gm .waffle-gm-sidebar .waffle-charteditor-filter-card-select .jfk-select.goog-flat-menu-button-focused{background-color:rgba(60,64,67,0.06);border:1px solid #dadce0}.docs-gm .waffle-gm-sidebar .waffle-charteditor-filter-card-select .jfk-select .goog-flat-menu-button-caption{font-size:12px}.waffle-charteditor-numeric-group-control-container{-webkit-align-items:center;align-items:center;display:flex}.waffle-charteditor-numeric-group-control-checkbox{-webkit-box-flex:1;box-flex:1;-ms-flex-positive:1;-webkit-flex-grow:1;flex-grow:1}.waffle-charteditor-sort-button-container{display:flex}.waffle-charteditor-sort-button-label{-webkit-box-flex:1;box-flex:1;-ms-flex-positive:1;-webkit-flex-grow:1;flex-grow:1;color:#202124;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;letter-spacing:0.2px;line-height:44px}.waffle-charteditor-sort-order-toggle{background:none;border:0;color:#5f6368;cursor:pointer;font-style:italic}.waffle-charteditor-sort-chip .docs-charts-editor-chip-label{color:#424242;font-size:14px}.waffle-charteditor-sidebar.waffle-sidebar-container{width:320px;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;z-index:2}.waffle-charteditor-sidebar .waffle-sidebar-title{padding:11px 12px;font-weight:500}.waffle-charteditor-content{background-color:#fff;height:100%}.waffle-charteditor-rangepicker-modification-disabled{display:none;font-size:14px;margin-top:15px}.waffle-charteditor-rangepicker-checkboxes-container{margin:10px 0}.waffle-charteditor-rangepicker-checkboxes-container .docs-material-gm-labeled-checkbox{padding:4px 0}.waffle-charteditor-rangepicker-labels-as-text{margin-left:28px}.waffle-charteditor-rangepicker-has-external-data .waffle-charteditor-rangepicker-labels-as-text{margin-left:0}.docs-charts-editor-row>.waffle-charteditor-rangepicker-data-picker>div{margin-top:0}.waffle-charteditor-rangepicker-data-picker .waffle-charteditor-date-group-control-bucket-type .docs-material-gm-labeled-select-content{display:none}.waffle-charteditor-rangepicker-data-transformation .waffle-charteditor-rangepicker-modification-disabled{display:block}.waffle-charteditor-rangepicker-data-transformation .waffle-charteditor-rangepicker-checkboxes-container,.waffle-charteditor-rangepicker-data-transformation .waffle-charteditor-rangepicker-merge{display:none}.waffle-charteditor-rangepicker-error-label{color:#db4437;font-size:13px}.waffle-charteditor-unsupported-chart-type{box-shadow:0px 3px 4px 0px rgba(0,0,0,0.14),0px 3px 3px -2px rgba(0,0,0,0.12),0px 1px 8px 0px rgba(0,0,0,0.2);background:#ffebee;color:rgba(0,0,0,0.87);letter-spacing:0.04em;position:absolute;top:0px;z-index:1}.waffle-charteditor-unsupported-chart-type-message{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;font-size:14px;padding:16px}.waffle-charteditor-recommendation-palette.goog-palette{border-bottom:1px solid rgba(0,0,0,0.12);margin-bottom:10px;padding-bottom:20px;width:265px}.waffle-charteditor-recommendation-palette .docs-charts-editor-palette-label{text-transform:uppercase}.waffle-charteditor-recommendation-option{box-shadow:0 0 0 4px #ddd;cursor:pointer;height:80px;margin:3px 12px 10px 0;overflow:hidden;padding:2px;position:relative;width:123px}.goog-palette-cell-hover .waffle-charteditor-recommendation-option{box-shadow:0 0 0 4px #bbc7ed}.goog-palette-cell-selected .waffle-charteditor-recommendation-option{box-shadow:0 0 0 4px #6485f1}.waffle-charteditor-recommendation-option-canvas{direction:ltr}.waffle-charteditor-recommendation-chip{background-color:#4285f4;border:1px solid #fff;bottom:6px;color:#fff;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:10px;font-weight:500;height:13px;line-height:13px;max-width:84px;overflow-x:hidden;padding:2px 7px 0 7px;position:absolute;right:6px;text-overflow:ellipsis;white-space:nowrap}.waffle-charteditor-recommendation-option .waffle-assistant-feedback-button{margin:0;position:absolute;right:0;top:0}.waffle-charteditor-picker-button-wrapper{-ms-flex-align:center;-moz-box-align:center;-webkit-box-align:center;box-align:center;-webkit-align-items:center;align-items:center;display:flex;-webkit-justify-content:center;justify-content:center;cursor:pointer;height:28px}.waffle-charteditor-data-constraint-disabled .waffle-charteditor-picker-button-wrapper{cursor:not-allowed}.docs-gm .waffle-gm-sidebar .waffle-charteditor-picker-button-wrapper{height:32px;margin-right:12px}.waffle-charteditor-pickerchip .docs-charts-editor-chip-label{cursor:pointer}.waffle-charteditor-data-constraint-disabled .waffle-charteditor-pickerchip .docs-charts-editor-chip-label{cursor:not-allowed}.waffle-charteditor-pickerchip .docs-charts-editor-chip-content{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background-color:transparent;border:1px dashed rgba(0,0,0,0.38)}.docs-gm .waffle-gm-sidebar .waffle-charteditor-pickerchip .docs-charts-editor-chip-content{border:1px solid #dadce0}.waffle-charteditor-data-constraint-disabled .docs-charts-editor-chip-content{opacity:0.5}.waffle-charteditor-pickerchip-button{transition:opacity 200ms cubic-bezier(0.4,0.0,0.2,1);margin-right:8px;margin-top:1px;opacity:.7}.jfk-button-hover .waffle-charteditor-pickerchip-button{opacity:1}.waffle-charteditor-pickerchip.docs-charts-editor-chip-invalid .docs-charts-editor-chip-content{background-color:#f0f0f0}.waffle-charteditor-pickerchip .docs-charts-editor-chip-label{color:#9e9e9e}.docs-gm .waffle-gm-sidebar .waffle-charteditor-pickerchip .docs-charts-editor-chip-label{color:#80868b;font-weight:500}.waffle-charteditor-data-constraint-header{-webkit-align-items:center;align-items:center;display:flex}.waffle-charteditor-data-constraint-name,.waffle-charteditor-annotation-chip-label{color:#616161;font-size:11px;vertical-align:top}.docs-gm .waffle-gm-sidebar .waffle-charteditor-data-constraint-name,.waffle-charteditor-annotation-chip-label{color:#3c4043;font-weight:500;letter-spacing:.8px;margin-top:10px;text-transform:uppercase}.docs-gm .waffle-gm-sidebar .waffle-charteditor-data-constraint-name{color:#202124;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;letter-spacing:0.2px;line-height:20px;text-transform:none}.docs-gm .waffle-gm-sidebar .waffle-charteditor-annotation-chip-label{color:#80868b;line-height:16px}.waffle-charteditor-data-constraint-name{-webkit-box-flex:1;box-flex:1;-ms-flex-positive:1;-webkit-flex-grow:1;flex-grow:1;margin-top:10px;overflow:hidden}.waffle-charteditor-data-constraint-aggregate-type .docs-material-gm-labeled-select-outer-box{padding:0 0 0 8px}.waffle-charteditor-data-constraint-chip{color:#424242;font-size:13px;margin-top:10px}.docs-gm .waffle-gm-sidebar .waffle-charteditor-data-constraint-chip{font-size:14px;margin-top:8px}.waffle-charteditor-data-constraint{position:relative}.waffle-charteditor-annotation-chip-wrapper{display:flex}.docs-gm .waffle-gm-sidebar .waffle-charteditor-annotation-chip-wrapper{display:block;margin-bottom:15px;margin-left:50px}.waffle-charteditor-annotation-chip{-ms-flex:1;-webkit-flex:1;flex:1}.waffle-charteditor-annotation-chip-label{margin-right:10px;line-height:32px}.waffle-charteditor-chip-icon{left:8px;margin-left:10px;margin-top:7px;top:7px}.docs-gm .waffle-gm-sidebar .waffle-charteditor-chip-icon{margin-left:15px;margin-top:9px}.waffle-charteditor-chip-delete-button{transition:background-color 0.2s ease;background:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+ICA8cGF0aCBmaWxsPSIjZjBmMGYwIiBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPjwvc3ZnPg==");background-color:#5f6368;border:0;border-radius:16px;cursor:pointer;height:16px;margin:8px;width:16px}.docs-gm .waffle-gm-sidebar .waffle-charteditor-chip-delete-button{margin:10px}.waffle-charteditor-chip-delete-button:hover{background-color:#aaa}.waffle-charteditor-series-aggregate-type{-webkit-align-items:center;align-items:center;display:flex}.waffle-charteditor-series-aggregate-type-label{color:#616161;font-style:italic;padding:0 5px}.docs-gm .waffle-gm-sidebar .waffle-charteditor-series-aggregate-type-label{padding:0 10px}.docs-gm .waffle-charteditor-chip-during-dragging.goog-menuitem{box-sizing:border-box;border-radius:16px;cursor:move;margin:0 4px;overflow:hidden;padding-left:8px;padding-right:8px;background:#f8f9fa;box-shadow:0 4px 4px 0px rgba(60,64,67,.3),0 8px 12px 6px rgba(60,64,67,.15);opacity:0.9;width:267px;z-index:2}.waffle-charteditor-chip-during-dragging.goog-menuitem .goog-menuitem-content,.waffle-charteditor-chip-during-dragging.goog-menuitem .goog-menuitem-content span{-ms-flex:1;-webkit-flex:1;flex:1;color:#3c4043;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;line-height:18px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500}.waffle-charteditor-chip-during-dragging.goog-menuitem .goog-menuitem-content>div{display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;-webkit-justify-content:flex-start;justify-content:flex-start}.waffle-charteditor-chip-during-dragging.goog-menuitem .goog-menuitem-icon{margin:0 8px 0 0;position:relative;top:0}.docs-gm .waffle-gm-sidebar .waffle-charteditor-chip-hover-highlight .docs-charts-editor-chip-content{background:#ceead6;border:1px solid #34a853;box-shadow:0 1px 3px 1px rgba(60,64,67,.15)}.docs-gm .waffle-gm-sidebar .waffle-charteditor-chip-hover-highlight.docs-charts-editor-bundle.docs-charts-editor-child-bundle.docs-charts-editor-open-bundle .goog-inline-block.docs-charts-editor-material-textbutton.docs-material{background-color:#f8fcf9}.docs-gm .waffle-gm-sidebar .waffle-charteditor-chip-hover-highlight.docs-charts-editor-bundle.docs-charts-editor-child-bundle.docs-charts-editor-open-bundle{padding-bottom:56px}.docs-gm .waffle-gm-sidebar .waffle-charteditor-chip-hover-highlight.docs-charts-editor-bundle.docs-charts-editor-child-bundle.docs-charts-editor-open-bundle .waffle-charteditor-filter-card{background:#ceead6;border:1px solid #34a853;box-shadow:0 1px 3px 1px rgba(60,64,67,.15)}#docs-editor.companion-enabled{width:100%}#docs-editor.companion-enabled #waffle-grid-container{width:calc(100% - 56px)}#docs-editor.companion-enabled #grid-bottom-bar{width:calc(100% - 56px)}#docs-editor.companion-enabled #grid-bottom-bar.grid-bottom-bar-rtl-companion-collapsed{width:100%}#docs-editor.companion-enabled #grid-bottom-bar.grid-bottom-bar-rtl{right:56px}#docs-editor.companion-enabled #grid-bottom-bar.grid-bottom-bar-rtl.grid-bottom-bar-rtl-companion-collapsed{right:0}#docs-editor.companion-enabled #grid-bottom-bar.grid-bottom-bar-rtl-companion-open{right:calc(56px + 300px)}.docs-ui-toast.waffle-assistant-toast.waffle-assistant-toast-companion{right:calc(56px + 15px)}.waffle-assistant-entry-expanded.companion-collapsed{border-right:1px solid #c2c2c2}.companion-collapser-button-container.companion-collapser-button-container-elevated{margin-bottom:auto}.docs-companion-app-switcher-container-collapsed .companion-collapser-button-container,.docs-companion-app-switcher-container-collapsed .companion-collapser-button{height:38px}.docs-jfk-styling .companion-collapser-button,.docs-jfk-styling .companion-collapser-button .app-switcher-button-icon-container,.docs-jfk-styling .companion-collapser-button .app-switcher-button-icon-background{transition:all 0s ease 0s}.companion-collapser-button.app-switcher-button-checked{right:0}.companion-collapser-button.app-switcher-button-checked .app-switcher-button-icon-container,.companion-collapser-button.app-switcher-button-checked .app-switcher-button-icon-background{box-shadow:none;margin:8px;padding:10px;top:calc(-1*8px);width:20px}.companion-collapser-button.app-switcher-button-checked .app-switcher-button-icon-background{background-color:transparent;border:transparent 1px solid;border-radius:0}.docs-gm .companion-collapser-button{transition:none}.docs-gm .companion-collapser-button .app-switcher-button-icon-container,.docs-gm .companion-collapser-button .app-switcher-button-icon-background{transition-property:background-color}.docs-gm .companion-collapser-button:not(.app-switcher-button-checked) .app-switcher-button-icon-container,.docs-gm .companion-collapser-button:not(.app-switcher-button-checked) .app-switcher-button-icon-background{transition-property:margin-top}.docs-gm .companion-collapser-button.app-switcher-button-hover.app-switcher-button-checked .app-switcher-button-icon-background{background-color:#f1f3f4}.docs-gm .companion-collapser-button.app-switcher-button-focused.app-switcher-button-checked .app-switcher-button-icon-background{background-color:#e8eaed}.companion-collapser-button.app-switcher-button-checked .app-switcher-button-icon{margin-left:0}.docs-jfk-styling .companion-collapser-button.app-switcher-button-checked .app-switcher-button-icon-container,.docs-jfk-styling .companion-collapser-button.app-switcher-button-checked .app-switcher-button-icon-background{top:-10px}.docs-jfk-styling .companion-collapser-button .app-switcher-button-icon{border:transparent 1px solid;transition:all 0s ease 0s}.docs-jfk-styling .companion-collapser-button.app-switcher-button-hover.app-switcher-button-checked .app-switcher-button-icon-background{background-color:transparent}.docs-jfk-styling .companion-collapser-button.app-switcher-button-hover.app-switcher-button-checked .app-switcher-button-icon{border-color:#c6c6c6}.docs-jfk-styling .companion-collapser-button.app-switcher-button-focused.app-switcher-button-checked .app-switcher-button-icon{outline:-webkit-focus-ring-color auto 5px}.waffle-dashboard-fab-plus-button{bottom:40px;position:absolute;right:55px;z-index:20}.waffle-dashboard-fab-list{bottom:100px;position:absolute;right:55px;z-index:20}.waffle-dashboard-fab-buttons{display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;background-color:#fafafa;border-radius:50%;box-shadow:0 10px 10px #bdbdbd;cursor:pointer;height:60px;margin-top:20px;outline:none;width:60px}.waffle-dashboard-fab-buttons:last-child{margin-bottom:20px}.waffle-dashboard-fab-buttons:hover,.waffle-dashboard-fab-buttons:focus{background-color:#eeeeee}.waffle-dashboard-fab-icons{-webkit-transform:scale(1.3);-moz-transform:scale(1.3);-ms-transform:scale(1.3);-o-transform:scale(1.3);transform:scale(1.3)}.waffle-dataconnector-close-badge{background-color:rgba(0,0,0,0.12);border-radius:50%;box-sizing:border-box;height:18px;position:relative;width:18px}.waffle-dataconnector-close-badge svg{height:80%;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:80%}.waffle-dataconnector-close-badge polygon{fill:#fff}.waffle-dataconnector-close-badge-hover{background-color:rgba(0,0,0,0.38);cursor:pointer}.waffle-dataconnector-connectioncard{display:flex;align-items:center;background:#fff;border-radius:30px;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;padding:12px;width:360px}.waffle-dataconnector-connectioncard-hover{background-color:#f0f0f0}.waffle-dataconnector-connectioncard-focused{background-color:#e8f0fe;outline:none}.waffle-dataconnector-connectioncard-icon{-webkit-transform:scale(1.4,1.4);-moz-transform:scale(1.4,1.4);-ms-transform:scale(1.4,1.4);-o-transform:scale(1.4,1.4);transform:scale(1.4,1.4);background:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBmaWxsPSIjMDAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgPGVsbGlwc2UgY3g9IjkiIGN5PSI1IiByeD0iNyIgcnk9IjMiLz4KICAgIDxwYXRoIGQ9Ik0xNiw3IEwxNiw4Ljk5OTk5OTgzIEMxNiwxMC42NTY4NTQyIDEyLjg2NTk5MzIsMTIgOSwxMiBDNS4xMzQwMDY3NSwxMiAyLDEwLjY1Njg1NDIgMiw5IEwyLDcgQzIsOC42NTY4NTQyNSA1LjEzNDAwNjc1LDEwIDksMTAgQzEyLjg2NTk5MzIsMTAgMTYsOC42NTY4NTQyNSAxNiw3IFoiLz4KICAgIDxwYXRoIGQ9Ik0xNiwxMSBMMTYsMTIuOTk5OTk5OCBDMTYsMTQuNjU2ODU0MiAxMi44NjU5OTMyLDE2IDksMTYgQzUuMTM0MDA2NzUsMTYgMiwxNC42NTY4NTQyIDIsMTMgTDIsMTEgQzIsMTIuNjU2ODU0MiA1LjEzNDAwNjc1LDE0IDksMTQgQzEyLjg2NTk5MzIsMTQgMTYsMTIuNjU2ODU0MiAxNiwxMSBaIi8+CiAgPC9nPgo8L3N2Zz4K") no-repeat;background-size:cover;display:inline-block;height:1em;margin-right:12px;width:1em}.waffle-dataconnector-connectioncard-body{border-left:1px solid transparent}.waffle-dataconnector-connectioncard-header{color:rgba(0,0,0,0.87);font-weight:bold;line-height:18px}.waffle-dataconnector-connectioncard-type{color:rgba(0,0,0,0.54)}.waffle-dataconnector-connectionmanager{width:512px}.waffle-dataconnector-connectionmanager .waffle-dataconnector-modal-footer{padding:0}.waffle-dataconnector-connectionmanager-content{height:357px;overflow-y:scroll;position:relative}.waffle-dataconnector-connectionmanager.waffle-dataconnector-connectionmanager-loading .waffle-dataconnector-connectionmanager-connections{display:none}.waffle-dataconnector-connectionmanager-content::-webkit-scrollbar{height:16px;overflow:visible;width:12px}.waffle-dataconnector-connectionmanager-content .waffle-spinner{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.waffle-dataconnector-connectionmanager-header{color:rgba(0,0,0,0.54);font:500 13px Roboto,RobotoDraft,Helvetica,Arial,sans-serif;margin:12px}.waffle-dataconnector-connectionmanager-no-connections-message{position:absolute;text-align:center;top:50%;width:100%}.waffle-dataconnector-pill{display:flex;background:white;border-radius:40px;box-shadow:0px 1px 1px 0px rgba(0,0,0,0.14),0px 2px 1px -1px rgba(0,0,0,0.12),0px 1px 3px 0px rgba(0,0,0,0.2);box-sizing:border-box;padding:5px 20px;position:absolute}.waffle-dataconnector-pill-info{display:flex}.waffle-dataconnector-pill-timestamp{color:#4285f4;height:32px;line-height:32px;margin-right:10px;white-space:nowrap}.waffle-dataconnector-pill-gm .waffle-dataconnector-pill-timestamp,.waffle-dataconnector-pill-gm .waffle-dataconnector-pill-progress{color:#188038}.waffle-dataconnector-pill-progress{-webkit-align-items:center;align-items:center;display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;color:#4285f4;height:32px;line-height:32px}.waffle-dataconnector-pill-error{color:#db4437;height:32px;line-height:32px;margin-right:10px}.waffle-dataconnector-pill-error .waffle-dataconnector-error-icon{height:18px;margin-right:4px;position:relative;top:4px;width:18px}.waffle-dataconnector-pill-menu-button{margin:0;padding:0}.waffle-dataconnector-menu-icon{position:relative;top:3px}.waffle-dataconnector-pill-menu svg{-webkit-transform:scale(1.4,1.4);-moz-transform:scale(1.4,1.4);-ms-transform:scale(1.4,1.4);-o-transform:scale(1.4,1.4);transform:scale(1.4,1.4);bottom:-0.125em;height:1em;margin-right:8px;position:relative;width:1em}.waffle-dataconnector-pill-menuitem{-webkit-align-items:center;align-items:center;display:flex;height:32px;line-height:32px}.waffle-dataconnector-pill-menuitem-refreshquery,.waffle-dataconnector-pill-menuitem-truncation{padding-right:15px!important}.waffle-dataconnector-pill-menuitem-accel{margin-left:auto;padding:0 20px 0 40px;text-align:center;color:#9e9e9e}.waffle-dataconnector-pill-menuitem-refreshquery-info svg{margin:0}.waffle-dataconnector-pill-menuitem-refreshquery-info-progress{font-style:italic}.waffle-dataconnector-pill-menuitem-refreshquery-info-error-button{color:#db4437;text-decoration:underline}.waffle-dataconnector-pill-spinner{border-radius:50%;box-shadow:inset 0 0 0 2px;color:#4285f4;display:inline-block;height:18px;margin:7px 0;position:relative;width:18px;margin-right:7px}.waffle-dataconnector-pill-gm .waffle-dataconnector-pill-spinner{border-radius:50%;box-shadow:inset 0 0 0 2px;color:#188038;display:inline-block;height:18px;margin:7px 0;position:relative;width:18px;margin-right:7px}.waffle-dataconnector-pill-spinner:before{-webkit-animation:waffle-dataconnector-pill-spinner-animation 2s infinite ease 1.5s;-moz-animation:waffle-dataconnector-pill-spinner-animation 2s infinite ease 1.5s;-o-animation:waffle-dataconnector-pill-spinner-animation 2s infinite ease 1.5s;animation:waffle-dataconnector-pill-spinner-animation 2s infinite ease 1.5s;-webkit-transform-origin:11px 10px;-moz-transform-origin:11px 10px;-ms-transform-origin:11px 10px;-o-transform-origin:11px 10px;transform-origin:11px 10px;background:#fff;border-radius:20px 0 0 20px;content:"";height:20px;left:-1px;position:absolute;top:-1px;width:11px}.waffle-dataconnector-pill-spinner:after{-webkit-animation:waffle-dataconnector-pill-spinner-animation 2s infinite ease;-moz-animation:waffle-dataconnector-pill-spinner-animation 2s infinite ease;-o-animation:waffle-dataconnector-pill-spinner-animation 2s infinite ease;animation:waffle-dataconnector-pill-spinner-animation 2s infinite ease;-webkit-transform-origin:0 10px;-moz-transform-origin:0 10px;-ms-transform-origin:0 10px;-o-transform-origin:0 10px;transform-origin:0 10px;background:#fff;border-radius:0 20px 20px 0;content:"";height:20px;left:10px;position:absolute;top:-1px;width:11px}@keyframes waffle-dataconnector-pill-spinner-animation{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.grid-shim-bottom{background-color:#f8f8f8;border-top:1px solid #e5e5e5}.grid-shim-end-ltr,.grid-shim-end-rtl{background:#f8f8f8;height:100%;position:absolute;top:0}.grid-shim-end-ltr{border-left:1px solid #e5e5e5}.grid-shim-end-rtl{border-right:1px solid #e5e5e5}.grid-shim-end-ltr{right:0}.grid-shim-end-rtl{left:0}.grid-bottom-bar{background-color:#eee;z-index:18}.docs-gm .grid-bottom-bar{background-color:#f1f3f4;border-top:1px solid #e8eaed}.docs-gm .grid-bottom-bar td{line-height:0}.docs-gm .grid-bottom-bar .goog-toolbar{min-height:0}.grid-bottom-bar,.grid-shim-bottom{width:100%}.docs-sheet-active-tab .docs-sheet-tab-dropdown{background:none}.docs-sheet-add .docs-sheet-button-inner-box,.docs-sheet-add .docs-sheet-button-icon{background-position:-180px -37px}.docs-sheet-add.docs-sheet-button-hover .docs-sheet-button-inner-box,.docs-sheet-add.docs-sheet-button-hover .docs-sheet-button-icon{background-position:-642px 0}.docs-sheet-left .docs-sheet-button-inner-box,.docs-sheet-left .docs-sheet-button-icon{background-position:-430px -62px}.docs-sheet-left.docs-sheet-button-hover .docs-sheet-button-inner-box,.docs-sheet-left.docs-sheet-button-hover .docs-sheet-button-icon{background-position:-757px -44px}.docs-sheet-left.docs-sheet-button-disabled .docs-sheet-button-inner-box,.docs-sheet-left.docs-sheet-button-disabled .docs-sheet-button-icon{background-position:-430px -62px}.docs-sheet-right .docs-sheet-button-inner-box,.docs-sheet-right .docs-sheet-button-icon{background-position:-509px -62px}.docs-sheet-right.docs-sheet-button-hover .docs-sheet-button-inner-box,.docs-sheet-right.docs-sheet-button-hover .docs-sheet-button-icon{background-position:-597px -37px}.docs-sheet-right.docs-sheet-button-disabled .docs-sheet-button-inner-box,.docs-sheet-right.docs-sheet-button-disabled .docs-sheet-button-icon{background-position:-509px -62px}.docs-sheet-all .docs-sheet-button-inner-box,.docs-sheet-all .docs-sheet-button-icon{background-position:-791px -67px}.docs-sheet-all.docs-sheet-button-hover .docs-sheet-button-inner-box,.docs-sheet-all.docs-sheet-button-hover .docs-sheet-button-icon{background-position:-217px -62px}.docs-sheet-button-inner-box:hover,.docs-sheet-button-outer-box:hover{border-color:#c6c6c6!important}.docs-sheet-button-inner-box{background:none}.docs-sheet-button-icon{background:url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") no-repeat;margin:2px}.docs-sheet-comment-indicator{background:none;color:white;font-size:11px;font-weight:500;text-align:center}.docs-sheet-outer-container{vertical-align:top}.docs-sheet-container{height:30px;overflow:hidden;top:-1px}.docs-gm .docs-sheet-container{height:40px;line-height:normal;margin-top:-1px;top:0}div.docs-sheet-container-bar{background:none;border:none;font-size:13px;padding:0 0 0 0.5em;margin:0 2px 2px 2px;overflow-x:auto;overflow-y:hidden;white-space:nowrap}.docs-sheet-container-bar .docs-sheet-tab-open{border-top:none;-moz-box-shadow:0 2px 4px rgba(0,0,0,0.2)!important;-webkit-box-shadow:0 2px 4px rgba(0,0,0,0.2)!important;box-shadow:0 2px 4px rgba(0,0,0,0.2)!important;z-index:1004}.docs-sheet-tab-open{border-top:1px solid #fff}div.docs-sheet-button-bar{background:none;border:none;padding:2px 4px 4px 0;margin:0 0 0 2px;overflow:hidden;white-space:nowrap}.docs-sheet-tab{text-decoration:none;list-style:none;vertical-align:top;outline:none;height:24px;z-index:1003;color:#666;background-color:#e9e9e9;border-style:solid;border-width:1px;border-color:#ccc;border-top-color:#aaa;cursor:pointer;padding:2px;margin:0 0 2px 0;min-width:30px;border-radius:0 0 2px 2px}.docs-gm .docs-sheet-tab{align-items:center;background-color:#f1f3f4;border-bottom:none;border-left:1px solid #e8eaed;border-radius:0;border-right:1px solid #e8eaed;border-top:1px solid #e8eaed;display:inline-flex;height:39px;margin-right:-1px;padding:0 12px 0 16px}.docs-sheet-tab.docs-sheet-tab-selected{background-color:#fff;color:#222}.docs-sheet-tab-hover{color:#444;background-color:#f1f1f1;margin:0 0 2px 0}.docs-gm .docs-sheet-tab-hover{background-color:#e8eaed;border-top-color:#e8eaed}.docs-sheet-active-tab{color:#222;cursor:default;background-color:#fff;border-color:#aaa;border-top-color:#fff;border-width:0 1px 1px 1px;box-shadow:0 1px 1px rgba(0,0,0,0.15);font-weight:500;margin:0 0 2px 0;z-index:1004}.docs-gm .docs-sheet-active-tab{background-color:#fff;border-top-color:#f1f3f4;box-shadow:0 1px 3px 1px rgba(60,64,67,.15)}.docs-sheet-tab-menu{border-color:#aaa!important}.docs-gm .docs-sheet-tab-menu{border-color:transparent!important}.docs-sheet-tab-outer-box{border-color:#e4e4e4}.docs-sheet-active-tab .docs-sheet-tab-outer-box{border-color:#d8d8d8}.docs-sheet-tab-outer-box{border-width:1px 0;padding:0;margin:0 -1px;white-space:nowrap;padding:3px 0 3px 5px}.docs-gm .docs-sheet-tab-outer-box{margin-top:-2px;padding:0}.docs-sheet-button-outer-box{margin:0;border-width:1px 0;padding:0}.docs-sheet-button-inner-box{margin:0 -1px;border-width:0 1px;white-space:nowrap}.docs-sheet-menu-inner-box{padding:1px 2px}.docs-gm .docs-sheet-button-outer-box,.docs-gm .docs-sheet-button-inner-box{border:none}.docs-gm .docs-sheet-button-disabled{opacity:.38}::root .docs-sheet-tab,::root .docs-sheet-tab-outer-box{line-height:0}::root .docs-sheet-tab-caption,::root .docs-sheet-tab-dropdown{line-height:normal}.docs-sheet-tab-color{height:3px;margin:3px -20px 0 -5px}.docs-gm .docs-sheet-tab-outer-box,.docs-gm .docs-sheet-tab-inner-box,.docs-gm .docs-sheet-tab-caption{position:static}.docs-gm .docs-sheet-tab-color{bottom:0;height:4px;left:0;margin:0;position:absolute;right:0}.docs-sheet-active-tab .docs-sheet-tab-dropdown{display:inline-block}.docs-sheet-tab .docs-sheet-tab-dropdown{display:inline-block;margin-top:-7px}.docs-gm .docs-sheet-tab .docs-sheet-tab-dropdown{border-radius:2px;margin:0;opacity:1}.docs-sheet-tab-dropdown{opacity:0.3;filter:alpha(opacity=30);margin:-2px -1px -2px -2px}.docs-sheet-active-tab .docs-sheet-tab-dropdown:hover{cursor:pointer;opacity:1;filter:alpha(opacity=100)}.docs-sheet-tab-dropdown{vertical-align:middle}.docs-gm .docs-sheet-active-tab .docs-sheet-tab-dropdown{border:1px solid transparent;margin-left:-1px;margin-right:-1px;opacity:1.0}.docs-gm .docs-sheet-active-tab .docs-sheet-tab-dropdown:hover{background-color:#e6f4ea}.docs-gm .docs-sheet-active-tab .docs-sheet-tab-dropdown:active{background-color:#ceead6}.docs-gm .docs-sheet-tab-open .docs-sheet-tab-dropdown,.docs-gm .docs-sheet-tab-open .docs-sheet-tab-dropdown:hover{background-color:#e6f4ea}.docs-gm .docs-sheet-tab-edit .docs-sheet-tab-dropdown{display:none}.docs-sheet-tab-caption{margin-right:2px;vertical-align:middle;white-space:pre}.docs-gm .docs-sheet-tab-caption{margin-right:3px}.docs-sheet-tab-rtl .docs-sheet-tab-caption{margin-right:0;margin-left:2px}.docs-gm .docs-sheet-tab-rtl .docs-sheet-tab-caption{margin-left:3px}.docs-material .docs-sheet-tab-caption .docs-icon{float:none;margin:-3px 5px 0 0}.docs-gm .docs-material.docs-sheet-tab .docs-icon .docs-icon-arrow-dropdown{left:-40px;top:-4086px}.docs-gm .docs-material.docs-sheet-tab .docs-icon .docs-icon-comment-blank{left:-46px;top:-4562px}.docs-gm .docs-material.docs-sheet-tab .docs-icon .docs-icon-database{left:0;top:-1604px}.docs-gm .docs-material.docs-sheet-tab .docs-icon .docs-icon-locked{left:-52px;top:-3214px}.docs-gm .docs-material.docs-sheet-active-tab .docs-icon .docs-icon-arrow-dropdown{left:-46px;top:-3920px}.docs-gm .docs-material.docs-sheet-active-tab .docs-icon .docs-icon-comment-blank{left:-20px;top:-120px}.docs-gm .docs-material.docs-sheet-active-tab .docs-icon .docs-icon-database{left:0;top:-2342px}.docs-gm .docs-material.docs-sheet-active-tab .docs-icon .docs-icon-locked{left:-20px;top:-556px}.docs-sheet-tab-name{padding:3px 1px;font-size:13px;font-size:var(--docs-material-font-size-normal,13px)}.docs-gm .docs-sheet-tab-name{color:#80868b;display:inline-block;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;letter-spacing:.025rem}.docs-gm .docs-sheet-active-tab .docs-sheet-tab-name{color:#188038}.docs-sheet-tab-name[contenteditable="true"]{border:1px solid #d9d9d9;display:inline-block;height:16px;min-width:8px;margin:-4px -1px;-moz-user-modify:read-write-plaintext-only;-webkit-user-modify:read-write-plaintext-only;-moz-user-select:text!important;-ms-user-select:text!important;-webkit-user-select:text!important}.docs-gm .docs-sheet-tab-name[contenteditable="true"]{border:2px solid #1a73e8;border-radius:4px;color:#222;height:auto;margin:0 -5px 0 -5px;padding:4px 22px 4px 4px}.docs-sheet-tab-name[contenteditable="true"]:focus{box-shadow:inset 0 1px 2px rgba(0,0,0,0.3);border:1px solid #4d90fe;outline:none}.docs-gm .docs-sheet-tab-name[contenteditable="true"]:focus{border:2px solid #1a73e8;box-shadow:none}.docs-sheet-tab-name-error{border-color:red!important}.docs-sheet-button-inner-box{width:25px;height:25px}.docs-sheet-button,.docs-sheet-menu-button{margin:0 3px;cursor:pointer}.docs-gm .docs-sheet-button{border:1px solid transparent;border-radius:2px;outline:none}.docs-gm .docs-sheet-button-hover{background-color:#f1f3f4}.docs-gm .docs-sheet-button-active{background-color:#e8eaed}.docs-gm .docs-sheet-button-open{background-color:#e6f4ea}.docs-sheet-button-outer-box,.docs-sheet-button-inner-box{border-style:solid;vertical-align:top;border-color:transparent}.docs-sheet-button-disabled,.docs-sheet-button-disabled .docs-sheet-button-outer-box,.docs-sheet-button-disabled .docs-sheet-button-inner-box{cursor:default}.docs-sheet-tab .docs-icon-locked{margin-left:-3px}.docs-material .docs-sheet-tab .docs-icon-locked{margin-left:0}.docs-icon.docs-sheet-lock-container{float:left;margin-top:-3px;width:16px}.docs-sheet-comment-indicator-container{float:left;margin-top:-3px;width:22px}.docs-icon-img-container.docs-sheet-database-icon{width:18px;height:18px;margin-top:2px}.docs-material .docs-icon-img-container.docs-sheet-database-icon{margin-top:0}.docs-sheet-database-icon{background:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBmaWxsPSIjMDAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgPGVsbGlwc2UgY3g9IjkiIGN5PSI1IiByeD0iNyIgcnk9IjMiLz4KICAgIDxwYXRoIGQ9Ik0xNiw3IEwxNiw4Ljk5OTk5OTgzIEMxNiwxMC42NTY4NTQyIDEyLjg2NTk5MzIsMTIgOSwxMiBDNS4xMzQwMDY3NSwxMiAyLDEwLjY1Njg1NDIgMiw5IEwyLDcgQzIsOC42NTY4NTQyNSA1LjEzNDAwNjc1LDEwIDksMTAgQzEyLjg2NTk5MzIsMTAgMTYsOC42NTY4NTQyNSAxNiw3IFoiLz4KICAgIDxwYXRoIGQ9Ik0xNiwxMSBMMTYsMTIuOTk5OTk5OCBDMTYsMTQuNjU2ODU0MiAxMi44NjU5OTMyLDE2IDksMTYgQzUuMTM0MDA2NzUsMTYgMiwxNC42NTY4NTQyIDIsMTMgTDIsMTEgQzIsMTIuNjU2ODU0MiA1LjEzNDAwNjc1LDE0IDksMTQgQzEyLjg2NTk5MzIsMTQgMTYsMTIuNjU2ODU0MiAxNiwxMSBaIi8+CiAgPC9nPgo8L3N2Zz4K") no-repeat}.docs-sheet-database-icon-container{float:left;margin-top:-3px;width:20px}.docs-sheet-form-icon-container{float:left;margin-top:-3px;opacity:0.5;width:22px}.docs-sheet-active-tab .docs-sheet-form-icon-container{opacity:1}.docs-sheet-comment-indicator{display:block;height:16px;line-height:12px;width:16px;position:absolute;top:4px;left:3px;margin-top:0px}.docs-material .docs-sheet-comment-indicator{height:12px;left:1px;line-height:12px;top:2px}.docs-sheet-all-sheet-menu-item{white-space:nowrap}.docs-sheet-all-sheet-menu-item-hidden .goog-menuitem-content{color:#888}.docs-sheet-all-sheet-menu-item-swatch{border-radius:9px;display:inline-block;height:9px;margin-right:8px;width:9px}.docs-sheet-status-container{width:158px;overflow:hidden;padding:0;border-left:1px solid #ccc}.docs-sheet-status-container-avs{overflow:hidden;padding:0}.docs-sheet-status{max-width:150px;float:right;margin-right:8px;overflow:hidden}.docs-sheet-status-avs{max-width:150px;float:right;margin-right:8px;overflow:hidden;position:relative;top:3px}.docs-gm .docs-sheet-status-avs{top:4px;max-width:170px}.docs-sheet-status>.jfk-select{line-height:29px;margin:0 3px 0 6px;max-width:119px}.docs-sheet-status-avs>.jfk-select{line-height:29px;max-width:119px}.docs-gm .docs-sheet-status-avs .goog-flat-menu-button{border:1px solid #dadce0;border-radius:4px;box-sizing:border-box;cursor:pointer;padding:8px 6px 8px 8px;width:100%;align-items:center;background:white;color:#3c4043;display:inline-flex;justify-content:space-between;outline:none;padding:4px;position:relative;max-width:139px;width:auto;width:unset}.docs-gm .docs-sheet-status-avs .goog-flat-menu-button-disabled{color:#5f6368;opacity:.38;cursor:default}.docs-gm .docs-sheet-status-avs .goog-flat-menu-button:active{background-color:#fff;border:1px solid transparent;box-shadow:0 2px 6px 2px rgba(60,64,67,.15)}.docs-gm .docs-sheet-status-avs .goog-flat-menu-button-hover{background-color:rgba(60,64,67,0.04);border:1px solid #dadce0;box-shadow:none}.docs-gm .docs-sheet-status-avs .goog-flat-menu-button-focused{background-color:rgba(60,64,67,0.06);border:1px solid #dadce0}.docs-gm .docs-sheet-status-avs .goog-flat-menu-button-open{background-color:rgba(60,64,67,0.04);border:1px solid transparent}.docs-gm .docs-sheet-status-avs .goog-flat-menu-button-hover.goog-flat-menu-button-open{background-color:rgba(60,64,67,0.06)}.docs-gm .docs-sheet-status-avs .goog-flat-menu-button-focused.goog-flat-menu-button-open{background-color:rgba(60,64,67,0.08)}.docs-gm .docs-sheet-status-avs .goog-flat-menu-button-disabled{border:1px solid #dadce0;box-shadow:none;cursor:default}.docs-gm .docs-sheet-status-avs .goog-flat-menu-button-caption{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;color:#202124;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;height:20px;line-height:20px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11px}.docs-gm .docs-sheet-status-avs .goog-flat-menu-button-disabled .goog-flat-menu-button-caption{color:#5f6368;opacity:.38;cursor:default}.docs-gm .docs-sheet-status-avs .goog-flat-menu-button-dropdown{background:no-repeat url(//ssl.gstatic.com/docs/common/material_common_sprite146_grey_medium.svg) -46px -3920px;height:18px;width:18px;border:none;margin-top:0;position:relative;right:0;top:0}.docs-gm .docs-sheet-status-avs .goog-flat-menu-button-disabled .goog-flat-menu-button-dropdown{opacity:.38}.docs-gm .docs-sheet-status-avs .goog-flat-menu-button-disabled.goog-flat-menu-button:active{border:1px solid #dadce0;box-shadow:none;cursor:default;box-shadow:none}.docs-gm .docs-sheet-status-avs .goog-flat-menu-button-open .goog-flat-menu-button-dropdown{-moz-transform:rotate(180deg);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.docs-gm .docs-sheet-status-avs .jfk-radiobutton-disabled .jfk-radiobutton-label{color:#5f6368;opacity:.38;cursor:default}.docs-sheet-status .goog-flat-menu-button-caption,.docs-sheet-status-avs .goog-flat-menu-button-caption{text-overflow:ellipsis}.waffle-quicksum-container{color:#333;font-size:11px;font-weight:500;height:30px;line-height:30px;margin-right:22px;overflow:hidden;text-align:right}.waffle-autovis-quicksum{height:34px;margin:1px}.jfk-button.waffle-autovis-quicksum-button{border:1px solid transparent;cursor:pointer;height:28px;margin:0;padding:2px;position:relative;width:154px}.docs-sheet-fade{position:absolute;display:block;top:0;width:6px;height:100%;z-index:1005}.docs-sheet-fade div{background-color:#d7d7d7;width:2px;float:right;position:relative;height:100%}.docs-sheet-fade-left{left:0}.docs-sheet-fade-right{right:0}.docs-sheet-fade1{opacity:0.82;filter:alpha(opacity=82)}.docs-sheet-fade2{opacity:0.62;filter:alpha(opacity=62)}.docs-sheet-fade3{opacity:0.4;filter:alpha(opacity=40)}.waffle-slicereditor-sidebar.waffle-sidebar-container{width:320px;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;z-index:2}.waffle-slicer-editor-send-feedback-container{text-align:end}.waffle-slicer-editor-style-tab .waffle-slicer-editor-style-format-option,.waffle-slicer-editor-style-color-option-non-gm .docs-charts-editor-material-toolbar-color-picker-outer-box{background-color:#f1f3f4}.goog-menu-vertical .waffle-slicer-editor-column-selector-menu-seperator{margin-left:0}.waffle-slicer-editor-column-selector-menu-item{display:flex;border:1px solid transparent;line-height:20px;margin:0;padding:5px;width:286px}.waffle-slicer-editor-column-selector-menu-item-name{-ms-flex:1;-webkit-flex:1;flex:1;margin:0 20px 0 10px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.waffle-slicer-editor-column-selector-menu-item-range{display:flex;opacity:0.5;max-width:143px}.waffle-slicer-editor-column-selector-menu-item-rect{-ms-flex:1;-webkit-flex:1;flex:1}.waffle-slicer-editor-column-selector-menu-item-sheet-name{overflow:hidden;text-overflow:ellipsis}.waffle-slicer-editor-setup-tab .waffle-slicer-editor-style-tab{width:100%}.waffle-slicer-editor-sidebar-col{width:50%;margin-right:10px}.waffle-slicer-editor-sidebar-col:last-child{margin-right:0}.waffle-slicer-editor-sidebar-control-label{color:#616161;font-size:11px;line-height:16px;margin-bottom:8px;margin-right:2px}.waffle-slicer-editor-sidebar-custom-row{display:flex}.waffle-slicer-editor-sidebar-title-input-box{width:100%}.waffle-slicer-editor-sidebar-title-input-box>input{border-left:none;border-right:none;border-top:none;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:18px;height:100%;padding:0;width:100%}.waffle-slicer-editor-sidebar-title-input-box>input:disabled{opacity:0.75}.waffle-slicer-editor-sidebar-title-input-box>input:focus{border:none;border-bottom:2px solid #4285f4}.waffle-slicer-editor-sidebar-row{padding:10px 16px}.waffle-slicer-editor-sidebar-align .goog-toolbar-menu-button-dropdown{margin:0}.waffle-slicer-editor-sidebar-align-menu-items .goog-palette-table{border:0;margin:0 4px}.waffle-slicer-editor-sidebar-align-menu-items .goog-palette-cell{border:0;padding:2px}.waffle-slicer-editor-sidebar-align-menu-items .goog-palette-cell-hover{background:#eeeeee}.waffle-slicer-editor-sidebar-rangepicker-error-label{color:#db4437;font-size:13px}.waffle-slicer-editor-apply-to-pivot-table-row{display:flex;-webkit-align-items:center;align-items:center}.waffle-slicer-editor-apply-to-pivot-table-checkbox{display:flex}.waffle-slicer-editor-apply-to-pivot-table-checkbox-label{-ms-flex:1;-webkit-flex:1;flex:1;margin:0 5px}.waffle-slicer-editor-sidebar-title-format{border:1px solid #dadce0;border-radius:4px;display:inline-block;height:40px;line-height:40px}.waffle-slicer-editor-textstyle-separator{border-left:1px solid #dadce0;height:25px;margin:7px 1px;vertical-align:top}.docs-gm .waffle-gm-sidebar .waffle-slicer-editor-sidebar-title-input{transition:border-color 0.3s ease;color:#3c4043;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;height:42px;line-height:36px;margin-bottom:0;min-height:42px;resize:none}.docs-gm .waffle-gm-sidebar .waffle-slicer-editor-sidebar-title-input-label{color:#5f6368;font-size:12px;line-height:15px;margin-bottom:8px}.docs-multi-menu-col{float:left}.docs-multi-menu-col .goog-menuheader{color:#777;font-size:11px;padding:.3em .5em .3em 0.5em;text-transform:uppercase}.dialog-separator{border-bottom:1px solid #e5e5e5;margin:0 -42px 20px}.nfd-inputall,.nfd-input,.nfd-apply,.nfd-inner-input-content{display:inline-block}.nfd-inputall .nfd-input{font-size:13px;height:auto;height:unset;padding:4px 8px;width:300px}.nfd-input input{border:none;font-size:13px;margin:0;outline:none;padding:0;width:100%}.nfd-input{min-height:18px;position:relative}.nfd-input.nfd-input-focus{border:1px solid #4d90fe;box-shadow:inset 0 1px 2px rgba(0,0,0,0.3);outline:none}.nfd-input span:focus{outline:none}.nfd-date-time-left-most{display:inline-block;min-width:1px}.jfk-button.nfd-apply{margin-left:10px;margin-right:0;vertical-align:top}.nfd-inner-input-content{text-align:right}.nfd-input .goog-flat-menu-button{line-height:17px}.nfd-date-time-input{position:relative;transform:translateZ(0)}.nfd-date-time-input .goog-flat-menu-button{margin:1px 2px}.nfd-input .jfk-select .goog-flat-menu-button-dropdown{margin-top:-9px}.nfd-input table{border-spacing:0;width:100%}.nfd-inner-input{min-width:25px;width:100%}.nfd-dialog.modal-dialog-content{width:400px}.nfd-dialog-content{border:1px solid #e5e5e5;cursor:pointer;height:400px;margin-top:22px;overflow-y:scroll;-webkit-tap-highlight-color:transparent}.nfd-dialog-content ul{list-style:none;margin:0;padding:0}.nfd-format-pill{border-bottom:1px solid #e5e5e5;border-left:1px solid transparent;font-size:15px;padding:16px;position:relative}.nfd-format-pill:focus{border-left:1px solid #4d90fe;outline:none}.nfd-format-pill:hover{background-color:#f1f1f1}.nfd-format-display{display:inline-block}.nfd-format-sample{color:#777;display:inline-block;position:absolute;right:20px}.nfd-pill-container li:last-child{border-bottom:none}.cnf-sample-table{border-spacing:0;display:inline-table}.cnf-sample-wrapper{position:relative}.cnf-help-link{position:absolute;right:0}td.nfd-sample-label{color:#777;padding-left:0;padding-right:5px}.number-format-menu .goog-menuitem{padding-right:1em}.nfd-date-time-menu-button{float:right;top:5px}.nfd-date-time-menu-button:focus{outline:none}.nfd-input.nfd-invalid{border:1px solid #dd4b39}.nfd-date-time-menu .goog-menuitem{padding-left:6px;padding-right:4em}.docs-gm .nfd-dialog.modal-dialog{padding:24px}.docs-gm .nfd-dialog .dialog-separator{display:none}.docs-gm .nfd-inputall .nfd-input{height:initial;margin-top:0;min-height:36px;overflow-x:auto;padding:2px 8px;width:366px}.docs-gm .nfd-input>input{height:18px;padding:6px 0}.docs-gm .nfd-inner-input{height:16px;line-height:16px;padding:7px 0}.docs-gm .nfd-input.nfd-input-focus{box-shadow:none;border:2px solid #1a73e8;box-shadow:none;padding:0px 7px}.docs-gm .nfd-input.nfd-input-focus>input{padding:7px 0}.docs-gm .nfd-input.nfd-input-focus .nfd-inner-input{padding:8px 0}.docs-gm .nfd-input input{font-size:inherit}.docs-gm .nfd-dialog.modal-dialog-content{min-width:464px;width:auto;width:unset}.docs-gm .nfd-dialog-content{margin-top:8px}.docs-gm .nfd-input .goog-flat-menu-button{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:white;border:1px solid #dadce0!important;color:#188038;height:24px;padding:3px 12px 5px;border-radius:24px;color:#3c4043;font-size:12px;padding:3px 24px 3px 10px}.docs-gm .nfd-input .goog-flat-menu-button-caption{font-weight:500}.docs-gm .nfd-input .goog-flat-menu-button.goog-flat-menu-button-hover{background:#f8f9fa}.docs-gm .nfd-date-time-pill{margin:2px 0}.docs-gm .nfd-input .nfd-currency-other-formats{padding-top:4px;margin-right:0}.docs-gm .nfd-date-time-menu-button{background:no-repeat url(//ssl.gstatic.com/docs/common/material_common_sprite146.svg) 0 -864px;border:none;height:18px;margin:6px 0;position:fixed;right:108px;top:2px;width:18px}.docs-gm .nfd-input .goog-flat-menu-button-dropdown{background:no-repeat url(//ssl.gstatic.com/docs/common/material_common_sprite146.svg) -20px -282px;height:18px;left:18px;top:0;width:18px}.docs-gm .jfk-button.nfd-apply{margin-left:9px}.goog-palette{cursor:default;outline:none}.goog-palette-table{border:1px solid #666;border-collapse:collapse;margin:5px}.goog-palette-cell{border:0;border-right:1px solid #666;cursor:pointer;height:18px;margin:0;text-align:center;vertical-align:middle;width:18px}.goog-palette-cell .goog-palette-colorswatch{border:none;font-size:x-small;height:18px;position:relative;width:18px}.goog-palette-cell-hover .goog-palette-colorswatch{border:1px solid #fff;height:16px;width:16px}.goog-palette-cell-selected .goog-palette-colorswatch{background:url(//ssl.gstatic.com/editor/editortoolbar.png) no-repeat -368px 0;border:1px solid #333;color:#fff;font-weight:bold;height:16px;width:16px}.goog-palette-customcolor{background-color:#fafafa;border:1px solid #eee;color:#666;font-size:x-small;height:15px;position:relative;width:15px}.goog-palette-cell-hover .goog-palette-customcolor{background-color:#fee;border:1px solid #f66;color:#f66}.goog-color-menu-button-indicator{border-bottom:4px solid #f0f0f0}.goog-color-menu-button .goog-menu-button-inner-box,.goog-toolbar-color-menu-button .goog-toolbar-menu-button-inner-box{padding-top:2px!important;padding-bottom:2px!important}.goog-tab{position:relative;padding:4px 8px;color:#00c;text-decoration:underline;cursor:default}.goog-tab-bar-top .goog-tab{margin:1px 4px 0 0;border-bottom:0;float:left}.goog-tab-bar-top:after,.goog-tab-bar-bottom:after{content:" ";display:block;height:0;clear:both;visibility:hidden}.goog-tab-bar-bottom .goog-tab{margin:0 4px 1px 0;border-top:0;float:left}.goog-tab-bar-start .goog-tab{margin:0 0 4px 1px;border-right:0}.goog-tab-bar-end .goog-tab{margin:0 1px 4px 0;border-left:0}.goog-tab-hover{background:#eee}.goog-tab-disabled{color:#666}.goog-tab-selected{color:#000;background:#fff;text-decoration:none;font-weight:bold;border:1px solid #6b90da}.goog-tab-bar-top{padding-top:5px!important;padding-left:5px!important;border-bottom:1px solid #6b90da!important}.goog-tab-bar-top .goog-tab-selected{top:1px;margin-top:0;padding-bottom:5px}.goog-tab-bar-bottom .goog-tab-selected{top:-1px;margin-bottom:0;padding-top:5px}.goog-tab-bar-start .goog-tab-selected{left:1px;margin-left:0;padding-right:9px}.goog-tab-bar-end .goog-tab-selected{left:-1px;margin-right:0;padding-left:9px}.goog-tab-bar{margin:0;border:0;padding:0;list-style:none;cursor:default;outline:none;background:#ebeff9}.goog-tab-bar-clear{clear:both;height:0;overflow:hidden}.goog-tab-bar-start{float:left}.goog-tab-bar-end{float:right}* html .goog-tab-bar-start{margin-right:-3px}* html .goog-tab-bar-end{margin-left:-3px}.jfk-scrollbar::-webkit-scrollbar{height:16px;overflow:visible;width:16px}.jfk-scrollbar::-webkit-scrollbar-button{height:0;width:0}.jfk-scrollbar::-webkit-scrollbar-track{background-clip:padding-box;border:solid transparent;border-width:0 0 0 4px}.jfk-scrollbar::-webkit-scrollbar-track:horizontal{border-width:4px 0 0}.jfk-scrollbar::-webkit-scrollbar-track:hover{background-color:rgba(0,0,0,.05);box-shadow:inset 1px 0 0 rgba(0,0,0,.1)}.jfk-scrollbar::-webkit-scrollbar-track:horizontal:hover{box-shadow:inset 0 1px 0 rgba(0,0,0,.1)}.jfk-scrollbar::-webkit-scrollbar-track:active{background-color:rgba(0,0,0,.05);box-shadow:inset 1px 0 0 rgba(0,0,0,.14),inset -1px 0 0 rgba(0,0,0,.07)}.jfk-scrollbar::-webkit-scrollbar-track:horizontal:active{box-shadow:inset 0 1px 0 rgba(0,0,0,.14),inset 0 -1px 0 rgba(0,0,0,.07)}.jfk-scrollbar-dark.jfk-scrollbar::-webkit-scrollbar-track:hover{background-color:rgba(255,255,255,.1);box-shadow:inset 1px 0 0 rgba(255,255,255,.2)}.jfk-scrollbar-dark.jfk-scrollbar::-webkit-scrollbar-track:horizontal:hover{box-shadow:inset 0 1px 0 rgba(255,255,255,.2)}.jfk-scrollbar-dark.jfk-scrollbar::-webkit-scrollbar-track:active{background-color:rgba(255,255,255,.1);box-shadow:inset 1px 0 0 rgba(255,255,255,.25),inset -1px 0 0 rgba(255,255,255,.15)}.jfk-scrollbar-dark.jfk-scrollbar::-webkit-scrollbar-track:horizontal:active{box-shadow:inset 0 1px 0 rgba(255,255,255,.25),inset 0 -1px 0 rgba(255,255,255,.15)}.jfk-scrollbar::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.2);background-clip:padding-box;border:solid transparent;border-width:1px 1px 1px 6px;min-height:28px;padding:100px 0 0;box-shadow:inset 1px 1px 0 rgba(0,0,0,.1),inset 0 -1px 0 rgba(0,0,0,.07)}.jfk-scrollbar::-webkit-scrollbar-thumb:horizontal{border-width:6px 1px 1px;padding:0 0 0 100px;box-shadow:inset 1px 1px 0 rgba(0,0,0,.1),inset -1px 0 0 rgba(0,0,0,.07)}.jfk-scrollbar::-webkit-scrollbar-thumb:hover{background-color:rgba(0,0,0,.4);box-shadow:inset 1px 1px 1px rgba(0,0,0,.25)}.jfk-scrollbar::-webkit-scrollbar-thumb:active{background-color:rgba(0,0,0,0.5);box-shadow:inset 1px 1px 3px rgba(0,0,0,0.35)}.jfk-scrollbar-dark.jfk-scrollbar::-webkit-scrollbar-thumb{background-color:rgba(255,255,255,.3);box-shadow:inset 1px 1px 0 rgba(255,255,255,.15),inset 0 -1px 0 rgba(255,255,255,.1)}.jfk-scrollbar-dark.jfk-scrollbar::-webkit-scrollbar-thumb:horizontal{box-shadow:inset 1px 1px 0 rgba(255,255,255,.15),inset -1px 0 0 rgba(255,255,255,.1)}.jfk-scrollbar-dark.jfk-scrollbar::-webkit-scrollbar-thumb:hover{background-color:rgba(255,255,255,.6);box-shadow:inset 1px 1px 1px rgba(255,255,255,.37)}.jfk-scrollbar-dark.jfk-scrollbar::-webkit-scrollbar-thumb:active{background-color:rgba(255,255,255,.75);box-shadow:inset 1px 1px 3px rgba(255,255,255,.5)}.jfk-scrollbar-borderless.jfk-scrollbar::-webkit-scrollbar-track{border-width:0 1px 0 6px}.jfk-scrollbar-borderless.jfk-scrollbar::-webkit-scrollbar-track:horizontal{border-width:6px 0 1px}.jfk-scrollbar-borderless.jfk-scrollbar::-webkit-scrollbar-track:hover{background-color:rgba(0,0,0,.035);box-shadow:inset 1px 1px 0 rgba(0,0,0,.14),inset -1px -1px 0 rgba(0,0,0,.07)}.jfk-scrollbar-borderless.jfk-scrollbar-dark.jfk-scrollbar::-webkit-scrollbar-track:hover{background-color:rgba(255,255,255,.07);box-shadow:inset 1px 1px 0 rgba(255,255,255,.25),inset -1px -1px 0 rgba(255,255,255,.15)}.jfk-scrollbar-borderless.jfk-scrollbar::-webkit-scrollbar-thumb{border-width:0 1px 0 6px}.jfk-scrollbar-borderless.jfk-scrollbar::-webkit-scrollbar-thumb:horizontal{border-width:6px 0 1px}.jfk-scrollbar::-webkit-scrollbar-corner{background:transparent}body.jfk-scrollbar::-webkit-scrollbar-track-piece{background-clip:padding-box;background-color:#f5f5f5;border:solid #fff;border-width:0 0 0 3px;box-shadow:inset 1px 0 0 rgba(0,0,0,.14),inset -1px 0 0 rgba(0,0,0,.07)}body.jfk-scrollbar::-webkit-scrollbar-track-piece:horizontal{border-width:3px 0 0;box-shadow:inset 0 1px 0 rgba(0,0,0,.14),inset 0 -1px 0 rgba(0,0,0,.07)}body.jfk-scrollbar::-webkit-scrollbar-thumb{border-width:1px 1px 1px 5px}body.jfk-scrollbar::-webkit-scrollbar-thumb:horizontal{border-width:5px 1px 1px}body.jfk-scrollbar::-webkit-scrollbar-corner{background-clip:padding-box;background-color:#f5f5f5;border:solid #fff;border-width:3px 0 0 3px;box-shadow:inset 1px 1px 0 rgba(0,0,0,.14)}#docs-toolbar-wrapper{border-top:1px solid #d9d9d9;border-bottom:1px solid #d9d9d9;min-height:35px;box-shadow:inset 0 1px 0 0 #fff;background-color:#f5f5f5;background-image:-webkit-linear-gradient(top,#f5f5f5,#eee);background-image:-moz-linear-gradient(top,#f5f5f5,#eee);background-image:-ms-linear-gradient(top,#f5f5f5,#eee);background-image:-o-linear-gradient(top,#f5f5f5,#eee);background-image:linear-gradient(top,#f5f5f5,#eee);padding:0 44px 0 58px;position:relative}#docs-toolbar{background:none;border-width:0!important;display:inline;min-height:35px;padding:0}#docs-primary-toolbars{display:block}#docs-omnibox-toolbar{background:none;border-width:0!important;display:inline-block;padding:0;vertical-align:middle;width:182px;overflow:hidden}#docs-side-toolbar{background:none;border:0;margin:0 44px 0 0;padding:0;position:absolute;right:0;top:0}.goog-toolbar{margin-bottom:0;outline:0}.goog-toolbar-button,.goog-toolbar-menu-button{margin:4px 0 0 -1px}.goog-toolbar-button-inner-box,.goog-toolbar-menu-button-inner-box{height:25px;min-width:25px;padding:0;text-align:center}.docs-toolbar-button-split-left .goog-toolbar-button-inner-box{min-width:23px}.goog-toolbar-button-inner-box .docs-icon,.goog-toolbar-menu-button-caption .docs-icon,.goog-toolbar-menu-button-caption .goog-color-menu-button-indicator .docs-icon{margin-top:-3px}.goog-toolbar-menu-button .goog-toolbar-menu-button-outer-box .goog-toolbar-menu-button-inner-box,.goog-toolbar-button .goog-toolbar-menu-button-outer-box .goog-toolbar-menu-button-inner-box{margin:0 1px}.goog-toolbar-menu-button-dropdown{margin-left:4px;margin-right:0;margin-top:9px}.goog-toolbar-color-menu-button .goog-toolbar-menu-button-dropdown{margin-top:7px}.goog-toolbar-separator.goog-inline-block{border-left:1px solid #d9d9d9;height:35px;margin:0 5px 0 4px;vertical-align:top}.goog-toolbar-select .goog-toolbar-menu-button-outer-box .goog-toolbar-menu-button-inner-box{margin:0;margin-right:1px}.goog-color-menu-button-indicator{position:relative;height:19px}.goog-toolbar-color-menu-button .goog-toolbar-menu-button-caption{top:-2px}.docs-toolbar-small-separator.goog-toolbar-separator{border-left:1px solid #ccc;display:inline;font-size:11px;height:17px;line-height:normal;list-style:none;margin:0 -3px 0 -1px;outline:none;overflow:hidden;padding:0 0 3px 0;text-decoration:none;vertical-align:middle;width:0}.docs-toolbar-small-separator.goog-toolbar-separator,.docs-toolbar-small-separator.goog-toolbar-separator{display:inline-block;height:35px;margin:0 5px 0 4px;padding:0;vertical-align:top}.docs-toolbar-small-separator.goog-toolbar-separator+.docs-toolbar-small-separator.goog-toolbar-separator{display:none}.goog-toolbar-button+div.docs-toolbar-small-separator,div.goog-toolbar-separator+div.docs-toolbar-small-separator,div.goog-toolbar-menu-button+div.docs-toolbar-small-separator{margin-left:3px}.docs-toolbar-small-separator+div.goog-toolbar-button,.docs-toolbar-small-separator+div.goog-toolbar-menu-button,.docs-toolbar-small-separator+div[class~=goog-toolbar-select]{margin-left:-1px}div[class~="goog-toolbar-select"]+div.docs-toolbar-small-separator{margin-left:-1px}.docs-toolbar-small-separator+div.goog-toolbar-select{margin-left:-3px}.docs-toolbar-inset-separator.docs-toolbar-small-separator{border-left:1px solid 1px solid #d9d9d9;height:20px;margin:5px 5px 0 4px;vertical-align:middle}.goog-toolbar-toggle-button.goog-toolbar-button-checked+.goog-toolbar-toggle-button.goog-toolbar-button-checked{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0;margin-left:-1px}.goog-toolbar-toggle-button.goog-toolbar-button-checked+.goog-toolbar-toggle-button.goog-toolbar-button-checked .goog-toolbar-button-outer-box .goog-toolbar-button-inner-box,.goog-toolbar-toggle-button.goog-toolbar-button-checked+.goog-toolbar-toggle-button.goog-toolbar-button-checked.goog-toolbar-button-hover .goog-toolbar-button-outer-box .goog-toolbar-button-inner-box{margin-left:1px}.goog-toolbar-button .docs-icon,.goog-toolbar-menu-button .docs-icon{opacity:.70}.goog-toolbar-button-hover .docs-icon,.goog-toolbar-button-selected .docs-icon,.goog-toolbar-button-checked .docs-icon,.goog-toolbar-menu-button-hover .docs-icon,.goog-toolbar-menu-button-selected .docs-icon,.goog-toolbar-menu-button-checked .docs-icon{opacity:0.9}.goog-toolbar-button-active .docs-icon,.goog-toolbar-menu-button-open .docs-icon{opacity:1.0}.goog-toolbar-select .goog-toolbar-menu-button-outer-box .goog-toolbar-menu-button-inner-box .goog-toolbar-menu-button-caption{margin-left:10px;text-align:left}.goog-toolbar-select .goog-toolbar-menu-button-outer-box .goog-toolbar-menu-button-inner-box .goog-toolbar-menu-button-dropdown{margin-left:5px;margin-right:4px}.docs-toolbar-button-split-left,.docs-toolbar-button-split-left *{border-top-right-radius:0!important;border-bottom-right-radius:0!important}.docs-toolbar-button-split-right,.docs-toolbar-button-split-right *{border-top-left-radius:0!important;border-bottom-left-radius:0!important;min-width:5px!important}.docs-toolbar-button-split-right .goog-toolbar-menu-button-dropdown{margin-left:3px}.docs-toolbar-button-split-sympathy-hover{border-color:#c6c6c6}.docs-toolbar-button-split-left .goog-toolbar-button-hover,.docs-toolbar-button-split-right .goog-toolbar-button-hover{z-index:1}.docs-toolbar-split-create-button.goog-toolbar-menu-button{margin-right:4px}.docs-toolbar-split-create-button .goog-toolbar-menu-button-dropdown{background:url(//ssl.gstatic.com/ui/v1/disclosure/small-grey-disclosure-arrow-down.png) center no-repeat;height:7px;margin-top:9px;opacity:1}.docs-toolbar-split-create-button{background-color:#f5f5f5;background-image:-webkit-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:-moz-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:-ms-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:-o-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:linear-gradient(top,#f5f5f5,#f1f1f1);border-color:#c6c6c6!important}.docs-toolbar-split-create-button.goog-toolbar-button-disabled{border-right-color:#fff!important}.docs-toolbar-split-create-button.goog-toolbar-button-hover,.docs-toolbar-split-create-button.goog-toolbar-menu-button-hover{background-color:#f8f8f8;background-image:-webkit-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-moz-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-ms-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-o-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:linear-gradient(top,#f8f8f8,#f1f1f1);border-color:#c6c6c6!important}.docs-toolbar-split-create-button.goog-toolbar-button-active,.docs-toolbar-split-create-button.goog-toolbar-menu-button-active{background-color:#f8f8f8;background-image:-webkit-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-moz-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-ms-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-o-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:linear-gradient(top,#f8f8f8,#f1f1f1);border-color:#c6c6c6!important}.docs-toolbar-split-create-button .docs-icon{opacity:1}.docs-toolbar-text-button .goog-toolbar-button-outer-box,.docs-toolbar-text-button .goog-toolbar-menu-button-outer-box{padding-left:4px}.docs-toolbar-text-button .goog-toolbar-button-outer-box{padding-right:4px}.goog-toolbar-menu-button-outer-box{padding-right:3px}.goog-toolbar-menu-button-arrow-hidden.goog-toolbar-menu-button-outer-box{padding-right:0px}.jfk-bubble.docs-toolbar-more-bubble{padding:0px;z-index:902!important}.docs-toolbar-more-bubble .jfk-bubble-arrowup .jfk-bubble-arrowimplafter{border-color:#eee transparent}.docs-toolbar-more-toolbar{background:#eee;border:0;min-height:35px;padding:0 0 0 10px}.docs-collapsable-toolbar{white-space:nowrap}.docs-collapsable-toolbar-control{white-space:normal}.docs-hc-gecko .docs-icon-img{filter:invert(100%)}.docs-hc-gecko .docs-icon-img.docs-icon-document,.docs-hc-gecko .docs-icon-img.docs-icon-punch,.docs-hc-gecko .docs-icon-img.docs-icon-presentation,.docs-hc-gecko .docs-icon-img.docs-icon-spreadsheet,.docs-hc-gecko .docs-icon-img.docs-icon-form,.docs-hc-gecko .docs-icon-img.docs-icon-drawing,.docs-hc-gecko .docs-icon-img.docs-icon-script,.docs-hc-gecko .docs-icon-img.docs-icon-site{filter:none}.docs-hc-ie .docs-icon-img{-ms-high-contrast-adjust:none;background-color:white}.docs-icon-toolbar-button-with-text{padding-left:4px;padding-right:4px}.docs-icon-toolbar-button-with-text .docs-icon-toolbar-button-with-text-icon-container{margin-right:4px}.google-visualization-clickeditor-bubble.jfk-bubble{padding:3px;z-index:inherit!important;background-color:#f5f5f5;font-family:Arial,san-serif;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;border-color:#dadada}.google-visualization-clickeditor-bubble .jfk-bubble-arrowdown .jfk-bubble-arrowimplafter,.google-visualization-clickeditor-bubble .jfk-bubble-arrowup .jfk-bubble-arrowimplafter{border-color:#f5f5f5 transparent}.google-visualization-clickeditor-combobox .goog-toolbar-combo-button-input{width:28px;padding:0 0 0 3px;position:relative}.goog-menuitem .google-visualization-clickeditor-combobox-icon{position:absolute;top:4px;left:100px}.google-visualization-charteditor-menu .goog-menuheader{padding-left:10px;color:#888}.google-visualization-clickeditor-combobox .google-visualization-clickeditor-combobox-icon{position:absolute;height:100%;width:34px;top:0;left:0;background-color:#f5f5f5}.goog-toolbar-combo-button-open .google-visualization-clickeditor-combobox-icon{filter:alpha(opacity=0);opacity:0}.google-visualization-clickeditor-combobox-icon .docs-icon{margin:0 0 0 7px;filter:alpha(opacity=60);opacity:0.6}.google-visualization-clickeditor-bubble .goog-toolbar-combo-button,.google-visualization-clickeditor-bubble .goog-toolbar-menu-button,.google-visualization-clickeditor-bubble .goog-toolbar-button{margin:0;top:auto}.google-visualization-clickeditor-bubble .goog-toolbar-color-menu-button .goog-toolbar-menu-button-dropdown{top:-2px}.google-visualization-clickeditor-color .goog-color-menu-button-indicator{width:14px;height:0;border-bottom-width:14px;margin:6px;outline:1px solid #bbb}.google-visualization-clickeditor-tooltip{font-family:Arial,sans-serif;font-weight:normal;-webkit-transition:background-color .5s;-moz-transition:background-color .5s;-ms-transition:background-color .5s;-o-transition:background-color .5s;transition:background-color .5s}.google-visualization-clickeditor-bubble .goog-toolbar-separator{height:20px;vertical-align:middle;border-color:#ccc}.google-visualization-clickeditor-separator{width:98%;height:0;border:1px solid #f8f8f8;margin:3px}.google-visualization-clickeditor-input-box{padding:5px}.google-visualization-clickeditor-enter-msg{font-size:11px;color:#555;padding:4px}.google-visualization-clickeditor-bubble .google-visualization-charteditor-input:focus{outline-color:#008df0}.google-visualization-clickeditor-bubble .google-visualization-charteditor-input-inline-x,.google-visualization-clickeditor-bubble .google-visualization-charteditor-input-inline-y,.google-visualization-clickeditor-bubble .google-visualization-charteditor-input-inline-right{font-size:12px;margin:4px}.google-visualization-clickeditor-bubble .google-visualization-charteditor-input-inline-x{width:79px}.google-visualization-clickeditor-bubble .google-visualization-charteditor-input-inline-y,.google-visualization-clickeditor-bubble .google-visualization-charteditor-input-inline-right{width:52px}.google-visualization-clickeditor-bubble .google-visualization-charteditor-combobox,.google-visualization-clickeditor-bubble .goog-flat-menu-button{margin:0}.goog-flat-menu-button-disabled .goog-flat-menu-button-dropdown{border-color:#b8b8b8 transparent}.google-visualization-clickeditor-entity-cover{position:absolute;visibility:hidden;overflow:hidden;cursor:pointer}.google-visualization-clickeditor-entity-cover-stripes{position:absolute;top:0;width:100%;height:100%;background:url("//ssl.gstatic.com/charts/static/stripes.png") repeat;visibility:visible;filter:alpha(opacity=10);opacity:0.1}.google-visualization-clickeditor-entity-cover-top,.google-visualization-clickeditor-entity-cover-bottom,.google-visualization-clickeditor-entity-cover-left,.google-visualization-clickeditor-entity-cover-right{visibility:visible;background-color:#008ef1;width:1px;height:1px;position:absolute}.google-visualization-clickeditor-entity-cover-top,.google-visualization-clickeditor-entity-cover-bottom{width:100%}.google-visualization-clickeditor-entity-cover-left,.google-visualization-clickeditor-entity-cover-right{height:100%}.google-visualization-clickeditor-entity-cover-right{right:0}.google-visualization-clickeditor-entity-cover-left{left:0}.google-visualization-clickeditor-entity-cover-bottom{bottom:0}.google-visualization-clickeditor-entity-cover .google-visualization-clickeditor-mid-input{width:98%;filter:alpha(opacity=0);opacity:0}.google-visualization-clickeditor-entity-cover .google-visualization-clickeditor-mid-input:focus{filter:alpha(opacity=100);opacity:1}.google-visualization-clickeditor-header{height:30px;background-color:white;padding:3px;overflow:hidden}.google-visualization-clickeditor-header-text{margin-left:5px;font-family:Arial,sans-serif;font-size:12px;color:#999;white-space:nowrap}.jfk-button.google-visualization-clickeditor-header-view,.jfk-button.google-visualization-clickeditor-header-edit{z-index:0}.jfk-button.jfk-button-disabled.google-visualization-clickeditor-header-view,.jfk-button.jfk-button-disabled.google-visualization-clickeditor-header-edit{background:transparent;border:none;box-shadow:none;margin-top:1px;margin-left:1px;opacity:0.5}.google-visualization-clickeditor-header-view .docs-icon,.google-visualization-clickeditor-header-edit .docs-icon{margin-top:-3px;margin-left:-2px;filter:alpha(opacity=60);opacity:0.6}.jfk-button.google-visualization-clickeditor-header-edit{margin-right:5px}.google-visualization-clickeditor-context-icon{position:absolute;right:10px;padding:0 5px;top:2px}.jfk-button.jfk-button-disabled.google-visualization-clickeditor-resize,.jfk-button.jfk-button-disabled.google-visualization-clickeditor-fit-area{background:#f5f5f5}.google-visualization-clickeditor-resize,.google-visualization-clickeditor-fit-area{height:24px;line-height:24px;border-color:transparent;margin-right:2px}.google-visualization-clickeditor-resize .docs-icon,.google-visualization-clickeditor-fit-area .docs-icon{margin-top:-3px;filter:alpha(opacity=60);opacity:0.6}.google-visualization-clickeditor-resize-text,.google-visualization-clickeditor-fit-area-text{font-size:11px;font-weight:bold;color:#555;margin:0 5px}.google-visualization-resizer-overlay{position:absolute;visibility:hidden}.google-visualization-resizer-bar{background:url("//ssl.gstatic.com/charts/static/stripes.png") #ffffff;position:absolute;opacity:0.1;visibility:visible;width:100%;height:100%}.google-visualization-resizer-bar:hover{opacity:0.2}.google-visualization-resizer-bar-center{height:100%;width:100%;cursor:crosshair;position:absolute;top:0}.google-visualization-resizer-bar-north{height:10px;cursor:n-resize;top:0}.google-visualization-resizer-bar-south{height:10px;cursor:s-resize;position:absolute;bottom:0}.google-visualization-resizer-bar-east{width:10px;cursor:e-resize;position:absolute;right:0}.google-visualization-resizer-bar-west{width:10px;cursor:w-resize;position:absolute;left:0}.google-visualization-charteditor-dialog{height:508px;width:917px}.google-visualization-charteditor-dialog .modal-dialog-title{font-family:Arial,sans-serif}#google-visualization-charteditor-layout-table,.google-visualization-charteditor-custom-panel,#google-visualization-clickeditor,.google-visualization-charteditor-menu{color:#222;font-family:Arial,sans-serif;font-size:12px}.google-visualization-charteditor-small-input,.google-visualization-charteditor-mid-input,.google-visualization-charteditor-input{-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;border:1px solid #d9d9d9;border-top:1px solid silver;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;font-size:13px;height:16px;padding:5px 2px}.google-visualization-charteditor-dialog .goog-flat-menu-button-dropdown,.google-visualization-clickeditor-bubble .goog-flat-menu-button-dropdown,.google-visualization-charteditor-custom-panel .goog-flat-menu-button-dropdown{background:url(//ssl.gstatic.com/ui/v1/disclosure/small-grey-disclosure-arrow-down.png) center no-repeat;border-width:0;height:7px;opacity:0.8;position:absolute;top:10px;width:5px}.google-visualization-charteditor-dialog .goog-flat-menu-button,.google-visualization-clickeditor-bubble .goog-flat-menu-button,.google-visualization-charteditor-custom-panel .goog-flat-menu-button{height:14px;line-height:normal;margin:0 0 0 5px;min-width:0;padding:6px 0 6px 6px;text-align:left}#google-visualization-clickeditor .goog-flat-menu-button{min-width:34px}#google-visualization-charteditor-series-select-div.goog-flat-menu-button,#google-visualization-charteditor-axes-select-div.goog-flat-menu-button{margin:0;width:100%}#google-visualization-charteditor-select-legend-position{margin-left:0}.google-visualization-charteditor-axis-select-scale.goog-select{margin-left:0;margin-right:36px}#google-visualization-charteditor-select-legend-position .goog-flat-menu-button-caption{width:74px}#google-visualization-charteditor-layout-table,#google-visualization-clickeditor,.google-visualization-charteditor-custom-panel{border:0;font-size:12px;margin:0;padding:0}.google-visualization-charteditor-settings-td,.google-visualization-charteditor-custom-panel{overflow:hidden;padding:0 0 0 4px;position:relative;left:-4px;vertical-align:top;width:288px}.google-visualization-charteditor-custom-panel{height:420px;line-height:1.4em}.google-visualization-charteditor-preview-td{height:411px;left:346px;overflow:hidden;padding:0 0 0 6px;position:absolute;top:81px;vertical-align:top;width:602px}#google-visualization-charteditor-preview-example-template{color:#15c}#google-visualization-charteditor-help-link{color:#1111cc;float:right;font-size:12px;font-weight:normal}.google-visualization-charteditor-dialog-spinner-div{height:370px;position:relative;text-align:center}.google-visualization-charteditor-dialog-spinner{background:url('//ssl.gstatic.com/docs/spreadsheets/spinner.gif') no-repeat;height:20px;position:relative;top:155px;width:20px}#google-visualization-charteditor-panel-wrapper{float:left;height:373px;width:300px}#google-visualization-charteditor-preview-div-wrapper{border:1px solid #e4e4e4;padding:0;position:relative;top:8px}#google-visualization-charteditor-preview-div-chart{overflow:hidden}.google-visualization-charteditor-panel{height:100%;width:100%}.google-visualization-charteditor-panel-scroll{overflow:auto;position:relative}.google-visualization-charteditor-panel .goog-menu-button{cursor:default}#google-visualization-charteditor-custom-data-input{position:relative}#google-visualization-charteditor-custom-data-input .sites-gviz-datasource-control{outline:none}#google-visualization-charteditor-panel-navigate-div{border-bottom:1px solid #ccc;font-size:13px;line-height:1.5em;margin-bottom:15px;padding:5px 0 0 10px;width:900px}#google-visualization-charteditor-panel-navigate-div.goog-tab-bar{background:none;cursor:default;list-style:none;outline:none}.google-visualization-charteditor-panel-navigation-cell.goog-tab{background:white;border:none;color:#666;cursor:default;padding:3px 10px;position:relative;text-decoration:none}.google-visualization-charteditor-panel-navigation-cell.goog-tab-hover{color:#222;cursor:pointer}.google-visualization-charteditor-panel-navigation-cell.goog-tab-selected{color:#202020;border:1px solid #ccc;border-bottom-color:white;-webkit-border-top-left-radius:2px;-webkit-border-top-right-radius:2px;-moz-border-radius-topleft:2px;-moz-border-radius-topright:2px;border-top-left-radius:2px;border-top-right-radius:2px;cursor:default;font-weight:700;margin-bottom:-1px;text-decoration:none}.google-visualization-charteditor-panel-navigation-cell.goog-tab-selected.goog-tab-hover{cursor:default;text-decoration:none}.google-visualization-charteditor-panel-title{font-size:13px;font-weight:800;padding-bottom:6px;position:relative}.google-visualization-charteditor-section{position:relative}#google-visualization-charteditor-options-panel .google-visualization-charteditor-section{background:white;border:1px solid #e5e5e5;margin-top:-1px;padding:10px 10px 20px;width:260px}.google-visualization-charteditor-multi-section-gap{height:4px}.google-visualization-charteditor-item-gap{height:15px}.google-visualization-charteditor-title-gap{height:10px}.google-visualization-charteditor-multi-section-title{background:whiteSmoke;border:1px #e5e5e5 solid;color:#d14836;display:table;font-size:13px;font-weight:bold;padding:6px 10px;text-align:left;width:260px}.google-visualization-charteditor-multi-section-title-text{display:table-cell;padding-right:7px}.google-visualization-charteditor-multi-section-chooser{display:table-cell;width:100%}.google-visualization-charteditor-section-title{color:#222;font-size:13px;font-weight:normal;padding:5px 0}.google-visualization-charteditor-data-range{color:#222;font-size:13px;font-weight:bold;padding:5px 0}.google-visualization-charteditor-short-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:88px}.google-visualization-charteditor-section>div>table{border:0;border-collapse:collapse;border-spacing:0;margin:0;padding:0;table-layout:fixed;width:250px}.google-visualization-charteditor-section>tbody>tr>td{margin:0;padding:0;vertical-align:top;width:125px}#google-visualization-charteditor-select-series{margin:0!important}.google-visualization-charteditor-select-series-color{height:10px;left:-15px;margin:0;position:relative;top:1px;width:10px}.google-visualization-charteditor-series-color-palette .goog-palette-cell{border-right:1px solid #333}.google-visualization-charteditor-menu-item-global{margin-left:10px}.google-visualization-charteditor-color .goog-flat-menu-button{min-width:38px}.google-visualization-charteditor-color .goog-flat-menu-button-disabled{background-image:none}.google-visualization-charteditor-color .goog-flat-menu-button-disabled .goog-flat-menu-button-dropdown{opacity:0.4}.google-visualization-charteditor-color .goog-flat-menu-button-disabled .goog-flat-menu-button-indicator{opacity:0.5}.google-visualization-charteditor-color .goog-flat-menu-button-indicator{height:14px;margin-left:4px;outline:1px solid #bbb;width:14px}.google-visualization-charteditor-inherit-color{height:25px}.google-visualization-charteditor-inherit-color .jfk-palette-colorswatch{background-color:#f3f3f3!important}.google-visualization-charteditor-inherit-color-header{margin:5px;top:-4px}.google-visualization-charteditor-none-color.goog-option-selected .goog-menuitem-checkbox{border:1px solid transparent;outline:1px solid black}.google-visualization-charteditor-none-color.goog-menuitem{color:#333;font-family:Arial,sans-serif;font-size:12px;padding-left:20px}.google-visualization-charteditor-none-color.goog-option-selected{background-image:none}.google-visualization-charteditor-theme-header.goog-menuheader{color:#333;font-family:Arial,sans-serif;font-size:12px;margin-top:4px;padding:5px 0 0 0}.google-visualization-charteditor-colormenu .jfk-palette-table{margin:3px 0 0 0;padding:0}.google-visualization-charteditor-colormenu.jfk-colormenu{padding:10px}.google-visualization-charteditor-none-color .goog-menuitem-checkbox{background:url(//ssl.gstatic.com/ui/v1/dialog/close-x.png) no-repeat 50% 50%!important;height:13px;margin:0;top:7px;width:13px}.google-visualization-charteditor-color-full .goog-menu-button-caption{padding:0}.google-visualization-charteditor-color-full .goog-menu-button-inner-box{padding:2px!important}.google-visualization-charteditor-link{color:blue;font-weight:bold}.google-visualization-charteditor-link:hover{cursor:pointer;text-decoration:underline}.google-visualization-charteditor-input{width:98%}.google-visualization-charteditor-input-disabled{background-color:#f3f3f3;border:1px solid #dadada;color:#ccc}.google-visualization-charteditor-input-label-disabled{color:#ccc}.google-visualization-charteditor-mid-input{width:138px}.google-visualization-charteditor-glasspane{background-color:#eee;filter:alpha(opacity=0.6);opacity:0.6}.google-visualization-charteditor-help-text{color:#ccc;font-size:12px}#google-visualization-charteditor-data-preview{display:none}#google-visualization-charteditor-data-preview-arrow{background:url(//ssl.gstatic.com/editor/editortoolbar.png) no-repeat -422px center;cursor:default;display:none;height:10px;top:50%;width:10px}.google-visualization-charteditor-data-mismatch{color:#555;font-size:13px;line-height:1em;padding:10px}.google-visualization-charteditor-data-mismatch-header{color:black;font-size:16px;margin-bottom:10px;margin-left:10px}.google-visualization-charteditor-mismatch-icon{background:url("//ssl.gstatic.com/charts/static/alert.png") no-repeat;height:18px;width:20px}#google-visualization-charteditor-preview-mismatch-thumbnail{float:right;height:68px;margin:0 0 0 2px;width:110px}.google-visualization-charteditor-tooltip{font-family:Arial,sans-serif}.google-visualization-charteditor-link{color:#333;font-weight:normal;text-decoration:none}.google-visualization-charteditor-link:hover{cursor:pointer;text-decoration:underline}.google-visualization-charteditor-checkbox{cursor:default;display:inline-block;margin:2px 2px 2px 0;overflow:hidden;padding:0;position:relative;white-space:nowrap}.google-visualization-charteditor-checkbox-container .google-visualization-charteditor-checkbox{width:120px}.google-visualization-charteditor-combobox.google-visualization-charteditor-combobox-closed{background-color:whiteSmoke;background-image:-webkit-linear-gradient(top,whiteSmoke,#f1f1f1);background-image:-moz-linear-gradient(top,whiteSmoke,#f1f1f1);background-image:-ms-linear-gradient(top,whiteSmoke,#f1f1f1);background-image:-o-linear-gradient(top,whiteSmoke,#f1f1f1);background-image:linear-gradient(top,whiteSmoke,#f1f1f1);border:1px solid gainsboro;border:1px solid rgba(0,0,0,0.1)}.google-visualization-charteditor-combobox.google-visualization-charteditor-combobox-disabled{background-color:white;border:1px solid #f2f2f2;opacity:1}.google-visualization-charteditor-combobox .goog-toolbar-combo-button-input{padding:0 0 0 3px;position:relative;width:28px}.google-visualization-charteditor-combobox-disabled .goog-toolbar-combo-button-input{color:#b8b8b8}.google-visualization-charteditor-combobox-disabled .goog-toolbar-combo-button-dropdown{opacity:0.4}.google-visualization-charteditor-combobox.goog-toolbar-combo-button{margin-left:4px;padding:1px 0;top:auto}.google-visualization-charteditor-checkbox-disabled{color:#666}.google-visualization-charteditor-checkbox .goog-checkbox{cursor:default}.google-visualization-charteditor-toggle{min-width:24px;margin:0}.google-visualization-charteditor-toggle.jfk-button{height:26px;line-height:24px;padding:0;z-index:auto}.google-visualization-charteditor-toggle-disabled{opacity:0.3}.google-visualization-charteditor-toggle-bold-content{background:url(//ssl.gstatic.com/docs/common/jfk_sprite40.png) -23px -466px no-repeat;height:16px;top:2px;width:16px}.google-visualization-charteditor-toggle-italic-content{background:url(//ssl.gstatic.com/docs/common/jfk_sprite40.png) -2px -2176px no-repeat;height:16px;top:2px;width:16px}.google-visualization-charteditor-name-input{border:1px solid transparent;color:#202020;font-family:Arial,sans-serif;font-size:13px;font-weight:800;height:14px;padding:4px;width:400px}.google-visualization-charteditor-name-input.google-visualization-charteditor-help-text{color:#666;font-weight:normal}.google-visualization-charteditor-name-input:hover,.google-visualization-charteditor-name-input:focus{border:1px solid #e4e4e4}.google-visualization-charteditor-small-input{width:118px}.google-visualization-charteditor-chart-img-div{border:1px solid #ddd;margin-top:5px;padding:2px;text-align:center;width:45px}.google-visualization-charteditor-chart-type-table{background-color:#f6f6f6;width:100%}.google-visualization-charteditor-type-select-button .goog-custom-button-inner-box{border-width:1px;margin:0;padding:1px;vertical-align:middle}.google-visualization-charteditor-type-select-button .goog-custom-button-outer-box{border-width:1px;margin:0;padding:0.5px;vertical-align:middle}.google-visualization-charteditor-type-select-label{border:0;font-size:10px;height:10px;margin:0;margin-top:-4px;padding:0;text-align:center;vertical-align:text-top}.google-visualization-charteditor-thumbnail .jfk-radiobutton-radio{-webkit-border-radius:0px;-moz-border-radius:0px;border-radius:0px;border:none;left:0;margin:0;position:static;top:0}.google-visualization-charteditor-thumbnail .jfk-radiobutton-radio::after{content:none}.google-visualization-charteditor-thumbnail.jfk-radiobutton{border:4px solid #ddd;display:block;margin:4px 12px 8px 0;padding:0px;height:68px;width:110px}.google-visualization-charteditor-thumbnail.jfk-radiobutton-checked{border:4px solid #6688ee;height:68px;outline-color:#fff;width:110px}.google-visualization-charteditor-thumbnail:focus{border:4px solid #c1d9ff;cursor:pointer}.google-visualization-charteditor-thumbnail.jfk-radiobutton-checked:focus{border:4px solid #6688ee}#google-visualization-charteditor-chart-type-categories{border-right:2px dotted #dcdcdc;float:left;width:105px}#google-visualization-charteditor-chart-type-categories.goog-tab-bar{background:none;cursor:default;list-style:none;outline:none}.google-visualization-charteditor-category.goog-tab{background:white;border:none;cursor:default;font-weight:normal;height:25px;margin-bottom:5px;padding:2px 0;position:relative;text-decoration:none}.google-visualization-charteditor-category.goog-tab-hover{cursor:pointer;background-color:#f2f2f2}.google-visualization-charteditor-category.goog-tab-hover .google-visualization-charteditor-category-label{text-decoration:underline}.google-visualization-charteditor-category.goog-tab-selected{background-color:#ddd!important;font-weight:bold}.google-visualization-charteditor-category.goog-tab-selected.goog-tab-hover{cursor:default;background-color:#ddd}.google-visualization-charteditor-category.goog-tab-selected.goog-tab-hover .google-visualization-charteditor-category-label{text-decoration:none}.google-visualization-charteditor-category-label{color:#666;font-size:13px;font-family:Arial,sans-serif;margin-left:15px;position:relative;top:-7px}.google-visualization-charteditor-category-label{text-decoration:inherit}.google-visualization-charteditor-mini{margin:2px}.google-visualization-charteditor-chart-type-subtypes{display:block;height:100%;overflow-y:scroll;max-height:372px}#google-visualization-charteditor-chart-type-subtypes{float:right;width:155px}.google-visualization-charteditor-combobox-icon{height:12px;left:9px;position:absolute;top:7px;width:12px}.google-visualization-charteditor-horizontal-menu{padding:1px 5px 5px 5px}.google-visualization-charteditor-float-start{float:left}.google-visualization-charteditor-float-end{float:right}.google-visualization-charteditor-float-clear{clear:both}.google-visualization-charteditor-align-end{text-align:right}.google-visualization-charteditor-align-start{text-align:left}.google-visualization-charteditor-display-none{display:none}.annotationsdiv .goog-custom-button-outer-box,.annotationsdiv .goog-custom-button-inner-box{border:0;margin:0;padding:0}.google-visualization-charteditor-mini-area{background:no-repeat url("//ssl.gstatic.com/charts/static/mini3.png") 0 -105px;width:21px;height:21px}.google-visualization-charteditor-mini-bar{background:no-repeat url("//ssl.gstatic.com/charts/static/mini3.png") 0 -168px;width:21px;height:21px}.google-visualization-charteditor-mini-column{background:no-repeat url("//ssl.gstatic.com/charts/static/mini3.png") 0 0;width:21px;height:21px}.google-visualization-charteditor-mini-combo{background:no-repeat url("//ssl.gstatic.com/charts/static/mini3.png") 0 -42px;width:21px;height:21px}.google-visualization-charteditor-mini-line{background:no-repeat url("//ssl.gstatic.com/charts/static/mini3.png") 0 -126px;width:21px;height:21px}.google-visualization-charteditor-mini-map{background:no-repeat url("//ssl.gstatic.com/charts/static/mini3.png") 0 -21px;width:21px;height:21px}.google-visualization-charteditor-mini-more{background:no-repeat url("//ssl.gstatic.com/charts/static/mini3.png") 0 -63px;width:21px;height:21px}.google-visualization-charteditor-mini-pie{background:no-repeat url("//ssl.gstatic.com/charts/static/mini3.png") 0 -84px;width:21px;height:21px}.google-visualization-charteditor-mini-scatter{background:no-repeat url("//ssl.gstatic.com/charts/static/mini3.png") 0 -147px;width:21px;height:21px}.google-visualization-charteditor-mini-step{background:no-repeat url("//ssl.gstatic.com/charts/static/mini3.png") 0 -210px;width:21px;height:21px}.google-visualization-charteditor-mini-trend{background:no-repeat url("//ssl.gstatic.com/charts/static/mini3.png") 0 -189px;width:21px;height:21px}.google-visualization-charteditor-mini-histogram{background:no-repeat url("//ssl.gstatic.com/charts/static/mini3.png") 0 -231px;width:21px;height:21px}.google-visualization-charteditor-thumbs-annotatedtimeline-disabled{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -612px;width:110px;height:68px}.google-visualization-charteditor-thumbs-annotatedtimeline{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -2507px;width:110px;height:68px}.google-visualization-charteditor-thumbs-areachart-disabled{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -3391px;width:110px;height:68px}.google-visualization-charteditor-thumbs-areachart{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -2779px;width:110px;height:68px}.google-visualization-charteditor-thumbs-areachart-stacked-disabled{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -408px;width:110px;height:68px}.google-visualization-charteditor-thumbs-areachart-stacked{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -2031px;width:110px;height:68px}.google-visualization-charteditor-thumbs-barchart-disabled{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -4124px;width:110px;height:68px}.google-visualization-charteditor-thumbs-barchart{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -3187px;width:110px;height:68px}.google-visualization-charteditor-thumbs-barchart-stacked-disabled{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -3527px;width:110px;height:68px}.google-visualization-charteditor-thumbs-barchart-stacked{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -816px;width:110px;height:68px}.google-visualization-charteditor-thumbs-bubblechart-disabled{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -136px;width:110px;height:68px}.google-visualization-charteditor-thumbs-bubblechart{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -1020px;width:110px;height:68px}.google-visualization-charteditor-thumbs-candlestickchart-disabled{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -1156px;width:110px;height:68px}.google-visualization-charteditor-thumbs-candlestickchart{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -3255px;width:110px;height:68px}.google-visualization-charteditor-thumbs-columnchart-disabled{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -3784px;width:110px;height:68px}.google-visualization-charteditor-thumbs-columnchart{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -2099px;width:110px;height:68px}.google-visualization-charteditor-thumbs-columnchart-stacked-disabled{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -2983px;width:110px;height:68px}.google-visualization-charteditor-thumbs-columnchart-stacked{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -1088px;width:110px;height:68px}.google-visualization-charteditor-thumbs-combochart-disabled{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -340px;width:110px;height:68px}.google-visualization-charteditor-thumbs-combochart{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 0;width:110px;height:68px}.google-visualization-charteditor-thumbs-donutchart-disabled{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -1360px;width:110px;height:68px}.google-visualization-charteditor-thumbs-donutchart{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -2371px;width:110px;height:68px}.google-visualization-charteditor-thumbs-gauge-disabled{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -1496px;width:110px;height:68px}.google-visualization-charteditor-thumbs-gauge{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -476px;width:110px;height:68px}.google-visualization-charteditor-thumbs-geochart-disabled{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -2575px;width:110px;height:68px}.google-visualization-charteditor-thumbs-geochart-markers-disabled{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -68px;width:110px;height:68px}.google-visualization-charteditor-thumbs-geochart-markers{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -2439px;width:110px;height:68px}.google-visualization-charteditor-thumbs-geochart{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -4192px;width:110px;height:68px}.google-visualization-charteditor-thumbs-histogram-disabled{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -3323px;width:110px;height:68px}.google-visualization-charteditor-thumbs-histogram{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -1564px;width:110px;height:68px}.google-visualization-charteditor-thumbs-imageradarchart-disabled{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -3051px;width:110px;height:68px}.google-visualization-charteditor-thumbs-imageradarchart{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -2235px;width:110px;height:68px}.google-visualization-charteditor-thumbs-imagesparkline-disabled{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -2643px;width:110px;height:68px}.google-visualization-charteditor-thumbs-imagesparkline{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -2167px;width:110px;height:68px}.google-visualization-charteditor-thumbs-linechart-disabled{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -1632px;width:110px;height:68px}.google-visualization-charteditor-thumbs-linechart{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -544px;width:110px;height:68px}.google-visualization-charteditor-thumbs-linechart-smooth-disabled{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -1963px;width:110px;height:68px}.google-visualization-charteditor-thumbs-linechart-smooth{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -3119px;width:110px;height:68px}.google-visualization-charteditor-thumbs-map-disabled{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -4056px;width:110px;height:68px}.google-visualization-charteditor-thumbs-map-normal{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -1904px;width:100px;height:59px}.google-visualization-charteditor-thumbs-map{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -1292px;width:110px;height:68px}.google-visualization-charteditor-thumbs-map-satellite{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -3595px;width:100px;height:60px}.google-visualization-charteditor-thumbs-map-street-disabled{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -2915px;width:110px;height:68px}.google-visualization-charteditor-thumbs-map-street{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -680px;width:110px;height:68px}.google-visualization-charteditor-thumbs-map-terrain{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -3723px;width:100px;height:61px}.google-visualization-charteditor-thumbs-motionchart-disabled{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -2711px;width:110px;height:68px}.google-visualization-charteditor-thumbs-motionchart{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -1836px;width:110px;height:68px}.google-visualization-charteditor-thumbs-orgchart-disabled{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -884px;width:110px;height:68px}.google-visualization-charteditor-thumbs-orgchart{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -1428px;width:110px;height:68px}.google-visualization-charteditor-thumbs-piechart-3d-disabled{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -952px;width:110px;height:68px}.google-visualization-charteditor-thumbs-piechart-3d{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -3655px;width:110px;height:68px}.google-visualization-charteditor-thumbs-piechart-disabled{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -2303px;width:110px;height:68px}.google-visualization-charteditor-thumbs-piechart{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -3852px;width:110px;height:68px}.google-visualization-charteditor-thumbs-scatterchart-disabled{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -272px;width:110px;height:68px}.google-visualization-charteditor-thumbs-scatterchart{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -3988px;width:110px;height:68px}.google-visualization-charteditor-thumbs-steppedareachart-disabled{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -2847px;width:110px;height:68px}.google-visualization-charteditor-thumbs-steppedareachart{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -3920px;width:110px;height:68px}.google-visualization-charteditor-thumbs-table-disabled{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -1768px;width:110px;height:68px}.google-visualization-charteditor-thumbs-table{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -204px;width:110px;height:68px}.google-visualization-charteditor-thumbs-timeline-disabled{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -1224px;width:110px;height:68px}.google-visualization-charteditor-thumbs-timeline{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -3459px;width:110px;height:68px}.google-visualization-charteditor-thumbs-treemap-disabled{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -1700px;width:110px;height:68px}.google-visualization-charteditor-thumbs-treemap{background:no-repeat url("//ssl.gstatic.com/charts/static/thumbs18.png") 0 -748px;width:110px;height:68px}.google-visualization-atl.container{}.google-visualization-atl .border{border:1px solid #808080;background-color:#ffffff}.google-visualization-atl .containerTable{display:table;table-layout:fixed;width:100%;height:100%;border:0;padding:0}.google-visualization-atl .containerTableRow{display:table-row}.google-visualization-atl .containerTable .td{display:table-cell;vertical-align:top;padding:0}.google-visualization-atl .chartTdContainer{}.google-visualization-atl .outerChartContainer{overflow:hidden}.google-visualization-atl .chartControls{display:table;border-spacing:0;border-collapse:collapse;height:auto;width:100%;white-space:nowrap}.google-visualization-atl .chartControls.twoRows{height:41px}.google-visualization-atl .zoomControls{display:table-cell;padding:4px 7px 1px;font-size:10px;white-space:nowrap;overflow:hidden}.google-visualization-atl .zoomControls button.zoomButton{margin-right:0.33em}.google-visualization-atl button{padding:0 2px;font-size:9px;line-height:10px}.google-visualization-atl .legend{display:table-cell;padding:4px 7px 1px;font-size:10px;text-align:right;white-space:nowrap;overflow:hidden}.google-visualization-atl .legend-dot{display:inline-block;height:8px;width:8px;border-radius:4px;margin-right:2px;-webkit-box-shadow:0px 0px 1px 1px rgba(206,206,195,0.75);-moz-box-shadow:0px 0px 1px 1px rgba(206,206,195,0.75);box-shadow:0px 0px 1px 1px rgba(206,206,195,0.75)}.google-visualization-atl .rangeControl{overflow:hidden}.google-visualization-atl .annotationsTdContainer{height:0;border-left:1px solid #808080}.google-visualization-atl .annotationsFilterContainer{padding:4px;font-size:10px;white-space:nowrap;overflow:hidden}.google-visualization-atl .annotationsFilterContainer input{font-size:10px;width:15em}.google-visualization-atl .annotationsContainer{}.google-visualization-atl .annotationsContainer .google-visualization-table-tr-head{display:none}.google-visualization-atl .annotationsContainer .google-visualization-table-tr-odd,.google-visualization-atl .annotationsContainer .google-visualization-table-tr-odd td{background:none}.google-visualization-atl .annotationsContainer .google-visualization-table-tr-even,.google-visualization-atl .annotationsContainer .google-visualization-table-tr-even td{background:none}.google-visualization-atl .annotationsContainer .google-visualization-table-tr-sel,.google-visualization-atl .annotationsContainer .google-visualization-table-tr-sel td{background-color:#eeeeee}.google-visualization-atl .annotationsContainer .google-visualization-table-td{border-width:0;border-bottom-width:1px;vertical-align:top;font-size:0.75em}.google-visualization-atl .annotationsContainer .title{font-weight:bold}.google-visualization-atl .annotationsContainer .date{color:#666666;font-size:0.75em;white-space:nowrap}.google-visualization-table{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;display:inline-block;vertical-align:bottom}.google-visualization-table *{-moz-box-sizing:inherit;-webkit-box-sizing:inherit;box-sizing:inherit}.google-visualization-table>div:first-child{border:solid #eee;border-width:0}.google-visualization-table>div:first-child.scrolling .google-visualization-table-table th,.google-visualization-table>div:first-child.scrolling .google-visualization-table-table .frozen-column{visibility:hidden;opacity:0;color:transparent}.google-visualization-table>div:first-child.doneScrolling .google-visualization-table-table th{-webkit-transition:opacity .25s ease-in .1s;-o-transition:opacity .25s ease-in .1s;transition:opacity 0.25s ease-in 0.1s}.google-visualization-table>div:first-child.doneScrolling .google-visualization-table-table .frozen-column{-webkit-transition:visibility,opacity .15s ease-in .15s;-o-transition:visibility,opacity .15s ease-in .15s;transition:visibility,opacity 0.15s ease-in 0.15s}.google-visualization-table-table{font-family:arial,helvetica;font-size:10pt;cursor:default;margin:0;background:white;border-spacing:0;border-collapse:separate}.google-visualization-table-table *{margin:0}.google-visualization-table .gradient{background-image:url("//ssl.gstatic.com/charts/static/table-title-bg.gif") repeat-x left bottom;background-image:-moz-linear-gradient(top,rgba(255,255,255,0.8) 0%,rgba(255,255,255,0.7) 30%,rgba(255,255,255,0.5) 60%,rgba(255,255,255,0) 100%);background-image:-webkit-linear-gradient(top,rgba(255,255,255,0.8) 0%,rgba(255,255,255,0.7) 30%,rgba(255,255,255,0.5) 60%,rgba(255,255,255,0) 100%);background-image:-o-linear-gradient(top,rgba(255,255,255,0.8) 0%,rgba(255,255,255,0.7) 30%,rgba(255,255,255,0.5) 60%,rgba(255,255,255,0) 100%);background-image:-ms-linear-gradient(top,rgba(255,255,255,0.8) 0%,rgba(255,255,255,0.7) 30%,rgba(255,255,255,0.5) 60%,rgba(255,255,255,0) 100%);background-image:linear-gradient(to bottom,rgba(255,255,255,0.8) 0%,rgba(255,255,255,0.7) 30%,rgba(255,255,255,0.5) 60%,rgba(255,255,255,0) 100%)}.google-visualization-table-tr-head{background-color:rgb(228,233,244);font-weight:bold;text-align:center}.google-visualization-table-sorthdr{cursor:pointer}.google-visualization-table-sortind{color:#ccc;padding-left:4px}.unsorted .google-visualization-table-sortind{display:none}.unsorted .google-visualization-table-sortind:after{content:"\002003"}.sort-ascending .google-visualization-table-sortind:after{content:"\0025b2"}.sort-descending .google-visualization-table-sortind:after{content:"\0025bc"}.google-visualization-table-th{cursor:pointer;white-space:nowrap}.google-visualization-table-td{overflow:hidden}.google-visualization-table-th,.google-visualization-table-td{padding:2px 0.35em;background-color:inherit;background-clip:padding-box}.google-visualization-table-table td,.google-visualization-table-table th{border:solid #eee;border-width:0 1px 1px 0;padding:2px 0.35em}.google-visualization-table-table th{position:relative;z-index:10}.google-visualization-table-table td.frozen-column{position:relative;z-index:5}.google-visualization-table-table thead th.frozen-column{z-index:15}.google-visualization-table-table .last-frozen-column{border-right:2px ridge #eee}.google-visualization-table-tr-even{background-color:#fff}.google-visualization-table-tr-odd{background-color:#fafafa}.google-visualization-table-tr-sel{background-color:#d6e9f8}.google-visualization-table-tr-over{background-color:#e7e9f9}.google-visualization-table-td.google-visualization-table-type-bool{text-align:center;font-family:"Arial Unicode MS",Arial,Helvetica}.google-visualization-table-td.google-visualization-table-type-date{text-align:center}.google-visualization-table-td.google-visualization-table-type-number{text-align:right;white-space:nowrap}.google-visualization-table-seq{text-align:right;color:#666}.google-visualization-table-div-page{display:inline-block;width:100%;padding:1px 0 0 1px;border:0;background-color:rgb(228,233,244);font-family:Arial,sans-serif}.google-visualization-table-div-page [role="button"]{display:inline-block;cursor:pointer;margin-top:2px;margin-bottom:2px;font-family:"Arial Unicode MS",Arial,Helvetica;font-size:10px;line-height:10px}.google-visualization-table-div-page [role="button"] .goog-custom-button-inner-box{padding:1px 1px 2px 1px}.google-visualization-table-page-prev,.google-visualization-table-page-next{}.google-visualization-table-page-prev:before{content:"\0025c4"}.google-visualization-table-page-next:before{content:"\0025ba"}.google-visualization-table-page-numbers{display:inline-block;zoom:1;margin:0;vertical-align:middle}.ie8 .google-visualization-table-page-numbers{display:inline}.google-visualization-table-page-number{display:inline-block;background-color:rgb(228,233,244);border:1px ButtonShadow outset;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;color:black;font-size:10px;min-width:10px;margin:2px;padding:0 2px;text-align:center;text-decoration:none;vertical-align:middle}.google-visualization-table-page-number.current{font-weight:bold;font-size:11px;background:#fefefe;border-style:inset}.google-visualization-table-page-number:hover{background:#fefefe;border-style:inset}.google-visualization-table .transparent{background-image:none;background-color:transparent;border-color:transparent}.google-visualization-table .transparentIE6{background:none}.google-visualization-table th .transparent,.google-visualization-table td .transparent{color:transparent;opacity:0}.google-visualization-table .google-visualization-hidden{visibility:hidden;pointer-events:none}.google-visualization-table-loadtest{padding-left:6px}.google-visualization-sparkline-default{background-color:#ffffff;border-spacing:0px;font-size:small;color:gray}.google-visualization-sparkline-selected{background-color:#d6e9f8;padding:1px;border-spacing:0px;font-size:small;color:gray}.google-visualization-sparkline-over{background-color:#e7e9f9;padding:1px;border-spacing:0px;font-size:small;color:gray}.google-visualization-sparkline-image{display:block}.google-visualization-orgchart-table{border:0;text-align:center}.google-visualization-orgchart-table *{margin:0;padding:2px}.google-visualization-orgchart-space-small{width:4px;height:1px;border:0}.google-visualization-orgchart-space-medium{width:10px;height:1px;border:0}.google-visualization-orgchart-space-large{width:16px;height:1px;border:0}.google-visualization-orgchart-noderow-small{height:12px;border:0}.google-visualization-orgchart-noderow-medium{height:30px;border:0}.google-visualization-orgchart-noderow-large{height:46px;border:0}.google-visualization-orgchart-connrow-small{height:2px;font-size:1px}.google-visualization-orgchart-connrow-medium{height:6px;font-size:4px}.google-visualization-orgchart-connrow-large{height:10px;font-size:8px}.google-visualization-orgchart-node{text-align:center;vertical-align:middle;font-family:arial,helvetica;cursor:default;border:2px solid #b5d9ea;-moz-border-radius:5px;-webkit-border-radius:5px;-webkit-box-shadow:rgba(0,0,0,0.5) 3px 3px 3px;-moz-box-shadow:rgba(0,0,0,0.5) 3px 3px 3px;background-color:#edf7ff;background:-webkit-gradient(linear,left top,left bottom,from(#edf7ff),to(#cde7ee))}.google-visualization-orgchart-nodesel{border:2px solid #e3ca4b;background-color:#fff7ae;background:-webkit-gradient(linear,left top,left bottom,from(#fff7ae),to(#eee79e))}.google-visualization-orgchart-node-small{font-size:0.6em}.google-visualization-orgchart-node-medium{font-size:0.8em}.google-visualization-orgchart-node-large{font-size:1.2em;font-weight:bold}.google-visualization-orgchart-linenode{border:0}.google-visualization-orgchart-lineleft{border-left:1px solid #3388dd}.google-visualization-orgchart-lineright{border-right:1px solid #3388dd}.google-visualization-orgchart-linebottom{border-bottom:1px solid #3388dd}.waffle-charteditor-chart-area-resizer .docs-squarehandleselectionbox-border{transition:opacity 250ms cubic-bezier(0.4,0.0,1,1);border:1px solid #9e9e9e;opacity:0}.waffle-charteditor-chart-area-resizer .docs-squarehandleselectionbox-handle{transition:opacity 250ms cubic-bezier(0.4,0.0,1,1);background:#fff;border:1px solid #9e9e9e;opacity:0}.waffle-charteditor-chart-area-resizer:hover .docs-squarehandleselectionbox-border,.waffle-charteditor-chart-area-resizer:hover .docs-squarehandleselectionbox-handle,.waffle-charteditor-chart-area-resizer-active .docs-squarehandleselectionbox-border,.waffle-charteditor-chart-area-resizer-active .docs-squarehandleselectionbox-handle,.waffle-charteditor-chart-area-resizer-dragging .docs-squarehandleselectionbox-border,.waffle-charteditor-chart-area-resizer-dragging .docs-squarehandleselectionbox-handle{opacity:1}.waffle-charteditor-edit-context-menu{font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif}.waffle-charteditor-edit-context-menu .goog-menuitem{padding-left:30px;padding-right:110px}.waffle-charteditor-edit-context-menu-header{color:rgba(0,0,0,0.38);font-weight:bold;padding:2px 8px 6px 8px;text-transform:uppercase}.docs-gm .waffle-charteditor-edit-context-menu-submenu-label{float:left}.waffle-charteditor-select-to-zoom{background-color:rgba(0,0,255,0.1);border:1px dashed #9e9e9e;position:absolute}.waffle-charteditor-text-edit-overlay{background-color:#fff;border:1px solid #44a3fa;cursor:text;color:rgba(0,0,0,0.54);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:16px;line-height:1;outline:3px solid rgba(68,163,250,.3);outline-offset:0;position:absolute;resize:none;z-index:1}.waffle-charteditor-text-edit-overlay-vertical{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg);-webkit-transform-origin:top left;-moz-transform-origin:top left;-ms-transform-origin:top left;-o-transform-origin:top left;transform-origin:top left}.docs-ui-toast.waffle-charts-customizable-toast{bottom:10px;left:10px;position:absolute}.waffle-charts-switching-chart-component-gviz-backed{background:white}.waffle-dataconnector-dbrecord-sidepane-widget{padding:20px 16px 0}.waffle-dataconnector-dbrecord-sidepane-widget-header{display:flex;align-items:center;justify-content:space-between}.waffle-dataconnector-dbrecord-sidepane-widget-header-label{color:#202124;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;line-height:40px}.waffle-dataconnector-dbrecord-sidepane .docs-charts-editor-material-textbutton.docs-material:focus{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#e7f5eb;border:1px solid #bbe2c6!important;height:24px;padding:3px 12px 5px}.waffle-dataconnector-dbrecord-sidepane-sort-widget-chip,.waffle-dataconnector-dbrecord-sidepane-projection-widget-chip{margin-top:8px}.waffle-dataconnector-dbrecord-sidepane-sort-widget-chip .docs-charts-editor-chip-content,.waffle-dataconnector-dbrecord-sidepane-projection-widget-chip .docs-charts-editor-chip-content{display:flex;align-items:center}.waffle-dataconnector-dbrecord-sidepane-projection-widget-chip .docs-charts-editor-chip-content,.waffle-dataconnector-dbrecord-sidepane-projection-widget-chip .docs-charts-editor-chip-label,.waffle-dataconnector-dbrecord-sidepane-sort-widget-chip .docs-charts-editor-chip-content,.waffle-dataconnector-dbrecord-sidepane-sort-widget-chip .docs-charts-editor-chip-label{cursor:move}.waffle-dataconnector-dbrecord-chip-nodrag{cursor:default}.waffle-dataconnector-dbrecord-sidepane-sort-widget-chip-icon,.waffle-dataconnector-dbrecord-sidepane-projection-widget-chip-icon{margin-left:15px}.waffle-dataconnector-dbrecord-sidepane .waffle-dbsource-table-icon{height:24px;width:24px}.waffle-dataconnector-dbrecord-sidepane-filter-widget .waffle-filter-filtercard .waffle-filter-filtercard-select .jfk-select{width:100%}.waffle-dataconnector-dbrecord-sidepane-truncation-widget-row-limit-label{color:#5f6368;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:12px;padding-bottom:5px}.waffle-dataconnector-dbrecord-sidepane-truncation-widget-repeated-values{align-items:center;display:flex;margin-top:8px}.waffle-dataconnector-refresh-all-dbobject-item{display:inline-block;height:35px;width:100%}.waffle-dataconnector-refresh-all-dbobject-item-enabled{cursor:pointer}.waffle-dataconnector-refresh-all-dbobject-item-enabled:hover,.waffle-dataconnector-refresh-all-dbobject-item-enabled:focus{border-radius:20px;box-sizing:border-box}.waffle-dataconnector-refresh-all-dbobject-item-enabled:hover{background-color:#e6f4ea}.waffle-dataconnector-refresh-all-dbobject-item-enabled:focus{background-color:#ceead6}.waffle-dataconnector-refresh-all-dbobject-item-disabled{color:#80868b;cursor:default}.waffle-dataconnector-refresh-all-dbobject-item-icon-wrapper{float:left;margin-left:16px;margin-right:16px;margin-top:8px}.waffle-dataconnector-refresh-all-dbobject-item-title{color:#3c4043;float:left;font:400 14px/20px Roboto,RobotoDraft,Helvetica,Arial,sans-serif;letter-spacing:0.2px;margin-top:8px}.waffle-dataconnector-refresh-all-dbobject-item-status-wrapper{float:right;font:400 12px/16px Roboto,RobotoDraft,Helvetica,Arial,sans-serif;letter-spacing:0.3px;margin-right:16px;margin-top:8px}.waffle-dataconnector-refresh-all-dbobject-item-timestamp{color:#80868b}.waffle-dataconnector-refresh-all-dbobject-item-loading,.waffle-dataconnector-refresh-all-dbobject-item-running{color:#202124}.waffle-dataconnector-refresh-all-dbobject-item-error{color:#d93025;font-weight:bold}.waffle-dataconnector-refresh-all-dbobject-list-footer-button-wrapper{float:right;margin-right:7px}.waffle-dataconnector-refresh-all-dbobject-list-footer{display:inline-block;margin-bottom:10px;margin-top:10px;width:100%}.waffle-dataconnector-refresh-all-dbobject-list-footer-bytes-wrapper{float:left;margin-left:21px;margin-top:9px}.waffle-dataconnector-refresh-all-dbobject-item-icon-spinner .waffle-spinner{height:18px;width:18px}.waffle-dataconnector-refresh-all-dbobject-item-icon-spinner .waffle-spinner-circle{border-width:2px}.waffle-dataconnector-refresh-sidepane-backdrop{background-color:#000;left:0;position:absolute;top:0;z-index:1002;height:100%;opacity:.6;width:100%}.waffle-dataconnector-refresh-all-dbobject-list-single-datasource-title{font-size:13px;font-weight:bold;margin:20px 20px 12px}.waffle-dataconnector-refresh-sidepane-refresh-widget{background-color:#f8f9fa;overflow-x:hidden;overflow-y:auto}.waffle-dataconnector-refresh-sidepane-stale-widget{animation-duration:300ms;animation-name:waffle-dataconnector-refresh-schedules-widget-open;background-color:#fff;border-radius:8px 8px 0 0;border-top:none;bottom:0;box-shadow:0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12),0px 2px 4px -1px rgba(0,0,0,0.2);padding:26px 0px 26px 0px;position:absolute;text-align:center;width:100%;z-index:1002}.waffle-dataconnector-refresh-sidepane-stale-widget-title{color:#202124;font-family:Google Sans;font-weight:500;font-size:18px;line-height:24px;padding:5px;text-align:center}.waffle-dataconnector-refresh-sidepane-stale-widget-info{color:#3c4043;font-size:14px;line-height:20px;padding:5px;text-align:center}.waffle-dataconnector-refresh-sidepane-stale-widget-button-wrapper{padding-top:20px;text-align:center}.waffle-dataconnector-refresh-all-datasources-container .waffle-dataconnector-refresh-all-dbobject-list-collapsible{border:2px solid transparent}.waffle-dataconnector-refresh-all-datasources-container .waffle-dataconnector-refresh-all-dbobject-list-collapsible.docs-charts-editor-collapsible-opened{box-shadow:0 1px 3px 1px rgba(60,64,67,.15);border:2px solid #fff;border-radius:8px}.waffle-dataconnector-refresh-all-dbobject-list-parent{border-bottom:2px solid #f8f9fa}.waffle-dataconnector-refreshall-highlight::after{background-color:#a8dab5;bottom:0;position:absolute;content:"";left:0;opacity:.3;right:0;top:0}.waffle-dataconnector-refresh-all-datasources-container .docs-charts-editor-collapsible-opened .docs-charts-editor-collapsible-header .docs-charts-editor-collapsible-title{color:#202124}.waffle-dataconnector-refresh-schedules-widget{background-color:#fff;border-top:1px solid #dadce0;bottom:65px;position:absolute;width:100%}.waffle-dataconnector-refresh-schedules-header{display:flex;flex-direction:column;height:64px;justify-content:center;padding:0 16px}.waffle-dataconnector-refresh-schedules-widget-opened .waffle-dataconnector-refresh-schedules-header{height:auto}.waffle-dataconnector-refresh-schedules-top-section{align-items:center;display:flex;justify-content:space-between;padding-bottom:4px}.waffle-dataconnector-refresh-schedules-widget-opened .waffle-dataconnector-refresh-schedules-top-section{height:50px}.waffle-dataconnector-refresh-schedules-fullview-section{color:#5f6368;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:12px}.waffle-dataconnector-refresh-schedules-fullview-text{color:#202124;font-size:14px;font-weight:500;line-height:20px}.waffle-dataconnector-refresh-schedules-header .goog-link-button{color:#1a73e8;text-decoration:none}.waffle-dataconnector-refresh-schedules-header-title{color:#3c4043;display:flex;font:500 14px "Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;line-height:20px}.waffle-dataconnector-refresh-schedules-info-icon{padding-left:4px}.waffle-dataconnector-refresh-schedules-edit-section{padding:16px}.waffle-dataconnector-refresh-schedules-edit-section-row{margin-bottom:16px}.waffle-dataconnector-refresh-schedules-select .docs-material-gm-labeled-select.docs-material-gm-labeled-select-focused .docs-material-gm-labeled-select-outer-box{background-color:#f1f3f4}.waffle-dataconnector-refresh-schedules-select .docs-material-gm-labeled-select{align-items:center;display:flex;justify-content:space-between}.waffle-dataconnector-refresh-schedules-select .docs-material-gm-labeled-select-content{margin-bottom:0px}.waffle-dataconnector-refresh-schedules-select .docs-material-gm-labeled-select-label{color:#3c4043;font:500 12px "Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;line-height:20px}.waffle-dataconnector-refresh-schedules-select .docs-material-gm-labeled-select-outer-box{padding:0;width:176px}.waffle-dataconnector-refresh-schedules-select .docs-material-gm-labeled-select-caption{font-size:13px;height:auto;line-height:16px;padding:4px 0 4px 8px}.waffle-dataconnector-refresh-schedules-btns{align-items:center;display:flex;justify-content:flex-end}.waffle-dataconnector-refresh-schedules-overview-section{font-size:12px}.waffle-dataconnector-refresh-schedules-overview-text{color:#5f6368}.waffle-dataconnector-refresh-schedules-edit-btn{padding-left:2px}.waffle-dataconnector-refresh-schedules-save-btn .docs-material-button{text-transform:none}.waffle-dataconnector-refresh-schedules-owner-info{color:#5f6368;font-size:12px;margin:32px 0 16px 0}.waffle-dataconnector-refresh-schedules-widget-opened{animation-name:waffle-dataconnector-refresh-schedules-widget-open;animation-duration:300ms;border-radius:8px 8px 0 0;border-top:none;bottom:0;box-shadow:0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12),0px 2px 4px -1px rgba(0,0,0,0.2);z-index:1002}@keyframes waffle-dataconnector-refresh-schedules-widget-open{from{bottom:-300px}to{bottom:0px}}.waffle-dataconnector-refresh-schedules-resume-prompt{max-width:420px}.waffle-dataconnector-refresh-schedules-resume-prompt .waffle-dataconnector-prompt-content{font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;padding:0 24px 24px}.waffle-dataconnector-refresh-schedules-resume-prompt h4{margin:20px 0 4px 0}.waffle-dbsource-advanced-options-menuitem-change-billing-project svg{height:18px;left:10px;position:absolute;width:18px}.waffle-dbsource-advanced-options-menuitem-change-billing-project-short-caption{color:#80868b;font-size:12px}.waffle-bigquery-change-billing-project-dialog{display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;box-sizing:border-box;height:495px;width:512px}.waffle-bigquery-change-billing-project-dialog .waffle-dataconnector-modal-header{border-bottom:none;box-sizing:border-box;height:73px;padding:24px 24px 25px 24px}.waffle-bigquery-change-billing-project-dialog .waffle-dataconnector-modal-title{line-height:24px;opacity:1}.waffle-bigquery-change-billing-project-dialog .waffle-dataconnector-modal-close-button{height:34px;margin-right:-5px;margin-top:-5px;width:34px}.waffle-bigquery-change-billing-project-dialog .waffle-dataconnector-modal-close-button svg{height:24px;width:24px}.waffle-bigquery-change-billing-project-dialog .waffle-dataconnector-modal-body{height:338px;padding:0;z-index:0}.waffle-bigquery-change-billing-project-dialog-project-header{color:#5f6368;font-size:14px;letter-spacing:0.29px;margin:0;opacity:1;padding:10px 24px}.waffle-bigquery-change-billing-project-dialog .waffle-dataconnector-modal-footer{border-top:none;box-shadow:0 2px 6px 2px rgba(60,64,67,.15);padding:24px;z-index:1}.waffle-bigquery-change-billing-project-dialog-footer-wrapper{display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row}.waffle-bigquery-change-billing-project-dialog-footer-wrapper .docs-material-button{margin:0}.waffle-bigquery-change-billing-project-dialog-footer-wrapper .docs-material-button:first-child{margin-left:auto}.waffle-bigquery-change-billing-project-dialog .waffle-dataconnector-tablepicker-menuitem-content-nexticon{display:none}.waffle-bigquery-change-billing-project-dialog .waffle-dataconnector-tablepicker-menuitem-content-id{margin-left:auto}.waffle-bigquerydbsourcesettingsdialog{display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;box-sizing:border-box;height:495px;width:512px}.waffle-bigquerydbsourcesettingsdialog .waffle-dataconnector-modal-header{border-bottom:none;box-sizing:border-box;height:73px;padding:24px 24px 25px 24px}.waffle-bigquerydbsourcesettingsdialog .waffle-dataconnector-modal-title{line-height:24px;opacity:1}.waffle-bigquerydbsourcesettingsdialog .waffle-dataconnector-modal-close-button{height:34px;margin-right:-5px;margin-top:-5px;width:34px}.waffle-bigquerydbsourcesettingsdialog .waffle-dataconnector-modal-close-button svg{height:24px;width:24px}.waffle-bigquerydbsourcesettingsdialog .waffle-dataconnector-modal-body{height:376px;padding:0;z-index:0}.waffle-bigquerydbsourcesettingsdialog-project-header{font:500 16px/20px "Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;letter-spacing:0.29px;margin:0;opacity:1;padding:10px 24px}.waffle-bigquerydbsourcesettingsdialog-transition-out .waffle-dataconnector-modal-title,.waffle-bigquerydbsourcesettingsdialog-transition-out .waffle-bigquerydbsourcesettingsdialog-project-header{opacity:0;transition:opacity 150ms cubic-bezier(0.0,0.0,0.2,1)}.waffle-bigquerydbsourcesettingsdialog-error-caption{padding:16px 32px}.waffle-bigquerydbsourcesettingsdialog .waffle-dataconnector-modal-footer{border-top:none;box-shadow:0 2px 6px 2px rgba(60,64,67,.15);z-index:1}.waffle-bigquerydbsourcesettingsdialog-footer-wrapper{display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row}.waffle-bigquerydbsourcesettingsdialog-footer-message{-webkit-box-flex:2;box-flex:2;-ms-flex-positive:2;-webkit-flex-grow:2;flex-grow:2;color:#5f6368;font-size:12px;line-height:16px;margin:0 24px 0 0;width:329px}.waffle-bigquerydbsourcesettingsdialog-footer-wrapper .docs-material-button{margin:0}.waffle-bigquerytabledatasourceviewonly-configuration-wrapper{border-bottom:1px solid rgba(0,0,0,0.12);height:68px;margin-bottom:16px}.waffle-bigquerytabledatasourceviewonly-configuration-title{color:#202124;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:11px;font-weight:500;letter-spacing:0.8px;line-height:20px;padding-bottom:4px;text-transform:uppercase;vertical-align:top}.waffle-bigquerytabledatasourceviewonly-configuration-wrapper .waffle-dataconnector-tablepicker-menuitem-content-schemaicon{margin-bottom:auto;margin-top:auto}.waffle-bigquerytabledatasourceviewonly .waffle-dataconnector-modal-header{border-bottom:none}.waffle-bigquerytabledatasourceviewonly .waffle-dataconnector-modal-footer{border-top:none}.waffle-bigquerytabledatasourceviewonly-footer-wrapper{display:flex;-ms-flex-direction:row-reverse;-webkit-flex-direction:row-reverse;flex-direction:row-reverse}.waffle-bigquerytablepickermodal{display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;box-sizing:border-box;height:495px;width:512px}.waffle-bigquerytablepickermodal .waffle-dataconnector-modal-header{border-bottom:none;box-sizing:border-box;height:73px;padding:19px 24px 20px}.waffle-bigquerytablepickermodal-back-button{background:transparent;border-radius:50%;cursor:pointer;display:block;height:33px;margin-left:-5px;opacity:0;position:relative;transition:background-color 0.28s cubic-bezier(0.0,0.0,0.2,1),opacity 150ms cubic-bezier(0.0,0.0,0.2,1);width:33px}.waffle-bigquerytablepickermodal-transition-in .waffle-bigquerytablepickermodal-back-button{opacity:1}.waffle-bigquerytablepickermodal-back-button .docs-icon{margin:5px}.waffle-bigquerytablepickermodal-back-button-focused{opacity:1.0;background-color:rgba(0,0,0,0.12);outline:none}.waffle-bigquerytablepickermodal-back-button-hover{opacity:1.0}.waffle-bigquerytablepickermodal .waffle-dataconnector-modal-title{box-sizing:border-box;line-height:34px;opacity:0;padding-right:0;width:400px}.waffle-bigquerytablepickermodal .waffle-dataconnector-modal-close-button{height:34px;margin-right:-5px;width:34px}.waffle-bigquerytablepickermodal .waffle-dataconnector-modal-close-button svg{height:24px;width:24px}.waffle-bigquerytablepickermodal .waffle-dataconnector-modal-body{height:338px;padding:0;z-index:0}.waffle-bigquerytablepickermodal-project-menu-header-wrapper{display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;align-items:center;height:40px}.waffle-bigquerytablepickermodal-project-menu-header{-webkit-box-flex:2;box-flex:2;-ms-flex-positive:2;-webkit-flex-grow:2;flex-grow:2;font:500 16px/20px "Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;letter-spacing:0.29px;margin:0;opacity:0;padding:10px 24px}.waffle-bigquerytablepickermodal-transition-in .waffle-dataconnector-modal-title,.waffle-bigquerytablepickermodal-transition-in .waffle-bigquerytablepickermodal-project-menu-header{opacity:1;transition:opacity 150ms cubic-bezier(0.4,0.0,1,1)}.waffle-bigquerytablepickermodal-breadcrumbnavigator-wrapper{background-color:#f8f9fa;padding:8px 26px}.waffle-bigquerytablepickermodal .waffle-dataconnector-modal-footer{border-top:none;box-shadow:0 2px 6px 2px rgba(60,64,67,.15);padding:24px;z-index:1}.waffle-bigquerytablepickermodal-footer-wrapper{display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;-webkit-justify-content:space-between;justify-content:space-between}.waffle-bigquerytablepickermodal-footer-wrapper .docs-material-button{margin:0}.waffle-bigquerytablepickermodal-advance-options-button{-webkit-align-items:center;align-items:center;display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;border:none;border-radius:4px;color:#188038;font:500 14px/16px "Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;letter-spacing:0.25px;text-transform:none}.waffle-bigquerytablepickermodal-advance-options-button .docs-material-menu-button-flat-default-dropdown-icon{fill:#188038}.waffle-bigquerytablepickermodal-advance-options-button:hover{background-color:#e6f4ea}.waffle-bigquerytablepickermodal-advance-options-button:active{background-color:#ceead6;box-shadow:0 2px 6px 2px rgba(60,64,67,.15)}.waffle-bigquerytablepickermodal-advance-options-button:focus{background-color:#ceead6}.waffle-dbobject-estimated-bytes-info{display:flex}.waffle-dbobject-estimated-bytes-spinner .waffle-spinner{height:18px;width:18px}.waffle-dbobject-estimated-bytes-spinner .waffle-spinner-circle{border-width:2px}.waffle-dbobject-estimated-bytes-icon{margin-right:8px}.waffle-dbobject-estimated-bytes-error{color:#db4437;text-decoration:underline}.waffle-dbobject-estimated-bytes-details{color:#80868b;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;letter-spacing:0.3px;line-height:16px}.waffle-dbobject-estimated-bytes-details-tooltip{display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;align-items:center;background-color:#000000;color:white;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:12px;font-weight:500;height:24px;text-align:center}.waffle-dbsource-column-filtered-menu .goog-menu-filter{display:flex;border-bottom:1px solid #e0e0e0;padding:6px 6px 12px 10px}.waffle-dbsource-column-filtered-menu input{-ms-flex:1;-webkit-flex:1;flex:1;border:0;color:rgba(0,0,0,0.87);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;min-width:0;outline:0}.waffle-dbsource-column-filtered-menu .goog-menu-filter:before{content:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNHB4IiBoZWlnaHQ9IjI0cHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0iIzc1NzU3NSI+CiAgICA8cGF0aCBkPSJNMTUuNSAxNGgtLjc5bC0uMjgtLjI3QzE1LjQxIDEyLjU5IDE2IDExLjExIDE2IDkuNSAxNiA1LjkxIDEzLjA5IDMgOS41IDNTMyA1LjkxIDMgOS41IDUuOTEgMTYgOS41IDE2YzEuNjEgMCAzLjA5LS41OSA0LjIzLTEuNTdsLjI3LjI4di43OWw1IDQuOTlMMjAuNDkgMTlsLTQuOTktNXptLTYgMEM3LjAxIDE0IDUgMTEuOTkgNSA5LjVTNy4wMSA1IDkuNSA1IDE0IDcuMDEgMTQgOS41IDExLjk5IDE0IDkuNSAxNHoiLz4KICAgIDxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz4KPC9zdmc+Cg==');height:24px;margin-right:6px;width:24px}.waffle-dbsource-column-filtered-menu-item-icon{margin-left:5px;margin-top:3px}.docs-gm .goog-menuitem-highlight .waffle-dbsource-column-filtered-menu-item-icon{margin-top:2px}.waffle-dbsource-column-filtered-menu-item-icon.docs-hc-ie{background-color:white;-ms-high-contrast-adjust:none}.waffle-dbsource-column-filtered-menu-item-icon.docs-hc-gecko{filter:invert(1)}.waffle-dbsource-column-filtered-menu.docs-hc-ie .goog-menu-filter:before{background-color:white;padding-top:12px;-ms-high-contrast-adjust:none}.waffle-dbsource-column-filtered-menu.docs-hc-gecko .goog-menu-filter:before{filter:url("data:image/svg+xml;utf8,\00003csvg%20xmlns=\000027http://www.w3.org/2000/svg\000027\00003e\00003cfilter%20id=\000027invertColor\000027\00003e\00003cfeColorMatrix%20type=\000027matrix\000027%20values=\000027-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0\000027/\00003e\00003c/filter\00003e\00003c/svg\00003e#invertColor")}.waffle-filterable-by-text-contains-menu-item-match{font-weight:500}.docs-gm .waffle-dbsource-column-filtered-menu .goog-menuitem{padding-right:20px}.docs-gm .waffle-dbsource-column-filtered-menu .goog-menuitem.goog-option-selected{background-position:right 5px center}.waffle-dbsource-configbar-wrapper{background:#f8f9fa;border-bottom:1px solid #dadce0;height:110px;padding-top:16px;position:relative}.waffle-dbsource-configbar{background:white;border-bottom:none;border-radius:8px 8px 0 0;box-sizing:border-box;box-shadow:0 1px 3px 1px rgba(60,64,67,.15);height:100%;overflow-x:auto;overflow-y:hidden;padding:16px 28px}.waffle-dbsource-configbar-header{align-items:center;display:flex;flex-direction:row;font-family:Google Sans,Arial,sans-serif;font-weight:400;margin-left:4px;white-space:nowrap}.waffle-dbsource-configbar-header-icon{height:24px;margin-left:0;margin-right:8px;min-width:24px;position:relative}.waffle-dbsource-configbar-header-title{color:#202124;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:18px;font-weight:400;line-height:24px;margin-right:0.5rem}.waffle-dbsource-configbar-header-subtitle{color:#5f6368;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;letter-spacing:0.3;line-height:16px;margin-right:0.5rem}.waffle-dbsource-configbar-actions{display:flex;flex-direction:row;padding:16px 0}.waffle-dbsource-configbar-button-wrapper{padding:0}.waffle-dbsource-configbar-button-wrapper .docs-material-button{margin:0}.waffle-dbsource-configbar-button-wrapper .docs-material-button-content>div>span{vertical-align:middle}.waffle-dbsource-configbar-columns-menu-button{background:#e6f4ea;border-color:#e6f4ea;border-radius:8px;height:36px;line-height:36px;padding:0 10px;margin-right:12px}.waffle-dbsource-configbar-columns-menu-button.docs-material-menu-button-flat-default,.waffle-dbsource-configbar-columns-menu-button.docs-material-menu-button-flat-default-focused{border:none}.waffle-dbsource-configbar-columns-menu-button .docs-material-menu-button-flat-default-dropdown{margin-left:10px;margin-top:5px}.docs-gm .goog-menu .goog-menuitem.waffle-datasource-configbar-columns-menu-loading{padding:6px 15px}.waffle-dbsource-configbar-options-wrapper{display:flex;-ms-flex:1;-webkit-flex:1;flex:1;-webkit-justify-content:flex-end;justify-content:flex-end}.waffle-dbsource-configbar .waffle-dbsource-configbar-secondary-button .docs-material-button-content span{-webkit-align-items:center;align-items:center;display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row}.waffle-dbsource-configbar .waffle-dbsource-configbar-secondary-button .docs-material-button-content .waffle-dbsource-configbar-secondary-button-content span{color:#5f6368;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;line-height:24px}.waffle-dbsource-configbar .waffle-dbsource-configbar-secondary-button.docs-material-button-hairline-primary.docs-material-button{border-radius:14px;height:24px;margin-right:0;padding:0}.waffle-dbsource-configbar .waffle-dbsource-configbar-secondary-button.docs-material-button-hairline-primary.docs-material-button.docs-material-button-hover{background-color:#f8f9fa;border-color:#dadce0!important}.waffle-dbsource-configbar .waffle-dbsource-configbar-secondary-button.docs-material-button-hairline-primary.docs-material-button.docs-material-button-focused{background-color:#f1f3f4;border-color:#dadce0!important}.waffle-dbsource-configbar-secondary-button.docs-material-button-hairline-primary.docs-material-button .waffle-dbsource-configbar-secondary-button-content{padding:0 8px;text-decoration:none}.waffle-dbsource-configbar .waffle-dbsource-configbar-secondary-button .docs-material-button-content svg{margin-right:5px}.waffle-dbsource-configbar .docs-material-button-hairline-primary.docs-material-button{margin-left:0;margin-right:16px;padding-left:12px;padding-right:16px;white-space:nowrap}.waffle-dbsource-configbar .waffle-dbsource-configbar-secondary-button.docs-material-button-hairline-primary.docs-material-button{margin-left:8px}.waffle-dbsource-configbar .docs-material-button-content svg{margin-right:8px;vertical-align:middle}.waffle-dbsource-configbar-overflow-menu{width:252px}.docs-gm .goog-menu.waffle-dbsource-configbar-overflow-menu .goog-menuitem,.docs-gm .goog-menu.waffle-dbsource-configbar-overflow-menu .goog-menuitem.goog-menuitem-disabled,.docs-gm .goog-menu.waffle-dbsource-configbar-overflow-menu .goog-menuitem.goog-menuitem-disabled.goog-menuitem:hover{padding:6px 12px}.docs-gm .goog-menu.waffle-dbsource-configbar-overflow-menu .goog-menuitem:hover{padding:5px 12px}.waffle-dbsource-configbar-overflow-menu-button.docs-material-menu-button-flat-default{height:24px;line-height:24px;margin-left:16px;opacity:0.4;padding:0;width:24px}.waffle-dbsource-configbar-overflow-menu-button.docs-hc-ie.docs-material-menu-button-flat-default .docs-material-menu-button-flat-default-caption{background-color:white}.waffle-dbsource-configbar-overflow-menu-button.docs-hc-gecko.docs-material-menu-button-flat-default .docs-material-menu-button-flat-default-caption{filter:url("data:image/svg+xml;utf8,\00003csvg%20xmlns=\000027http://www.w3.org/2000/svg\000027\00003e\00003cfilter%20id=\000027invertColor\000027\00003e\00003cfeColorMatrix%20type=\000027matrix\000027%20values=\000027-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0\000027/\00003e\00003c/filter\00003e\00003c/svg\00003e#invertColor")}.waffle-dbsource-configbar-separator{border-left:1px #dadce0 solid;margin-right:16px}.waffle-dbsource-configbar-overflow-menu-button .docs-material-menu-button-flat-default-dropdown{display:none}.waffle-create-datasheet-welcome-dialog{display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;box-sizing:border-box;height:558px;text-align:center;width:512px}.waffle-create-datasheet-welcome-dialog .waffle-dataconnector-modal-header{border-bottom:none;justify-content:flex-end;padding:24px 24px 0px}.waffle-create-datasheet-welcome-dialog .waffle-dataconnector-modal-title{display:none}.waffle-create-datasheet-welcome-dialog .waffle-dataconnector-modal-body{padding:0}.waffle-create-datasheet-welcome-dialog .waffle-dataconnector-modal-close-button{height:34px;margin-right:-5px;width:34px}.waffle-create-datasheet-welcome-dialog .waffle-dataconnector-modal-close-button svg{height:24px;width:24px}.waffle-create-datasheet-welcome-dialog-image{height:222px;user-select:none}.waffle-create-datasheet-welcome-dialog-welcome-message{display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;-webkit-justify-content:center;justify-content:center;color:#202124;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:22px;font-weight:400}.waffle-create-datasheet-welcome-dialog-welcome-description{color:#5f6368;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;letter-spacing:0.2px;line-height:20px;margin:0 auto;max-width:392px}.waffle-create-datasheet-welcome-dialog-button-wrapper{padding-top:36px;padding-bottom:16px}.waffle-create-datasheet-welcome-dialog .waffle-dataconnector-modal-footer{border-top:none}.waffle-create-datasource-sheet-loading-dialog{display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;box-sizing:border-box;height:558px;text-align:center;width:512px}.waffle-create-datasource-sheet-loading-dialog .waffle-dataconnector-modal-header{border-bottom:none;justify-content:flex-end;padding:24px 24px 0px}.waffle-create-datasource-sheet-loading-dialog .waffle-dataconnector-modal-title{display:none}.waffle-create-datasource-sheet-loading-dialog .waffle-dataconnector-modal-body{padding:0;margin-top:-30px}.waffle-create-datasource-sheet-loading-dialog .waffle-dataconnector-modal-close-button{height:34px;margin-right:-5px;width:34px}.waffle-create-datasource-sheet-loading-dialog .waffle-dataconnector-modal-close-button svg{height:24px;width:24px}.waffle-create-datasource-sheet-loading-dialog-tip{color:#202124;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:22px;font-weight:400;height:32px;letter-spacing:0.2px;line-height:20px;margin:32px auto;max-width:392px}.waffle-create-datasource-sheet-loading-dialog-image{height:400px;user-select:none}.waffle-create-datasource-sheet-loading-dialog .waffle-dataconnector-modal-footer{border-top:none}.waffle-create-datasource-sheet-success-dialog{display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;box-sizing:border-box;height:558px;text-align:center;width:512px}.waffle-create-datasource-sheet-success-dialog .waffle-dataconnector-modal-header{border-bottom:none;justify-content:flex-end;padding:24px 24px 0px}.waffle-create-datasource-sheet-success-dialog .waffle-dataconnector-modal-title{display:none}.waffle-create-datasource-sheet-success-dialog .waffle-dataconnector-modal-body{padding:0}.waffle-create-datasource-sheet-success-dialog .waffle-dataconnector-modal-close-button{height:34px;margin-right:-5px;width:34px}.waffle-create-datasource-sheet-success-dialog .waffle-dataconnector-modal-close-button svg{height:24px;width:24px}.waffle-create-datasource-sheet-success-dialog-image{height:185px}.waffle-create-datasource-sheet-success-dialog-success-message{color:#202124;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:22px;font-weight:400;max-width:328px;margin:22px auto 16px auto}.waffle-create-datasource-sheet-success-dialog-success-description{color:#5f6368;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;letter-spacing:0.2px;line-height:20px;margin:8px auto 16px auto;max-width:392px}.waffle-create-datasource-sheet-success-dialog-datasource-info{color:#188038;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;letter-spacing:0.2px;line-height:20px}.waffle-create-datasource-sheet-success-dialog-metadata-wrapper{margin:auto}.waffle-create-datasource-sheet-success-dialog-start-analyze-button-wrapper{margin-bottom:16px}.waffle-create-datasource-sheet-success-dialog-watch-tutorial{color:#1a73e8;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;letter-spacing:0.3px;line-height:16px;text-decoration-line:none}.waffle-create-datasource-sheet-success-dialog .waffle-dataconnector-modal-footer{border-top:none}.waffle-dbobject-sidepane-footer-estimated-bytes-wrapper{display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;align-items:center;margin-left:16px;margin-right:16px}.waffle-dbobject-sidepane-footer{display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;-webkit-justify-content:space-between;justify-content:space-between;align-items:center;background-color:white;border-top:1px solid #dadce0;color:#5f6368;height:64px}.waffle-dbobject-sidepane-footer-refresh-button-wrapper{margin-right:12px}.waffle-dbobject-sidepane-footer-refresh-button{text-transform:none}.waffle-dbobject-sidepane-header{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;align-items:center;background-color:#fff;border-bottom:1px solid #dadce0;display:flex;flex-direction:row;height:33px;padding-left:18px}.waffle-dbobject-sidepane-header-datasource-name{color:#3c4043;font-size:12px;letter-spacing:0.3px;margin-left:8px;max-width:241px;overflow:hidden;padding-top:1px;text-overflow:ellipsis;white-space:nowrap}.waffle-dbsource-endofpreview{border-top:1px solid #dadce0;display:block;height:160px;padding-top:28px;width:100%}.waffle-dbsource-endofpreview.hc-enabled-gecko{background-color:black}.waffle-dbsource-endofpreview-enable-endofwaffle{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxIiBoZWlnaHQ9IjgiIHZpZXdCb3g9IjAgMCAxIDgiPiAgPGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSI+ICAgIDxwYXRoIGZpbGw9IiNEQURDRTAiIGQ9Ik0wIDNoMXYxSDB6TTAgN2gxdjFIMHoiLz4gICAgPHBhdGggZmlsbD0iI0YxRjNGNCIgZD0iTTAgMGgxdjNIMHpNMCA0aDF2M0gweiIvPiAgPC9nPjwvc3ZnPg==);background-repeat:repeat-x}.waffle-dbsource-endofpreview-enable-endofwaffle::before{background-color:#f3f3f3;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOSIgaGVpZ2h0PSI4IiB2aWV3Qm94PSIwIDAgMTkgOCI+ICA8ZyBmaWxsPSJub25lIj4gICAgPHBhdGggZmlsbD0iI0YxRjNGNCIgZD0iTTE4LjUgN2guNVY0aC02LjVjMS40IDEuOCAzLjYgMyA2IDN6Ii8+ICAgIDxwYXRoIGZpbGw9IiNEQURDRTAiIGQ9Ik0xOC41IDcuNWMtMi43IDAtNS4yLTEuNC02LjYtMy41aC0uNmMxLjUgMi40IDQuMiA0IDcuMiA0aC41di0uNWgtLjV6Ii8+ICAgIDxwYXRoIGZpbGw9IiNEQURDRTAiIGQ9Ik0xOC41IDcuNWguNVY3aC0uNWMtMi40IDAtNC42LTEuMi02LTNoLS42YzEuNCAyLjEgMy45IDMuNSA2LjYgMy41eiIvPiAgICA8cGF0aCBmaWxsPSIjRjFGM0Y0IiBkPSJNNy41IDNIMTlWMEgxLjVjMS40IDEuOCAzLjYgMyA2IDN6Ii8+ICAgIDxwYXRoIGZpbGw9IiNEQURDRTAiIGQ9Ik03LjUgMy41QzQuOCAzLjUgMi4zIDIuMS45IDBILjNjMS41IDIuNCA0LjIgNCA3LjIgNEgxOXYtLjVINy41eiIvPiAgICA8cGF0aCBmaWxsPSIjREFEQ0UwIiBkPSJNNy41IDMuNUgxOVYzSDcuNWMtMi40IDAtNC42LTEuMi02LTNILjljMS40IDIuMSAzLjkgMy41IDYuNiAzLjV6Ii8+ICA8L2c+PC9zdmc+);content:"";display:block;height:8px;left:0;position:absolute;top:1px;width:19px}.waffle-dbsource-endofpreview-enable-endofwaffle::after{background-color:#f3f3f3;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOSIgaGVpZ2h0PSI4IiB2aWV3Qm94PSIwIDAgMTkgOCI+ICA8ZyBmaWxsPSJub25lIj4gICAgPHBhdGggZmlsbD0iI0YxRjNGNCIgZD0iTTE4LjUgN2guNVY0aC02LjVjMS40IDEuOCAzLjYgMyA2IDN6Ii8+ICAgIDxwYXRoIGZpbGw9IiNEQURDRTAiIGQ9Ik0xOC41IDcuNWMtMi43IDAtNS4yLTEuNC02LjYtMy41aC0uNmMxLjUgMi40IDQuMiA0IDcuMiA0aC41di0uNWgtLjV6Ii8+ICAgIDxwYXRoIGZpbGw9IiNEQURDRTAiIGQ9Ik0xOC41IDcuNWguNVY3aC0uNWMtMi40IDAtNC42LTEuMi02LTNoLS42YzEuNCAyLjEgMy45IDMuNSA2LjYgMy41eiIvPiAgICA8cGF0aCBmaWxsPSIjRjFGM0Y0IiBkPSJNNy41IDNIMTlWMEgxLjVjMS40IDEuOCAzLjYgMyA2IDN6Ii8+ICAgIDxwYXRoIGZpbGw9IiNEQURDRTAiIGQ9Ik03LjUgMy41QzQuOCAzLjUgMi4zIDIuMS45IDBILjNjMS41IDIuNCA0LjIgNCA3LjIgNEgxOXYtLjVINy41eiIvPiAgICA8cGF0aCBmaWxsPSIjREFEQ0UwIiBkPSJNNy41IDMuNUgxOVYzSDcuNWMtMi40IDAtNC42LTEuMi02LTNILjljMS40IDIuMSAzLjkgMy41IDYuNiAzLjV6Ii8+ICA8L2c+PC9zdmc+);content:"";display:block;height:8px;position:absolute;right:0;top:1px;transform:scaleX(-1);width:19px}.waffle-dbsource-endofpreview-header{color:#3c4043;font:400 16px/20px "Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;letter-spacing:0.17px;padding-bottom:8px;text-align:center}.waffle-dbsource-endofpreview-message-line{color:#5f6368;font:400 12px/16px Roboto,RobotoDraft,Helvetica,Arial,sans-serif;letter-spacing:0.3px;text-align:center}.waffle-dbsource-endofpreview-link-button{font:400 12px/16px Roboto,RobotoDraft,Helvetica,Arial,sans-serif;text-decoration:none}.waffle-dbsource-pill{display:flex;background:white;border-radius:8px;box-shadow:0 4px 8px 3px rgba(60,64,67,.15);box-sizing:border-box;color:#4285f4;padding:6px;position:absolute;white-space:nowrap}.waffle-dbsource-pill-info{display:flex;font:400 14px/32px Roboto,RobotoDraft,Helvetica,Arial,sans-serif;letter-spacing:0.2px}.waffle-dbsource-pill-preview-icon .waffle-dataconnector-preview-icon{margin-left:10px;position:relative;vertical-align:middle}.waffle-dbsource-pill-updated-icon .waffle-dataconnector-updated-icon{margin-left:10px;position:relative;vertical-align:middle}.waffle-dbsource-pill-status{color:#202124;margin-left:8px}.waffle-dbsource-pill-timestamp{color:#5f6368;height:32px;line-height:32px;margin:0 16px;white-space:nowrap}.waffle-dbsource-pill-progress{-webkit-align-items:center;align-items:center;display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;height:32px;line-height:32px;margin:0 18px 0 10px}.waffle-dbsource-pill-progress .waffle-dataconnector-pill-spinner{border-radius:50%;box-shadow:inset 0 0 0 2px;color:#188038;display:inline-block;height:18px;margin:7px 0;position:relative;width:18px;margin-right:7px}.waffle-dbsource-pill-progress-message{color:#188038}.waffle-dbsource-pill-error{display:flex;color:#d23f31;height:32px;line-height:32px;margin:0 10px}.waffle-dbsource-pill-error .waffle-dbsource-error-icon{height:18px;margin-right:4px;position:relative;top:4px;width:18px}.docs-gm .waffle-dbsource-pill-error-icon .waffle-dataconnector-error-icon{line-height:32px;margin-right:5px;vertical-align:middle}.waffle-dbsource-pill .docs-material-button{font-size:14px;letter-spacing:0.25px}.docs-gm .waffle-dbsource-pill-refresh-button{color:#188038;font-family:'Google Sans';font-weight:500;padding:0 8px;text-transform:none}.docs-gm .waffle-dbsource-pill-refresh-button.docs-material-button-disabled{color:rgba(0,0,0,0.26)}.waffle-dbsource-pill-refresh-button.docs-material-button-flat-default.docs-material-button.docs-material-button-hover{background-color:#e6f4ea}.waffle-dbsource-pill-refresh-button.docs-material-button-flat-default.docs-material-button.docs-material-button-active{background-color:#ceead6}.docs-gm .waffle-dbsource-pill-showerror-button{color:#202124;text-transform:none}.waffle-dbsource-pill-menu-button{border:none;margin-left:2px;padding:0 6px}.waffle-dbsource-pill-menu-button.docs-material-menu-button-flat-default-hover{background-color:#f8f9fa}.waffle-dbsource-pill-menu-button.docs-material-menu-button-flat-default-active,.waffle-dbsource-pill-menu-button.docs-material-menu-button-flat-default-focused{background-color:#f1f3f4;border:none}.waffle-dbsource-menu-icon{position:relative;top:3px}.waffle-dbsource-pill-menu .goog-menuseparator{margin-bottom:0;margin-top:0}.waffle-dbsource-pill-menu.goog-menu .goog-menuitem{padding-left:11px}.waffle-dbsource-pill-menu svg{height:20px;margin-right:8px;position:relative;width:20px}.waffle-dbsource-pill-menuitem{-webkit-align-items:center;align-items:center;display:flex;height:32px;line-height:32px}.waffle-dbsource-pill-menuitem-generic-action{padding-left:27px}.waffle-dbsource-pill-menuitem-accel{margin-left:auto;padding:0 20px 0 40px;text-align:center;color:#9e9e9e}.waffle-dbsource-pill-menuitem-refreshquery-info svg{margin:0}.waffle-dbsource-pill-menuitem-refreshquery-info-progress{font-style:italic}.waffle-dbsource-pill-menuitem-refreshquery-info-error-button{color:#db4437;text-decoration:underline}.waffle-filter-filtercard{background-color:#f0f0f0;border-radius:8px;padding:8px}.waffle-filter-filtercard:not(:last-child){margin-bottom:8px}.waffle-filter-filtercard-top-row{-webkit-align-items:center;align-items:center;display:flex;padding-bottom:8px}.waffle-filter-filtercard-top-row>div{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.waffle-filter-filtercard-top-row>.waffle-filter-filtercard-label{-webkit-box-flex:1;box-flex:1;-ms-flex-positive:1;-webkit-flex-grow:1;flex-grow:1;-webkit-flex-shrink:1;-ms-flex-negative:1;flex-shrink:1;overflow:hidden;text-overflow:ellipsis}.waffle-filter-filtercard-label{color:#424242;font-size:14px;padding-left:8px}.waffle-filter-filtercard-delete-button{transition:background-color 0.2s ease;background:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+ICA8cGF0aCBmaWxsPSIjZjBmMGYwIiBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPjwvc3ZnPg==");background-color:#bfbfbf;border:0;border-radius:16px;cursor:pointer;height:16px;margin:8px;width:16px}.waffle-filter-filtercard-delete-button:hover{background-color:#aaa}.waffle-filter-filtercard .waffle-filter-filtercard-select .jfk-select{text-align:left;width:100%}.waffle-filterbox-container{color:#202124;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;line-height:32px;vertical-align:middle}.waffle-filterdropdown-filter-color-menu-item{display:table}.waffle-filterdropdown-filter-color{border:1px solid rgba(0,0,0,0.1);border-radius:50%;box-sizing:border-box;display:table-cell;height:20px;left:-15px;margin:0;position:relative;vertical-align:middle;width:20px}.waffle-filterdropdown-filter-color-text{display:table-cell;vertical-align:middle}.goog-menu.waffle-filterdropdown-filter-colors-menu{max-height:50vh;overflow:auto}.waffle-filterdropdown-filter-color-checkbox::after{content:"\002713";left:6px;position:absolute}.waffle-types-number-icon:after{content:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0wIDV2MmgydjhoMlY1SDB6bTUgMHYyaDR2Mkg3YTIgMiAwIDAwLTIgMnY0aDZ2LTJIN3YtMmgyYTIgMiAwIDAwMi0yVjdhMiAyIDAgMDAtMi0ySDV6bTcgMGg0YTIgMiAwIDAxMiAydjEuNWExLjUgMS41IDAgMDEtMS41IDEuNSAxLjUgMS41IDAgMDExLjUgMS41VjEzYTIgMiAwIDAxLTIgMmgtNHYtMmg0di0yaC0yVjloMlY3aC00VjV6IiBmaWxsPSIjNUY2MzY4Ii8+PC9zdmc+)}.waffle-types-text-icon:after{content:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yIDRoMTB2Mkg4djlINlY2SDJWNHptOCA0aDZ2MmgtMnY1aC0ydi01aC0yVjh6IiBmaWxsPSIjNUY2MzY4Ii8+PC9zdmc+)}.waffle-types-date-icon:after{content:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMyAzLjY2N2guNjY3QzE0LjQgMy42NjcgMTUgNC4yNjcgMTUgNXY5LjMzM2MwIC43MzQtLjYgMS4zMzQtMS4zMzMgMS4zMzRINC4zMzNjLS43NCAwLTEuMzMzLS42LTEuMzMzLTEuMzM0TDMuMDA3IDVjMC0uNzMzLjU4Ni0xLjMzMyAxLjMyNi0xLjMzM0g1VjIuMzMzaDEuMzMzdjEuMzM0aDUuMzM0VjIuMzMzSDEzdjEuMzM0ek00LjMzMyAxNC4zMzNoOS4zMzRWN0g0LjMzM3Y3LjMzM3oiIGZpbGw9IiM1RjYzNjgiLz48L3N2Zz4=)}.waffle-types-boolean-icon:after{content:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTkiIGhlaWdodD0iMTgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iIzVGNjM2OCIgZD0iTTkgM2gxLjV2MTJIOXoiLz48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTcuOTUzIDQuOTgybC0uOTk0LS45OTRMNC45NyA1Ljk3NiAyLjk4MiAzLjk4OGwtLjk5NC45OTQgMS45ODkgMS45ODktMS45ODkgMS45ODguOTk0Ljk5NCAxLjk4OS0xLjk4OCAxLjk4OCAxLjk4OC45OTQtLjk5NEw1Ljk2NSA2Ljk3bDEuOTg4LTEuOTg5ek0xOC4wOCAxMC40ODVsLS45OTUtLjk5NC0zLjYgMy42LTEuNDktMS40OTEtLjk5NS45OTQgMi40ODUgMi40ODUuMTIxLS4xMiA0LjQ3My00LjQ3NHoiIGZpbGw9IiM1RjYzNjgiLz48L3N2Zz4=)}.waffle-types-boolean-icon:after,.waffle-types-date-icon:after,.waffle-types-number-icon:after,.waffle-types-text-icon:after{background:none;height:18px;width:18px}.goog-menu.waffle-dataconnector-tablepicker-filtered-menu{border:none;border-radius:0;box-shadow:none;box-sizing:border-box;max-height:auto;overflow-x:hidden;padding-top:2px;width:100%}.goog-menu.waffle-dataconnector-tablepicker-filtered-menu .goog-menu-filter{display:flex;background-color:#f8f9fa;border-radius:8px;height:40px;margin:0 24px 16px 24px;position:relative}.goog-menu.waffle-dataconnector-tablepicker-filtered-menu .goog-menu-filter:after{background:#e8eaed;bottom:-16px;content:'';display:block;height:1px;left:0;position:absolute;width:464px}.waffle-dataconnector-tablepicker-filtered-menu-icon-search{border-bottom:none;padding:11px 0 11px 13px;position:absolute}.waffle-dataconnector-tablepicker-filtered-menu-icon-info{border-bottom:none;border-radius:50%;box-sizing:border-box;height:24px;position:absolute;right:13px;top:8px;width:24px}.waffle-dataconnector-tablepicker-filtered-menu-icon-info:hover{background-color:#f1f3f4}.waffle-dataconnector-tablepicker-filtered-menu-icon-info:active{background-color:#e8eaed}.waffle-dataconnector-tablepicker-filtered-menu-icon-info .docs-material .docs-icon{margin:3px}.goog-menu.waffle-dataconnector-tablepicker-filtered-menu input{-ms-flex:1;-webkit-flex:1;flex:1;background:white;border:1px solid transparent;border-radius:8px;box-shadow:0 1px 3px 1px rgba(60,64,67,.15);font:400 14px/20px "Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;letter-spacing:0.17px;outline:0;padding:0 37px}.goog-menu.waffle-dataconnector-tablepicker-filtered-menu .goog-menu-content{max-height:223px;opacity:0;outline:none;overflow-x:hidden;overflow-y:auto;padding:16px 0 0 16px;position:relative}.waffle-bigquerydbsourcesettingsdialog-project-menu-wrapper .goog-menu.waffle-dataconnector-tablepicker-filtered-menu .goog-menu-content{max-height:261px}.waffle-dataconnector-tablepicker-filtered-menu-loading-bar-wrapper{height:4px;margin-top:-1px;position:absolute;width:100%}.waffle-dataconnector-tablepicker-filtered-menu-loading-bar-wrapper .docs-indeterminate-loading-bar{background-color:#e6f4ea;height:100%;overflow:hidden}.waffle-dataconnector-tablepicker-filtered-menu-loading-bar-wrapper .docs-indeterminate-loading-bar>div{-webkit-animation:loading-bar-animation 1.3s ease-in-out infinite;-moz-animation:loading-bar-animation 1.3s ease-in-out infinite;-o-animation:loading-bar-animation 1.3s ease-in-out infinite;animation:loading-bar-animation 1.3s ease-in-out infinite;background-color:#34a853;border-radius:2px;height:100%;left:0;position:absolute;right:0;top:0;transform:none}@keyframes loading-bar-animation{0%{transform:translateX(-50%) scaleX(0)}23%,54%{transform:translateX(0) scaleX(1)}77%,100%{transform:translateX(50%) scaleX(0)}}.waffle-dataconnector-tablepicker-filtered-menu-error-message{color:#5f6368;font-size:14px;line-height:20px;margin-left:8px;margin-right:24px;text-align:center}.waffle-info-icon-bubble.waffle-dataconnector-tablepicker-filtered-menu-info-bubble{background-color:#3c4043;border-radius:0;opacity:.9;padding:4px 8px}.waffle-dataconnector-tablepicker-filtered-menu-info-bubble .jfk-bubble-arrowup .jfk-bubble-arrowimplbefore,.waffle-dataconnector-tablepicker-filtered-menu-info-bubble .jfk-bubble-arrowup .jfk-bubble-arrowimplafter,.waffle-dataconnector-tablepicker-filtered-menu-info-bubble .jfk-bubble-arrowdown .jfk-bubble-arrowimplbefore,.waffle-dataconnector-tablepicker-filtered-menu-info-bubble .jfk-bubble-arrowdown .jfk-bubble-arrowimplafter{border-color:#3c4043 transparent}.waffle-dataconnector-tablepicker-filtered-menu-info-bubble-content{color:#fff;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:12px;line-height:14px;max-width:200px;text-align:center}.goog-menu .waffle-dataconnector-tablepicker-menuitem.goog-menuitem{border-radius:24px;box-sizing:border-box;line-height:36px;padding:0 16px;transition:background-color 100ms linear;white-space:nowrap;width:480px}.waffle-dataconnector-tablepicker-menuitem.goog-menuitem.goog-menuitem-highlight,.waffle-dataconnector-tablepicker-menuitem.goog-menuitem:focus{border-bottom:none;background-color:#e6f4ea;border-top:none;outline:none}.waffle-dataconnector-tablepicker-menuitem.goog-menuitem.goog-menuitem-highlight.goog-menuitem-active{background-color:#ceead6;border-top:none}.waffle-dataconnector-tablepicker-menuitem.goog-menuitem.goog-menuitem-highlight.goog-menuitem-active.goog-option-selected,.waffle-dataconnector-tablepicker-menuitem.goog-menuitem.goog-option-selected{background-color:#e6f4ea;background-image:none;cursor:auto}.docs-hc-gecko.waffle-dataconnector-tablepicker-menuitem.goog-menuitem.goog-menuitem-highlight,.docs-hc-ie.waffle-dataconnector-tablepicker-menuitem.goog-menuitem.goog-menuitem-highlight,.docs-hc-gecko.waffle-dataconnector-tablepicker-menuitem.goog-menuitem.goog-menuitem-highlight.goog-menuitem-active,.docs-hc-ie.waffle-dataconnector-tablepicker-menuitem.goog-menuitem.goog-menuitem-highlight.goog-menuitem-active,.docs-hc-gecko.waffle-dataconnector-tablepicker-menuitem.goog-menuitem.goog-menuitem-highlight.goog-menuitem-active.goog-option-selected,.docs-hc-ie.waffle-dataconnector-tablepicker-menuitem.goog-menuitem.goog-menuitem-highlight.goog-menuitem-active.goog-option-selected,.docs-hc-gecko.waffle-dataconnector-tablepicker-menuitem.goog-menuitem.goog-option-selected,.docs-hc-ie.waffle-dataconnector-tablepicker-menuitem.goog-menuitem.goog-option-selected{border:1px solid transparent}.waffle-dataconnector-tablepicker-menu-bottom-border .waffle-dataconnector-tablepicker-menuitem.goog-menuitem{padding-right:12px}.waffle-dataconnector-tablepicker-menuitem .goog-menuitem-content{font-size:13px}.waffle-dataconnector-tablepicker-menuitem-content-wrapper{display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;position:relative}.waffle-dataconnector-tablepicker-menuitem-content-wrapper .goog-menuitem-checkbox{display:none}.waffle-dataconnector-tablepicker-menuitem-content-name,.waffle-dataconnector-tablepicker-menuitem-content-id{display:inline-block;font:400 14px/24px Roboto,RobotoDraft,Helvetica,Arial,sans-serif}.waffle-dataconnector-tablepicker-menuitem-content-name{color:rgba(0,0,0,0.87);line-height:36px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.waffle-dataconnector-tablepicker-menuitem-content-wrapper-project .waffle-dataconnector-tablepicker-menuitem-content-name{padding-right:22px;width:176px}.waffle-dataconnector-tablepicker-menuitem-content-wrapper-dataset .waffle-dataconnector-tablepicker-menuitem-content-name{width:389px}.waffle-dataconnector-tablepicker-menuitem-content-id{color:rgba(0,0,0,0.54);line-height:36px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:191px}.waffle-dataconnector-tablepicker-menuitem-content-schemaicon{margin-right:8px;min-width:18px;width:18px}.waffle-dataconnector-tablepicker-menuitem-content-schemaicon svg{margin-right:5px;vertical-align:middle}.waffle-dataconnector-tablepicker-menuitem-content-schemaicon .waffle-dataconnector-tablepicker-filtered-menu-icon-search{padding:0px}.waffle-dataconnector-tablepicker-menuitem-content-nexticon{margin-left:auto;width:18px}.waffle-dataconnector-tablepicker-menuitem-content-nexticon svg{vertical-align:middle}.goog-menuitem-rtl .waffle-dataconnector-tablepicker-menuitem-content-nexticon{transform:rotateY(180deg)}.waffle-dataconnector-tablepicker-multilevelmenu{position:relative}.waffle-dataconnector-tablepicker-multilevelmenu,.waffle-dataconnector-tablepicker-multilevelmenu .goog-menu.waffle-dataconnector-tablepicker-menu{height:286px}.waffle-dataconnector-breadcrumbnavigator{display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;overflow:hidden;vertical-align:middle}.waffle-dataconnector-breadcrumbnavigator-entry{border:1px solid transparent;border-radius:4px;box-shadow:none;color:#202124;cursor:pointer;font-size:22px;letter-spacing:.2px;line-height:24px;overflow:hidden;padding:4px;text-overflow:ellipsis;transition:background-color 100ms linear;vertical-align:middle;white-space:nowrap}.waffle-dataconnector-breadcrumbnavigator-entry{flex:0 1 25%;min-width:45px}.waffle-dataconnector-breadcrumbnavigator-entry-condensed{flex:0 1 10%}.waffle-dataconnector-breadcrumbnavigator-entry:last-of-type{flex:none}.waffle-dataconnector-breadcrumbnavigator-entry.goog-control-hover,.waffle-dataconnector-breadcrumbnavigator-entry.goog-control-focused{background-color:#f1f3f4;outline:none}.waffle-dataconnector-breadcrumbnavigator-entry.goog-control-active{background-color:#e8eaed;outline:none}.waffle-dataconnector-breadcrumbnavigator-entry.goog-control-disabled{cursor:auto}.waffle-dataconnector-breadcrumbnavigator-separator{vertical-align:middle}.waffle-dataconnector-modal-title .waffle-dataconnector-breadcrumbnavigator-separator svg{bottom:unset;height:18px;margin-right:0;transform:unset;vertical-align:middle;width:18px}.waffle-dataconnector-modal-title .waffle-dataconnector-breadcrumbnavigator-separator polygon{fill:#5f6368}.waffle-dataconnector-prompt{background:#fff;border-radius:2px;border:none;box-shadow:0px 16px 24px 2px rgba(0,0,0,0.14),0px 6px 30px 5px rgba(0,0,0,0.12),0px 8px 10px -5px rgba(0,0,0,0.2);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;position:absolute;z-index:1302}.waffle-dataconnector-prompt-bg{left:0;position:absolute;top:0;z-index:1300}.waffle-dataconnector-prompt:focus{outline:none}.waffle-dataconnector-prompt-title{padding:24px 24px 20px 24px}.waffle-dataconnector-prompt-title-text{font:500 21px Roboto,RobotoDraft,Helvetica,Arial,sans-serif;padding-right:38px}.waffle-dataconnector-prompt-title-close{background-size:cover;background:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgPHBhdGggZD0iTTAsMCBMMTgsMCBMMTgsMTggTDAsMTggTDAsMCBaIE0wLDAgTDE4LDAgTDE4LDE4IEwwLDE4IEwwLDAgWiIvPgogICAgPHBvbHlnb24gZmlsbD0iIzAwMCIgcG9pbnRzPSIxNC41MyA0LjUzIDEzLjQ3IDMuNDcgOSA3Ljk0IDQuNTMgMy40NyAzLjQ3IDQuNTMgNy45NCA5IDMuNDcgMTMuNDcgNC41MyAxNC41MyA5IDEwLjA2IDEzLjQ3IDE0LjUzIDE0LjUzIDEzLjQ3IDEwLjA2IDkiLz4KICA8L2c+Cjwvc3ZnPgo=") no-repeat;display:block;height:20px;position:absolute;right:24px;top:26px;width:20px}.waffle-dataconnector-prompt-content{padding:0 24px}.waffle-dataconnector-prompt-buttons{float:right;padding:8px 4px 14px 4px}.waffle-dataconnector-prompt-buttons:after{clear:both;content:"";display:block;height:0;width:0}.waffle-dataconnector-modal{background:#fff;border-radius:2px;border:none;box-shadow:0px 16px 24px 2px rgba(0,0,0,0.14),0px 6px 30px 5px rgba(0,0,0,0.12),0px 8px 10px -5px rgba(0,0,0,0.2);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;position:absolute;z-index:1003}.waffle-dataconnector-modal.docs-material-gm-dialog{border-radius:8px;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif}.waffle-dataconnector-modal-bg{background-color:rgba(0,0,0,0.54);z-index:1002}.waffle-dataconnector-modal:focus{outline:none}.waffle-dataconnector-modal-header{display:flex;-webkit-justify-content:space-between;justify-content:space-between;border-bottom:1px solid rgba(0,0,0,0.12);padding:24px;user-select:none}.waffle-dataconnector-modal-title{font-weight:500;font-size:18px;padding-right:38px}.docs-material-gm-dialog .waffle-dataconnector-modal-title{color:#202124;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:400;font-size:22px}.waffle-dataconnector-modal-title svg{-webkit-transform:scale(1.4,1.4);-moz-transform:scale(1.4,1.4);-ms-transform:scale(1.4,1.4);-o-transform:scale(1.4,1.4);transform:scale(1.4,1.4);bottom:-0.125em;font-size:18px;height:1em;margin-right:8px;position:relative;width:1em}.docs-material-gm-dialog .waffle-dataconnector-modal-title svg path{fill:#5f6368}.waffle-dataconnector-modal-close-button{background:transparent;border-radius:50%;cursor:pointer;display:block;height:28px;opacity:0.54;position:relative;transition:background-color 0.28s ease-out,opacity 0.28s ease-out;width:28px}.waffle-dataconnector-modal-close-button svg{height:18px;margin:5px;width:18px}.waffle-dataconnector-modal-close-button:focus{opacity:1.0;background-color:rgba(0,0,0,0.12);outline:none}.waffle-dataconnector-modal-close-button:hover{opacity:1.0}.waffle-dataconnector-modal-body{padding:24px}.waffle-dataconnector-modal-footer{border-top:1px solid rgba(0,0,0,0.12);padding:15px 12px 15px 24px}.docs-hc-gecko.waffle-dataconnector-modal-close-button polygon,.docs-hc-ie.waffle-dataconnector-modal-close-button polygon{fill:#fff}.waffle-dataconnector-bigqueryquerysettingsdialog{width:512px}.waffle-dataconnector-bigqueryquerysettingsdialog .waffle-dataconnector-modal-body{height:283px;padding:0}.waffle-dataconnector-bigqueryquerysettingsdialog-project-select-wrapper{width:100%}.waffle-dataconnector-bigqueryquerysettingsdialog-project-select-header{font-weight:700;margin:16px 0}.waffle-dataconnector-bigqueryquerysettingsdialog-project-section{padding:24px}.waffle-dataconnector-bigqueryquerysettingsdialog-project-select .docs-material-labeled-select-label{color:rgba(0,0,0,0.87);font-size:14px;font-weight:500}.waffle-dataconnector-bigqueryquerysettingsdialog-error-caption{color:#e06055;margin-top:8px}.waffle-dataconnector-bigqueryquerysettingsdialog-project-select .docs-material-labeled-select-outer-box{margin-top:16px}.waffle-dataconnector-bigqueryquerysettingsdialog .waffle-dataconnector-modal-footer{border-top:none;padding:0}.waffle-dataconnector-bigqueryquerysettingsdialog-continue-button-wrapper{display:flex}.waffle-dataconnector-bigqueryquerysettingsdialog-continue-button-wrapper>p{color:rgba(0,0,0,0.54);flex:1;margin:14px 24px}.waffle-dataconnector-bigqueryquerysettingsdialog-continue-button{margin:16px 24px}.waffle-dataconnector-bigqueryquerysettingsdialog-continue-button-wrapper:after{clear:both;content:"";display:block;height:0;width:0}.waffle-dataconnector-footer-sharing-message{background-color:#fafafa;color:rgba(0,0,0,0.54);padding:16px 24px 24px 60px;position:relative}.waffle-dataconnector-footer-sharing-message:after{background-size:contain;background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNHB4IiBoZWlnaHQ9IjI0cHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0iIzAwMDAwMCI+CiAgICA8cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+CiAgICA8cGF0aCBkPSJNMTggOGgtMVY2YzAtMi43Ni0yLjI0LTUtNS01UzcgMy4yNCA3IDZ2Mkg2Yy0xLjEgMC0yIC45LTIgMnYxMGMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjEwYzAtMS4xLS45LTItMi0yem0tNiA5Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMiAyIC45IDIgMi0uOSAyLTIgMnptMy4xLTlIOC45VjZjMC0xLjcxIDEuMzktMy4xIDMuMS0zLjEgMS43MSAwIDMuMSAxLjM5IDMuMSAzLjF2MnoiLz4KPC9zdmc+Cg==");content:"";display:block;height:18px;left:27px;opacity:0.54;position:absolute;top:23px;width:18px}.waffle-dataconnector-dialog{background:#fff;border-radius:2px;border:none;box-shadow:0px 16px 24px 2px rgba(0,0,0,0.14),0px 6px 30px 5px rgba(0,0,0,0.12),0px 8px 10px -5px rgba(0,0,0,0.2);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;position:absolute;z-index:1003}.waffle-dataconnector-dialog-bg{background-color:#000;left:0;position:absolute;top:0;z-index:1002}.waffle-dataconnector-dialog:focus{outline:none}.waffle-dataconnector-dialog-title{border-bottom:1px solid rgba(0,0,0,0.12);padding:24px}.waffle-dataconnector-dialog-title-draggable{cursor:move}.waffle-dataconnector-dialog-title-text{font:500 21px Roboto,RobotoDraft,Helvetica,Arial,sans-serif;padding-right:38px}.waffle-dataconnector-dialog-title-close{border-radius:50%;cursor:pointer;display:block;height:28px;opacity:0.54;position:absolute;right:18px;top:22px;transition:background-color 0.28s ease-out,opacity 0.28s ease-out;width:28px}.waffle-dataconnector-dialog-title-close svg{-webkit-transform:translate(-50%,-50%);-moz-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);-o-transform:translate(-50%,-50%);transform:translate(-50%,-50%);position:absolute;left:50%;top:50%}.waffle-dataconnector-dialog-title-close:focus{opacity:1.0;background-color:rgba(0,0,0,0.12);outline:none}.waffle-dataconnector-dialog-title-close:hover{background-color:rgba(0,0,0,0.26);opacity:1.0}.waffle-dataconnector-dialog-content{padding:24px}.waffle-dataconnector-dialog-buttons{padding:15px 12px 15px 24px}.waffle-dataconnector-dialog-button-wrapper{float:right}.waffle-dataconnector-dialog-button-wrapper>.docs-material-button{float:left}.waffle-dataconnector-dialog-buttons:after{clear:both;content:'';display:block;height:0;width:0}.waffle-dataconnector-dialog-error-message,.waffle-dataconnector-dialog-info-message{color:rgba(0,0,0,0.87);display:block;font:500 13px Roboto,RobotoDraft,Helvetica,Arial,sans-serif;line-height:18px;margin:7px 0 7px 0px;position:relative;vertical-align:middle}.waffle-dataconnector-dialog-error-message{padding-left:24px;color:#db4437}.waffle-dataconnector-dialog-error-message:before{background-size:cover;background:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgPHBvbHlnb24gcG9pbnRzPSIwIDAgMTggMCAxOCAxOCAwIDE4Ii8+CiAgICA8cGF0aCBmaWxsPSIjZGI0NDM3IiBkPSJNMTUuNDk5ODkzOCwxNiBDMTYuNjA0NTIyLDE2IDE3LjA1NDk3MDgsMTUuMjE0NjU0MyAxNi41MTY2MzgyLDE0LjI2NDY1NTcgTDkuOTgzMzYxNzYsMi43MzUzNDQyOCBDOS40NDAyNjYwNiwxLjc3Njk0MDEgOC41NTQ5NzA3OSwxLjc4NTM0NTY2IDguMDE2NjM4MjQsMi43MzUzNDQyOCBMMS40ODMzNjE3NiwxNC4yNjQ2NTU3IEMwLjk0MDI2NjA1NSwxNS4yMjMwNTk5IDEuMzkwMDU4NDEsMTYgMi41MDAxMDYxOCwxNiBMMTUuNDk5ODkzOCwxNiBaIE0xMCwxNCBMOCwxNCBMOCwxMiBMMTAsMTIgTDEwLDE0IEwxMCwxNCBaIE0xMCwxMSBMOCwxMSBMOCw3IEwxMCw3IEwxMCwxMSBMMTAsMTEgWiIvPgogIDwvZz4KPC9zdmc+Cg==") no-repeat;content:'';display:inline-block;height:18px;left:0px;position:absolute;top:0;width:18px}.waffle-dataconnector-dialog-message-container{float:left;min-height:32px;min-width:200px;width:calc(100% - 260px)}.waffle-dataconnector-dialog-progress-message{margin-left:20px}.waffle-dataconnector-dialog-progress-label{font:13px Roboto,RobotoDraft,Helvetica,Arial,sans-serif;line-height:18px}.waffle-dataconnector-dialog-progress-bar{height:5px;width:450px}.waffle-dataconnector-error-popup{max-width:780px;min-width:480px}.waffle-dataconnector-error-popup .waffle-dataconnector-prompt-content{padding:0 24px;overflow:auto}.waffle-dataconnector-error-popup .waffle-dataconnector-error-message-main{font:500 15px Roboto,RobotoDraft,Helvetica,Arial,sans-serif}.waffle-dataconnector-query-parameter-prompt.waffle-dataconnector-modal{width:320px;z-index:calc(1003 + 300)}.waffle-dataconnector-query-parameter-prompt .waffle-dataconnector-modal-body{padding:0 24px}.waffle-dataconnector-query-parameter-prompt-name-field input{text-transform:uppercase}.waffle-dataconnector-query-parameter-prompt-toggle-row{display:flex;height:21px;margin-top:16px}.waffle-dataconnector-query-parameter-prompt-toggle-label{line-height:21px;margin-left:8px}.waffle-dataconnector-query-parameter-prompt .waffle-dataconnector-modal-header{border-bottom:none}.waffle-dataconnector-query-parameter-prompt .waffle-dataconnector-modal-footer{border-top:none;float:right}.waffle-dataconnector-query-parameter-prompt-rangepicker{border-radius:50%;bottom:6px;height:29px;position:relative;right:0;width:29px}.waffle-dataconnector-query-parameter-prompt-rangepicker .docs-icon{margin:4px auto 4px 3px}.waffle-dataconnector-query-parameter-prompt-rangepicker-focused{background:rgba(0,0,0,0.12);outline:none}.waffle-dataconnector-simple-text-input-prompt-text-field{width:400px}.waffle-dataconnector-bigquery-query-settings-widget-project-section-header{color:rgba(0,0,0,0.54);margin-bottom:4px;whitespace:nowrap}.waffle-dataconnector-bigquery-query-settings-widget-alert{color:#e06055;font-size:11px;font-weight:500}.waffle-dataconnector-bigquery-query-settings-widget-alert .waffle-dataconnector-error-icon{bottom:-0.325em;height:1.4em;margin-right:4px;position:relative;width:1.4em}.waffle-dataconnector-bigquery-query-settings-widget-alert-description{color:#e06055;margin-top:4px}.waffle-dataconnector-bigquery-query-validation-widget-open-button{border-radius:50%;bottom:8px;box-sizing:border-box;cursor:pointer;height:20px;position:absolute;right:8px;width:20px;z-index:10}.waffle-dataconnector-bigquery-query-validation-widget-open-button .waffle-dataconnector-info-icon{height:100%;width:100%}.waffle-dataconnector-bigquery-query-validation-widget-open-button-hover,.waffle-dataconnector-bigquery-query-validation-widget-open-button-focused{background:rgba(66,133,244,0.26)}.waffle-dataconnector-bigquery-query-validation-widget-bar{display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between;background:rgba(66,133,244,0.12);border-top:1px solid rgba(0,0,0,0.12);bottom:0;box-sizing:border-box;color:#4285f4;display:none;font:inherit;font-weight:500;max-height:60px;min-height:40px;padding:8px;padding-left:16px;position:relative;right:0;width:100%}.waffle-dataconnector-bigquery-query-validation-widget-message{max-height:44px;overflow:hidden;text-overflow:ellipsis}.waffle-dataconnector-bigquery-query-validation-widget-visible>.waffle-dataconnector-bigquery-query-validation-widget-bar{display:flex}.waffle-dataconnector-bigquery-query-validation-widget-visible>.waffle-dataconnector-bigquery-query-validation-widget-open-button{display:none}.waffle-dataconnector-bigquery-query-validation-widget-bar .waffle-dataconnector-error-icon-filled{height:20px;margin-right:8px;min-width:20px;width:20px}.waffle-dataconnector-bigquery-query-validation-widget-valid>.waffle-dataconnector-bigquery-query-validation-widget-bar{background:rgba(15,157,88,0.12);color:#0f9d58}.waffle-dataconnector-bigquery-query-validation-widget-bar .waffle-dataconnector-info-icon{height:20px;margin-right:8px;min-width:20px;width:20px}.waffle-dataconnector-bigquery-query-validation-widget-valid .waffle-dataconnector-info-icon,.waffle-dataconnector-bigquery-query-validation-widget-invalid .waffle-dataconnector-info-icon{display:none}.waffle-dataconnector-bigquery-query-validation-widget .waffle-dataconnector-error-icon-filled{display:none}.waffle-dataconnector-bigquery-query-validation-widget-bar .waffle-dataconnector-error-icon-filled{margin-right:8px}.waffle-dataconnector-bigquery-query-validation-widget .waffle-dataconnector-valid-icon{display:none}.waffle-dataconnector-bigquery-query-validation-widget-bar .waffle-dataconnector-valid-icon{height:20px;margin-right:8px;min-width:20px;width:20px}.waffle-dataconnector-bigquery-query-validation-widget-invalid .waffle-dataconnector-bigquery-query-validation-widget-bar{background:rgba(219,68,55,0.12);color:#db4437}.waffle-dataconnector-bigquery-query-validation-widget-invalid .waffle-dataconnector-error-icon-filled{display:block}.waffle-dataconnector-bigquery-query-validation-widget-valid .waffle-dataconnector-valid-icon{display:block}.waffle-dataconnector-bigquery-query-validation-widget-message{max-width:calc(100% - 30px);overflow:hidden;text-overflow:ellipsis}.waffle-dataconnector-bigquery-query-validation-widget-close-button{border-radius:50%;cursor:pointer;height:24px;margin-left:auto;width:24px}.waffle-dataconnector-bigquery-query-validation-widget-close-button svg{height:20px;margin:2px;width:20px}.waffle-dataconnector-bigquery-query-validation-widget .waffle-dataconnector-close-icon polygon{fill:#4285f4}.waffle-dataconnector-bigquery-query-validation-widget-close-button-hover,.waffle-dataconnector-bigquery-query-validation-widget-close-button-focused{background:rgba(66,133,244,0.26);outline:none}.waffle-dataconnector-bigquery-query-validation-widget-invalid .waffle-dataconnector-bigquery-query-validation-widget-close-button-hover,.waffle-dataconnector-bigquery-query-validation-widget-invalid .waffle-dataconnector-bigquery-query-validation-widget-close-button-focused{background:rgba(219,68,55,0.26)}.waffle-dataconnector-bigquery-query-validation-widget-valid .waffle-dataconnector-bigquery-query-validation-widget-close-button-hover,.waffle-dataconnector-bigquery-query-validation-widget-valid .waffle-dataconnector-bigquery-query-validation-widget-close-button-focused{background:rgba(15,157,88,0.26)}.waffle-dataconnector-bigquery-query-validation-widget-valid .waffle-dataconnector-close-icon polygon{fill:#0f9d58}.waffle-dataconnector-bigquery-query-validation-widget-invalid .waffle-dataconnector-close-icon polygon{fill:#db4437}.waffle-dataconnector-codemirrorquerytexteditor{-webkit-box-flex:1;box-flex:1;-ms-flex-positive:1;-webkit-flex-grow:1;flex-grow:1;height:100%;position:relative}.waffle-dataconnector-codemirrorquerytexteditor,.waffle-dataconnector-codemirrorquerytexteditor .CodeMirror{font-family:'Roboto Mono','Consolas',monospace;height:100%}.waffle-dataconnector-codemirrorquerytexteditor .CodeMirror-gutters{border-right:1px solid rgba(0,0,0,0.12)}.waffle-dataconnector-codemirrorquerytexteditor>.CodeMirror-focused .CodeMirror-gutters{border-right:1px solid #4285f4}.waffle-dataconnector-codemirrorquerytexteditor .CodeMirror-linenumbers{background:#f5f5f5}.waffle-dataconnector-codemirrorquerytexteditor .CodeMirror-linenumbers{color:rgba(0,0,0,0.54);font:500 14px Roboto,RobotoDraft,Helvetica,Arial,sans-serif}.waffle-dataconnector-codemirrorquerytexteditor .CodeMirror-gutter-elt{min-width:0;padding-left:24px;padding-right:16px;text-align:center}.waffle-dataconnector-codemirrorquerytexteditor .CodeMirror-lines{padding:16px 0}.waffle-dataconnector-codemirrorquerytexteditor .CodeMirror-line{padding-left:16px}.waffle-dataconnector-queryeditor-collapsible-sidebar-widget{border-bottom:1px solid rgba(0,0,0,0.12)}.waffle-dataconnector-queryeditor-collapsible-sidebar-widget .docs-charts-editor-collapsible-header{color:rgba(0,0,0,0.87)}.waffle-dataconnector-queryeditor-query-settings-icon{margin-right:8px}.waffle-dataconnector-queryeditor-collapsible-sidebar-widget .docs-charts-editor-collapsible-title{width:calc(100% - 50px)}.waffle-dataconnector-queryeditor-collapsible-sidebar-widget .docs-charts-editor-collapsible-summary{display:none}.waffle-dataconnector-queryeditor-collapsible-sidebar-widget .docs-charts-editor-collapsible-content>div{padding:8px 16px 16px}.waffle-dataconnector-queryeditor-collapsible-sidebar-widget .docs-charts-editor-collapsible-header{border:1px solid transparent}.waffle-dataconnector-queryeditor-collapsible-sidebar-widget .docs-charts-editor-collapsible-header.goog-control-focused{border:1px solid #4285f4}.waffle-dataconnector-dbschematreenode-label{cursor:pointer;display:flex;height:22px;position:relative;width:100%}.waffle-dataconnector-dbschematreenode-title{height:22px;line-height:22px;max-width:calc(100% - 18px - 10px);overflow:hidden;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap}.waffle-dataconnector-dbschematreenode .waffle-dataconnector-expand-icon{width:18px;height:18px;margin:2px 10px 2px 2px;transform:rotate(-90deg);transition:transform .2s cubic-bezier(0.4,0.0,1,1)}.waffle-dataconnector-dbschematreenode-rtl .waffle-dataconnector-expand-icon{transform:rotate(90deg)}.waffle-dataconnector-dbschematreenode .waffle-spinner{height:14px;margin:4px 12px 4px 4px;width:14px}.waffle-dataconnector-dbschematreenode .waffle-spinner-circle{border-width:2px}.waffle-dataconnector-dbschematreenode>.waffle-dataconnector-dbschematreenode-label>.waffle-dataconnector-dbschematreenode-spinner-container{display:none}.waffle-dataconnector-dbschematreenode-loading>.waffle-dataconnector-dbschematreenode-label>.waffle-dataconnector-dbschematreenode-spinner-container{display:block}.waffle-dataconnector-dbschematreenode-loading>.waffle-dataconnector-dbschematreenode-label>.waffle-dataconnector-expand-icon{display:none}.waffle-dataconnector-dbschematreenode-open>.waffle-dataconnector-dbschematreenode-label>.waffle-dataconnector-expand-icon{transform:rotate(0deg)}.waffle-dataconnector-dbschematreenode-leaf>.waffle-dataconnector-dbschematreenode-label>.waffle-dataconnector-expand-icon{visibility:hidden}.waffle-dataconnector-dbschematreenode-label:hover,.waffle-dataconnector-dbschematreenode-selected>.waffle-dataconnector-dbschematreenode-label{color:#4285f4}.waffle-dataconnector-dbschematreenode-child-container{display:none;margin-left:16px}.waffle-dataconnector-dbschematreenode-open>.waffle-dataconnector-dbschematreenode-child-container{display:block}.waffle-dataconnector-dbschematreenode-error .waffle-dataconnector-dbschematreenode-title{color:#e06055;font-size:11px;padding-left:13px}.waffle-dataconnector-dbschematreenode-error .waffle-dataconnector-expand-icon{display:none}.waffle-dataconnector-draggablebar{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background:rgba(0,0,0,0.12);bottom:0;position:absolute}.waffle-dataconnector-draggablebar-horizontal{width:100%}.waffle-dataconnector-draggablebar-vertical{height:100%}.waffle-dataconnector-draggablebar-handle{background:#fff;border:1px solid rgba(0,0,0,0.12);box-sizing:border-box;z-index:100}.waffle-dataconnector-draggablebar-horizontal .waffle-dataconnector-draggablebar-handle{cursor:row-resize;height:9px;left:calc(50% - 32px/2);position:absolute;top:calc(50% - 9px/2);width:32px}.waffle-dataconnector-draggablebar-vertical .waffle-dataconnector-draggablebar-handle{background:transparent;border:1px solid rgba(0,0,0,0.12);cursor:col-resize;height:32px;left:calc(50% - 9px/2);position:absolute;top:calc(50% - 32px/2);width:9px}.waffle-dataconnector-draggablebar-handle-icon{background:rgba(0,0,0,0.12);border:3px solid #fff;box-sizing:border-box;height:100%;width:100%}.waffle-dataconnector-textarea-editor{-webkit-box-flex:1;box-flex:1;-ms-flex-positive:1;-webkit-flex-grow:1;flex-grow:1;height:100%;position:relative}.waffle-dataconnector-textarea-editor-textareawrapper{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border-radius:0;border:none;height:100%;margin:0;overflow:hidden;position:absolute;width:100%}.waffle-dataconnector-textarea-editor-textarea{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background-color:white;border-radius:0;border:none;color:#000;display:block;font-family:'Roboto Mono','Consolas',monospace;font-size:13px;height:100%;line-height:20px;margin:0 0 0 48px;outline:none;overflow:auto;overflow-wrap:normal;padding:8px;resize:none;white-space:pre;width:calc(100% - 48px);word-wrap:normal}.waffle-dataconnector-textarea-editor-linegutter{background:#f5f5f5;border-right:1px solid rgba(0,0,0,0.12);height:100%;left:0;position:absolute;top:0;width:48px}.waffle-dataconnector-textarea-editor-focused .waffle-dataconnector-textarea-editor-linegutter{border-right:1px solid #4285f4}.waffle-dataconnector-textarea-editor-linenumber-container{left:0;padding-top:8px;position:absolute;width:100%}.waffle-dataconnector-textarea-editor-linenumber{height:20px;line-height:20px;text-align:center;user-select:none;vertical-align:middle}.waffle-dataconnector-jdbc-query-settings-widget-connection-name-section{font-family:inherit}.waffle-dataconnector-jdbc-query-settings-widget-connection-name-section{margin-top:8px}.waffle-dataconnector-jdbc-query-settings-widget-connection-name-label{color:rgba(0,0,0,0.54)}.waffle-dataconnector-jdbc-query-settings-widget-connection-name{color:rgba(0,0,0,0.87);font-weight:500;margin-top:8px}.waffle-dataconnector-jdbc-query-settings-widget-connection-name-error{color:#e06055}.waffle-dataconnector-jdbc-query-settings-widget-change-button{left:-8px;margin:8px 0;position:relative}.waffle-dataconnector-plx-query-settings-widget{font:inherit}.waffle-dataconnector-plx-query-settings-widget-engine-section{margin-top:8px}.waffle-dataconnector-plx-query-settings-widget-script-section{margin-top:16px}.waffle-dataconnector-plx-query-settings-widget-script-section .waffle-dataconnector-removable-chip{margin-top:8px}.waffle-dataconnector-plx-query-settings-widget-script-label{font-size:11px}.waffle-dataconnector-plx-query-settings-widget-link-script-button{margin:8px 0 0 0}.waffle-dataconnector-modal.waffle-dataconnector-newqueryeditor{display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;height:calc(100% - 16px);max-height:640px;min-height:400px;width:832px}.waffle-dataconnector-modal.waffle-dataconnector-newqueryeditor.docs-material-gm-dialog{width:880px}.waffle-dataconnector-newqueryeditor .waffle-dataconnector-modal-body{display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;-webkit-box-flex:1;box-flex:1;-ms-flex-positive:1;-webkit-flex-grow:1;flex-grow:1;max-height:457px;padding:0}.waffle-dataconnector-newqueryeditor.docs-material-gm-dialog .waffle-dataconnector-modal-body{padding:0 24px 24px}.waffle-dataconnector-newqueryeditor.docs-material-gm-dialog .waffle-dataconnector-modal-header{border:none}.waffle-dataconnector-newqueryeditor .waffle-dataconnector-newqueryeditor-container{display:flex;-ms-flex-direction:row-reverse;-webkit-flex-direction:row-reverse;flex-direction:row-reverse;-webkit-box-flex:1;box-flex:1;-ms-flex-positive:1;-webkit-flex-grow:1;flex-grow:1;-webkit-justify-content:space-between;justify-content:space-between;height:100%;overflow:hidden;position:relative}.waffle-dataconnector-newqueryeditor.docs-material-gm-dialog .waffle-dataconnector-newqueryeditor-container{border:1px solid rgba(0,0,0,0.12);border-radius:4px}.waffle-dataconnector-newqueryeditor-main{border-right:1px solid rgba(0,0,0,0.12);overflow:hidden;position:relative;width:576px}.waffle-dataconnector-newqueryeditor-sidebar{box-sizing:border-box;overflow-x:hidden;overflow-y:auto;width:calc(100% - 576px)}.waffle-dataconnector-newqueryeditor-preview-pane{bottom:0;height:0;position:absolute;overflow:hidden;width:100%}.waffle-dataconnector-newqueryeditor-info-pane:after{clear:both;content:"";display:block;height:0;width:0}.waffle-dataconnector-newqueryeditor .waffle-dataconnector-modal-footer{display:flex;align-items:center;border-top:1px solid rgba(0,0,0,0.12);padding:16px}.waffle-dataconnector-newqueryeditor-footer-message-container{display:flex;-webkit-box-flex:1;box-flex:1;-ms-flex-positive:1;-webkit-flex-grow:1;flex-grow:1;align-items:center;height:48px;margin:0 8px;overflow:auto}.waffle-dataconnector-newqueryeditor-footer-message{color:rgba(0,0,0,0.54)}.waffle-dataconnector-newqueryeditor-footer-message .waffle-dataconnector-error-message:before{content:"";display:block;height:20px}.waffle-dataconnector-newqueryeditor-footer-message .waffle-dataconnector-error-message:after{content:"";display:block;height:20px}.waffle-dataconnector-newqueryeditor-footer-message-container .waffle-dataconnector-error-icon{display:none;margin-right:8px;height:24px;min-width:24px;width:24px}.waffle-dataconnector-newqueryeditor-footer-message-container.waffle-dataconnector-newqueryeditor-unhandled-error>.waffle-dataconnector-newqueryeditor-footer-message{color:#db4437}.waffle-dataconnector-newqueryeditor-footer-message-container.waffle-dataconnector-newqueryeditor-unhandled-error .waffle-dataconnector-error-icon{display:block}.waffle-dataconnector-newqueryeditor-preview-query-button,.waffle-dataconnector-newqueryeditor-execute-query-button{min-width:140px;white-space:nowrap}.waffle-dataconnector-newqueryeditor-preview-query-button .waffle-dataconnector-refresh-icon{height:24px;margin:4px;width:24px}.waffle-dataconnector-newqueryeditor-preview-query-button .waffle-dataconnector-refresh-icon path{fill:#4285f4}.waffle-dataconnector-newqueryeditor-preview-query-button.docs-material-button-disabled .waffle-dataconnector-refresh-icon path{fill:rgba(0,0,0,0.26)}.waffle-dataconnector-newqueryeditor-editor-pane{display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;height:100%;position:relative;overflow:hidden}.waffle-dataconnector-newqueryeditor-sidebar::-webkit-scrollbar-thumb{background:rgba(0,0,0,0.12);min-height:0;width:8px}.waffle-dataconnector-newqueryeditor-sidebar::-webkit-scrollbar-track{border:none;padding:0;width:8px}.waffle-dataconnector-newqueryeditor-sidebar::-webkit-scrollbar{width:8px;border-left:1px solid rgba(0,0,0,0.12)}.waffle-dataconnector-queryeditor-queryparameterchip-name{font-weight:700}.waffle-dataconnector-queryeditor-removable-chip-error .waffle-dataconnector-queryeditor-queryparameterchip-name{color:#db4437}.waffle-dataconnector-queryeditor-queryparameterwidget .waffle-dataconnector-queryeditor-removable-chip{margin:8px 0}.waffle-dataconnector-queryeditor-queryparameterwidget-header{display:flex;-webkit-align-items:center;align-items:center;height:100%}.waffle-dataconnector-queryeditor-queryparameterwidget-header .waffle-dataconnector-query-parameters-icon{height:18px;margin-right:8px;min-width:18px;width:18px}.waffle-dataconnector-queryeditor-queryparameterwidget .waffle-dataconnector-queryeditor-removable-chip{margin-bottom:0}.waffle-dataconnector-queryeditor-queryparameterwidget-add-parameter-button{margin:8px 0 0 0}.waffle-dataconnector-querypreviewrenderer{height:100%;width:100%}.waffle-dataconnector-querypreviewrenderer-canvas-viewport{background:#f3f3f3;direction:ltr;height:100%;overflow:scroll;width:100%}.waffle-dataconnector-querypreviewrenderer-canvas-viewport.native-scrollbar{position:static}.waffle-dataconnector-querypreviewrenderer-preview-overlay{background:rgba(0,0,0,0.12);height:100%;left:0;line-height:80px;opacity:0;position:absolute;text-align:center;top:0;transition:opacity 0.3s ease-in,visibility 0s linear 0.3s;vertical-align:middle;visibility:hidden;width:100%;z-index:2}.waffle-dataconnector-querypreviewrenderer-preview-overlay-text{-webkit-transform:translate(-50%,-50%);-moz-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);-o-transform:translate(-50%,-50%);transform:translate(-50%,-50%);background:rgba(0,0,0,0.54);border-radius:4px;box-shadow:0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12),0px 2px 4px -1px rgba(0,0,0,0.2);color:white;font:500 21px Roboto,RobotoDraft,Helvetica,Arial,sans-serif;left:50%;max-width:80%;padding:20px;position:absolute;top:50%}.waffle-dataconnector-querypreviewrenderer-preview-overlay.visible{opacity:1;transition-delay:0s;visibility:visible}.waffle-dataconnector-querypreviewrenderer-preview-inactive>.waffle-dataconnector-querypreviewrenderer-canvas-viewport{overflow:hidden}.waffle-dataconnector-querypreviewrenderer-canvas-viewport>canvas{height:100%;width:100%}.waffle-dataconnector-querypreviewrenderer-a11y-region{position:absolute;top:-10000px;left:-10000px}.waffle-dataconnector-queryeditor-query-settings-header .docs-icon{margin-right:8px}.waffle-dataconnector-querytexteditor{position:relative}.waffle-dataconnector-querytexteditor-editor-container{height:100%;position:absolute;width:100%}.waffle-dataconnector-querytexteditor-overlay{background-color:#fff;height:100%;left:0;position:absolute;top:0;width:100%;width:100%;z-index:10000}.waffle-dataconnector-querytexteditor-overlay-message{-webkit-transform:translateY(-50%);-moz-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%);color:rgba(0,0,0,0.54);font:500 13px Roboto,RobotoDraft,Helvetica,Arial,sans-serif;position:absolute;text-align:center;top:50%;width:100%}.waffle-dataconnector-querytexteditor-overlay-message a{color:inherit;text-decoration:underline}.waffle-dataconnector-queryeditor-removable-chip-inner{display:inline-block;max-width:100%;position:relative}.waffle-dataconnector-queryeditor-removable-chip-button{background:#f0f0f0;border-radius:16px;border:2px solid transparent;cursor:pointer;display:block;height:32px;line-height:32px;padding:0 32px 0 12px}.waffle-dataconnector-queryeditor-removable-chip-chip-content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.waffle-dataconnector-queryeditor-removable-chip-error .waffle-dataconnector-queryeditor-removable-chip-button{background:#fff;border:2px solid #db4437;overflow:hidden}.waffle-dataconnector-queryeditor-removable-chip-view-only .waffle-dataconnector-queryeditor-removable-chip-button{padding-right:12px}.waffle-dataconnector-queryeditor-removable-chip-button-hover{background:#e0e0e0}.waffle-dataconnector-queryeditor-removable-chip-button-active{background:#d0d0d0}.waffle-dataconnector-queryeditor-removable-chip-button-focused{border:2px solid #4285f4;outline:none}.waffle-dataconnector-queryeditor-removable-chip-button a{color:inherit}.waffle-dataconnector-queryeditor-removable-chip-remove-button{-webkit-transform:translateY(-50%);-moz-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%);background-color:rgba(0,0,0,0.12);border-radius:50%;box-sizing:border-box;height:18px;position:absolute;right:9px;top:50%;width:18px}.waffle-dataconnector-queryeditor-removable-chip-remove-button .waffle-dataconnector-close-icon{height:14px;margin:2px;width:14px}.waffle-dataconnector-queryeditor-removable-chip-remove-button .waffle-dataconnector-close-icon polygon{fill:#fff}.waffle-dataconnector-queryeditor-removable-chip-remove-button-hover{background-color:rgba(0,0,0,0.38);cursor:pointer}.waffle-dataconnector-queryeditor-removable-chip-remove-button-focused{background-color:rgba(0,0,0,0.38);outline:none}.waffle-dataconnector-schema-menu{min-height:30px;position:relative}.waffle-dataconnector-schema-menu .waffle-dataconnector-schema-menu-spinner{left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.waffle-dataconnector-schema-menu-error-message{color:rgba(0,0,0,0.54)}.waffle-dataconnector-queryeditor-schemamenuwidget-header{display:flex;-webkit-align-items:center;align-items:center;height:100%}.waffle-dataconnector-queryeditor-schemamenuwidget-header .waffle-dataconnector-database-icon{height:18px;margin-right:8px;min-width:18px;width:18px}.waffle-dataconnector-queryeditor-sidebaraccordion{box-sizing:border-box;display:flex;flex-direction:column;min-width:200px}.waffle-dataconnector-queryeditor-sidebaraccordion:focus{outline-color:#4285f4}.trix-data-prep-highlight-styled-rect{background-color:#0f9d58;opacity:0.06;pointer-events:none}.range-border.trix-data-prep-highlight-styled-border{border-color:#0f9d58;border-style:dashed}.trix-data-prep-active-column-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:6px 12px 0}.trix-data-prep-insights-cta{background:red;border-radius:8px;height:8px;margin:4px;width:8px}.docs-gm .waffle-gm-sidebar .docs-sidebar-toggle-tabs .jfk-button.docs-sidebar-toggle-tab-active>.trix-data-prep-insights-cta:after{border-bottom:0px}.trix-data-prep-column-label-container{-webkit-align-items:center;align-items:center;display:flex;border-radius:8px;background-color:#f1f3f4;height:42px;padding:0 8px}.trix-data-prep-column-label{color:#202124;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;letter-spacing:0.2px;padding-left:12px;overflow:hidden;text-overflow:ellipsis}div.trix-data-prep-insights-tab .trix-data-prep-insights-container .docs-charts-editor-material-togglebutton{border:none;display:table;height:inherit;line-height:inherit;text-align:unset;width:100%}.trix-data-prep-sidebar-survey-container{background-color:#f8f9fa;height:40px;-webkit-align-items:center;align-items:center;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;padding:0 8px}.trix-data-prep-sidebar-survey-link{color:#188038!important;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;letter-spacing:0.25px}.trix-data-prep-sidebar-survey-link:hover{text-decoration:none}.trix-data-prep-sidebar-survey-container:hover,.trix-data-prep-sidebar-survey-container:focus{background:rgba(0,0,0,.06)}.trix-data-prep-sidebar-survey-container:active{background:rgba(0,0,0,0.12)}.trix-data-prep-date-time-input{margin:16px}.trix-data-prep-date-time-input .nfd-inputall .nfd-input.jfk-textinput{height:initial}.trix-data-prep-date-time-input .nfd-date-time-menu-button{right:10px;top:10px}.trix-data-prep-date-time-input .nfd-inputall .nfd-input{width:268px}.trix-data-prep-date-time-input .nfd-inputall .nfd-input .nfd-date-time-pill .jfk-select{border-radius:24px;padding:3px 24px 3px 10px}.trix-data-prep-date-time-input .nfd-inputall .nfd-input .nfd-date-time-pill .goog-flat-menu-button-dropdown{background:url(//ssl.gstatic.com/ui/v1/disclosure/grey-disclosure-arrow-up-down.png) center no-repeat}.docs-gm .waffle-gm-sidebar .jfk-textinput.trix-data-prep-date-time-input-error{border:1px solid #dd4b39}.trix-data-prep-insight-row,.trix-data-prep-actionable-insight-row{box-sizing:border-box;display:flex;font-size:14px;height:40px;justify-content:space-between;line-height:40px;vertical-align:middle}.trix-data-prep-actionable-insight-row{padding:0 24px 0 11px}.trix-data-prep-actionable-insight-row:hover{background-color:#e6f4ea}.trix-data-prep-actionable-insight-row:hover .docs-icon-img{content:url(//ssl.gstatic.com/docs/common/material_common_sprite146_green.svg)}.trix-data-prep-actionable-insight-icon{margin-right:8px}.trix-data-prep-insight-row{border-bottom:1px solid #dadce0;margin:0 24px 0 11px}.trix-data-prep-insight-row-value{color:#80868b;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:400;margin-right:8px;margin-top:2px}.trix-data-prep-insight-row-name{color:#3c4043;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;padding-right:5px}.trix-data-prep-insights-container{padding-top:24px}.trix-data-prep-actionable-insights-separator{height:16px}.trix-data-prep-type-button,.trix-data-prep-date-time-input-dropdown,.trix-data-prep-currency-input-dropdown,.trix-data-prep-min-box,.trix-data-prep-max-box,.trix-data-prep-blank-checkbox{margin:16px}.trix-data-prep-insights-hidden-data-message{color:#80868b;font-size:13px;font-weight:500;padding:16px 16px 0 24px}.trix-data-prep-db-insights .trix-data-prep-insights-local-only{display:none}#trix-data-prep-column-format-toolbar{background:none;padding:0}.waffle-calculated-columns-dialog{height:505px;max-width:670px;min-width:510px}.waffle-calculated-columns-dialog .modal-dialog-title{margin-bottom:12px}.waffle-calculated-columns-dialog .modal-dialog-title-text{height:24px}.waffle-calculated-columns-description{color:#3c4043;display:inline-block;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;height:40px;letter-spacing:0.25px;line-height:20px;margin:0 0 16px 0}.waffle-calculated-columns-tooltip{display:inline-block}.waffle-calculated-columns-display-name-title{color:#3c4043;display:inline-block;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;letter-spacing:0.25px;line-height:20px;margin-bottom:7px}.docs-gm .waffle-calculated-columns-dialog .waffle-calculated-columns-display-name-input{display:inline-block;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;letter-spacing:0.17px;margin:0}.docs-gm .waffle-calculated-columns-dialog .waffle-calculated-columns-display-name-input-invalid,.docs-gm .waffle-calculated-columns-dialog .waffle-calculated-columns-display-name-input-invalid:focus{border:2px solid #d93025;padding:0px 7px}.docs-gm .waffle-calculated-columns-dialog .waffle-calculated-columns-display-name-error{color:#d93025;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;height:16px;letter-spacing:0.3px;margin:4px 0 8px 0}.docs-gm .waffle-calculated-columns-dialog .waffle-calculated-columns-formula-editor{display:inline-block;height:255px!important;margin-bottom:24px;position:relative}.waffle-calculated-columns-display-name-title,.waffle-calculated-columns-display-name-input,.waffle-calculated-columns-formula-editor{width:calc(100% - 212px)}.waffle-calculated-columns-dialog-view-only .waffle-calculated-columns-display-name-title,.waffle-calculated-columns-dialog-view-only .waffle-calculated-columns-display-name-input,.waffle-calculated-columns-dialog-view-only .waffle-calculated-columns-formula-editor{width:100%}.docs-gm .waffle-calculated-columns-dialog .waffle-calculated-columns-toggle-tabs{display:inline-block;float:right;height:27px;line-height:27px;margin-left:7px;width:205px}.docs-gm .waffle-calculated-columns-toggle-tabs.waffle-gm-sidebar .docs-sidebar-toggle-tabs .jfk-button.docs-sidebar-toggle-tab,.docs-gm .waffle-calculated-columns-toggle-tabs.waffle-gm-sidebar .docs-sidebar-toggle-tabs .jfk-button.docs-sidebar-toggle-tab:hover{height:27px;line-height:27px;margin-top:0}.docs-gm .waffle-calculated-columns-toggle-tabs.waffle-gm-sidebar .docs-sidebar-toggle-tabs .jfk-button.docs-sidebar-toggle-tab-active{color:#1a73e8}.docs-gm .waffle-calculated-columns-toggle-tabs.waffle-gm-sidebar .docs-sidebar-toggle-tabs .jfk-button.docs-sidebar-toggle-tab-active>div:after{border-bottom:3px solid #1a73e8}.docs-gm .waffle-calculated-columns-toggle-tabs.waffle-gm-sidebar .docs-sidebar-toggle-tabs .jfk-button-focused.docs-sidebar-toggle-tab-inactive>div:after{border-bottom:2px dotted #1a73e8}.docs-gm .waffle-calculated-columns-dialog .waffle-calculated-columns-column-menu-tab,.docs-gm .waffle-calculated-columns-dialog .waffle-calculated-columns-function-menu-tab{display:inline;float:right;height:319px;margin-bottom:24px;margin-left:7px;position:relative;width:205px}.docs-gm .waffle-calculated-columns-dialog .waffle-calculated-columns-column-menu-tab .goog-menu.waffle-dbsource-column-filtered-menu,.docs-gm .waffle-calculated-columns-dialog .waffle-calculated-columns-function-menu-tab .goog-menu.waffle-function-filtered-menu{border:1px solid #dadce0;box-shadow:none;box-sizing:border-box;display:inline-block;height:319px;overflow-x:hidden;position:absolute;width:205px}.docs-gm .waffle-calculated-columns-dialog .waffle-calculated-columns-column-menu-tab .goog-menu.waffle-dbsource-column-filtered-menu::-webkit-scrollbar-thumb{min-height:70px}.docs-gm .waffle-calculated-columns-dialog .waffle-calculated-columns-column-menu-tab .goog-menu.waffle-dbsource-column-filtered-menu .goog-menu-filter{padding:4px 4px 10px 7px}.docs-gm .waffle-calculated-columns-dialog .waffle-calculated-columns-column-menu-tab .goog-menu.waffle-dbsource-column-filtered-menu .goog-menu-filter input{line-height:24px;padding:0}.docs-gm .waffle-calculated-columns-dialog .waffle-calculated-columns-column-menu-tab .goog-menu.waffle-dbsource-column-filtered-menu .goog-menu-filter:before{margin-right:7px;transform:scale(0.75)}.waffle-calculated-columns-dialog .modal-dialog-buttons{margin-top:0}.waffle-calculated-columns-tooltip-help-button{box-sizing:border-box;display:inline-block;height:20px;outline:none;padding:2px;vertical-align:bottom;width:20px}.waffle-calculated-columns-tooltip-help-button-hover{background:#f1f3f4;border-radius:75%}.waffle-calculated-columns-tooltip-help-bubble-visible .waffle-calculated-columns-tooltip-help-button,.waffle-calculated-columns-tooltip-help-button-focused,.waffle-calculated-columns-tooltip-help-button-active{background:#e6f4ea;border-radius:75%}.waffle-calculated-columns-tooltip-help-icon{height:100%;width:100%}.waffle-calculated-columns-tooltip-help-bubble-visible .waffle-calculated-columns-tooltip-help-button .waffle-calculated-columns-tooltip-help-icon,.waffle-calculated-columns-tooltip-help-button-focused .waffle-calculated-columns-tooltip-help-icon,.waffle-calculated-columns-tooltip-help-button-active .waffle-calculated-columns-tooltip-help-icon{fill:#188038}.waffle-calculated-columns-tooltip-help-bubble{border:none;border-radius:8px;box-shadow:0 4px 8px 3px rgba(60,64,67,.15);font-size:12px;padding:16px 16px 16px 18px;max-width:280px;width:280px}.waffle-calculated-columns-tooltip-help-bubble:focus{outline:1px solid transparent}.waffle-calculated-columns-tooltip-help-bubble-title{color:#3c4043;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;letter-spacing:0.25px;line-height:20px;margin-bottom:19px}.waffle-calculated-columns-tooltip-help-bubble-subtitle{color:#3c4043;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;letter-spacing:0.3px;line-height:16px}.waffle-calculated-columns-tooltip-help-bubble-example{background-color:#f1f3f4;border-radius:3px;color:#202124;display:inline-block;font-family:'Roboto Mono','Consolas',monospace;font-size:14px;letter-spacing:0.25px;line-height:20px;margin:9px 0 16px 0;opacity:70%;padding:3px 8px 2px 7px}.waffle-calculated-columns-tooltip-help-bubble-link{color:#1a73e8;display:block;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;letter-spacing:0.25px;line-height:20px}.waffle-calculated-columns-formula-editor .waffle-calculated-columns-formula-editor-container{display:inline-block;height:100%;position:absolute;width:100%}.waffle-calculated-columns-formula-editor .waffle-calculated-columns-formula-editor-container .waffle-calculated-columns-formula-editor-input{font-family:'Roboto Mono','Consolas',monospace;font-weight:500;height:255px!important;letter-spacing:0.2px;margin:0;resize:none;width:100%}.waffle-calculated-columns-formula-editor .waffle-calculated-columns-formula-editor-container .waffle-calculated-columns-formula-editor-input-invalid,.waffle-calculated-columns-formula-editor .waffle-calculated-columns-formula-editor-container .waffle-calculated-columns-formula-editor-input-invalid:focus{border:2px solid #d93025;padding:6px 7px!important}.waffle-calculated-columns-validation-widget-open-button{border-radius:50%;bottom:8px;box-sizing:border-box;cursor:pointer;height:20px;position:absolute;right:8px;width:20px;z-index:10}.waffle-calculated-columns-validation-widget-open-button .waffle-dataconnector-info-icon{height:100%;width:100%}.waffle-calculated-columns-validation-widget-open-button-hover,.waffle-calculated-columns-validation-widget-open-button-focused{background:rgba(66,133,244,0.26)}.waffle-calculated-columns-validation-widget-loading>.waffle-calculated-columns-validation-widget-bar .waffle-calculated-columns-validation-widget-spinner{display:block;height:20px;margin-right:8px;min-width:20px;width:20px}.waffle-calculated-columns-validation-widget-bar .waffle-calculated-columns-validation-widget-spinner,.waffle-calculated-columns-validation-widget-spinner{display:none}.waffle-calculated-columns-validation-widget-loading .waffle-calculated-columns-validation-widget-spinner{display:block}.waffle-calculated-columns-validation-widget-loading .waffle-calculated-columns-validation-widget-spinner .waffle-spinner,.waffle-calculated-columns-validation-widget-loading .waffle-calculated-columns-validation-widget-bar .waffle-calculated-columns-validation-widget-spinner .waffle-spinner{height:18px;width:18px}.waffle-calculated-columns-validation-widget-loading .waffle-calculated-columns-validation-widget-spinner .waffle-spinner-circle,.waffle-calculated-columns-validation-widget-loading .waffle-calculated-columns-validation-widget-bar .waffle-calculated-columns-validation-widget-spinner .waffle-spinner-circle{border-width:2px}.waffle-calculated-columns-validation-widget-bar{display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between;background:rgba(66,133,244,0.12);bottom:0;box-sizing:border-box;color:#4285f4;display:none;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:400;max-height:76px;min-height:40px;padding:8px;padding-left:16px;position:absolute;right:0;width:100%}.waffle-calculated-columns-validation-widget-visible>.waffle-calculated-columns-validation-widget-bar{display:flex}.waffle-calculated-columns-validation-widget-visible>.waffle-calculated-columns-validation-widget-open-button{display:none}.waffle-calculated-columns-validation-widget-bar .waffle-dataconnector-error-icon-filled{height:20px;margin-right:8px;min-width:20px;width:20px}.waffle-calculated-columns-validation-widget-valid>.waffle-calculated-columns-validation-widget-bar{background:rgba(15,157,88,0.12);color:#0f9d58}.waffle-calculated-columns-validation-widget-bar .waffle-dataconnector-info-icon{height:20px;margin-right:8px;min-width:20px;width:20px}.waffle-calculated-columns-validation-widget-valid .waffle-dataconnector-info-icon,.waffle-calculated-columns-validation-widget-invalid .waffle-dataconnector-info-icon,.waffle-calculated-columns-validation-widget-loading .waffle-dataconnector-info-icon{display:none}.waffle-calculated-columns-validation-widget .waffle-dataconnector-error-icon-filled{display:none}.waffle-calculated-columns-validation-widget-bar .waffle-dataconnector-error-icon-filled{margin-right:8px}.waffle-calculated-columns-validation-widget .waffle-dataconnector-valid-icon{display:none}.waffle-calculated-columns-validation-widget-bar .waffle-dataconnector-valid-icon{height:20px;margin-right:8px;min-width:20px;width:20px}.waffle-calculated-columns-validation-widget-invalid .waffle-calculated-columns-validation-widget-bar{background:rgba(219,68,55,0.12);color:#db4437}.waffle-calculated-columns-validation-widget-invalid .waffle-dataconnector-error-icon-filled{display:block}.waffle-calculated-columns-validation-widget-valid .waffle-dataconnector-valid-icon{display:block}.waffle-calculated-columns-validation-widget-message{line-height:20px;max-height:60px;max-width:calc(100% - 30px);overflow:auto}.waffle-calculated-columns-validation-widget-close-button{border-radius:50%;cursor:pointer;height:24px;margin-left:auto;width:24px}.waffle-calculated-columns-validation-widget-close-button svg{height:20px;margin:2px;width:20px}.waffle-calculated-columns-validation-widget .waffle-dataconnector-close-icon polygon{fill:#4285f4}.waffle-calculated-columns-validation-widget-close-button-hover,.waffle-calculated-columns-validation-widget-close-button-focused{background:rgba(66,133,244,0.26);outline:none}.waffle-calculated-columns-validation-widget-invalid .waffle-calculated-columns-validation-widget-close-button-hover,.waffle-calculated-columns-validation-widget-invalid .waffle-calculated-columns-validation-widget-close-button-focused{background:rgba(219,68,55,0.26)}.waffle-calculated-columns-validation-widget-valid .waffle-calculated-columns-validation-widget-close-button-hover,.waffle-calculated-columns-validation-widget-valid .waffle-calculated-columns-validation-widget-close-button-focused{background:rgba(15,157,88,0.26)}.waffle-calculated-columns-validation-widget-valid .waffle-dataconnector-close-icon polygon{fill:#0f9d58}.waffle-calculated-columns-validation-widget-invalid .waffle-dataconnector-close-icon polygon{fill:#db4437}.docs-gm .waffle-data-validation-dialog{min-width:672px}.docs-gm .waffle-data-validation-dialog .waffle-dv-list-options-textarea{margin:0;max-width:251px;padding:7px}.docs-gm .waffle-data-validation-dialog .waffle-dv-editbox-number{margin:0;width:50px}.docs-gm .waffle-data-validation-dialog .waffle-dv-editbox-text{margin:0}.docs-gm .waffle-data-validation-dialog .waffle-dv-editbox-date{margin:0;width:72px}.docs-gm .waffle-data-validation-dialog .waffle-input-error-butter-container{margin-left:180px;margin-top:-50px;z-index:999;width:auto}.docs-gm .waffle-dv-customcheckboxlabel{padding-top:14px}.docs-gm .waffle-dv-checkbox-label{padding-left:8px}.docs-gm .waffle-dv-table{width:672px}.docs-gm .waffle-dv-table .jfk-select{margin-right:8px}.docs-gm .waffle-dv-table .goog-flat-menu-button{margin-left:0;height:36px}.docs-gm .waffle-dv-on-invalid-data .jfk-radiobutton-radio{left:2px}.docs-gm .waffle-dv-on-invalid-data .jfk-radiobutton:not(:last-child){padding-right:20px}.waffle-material-confirm-dialog{background:#fff;border-radius:2px;border:none;box-shadow:0px 16px 24px 2px rgba(0,0,0,0.14),0px 6px 30px 5px rgba(0,0,0,0.12),0px 8px 10px -5px rgba(0,0,0,0.2);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;position:absolute;z-index:1002}.waffle-material-confirm-dialog-bg{background-color:rgba(0,0,0,.6);left:0;position:absolute;top:0;z-index:1001}.waffle-material-confirm-dialog-header{font-size:18px;height:18px;line-height:18px;padding:24px 24px 20px 24px}.waffle-material-confirm-dialog-content{padding:0 24px}.waffle-material-confirm-dialog-footer{display:flex;-webkit-justify-content:flex-end;justify-content:flex-end;padding:8px 14px 14px 14px}.waffle-source-destination-selection-dialog{min-width:350px;border-radius:10px}.waffle-source-destination-selection-dialog .docs-material-dialog-title{border-bottom:0}.waffle-source-destination-selection-dialog .docs-material-gm-dialog-title-close{cursor:pointer}.waffle-sdsd-source-container .waffle-sdsd-rangepicker-container{padding:0 0 16px}.waffle-sdsd-destination-container .waffle-sdsd-rangepicker-container{padding:0 0 16px 22px}.waffle-sdsd-rangepicker-label{color:rgba(0,0,0,0.54)}.waffle-sdsd-rangepicker-error-label{color:#d23f31;font-size:13px}.waffle-sdsd-destination-selection{padding:10px 0}.waffle-sdsd-destination-selection .jfk-radiobutton{padding:5px 0}.waffle-sdsd-destination-selection .jfk-radiobutton-radio{left:0}.waffle-range-selection-container{display:flex;align-items:center}.waffle-range-selection-container-focus{border:1px solid #4d90fe;box-shadow:inset 0 1px 2px rgba(0,0,0,0.3);outline:none}.waffle-range-selection-input,.waffle-range-selection-input:focus{background:transparent;border:none;box-sizing:border-box;box-shadow:none;height:25px;font-size:13px;margin:0;outline:none;padding:1px 8px;width:calc(100% - 34px)}.waffle-range-selection-button-container{overflow:hidden;padding:0;text-align:right;width:34px}.waffle-range-selection-button:hover,.waffle-range-selection-button:focus{opacity:0.9}.docs-gm .waffle-range-selection-container{border:1px solid #dadce0;border-radius:4px;box-sizing:border-box;color:#3c4043;padding:1px 8px;font-size:14px;height:36px;margin:8px 0;margin:0;padding:1px}.docs-gm .waffle-range-selection-container-focus{border:2px solid #1a73e8;box-shadow:none;padding:0px 7px;padding:0}.docs-gm .modal-dialog .waffle-range-selection-button,.docs-gm .modal-dialog .waffle-range-selection-button:hover,.docs-gm .modal-dialog .waffle-range-selection-button:focus,.docs-gm .modal-dialog .waffle-range-selection-button:hover:focus,.docs-gm .modal-dialog .waffle-range-selection-button:active,.waffle-range-selection-button{background:transparent!important;border:transparent!important;cursor:pointer;line-height:34px;padding:0;white-space:nowrap}.waffle-range-selection-button{line-height:25px;margin:0;opacity:.70}.docs-gm .waffle-range-selection-button{line-height:33px}.docs-gm .waffle-range-selection-input{color:inherit;font:inherit}.waffle-db-column-insights-menuitem{-webkit-align-items:center;align-items:center;display:flex;height:20px;line-height:20px;white-space:nowrap}.waffle-db-column-insights-menuitem-accel{color:#9e9e9e;margin-left:auto;padding:0 20px 0 40px;text-align:center}.waffle-db-column-insights-menuitem-refreshquery-info-progress{font-style:italic}.waffle-db-column-insights-menuitem-refreshquery-info-error-button{color:#db4437;text-decoration:underline}.waffle-material-labeledinput{font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;position:relative}.waffle-material-labeledinput-inputwrapper{height:46px;position:relative}.waffle-material-labeledinput-inputrow{display:flex;bottom:6px;color:rgba(0,0,0,0.87);height:20px;left:0;position:absolute;vertical-align:top;width:100%;z-index:100}.waffle-material-labeledinput-input{-webkit-box-flex:100;box-flex:100;-ms-flex-positive:100;-webkit-flex-grow:100;flex-grow:100;background:transparent;border:none;color:rgba(0,0,0,0.87);display:block;font-size:13px;height:18px;line-height:18px;outline:none;vertical-align:top}.waffle-material-labeledinput-label{transition:transform 0.2s cubic-bezier(0.4,0.0,1,1);bottom:6px;color:rgba(0,0,0,0.54);font-size:13px;position:absolute;transform-origin:left bottom;width:100%}.waffle-material-labeledinput-errorcontainer{font-size:11px;height:11px;line-height:11px;margin-top:3px;text-align:right}.waffle-material-labeledinput-underline{background:rgba(0,0,0,.42);bottom:3px;height:1px;padding:0;position:absolute;width:100%}.waffle-material-labeledinput-accentunderline{transition:transform 0.2s cubic-bezier(0.4,0.0,1,1);background:#4285f4;bottom:2px;height:2px;padding:0;position:absolute;transform:scaleX(.6);visibility:hidden;width:100%}.waffle-material-labeledinput.waffle-material-labeledinput-focus .waffle-material-labeledinput-accentunderline{transform:scaleX(1);visibility:visible}.waffle-material-labeledinput.waffle-material-labeledinput-focus .waffle-material-labeledinput-label{color:#4285f4}.waffle-material-labeledinput.waffle-material-labeledinput-float .waffle-material-labeledinput-label{transform:translateY(-21px) scale(.846,.846)}.waffle-material-labeledinput.waffle-material-labeledinput-error .waffle-material-labeledinput-accentunderline{background:#db4437;transform:scaleX(1);visibility:visible}.waffle-material-labeledinput.waffle-material-labeledinput-error .waffle-material-labeledinput-label,.waffle-material-labeledinput-errormessage{color:#db4437}.waffle-material-labeledinput-embedded-control{position:relative}.waffle-material-selectioninput .waffle-range-selection-container{border:none;color:rgba(0,0,0,0.87);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;height:33px;line-height:33px;outline:none;padding:0;position:relative;width:100%}.docs-gm .waffle-gm-sidebar .waffle-material-selectioninput .waffle-range-selection-container{border:1px solid #dadce0;border-radius:4px;box-sizing:border-box;color:#3c4043;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;height:42px;line-height:100%;padding:8px 0 8px 8px}.waffle-material-selectioninput .waffle-range-selection-container:after{transition:background-color 0.3s ease;background-color:rgba(0,0,0,0.12);content:'';height:1px;left:0;position:absolute;top:100%;width:100%}.docs-gm .waffle-gm-sidebar .waffle-material-selectioninput .waffle-range-selection-container:after{height:0}.waffle-material-selectioninput:hover .waffle-range-selection-container:after{background-color:rgba(0,0,0,0.38)}.waffle-material-selectioninput .waffle-range-selection-container-focus.waffle-range-selection-container:after{background-color:#4285f4;height:2px}.waffle-material-selectioninput .waffle-range-selection-container.waffle-range-selection-container-focus{box-shadow:none;outline:none}.waffle-material-selectioninput .waffle-range-selection-input,.waffle-material-selectioninput .waffle-range-selection-container-focus .waffle-range-selection-input{padding:0!important}.waffle-material-toolbar-menu-button{color:rgba(0,0,0,0.87);cursor:pointer;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;height:26px;line-height:26px;margin:4px;outline:0}.waffle-material-toolbar-menu-button-disabled{color:rgba(0,0,0,0.12);cursor:default}.waffle-material-toolbar-menu-button-outer-box{border-radius:2px;height:26px;line-height:26px}.waffle-material-toolbar-menu-button-inner-box{height:100%;opacity:.54;width:100%}.waffle-material-toolbar-menu-button-inner-box svg{height:18px;margin:4px 0 4px 4px;width:18px}.waffle-material-toolbar-menu-button-dropdown svg{margin-left:0}.waffle-material-toolbar-menu-button-caption,.waffle-material-toolbar-menu-button-dropdown{display:inline-block;height:26px;line-height:26px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.waffle-material-toolbar-menu-button-hover .waffle-material-toolbar-menu-button-outer-box,.waffle-material-toolbar-menu-button-focused .waffle-material-toolbar-menu-button-outer-box{background-color:rgba(0,0,0,.06)}.waffle-material-toolbar-menu-button-active .waffle-material-toolbar-menu-button-outer-box{background-color:rgba(0,0,0,.12)}.waffle-material-toolbar-menu-button-hover .waffle-material-toolbar-menu-button-inner-box,.waffle-material-toolbar-menu-button-focused .waffle-material-toolbar-menu-button-inner-box,.waffle-material-toolbar-menu-button-active .waffle-material-toolbar-menu-button-inner-box{opacity:0.87}.jfk-bubble.jfk-bubble-promo.waffle-promo-bubble{box-shadow:0px 3px 4px 0px rgba(0,0,0,0.14),0px 3px 3px -2px rgba(0,0,0,0.12),0px 1px 8px 0px rgba(0,0,0,0.2);background:#eeeeee;border:none;color:rgba(0,0,0,0.87);font-family:'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif;max-width:265px;padding:18px 30px}.jfk-bubble.jfk-bubble-promo.waffle-promo-bubble .jfk-bubble-arrowimplbefore{border-color:transparent #eeeeee}.jfk-bubble.jfk-bubble-promo.waffle-promo-bubble .jfk-bubble-arrowimplafter{border-color:transparent #eeeeee}.waffle-promo-bubble-icon{background:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNHB4IiBoZWlnaHQ9IjI0cHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0iIzAwMDAwMCI+PHBhdGggZD0iTTIzIDEybC0yLjQ0LTIuNzguMzQtMy42OC0zLjYxLS44Mi0xLjg5LTMuMThMMTIgMyA4LjYgMS41NCA2LjcxIDQuNzJsLTMuNjEuODEuMzQgMy42OEwxIDEybDIuNDQgMi43OC0uMzQgMy42OSAzLjYxLjgyIDEuODkgMy4xOEwxMiAyMWwzLjQgMS40NiAxLjg5LTMuMTggMy42MS0uODItLjM0LTMuNjhMMjMgMTJ6bS0xMCA1aC0ydi0yaDJ2MnptMC00aC0yVjdoMnY2eiIvPjwvc3ZnPg==');display:inline-block;height:24px;margin-right:8px;position:relative;top:6px;width:24px}.waffle-promo-bubble-header{display:inline-block;font-size:18px;font-weight:500;line-height:14px}.waffle-promo-bubble-description{font-size:14px;line-height:22px}.waffle-promo-bubble-content .jfk-button{transition:color 200ms cubic-bezier(0.4,0.0,0.2,1);cursor:pointer;font-size:14px;letter-spacing:0.04em;padding-right:15px;padding-top:5px;text-transform:uppercase}.jfk-button.waffle-promo-bubble-close{color:rgba(0,0,0,0.54)}.jfk-button-hover.waffle-promo-bubble-close{color:rgba(0,0,0,0.87)}.jfk-button.waffle-promo-bubble-continue{color:rgba(66,133,244,0.87);font-weight:500}.jfk-button-hover.waffle-promo-bubble-continue{color:rgba(66,133,244,1)}.docs-colormenuitems .goog-menuitem.goog-inline-block.waffle-colormenuitems-scheme-header-edit-button{border-radius:4px;border-width:1px 0;height:22px;margin-left:4px;padding:0;width:24px}.goog-menuitem.goog-inline-block.waffle-colormenuitems-scheme-header-edit-button.goog-menuitem-highlight{border-width:0}.waffle-ui-floating-toast{box-shadow:0px 2px 2px 0px rgba(0,0,0,0.14),0px 3px 1px -2px rgba(0,0,0,0.12),0px 1px 5px 0px rgba(0,0,0,0.2);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;bottom:60px;color:rgba(255,255,255,0.87);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;left:15px;line-height:20px;padding:14px 24px}.waffle-ui-floating-toast-action{transition:opacity 250ms cubic-bezier(0.4,0.0,0.2,1);color:#a1c2fa;font-weight:400;opacity:0.87;text-transform:uppercase}.waffle-ui-floating-toast-action:hover{opacity:1}.waffle-function-filtered-menu .goog-menu-filter{display:flex;border-bottom:1px solid #dadce0;padding:4px 4px 10px 7px}.waffle-function-filtered-menu .goog-menu-filter:before{content:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNHB4IiBoZWlnaHQ9IjI0cHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0iIzc1NzU3NSI+CiAgICA8cGF0aCBkPSJNMTUuNSAxNGgtLjc5bC0uMjgtLjI3QzE1LjQxIDEyLjU5IDE2IDExLjExIDE2IDkuNSAxNiA1LjkxIDEzLjA5IDMgOS41IDNTMyA1LjkxIDMgOS41IDUuOTEgMTYgOS41IDE2YzEuNjEgMCAzLjA5LS41OSA0LjIzLTEuNTdsLjI3LjI4di43OWw1IDQuOTlMMjAuNDkgMTlsLTQuOTktNXptLTYgMEM3LjAxIDE0IDUgMTEuOTkgNSA5LjVTNy4wMSA1IDkuNSA1IDE0IDcuMDEgMTQgOS41IDExLjk5IDE0IDkuNSAxNHoiLz4KICAgIDxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz4KPC9zdmc+Cg==');height:24px;margin-right:7px;transform:scale(0.75);width:24px}.waffle-function-filtered-menu .goog-menu-filter input{border:0;color:#202124;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;line-height:24px;min-width:0;outline:0;padding:0}.waffle-function-filtered-menu-item{border-bottom:1px solid #dadce0;padding:10px 10px 10px 15px}.waffle-function-filtered-menu-item:hover,.waffle-function-filtered-menu-item.goog-menuitem-highlight{border-top-width:0}.waffle-function-filtered-menu-item .waffle-filterable-by-text-contains-menu-item-label{color:#3c4043;display:block;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500}.waffle-function-filtered-menu-item .waffle-function-filtered-menu-item-description{color:#80868b;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:12px;font-weight:400}.waffle-function-filtered-menu-item .waffle-filterable-by-text-contains-menu-item-label-match,.waffle-function-filtered-menu-item .waffle-function-filtered-menu-item-description-match{font-weight:500}.waffle-function-filtered-menu::-webkit-scrollbar-thumb{min-height:70px}.waffle-insert-function-row>.goog-menuitem-content{min-width:125px}.waffle-function-category-row{background:#fff;color:#333;cursor:pointer;font-size:13px;font-weight:normal;margin:0;padding:6px 10px;text-overflow:ellipsis;white-space:nowrap;width:250px}.waffle-function-category-row-name,.waffle-function-category-row-description{-ms-flex:1;-webkit-flex:1;flex:1;max-width:95%}.waffle-function-category-row-name{overflow:hidden;text-overflow:ellipsis}.waffle-function-category-row-description{color:#666;display:none;font-size:11px;overflow:hidden;padding:2px 0;text-overflow:ellipsis;white-space:nowrap}.waffle-function-category-active .waffle-function-category-row-description{display:block}.waffle-function-category-active{background:#eee;border-top:1px solid #eee;border-bottom:1px solid #eee;padding:1px 10px}.waffle-info-icon-bubble{border-radius:8px;box-shadow:0 4px 8px 3px rgba(60,64,67,.15);font-size:12px;max-width:200px}.waffle-legacy-mnemonics-toast{background-color:#323232;border-radius:2px;bottom:70px;box-shadow:2px 2px 10px 0 rgba(0,0,0,0.4);color:white;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:15px;left:60px;padding:17px 24px;position:absolute}.waffle-legacy-mnemonics-toast-container{display:-webkit-inline-box;display:-moz-inline-box;display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row}.waffle-legacy-mnemonics-toast-content{display:-webkit-inline-box;display:-moz-inline-box;display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row}.waffle-legacy-mnemonics-toast-text{font-weight:bold;padding-left:4px}.waffle-legacy-mnemonics-toast-cancel{color:#1a73e8;cursor:pointer;font-weight:bold;padding-left:35px;text-transform:uppercase}.waffle-progress-bar.progress-bar-horizontal{background:#c6dafc;height:100%}.waffle-progress-bar>.progress-bar-thumb{background:#4285f4;height:100%}.waffle-indeterminate-progress-bar>.progress-bar-thumb{-webkit-animation:waffle-indeterminate-progress-bar-animation 2s linear infinite;-moz-animation:waffle-indeterminate-progress-bar-animation 2s linear infinite;-o-animation:waffle-indeterminate-progress-bar-animation 2s linear infinite;animation:waffle-indeterminate-progress-bar-animation 2s linear infinite;position:relative;transition:width .2s cubic-bezier(.4,0,.2,1)}@keyframes waffle-indeterminate-progress-bar-animation{0%{left:0%;width:0}50%{left:25%;width:75%}75%{left:100%;width:0%}}.waffle-printing-select-list{background-color:#fafafa;box-shadow:0 0 8px 0 rgba(0,0,0,0.12),0 8px 8px 0 rgba(0,0,0,0.24);border-radius:0 2px 2px 0 2px 2px;left:0;overflow-y:auto;padding:18px 32px;position:absolute;top:0;width:204px;z-index:1003}.waffle-printing-select-list>div{outline:none}.waffle-printing-select-list-checkboxes{margin-bottom:10px}.waffle-printing-select-list-checkboxes .waffle-printing-checkbox-label{line-height:28px;margin-left:12px}.waffle-printing-select-list-cancel{margin-left:0}.docs-gm .goog-menu.waffle-sidebar-draglist-menu{border:none;border-radius:none;box-shadow:none;height:calc(100% - 13px);padding-bottom:12px;padding-top:0;width:160px;z-index:0}.goog-menu.waffle-sidebar-draglist-menu .goog-menu-filter::before{margin-left:2px;margin-right:1px;transform:scale(0.75)}.goog-menu.waffle-sidebar-draglist-menu .goog-menu-filter{padding-bottom:8px;padding-top:8px}.goog-menu.waffle-sidebar-draglist-menu .goog-menu-filter input{line-height:18px}.goog-menu.waffle-sidebar-draglist-menu .goog-menu-content{margin-top:8px;width:100%}.docs-gm .goog-menu.waffle-sidebar-draglist-menu .goog-menuitem{box-sizing:border-box;border-radius:16px;cursor:move;margin:0 4px;overflow:hidden;padding-left:8px;padding-right:8px;margin-bottom:2px;max-width:160px}.waffle-sidebar-draglist-menu .goog-menuitem-highlight{background:#f8f9fa;border-radius:16px;box-shadow:0 1px 2px 0px rgba(60,64,67,.3),0 1px 3px 1px rgba(60,64,67,.15)}.goog-menu.waffle-sidebar-draglist-menu .goog-menuitem-content,.goog-menu.waffle-sidebar-draglist-menu .goog-menuitem-content span{-ms-flex:1;-webkit-flex:1;flex:1;color:#3c4043;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;line-height:18px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.goog-menu.waffle-sidebar-draglist-menu .goog-menuitem-content>div{display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;-webkit-justify-content:flex-start;justify-content:flex-start}.goog-menu.waffle-sidebar-draglist-menu .goog-menuitem-icon{margin:0 8px 0 0;position:relative;top:0}.docs-charts-component:focus{outline:none}.docs-charts-component-canvas{direction:ltr}.docs-charts-tooltip{box-shadow:0px 2px 2px 0px rgba(0,0,0,0.14),0px 3px 1px -2px rgba(0,0,0,0.12),0px 1px 5px 0px rgba(0,0,0,0.2);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;background-color:#ffffff;border:1px solid #c1c1c1;border-radius:2px;color:rgba(0,0,0,0.87);cursor:default;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;font-weight:500;padding:3px 12px;pointer-events:none;position:absolute}.docs-charts-tooltip-label,.docs-charts-tooltip-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.docs-charts-tooltip-entry{margin-bottom:3px;margin-top:3px}.docs-charts-tooltip-entry .docs-charts-tooltip-label{color:rgba(0,0,0,0.54)}.docs-charts-tooltip-entry .docs-charts-tooltip-symbol{margin-right:6px}.docs-charts-tooltip-entry .docs-charts-tooltip-symbol .docs-charts-tooltip-symbol-icon{height:12px;stroke:rgba(0,0,0,0.54);stroke-width:1px;width:12px}.docs-charts-tooltip-entry-single .docs-charts-tooltip-label{margin-bottom:3px}.docs-charts-tooltip-entry-single .docs-charts-tooltip-value{font-size:1.1em;font-weight:700}.docs-charts-tooltip-entry-domain .docs-charts-tooltip-value{color:rgba(0,0,0,0.54)}.docs-charts-tooltip-entry-range .docs-charts-tooltip-value{font-weight:700}.docs-charts-tooltip-entry-range .docs-charts-tooltip-symbol .docs-charts-tooltip-symbol-icon{margin-bottom:-1px}.prof-feedback-bank-xframe-docos-autocomplete-row{box-sizing:border-box;padding:8px 4px;word-wrap:break-word}.docs-ml-icon{direction:ltr;display:inline-block;text-align:left;overflow:hidden;position:relative;vertical-align:middle}.docs-ml-img:before{content:url("//ssl.gstatic.com/docs/common/mobileweb_sprite1.png")}.docs-ml-img-container{height:156px;position:absolute;width:36px}.docs-ml-docs-logo-icon{left:0;top:-36px}.docs-ml-sheets-logo-icon{left:0;top:0}.docs-ml-slides-logo-icon{left:0;top:-96px}.docs-ml-arrow-back-icon{left:0;top:-132px}.docs-ml-edit-icon{left:0;top:-72px}@media screen and (-webkit-min-device-pixel-ratio:2.0){.docs-ml-img{content:url(//ssl.gstatic.com/docs/common/mobileweb_sprite1.png)}.docs-ml-img-container{height:156px;position:absolute;width:36px}.docs-ml-docs-logo-icon{left:0;top:-36px}.docs-ml-sheets-logo-icon{left:0;top:0}.docs-ml-slides-logo-icon{left:0;top:-96px}.docs-ml-arrow-back-icon{left:0;top:-132px}.docs-ml-edit-icon{left:0;top:-72px}}.docs-ml-header{background:#fafafa;border-bottom:1px solid #cbcbcb;box-shadow:0 1px 1px rgba(0,0,0,.1);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif;padding:4px 0;position:fixed;left:0;top:0;width:100%}.docs-ml-header-icon{height:24px;opacity:0.6;width:24px}.docs-ml-header-icon-container{padding:12px}.docs-ml-header-item{display:inline-block;vertical-align:middle}.docs-ml-header-drive-link{padding-left:4px}body[dir="rtl"] .docs-ml-arrow-back-dir{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.docs-ml-header-document-title{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;line-height:24px;padding:0 12px;width:60%;width:calc(100% - 104px)}.docs-ml-header-document-title-text{font-size:20px;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.docs-ml-header-edit-button{float:right;padding-right:4px}.docs-ml-promotion{background:white;bottom:0;box-shadow:0 4px 12px rgba(0,0,0,0.4);font-family:Arial,Helvetica,sans-serif;left:0;position:fixed;width:100%}.docs-ml-promotion-off-screen{-webkit-transform:translateY(100%);-moz-transform:translateY(100%);-ms-transform:translateY(100%);-o-transform:translateY(100%);transform:translateY(100%)}.docs-ml-promotion-shown{-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0);-webkit-transition:-webkit-transform 333ms cubic-bezier(0.4,0.0,0.2,1);transition:transform 333ms cubic-bezier(0.4,0.0,0.2,1)}.docs-ml-promotion-dismissed{-webkit-transform:translateY(100%);-moz-transform:translateY(100%);-ms-transform:translateY(100%);-o-transform:translateY(100%);transform:translateY(100%);box-shadow:none}.docs-ml-promotion-no-horizontal-scroll{overflow-x:hidden}.docs-ml-promotion-header{display:table;padding:24px 24px 0 24px}.docs-ml-promotion-app-icon-container{display:table-cell}.docs-ml-promotion-app-icon{height:36px;width:36px}@media (min-width:600px){.docs-ml-promotion-app-icon{-webkit-transform:scale(1.33);-moz-transform:scale(1.33);-ms-transform:scale(1.33);-o-transform:scale(1.33);transform:scale(1.33)}}.docs-ml-promotion-text{display:table-cell;padding-left:20px;vertical-align:top}.docs-ml-promotion-text-heading{color:rgba(0,0,0,0.87);font-size:16px;font-weight:bold;padding-bottom:7px}.docs-ml-promotion-text-body{color:rgba(0,0,0,0.87);font-size:14px}.docs-ml-promotion-action-row{float:right;margin-top:6px;padding:8px 24px}.docs-ml-promotion-action-row-desktop{margin-top:6px}.docs-ml-promotion-action-container{display:inline-block;height:48px;margin:6px 4px;vertical-align:middle}.docs-ml-promotion-action-button{display:inline-block;font-size:14px;font-weight:500;padding:9px 12px;vertical-align:middle}.docs-ml-promotion-action-button-wrapper:focus{outline-color:#d6d6d6}.docs-ml-promotion-action-button.docs-ml-promotion-yes-button{background-color:#4285f4;border-radius:4px;color:#fafafa;border:1px solid transparent}.docs-ml-promotion-action-button.docs-ml-promotion-yes-button:active{background-color:#1967d2}.docs-ml-promotion-action-button.docs-ml-promotion-no-button{background-color:#fafafa;color:#5f6368;border-radius:4px;border:1px solid #dadce0}.docs-ml-promotion-action-button.docs-ml-promotion-no-button:active{background-color:#f5f5f5}.docs-ml-promotion.desktop{text-align:center}@media (orientation:portrait){.docs-ml-promotion.desktop{padding-top:56px;padding-bottom:80px}}@media (orientation:landscape){.docs-ml-promotion.desktop{padding-top:36px;padding-bottom:56px}}.docs-ml-promotion-heading-desktop{font-family:'Google Sans';font-size:18px;font-weight:bold;color:#202124;padding-top:18px;padding-bottom:10px;line-height:1.5;max-width:360px;margin:0px auto}@media (orientation:landscape){.docs-ml-promotion-heading-desktop{padding-top:0px;max-width:none}}.docs-ml-promotion-text-body-desktop{font-size:14px;line-height:1.5;color:#5f6368;padding-bottom:10px}.docs-icon.docs-ml-promotion-desktop-icon{height:40px;width:40px;-webkit-transform:scale(2.5);-moz-transform:scale(2.5);-ms-transform:scale(2.5);-o-transform:scale(2.5);transform:scale(2.5);-webkit-transform-origin:top;-moz-transform-origin:top;-ms-transform-origin:top;-o-transform-origin:top;transform-origin:top}.docs-icon-ml-promotion-icon-container-desktop{height:100px;width:100px;margin-left:auto;margin-right:auto}@media (orientation:landscape){.docs-icon-ml-promotion-icon-container-desktop{display:inline-block;vertical-align:top}.docs-ml-promotion-description-desktop{display:inline-block;vertical-align:top;text-align:left;padding-left:39px;max-width:645px}}@media (orientation:landscape){.docs-ml-promotion-action-row-desktop{margin-left:-8px}}.docs-ml-promotion-action-row-desktop .docs-ml-promotion-action-container{margin:6px 8px;font-family:'Google Sans'}.docs-ml-promotion-action-row-desktop .docs-ml-promotion-action-button-wrapper:focus{outline:none}.docs-ml-promotion-action-button.docs-ml-promotion-yes-button.docs-ml-promotion-app-themed{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff}.docs-ml-promotion-action-button.docs-ml-promotion-yes-button.docs-ml-promotion-app-themed:active{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff}.docs-ml-promotion-action-button.docs-ml-promotion-no-button.docs-ml-promotion-app-themed{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:white;border:1px solid #dadce0!important;color:#188038}.docs-ml-promotion-action-button-wrapper:focus .docs-ml-promotion-action-button.docs-ml-promotion-yes-button.docs-ml-promotion-app-themed{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;background:#4f9e67;box-shadow:0 1px 3px 1px rgba(52,168,83,0.15)}.docs-ml-promotion-action-button-wrapper:focus .docs-ml-promotion-action-button.docs-ml-promotion-no-button.docs-ml-promotion-app-themed{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#e7f5eb;border:1px solid #bbe2c6!important}.docs-ml-promotion{z-index:1002}.docs-ml-header{z-index:1002}.ess-button{cursor:pointer;display:inline-block}.ess-disabled-button{opacity:0.25;filter:alpha(opacity=25);display:inline-block}.ess-button,.ess-disabled-button{margin:6px;vertical-align:middle}.ess-icon{width:32px;height:32px;background-image:url(//ssl.gstatic.com/docs/documents/share/images/ess-icons-4.png);background-repeat:no-repeat}.ess-gplus-icon{background-position:0 0}.ess-gmail-icon{background-position:-34px 0}.ess-facebook-icon{background-position:-68px 0}.ess-twitter-icon{background-position:-102px 0}.scope-icon-default-group{background-repeat:no-repeat;background-position:0 -24px}.scope-icon-default-user{background-repeat:no-repeat;background-position:0 -342px}.scope-icon-default{display:inline-block}.scope-icon-default{width:21px;height:21px;opacity:0.55;filter:alpha(opacity=55);margin-top:4px;margin-left:4px}.scope-icon-holder{display:inline-block}.scope-icon-holder{background-color:#f5f5f5;height:29px;width:29px;vertical-align:middle}.scope-icon-invite-holder{background-color:#fff}.scope-icon-custom{width:29px;height:29px;vertical-align:middle}.scope-icon-disabled{opacity:0.25;filter:alpha(opacity=25)}.scope-icon-unused-invite{background-position:0 -770px}.scope-icon-used-invite{background-position:0 -417px}.scope-icon-unused-invite,.scope-icon-used-invite{width:29px;height:29px;vertical-align:middle;margin-top:0px;margin-left:0px;background-repeat:no-repeat;opacity:1;filter:alpha(opacity=100)}.vo-public-icon,.vo-unlisted-icon,.vo-domain-public-icon,.vo-domain-unlisted-icon,.vo-privately-shared-icon,.vo-private-icon{width:21px;height:21px;background-repeat:no-repeat;margin-right:4px;vertical-align:bottom}.vo-public-icon{background-position:0 -671px}.vo-unlisted-icon{background-position:0 -294px}.vo-domain-public-icon{background-position:0 -850px}.vo-domain-unlisted-icon{background-position:0 -551px}.vo-privately-shared-icon{background-position:0 -72px}.vo-private-icon{background-position:0 -575px}.waffle-filterbox-content{border:none;height:130px;margin:0px 4px;overflow-y:auto}.waffle-filterbox-content>.goog-menuitem-content{font-size:12px}.waffle-filterbox-content>.goog-menuitem{padding:1px 7em 1px 26px}.waffle-filterbox-content>.goog-menuitem-highlight{border:0px;background-color:#d0d0d0}.waffle-filterbox-action-link,.waffle-filterbox-dash{color:#15c;text-decoration:none}.waffle-filterbox-action-link:hover{text-decoration:underline}.waffle-filterbox-input{margin-right:-23px;padding-right:23px;width:221px}.waffle-filterbox-input-icon{background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -205px -62px;display:inline-block;margin-top:2px;height:12px;width:12px}.waffle-filterbox-label{padding-left:6px}div.waffle-filterbox-label-icon{background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -283px -73px;float:right;height:16px;margin-left:18px;width:16px}.waffle-filterbox-label>div,.waffle-filterbox-label>a{display:inline;font-size:12px;margin-right:3px}.waffle-filterbox-menu-spinner{text-align:center}.docs-gm .waffle-filterbox-menu .goog-menu-filter input{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#fff;border:1px solid #dadce0!important;font-weight:normal}.waffle-filterbox-ok-button .goog-imageless-button-content{font-weight:500;padding:0 15px}.waffle-autofilter-border{border-color:#0f9d58;line-height:0}.docs-gm .waffle-autofilter-border{border-color:#188038}.filtered-incelldropdown-button{background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -791px -13px;cursor:pointer;list-style:none;outline:none}.filtered-incelldropdown-button-disabled{cursor:default;filter:alpha(opacity=30);opacity:0.3}.filtered-incelldropdown-button-hover,.filtered-incelldropdown-button-checked,.filtered-incelldropdown-button-focused{background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -137px -46px}.waffle-autovis-lightbox{background-color:rgba(0,0,0,0.7);height:100%;left:0;position:absolute;top:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;width:100%;z-index:1000}.waffle-autovis-lightbox-container{height:100%;width:100%}.waffle-autovis-lightbox-chart{height:100%;width:100%}.waffle-autovis-lightbox-content{bottom:0;left:0;margin:auto;position:absolute;right:0;top:60px}.waffle-autovis-lightbox-content-inner{position:relative;white-space:nowrap}.waffle-autovis-lightbox-previous.jfk-button-disabled,.waffle-autovis-lightbox-next.jfk-button-disabled{color:grey;cursor:default}.waffle-autovis-lightbox-page-count{color:white;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:16px;margin-top:35px;text-align:center;width:100%}.waffle-autovis-lightbox-button{background-color:transparent;background-image:none;border:0;color:white;cursor:pointer;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;margin:0;outline:0;padding:0}.waffle-autovis-lightbox-button:focus{border:none;padding:0}.waffle-autovis-lightbox-previous,.waffle-autovis-lightbox-next{bottom:0;color:white;cursor:pointer;height:50px;line-height:50px;margin:auto;position:absolute;text-align:center;top:0;width:50px}.waffle-autovis-lightbox-previous{margin-right:25px;right:100%}.waffle-autovis-lightbox-next{left:100%;margin-left:25px}.waffle-autovis-lightbox-readonly .waffle-autovis-lightbox-readonly-hidden{display:none}.waffle-autovis-lightbox-header{background-color:rgba(0,0,0,0.7);height:60px;width:100%}.waffle-autovis-lightbox-buttons-wrapper{color:white;font-weight:500;line-height:60px;margin-left:auto;margin-right:auto;text-align:center;width:100%}.waffle-autovis-lightbox-close{cursor:pointer;position:absolute;right:20px;top:19px}.waffle-date-picker{z-index:10;position:absolute}.goog-date-picker{-moz-user-focus:normal;-moz-user-select:none;position:relative;width:156px;border:1px solid #fff;border-top:0;padding:2px}.goog-date-picker-foot{display:none}.goog-date-picker table{empty-cells:hide}.goog-date-picker-wday,.goog-date-picker table tbody td{width:22px!important;height:17px;text-align:center;vertical-align:middle;font:11px Verdana;padding:0}.goog-date-picker-wday{font-weight:500}.goog-date-picker-btn{border:0;display:block;float:left;width:12px;cursor:pointer;font:9px Verdana;font-weight:500;text-align:center;margin:0;padding:0}.goog-date-picker-monthyear{width:63px;font:11px Verdana;font-weight:500;text-align:center}* html .goog-date-picker table{margin-left:-1px}.goog-date-picker-menu{position:absolute;background:threedface;-moz-user-focus:normal;border-style:solid;border-width:1px}.goog-date-picker-menu ul{list-style:none;margin:0;padding:0}.goog-date-picker-menu ul li{float:none;cursor:default}.goog-date-picker,.goog-date-picker table,.goog-date-picker-wday{background-color:#d9e6f7}.goog-date-picker-selected{background-color:#ae0a84!important;color:#fff!important;font-weight:700!important}.goog-date-picker-date{background-color:#fff}.goog-date-picker table,.goog-date-picker-head td{background-color:#d9e6f7}.goog-date-picker-btn{background-color:transparent;color:#069}.goog-date-picker-other-month{color:#999}.goog-date-picker-wkend-start,.goog-date-picker-wkend-end{background-color:#e8eef7}#goog-dp-0,#goog-dp-1,#goog-dp-2,#goog-dp-3,#goog-dp-4,#goog-dp-5,#goog-dp-6{border-top:1px solid #a2bbdd}#goog-dp-0,#goog-dp-7,#goog-dp-14,#goog-dp-21,#goog-dp-28,#goog-dp-35{border-left:1px solid #a2bbdd}#goog-dp-6,#goog-dp-13,#goog-dp-20,#goog-dp-27,#goog-dp-34,#goog-dp-41{border-right:1px solid #fff}.docs-gm .waffle-date-picker,.docs-gm .waffle-date-picker *{box-sizing:border-box;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:400}.docs-gm .waffle-date-picker{position:absolute;width:188px;z-index:1000}.docs-gm .goog-date-picker{-moz-user-focus:normal;background-color:#fff;border:1px solid #dadce0;border-radius:4px;box-shadow:0 2px 6px 2px rgba(60,64,67,.15);outline:none;padding:0 10px 8px 10px;position:relative;user-select:none;width:188px}.docs-gm .goog-date-picker table{empty-cells:hide;outline:none;width:100%}.docs-gm .goog-date-picker table,.docs-gm .goog-date-picker-head td{background-color:transparent}.docs-gm .goog-date-picker table tbody tr th:first-of-type{display:none}.docs-gm .goog-date-picker table tbody:focus{outline:none;background-color:#e6f4ea}.docs-gm .goog-date-picker-head{color:#80868b;font-size:11px;height:40px}.docs-gm .goog-date-picker-monthyear{letter-spacing:0.2px;padding-left:7px;text-align:left}.docs-gm .goog-date-picker-button{border:0;border-radius:50%;cursor:pointer;display:block;font-size:10px;height:20px;left:2px;line-height:20px;margin:0 auto;padding-left:0;position:relative;text-align:center;width:20px;background-color:rgba(0,0,0,0);transition:background-color 100ms linear}.docs-gm .goog-date-picker-button:hover{background-color:#f1f3f4;transition:background-color 100ms linear}.docs-gm .goog-date-picker-button:focus{outline:none}.docs-gm .goog-date-picker-button:active{background-color:#dadce0;transition:background-color 100ms linear}.docs-gm .goog-date-picker-nextMonth,.docs-gm .goog-date-picker-previousMonth{background:url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNiIgaGVpZ2h0PSI4IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogICAgPGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4KICAgICAgPHBhdGggZmlsbD0iIzc1NzU3NSIgZD0iTS43MjY2NjY2NyA3LjA2TDMuNzggNCAuNzI2NjY2NjcuOTRsLjk0LS45NEw1LjY2NjY2NjcgNCAxLjY2NjY2NjY3IDh6Ii8+CiAgICAgIDxwYXRoIGQ9Ik0tNS00aDE2djE2SC01eiIvPgogICAgPC9nPgogIDwvc3ZnPg==") center no-repeat}[dir="rtl"].docs-gm .goog-date-picker-nextMonth{transform:rotate(180deg)}.docs-gm .goog-date-picker-previousMonth{transform:rotate(180deg)}[dir="rtl"].docs-gm .goog-date-picker-previousMonth{transform:rotate(0deg)}.docs-gm .goog-date-picker-foot{display:none}.docs-gm .goog-date-picker-wday,.docs-gm .goog-date-picker-date{font-size:10px;font-weight:400;height:20px;line-height:20px;margin:auto;position:relative;text-align:center;width:24px}.docs-gm .goog-date-picker-wday{background-color:transparent;color:#80868b}.docs-gm .goog-date-picker-date{color:#202124;cursor:pointer;background-color:transparent;z-index:1}.docs-gm .goog-date-picker-date:focus{outline:none}.docs-gm .goog-date-picker-date::before{border-radius:50%;content:"";display:block;height:20px;left:2px;position:absolute;top:0;width:20px;z-index:-1;background-color:rgba(0,0,0,0);transition:background-color 100ms linear}.docs-gm .goog-date-picker-date::after{content:"";display:block;height:20px;left:0;position:absolute;top:0;width:24px;z-index:2}.docs-gm .goog-date-picker-date:hover::before{background-color:#dadce0;transition:background-color 100ms linear}.docs-gm .goog-date-picker-other-month{color:#80868b}.docs-gm .goog-date-picker-other-month:hover::before{background-color:#f1f3f4;transition:background-color 100ms linear}.docs-gm .goog-date-picker-selected{background-color:transparent!important;font-weight:400!important}.docs-gm .goog-date-picker-selected,.docs-gm .goog-date-picker-selected:hover{color:#fff}.docs-gm .goog-date-picker-selected::before,.docs-gm .goog-date-picker-selected:hover::before{background-color:#188038;transition:background-color 100ms linear}.docs-ui-toast{bottom:74px}.docs-butterbar-container{z-index:1003}.waffle-ellipses{display:inline-block;height:12px;position:relative;width:25px}.waffle-ellipses-message-container{height:0;overflow:hidden;position:absolute;width:0}.waffle-ellipses-container{height:100%;overflow:hidden;width:100%}.waffle-ellipses-sprite{display:block;position:relative}.waffle-ellipses.waffle-ellipses-active svg.waffle-ellipses-sprite{-webkit-animation:waffle-ellipses-sprite-cycle 1000ms steps(5) infinite reverse;-moz-animation:waffle-ellipses-sprite-cycle 1000ms steps(5) infinite reverse;-o-animation:waffle-ellipses-sprite-cycle 1000ms steps(5) infinite reverse;animation:waffle-ellipses-sprite-cycle 1000ms steps(5) infinite reverse}@keyframes waffle-ellipses-sprite-cycle{from{left:0}to{left:-125px}}.waffle-filter-menu{max-height:400px;overflow:auto}.waffle-filter-bar{display:flex;color:#fff;margin-left:35px;height:30px}.waffle-filter-bar-header{font-weight:500;margin-left:10px}.waffle-filter-bar-name-label,.waffle-filter-bar-range-label{padding:7px 0}.waffle-filter-bar-name-input,.waffle-filter-bar-range-input{background-color:transparent;border:1px solid transparent;box-shadow:none;color:#fff;height:19px;margin-top:2.5px}.waffle-filter-bar-name-input:hover,.waffle-filter-bar-range-input:hover{background-color:#6b6b6b}.waffle-filter-bar-name-input:focus,.waffle-filter-bar-range-input:focus{background:#fff;border:1px solid #4d90fe;color:black}.waffle-filter-bar-range-readonly,.waffle-filter-bar-name-readonly{border:1px dotted transparent;margin:0 3px 0 6px;outline:none;overflow:hidden;padding:6px 4px;text-overflow:ellipsis;white-space:nowrap;vertical-align:bottom}.waffle-filter-bar-range-readonly:focus,.waffle-filter-bar-name-readonly:focus{border-color:#ccc}.waffle-filter-bar-options{margin-top:4px}.waffle-filter-bar-close{margin-top:4px}.waffle-filter-bar .goog-flat-button{background-color:transparent;border:none;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;outline:none}.waffle-filter-bar .goog-flat-button:focus,.waffle-filter-bar .goog-flat-button:hover{background-color:#6b6b6b}.docs-gm .waffle-filter-bar .goog-flat-button:focus,.docs-gm .waffle-filter-bar .goog-flat-button:hover{background-color:#5f6368}.waffle-filter-bar .goog-flat-button.goog-flat-button-open,.waffle-filter-bar .goog-flat-button:active{background-color:#3d3d3d}.docs-gm .waffle-filter-bar .goog-flat-button.goog-flat-button-open,.docs-gm .waffle-filter-bar .goog-flat-button:active{background-color:#202124}.waffle-slidingdialog-filterbar{background-color:#555555;border-bottom:1px solid black;border-left:none;border-right:none;border-top:1px solid black;padding:4px 12px}.docs-gm .waffle-slidingdialog-filterbar{background-color:#3c4043}.waffle-filter-bar-name-inputbox{display:inline}.waffle-filter-bar-name-inputbox,.waffle-filter-bar-name-readonly{width:175px}.waffle-filter-bar-promo-container{display:inline;margin-left:32px;margin-top:30px;position:absolute}.waffle-filter-bar-align-right{float:right}.waffle-filter-bar-promo{font-size:11px;width:200px}.waffle-filter-bar-range-filter-pills-container{display:flex;-webkit-flex-shrink:1;-ms-flex-negative:1;flex-shrink:1;-moz-flex-wrap:wrap;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap;margin:0 10px;overflow-y:scroll}.waffle-filter-bar-add-range-filter-button{-webkit-border-radius:25px;-moz-border-radius:25px;border-radius:25px;color:white;margin-top:5px;white-space:nowrap}.waffle-filter-bar-rangepill{-webkit-border-radius:25px;-moz-border-radius:25px;border-radius:25px;background-color:white;margin-right:5px;margin-top:2.5px;min-width:100px;height:25px}.waffle-filter-bar-rangepill-range{background-color:transparent;color:black;margin-left:10px;min-width:60px;padding:5px 0}.waffle-filter-bar .waffle-filter-bar-rangepill .waffle-filter-bar-rangepill-close:focus,.waffle-filter-bar .waffle-filter-bar-rangepill .waffle-filter-bar-rangepill-close:hover{background:transparent}.waffle-filter-bar-rangepill-close{margin:0}.waffle-filter-bar-range-pill-input{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;height:25px}.waffle-filter-bar-range-section,.waffle-filter-bar-range-section-container{display:flex;-ms-flex:1;-webkit-flex:1;flex:1;overflow:hidden}.waffle-filter-bar-range-section-space-eater{-webkit-box-flex:1;box-flex:1;-ms-flex-positive:1;-webkit-flex-grow:1;flex-grow:1}.waffle-slidingdialog-formbar{background-color:#424242;border-left:none;border-right:none;padding:4px 16px 4px 55px}.waffle-form-bar{color:#fff;height:30px}.waffle-form-bar-forms-icon{position:relative;top:5px}.waffle-form-bar-forms-text{font-family:Roboto,Arial,sans-serif;font-size:14px;font-weight:500;margin-left:16px;padding:7px 0}.waffle-form-bar-right-all-buttons{float:right}.waffle-form-bar-right-all-buttons button{background-color:transparent;border-radius:2px;border:0;color:white;cursor:pointer;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:12px;font-weight:500;margin-right:8px;min-width:88px;padding:3px 8px;position:relative;text-transform:uppercase;top:-7px}.waffle-form-bar-right-all-buttons button.goog-button-disabled{color:rgba(255,255,255,0.3);cursor:default}.waffle-form-bar-more-options{margin-left:8px;margin-top:4px}.waffle-form-bar .goog-flat-button{background-color:transparent;border:none;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;outline:none}.waffle-form-bar .goog-flat-button:focus,.waffle-form-bar .goog-flat-button-hover,.waffle-form-bar-right-all-buttons button:focus,.waffle-form-bar-right-all-buttons button:hover{background-color:rgba(204,204,204,0.15);outline-width:0}.waffle-form-bar .goog-flat-button.goog-flat-button-open,.waffle-form-bar .goog-flat-button:active,.waffle-form-bar-right-all-buttons button:active{background-color:rgba(204,204,204,0.25);outline-width:0}.waffle-arguments-help-popup{background-color:white;border:1px solid rgba(0,0,0,.2);box-shadow:0 2px 4px rgba(0,0,0,.2);color:#222;font-size:11px;position:absolute;width:320px;word-wrap:break-word;z-index:1000}.formulas-gm.waffle-arguments-help-popup{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;box-shadow:0 1px 3px 1px rgba(60,64,67,.15);line-height:15px;width:calc(340px + 2*10px)}.waffle-arguments-help-title{display:flex;background-color:#f5f5f5;color:#222;direction:ltr;padding:1px 0 1px 10px}.formulas-gm .waffle-arguments-help-title{background-color:#f5f5f5;border-bottom-left-radius:0px;border-bottom-right-radius:0px;color:#3c4043;line-height:16px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;padding:8px 12px}.waffle-arguments-help-function-name{text-decoration:inherit}.waffle-arguments-help-body{border-top:1px solid #ebebeb}.waffle-arguments-help-content{padding-bottom:2px}.waffle-arguments-help-section{padding:5px 10px}.waffle-arguments-help-section-title{font-size:11px;color:#666}.formulas-gm .waffle-arguments-parameter-help-section{padding:12px 0px}.formulas-gm .formulas-arguments-help-info-title .waffle-arguments-help-section-title{color:#80868b;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;letter-spacing:.8px;line-height:16px;text-transform:uppercase}.formulas-gm .formulas-arguments-help-info-title.waffle-arguments-help-section{padding:8px 12px 3px}.formulas-gm .waffle-arguments-help-content .formulas-arguments-help-info-title.waffle-arguments-help-section{padding-bottom:12px;padding-top:4px}.formulas-gm .waffle-arguments-parameter-help-section .waffle-arguments-help-section-title{color:#80868b;font-family:'Roboto Mono','Consolas',monospace;font-size:13px;transition:0.218s ease-in}.formulas-gm .waffle-arguments-parameter-help-section .waffle-arguments-help-section-active .waffle-arguments-help-section-title{color:#188038;font-weight:bold}.formulas-gm .waffle-arguments-parameter-help-section .waffle-arguments-help-section-active .waffle-arguments-help-section-title{color:#188038;font-weight:bold}.formulas-gm .waffle-arguments-parameter-help-section .waffle-arguments-help-section{padding:0px 12px 4px}.formulas-gm .waffle-arguments-parameter-help-section .waffle-arguments-help-section:last-of-type{padding-bottom:0px}.waffle-arguments-help-parameter-content{font-size:11px}.formulas-gm .waffle-arguments-help-parameter-content{color:#80868b;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:12px}.formulas-gm .waffle-arguments-help-section-active .waffle-arguments-help-parameter-content,.formulas-gm .formulas-arguments-help-info-title .waffle-arguments-help-parameter-content{color:#3c4043}.formulas-gm .waffle-arguments-parameter-help-section .waffle-arguments-help-parameter-content{transition:0.218s ease-in}.waffle-arguments-help-argument-info{}.waffle-arguments-help-formula{-ms-flex:1;-webkit-flex:1;flex:1;direction:ltr;font-family:Inconsolata,monospace,arial,sans,sans-serif;font-size:14px;overflow:hidden;padding:1px 0}.formulas-gm .waffle-arguments-help-formula{font-family:'Roboto Mono','Consolas',monospace}.waffle-arguments-help-example-holder{text-align:left}.waffle-arguments-help-footer{padding:0 10px 8px}.formulas-gm .waffle-arguments-help-footer{padding-bottom:12px}.waffle-arguments-help-parameter{border-radius:4px;padding-left:1px;transition:0.218s ease-in}.waffle-arguments-help-parameter-active{background-color:#feb}.formulas-gm .waffle-arguments-help-parameter-active{background-color:transparent;color:#188038;font-weight:bold}#waffle-arguments-help-learn-more{color:#15c;text-decoration:none}#waffle-arguments-help-learn-more:hover{text-decoration:underline}.waffle-arguments-help-send-feedback{color:#c53929;float:right;text-decoration:none}.waffle-arguments-help-send-feedback:hover,.waffle-arguments-help-send-feedback:focus{text-decoration:underline}.waffle-arguments-help-code{background-color:#f5f5f5;font-family:Inconsolata,monospace,arial,sans,sans-serif}.formulas-gm .waffle-arguments-help-code{background-color:transparent;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif}.waffle-arguments-help-button-container{margin-right:6px}.formulas-gm .waffle-arguments-help-button-container{margin-right:0px}.waffle-arguments-help-button{-webkit-transform:scale(.75,.75);-moz-transform:scale(.75,.75);-ms-transform:scale(.75,.75);-o-transform:scale(.75,.75);transform:scale(.75,.75);display:inline-block;margin:-4px;opacity:.35;padding:2px 3px 0 3px}.formulas-gm .waffle-arguments-help-button{opacity:1;padding:0px;-webkit-transform:none;-moz-transform:none;-ms-transform:none;-o-transform:none;transform:none}.formulas-gm .waffle-arguments-help-button:first-of-type{margin-right:8px}.waffle-arguments-help-button:hover{opacity:.7}.formulas-gm .waffle-arguments-help-button:hover{opacity:1}.formulas-gm .waffle-arguments-help-button .docs-icon-img:before{content:url(//ssl.gstatic.com/docs/common/material_common_sprite146_grey_medium.svg)}.formulas-gm .waffle-arguments-help-button-hover .docs-icon-img:before{content:url(//ssl.gstatic.com/docs/common/material_common_sprite146_grey_dark.svg)}.waffle-arguments-help-arg-suggestions-title-container .waffle-arguments-help-button{opacity:0.7}.formulas-gm .waffle-arguments-help-arg-suggestions-title-container .waffle-arguments-help-button{opacity:1}.waffle-arguments-help-arg-suggestions-title-container .waffle-arguments-help-button:hover{opacity:1}.waffle-arguments-help-toggle-icon{transition:400ms ease-out;-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.waffle-arguments-help-toggle-icon-flipped{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}.formulas-gm .waffle-formula-help-button-hover-container{padding-left:1px;padding-top:1px}.formulas-gm .waffle-formula-help-button-hover-container:hover,.formulas-gm .waffle-arguments-help-button.waffle-arguments-help-button-focused{background-color:#dadce0;border-radius:50%;outline:none}.waffle-arguments-help-pointer{border-left:5px solid #a3a3a3;border-top:4px solid transparent;border-bottom:4px solid transparent;margin-top:8px;position:absolute;transition:0.218s ease-in-out}.waffle-arguments-help-arg-suggestions-section{display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;background:#e6f4ea;padding:10px;padding-bottom:14px;padding-right:0px;font-family:'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif}.formulas-gm .waffle-arguments-help-arg-suggestions-section{padding-right:12px}.waffle-arguments-help-arg-suggestions-v1-ui.waffle-arguments-help-arg-suggestions-section{background:#0f9d58;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif}.waffle-arguments-help-arg-suggestions-title-container{display:flex;color:#188038;font-size:13px}.waffle-arguments-help-arg-suggestions-v1-ui .waffle-arguments-help-arg-suggestions-title-container{color:#fff}.waffle-arguments-help-arg-suggestions-title{-webkit-align-items:center;align-items:center;display:flex;-ms-flex:1;-webkit-flex:1;flex:1}.waffle-arguments-help-arg-suggestions-title-text{font-weight:500;text-transform:capitalize}.waffle-arguments-help-arg-suggestions-v1-ui .waffle-arguments-help-arg-suggestions-title-text{font-weight:700;text-transform:uppercase}.waffle-arguments-help-arg-suggestions-selection-message{font-size:12px;font-weight:400}.waffle-arguments-help-arg-suggestions-chips{margin-top:8px;margin-right:10px}.waffle-arguments-help-arg-suggestions-chips-container{-webkit-align-items:center;align-items:center;display:flex}.waffle-arguments-help-arg-suggestions-chip{box-shadow:0 1px 2px 0 rgba(60,64,67,0.30),0 1px 3px 1px rgba(60,64,67,0.15);background:#fff;border:1px solid transparent;border-radius:8px;color:#5f6368;cursor:pointer;font-size:13px;font-family:'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;height:16px;line-height:16px;margin-right:8px;max-width:100px;overflow:hidden;padding:7px;text-overflow:ellipsis;white-space:nowrap}.waffle-arguments-help-arg-suggestions-v1-ui .waffle-arguments-help-arg-suggestions-chip{box-shadow:0px 2px 2px 0px rgba(0,0,0,0.14),0px 3px 1px -2px rgba(0,0,0,0.12),0px 1px 5px 0px rgba(0,0,0,0.2);background:#fff;border-radius:4px;border:1px solid #e0e0e0;color:rgba(0,0,0,0.87);font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;min-width:60px;text-align:center}.waffle-arguments-help-arg-suggestions-v2-ui .waffle-arguments-help-arg-suggestions-chip.goog-button-hover,.waffle-arguments-help-arg-suggestions-v2-ui .waffle-arguments-help-arg-suggestions-chip.goog-button-focused{box-shadow:0 1px 1px 0 rgba(52,168,83,0.50),0 1px 3px 1px rgba(52,168,83,0.50);-webkit-transform:scale(1.05);-moz-transform:scale(1.05);-ms-transform:scale(1.05);-o-transform:scale(1.05);transform:scale(1.05);border:1px solid #1e8e3e;outline:none}.waffle-arguments-help-arg-suggestions-v1-ui .waffle-arguments-help-arg-suggestions-chip.goog-button-hover,.waffle-arguments-help-arg-suggestions-v1-ui .waffle-arguments-help-arg-suggestions-chip.goog-button-focused{-webkit-transform:scale(1.05);-moz-transform:scale(1.05);-ms-transform:scale(1.05);-o-transform:scale(1.05);transform:scale(1.05);outline:none}.waffle-arguments-help-arg-suggestions-chip.waffle-suggested-arg-chip-selected{box-shadow:0 1px 1px 0 rgba(52,168,83,0.50),0 1px 3px 1px rgba(52,168,83,0.50);background:rgba(52,168,83,0.04);border:1px solid #1e8e3e;color:#1e8e3e}.waffle-arguments-help-arg-suggestions-v1-ui .waffle-arguments-help-arg-suggestions-chip.waffle-suggested-arg-chip-selected{box-shadow:0px 2px 2px 0px rgba(0,0,0,0.14),0px 3px 1px -2px rgba(0,0,0,0.12),0px 1px 5px 0px rgba(0,0,0,0.2);background:#4285f4;border:1px solid #4285f4;font-weight:700;color:#fff}.waffle-arguments-help-arg-suggestions-chip-icon{display:inline-block;float:left;margin-right:7px;height:16px;width:16px}.waffle-arguments-help-arg-suggestions-v1-ui .waffle-arguments-help-arg-suggestions-chip-icon,.waffle-arguments-help-arg-suggestions-v2-ui-no-chip-icon .waffle-arguments-help-arg-suggestions-chip-icon{display:none}.waffle-arguments-help-arg-suggestions-chip-value{line-height:17px;margin-left:-1px}.waffle-formula-autocomplete-renderer .waffle-ac-active{background:#eeeeee}.waffle-ac-renderer.formulas-gm.waffle-formula-autocomplete-renderer .waffle-ac-active{background:#f5f5f5}.waffle-ac-renderer.formulas-gm.waffle-formula-autocomplete-renderer{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;box-shadow:0 1px 3px 1px rgba(60,64,67,.15);width:calc(340px + 2*10px)}.waffle-function-autocomplete-row{text-overflow:ellipsis;width:340px}.waffle-function-autocomplete-row-name,.waffle-function-autocomplete-row-formula{-ms-flex:1;-webkit-flex:1;flex:1;color:#222;direction:ltr;font-size:13px;font-family:Inconsolata,monospace,arial,sans,sans-serif;margin:-2px 0}.waffle-function-autocomplete-row-name{overflow:hidden;text-overflow:ellipsis}.formulas-gm .waffle-function-autocomplete-row-name,.formulas-gm .waffle-function-autocomplete-row-formula{color:#202124;font-size:14px}.waffle-formula-autocomplete-row-primary-content .waffle-function-autocomplete-row-formula{margin:0;overflow:hidden}.waffle-function-autocomplete-row-description{color:#666;display:none;font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.formulas-gm .waffle-function-autocomplete-row-description{color:#5f6368;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:12px}.waffle-ac-active .waffle-function-autocomplete-row-description{display:block}.waffle-function-autocomplete-row-shortcut,.waffle-function-autocomplete-row-simplified-shortcut{color:#666;direction:ltr}.waffle-actionable-autocomplete-row,.waffle-contextual-formula-autocomplete-row,.waffle-named-range-autocomplete-row{-webkit-align-items:flex-start;align-items:flex-start;display:flex;cursor:pointer;direction:ltr}.waffle-ac-row.waffle-ac-actionable-row{padding:1px 10px}.waffle-ac-row.waffle-ac-named-range-row,.waffle-ac-row.waffle-ac-contextual-row{padding-top:1px}.formulas-gm .waffle-ac-active.active.waffle-ac-row:first-of-type{border-top-left-radius:4px;border-top-right-radius:4px}.formulas-gm .waffle-ac-active.active.waffle-ac-row:last-of-type{border-bottom-left-radius:4px;border-bottom-right-radius:4px}.waffle-ac-actionable-row{border-bottom:1px solid rgba(0,0,0,0.12);border-top:1px solid rgba(0,0,0,0.12)}.waffle-function-autocomplete-row-icon-container,.waffle-named-range-autocomplete-row-icon-container{display:flex;margin-right:3px;width:25px}.waffle-ac-actionable-row .waffle-function-autocomplete-row-icon-container{opacity:0.4}.waffle-ac-contextual-row .waffle-function-autocomplete-row-icon-container{margin:1px 2px 2px 1px}.waffle-actionable-formula-autocomplete-row-content,.waffle-contextual-formula-autocomplete-row-content,.waffle-named-range-autocomplete-row-content{-ms-flex:1;-webkit-flex:1;flex:1;direction:ltr;padding-top:2px;white-space:normal;width:calc(340px - 25px)}.waffle-actionable-formula-autocomplete-row-content,.waffle-contextual-formula-autocomplete-row-content{word-wrap:break-word}.waffle-named-range-autocomplete-row-content{word-wrap:ellipsis}.waffle-formula-autocomplete-row-primary-content{-webkit-align-items:center;align-items:center;display:flex;direction:ltr}.waffle-contextual-formula-autocomplete-row .waffle-formula-autocomplete-row-primary-content{margin:-2px 0}.waffle-ac-close-autocomplete-row{border:none!important}.waffle-ac-close-autocomplete-row{cursor:default!important;background:rgba(0,0,0,0.15)}.waffle-close-autocomplete-row-content{-webkit-align-items:center;align-items:center;display:flex;-webkit-justify-content:flex-end;justify-content:flex-end;-ms-flex:1;-webkit-flex:1;flex:1}.waffle-close-autocomplete-row-close-button{cursor:pointer;opacity:0.3}.waffle-close-autocomplete-row-close-button:hover,.waffle-close-autocomplete-row-close-button:focus{opacity:0.5}.waffle-close-autocomplete-row-message{-ms-flex:1;-webkit-flex:1;flex:1;color:#000;font-weight:500;overflow:hidden;overflow-wrap:break-word;white-space:normal}.formulas-gm hr{background-color:#dadce0;border:0;height:1px;margin:0px 12px}.waffle-sidebar-container.waffle-pivot-sidebar{display:block;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif!important;width:300px}.waffle-sidebar-container.waffle-pivot-sidebar:focus{outline:1px solid #4285f4}body:not(.docs-gm) .waffle-sidebar-title-close{border:transparent;border-radius:50%}body:not(.docs-gm) .waffle-sidebar-title-close:focus{background-color:rgba(255,255,255,.24);border:transparent}#waffle-pivot-aggr{display:inline;font-weight:normal;margin-right:5px}#waffle-pivot-aggr .docs-material-select-outer-box{display:flex;border-bottom:none}#waffle-pivot-aggr-select{font-size:12px}.docs-gm .waffle-gm-sidebar .waffle-pivot-container{border-top:none;padding:12px 16px 0}.waffle-pivot-container{border:none;border-top:1px solid #e0e0e0;padding:14px 14px 6px}.waffle-pivot-label{color:rgba(0,0,0,0.87);font-weight:bold;padding:0 0 14px 2px;position:relative}#waffle-pivot-aggr-label{color:rgba(0,0,0,0.87);font-size:13px;font-weight:500;text-decoration:none}.docs-gm .waffle-gm-sidebar .waffle-pivot-label,.docs-gm .waffle-gm-sidebar #waffle-pivot-aggr-label{color:#202124;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;letter-spacing:0.2px;padding-bottom:18px}.docs-gm .waffle-gm-sidebar .waffle-pivot-add-button{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:white;border:1px solid #dadce0!important;color:#188038;height:24px;padding:3px 12px 5px;color:#188038;letter-spacing:.25px;padding:3px 11px 1px 13px;text-transform:none}.waffle-pivot-add-button{border:transparent;color:#4285f4;cursor:pointer;font-family:'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;margin:0;padding:0 3px 0 6px;position:absolute;right:0;text-transform:uppercase;top:-3px}.docs-gm .waffle-gm-sidebar .waffle-pivot-add-button:hover{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#f8fcf9;border:1px solid #c8e7d1!important;height:24px;padding:3px 12px 5px;padding:3px 11px 1px 13px}.docs-gm .waffle-gm-sidebar .waffle-pivot-add-button:focus{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#e7f5eb;border:1px solid #bbe2c6!important;height:24px;padding:3px 12px 5px;padding:3px 11px 1px 13px}.hc-enabled .waffle-pivot-add-button:focus{outline:1px solid}.docs-gm .waffle-gm-sidebar .waffle-pivot-add-button:hover:focus{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#dff2e4;border:1px solid #b5e0c1!important;height:24px;padding:3px 12px 5px;padding:3px 11px 1px 13px}.docs-gm .waffle-gm-sidebar .waffle-pivot-add-button:active{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#dff2e4;border:1px solid transparent!important;box-shadow:0 2px 6px 2px rgba(60,64,67,.15);height:24px;padding:3px 12px 5px;padding:3px 11px 1px 13px}.waffle-pivot-add-button:focus{background-color:rgba(66,133,244,.12);border:transparent}.docs-gm .waffle-gm-sidebar .waffle-pivot-add-button-disabled{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:white;border:1px solid #f1f3f4!important;color:#3c4043;opacity:0.38;height:24px;padding:3px 12px 5px;padding:3px 11px 1px 13px}.waffle-pivot-add-button-disabled{color:rgba(0,0,0,.12);cursor:default}.waffle-pivot-rangepicker-container{padding:8px 16px 8px}#waffle-pivot-range-selection{padding-bottom:8px}#waffle-pivot-range-selection .waffle-range-selection-button{border-radius:50%;margin:0;padding:4px 2px 4px 0}#waffle-pivot-range-selection .waffle-range-selection-button:focus{background-color:rgba(0,0,0,.12)!important}.waffle-pivot-rangepicker-error-label{color:#db4437;font-size:13px}.waffle-pivot-drop-target{height:auto;margin-bottom:-22px;margin-top:-24px;padding-bottom:24px;padding-top:24px}.docs-gm .waffle-gm-sidebar .waffle-pivot-pill{box-shadow:0 1px 3px 1px rgba(60,64,67,.15);margin-bottom:16px}.waffle-pivot-pill{transition:max-height 0.25s cubic-bezier(0.4,0.0,0.2,1);background-color:#fff;border:none;border-radius:2px;box-shadow:0px 0px 2px 0px rgba(0,0,0,0.12),0px 2px 2px 0px rgba(0,0,0,0.24);cursor:move;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif!important;margin-bottom:8px}.waffle-pivot-pill:focus{outline-color:#4285f4}.hc-enabled .waffle-pivot-pill:focus{outline:1px solid}.waffle-pivot-pill-disabled{cursor:default}.docs-gm .waffle-gm-sidebar .waffle-pivot-pill-checkbox-label{color:#5f6368;font-size:12px;letter-spacing:.13px}.waffle-pivot-pill-checkbox-label{margin-left:10px;vertical-align:middle}.waffle-pivot-pill-align-middle{vertical-align:middle}.waffle-pivot-pill-close{color:#8d8d8d;cursor:pointer;float:right;font-size:14px;transform:translateY(-15%)}.docs-gm .waffle-gm-sidebar .waffle-pivot-pill-close .jfk-button{font-size:18px}.waffle-pivot-pill-close .jfk-button{border:transparent;border-radius:50%;outline:none;width:20px}.waffle-pivot-pill-close .jfk-button:focus{background-color:rgba(0,0,0,.12)}.waffle-pill-during-dragging{height:33px}.waffle-pill-during-dragging .waffle-pivot-pill-section{display:none}.waffle-pivot-pill-close-disabled{color:rgba(0,0,0,.12)}.waffle-pivot-pill-section{box-sizing:border-box;display:inline-block;margin:8px 0;padding:0 8px;vertical-align:top;width:50%}.hc-enabled .waffle-pivot-pill-section .docs-material-gm-select.waffle-pivot-pill-nodrag:focus{outline:1px solid}#waffle-pivot-filter .waffle-pivot-pill-section,.waffle-pill-section-checkbox,.waffle-pivot-date-grouping-section{width:100%}#waffle-pivot-filter .waffle-pivot-filter-pill-select{padding-bottom:2px;padding-top:2px;width:100%}.hc-enabled .waffle-pivot-pill-section .waffle-pivot-filter-pill-select:focus{outline:1px solid}#waffle-pivot-filter .waffle-pivot-filter-pill-select .goog-flat-menu-button-caption{font-size:12px}.waffle-pivot-date-grouping-section{margin-top:4px}.waffle-pill-section-checkbox{margin-top:0}.docs-gm .waffle-gm-sidebar .waffle-pivot-pill-main-table{background:none;border-bottom:none;padding:10px 8px 6px 12px}.waffle-pivot-pill-main-table{background:#eee;border-bottom:1px solid #eee;padding:8px;min-height:16px}.waffle-pivot-pill-main-table-text{float:left;max-width:185px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.docs-gm .waffle-gm-sidebar .waffle-pivot-pill-title{color:#202124;font-size:14px;letter-spacing:.25px}.waffle-pivot-pill-title{color:black;font-weight:500;overflow:hidden;white-space:nowrap}.waffle-pivot-pill-nodrag{cursor:pointer}.waffle-pivot-pill-type-icon{float:left;margin-right:8px;opacity:1!important;position:relative;top:-1px}.waffle-pivot-pill-type-icon.docs-hc-ie{background-color:white;-ms-high-contrast-adjust:none}.waffle-pivot-pill-type-icon.docs-hc-gecko{filter:invert(1)}.waffle-pivot-pill-limit-combobox.docs-material-gm-select{height:26px}.docs-gm .waffle-gm-sidebar .waffle-pivot-pill-limit-combobox .docs-material-gm-select-input.jfk-textinput{background:transparent}.docs-gm .waffle-gm-sidebar .waffle-pivot-pill-limit-combobox.docs-material-gm-select-open .docs-material-gm-select-input.jfk-textinput{background:white;border:2px solid #1a73e8}.docs-gm .waffle-gm-sidebar .waffle-pivot-pill-limit-combobox .docs-material-gm-select-input.jfk-textinput{border:0;font-size:12px;height:20px;margin:0;max-width:100%;width:83px}.waffle-pivot-multi-select{background:#efefef;border:1px solid #d7d7d7;display:block;margin:3px 0 0 0;padding:3px;position:relative}.docs-gm .waffle-gm-sidebar .waffle-pivot-multi-select{background-color:#f1f3f4;border-color:transparent;border-radius:4px}.docs-gm .waffle-gm-sidebar .waffle-pivot-multi-select .docs-material-gm-select{margin-bottom:4px}.docs-gm .waffle-gm-sidebar .waffle-pivot-multi-select .docs-material-gm-select:last-child{margin-bottom:0}.docs-gm .waffle-gm-sidebar .waffle-pivot-multi-select .docs-material-gm-select-outer-box{background-color:white}body:not(.docs-gm) .waffle-pivot-multi-select::before{border-color:#d7d7d7 transparent;border-width:0 5px 5px 5px;margin:0 0 0 -5px;left:50%;right:auto;top:-5px}body:not(.docs-gm) .waffle-pivot-multi-select::before,body:not(.docs-gm) .waffle-pivot-multi-select::after{border-style:solid;content:'';display:block;height:0;position:absolute;width:0}body:not(.docs-gm) .waffle-pivot-multi-select::after{border-color:#efefef transparent;border-width:0 4px 4px 4px;margin:0 0 0 -4px;left:50%;right:auto;top:-4px}.waffle-pivot-pill-sort-by{vertical-align:top;width:100%}.waffle-pivot-multi-select .waffle-pivot-select-caption{color:#555}.waffle-pivot-select-divider{color:#555;margin:0 3px}.waffle-pivot-checkbox{vertical-align:middle}.waffle-pivot-feedback-section{float:right;margin-right:10px;margin-top:5px;position:relative}#waffle-pivot-feedback{padding-left:10px}.waffle-pivot-add-field-menu{overflow-y:auto}.docs-gm .waffle-gm-sidebar .waffle-pivot-add-field-label{display:inline-block;letter-spacing:0.2px;padding-top:2px}.waffle-pivot-aggr-select-container{display:inline-block;height:20px;margin-top:-5px}#waffle-pivot-aggr-select{border-bottom:2px solid transparent}#waffle-pivot-aggr-select:focus{border-color:#4d90fe}.docs-gm .waffle-gm-sidebar .waffle-pivot-select-label{color:#5f6368;padding-bottom:3px;padding-left:2px}.waffle-pivot-select-label{color:#616161;font-size:11px}.docs-gm .waffle-gm-sidebar .waffle-pivot-calculated-input{border:1px solid #dadce0;border-radius:4px;color:#3c4043;font-size:12px;padding:4px 0px 4px 8px}.waffle-pivot-calculated-input{box-sizing:border-box;width:100%}.waffle-pivot-calculated-input:focus{outline-color:#4d90fe}.waffle-pill-section-formula{margin-bottom:0;width:100%}.docs-gm .waffle-gm-sidebar .waffle-pill-section-formula .waffle-pivot-pill-nodrag{padding-top:0}.waffle-pill-section-formula .waffle-pivot-pill-nodrag{padding-top:8px}#waffle-pivot-filter{min-height:20px}.waffle-pivot-recommendation-header{outline:none}.waffle-pivot-recommendation-box.legacy .waffle-pivot-container{border-top:1px solid #efefef;height:auto;padding:8px 8px 0px;padding-bottom:12px}.waffle-pivot-recommendation-box .waffle-pivot-container{padding:14px}.waffle-pivot-curr-drag-item{max-height:30px}.waffle-pivot-recommendation-box.legacy .waffle-pivot-label{font-size:13px;font-weight:500;margin:0;padding-top:2px;padding-bottom:6px}.waffle-pivot-recommendation-header .waffle-pivot-recommendation-toggle-icon{float:right;transition:200ms ease-out;-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.goog-zippy-expanded .waffle-pivot-recommendation-toggle-icon{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0);border:1px solid transparent}.waffle-pivot-recommendation-header:focus .waffle-pivot-recommendation-toggle-icon{border:1px solid #5e97f6!important;outline:none}.waffle-pivot-recommendation-toggle-icon-disabled{opacity:0.24}.waffle-pivot-recommendation-error{margin-left:2px}.waffle-pivot-recommendation-error,.waffle-pivot-recommendation-container{opacity:0.7}.waffle-pivot-recommendation-container{-webkit-align-items:flex-start;align-items:flex-start;display:flex;background-color:transparent;color:black;cursor:pointer}.waffle-pivot-recommendation-container:hover,.waffle-pivot-recommendation-container:hover .waffle-pivot-recommendation-icon{opacity:1.0}.waffle-pivot-recommendation-body{display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column}.waffle-pivot-recommendation-content{-webkit-align-items:flex-start;align-items:flex-start;display:flex;-ms-flex:1;-webkit-flex:1;flex:1;background-color:transparent;overflow-wrap:break-word;overflow:hidden;padding:4px 0}.waffle-pivot-recommendation-text{-ms-flex:1;-webkit-flex:1;flex:1;color:rgba(0,0,0,0.87);line-height:21px;padding-left:5px;white-space:normal}.waffle-pivot-recommendation-preview-btn{box-shadow:0px 2px 2px 0px rgba(0,0,0,0.14),0px 3px 1px -2px rgba(0,0,0,0.12),0px 1px 5px 0px rgba(0,0,0,0.2);background-color:white;display:none;opacity:0.7;padding:4px;position:absolute;right:0}.waffle-pivot-recommendation-preview-btn-visible,.waffle-pivot-recommendation-container:hover .waffle-pivot-recommendation-preview-btn{cursor:pointer;display:block;opacity:0.9}.waffle-pivot-recommendation-content:focus,.waffle-pivot-recommendation-content:hover{background-color:#f5f5f5;outline:none}.waffle-recommendation-box-spinner-container{-webkit-align-self:center;align-self:center;height:40px;width:40px}.waffle-recommendation-box-spinner-container .waffle-spinner{height:25px;width:25px}.waffle-pivot-recommendation-error-container{display:flex}.waffle-pivot-recommendation-error-image{opacity:0.5}.waffle-pivot-recommendation-error-content{margin-left:10px}.waffle-pivot-rangepicker-label{color:rgba(0,0,0,0.54)}.waffle-pivot-sidebar .docs-material-gm-select-caption{color:#3c4043;font-size:12px;padding-left:8px}.waffle-pivot-sidebar .docs-material-gm-select-outer-box{padding:0}.waffle-pivot-sidebar .docs-material-gm-checkbox{display:inline-block}.docs-gm .waffle-gm-sidebar.waffle-sidebar-container.waffle-pivot-sidebar-column-names-enabled{width:460px}.waffle-sidebar-container.waffle-pivot-sidebar.waffle-pivot-sidebar-column-names-enabled:focus{outline:none}.waffle-pivot-sidebar-column-names-enabled .waffle-sidebar-content{display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;overflow:hidden}.waffle-pivot-sidebar-column-names-enabled #waffle-pivot-pane{border-right:1px solid #dadce0;height:100%;overflow-y:auto;width:300px}.waffle-pivot-sidebar-column-names-enabled #waffle-pivot-pane .waffle-pivot-container{box-sizing:border-box;max-width:284px;padding-right:0}.waffle-pivot-sidebar-column-names-enabled .waffle-pivot-recommendation-list{position:relative}.waffle-pivot-sidebar-column-names-enabled .waffle-pivot-column-names-container{display:block;height:100%;overflow-y:auto;width:160px}.waffle-gm-sidebar.waffle-pivot-sidebar-column-names-enabled .waffle-pivot-pill{background:#f1f3f4;border:1px solid #f1f3f4;border-radius:8px;box-shadow:none;margin-left:2px;margin-right:2px}.waffle-gm-sidebar.waffle-pivot-sidebar-column-names-enabled .waffle-pivot-pill:focus{box-shadow:0 1px 3px 1px rgba(60,64,67,.15);outline:none}.waffle-gm-sidebar.waffle-pivot-sidebar-column-names-enabled .waffle-pivot-pill-main-table{padding:6px 8px}.waffle-pivot-pill-type-icon{top:1px}.waffle-pivot-sidebar-column-names-enabled .waffle-pivot-pill-main-table-text,.waffle-pivot-sidebar-column-names-enabled .waffle-pivot-pill-title{line-height:20px}.waffle-gm-sidebar.waffle-pivot-sidebar-column-names-enabled .waffle-pivot-pill-title{color:#3c4043;font-weight:500}.waffle-pivot-sidebar-column-names-enabled .waffle-pivot-pill-close{transform:translateX(4px)}.waffle-pivot-sidebar-column-names-enabled .waffle-pivot-pill-close:focus{background-color:#dadce0}.docs-gm .waffle-gm-sidebar.waffle-pivot-sidebar-column-names-enabled .waffle-pivot-pill-close .jfk-button{color:#5f6368;font-size:14px;height:20px;vertical-align:middle;width:20px}.hc-enabled .waffle-pivot-pill-close .jfk-button-flat:focus{outline:1px solid}.waffle-pivot-sidebar-column-names-enabled.waffle-pill-during-dragging{background:#f8f9fa;border-radius:16px;box-shadow:0 4px 4px 0px rgba(60,64,67,.3),0 8px 12px 6px rgba(60,64,67,.15);opacity:0.9}.waffle-pivot-sidebar-column-names-enabled.waffle-pill-during-dragging .waffle-pivot-pill-close{display:none}.waffle-pivot-sidebar-column-names-enabled .docs-material-gm-select{background:white;border-radius:4px}.waffle-pivot-sidebar-column-names-enabled #waffle-pivot-pane .waffle-pivot-pill.waffle-pivot-pill-highlight{background:#ceead6;border-color:#34a853}.waffle-pivot-sidebar-column-names-enabled.waffle-pill-during-dragging.goog-menuitem{box-sizing:border-box;border-radius:16px;cursor:move;margin:0 4px;overflow:hidden;padding-left:8px;padding-right:8px;background:#f8f9fa;box-shadow:0 4px 4px 0px rgba(60,64,67,.3),0 8px 12px 6px rgba(60,64,67,.15);opacity:0.9}.waffle-pivot-sidebar-column-names-enabled.waffle-pill-during-dragging.goog-menuitem .goog-menuitem-content,.waffle-pivot-sidebar-column-names-enabled.waffle-pill-during-dragging.goog-menuitem .goog-menuitem-content span{-ms-flex:1;-webkit-flex:1;flex:1;color:#3c4043;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;line-height:18px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500}.waffle-pivot-sidebar-column-names-enabled.waffle-pill-during-dragging.goog-menuitem .goog-menuitem-content>div{display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;-webkit-justify-content:flex-start;justify-content:flex-start}.waffle-pivot-sidebar-column-names-enabled.waffle-pill-during-dragging.goog-menuitem .goog-menuitem-icon{margin:0 8px 0 0;position:relative;top:0}.waffle-printing-pane{left:0;outline:none;position:absolute;height:100%;top:0;width:100%}.waffle-printing-fullscreen-cover{background:rgba(0,0,0,.54);bottom:0;left:0;position:absolute;right:0;top:0}.waffle-printing-loader-message{color:#fff;font:13px Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;line-height:60px;text-align:center;width:100%}.waffle-printing-indeterminate-loader{height:4px;left:0;position:absolute;right:0;top:60px}.waffle-printing-body-wrapper{bottom:0;left:0;position:absolute;right:0;top:60px}.waffle-printing-header-bar{background-color:#424242;height:60px;line-height:60px;width:100%}.waffle-printing-header-bar-left{margin-left:12px}.waffle-printing-header-bar-right{margin-right:12px}.waffle-printing-header-bar-middle{height:100%;line-height:60px;overflow:hidden;text-align:center;width:auto}.waffle-printing-top-level-header-left{float:left;height:60px}.waffle-printing-top-level-header-left>div{vertical-align:middle}.waffle-printing-header-title{color:white;display:inline-block;font:18px Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;margin-left:28px;margin-right:16px}.waffle-printing-page-counter{color:white;display:inline-block;font:13px Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500}.waffle-printing-header-page-total{font-weight:400}.waffle-printing-cancel-button,.waffle-printing-cancel-button.docs-material-button-focused.docs-material-button-no-focus-border{padding-left:4px}.waffle-printing-cancel-button.docs-material-button-focused{padding-left:3px}.waffle-printing-cancel-button .docs-icon{margin:-4px 8px 0 0}.waffle-printing-header-button-set,.waffle-printing-custom-headers-footers-confirm,.waffle-printing-custom-page-breaks-confirm{float:right}.waffle-printing-header-button-set,.waffle-printing-custom-headers-footers-confirm,.waffle-printing-custom-page-breaks-confirm,.waffle-printing-custom-headers-footers-cancel,.waffle-printing-custom-page-breaks-cancel{margin-top:14px;margin-bottom:14px}.waffle-printing-print-button,.waffle-printing-top-level-cancel-button{float:right}.waffle-printing-float-clear{clear:both}.waffle-printing-preview-pane{background-color:#d1d1d1;height:100%;overflow:hidden;position:relative;width:auto}.waffle-printing-preview-outer{height:100%}.waffle-printing-preview-inner{height:100%;overflow-x:auto;overflow-y:scroll}.waffle-printing-preview-card-wrapper{margin:41px 20px 20px 36px}.waffle-printing-preview-card{background-color:#fff;box-shadow:0 8px 10px 1px rgba(0,0,0,0.14),0 3px 14px 3px rgba(0,0,0,0.12),0 4px 5px 0 rgba(0,0,0,0.20);margin:auto;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;width:100%}.waffle-printing-preview-card>canvas{height:100%;width:100%}.waffle-printing-preview-spinner{position:absolute;left:50%;top:50%;transform:translate(-14px,-14px)}.waffle-printing-preview-page-counter-outer{bottom:22px;margin:0 10%;pointer-events:none;position:absolute;width:80%}.waffle-printing-preview-page-counter-inner{background-color:rgba(0,0,0,0.7);border-radius:12px;color:#fff;display:table;font:16px Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;margin:auto;padding:20px 32px;text-align:center}.waffle-printing-preview-page-counter-ellipses{max-height:19px}.waffle-printing-options-pane{background-color:#fff;color:#474747;float:right;height:100%;overflow-y:auto;width:300px}.waffle-printing-options-top-section{padding:8px 16px}.waffle-printing-options-section{border-bottom:1px solid #d2d2d2}.waffle-printing-options-wrapper .docs-charts-editor-collapsible-header{font:16px Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500}.waffle-printing-options-wrapper .docs-charts-editor-collapsible-title{width:auto}.waffle-printing-options-wrapper .docs-charts-editor-collapsible-summary{display:none}.waffle-printing-options-wrapper h2{color:rgba(0,0,0,.87);font-size:13px;font-weight:normal;margin:20px 0 0}.waffle-printing-options-wrapper h3,.waffle-printing-options-wrapper .docs-material-labeled-select-label{color:rgba(0,0,0,.54);font:11px Roboto,RobotoDraft,Helvetica,Arial,sans-serif}.waffle-printing-options-wrapper h3,.waffle-printing-options-wrapper .docs-material-labeled-select{margin:20px 0 0}.waffle-printing-options-wrapper .waffle-material-labeledinput{margin:16px 0 0}.waffle-printing-options-wrapper .waffle-material-labeledinput-underline,.waffle-printing-options-wrapper .waffle-material-labeledinput-accentunderline{bottom:0}.waffle-printing-options-wrapper .waffle-material-labeledinput-input{bottom:3px}.waffle-printing-options-pane .docs-charts-editor-material-menu-button-caption{font-size:16px}.waffle-printing-full-size{display:block;padding:0}.waffle-printing-custom-paper-height-wrapper{float:left;width:120px}.waffle-printing-custom-paper-width-wrapper{float:right;width:120px}.waffle-printing-scale .docs-charts-editor-material-text-input{margin-top:12px}.waffle-printing-custom-scale{float:right;margin-left:20px;width:33%}.waffle-printing-scale-wrapper{overflow:hidden;width:auto}.waffle-printing-page-breaks-edit-button{float:right;margin-right:-8px}.waffle-printing-page-breaks-button-and-toggle{line-height:32px;margin:18px 0}.waffle-printing-page-breaks-toggle-wrapper{color:rgba(0,0,0,0.87);vertical-align:middle;float:left;width:auto}.waffle-printing-page-breaks-toggle{display:inline-block;margin-left:12px;position:relative;top:3px}.waffle-printing-page-breaks-toggle-ie{top:5px}.waffle-printing-page-breaks-toggle-label{display:inline-block}.docs-charts-editor-collapsible-content>div.waffle-printing-formatting-section{padding-bottom:16px}.waffle-printing-horizontal-alignment,.waffle-printing-vertical-alignment{float:left;width:118px}.waffle-printing-horizontal-alignment{margin-right:20px}.waffle-printing-options-section.waffle-printing-repeat-header-cells-section{border-bottom:none}.waffle-printing-options-section.waffle-printing-repeat-header-cells-section h2{margin-bottom:10px}.waffle-printing-options-section.waffle-printing-repeat-header-cells-section h3{margin:0 0 16px}.waffle-printing-rfs-columns,.waffle-printing-rfs-rows,.waffle-printing-rfs-columns .docs-charts-editor-labeledcheckbox,.waffle-printing-rfs-rows .docs-charts-editor-labeledcheckbox{display:inline}.waffle-printing-zoom-wrapper{position:absolute;right:22px;bottom:10px;z-index:1}.waffle-printing-zoom-in-button .jfk-button,.waffle-printing-zoom-out-button .jfk-button{background:#fff;border-radius:20px;box-shadow:0 2px 2px 0 rgba(0,0,0,0.14),0 1px 5px 0 rgba(0,0,0,0.12),0 3px 1px -2px rgba(0,0,0,0.2);height:15px;min-width:0;padding:12.5px;position:relative;margin:0 0 12px 0;right:-80px;transition:.2s right;width:15px}.waffle-printing-zoom-in-button .jfk-button .waffle-printing-zoom-icon-wrapper,.waffle-printing-zoom-out-button .jfk-button .waffle-printing-zoom-icon-wrapper{line-height:0;opacity:.54}.waffle-printing-zoom-out-button .jfk-button{transition-delay:.1s}.waffle-printing-preview-pane:hover .waffle-printing-zoom-in-button .jfk-button{right:0}.waffle-printing-preview-pane:hover .waffle-printing-zoom-out-button .jfk-button,.waffle-printing-zoom-out-button .jfk-button-focused{right:0;transition-delay:.1s}.waffle-printing-zoom-force-visible.jfk-button{right:0;transition:none}.waffle-printing-zoom-in-button .jfk-button.jfk-button-hover,.waffle-printing-zoom-in-button .jfk-button.jfk-button-focused,.waffle-printing-zoom-out-button .jfk-button.jfk-button-hover,.waffle-printing-zoom-out-button .jfk-button.jfk-button-focused{box-shadow:0 4px 5px 0 rgba(0,0,0,0.14),0 1px 10px 0 rgba(0,0,0,0.12),0 2px 4px -1px rgba(0,0,0,0.4)}.waffle-printing-zoom-in-button .jfk-button.jfk-button-hover .waffle-printing-zoom-icon-wrapper,.waffle-printing-zoom-in-button .jfk-button.jfk-button-focused .waffle-printing-zoom-icon-wrapper,.waffle-printing-zoom-out-button .jfk-button.jfk-button-hover .waffle-printing-zoom-icon-wrapper,.waffle-printing-zoom-out-button .jfk-button.jfk-button-focused .waffle-printing-zoom-icon-wrapper{opacity:.87}.waffle-printing-zoom-in-button .jfk-button.jfk-button-active,.waffle-printing-zoom-in-button .jfk-button:active,.waffle-printing-zoom-out-button .jfk-button.jfk-button-active,.waffle-printing-zoom-out-button .jfk-button:active{background:#aaa;border-color:#aaa}.waffle-printing-margins-control{outline:none;position:absolute;top:0;left:0}.waffle-printing-margins-control-top,.waffle-printing-margins-control-bottom{cursor:ns-resize;height:5px;left:0;position:absolute;right:0}.waffle-printing-margins-control-right,.waffle-printing-margins-control-left{bottom:0;cursor:ew-resize;position:absolute;top:0;width:5px}.waffle-printing-margins-control-top{border-bottom:2px dashed #4285f4;margin-top:-7px}.waffle-printing-margins-control-top:hover,.waffle-printing-margins-control-top.waffle-printing-margins-control-active{border-bottom:2px solid #4285f4}.waffle-printing-margins-control-bottom{border-top:2px dashed #4285f4;margin-bottom:-7px}.waffle-printing-margins-control-bottom:hover,.waffle-printing-margins-control-bottom.waffle-printing-margins-control-active{border-top:2px solid #4285f4}.waffle-printing-margins-control-right{border-left:2px dashed #4285f4;margin-right:-7px}.waffle-printing-margins-control-right:hover,.waffle-printing-margins-control-right.waffle-printing-margins-control-active{border-left:2px solid #4285f4}.waffle-printing-margins-control-left{border-right:2px dashed #4285f4;margin-left:-7px}.waffle-printing-margins-control-left:hover,.waffle-printing-margins-control-left.waffle-printing-margins-control-active{border-right:2px solid #4285f4}.waffle-printing-margins-control-top-wrapper,.waffle-printing-margins-control-bottom-wrapper,.waffle-printing-margins-control-right-wrapper,.waffle-printing-margins-control-left-wrapper{background:#fff;border:2px dashed #4285f4;height:34px;padding:16px;width:60px}.waffle-printing-margins-control-top:hover .waffle-printing-margins-control-top-wrapper,.waffle-printing-margins-control-active .waffle-printing-margins-control-top-wrapper,.waffle-printing-margins-control-bottom:hover .waffle-printing-margins-control-bottom-wrapper,.waffle-printing-margins-control-active .waffle-printing-margins-control-bottom-wrapper,.waffle-printing-margins-control-right:hover .waffle-printing-margins-control-right-wrapper,.waffle-printing-margins-control-active .waffle-printing-margins-control-right-wrapper,.waffle-printing-margins-control-left:hover .waffle-printing-margins-control-left-wrapper,.waffle-printing-margins-control-active .waffle-printing-margins-control-left-wrapper{border:2px solid #4285f4}.waffle-printing-margins-control-top-title,.waffle-printing-margins-control-bottom-title,.waffle-printing-margins-control-right-title,.waffle-printing-margins-control-left-title{font:11px Roboto,RobotoDraft,Helvetica,Arial,sans-serif;color:rgba(0,0,0,.54);margin-left:-1px}.waffle-printing-margins-control-top-wrapper,.waffle-printing-margins-control-top:hover .waffle-printing-margins-control-top-wrapper,.waffle-printing-margins-control-active .waffle-printing-margins-control-top-wrapper{border-radius:0 0 2px 2px;border-top:none;box-shadow:0 4px 4px 0 rgba(0,0,0,0.25);left:50%;position:absolute;top:5px;transform:translateX(-50%)}.waffle-printing-margins-control-bottom-wrapper,.waffle-printing-margins-control-bottom:hover .waffle-printing-margins-control-bottom-wrapper,.waffle-printing-margins-control-active .waffle-printing-margins-control-bottom-wrapper{border-bottom:none;border-radius:2px 2px 0 0;box-shadow:0 -4px 4px 0 rgba(0,0,0,0.25);bottom:5px;left:50%;position:absolute;transform:translateX(-50%)}.waffle-printing-margins-control-right-wrapper,.waffle-printing-margins-control-right:hover .waffle-printing-margins-control-right-wrapper,.waffle-printing-margins-control-active .waffle-printing-margins-control-right-wrapper{border-radius:2px 0 0 2px;border-right:none;box-shadow:-4px 0 4px 0 rgba(0,0,0,0.25);position:absolute;right:5px;top:50%;transform:translateY(-50%)}.waffle-printing-margins-control-left-wrapper,.waffle-printing-margins-control-left:hover .waffle-printing-margins-control-left-wrapper,.waffle-printing-margins-control-active .waffle-printing-margins-control-left-wrapper{border-left:none;border-radius:0 2px 2px 0;box-shadow:4px 0 4px 0 rgba(0,0,0,0.25);left:5px;position:absolute;top:50%;transform:translateY(-50%)}.waffle-printing-radio-button-wrapper{float:left;margin-top:6px;width:50%}.waffle-printing-radio-button-wrapper .jfk-radiobutton-label{color:rgba(0,0,0,.87);font:13px Roboto,RobotoDraft,Helvetica,Arial,sans-serif;line-height:18px;margin-left:23px}.waffle-printing-radio-button-wrapper .jfk-radiobutton-label label{margin-left:0}.waffle-printing-radio-button-wrapper .jfk-radiobutton-radio,.waffle-printing-radio-button-wrapper .jfk-radiobutton-hover .jfk-radiobutton-radio{border:2px solid #bebebe;height:16px;left:2px;width:16px}.waffle-printing-radio-button-wrapper .jfk-radiobutton-checked .jfk-radiobutton-radio{border:2px solid #4285f4}.waffle-printing-radio-button-wrapper .jfk-radiobutton-radio::after{background:#4285f4;border:none;height:8px;left:2px;top:2px;width:8px}.waffle-printing-radio-button-wrapper .jfk-radiobutton-checked.jfk-radiobutton-focused .jfk-radiobutton-radio{border:2px solid #2a56c6}.waffle-printing-radio-button-wrapper .jfk-radiobutton-checked.jfk-radiobutton-focused .jfk-radiobutton-radio::after{background-color:#2a56c6}.waffle-printing-custom-headers-footers-entry-button,.waffle-printing-page-breaks-entry-button{margin-top:8px;margin-left:-8px}.waffle-printing-custom-headers-footers-cancel,.waffle-printing-custom-page-breaks-cancel{float:left}.waffle-printing-custom-headers-footers-body,.waffle-printing-custom-page-breaks-body{background-color:#d1d1d1;bottom:0;left:0;position:absolute;overflow:hidden;right:0;top:60px}.waffle-printing-custom-headers-footers-overlay{background-color:rgba(255,255,255,0.54);outline:none;position:absolute;top:0;left:0}.waffle-printing-custom-headers-footers-content-area{color:rgba(0,0,0,0.24);font:36px Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;text-align:center;overflow:hidden;width:100%}.waffle-printing-custom-headers-footers-overlay-group{border-spacing:12px 0;direction:ltr;position:absolute;table-layout:fixed}.waffle-printing-custom-headers-footers-section-wrapper{width:33.3333%}.waffle-printing-custom-headers-footers-section{background-color:white;height:100%;overflow:hidden;padding:0 8px;transition:border-color 0.2s ease;-webkit-user-select:auto;-moz-user-select:auto;-ms-user-select:auto;white-space:nowrap}.waffle-printing-custom-headers-footers-section-inactive{border:1px dotted #bdbdbd}.waffle-printing-custom-headers-footers-section-inactive:hover{border-color:transparent;border-bottom:1px solid rgba(0,0,0,.87);cursor:pointer}.waffle-printing-custom-headers-footers-section-active{border-bottom:2px solid #4285f4}.waffle-printing-custom-headers-footers-section-content{box-sizing:border-box;color:rgba(0,0,0,.87);height:100%;overflow:hidden}.waffle-printing-custom-headers-footers-section-placeholder{color:rgba(0,0,0,.54)}.waffle-printing-custom-header-footer-section-header-left,.waffle-printing-custom-header-footer-section-footer-left{text-align:left}.waffle-printing-custom-header-footer-section-header-right,.waffle-printing-custom-header-footer-section-footer-right{text-align:right}.waffle-printing-custom-header-footer-section-header-middle,.waffle-printing-custom-header-footer-section-footer-middle{text-align:center}.waffle-printing-custom-headers-footers-section:focus,.waffle-printing-custom-headers-footers-section-content:focus{outline:none}.waffle-printing-custom-headers-footers-pill{-webkit-user-select:all;-moz-user-select:all;-ms-user-select:all}.waffle-printing-custom-headers-footers-pill-select{background-color:#fafafa;border-radius:2px;box-shadow:0 2px 2px 0 rgba(0,0,0,0.14),0 1px 5px 0 rgba(0,0,0,0.12),0 3px 1px -2px rgba(0,0,0,0.2);height:34px;min-width:195px;position:absolute;z-index:1003}.waffle-printing-custom-headers-footers-pill-select:focus{outline:none}.waffle-printing-custom-headers-footers-pill-select .goog-toolbar-separator{height:34px;margin:0}.waffle-printing-custom-page-breaks-header-middle{color:white;font:13px Roboto,RobotoDraft,Helvetica,Arial,sans-serif;margin:14px 0}.waffle-printing-custom-page-breaks-scale{display:inline-block;margin-right:8px;position:relative;top:1px}.waffle-printing-custom-page-breaks-scale .waffle-ellipses{padding-left:4px;top:2px}.waffle-printing-custom-page-breaks-scale-label{font-weight:500}.waffle-printing-custom-page-breaks-reset{margin-left:8px}.waffle-printing-custom-page-breaks-waffle{bottom:0;left:0;position:absolute;right:0;top:0}.waffle-printing-custom-page-breaks-canvas-wrapper{left:0;overflow:hidden;position:absolute;top:0;z-index:1}.waffle-printing-custom-page-breaks-dragger-container{position:absolute}.waffle-printing-custom-page-breaks-overlay{border:2px solid #4285f4;box-shadow:0 8px 10px 1px rgba(0,0,0,0.14),0 3px 14px 3px rgba(0,0,0,0.12),0 4px 5px 0 rgba(0,0,0,0.20);position:absolute}.waffle-printing-snapping-dragger,.waffle-printing-snapping-dragger-handle,.waffle-printing-snapping-dragger-handle-bar{border-width:0;box-sizing:border-box;position:absolute}.waffle-printing-snapping-dragger-handle-horizontal .waffle-printing-page-breaks-rounded-corner{left:-24px;top:-11px;transform:rotate(-90deg)}.waffle-printing-snapping-dragger-rtl .waffle-printing-snapping-dragger-handle-horizontal .waffle-printing-page-breaks-rounded-corner{transform:rotate(90deg)}.waffle-printing-snapping-dragger-rtl .waffle-printing-snapping-dragger-handle-horizontal .waffle-printing-page-breaks-rounded-corner-ie{transform:rotate(-90deg)}.waffle-printing-snapping-dragger-handle-vertical .waffle-printing-page-breaks-rounded-corner{left:-11px;top:-24px}.waffle-printing-snapping-dragger-handle-horizontal,.waffle-printing-snapping-dragger-handle-bar-horizontal{height:5px;transform:translateY(-1px)}.waffle-printing-snapping-dragger-handle-bar-horizontal{border-top:2px dashed #4285f4;cursor:row-resize}.waffle-printing-snapping-dragger-handle-vertical,.waffle-printing-snapping-dragger-handle-bar-vertical{transform:translateX(-1px);width:5px}.waffle-printing-snapping-dragger-handle-bar-vertical{border-left:2px dashed #4285f4;cursor:col-resize}.waffle-printing-snapping-dragger-rtl .waffle-printing-snapping-dragger-handle-vertical,.waffle-printing-snapping-dragger-rtl .waffle-printing-snapping-dragger-handle-bar-vertical{transform:translateX(1px)}.waffle-printing-hard-break .waffle-printing-snapping-dragger-handle-bar{border-style:solid}.waffle-printing-snapping-dragger-active .waffle-printing-snapping-dragger-handle-bar,.waffle-printing-snapping-dragger-highlight .waffle-printing-snapping-dragger-handle-bar{border-color:transparent}.waffle-printing-page-breaks-rounded-corner,.waffle-printing-custom-page-breaks-delete{display:block;position:absolute;z-index:1}.waffle-printing-snapping-dragger-hover-bar{background:#4285f4;border:1px solid white;box-shadow:0 8px 10px 1px rgba(0,0,0,0.14),0 3px 14px 3px rgba(0,0,0,0.12),0 4px 5px 0 rgba(0,0,0,0.20);position:absolute;display:none}.waffle-printing-snapping-dragger-hover .waffle-printing-snapping-dragger-hover-bar,.waffle-printing-snapping-dragger-active .waffle-printing-snapping-dragger-hover-bar{display:block}.waffle-printing-snapping-dragger-hover-bar-horizontal{border-left:none;border-right:none;height:2px;left:0;top:-2px;width:100%}.waffle-printing-snapping-dragger-hover-bar-vertical{border-bottom:none;border-top:none;height:100%;left:-2px;top:0;width:2px}.waffle-printing-custom-page-breaks-delete{background-color:transparent;border:none;box-shadow:none;cursor:pointer;fill:#4285f4;height:24px;margin:0;min-width:0;padding:0;transform:scale(0.4);transition:200ms;width:24px}.waffle-printing-custom-page-breaks-delete-horizontal{left:-16px;top:-13px}.waffle-printing-custom-page-breaks-delete-vertical{left:-12px;top:-17px}.waffle-printing-custom-page-breaks-delete .waffle-printing-custom-page-breaks-delete-background{fill:#4285f4;transition:200ms}.waffle-printing-snapping-dragger-hover .waffle-printing-custom-page-breaks-delete,.waffle-printing-snapping-dragger-active .waffle-printing-custom-page-breaks-delete{fill:#000;transform:scale(1.0)}.waffle-printing-snapping-dragger-hover .waffle-printing-custom-page-breaks-delete-horizontal,.waffle-printing-snapping-dragger-active .waffle-printing-custom-page-breaks-delete-horizontal{left:-24px;top:-12px}.waffle-printing-snapping-dragger-hover .waffle-printing-custom-page-breaks-delete-vertical,.waffle-printing-snapping-dragger-active .waffle-printing-custom-page-breaks-delete-vertical{left:-11px;top:-24px}.waffle-printing-snapping-dragger-hover .waffle-printing-custom-page-breaks-delete-background,.waffle-printing-snapping-dragger-active .waffle-printing-custom-page-breaks-delete-background{opacity:0.0}.waffle-printing-custom-page-breaks-delete-icon{background-color:transparent;opacity:0.54;transition:0s}.waffle-printing-custom-page-breaks-delete.jfk-button-hover .waffle-printing-custom-page-breaks-delete-icon,.waffle-printing-custom-page-breaks-delete.jfk-button-focused .waffle-printing-custom-page-breaks-delete-icon{opacity:0.87}.waffle-printing-custom-page-breaks-delete.jfk-button-active,.waffle-printing-custom-page-breaks-delete:active,.waffle-printing-custom-page-breaks-delete.jfk-button-focused,.waffle-printing-custom-page-breaks-delete:focus{border:none;box-shadow:none;outline:none}.waffle-printing-pane .docs-charts-editor-material-menu-button-caption{color:rgba(0,0,0,.87);font-size:13px}.waffle-printing-pane .docs-charts-editor-collapsible-header{color:rgba(0,0,0,.87);font-size:13px;font-weight:normal}.waffle-printing-pane .waffle-printing-headers-and-footers-section h2{color:rgba(0,0,0,.87);font-size:13px;font-weight:normal;margin-top:16px}.waffle-printing-pane .waffle-printing-headers-and-footers-section h3{font-weight:normal;margin-bottom:11px;margin-top:9px}.waffle-printing-pane-base .docs-material-button-content{display:inline-block;min-width:54px}.apps-promo{z-index:21}.apps-promo-popup{width:300px}.apps-promo-buttons{display:none}#waffle-promo-button .goog-custom-button-inner-box{font-weight:500}.waffle-promo{background:#188038!important;border-radius:8px!important;box-shadow:0px 2px 6px rgba(60,64,67,0.15),0px 1px 2px rgba(0,64,67,0.3)!important;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif!important;width:300px!important}.waffle-promo .docs-promo-container{padding:24px!important}.waffle-promo .docs-promo-text-container{width:252px!important}.waffle-promo .docs-promo-header{color:#fff!important;font-weight:700}.waffle-promo .docs-promo-body{color:#fff!important;padding-top:8px}.waffle-promo .docs-promo-action-row{padding-top:16px;padding-right:0;padding-bottom:0}.waffle-promo .docs-promo-action-container{color:#fff!important;font-weight:500;text-transform:lowercase;display:inline-block}.waffle-promo .docs-promo-action-container::first-letter{text-transform:uppercase}.waffle-promo .jfk-bubble-arrowdown .jfk-bubble-arrowimplbefore,.waffle-promo .jfk-bubble-arrowdown .jfk-bubble-arrowimplafter,.waffle-promo .jfk-bubble-arrowup .jfk-bubble-arrowimplbefore,.waffle-promo .jfk-bubble-arrowup .jfk-bubble-arrowimplafter{border-color:#188038 transparent!important}.waffle-promo .jfk-bubble-arrowleft .jfk-bubble-arrowimplbefore,.waffle-promo .jfk-bubble-arrowleft .jfk-bubble-arrowimplafter,.waffle-promo .jfk-bubble-arrowright .jfk-bubble-arrowimplbefore,.waffle-promo .jfk-bubble-arrowright .jfk-bubble-arrowimplafter{border-color:transparent #188038!important}.waffle-shortcut-override-inside-promo{border:240px solid #0f9d58;border-radius:100%;bottom:-260px;height:95px;position:absolute;right:60px;width:95px;background-color:#fff;z-index:500}.waffle-legacy-shortcut-override-inside-promo{border-radius:100%;bottom:-20px;box-shadow:175px 0 0 190px #0f9d58;height:90px;position:absolute;right:435px;width:80px;z-index:500}[dir="rtl"] .waffle-legacy-shortcut-override-inside-promo{box-shadow:-175px 0 0 190px #0f9d58;left:220px}.waffle-shortcut-override-inside-promo-content,.waffle-legacy-shortcut-override-inside-promo-content{color:white;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;left:-100px;line-height:22px;position:absolute;text-align:left;top:-125px;width:275px}.waffle-legacy-shortcut-override-inside-promo-content{left:100px}.waffle-legacy-shortcut-override-dismiss-button{cursor:pointer;color:white;font:500 15px Roboto,RobotoDraft,Helvetica,Arial,sans-serif;margin:25px 0 0 0;min-width:0;outline:none;padding:0;right:5px;text-transform:uppercase;width:0}.waffle-shortcut-override-inside-promo-header{font:500 21px Roboto,RobotoDraft,Helvetica,Arial,sans-serif;line-height:27px;margin-bottom:16px}.waffle-shortcut-override-inside-promo-description{font-size:15px;opacity:0.87}.apps-ui-material-slide-toggle-container{z-index:1000}.waffle-shortcut-override-outside-promo{background-color:#fafafa;bottom:80px;box-shadow:rgba(255,255,255,.9) 0 1px 0 inset,rgba(0,0,0,.03) 0 -1px 0 inset,rgba(0,0,0,.15) 0 15px 10px,rgba(0,0,0,.3) 0 8px 36px;position:absolute;right:40px;width:380px;z-index:1000}.waffle-shortcut-override-outside-promo-header{font-size:16px;font-weight:500;opacity:0.87;padding:22px 25px 0 25px}.waffle-shortcut-override-outside-promo-description{color:#666;line-height:20px;padding:15px 25px}.waffle-shortcut-override-outside-promo-button-container{padding:0 24px 16px;text-align:right}.waffle-shortcut-override-outside-promo-continue-button,.waffle-shortcut-override-outside-promo-dismiss-button{align-items:center;cursor:pointer;display:inline-flex;font-family:'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;justify-content:center;text-transform:uppercase}.waffle-shortcut-override-outside-promo-continue-button{background-color:#4285f4;color:white;padding:6px 15px}.waffle-shortcut-override-outside-promo-dismiss-button{color:#4285f4;margin-right:16px}.waffle-sidebar-container{border-left:1px solid #d9d9d9;outline:none;position:absolute;right:0;top:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;width:250px}.docs-gm .waffle-gm-sidebar.waffle-sidebar-container{overflow:hidden;box-shadow:-3px 0px 6px -3px rgba(60,64,67,.15),3px 0px 6px -3px rgba(60,64,67,.15);border-left:0;width:300px}.waffle-sidebar-content{background-color:#fff;font-size:100%;overflow-x:hidden;overflow-y:auto;position:relative}.waffle-sidebar-footer-container{bottom:0;position:absolute;width:100%}.waffle-sidebar-header-container{width:100%}.waffle-sidebar-spinner-container{background-color:#fff;height:100%;position:absolute;width:100%}.waffle-sidebar-spinner-container>.waffle-spinner{left:50%;margin-left:-14px;margin-top:-14px;position:absolute;top:50%}.waffle-sidebar-title{background:#616161;color:white;font-family:'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;padding:10px 12px 10px 12px}.docs-gm .waffle-gm-sidebar .waffle-sidebar-title{display:flex;align-items:center;color:#202124;background-color:#fff;height:56px;padding:0 16px;border-bottom:1px solid #dadce0;border-top:1px solid #dadce0;font-family:'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:16px;z-index:1}.docs-gm .waffle-gm-sidebar .waffle-sidebar-title-text{font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:16px;font-weight:500;line-height:24px;position:relative;left:auto}.waffle-sidebar-title-close.docs-sidebar-close-button{cursor:pointer;position:absolute;right:5px;top:7px}.docs-gm .waffle-gm-sidebar .jfk-textinput{border:1px solid #dadce0;border-radius:4px;box-sizing:border-box;color:#3c4043;padding:1px 8px;font-size:14px;height:36px;margin:8px 0}.docs-gm .waffle-gm-sidebar .jfk-textinput:focus{border:2px solid #1a73e8;box-shadow:none;padding:0px 7px}.docs-gm .jfk-select .goog-flat-menu-button-dropdown{margin-top:0px}.docs-gm .waffle-gm-sidebar .waffle-range-selection-button{line-height:25px}.docs-gm .goog-flat-menu-button.jfk-select{padding-left:8px!important}.docs-gm .waffle-gm-sidebar .waffle-range-selection-button,.docs-gm .waffle-gm-sidebar .waffle-range-selection-button:hover,.docs-gm .waffle-gm-sidebar .waffle-range-selection-button:focus{opacity:1}.docs-gm .waffle-gm-sidebar .waffle-range-selection-holder .docs-icon-grid,.docs-gm .waffle-gm-sidebar .waffle-range-selection-holder .docs-icon-grid:before,.docs-gm .waffle-gm-sidebar .waffle-sidebar-title .docs-gm-sidebar-icon .docs-icon-sheets-table-24,.docs-gm .waffle-gm-sidebar .waffle-sidebar-title .docs-gm-sidebar-icon .docs-icon-sheets-table-24:before,.docs-gm .waffle-gm-sidebar .waffle-sidebar-title .docs-gm-sidebar-icon .docs-icon-database,.docs-gm .waffle-gm-sidebar .waffle-sidebar-title .docs-gm-sidebar-icon .docs-icon-database:before{content:url(//ssl.gstatic.com/docs/common/material_common_sprite146_green.svg)}.docs-gm .waffle-gm-sidebar .goog-flat-menu-button{border:1px solid #dadce0;border-radius:4px;box-sizing:border-box;cursor:pointer;padding:8px 6px 8px 8px;width:100%;align-items:center;background:none;box-sizing:border-box;color:#3c4043;display:inline-flex;justify-content:space-between;outline:none;position:relative;width:auto;width:unset}.docs-gm .waffle-gm-sidebar .goog-flat-menu-button-disabled{color:#5f6368;opacity:.38;cursor:default}.docs-gm .waffle-gm-sidebar .goog-flat-menu-button:active{background-color:#fff;border:1px solid transparent;box-shadow:0 2px 6px 2px rgba(60,64,67,.15)}.docs-gm .waffle-gm-sidebar .goog-flat-menu-button-hover{background-color:rgba(60,64,67,0.04);border:1px solid #dadce0;box-shadow:none}.docs-gm .waffle-gm-sidebar .goog-flat-menu-button-focused{background-color:rgba(60,64,67,0.06);border:1px solid #dadce0}.docs-gm .waffle-gm-sidebar .goog-flat-menu-button-open{background-color:rgba(60,64,67,0.04);border:1px solid transparent}.docs-gm .waffle-gm-sidebar .goog-flat-menu-button-hover.goog-flat-menu-button-open{background-color:rgba(60,64,67,0.06)}.docs-gm .waffle-gm-sidebar .goog-flat-menu-button-focused.goog-flat-menu-button-open{background-color:rgba(60,64,67,0.08)}.docs-gm .waffle-gm-sidebar .goog-flat-menu-button-disabled{border:1px solid #dadce0;box-shadow:none;cursor:default}.docs-gm .waffle-gm-sidebar .goog-flat-menu-button-caption{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;color:#202124;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;height:20px;line-height:20px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.docs-gm .waffle-gm-sidebar .goog-flat-menu-button-dropdown{background:no-repeat url(//ssl.gstatic.com/docs/common/material_common_sprite146_grey_medium.svg) -46px -3920px;height:18px;width:18px;border:none;margin-top:0;position:relative;right:0;top:0}.docs-gm .waffle-gm-sidebar .goog-flat-menu-button-open .goog-flat-menu-button-dropdown{-moz-transform:rotate(180deg);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.docs-gm .waffle-gm-sidebar .docs-flatcolormenubutton .goog-flat-menu-button-caption{height:22px;width:22px;border-radius:50%;border:1px solid #dadce0;margin:0;outline:none}.docs-gm .waffle-gm-sidebar .docs-flatcolormenubutton.goog-flat-menu-button{padding:6px 0 6px 6px}.docs-gm .waffle-gm-sidebar .jfk-button-action{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff}.docs-gm .waffle-gm-sidebar .jfk-button-action.jfk-button-hover{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;background:#2a8947;box-shadow:0 1px 3px 1px rgba(52,168,83,0.15)}.docs-gm .waffle-gm-sidebar .jfk-button-action.jfk-button-focused{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;background:#4f9e67;box-shadow:0 1px 3px 1px rgba(52,168,83,0.15)}.docs-gm .waffle-gm-sidebar .jfk-button-action.jfk-button-hover.jfk-button-focused{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;background:#62a877;box-shadow:0 1px 3px 1px rgba(52,168,83,0.15)}.docs-gm .waffle-gm-sidebar .jfk-button-action.jfk-button-active,.docs-gm .waffle-gm-sidebar .jfk-button-action.jfk-button-focus.jfk-button-active{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;background:#62a877;box-shadow:0 2px 6px 2px rgba(52,168,83,0.15)}.docs-gm .waffle-gm-sidebar .jfk-button-action.jfk-button-disabled{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;background:#f1f3f4;color:#3c4043;opacity:0.38}.docs-gm .waffle-gm-sidebar .jfk-button-standard{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:white;border:1px solid #dadce0!important;color:#188038}.docs-gm .waffle-gm-sidebar .jfk-button-standard.jfk-button-hover{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#f8fcf9;border:1px solid #c8e7d1!important}.docs-gm .waffle-gm-sidebar .jfk-button-standard.jfk-button-focused{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#e7f5eb;border:1px solid #bbe2c6!important}.docs-gm .waffle-gm-sidebar .jfk-button-standard.jfk-button-hover.jfk-button-focused{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#dff2e4;border:1px solid #b5e0c1!important}.docs-gm .waffle-gm-sidebar .jfk-button-standard.jfk-button-active,.docs-gm .waffle-gm-sidebar .jfk-button-standard.jfk-button-focus.jfk-button-active{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#dff2e4;border:1px solid transparent!important;box-shadow:0 2px 6px 2px rgba(60,64,67,.15)}.docs-gm .waffle-gm-sidebar .jfk-button-standard.jfk-button-disabled{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:white;border:1px solid #f1f3f4!important;color:#3c4043;opacity:0.38}.docs-gm .waffle-gm-sidebar .jfk-button-standard.waffle-range-selection-button,.docs-gm .waffle-gm-sidebar .jfk-button-standard.jfk-button-hover.waffle-range-selection-button,.docs-gm .waffle-gm-sidebar .jfk-button-standard.jfk-button-focused.waffle-range-selection-button,.docs-gm .waffle-gm-sidebar .jfk-button-standard.jfk-button-hover.jfk-button-focused.waffle-range-selection-button{border:none!important;padding:8px 0px 0px!important}.docs-gm .waffle-gm-sidebar .docs-sidebar-toggle-tabs{background-color:white;border-bottom:0;height:40px;margin-top:0;width:100%}.docs-gm .waffle-gm-sidebar .docs-sidebar-toggle-tabs .jfk-button.docs-sidebar-toggle-tab>div{display:inline-block;position:relative}.docs-gm .waffle-gm-sidebar .docs-sidebar-toggle-tabs .jfk-button.docs-sidebar-toggle-tab-active{color:#188038;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;text-transform:none;border-bottom:none;line-height:calc(40px - 8px);height:calc(40px - 8px);margin-top:8px}.docs-gm .waffle-gm-sidebar .docs-sidebar-toggle-tabs .jfk-button.docs-sidebar-toggle-tab-inactive{color:#5f6368;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;text-transform:none;border-bottom:none;line-height:calc(40px - 8px);height:calc(40px - 8px);margin-top:8px}.docs-gm .waffle-gm-sidebar .docs-sidebar-toggle-tabs .jfk-button.docs-sidebar-toggle-tab-inactive:hover{color:#202124;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;text-transform:none;border-bottom:none;line-height:calc(40px - 8px);height:calc(40px - 8px);margin-top:8px}.docs-gm .waffle-gm-sidebar .docs-sidebar-toggle-tabs .jfk-button.docs-sidebar-toggle-tab-active>div:after{border-bottom:3px solid #188038;border-radius:3px 3px 0 0;bottom:0;content:'';display:block;height:0;left:-4px;position:absolute;width:calc(100% + 8px)}.docs-gm .waffle-gm-sidebar .docs-sidebar-toggle-tabs .jfk-button-focused.docs-sidebar-toggle-tab-inactive>div:after{border-bottom:3px dotted #188038;border-radius:3px 3px 0 0;bottom:0;content:'';display:block;height:0;left:-4px;position:absolute;width:calc(100% + 8px)}.docs-gm .waffle-gm-sidebar .docs-sidebar-toggle-tabs .jfk-button-active.jfk-button-focused.docs-sidebar-toggle-tab-inactive>div:after{border-top:none}.waffle-slicer-overlay,.waffle-embedded-object-container,.waffle-slicer-container{border-radius:20px}.waffle-slicer-container{-webkit-align-items:center;align-items:center;display:flex;direction:ltr;height:inherit;min-height:100%;min-width:100%}.waffle-slicer-filter-box-container .goog-menu-filter{display:flex;-webkit-align-items:center;align-items:center}.waffle-slicer-filter-box-container .waffle-filterbox-input{-ms-flex:1;-webkit-flex:1;flex:1;margin-right:0px!important}.waffle-slicer-filter-box-container .waffle-filterbox-input-icon{height:18px;margin:0 5px 0 0;position:absolute;right:20px;width:18px}.waffle-slicer-filter-box-container .waffle-filterbox-label-icon-jfk{display:none}.waffle-slicer-filter-box-container .waffle-filterbox-content{height:auto!important;margin:3px 0;max-height:320px}.waffle-slicer-filter-box-container .goog-menuitem .goog-menuitem-content{margin:0 6px}.waffle-slicer-filter-container{box-shadow:0px 1px 1px 0px rgba(0,0,0,0.14),0px 2px 1px -1px rgba(0,0,0,0.12),0px 1px 3px 0px rgba(0,0,0,0.2);background:white;direction:ltr;margin-top:4px;overflow-y:auto;padding-top:8px;position:absolute;right:0;left:0;z-index:1000}.waffle-slicer-filter-container .waffle-filterbox-button-container{display:flex;float:right}.waffle-slicer-filter-container{border-radius:8px}.waffle-slicer-icon-container{height:24px;padding:5px}.waffle-slicer-icon-filtered{border-radius:50%}.waffle-slicer-row{-webkit-align-items:center;align-items:center;display:flex;-ms-flex:1;-webkit-flex:1;flex:1;margin:0 30px 0 5px;overflow:hidden}.waffle-slicer-row-enabled{cursor:pointer}.waffle-slicer-header{display:flex;-ms-flex:1;-webkit-flex:1;flex:1;max-height:100%;overflow:hidden}.waffle-slicer-title-container{-ms-flex:1;-webkit-flex:1;flex:1;margin:0 10px;overflow:hidden;padding:2px 0;text-overflow:ellipsis;white-space:nowrap}.waffle-slicer-status-container{display:flex;-webkit-flex-shrink:1;-ms-flex-negative:1;flex-shrink:1;border-radius:10%;max-width:100px;overflow:hidden;padding:2px 5px 2px 10px;text-overflow:ellipsis;white-space:nowrap}.waffle-slicer-status-icon-container{-webkit-align-items:center;align-items:center;display:flex;-ms-flex:1;-webkit-flex:1;flex:1}.waffle-slicer-icon-container:hover{border-radius:50%}.waffle-slicer-filter-box-container .waffle-conditionalformat-condition-type-select .goog-flat-menu-button,.waffle-slicer-filter-box-container .waffle-conditionalformat-condition-date-select .goog-flat-menu-button,.waffle-slicer-filter-box-container .waffle-conditionalformat-range-args-holder{width:100%}.waffle-slicer-filter-box-container .waffle-conditionalformat-range-args-holder .waffle-conditionalformat-arg1{margin-right:0;padding:10px;width:100%}.waffle-slicer-filter-box-container .waffle-conditionalformat-arg-separator{margin:0 5px}.waffle-slicer-filter-box-container .waffle-conditionalformat-range-args-holder .waffle-conditionalformat-arg2{padding:10px}.waffle-slicer-help-icon-container{margin:0 3px 0 3px;padding:5px;background-color:transparent}.waffle-spinner{display:inline-block;position:relative;width:28px;height:28px}.waffle-spinner-message-container{position:absolute;width:0;height:0;overflow:hidden}.waffle-spinner-container{width:100%;height:100%}.waffle-spinner.waffle-spinner-active .waffle-spinner-container{-webkit-animation:waffle-spinner-container-rotate 1568ms linear infinite;animation:waffle-spinner-container-rotate 1568ms linear infinite}.waffle-spinner-layer{position:absolute;width:100%;height:100%;opacity:0}.waffle-spinner-color-one{border-color:#4285f4}.waffle-spinner-color-two{border-color:#db4437}.waffle-spinner-color-three{border-color:#f4b400}.waffle-spinner-color-four{border-color:#0f9d58}.waffle-spinner.waffle-spinner-active .waffle-spinner-layer.waffle-spinner-color-one{-webkit-animation:waffle-spinner-fill-unfill-rotate 5332ms cubic-bezier(0.4,0.0,0.2,1) infinite both,waffle-spinner-blue-fade-in-out 5332ms cubic-bezier(0.4,0.0,0.2,1) infinite both;animation:waffle-spinner-fill-unfill-rotate 5332ms cubic-bezier(0.4,0.0,0.2,1) infinite both,waffle-spinner-blue-fade-in-out 5332ms cubic-bezier(0.4,0.0,0.2,1) infinite both}.waffle-spinner.waffle-spinner-active .waffle-spinner-layer.waffle-spinner-color-two{-webkit-animation:waffle-spinner-fill-unfill-rotate 5332ms cubic-bezier(0.4,0.0,0.2,1) infinite both,waffle-spinner-red-fade-in-out 5332ms cubic-bezier(0.4,0.0,0.2,1) infinite both;animation:waffle-spinner-fill-unfill-rotate 5332ms cubic-bezier(0.4,0.0,0.2,1) infinite both,waffle-spinner-red-fade-in-out 5332ms cubic-bezier(0.4,0.0,0.2,1) infinite both}.waffle-spinner.waffle-spinner-active .waffle-spinner-layer.waffle-spinner-color-three{-webkit-animation:waffle-spinner-fill-unfill-rotate 5332ms cubic-bezier(0.4,0.0,0.2,1) infinite both,waffle-spinner-yellow-fade-in-out 5332ms cubic-bezier(0.4,0.0,0.2,1) infinite both;animation:waffle-spinner-fill-unfill-rotate 5332ms cubic-bezier(0.4,0.0,0.2,1) infinite both,waffle-spinner-yellow-fade-in-out 5332ms cubic-bezier(0.4,0.0,0.2,1) infinite both}.waffle-spinner.waffle-spinner-active .waffle-spinner-layer.waffle-spinner-color-four{-webkit-animation:waffle-spinner-fill-unfill-rotate 5332ms cubic-bezier(0.4,0.0,0.2,1) infinite both,waffle-spinner-green-fade-in-out 5332ms cubic-bezier(0.4,0.0,0.2,1) infinite both;animation:waffle-spinner-fill-unfill-rotate 5332ms cubic-bezier(0.4,0.0,0.2,1) infinite both,waffle-spinner-green-fade-in-out 5332ms cubic-bezier(0.4,0.0,0.2,1) infinite both}.waffle-spinner-gap-patch{position:absolute;box-sizing:border-box;top:0;left:45%;width:10%;height:100%;overflow:hidden;border-color:inherit}.waffle-spinner-gap-patch .waffle-spinner-circle{width:1000%;left:-450%}.waffle-spinner-circle-clipper{display:inline-block;position:relative;width:50%;height:100%;overflow:hidden;border-color:inherit}.waffle-spinner-circle-clipper .waffle-spinner-circle{width:200%}.waffle-spinner-circle{position:absolute;top:0;right:0;bottom:0;left:0;box-sizing:border-box;height:100%;border-width:3px;border-style:solid;border-color:inherit;border-bottom-color:transparent;border-radius:50%;-webkit-animation:none;animation:none}.waffle-spinner-circle-clipper.waffle-spinner-left .waffle-spinner-circle{border-right-color:transparent;-webkit-transform:rotate(129deg);transform:rotate(129deg)}.waffle-spinner-circle-clipper.waffle-spinner-right .waffle-spinner-circle{left:-100%;border-left-color:transparent;-webkit-transform:rotate(-129deg);transform:rotate(-129deg)}.waffle-spinner.waffle-spinner-active .waffle-spinner-circle-clipper.waffle-spinner-left .waffle-spinner-circle{-webkit-animation:waffle-spinner-left-spin 1333ms cubic-bezier(0.4,0.0,0.2,1) infinite both;animation:waffle-spinner-left-spin 1333ms cubic-bezier(0.4,0.0,0.2,1) infinite both}.waffle-spinner.waffle-spinner-active .waffle-spinner-circle-clipper.waffle-spinner-right .waffle-spinner-circle{-webkit-animation:waffle-spinner-right-spin 1333ms cubic-bezier(0.4,0.0,0.2,1) infinite both;animation:waffle-spinner-right-spin 1333ms cubic-bezier(0.4,0.0,0.2,1) infinite both}.waffle-spinner.waffle-spinner-isWarmdown .waffle-spinner-container{-webkit-animation:waffle-spinner-container-rotate 1568ms linear infinite,waffle-spinner-fade-out 400ms cubic-bezier(0.4,0.0,0.2,1);animation:waffle-spinner-container-rotate 1568ms linear infinite,waffle-spinner-fade-out 400ms cubic-bezier(0.4,0.0,0.2,1)}@keyframes waffle-spinner-container-rotate{to{transform:rotate(360deg)}}@keyframes waffle-spinner-fill-unfill-rotate{12.5%{transform:rotate(135deg)}25%{transform:rotate(270deg)}37.5%{transform:rotate(405deg)}50%{transform:rotate(540deg)}62.5%{transform:rotate(675deg)}75%{transform:rotate(810deg)}87.5%{transform:rotate(945deg)}to{transform:rotate(1080deg)}}@keyframes waffle-spinner-blue-fade-in-out{from{opacity:0.99}25%{opacity:0.99}26%{opacity:0}89%{opacity:0}90%{opacity:0.99}100%{opacity:0.99}}@keyframes waffle-spinner-red-fade-in-out{from{opacity:0}15%{opacity:0}25%{opacity:0.99}50%{opacity:0.99}51%{opacity:0}}@keyframes waffle-spinner-yellow-fade-in-out{from{opacity:0}40%{opacity:0}50%{opacity:0.99}75%{opacity:0.99}76%{opacity:0}}@keyframes waffle-spinner-green-fade-in-out{from{opacity:0}65%{opacity:0}75%{opacity:0.99}90%{opacity:0.99}100%{opacity:0}}@keyframes waffle-spinner-left-spin{from{transform:rotate(130deg)}50%{transform:rotate(-5deg)}to{transform:rotate(130deg)}}@keyframes waffle-spinner-right-spin{from{transform:rotate(-130deg)}50%{transform:rotate(5deg)}to{transform:rotate(-130deg)}}@keyframes waffle-spinner-fade-out{from{opacity:0.99}to{opacity:0}}.row-header-wrapper{overflow:hidden;border-width:0;margin:0;padding:0}.column-headers-background,.row-headers-background{z-index:1}.selected-row-headers-background{position:absolute;background-color:#c8c8c8;width:45px;z-index:2}.selected-column-headers-background{position:absolute;background-color:#c8c8c8;height:23px;z-index:2}.waffle td,.grid-fixed-table td{overflow:hidden;border:1px #e5e5e5 solid;border-color:rgba(0,0,0,0.15);border-width:0 1px 1px 0;vertical-align:bottom;line-height:inherit;background-color:#fff;padding:0 3px}.waffle .softmerge{overflow:visible}.softmerge-inner{white-space:nowrap;overflow:hidden;text-overflow:hidden;position:relative}.waffle-ltr td,.grid-fixed-table-ltr td{border-width:0 1px 1px 0}.waffle-rtl td,.grid-fixed-table-rtl td{border-width:0 0 1px 1px}.waffle th,.grid-fixed-table th{font-weight:normal;background:transparent;text-align:center;vertical-align:middle;font-size:8pt;color:#222;height:23px;border:solid 1px #ccc;border-width:0 1px 1px 0;overflow:hidden;padding:0}.waffle-ltr th,.grid-fixed-table-ltr th{border-width:0 1px 1px 0}.waffle-rtl th,.grid-fixed-table-rtl th{border-width:0 0 1px 1px}.no-grid td{border:solid 1px rgb(255,255,255);border:solid 1px rgba(204,204,204,0);border-width:0 1px 1px 0}td.empty{font-size:0!important}th.row-header{background-color:#eee;width:45px;text-align:center;vertical-align:middle;font-size:8pt;color:#333;line-height:inherit;overflow:hidden}th.tall-row,td.tall-row{vertical-align:top}th.row-header-shim,td.row-header-shim{width:0;margin:0;overflow:hidden}div.column-headers-background{position:absolute;height:23px;background:#eee}th.column-headers-background{background:#eee;position:relative}div.row-headers-background{position:absolute;width:45px;background:#eee}th.row-headers-background{background:#eee;position:relative}tr.column-header-row{height:23px}th.selected,td.selected{background-color:#c8c8c8;border-bottom:1px solid #9fc2fd}td.header-shim,th.header-shim{border-width:0 1px 0 0;height:0;margin:0}td.freezebar-cell,th.freezebar-cell{border-color:#dadfe8!important;background-color:#dadfe8;padding:0;border-width:0}th.freezebar-origin-rtl{background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -305px -62px}th.freezebar-origin-ltr{background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -205px 0}th.freezebar-origin-ltr,th.freezebar-origin-rtl{background-color:#eee;position:relative}th.frozen-column-cell{width:4px}td.freezebar-hidden,th.freezebar-hidden{height:0px;width:0px;display:none}td.frozen-row-cell,th.frozen-row-cell{height:4px}.grid-fixed-table tr{height:10px}.docs-gm .row-header,.docs-gm .row-header-shim{background:#f8f9fa}.docs-gm div.column-headers-background,.docs-gm th.column-headers-background,.docs-gm div.row-headers-background,.docs-gm th.row-headers-background{background:#f8f9fa;color:#5f6368;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif}.waffle-current-theme{font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:12px;line-height:16px;padding-left:15px}.waffle-current-theme-bar{background:#fff;border-bottom:1px solid #dadce0;z-index:1}.waffle-current-theme-bar-shadow{box-shadow:0px 1px 1px 0px rgba(0,0,0,0.14),0px 2px 1px -1px rgba(0,0,0,0.12),0px 1px 3px 0px rgba(0,0,0,0.2)}.waffle-current-theme-common-content{display:flex;-webkit-align-items:center;align-items:center}.waffle-current-theme-preview{padding-bottom:20px}.waffle-current-theme-title-section{-ms-flex:1;-webkit-flex:1;flex:1;margin:16px 0;overflow:hidden}.docs-gm .waffle-gm-sidebar .waffle-current-theme-title-section{font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif}.waffle-custom-theme-warning-message{background:#f4f4f4;height:32px;margin:auto;padding:10px}.waffle-theme-thumbnail.waffle-theme-active{box-shadow:0px 2px 2px 0px rgba(0,0,0,0.14),0px 3px 1px -2px rgba(0,0,0,0.12),0px 1px 5px 0px rgba(0,0,0,0.2);border:1px solid #34a853}.waffle-theme-button{outline:none}.waffle-theme-container-element{background:#fff;padding-top:16px;outline:none}.waffle-theme-container-element-focus .waffle-theme-thumbnail{border-color:#1a73e8}.waffle-theme-editor-content{display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;height:100%}.waffle-theme-editor-send-feedback-container{text-align:end;padding:10px}.waffle-theme-editor-themes-container{overflow:auto}.waffle-theme-edit-panel-color{display:flex;margin:5px 0}.waffle-theme-edit-panel-color-text{-ms-flex:1;-webkit-flex:1;flex:1;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;line-height:40px;overflow:hidden;text-overflow:ellipsis}.waffle-theme-edit-panel-font-family{margin-top:5px;margin-bottom:25px}.waffle-theme-editor-edit-panel{overflow:auto;padding:25px}.docs-gm .waffle-gm-sidebar .waffle-theme-editor-edit-panel{font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif}.waffle-theme-edit-panel-color-picker{height:32px;margin:auto}.waffle-theme-edit-panel-title{font-weight:500;overflow:hidden;text-overflow:ellipsis}.waffle-theme-title{color:#3c4043;font-weight:500;line-height:32px;overflow:hidden;padding:0px 15px;text-overflow:ellipsis;white-space:nowrap}.waffle-theme-title.waffle-current-theme-title{line-height:20px}.docs-gm .waffle-gm-sidebar .waffle-theme-title{font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif}.waffle-theme-thumbnail{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;cursor:pointer;border:1px solid #dadce0;height:154px;margin:auto;width:250px}.waffle-filterbox-container{padding-top:4px;padding-bottom:0;width:300px}.waffle-filtermenu{background-color:#fff;padding-left:17px;padding-right:20px;letter-spacing:0.2px}.waffle-filterbox-boolean-condition-picker{background-color:#fff;padding-left:17px;padding-right:20px;letter-spacing:0.2px}.waffle-filterbox-with-condition:focus{outline:none}.waffle-autofilter-sort{padding-left:20px;margin:3px 0px 3px 0px}.waffle-autofilter-sort.waffle-datasourcesheet-sort-selected.hc-enabled-focus{outline:1px solid}.waffle-autofilter-sort.waffle-datasourcesheet-sort-selected{background-color:#e8eaed}.docs-gm .goog-menu.waffle-datasourcesheet-filterbox-container .goog-menuitem{padding-left:17px}.docs-gm .waffle-datasourcesheet-filterbox-container .goog-menuseparator{margin-left:17px;margin-right:20px}.docs-gm .waffle-filterbox-container.waffle-datasourcesheet-filterbox-container .waffle-conditionalformat-condition-type-select .goog-flat-menu-button{width:100%}.waffle-filterbox-content{padding:3px 8px 2px 8px}.waffle-filterbox-content>.goog-menuitem{padding:6px 0px 6px 22px}.waffle-filterbox-label{margin-top:15px;margin-bottom:13px}.waffle-filterbox-with-condition .waffle-filterbox-label{margin-top:0}.waffle-filterbox-label-icon-jfk{background:none;float:right}.waffle-filterbox-button-container{padding:14px 0 14px 20px}.docs-gm .waffle-filterbox-button-container{text-align:right}.waffle-filterbox-with-condition{overflow-y:auto}.waffle-filterbox-input-icon{background:none}.waffle-action-menu{max-height:400px;overflow:auto}.waffle-recording-toast{background-color:#fff;border-bottom:1px solid rgba(0,0,0,0.14);border-radius:2px;bottom:52px;box-shadow:1px 1px 8px 0 rgba(0,0,0,0.4);color:#3c4043;font:14px Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;outline:none;position:absolute}.docs-gm .waffle-recording-toast{border-radius:8px;box-shadow:0 4px 8px 3px rgba(60,64,67,.15)}.waffle-recording-toast-top{height:64px;min-width:454px;overflow:hidden;position:relative}.waffle-recording-toast-bottom{background-color:#f8f9fa;border-top:1px solid rgba(0,0,0,0.14);color:#3c4043;box-sizing:border-box;font-size:14px;font-weight:500;width:100%}.docs-gm .waffle-recording-toast-bottom{background-color:#fff;border-radius:0 0 8px 8px}.docs-gm .waffle-recording-toast-relativity-split .jfk-radiobutton{max-width:232px;padding:12px 12px}.waffle-recording-toast-new-content.waffle-recording-toast-slide-in{-webkit-animation:waffle-recording-toast-new-message 2.1s cubic-bezier(0.4,0,0.2,1) forwards;-moz-animation:waffle-recording-toast-new-message 2.1s cubic-bezier(0.4,0,0.2,1) forwards;-o-animation:waffle-recording-toast-new-message 2.1s cubic-bezier(0.4,0,0.2,1) forwards;animation:waffle-recording-toast-new-message 2.1s cubic-bezier(0.4,0,0.2,1) forwards;opacity:1}.waffle-recording-toast-new-content{overflow:hidden;position:absolute;text-overflow:ellipsis;top:-42px;white-space:nowrap}@keyframes waffle-recording-toast-new-message{0%{top:-42px}14%,86%{top:0}100%{top:42px}}.waffle-recording-toast-content{display:inline-block;height:64px;line-height:64px;margin:0 4px 0 16px}.waffle-recording-toast-content,.waffle-recording-toast-new-content,.waffle-recording-toast-default-content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:205px}.waffle-recording-toast-default-content{opacity:1;transition:opacity 0.3s cubic-bezier(0.4,0,0.2,1)}.waffle-recording-toast-relativity-split{width:50%;display:inline-block;vertical-align:top}.waffle-recording-toast-relativity-split .jfk-radiobutton{max-width:200px;padding:12px 8px}.waffle-recording-toast-label-description{color:#3c4043;font-size:12px;font-weight:normal;margin-top:4px}.waffle-recording-toast-right{float:right}.waffle-recording-toast-expand-section{display:inline-block;border-left:1px solid rgba(0,0,0,0.14);box-sizing:border-box;height:64px;padding:20px 5px;vertical-align:bottom}.waffle-recording-toast-expand{border:none;border-radius:2px;display:inline-block;outline:none;padding:3px}.waffle-recording-toast .goog-flat-button{background-color:transparent;border:none;border-radius:2px;color:#5f6368;display:inline-block;font:14px Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;height:16px;margin:14px 0;padding:10px}.waffle-recording-toast-cancel,.waffle-recording-toast-stop{text-transform:uppercase}.docs-gm .waffle-recording-toast-cancel,.docs-gm .waffle-recording-toast-stop{text-transform:none}.waffle-recording-toast .waffle-recording-toast-stop{margin:14px 16px}.waffle-recording-toast-close-button{background-color:transparent;border:none;cursor:pointer;display:inline-block;margin:0;padding:0}.waffle-recording-toast-relativity{display:inline-block;padding-left:12px}.waffle-recording-toast-relativity-label{display:inline-block;padding-left:24px}.waffle-edit-actions-dialog,.waffle-import-custom-function-actions-dialog,.waffle-record-script-dialog{font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif}.waffle-record-script-dialog-gm.modal-dialog{width:286px}.waffle-record-script-dialog.modal-dialog{border:none;box-shadow:0 4px 16px 0 rgba(0,0,0,.4);min-height:239px;padding:0;width:334px}.waffle-record-script-dialog .modal-dialog-content{line-height:1em;padding:0 24px}.waffle-record-script-dialog .modal-dialog-title{color:rgba(0,0,0,0.87);font-size:19px;font-weight:500;margin:0;padding:21px 24px 16px 24px}.waffle-record-script-dialog .modal-dialog-buttons{float:right;margin:33px 0 14px 0}.waffle-record-script-dialog-label{color:rgba(0,0,0,0.54);font-size:11px;padding-top:3px}.waffle-record-script-dialog-gm .waffle-record-script-dialog-label{color:#3c4043;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;padding:0 0 4px 0}.waffle-record-script-dialog-name-section{margin-bottom:16px}.waffle-record-script-dialog .docs-charts-editor-material-text-input,.waffle-record-script-dialog .docs-charts-editor-material-text-input input{font-size:13px}.waffle-record-script-dialog-gm .waffle-record-script-name-input{width:100%}.waffle-record-script-shortcut input{margin-left:8px;text-align:center;width:60px}.waffle-record-script-dialog-gm .waffle-record-script-shortcut label{margin-right:8px}.waffle-record-script-dialog-gm .waffle-record-script-shortcut input{width:74px}.waffle-recording-toast .jfk-radiobutton-label{margin-left:28px}.waffle-recording-toast .jfk-radiobutton-radio,.waffle-recording-toast .jfk-radiobutton-hover .jfk-radiobutton-radio{border:2px solid #bebebe;height:16px;left:8px;top:12px;width:16px}.waffle-recording-toast .jfk-radiobutton-radio::after{background:#4285f4;border:4px solid #4285f4;box-sizing:border-box;height:8px;left:2px;top:2px;width:8px}.waffle-recording-toast .jfk-radiobutton-checked .jfk-radiobutton-radio{border:2px solid #4285f4}.waffle-recording-toast-relativity-split .jfk-radiobutton-checked.jfk-radiobutton-focused .jfk-radiobutton-radio{border:2px solid #2a56c6}.waffle-recording-toast-relativity-split .jfk-radiobutton-checked.jfk-radiobutton-focused .jfk-radiobutton-radio::after{background-color:#2a56c6;border:4px solid #2a56c6}.docs-gm .waffle-recording-toast .jfk-radiobutton-radio::after{background:#188038;border:4px solid #188038}.docs-gm .waffle-recording-toast .jfk-radiobutton-checked .jfk-radiobutton-radio{border:2px solid #188038}.docs-gm .waffle-recording-toast-relativity-split .jfk-radiobutton-focused .jfk-radiobutton-radio{border:2px solid #188038}.docs-gm .waffle-recording-toast-relativity-split .jfk-radiobutton-checked.jfk-radiobutton-focused .jfk-radiobutton-radio{border:2px solid #0d652d}.docs-gm .waffle-recording-toast-relativity-split .jfk-radiobutton-checked.jfk-radiobutton-focused .jfk-radiobutton-radio::after{background-color:#0d652d;border:4px solid #0d652d}.waffle-recording-toast-icon{color:#ea4335;display:inline-block;height:16px;margin-bottom:24px;margin-left:16px;margin-top:24px;width:16px}.waffle-recording-toast-outer-circle{border:2px solid #ff5959;border-radius:50%;box-sizing:border-box;height:16px;position:relative;width:16px}.waffle-recording-toast-inner-circle{-webkit-animation:waffle-recording-toast-recording-cycle 1333ms steps(1) infinite;-moz-animation:waffle-recording-toast-recording-cycle 1333ms steps(1) infinite;-o-animation:waffle-recording-toast-recording-cycle 1333ms steps(1) infinite;animation:waffle-recording-toast-recording-cycle 1333ms steps(1) infinite;border:4px solid #ff5959;border-radius:50%;box-sizing:border-box;height:8px;left:2px;position:relative;top:2px;width:8px}@keyframes waffle-recording-toast-recording-cycle{0%{border:4px solid #ff5959}50%{border:0}100%{border:4px solid #ff5959}}.waffle-recording-toast-expand-icon{height:18px;width:18px}.waffle-recording-toast-expand-icon::after{content:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgdmlld0JveD0iMCAwIDE4IDE4Ij48ZyBzdHlsZT0iZmlsbDpub25lO3N0cm9rZS13aWR0aDoxO3N0cm9rZTpub25lIj48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg5IDkpc2NhbGUoMSAtMSl0cmFuc2xhdGUoLTkgLTkpIj48cmVjdCB3aWR0aD0iMTgiIGhlaWdodD0iMTgiLz48cG9seWdvbiBwb2ludHM9IjkgNSAzIDExIDQuNCAxMi40IDkgNy44IDEzLjYgMTIuNCAxNSAxMSIgZmlsbD0iIzVmNjM2OCIvPjwvZz48L2c+PC9zdmc+")}.goog-zippy-collapsed .waffle-recording-toast-expand-icon{transform:rotate(-180deg)}.waffle-recording-toast-relativity-info{color:white;display:inline-block;float:right;font-weight:500;height:20px;text-align:center;width:20px}.waffle-recording-toast-info-circle{border:2px solid white;border-radius:50%;height:16px;left:-2px;position:relative;top:-2px;width:16px}.waffle-edit-actions-dialog.modal-dialog{box-shadow:0 4px 16px 0 rgba(0,0,0,.4);border:none;padding:0px;width:441px}.waffle-edit-actions-dialog .modal-dialog-title{color:rgba(0,0,0,0.87);font-size:18px;font-weight:500;margin-bottom:16px;padding:24px 24px 0 24px}.waffle-import-custom-function-actions-dialog .modal-dialog-title .title-action-number{color:rgba(0,0,0,0.54);font-size:18px;font-weight:400;margin-left:5px}.waffle-edit-actions-dialog .modal-dialog-buttons{float:right;margin-bottom:14px;margin-top:8px}.waffle-edit-actions-dialog .modal-dialog-buttons button,.waffle-record-script-dialog .modal-dialog-buttons button{background-color:white;background-image:none;border:none;border-radius:2px;color:rgba(0,0,0,0.54);font-size:13px;font-weight:500;height:32px;margin-right:8px;min-width:64px;padding-left:8px;padding-right:8px;text-transform:uppercase}.waffle-edit-actions-dialog .modal-dialog-buttons .goog-buttonset-default,.waffle-record-script-dialog .modal-dialog-buttons .goog-buttonset-default,.waffle-recording-toast .waffle-recording-toast-stop{color:#4285f4}.waffle-edit-actions-dialog .modal-dialog-buttons button:hover:enabled,.waffle-record-script-dialog .modal-dialog-buttons button:hover:enabled,.waffle-recording-toast .goog-flat-button-hover,.waffle-recording-toast-expand:hover{background-color:rgba(0,0,0,0.12)}.waffle-edit-actions-dialog .modal-dialog-buttons button:focus,.waffle-record-script-dialog .modal-dialog-buttons button:focus,.waffle-recording-toast .goog-flat-button-focused,.waffle-recording-toast-expand:focus{background-color:#ddd;background-image:none;border:none}.waffle-edit-actions-dialog .modal-dialog-buttons button:active:enabled,.waffle-record-script-dialog .modal-dialog-buttons button:active:enabled,.waffle-recording-toast .goog-flat-button-active,.waffle-recording-toast-expand:active{background-color:rgba(0,0,0,0.12);color:rgba(0,0,0,0.87)}.waffle-edit-actions-dialog .modal-dialog-buttons button.goog-buttonset-default:hover:enabled,.waffle-record-script-dialog .modal-dialog-buttons button.goog-buttonset-default:hover:enabled,.waffle-recording-toast .waffle-recording-toast-stop.goog-flat-button-hover{background-color:rgba(66,133,244,0.12)}.waffle-edit-actions-dialog .modal-dialog-buttons button.goog-buttonset-default:active:enabled,.waffle-record-script-dialog .modal-dialog-buttons button.goog-buttonset-default:active:enabled,.waffle-recording-toast .waffle-recording-toast-stop.goog-flat-button-active,.waffle-recording-toast .waffle-recording-toast-stop.goog-flat-button-enabled{background-color:rgba(66,133,244,0.32);color:#3367d6}.docs-gm .waffle-import-custom-function-add-function .goog-flat-button,.docs-gm .waffle-recording-toast-stop.goog-flat-button{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:white;color:#188038;outline:none;text-transform:none}.docs-gm .waffle-import-custom-function-add-function .goog-flat-button-hover,.docs-gm .waffle-recording-toast-stop.goog-flat-button-hover{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#f8fcf9;color:#188038}.docs-gm .waffle-import-custom-function-add-function .goog-flat-button-focused,.docs-gm .waffle-recording-toast-stop.goog-flat-button-focused{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#e7f5eb;color:#188038}.docs-gm .waffle-import-custom-function-add-function .goog-flat-button-active,.docs-gm .waffle-recording-toast-stop.goog-flat-button-active{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#dff2e4;color:#188038;box-shadow:0 2px 6px 2px rgba(60,64,67,.15)}.docs-gm .waffle-import-custom-function-view-script .goog-flat-button,.docs-gm .waffle-recording-toast-cancel.goog-flat-button{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:white;color:#5f6368;outline:none;text-transform:none}.docs-gm .waffle-import-custom-function-view-script .goog-flat-button-hover,.docs-gm .waffle-recording-toast-cancel.goog-flat-button-hover{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#f8fcf9;color:#5f6368}.docs-gm .waffle-import-custom-function-view-script .goog-flat-button-focused,.docs-gm .waffle-recording-toast-cancel.goog-flat-button-focused{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#e7f5eb;color:#5f6368}.docs-gm .waffle-import-custom-function-view-script .goog-flat-button-active,.docs-gm .waffle-recording-toast-cancel.goog-flat-button-active{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#dff2e4;color:#5f6368;box-shadow:0 2px 6px 2px rgba(60,64,67,.15)}.docs-gm .waffle-recording-toast-expand:hover{background-color:#f8fcf9}.docs-gm .waffle-recording-toast-expand:focus{background-color:#e7f5eb}.docs-gm .waffle-recording-toast-expand:focus:hover{background-color:#dff2e4}.docs-gm .waffle-recording-toast-expand:active{background-color:#dff2e4;box-shadow:0 2px 6px 2px rgba(60,64,67,.15)}.waffle-edit-actions-dialog .waffle-edit-actions-row{padding-bottom:10px;padding-top:10px}.waffle-edit-actions-row{color:rgba(0,0,0,0.87);font-size:13px;font-weight:400;height:30px}.waffle-edit-actions-row-name{float:left;margin-right:10px;width:175px}.waffle-edit-actions-row-shortcut-prefix{display:inline-block;margin-right:5px;padding-top:4px}.waffle-edit-actions-row-shortcut{display:inline-block;width:32px}.waffle-edit-actions-row-shortcut-input{max-width:100%;text-align:center}.waffle-edit-actions-row-name input:disabled{color:rgba(0,0,0,0.87);border:none}.waffle-edit-actions-row-name input{max-width:100%}.waffle-edit-actions-dialog .modal-dialog-title-close{margin-right:7px;padding:24px 17px 24px 24px}.waffle-edit-actions-dialog-scroll{max-height:346px;min-height:160px;overflow-y:auto;padding:10px 24px 10px 24px}.waffle-edit-actions-dialog-gm .waffle-edit-actions-dialog-scroll{padding:0 4px}.waffle-edit-actions-options{float:right}.waffle-edit-actions-row-menu{display:inline-block;margin-left:10px}.waffle-edit-actions-options .goog-menuitem{padding-right:30px}.waffle-edit-actions-row .goog-menu{display:inline-block;overflow:hidden}.waffle-edit-actions-shortcut-conflict-message{clear:left;color:#db4437;font-size:11px}.waffle-edit-actions-undo-remove-toast{z-index:1003}.waffle-edit-actions-dialog .modal-dialog-buttons button:disabled{opacity:0.38}.waffle-import-custom-function-actions-dialog.modal-dialog{box-shadow:0 4px 16px 0 rgba(0,0,0,.4);border:none;padding:0px;width:451px}.waffle-import-custom-function-actions-dialog .modal-dialog-title{color:rgba(0,0,0,0.87);font-size:18px;font-weight:500;margin-bottom:16px;padding:24px 24px 0 24px}.waffle-import-custom-function-title-description{color:rgba(0,0,0,0.54);font-size:11px;font-weight:400}.waffle-import-custom-function-actions-title-separator{border-bottom:1px solid rgba(0,0,0,0.12);margin:0 24px}.waffle-import-custom-functions-row-container{padding-top:8px}.waffle-import-custom-function-row{margin-top:8px;padding-left:8px}.docs-gm .waffle-import-custom-function-actions-dialog.modal-dialog{padding:24px 12px}.docs-gm .waffle-import-custom-function-actions-dialog .modal-dialog-title{padding:0 12px}.docs-gm .waffle-import-custom-function-actions-title-separator{margin:0 12px}.docs-gm .waffle-import-custom-function-actions-dialog-scroll{padding:0 1px 10px 2px}.docs-gm .waffle-import-custom-function-row{margin-top:8px;padding-left:10px}.waffle-import-custom-function-add-function{display:inline-block;float:right}.waffle-import-custom-function-add-function button{background-color:white;border:none;border-radius:2px;color:#4285f4;font:500 15px Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;height:32px;padding:8px;text-transform:uppercase}.waffle-import-custom-function-add-function button:hover{background-color:rgba(66,133,244,0.12)}.waffle-import-custom-function-add-function button:active{background-color:rgba(66,133,244,0.32);color:#3367d6}.waffle-import-custom-function-name{color:rgba(0,0,0,0.87);font-weight:500;font-size:13px}.waffle-import-custom-function-metadata{color:rgba(0,0,0,0.54);font-size:11px;font-weight:400;margin-top:6px}.waffle-import-custom-function-description-label{font-weight:500}.waffle-import-custom-function-project-name{display:inline-block}.waffle-import-custom-function-file-name{display:inline-block;margin-left:16px}.waffle-import-custom-function-view-script{display:inline-block}.waffle-import-custom-function-view-script button{background-color:white;background-image:none;border:none;border-radius:2px;color:rgba(0,0,0,0.6);font:500 15px Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;height:32px;margin-left:-8px;text-transform:uppercase;padding:8px;line-height:1em}.waffle-import-custom-function-view-script button:hover{background-color:rgba(0,0,0,0.12)}.waffle-import-custom-function-view-script button:active{background-color:rgba(0,0,0,0.12);color:rgba(0,0,0,0.87)}.function-description-seperator{padding-left:5px}.waffle-import-custom-function-actions-dialog-scroll{max-height:381px;min-height:185px;overflow-y:scroll;padding:0 1px 10px 16px}.waffle-import-custom-function-actions-status-toast{z-index:1003}.waffle-import-custom-function-actions-checkmark{height:24px;width:24px}.waffle-import-custom-function-actions-checkmark::after{content:url("data:image/svg+xml;base64,PHN2ZyB4bWxuczp4bGluaz0naHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2ZXJzaW9uPScxLjEnIHdpZHRoPScyNHB4JyBoZWlnaHQ9JzI0cHgnIHZpZXdCb3g9JzAgMCAxNSAxNSc+PHBhdGggZmlsbD0nZ3JleScgZmlsbC1ydWxlPSdldmVub2RkJyBkPSdNNywxNCBDMTAuODY1OTkzMiwxNCAxNCwxMC44NjU5OTMyIDE0LDcgQzE0LDMuMTM0MDA2NzUgMTAuODY1OTkzMiwwIDcsMCBDMy4xMzQwMDY3NSwwIDAsMy4xMzQwMDY3NSAwLDcgQzAsMTAuODY1OTkzMiAzLjEzNDAwNjc1LDE0IDcsMTQgWiBNMi4yNSw3LjUgTDMuMzA3NSw2LjQ0MjUgTDUuNSw4LjYyNzUgTDEwLjY5MjUsMy40MzUgTDExLjc1LDQuNSBMNS41LDEwLjc1IEwyLjI1LDcuNSBaJz48L3BhdGg+PC9zdmc+")}.waffle-edit-actions-empty{color:rgba(0,0,0,0.54);font-size:15px;font-weight:400;line-height:160px;text-align:center}.docs-ui-toast-content .waffle-ellipses{left:4px;top:3px}.grid-shim-bottom{border-top:1px solid #d9d9d9}.grid-shim-end-ltr{border-left:1px solid #d9d9d9}.grid-shim-end-rtl{border-right:1px solid #d9d9d9}.row-freezebar-extension{background-color:#dadfe8;border-top:1px solid #d9d9d9;border-bottom:1px solid #dbdbdb;position:relative}.grid-bottom-bar{border-top:1px solid #d9d9d9}.grid-bottom-bar{border-top:1px solid #aaa}.column-freezebar-extension{height:100%;background-color:#dadfe8;border-left:1px solid #d9d9d9;border-right:1px solid #dbdbdb;position:relative}.mimic-overlay::-webkit-scrollbar{background-color:rgba(255,255,255,1.0)}.mimic-overlay::-webkit-scrollbar-corner{background-color:rgba(255,255,255,1.0)}.scroll-container::-webkit-scrollbar:vertical{width:12px}.scroll-container::-webkit-scrollbar:horizontal{height:12px}.scroll-container::-webkit-scrollbar-button:start{display:none}.scroll-container::-webkit-scrollbar-button:end{display:block}.scroll-container::-webkit-scrollbar-button{border:1px solid #d9d9d9}.scroll-container::-webkit-scrollbar-button:horizontal{border-width:1px 0 0 0}.scroll-container-ltr::-webkit-scrollbar-button:vertical{border-width:0 0 0 1px}.scroll-container-rtl::-webkit-scrollbar-button:vertical{border-width:0 1px 0 0}.scroll-container::-webkit-scrollbar-button:horizontal:increment{background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -663px -13px;width:15px;padding-left:1px;background-clip:border-box;border:1px solid #d9d9d9;border-width:1px 0 0 0;box-shadow:none;background-color:#f8f8f8}.scroll-container::-webkit-scrollbar-button:horizontal:increment:hover{background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -395px -62px}.scroll-container::-webkit-scrollbar-button:horizontal:increment:active{background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -679px -13px}.scroll-container::-webkit-scrollbar-button:horizontal:decrement{border-left:1px solid #d9d9d9;border-right:1px solid #d9d9d9;background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -283px -62px;width:17px}.scroll-container::-webkit-scrollbar-button:horizontal:hover{background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -145px -70px}.scroll-container::-webkit-scrollbar-button:horizontal:active{background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -552px 0}.scroll-container::-webkit-scrollbar-button:vertical:increment{padding-top:1px;background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -531px -24px;height:15px}.scroll-container::-webkit-scrollbar-button:vertical:increment:hover{background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -570px -42px}.scroll-container::-webkit-scrollbar-button:vertical:increment:active{background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -83px -46px}.scroll-container::-webkit-scrollbar-button:vertical:decrement{border-top:1px solid #d9d9d9;border-bottom:1px solid #d9d9d9;background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -631px -27px;height:17px}.scroll-container::-webkit-scrollbar-button:vertical:decrement:hover{background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -180px -58px}.scroll-container::-webkit-scrollbar-button:vertical:decrement:active{background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -776px -28px}.scroll-container::-webkit-scrollbar-track:vertical{background-clip:border-box;border:1px solid #d9d9d9;box-shadow:none;background-color:#f8f8f8}.scroll-container-ltr::-webkit-scrollbar-track:vertical{border-width:0 0 0 1px}.scroll-container-rtl::-webkit-scrollbar-track:vertical{border-width:0 1px 0 0}.scroll-container::-webkit-scrollbar-track:horizontal{background-clip:border-box;border:1px solid #d9d9d9;border-width:1px 0 0 0;box-shadow:none;background-color:#f8f8f8}.scroll-container::-webkit-scrollbar-track:hover{background:none;box-shadow:none}.docs-gm .native-scrollbar::-webkit-scrollbar-track:hover{border-width:0;background:none}.scroll-container::-webkit-scrollbar-track:horizontal:hover,.scroll-container::-webkit-scrollbar-track:vertical:hover{box-shadow:none;background-clip:border-box;border:1px solid #d9d9d9;border-width:1px 0 0 0;box-shadow:none;background-color:#f8f8f8}.scroll-container::-webkit-scrollbar-track:horizontal:hover{border-width:1px 0 0 0}.scroll-container::-webkit-scrollbar-track:vertical:hover{border-width:0 1px 0 1px}.scroll-container::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.2);background-clip:padding-box;border:solid transparent;min-height:28px;padding:none;box-shadow:none;border-width:1px 1px 1px 1px}.scroll-container::-webkit-scrollbar-thumb:horizontal{box-shadow:none;border-width:2px 1px 1px 1px}.scroll-container::-webkit-scrollbar-thumb:vertical{padding:1px 1px 1px 1px;box-shadow:none}.scroll-container-ltr::-webkit-scrollbar-thumb:vertical{border-width:1px 1px 1px 2px}.scroll-container-rtl::-webkit-scrollbar-thumb:vertical{border-width:1px 2px 1px 1px}.scroll-container::-webkit-scrollbar-thumb:hover{box-shadow:none}.docs-gm .native-scrollbar::-webkit-scrollbar-thumb:hover{background-color:#bdc1c6}.docs-gm .native-scrollbar::-webkit-scrollbar-thumb:active{background-color:#80868b}.docs-gm .native-scrollbar::-webkit-scrollbar-track:vertical,.docs-gm .native-scrollbar::-webkit-scrollbar-track:horizontal,.docs-gm .native-scrollbar::-webkit-scrollbar-track:horizontal:hover,.docs-gm .native-scrollbar::-webkit-scrollbar-track:vertical:hover{background-color:#fff}.scroll-container::-webkit-scrollbar-corner{border:1px solid #d9d9d9}.scroll-container-rtl::-webkit-scrollbar-corner{border-width:1px 1px 0 0}.scroll-container-ltr::-webkit-scrollbar-corner{border-width:1px 0 0 1px}.native-scrollbar::-webkit-scrollbar:vertical{width:12px}.native-scrollbar::-webkit-scrollbar:horizontal{height:12px}.native-scrollbar::-webkit-scrollbar-button:start{display:none}.native-scrollbar::-webkit-scrollbar-button:end{display:block}.native-scrollbar::-webkit-scrollbar-button{border:1px solid #d9d9d9}.native-scrollbar::-webkit-scrollbar-button:horizontal{border-width:1px 0 0 0}.native-scrollbar-ltr::-webkit-scrollbar-button:vertical{border-width:0 0 0 1px}.native-scrollbar-rtl::-webkit-scrollbar-button:vertical{border-width:0 1px 0 0}.native-scrollbar::-webkit-scrollbar-button:horizontal:increment{background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -663px -13px;width:15px;padding-left:1px;background-clip:border-box;border:1px solid #d9d9d9;border-width:1px 0 0 0;box-shadow:none;background-color:#f8f8f8}.native-scrollbar::-webkit-scrollbar-button:horizontal:increment:hover{background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -395px -62px}.native-scrollbar::-webkit-scrollbar-button:horizontal:increment:active{background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -679px -13px}.native-scrollbar::-webkit-scrollbar-button:horizontal:decrement{border-left:1px solid #d9d9d9;border-right:1px solid #d9d9d9;background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -283px -62px;width:17px}.native-scrollbar::-webkit-scrollbar-button:horizontal:hover{background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -145px -70px}.native-scrollbar::-webkit-scrollbar-button:horizontal:active{background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -552px 0}.native-scrollbar::-webkit-scrollbar-button:vertical:increment{padding-top:1px;background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -531px -24px;height:15px}.native-scrollbar::-webkit-scrollbar-button:vertical:increment:hover{background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -570px -42px}.native-scrollbar::-webkit-scrollbar-button:vertical:increment:active{background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -83px -46px}.native-scrollbar::-webkit-scrollbar-button:vertical:decrement{border-top:1px solid #d9d9d9;border-bottom:1px solid #d9d9d9;background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -631px -27px;height:17px}.native-scrollbar::-webkit-scrollbar-button:vertical:decrement:hover{background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -180px -58px}.native-scrollbar::-webkit-scrollbar-button:vertical:decrement:active{background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -776px -28px}.docs-gm .native-scrollbar::-webkit-scrollbar-track{margin:0px}.native-scrollbar::-webkit-scrollbar-track:vertical{background-clip:border-box;border:1px solid #d9d9d9;box-shadow:none;background-color:#f8f8f8}.native-scrollbar-ltr::-webkit-scrollbar-track:vertical{border-width:0 0 0 1px}.native-scrollbar-rtl::-webkit-scrollbar-track:vertical{border-width:0 1px 0 0}.native-scrollbar::-webkit-scrollbar-track:horizontal{background-clip:border-box;border:1px solid #d9d9d9;border-width:1px 0 0 0;box-shadow:none;background-color:#f8f8f8}.native-scrollbar::-webkit-scrollbar-track:hover{background:none;box-shadow:none}.native-scrollbar::-webkit-scrollbar-track:horizontal:hover,.native-scrollbar::-webkit-scrollbar-track:vertical:hover{box-shadow:none;background-clip:border-box;border:1px solid #d9d9d9;border-width:1px 0 0 0;box-shadow:none;background-color:#f8f8f8}.native-scrollbar::-webkit-scrollbar-track:horizontal:hover{border-width:1px 0 0 0}.native-scrollbar::-webkit-scrollbar-track:vertical:hover{border-width:0 1px 0 1px}.native-scrollbar::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.2);background-clip:padding-box;border:solid transparent;min-height:28px;padding:none;box-shadow:none;border-width:1px 1px 1px 1px}.native-scrollbar::-webkit-scrollbar-thumb:horizontal{box-shadow:none;border-width:2px 1px 1px 1px}.native-scrollbar::-webkit-scrollbar-thumb:vertical{padding:1px 1px 1px 1px;box-shadow:none}.native-scrollbar-ltr::-webkit-scrollbar-thumb:vertical{border-width:1px 1px 1px 2px}.native-scrollbar-rtl::-webkit-scrollbar-thumb:vertical{border-width:1px 2px 1px 1px}.docs-gm .native-scrollbar::-webkit-scrollbar-thumb{background-color:#dadce0}.native-scrollbar::-webkit-scrollbar-thumb:hover{box-shadow:none}.native-scrollbar::-webkit-scrollbar-corner{border:1px solid #d9d9d9}.native-scrollbar-rtl::-webkit-scrollbar-corner{border-width:1px 1px 0 0}.native-scrollbar-ltr::-webkit-scrollbar-corner{border-width:1px 0 0 1px}.native-scrollbar-x{overflow-x:scroll;overflow-y:hidden;border:1px solid #d9d9d9;border-width:0 1px 0 0}.native-scrollbar-y{overflow-x:hidden;overflow-y:scroll;border:1px solid #d9d9d9;border-width:0 0 1px 0}.waffle-verbal-title{text-align:center}.waffle-verbal-wrapper{height:0;overflow:hidden;position:absolute;width:0}.waffle-verbal-highlights-container{background-color:white;border:1px solid #9e9e9e;border-left:4px solid #009e55;font-family:Roboto,Arial,sans-serif;font-size:13px;margin:3px -1px 0 -1px;min-width:400px;padding:20px 20px 15px 20px;white-space:normal}.waffle-verbal-highlights-icon{margin-right:4px}.waffle-verbal-highlights-header{color:#009e55;font-weight:500;margin-bottom:10px}.waffle-verbal-highlights-header-left{float:left}.waffle-verbal-highlights-title-icon{display:inline-block;padding-bottom:2px;padding-right:4px;margin-left:-2px}.waffle-verbal-highlights-title{display:inline-block;vertical-align:bottom}.waffle-verbal-highlights-close{float:right;opacity:0.46}.waffle-verbal-highlights-close.goog-flat-button{position:static;border:none;margin:-4px -4px 0 0;padding:0;background-color:transparent}.waffle-verbal-highlights-bullet{color:#515151;font-family:Roboto,Arial,sans-serif;font-size:13px;margin-top:10px;white-space:pre-wrap}.waffle-verbal-highlights-empty-notice{color:#9e9e9e;margin-bottom:25px;text-align:center}.waffle-verbal-highlights-pager{float:right}.waffle-verbal-highlights-viewall.goog-flat-button{color:#009e55;background-color:transparent;border:none;display:inline-block;float:left;font-family:Roboto,Arial,sans-serif;font-size:13px;padding:0}.waffle-verbal-highlights-previous.goog-flat-button,.waffle-verbal-highlights-next.goog-flat-button{color:#009e55;background-color:transparent;border:none;display:inline-block;font-family:Roboto,Arial,sans-serif;font-size:13px;padding:0}.waffle-verbal-highlights-previous.goog-flat-button-disabled,.waffle-verbal-highlights-next.goog-flat-button-disabled{color:#ccc}.waffle-verbal-highlights-counter{color:#9e9e9e;display:inline-block;font-family:Roboto,Arial,sans-serif;font-size:13px;text-align:center;width:70px}.waffle-verbal-highlights-floatclear{clear:both}.waffle-verbal-highlights-one-option-footer{margin:15px 0}.waffle-verbal-highlights-footer{margin:15px 0 0 0}.waffle-verbal-highlights-viewall-footer.goog-flat-button{background-color:transparent;border:none;margin:15px 0 0 -5px;padding:0}.waffle-verbal-highlights-viewall-back-label{color:#009e55;display:inline-block;font-family:Roboto,Arial,sans-serif;font-size:13px;margin-left:5px;vertical-align:middle}.waffle-overflow-menu-material{transition:opacity 250ms cubic-bezier(0.4,0.0,0.2,1);cursor:pointer;height:18px;opacity:0.54;width:18px}.waffle-overflow-menu-material::after{content:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgdmlld2JveD0iMCAwIDIwIDIwIiBoZWlnaHQ9IjIwIj48cGF0aCBkPSJtMTAgNmMxLjEgMCAyLTAuOSAyLTJzLTAuOS0yLTItMi0yIDAuOS0yIDIgMC45IDIgMiAyem0wIDJjLTEuMSAwLTIgMC45LTIgMnMwLjkgMiAyIDIgMi0wLjkgMi0yLTAuOS0yLTItMnptMCA2Yy0xLjEgMC0yIDAuOS0yIDJzMC45IDIgMiAyIDItMC45IDItMi0wLjktMi0yLTJ6Ii8+PC9zdmc+")}.waffle-overflow-menu-material.waffle-overflow-menu-material-white::after{content:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld2JveD0iMCAwIDIwIDIwIj48cGF0aCBkPSJNMTAgNmMxLjEgMCAyLTAuOSAyLTJzLTAuOS0yLTItMlM4IDIuOSA4IDQgOC45IDYgMTAgNnpNMTAgOGMtMS4xIDAtMiAwLjktMiAyczAuOSAyIDIgMiAyLTAuOSAyLTJTMTEuMSA4IDEwIDh6TTEwIDE0Yy0xLjEgMC0yIDAuOS0yIDJzMC45IDIgMiAyIDItMC45IDItMlMxMS4xIDE0IDEwIDE0eiIgZmlsbD0iI2ZmZiIvPjwvc3ZnPg==")}.waffle-overflow-menu-material:hover{opacity:0.70}.goog-modalpopup-bg,.modal-dialog-bg{z-index:1002}.goog-modalpopup,.modal-dialog{z-index:1003}.waffle-dialog-header{font-weight:500;font-size:14px;line-height:2.25em}.menuMainLink{border-style:none;border-width:0px;font-size:12px;color:#15c;text-decoration:underline;cursor:pointer;padding:2px 0 0 6px;vertical-align:middle}.dlgImportDisabled{color:#666}div.uploadBox{margin-top:8px}div.dlgImportClear{width:100%;height:1px;clear:both}div.dlgImportButterPane,div.dlgRitzImportButterPane{background-color:#ffd969;padding:8px;margin:8px -8px 0 -8px}span.dlgImportButterPane{padding-left:20px}span.dlgRitzImportButterPane{display:block;padding-top:10px}div.dlgImportHeader{font-weight:500;margin-top:10px}.dlgImportError{font-weight:500;color:red}span.waitSpinner{padding-left:5px}#dlgImportCustomOption{display:inline-block}div.dlgImport{width:730px;font-size:10pt;line-height:130%}div.dlgRitzImport{width:310px;font-size:10pt;line-height:130%}#customDelimiter{width:20px}.docs-gm #customDelimiter{width:40px}.dlgImport .jfk-radiobutton,.dlgRitzImport .jfk-radiobutton{display:block}.dlgImportPreview{background-color:#eee;height:300px;width:360px;border:1px solid #ccc;display:table-cell;text-align:center;vertical-align:middle;overflow:scroll}div.dlgImportPreviewMessage{color:gray}table.dlgImport{width:376px;border:0px;padding:0px}.waffle-alert-dialog-inner{width:376px;font-size:10pt}.pub-dialog-wrap{width:500px}.pub-dialog-txt{font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;font-weight:500}.pub-dialog-content-div{padding:0px 0px 10px 30px}.pub-dialog-checkbox-label{font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px}.pub-dialog-url-box{width:450px;font-family:monospace;padding:5px}.pub-dialog-input{width:220px}.pub-dialog-date-label{font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;color:#afafaf;padding:0px 0px 0px 3px}.pub-dialog-input-div{padding:0px 0px 6px 0px}.pub-dialog-helpertext{font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;color:#afafaf}.pub-dialog-hr{background-color:#bfbfbf;color:#bfbfbf;height:1px;width:96%}.pub-dialog-hr-div{padding:2px 0 2px 0}.pub-dialog-stjw-infotext-span{font-size:11px;padding-left:5px}.pub-dialog-link-options-document-part-menu-button,.pub-dialog-published-content-menu-button{margin-left:0;max-width:150px}.pub-dialog-link-options-document-part-menu-button-content,.pub-dialog-published-content-menu-button-content{overflow:hidden;text-overflow:ellipsis;width:100%}.pub-dialog-link-options-container,.pub-dialog-published-content-container{margin-top:20px}.pub-dialog-link-options-menu,.pub-dialog-published-content-menu{overflow:auto}.pub-dialog-link-options-chart-menu-item,.pub-dialog-published-content-chart-menu-item{max-width:340px;overflow:hidden;padding-left:15px;text-overflow:ellipsis}.pub-dialog-chart-notice{color:#999;font-size:11px;margin-top:5px}.pub-dialog-chart-notice-emphasis{color:#666;font-weight:500}.dialog-publishobject-div{border:1px solid #ccc;background-color:#efefef;font-family:inherit;font-size:12px;max-height:500px;overflow:auto;padding:15px;width:350px}.dialog-publishobject-msg{font-size:12px}.waffle-selection-dialog-content{overflow:auto;margin-right:-30px;max-height:400px;width:280px}.waffle-selection-dialog-editbox{margin:5px 0;width:200px}.docs-gm .waffle-selection-dialog-content{margin-right:0px;width:314px;overflow-y:overlay}.docs-gm .waffle-selection-dialog-editbox{width:260px}div>.waffle-selection-dialog-active-editbox,div>.waffle-flat-multi-range-active-editbox{border:1px solid #4d90fe;box-shadow:inset 0 1px 2px rgba(0,0,0,0.3)}.docs-gm .waffle-selection-dialog-active-editbox,.docs-gm .waffle-flat-multi-range-active-editbox{border:none;box-shadow:none}.waffle-selection-dialog-remove,.waffle-flat-multi-range-remove{display:inline;margin:0 5px 0 20px;color:#999;cursor:pointer}.docs-material .waffle-selection-dialog-remove,.docs-material .waffle-flat-multi-range-remove{margin:0 0 0 8px}.docs-material .waffle-selection-dialog-remove .docs-icon{width:24px;height:24px;margin:0px}.waffle-flat-multi-range-remove-table{display:inline-block}.waffle-selection-dialog-error{color:#212121;font-size:13px}.waffle-range-selection-container{background:#fff;border:1px solid #d9d9d9;border-top:1px solid #c0c0c0;min-width:20px;width:100%}.waffle-dv-trrules .waffle-range-selection-container{width:160px}.waffle-dv-recs-title-bar{font-size:13px;margin:25px 0 9px 3px}.waffle-dv-rec-wrapper{background-color:#eee;margin:0 -42px;min-height:42px;overflow:hidden;padding:5px 38px;position:relative;white-space:nowrap;width:570px}.waffle-dv-rec-description{color:#404040;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.waffle-dv-rec-range{color:#3b80f4;float:right;margin-left:6px}.waffle-dv-rec-chip{background-color:#fff;border:1px solid #e0e0e0;border-radius:8px;float:left;font-size:13px;font-weight:normal;height:auto;line-height:21px;margin:5px;max-width:241px;padding:3px 16px 5px}.waffle-dv-rec-chip.jfk-button-focused{box-shadow:none;border:1px solid rgba(0,0,0,.4)}.waffle-dv-rec-chip.jfk-button-hover{box-shadow:0 1px 2px rgba(0,0,0,.25)}.waffle-dv-rec-chip.waffle-dv-rec-chip-selected{box-shadow:0 2px 2px rgba(0,0,0,.2);border:1px solid #3b80f4}@media screen and (-ms-high-contrast:active){.waffle-dv-rec-chip.waffle-dv-rec-chip-selected{border:2px solid #3b80f4}}.waffle-dv-no-suggestions{color:#757575;font-style:italic;padding-left:10px;position:absolute;top:50%;transform:translateY(-50%)}.waffle-dv-rec-spinner-container{height:100%;text-align:center}.waffle-dv-rec-spinner-container .waffle-spinner{top:7px}.waffle-dv-table-with-suggestions{padding-top:10px}.waffle-dv-feedback-link{float:right;font-family:'Google Sans',Roboto,RobotoDraft,Helvetica,Arial,sans-serif;text-decoration:none;text-transform:uppercase}.waffle-range-selection-error{border:1px solid #dd4b39}.input-selection-button-div{margin-top:-1px;margin-left:4px}.waffle-flat-range-select-done{margin-top:3px}.waffle-flat-multi-range-row .waffle-range-selection-holder{width:168px;display:inline-block}.waffle-flat-multi-range-select-done{margin-top:10px}.waffle-flat-range-select-message,.waffle-flat-multi-range-select-message{display:none;margin-top:3px;width:110px}.waffle-flat-range-select-listening .waffle-flat-range-select-message,.waffle-flat-multi-range-select-listening .waffle-flat-multi-range-select-message{display:inline-block}.waffle-flat-range-select-listening,.waffle-flat-multi-range-select-listening{background-color:#fbf2cd;margin:0 -20px 0;padding:10px 20px}.waffle-flat-multi-range-add-another{display:block}.waffle-notification-listrule-container{padding:5px}.waffle-notification-rule-row{display:inline-block;margin-bottom:10px;width:100%}.waffle-notification-rule-text{font-size:10pt}.waffle-notification-rule-description{float:left}.waffle-notification-rulerow-buttons-container{float:right}.waffle-notification-rulerow-edit-container{float:left}.waffle-notification-rulerow-delete-container{float:right}.waffle-notification-rule-disabled{font-size:8pt;color:lightgray!important}.waffle-dialog-notifications-bounds{width:512px;height:250px;border:1px solid #999;overflow:auto;vertical-align:top;padding:0 0 0 4px;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.waffle-dialog-notifications-list{width:100%;vertical-align:top}.waffle-dialog-notifications{width:100%;padding:6px 8px 8px 2px;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;vertical-align:top}.waffle-dialog-notifications-label{font-weight:500}.waffle-dialog-notifications-gap{padding-left:25px}.waffle-dialog-notifications-toplabel{font-weight:500}.waffle-dialog-notifications-input{vertical-align:top;padding-left:25px}.waffle-dialog-notifications-input .disabled{color:lightgray!important}.waffle-dialog-notifications-label .disabled{color:lightgray!important}.waffle-dialog-notifications-text{vertical-align:top;padding-left:20px;color:#676767;font-size:8pt;width:150px}.waffle-notifications-add{font-weight:500;display:block}.waffle-notification-rule-area-separator{padding:5px}.waffle-notification-addbutton-container{align-self:flex-end;border:none}.docs-gm .waffle-notification-listrule-container{padding:0px!important}.docs-gm .waffle-dialog-notifications-bounds{border-color:#dadce0;border-radius:8px;max-width:672px;min-width:464px;padding:10px;width:auto;width:unset}.docs-gm .waffle-notification-buttons-container{text-align:right}.docs-gm .waffle-notification-addbutton-container{padding-bottom:6px}.docs-gm .waffle-notifications-dialog .goog-link-button{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:white;color:#188038;height:24px;padding:3px 12px 5px;text-decoration:none}.docs-gm .waffle-dialog-notifications-input{padding-left:0px}.docs-gm .waffle-notifications-dialog .jfk-radiobutton{left:-7px}.docs-gm .waffle-dialog-notifications-toplabel{padding-bottom:5px}.docs-gm .waffle-dialog-notifications-label{padding-bottom:5px}.docs-gm .waffle-notifications-dialog .modal-dialog-buttons{justify-content:space-between}.docs-gm .waffle-notifications-dialog .waffle-notification-addbutton-container .goog-link-button{padding-left:0px}.docs-gm .waffle-notification-rule-separator{border-bottom:1px solid #dadce0;clear:both;padding-top:10px}.docs-gm .waffle-notification-helpbutton-container{float:right;margin-right:34px}.docs-gm .waffle-notification-helpbutton-container .goog-link-button{color:#1a73e8}.docs-gm .waffle-notification-bottom-group{padding-bottom:2px}.docs-gm .waffle-notification-end-button{margin-right:0}.sketchy-dialog,.sketchy-dialog-fg{z-index:1003}.waffle-find-replace-dialog-label{padding-right:8px}.waffle-find-replace-find-scope-select{margin:0 5px 0 0}.waffle-findandreplacedialog-checkbox{display:inline-block}.waffle-findandreplacedialog-checkbox-label{vertical-align:middle}.waffle-find-replace-selection-input{vertical-align:top;width:172px}.waffle-find-replace-dialog-border{border-color:#8cc474;border-style:solid;line-height:0}.waffle-find-replace-dialog-display-message{display:inline-block;max-width:512px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.docs-gm .waffle-findandreplacedialog-checkbox-label{vertical-align:bottom;padding-left:8px}.docs-gm .waffle-find-replace-find-scope-select{margin-top:8px;margin-right:8px;margin-bottom:8px;width:126px}.docs-gm .waffle-find-replace-selection-input{margin-top:8px;width:150px}.docs-gm .waffle-find-replace-dialog{min-width:464px}.docs-gm .waffle-find-replace-dialog .modal-dialog-buttons{margin-top:7px}.waffle-find-replace-dialog .find-replace-regex-help{display:inline-block;font:14px Roboto,RobotoDraft,Helvetica,Arial,sans-serif;line-height:16px;margin-left:8px;vertical-align:middle;width:auto}.waffle-dv-trrules .waffle-range-selection-container{width:160px}.waffle-dv-table{border-spacing:3px;width:562px}.waffle-dv-table .jfk-checkbox{margin-bottom:1px;margin-left:7px}.waffle-dv-table td{white-space:nowrap}.waffle-dv-helptext{width:310px;margin-left:5px}.waffle-dv-errortext{color:red;font-weight:500}.waffle-dv-smalltext{font-size:10px}.waffle-dv-checkbox-label{cursor:default}.docs-gm .waffle-dv-checkbox-label{vertical-align:bottom}.waffle-dv-editbox-number{text-align:right;width:60px}.waffle-dv-editbox-text{width:150px}.waffle-dv-editbox-date{text-align:right;width:100px}.waffle-dv-list-options-textarea{padding-top:5px;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;-webkit-appearance:textfield;width:180px}.waffle-dv-table .jfk-select{float:left;margin-right:10px}.waffle-dv-trrules{height:41px}.waffle-dv-trrules-appearance,.waffle-dv-trrules-showitems{height:26px}.waffle-dv-trrules>td,.waffle-table-dialog-trrules>td{padding-bottom:7px;vertical-align:top}.waffle-dv-trrules>td .input-selection,.waffle-table-dialog-trrules>td .input-selection{margin-left:2px}.waffle-cf-tr-rules .jfk-checkbox{margin-bottom:1px}.waffle-dv-show-dropdown{padding-top:5px;padding-bottom:1px}.waffle-dv-customcheckboxlabel{width:80px;padding-top:11px}.waffle-dv-label{padding-top:5px;padding-left:2px;width:96px;white-space:nowrap}.waffle-dv-label-disabled{color:#d3d3d3}.waffle-dv-separator{margin-left:5px;margin-right:5px}.waffle-dv-highlight-styled-rect{background-color:#0f9d58;opacity:0.06;pointer-events:none}.range-border.waffle-dv-highlight-styled-border{border-color:#0f9d58;border-style:dashed}.waffle-sd-tr-rules{padding-top:7px}.waffle-sd-td-rules{white-space:nowrap;width:50px}.waffle-sd-td-ascending{white-space:nowrap}.waffle-sd-column-selector{width:120px}.waffle-sd-delete{color:#999;cursor:pointer;margin-right:5px;width:10px;text-decoration:none}.waffle-sd-row-separator{border-bottom:1px solid #c1d9ff;margin-bottom:4px;margin-top:4px}.docs-gm .waffle-sd-row-separator{border-bottom:1px solid #dadce0}.waffle-sd-add{padding-top:12px;font-weight:500;display:block}.waffle-sd-menu-item{padding-right:30px}.script-gui-dialog-content{padding:0px}.waffle-custom-decimals-error-div{padding-left:.7em;color:#dd4b39}textarea.waffle-input-error:focus,input.waffle-input-error:focus,.waffle-input-error{border:1px solid #dd4b39}.waffle-input-error-butter-container{width:100%;position:absolute;margin-top:-25px;left:0;text-align:center}.waffle-input-error-butter-wrap{display:inline-block;line-height:normal}.dialog-settings-text{max-width:300px;padding-left:25px}.dialog-settings-sep-td{padding:5px 0 5px 0}.docs-gm .dialog-settings-sep-td{padding:14px 0 9px 0}.docs-gm .dialog-settings-sep{border-top-color:#e8eaed}.docs-gm .jfk-radiobutton-radio::after{background:#188038;border:4px solid #188038;height:8px;left:0;margin:2px;top:0;width:8px}.docs-gm .jfk-radiobutton-radio{height:16px;width:16px}.docs-gm .jfk-radiobutton-checked .jfk-radiobutton-radio{border:2px solid #188038}.docs-gm .jfk-radiobutton-focused .jfk-radiobutton-radio{border:2px solid #188038}.docs-gm .jfk-radiobutton-checked.jfk-radiobutton-focused .jfk-radiobutton-radio{border:2px solid #0d652d}.docs-gm .jfk-radiobutton-checked.jfk-radiobutton-focused .jfk-radiobutton-radio::after{background-color:#0d652d;border:4px solid #0d652d}.dialog-settings-sep{border-top-color:#e1e1e1;border-top-style:solid;border-width:1px 0 0 0;color:#bfbfbf;height:0}.dialog-settings-general-settings-div{padding:10px 0 18px 0}.dialog-settings-english-name-div{padding-top:10px}#waffle-settings-dialog-english-name-checkbox-label{padding-left:3px}.waffle-prompt-dialog{width:340px}.waffle-prompt-dialog .modal-dialog-userInput{width:300px;margin:4px}.waffle-spellcheck-cell-display{font-weight:500}.waffle-resize-option{margin:7px}.waffle-resize-inset-input{margin-left:30px}.waffle-resize-row-input-container{margin-left:30px}.waffle-resize-row-input{width:70px}.waffle-resize-row-input-label{margin-left:10px}#waffle-resize-input-error-butter-container{margin-top:-15px}.waffle-confirm-suppress-checkbox{margin-top:15px}.waffle-slidingdialogbar-wrapper{outline:none;overflow:hidden;width:100%}.waffle-pivot-histogram-errorable-input{display:inline-block;margin:4px;vertical-align:top;width:120px}.waffle-pivot-histogram-dialog-caption{color:rgba(0,0,0,0.54);font-size:11px;padding-top:3px}.waffle-pivot-histogram-dialog-error{color:#db4437;height:15px;margin-top:6px}.waffle-rd-section{padding:8px 0}.waffle-rd-section-title{font-weight:500}.waffle-rd-columns-container{max-height:300px;overflow-x:hidden;overflow-y:auto;padding-top:6px}.waffle-rd-expand-to-range{color:#188038;cursor:pointer;padding-top:2px;text-decoration:underline}.docs-gm .waffle-rd-dialog-gm{min-width:312px}.waffle-rd-ignore-headers{padding-top:6px}.waffle-rd-ignore-headers .docs-material-gm-labeled-checkbox,.waffle-rd-columns-checkbox .docs-material-gm-labeled-checkbox{padding:6px 0}.waffle-rd-columns-checkbox .docs-material-gm-labeled-checkbox .docs-material-gm-labeled-checkbox-circle{position:relative}.waffle-rd-columns-checkbox .docs-material-gm-labeled-checkbox .docs-material-gm-labeled-checkbox-content{margin-left:30px}.waffle-rd-checkbox-label{display:inline-block;padding-left:5px}.docs-gm .waffle-sort-dialog-gm{min-width:464px}.waffle-sort-dialog-radio-option{display:inline-block;padding-left:8px}.docs-gm .waffle-sd-delete .docs-icon{width:24px;height:24px;margin:0 4px 0 0}.docs-gm .waffle-sd-row-separator{margin-top:16px;margin-bottom:16px}.waffle-sort-dialog-data-header{overflow:hidden}.docs-gm .waffle-sort-dialog-data-header{margin-bottom:25px}.waffle-sort-dialog-data-header .docs-material-gm-labeled-checkbox{padding:0}.docs-gm .docs-dialog .modal-dialog-title-close{top:-1px}.docs-gm .docs-dialog .goog-flat-menu-button{padding-top:7px;padding-bottom:7px}.importThemeLabel{padding:0px 3px}.importThemeOption{padding:5px 7px}.importThemeWarningMessage{color:#9e9e9e;padding:0px 25px}.waffle-dialog-range-suggestion-pill{display:flex;border-radius:20px;cursor:pointer;padding:10px;width:240px}.waffle-dialog-range-suggestion-pill:hover{background:lightgray}.waffle-dialog-range-suggestion-pill-icon{margin-right:9px;min-width:21px}.waffle-dialog-range-suggestion-pill-sheet-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.waffle-dialog-range-suggestion-section{margin-top:24px}.waffle-dialog-range-suggestion-section-header{color:#3c4043;font-family:GoogleSans-Medium,QUANTUM_FONT_FAMILY;font-size:14px;letter-spacing:0.25px;line-height:20px}.goog-palette-cell-selected .goog-palette-colorswatch{background:url("//ssl.gstatic.com/docs/spreadsheets/MainMenuVerSprite007.png") transparent no-repeat;background-position:0px -15px}.goog-palette-cell{border:1px #666 solid}.trix-palette .toolbar-icon,.trix-palette .docs-common-icon{margin:3px 5px 4px 2px}.trix-palette .goog-palette-cell{border:0}.trix-palette .goog-palette-table{margin:0 4px;border:0}.docs-gm .trix-palette .goog-palette-table{border-spacing:2px;border-collapse:separate}.trix-palette .goog-palette-cell-hover{background:#eee}.docs-gm .trix-palette .toolbar-icon,.docs-gm .trix-palette .docs-common-icon{margin:0}.docs-toolbar-menu-button .goog-toolbar-menu-button-caption{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.docs-toolbar-menu-button .goog-toolbar-menu-button-icon{margin-left:3px;margin-right:6px;opacity:1}.docs-toolbar-menu-button .goog-toolbar-menu-button-inner-box{text-align:left}.docs-bgcolor-toolbar-menu-button{color:#fff!important;border:1px solid rgba(0,0,0,0.09)!important;background-image:none;overflow:hidden}.docs-bgcolor-toolbar-menu-button .goog-toolbar-menu-button-outer-box{z-index:1}.docs-bgcolor-toolbar-menu-button:after{content:"";position:absolute;top:0;left:0;width:100%;height:100%;background-image:linear-gradient(rgba(0,0,0,0),rgba(0,0,0,0.08))}.docs-bgcolor-toolbar-menu-button.goog-toolbar-menu-button-hover:hover{border:1px solid rgba(0,0,0,0.18)!important}.docs-bgcolor-toolbar-menu-button.goog-toolbar-menu-button-hover:hover:after{background-image:linear-gradient(rgba(0,0,0,0),rgba(0,0,0,0.12))}.docs-bgcolor-toolbar-menu-button.goog-toolbar-menu-button-hover:not(:hover){-webkit-box-shadow:inset 0 0 0 1px #fff;-moz-box-shadow:inset 0 0 0 1px #fff;box-shadow:inset 0 0 0 1px #fff;border:1px solid #fff;border:rgba(0,0,0,0) solid 1px;outline:1px solid #4d90fe;outline:rgba(0,0,0,0) 0}.docs-bgcolor-toolbar-menu-button .goog-toolbar-menu-button-dropdown{background:no-repeat url(//ssl.gstatic.com/docs/common/jfk_sprite186.png) 0 -1581px;height:12px;width:6px;margin-top:2px}#docs-access-level-indicator.docs-acl-indicator-visual-update.goog-flat-menu-button{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;cursor:pointer;height:24px;line-height:20px;margin:6px 0 6px 8px;padding:0 1px;user-select:none}#docs-access-level-indicator.docs-acl-indicator-visual-update.goog-flat-menu-button-hover{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;background:#2a8947;box-shadow:0 1px 3px 1px rgba(52,168,83,0.15);cursor:pointer;height:24px;line-height:20px;margin:6px 0 6px 8px;padding:0 1px;user-select:none}#docs-access-level-indicator.docs-acl-indicator-visual-update.goog-flat-menu-button-focused{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;background:#4f9e67;box-shadow:0 1px 3px 1px rgba(52,168,83,0.15);cursor:pointer;height:24px;line-height:20px;margin:6px 0 6px 8px;padding:0 1px;user-select:none}#docs-access-level-indicator.docs-acl-indicator-visual-update.goog-flat-menu-button-hover.goog-flat-menu-button-focused{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;background:#62a877;box-shadow:0 1px 3px 1px rgba(52,168,83,0.15);cursor:pointer;height:24px;line-height:20px;margin:6px 0 6px 8px;padding:0 1px;user-select:none}#docs-access-level-indicator.docs-acl-indicator-visual-update.goog-flat-menu-button-disabled{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;cursor:pointer;height:24px;line-height:20px;margin:6px 0 6px 8px;padding:0 1px;user-select:none;cursor:default;opacity:.38}#docs-access-level-indicator.docs-acl-indicator-visual-update.goog-flat-menu-button-pressed,#docs-access-level-indicator.docs-acl-indicator-visual-update.goog-flat-menu-button:active,#docs-access-level-indicator.docs-acl-indicator-visual-update.goog-flat-menu-button-open,#docs-access-level-indicator.docs-acl-indicator-visual-update.goog-flat-menu-button-hover.goog-flat-menu-button-open,#docs-access-level-indicator.docs-acl-indicator-visual-update.goog-flat-menu-button-focused.goog-flat-menu-button-open{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#188038;color:#fff;background:#62a877;box-shadow:0 2px 6px 2px rgba(52,168,83,0.15);cursor:pointer;height:24px;line-height:20px;margin:6px 0 6px 8px;padding:0 1px;user-select:none}#docs-access-level-indicator.docs-acl-indicator-visual-update .docs-access-level-indicator-icon-container{margin:2px 4px 4px 6px}#docs-access-level-indicator.docs-acl-indicator-visual-update .goog-flat-menu-button-caption{margin-right:20px;font-size:12px;font-weight:500;line-height:21px}#docs-access-level-indicator.docs-acl-indicator-visual-update .goog-flat-menu-button-dropdown{border-bottom-color:#fff;border-top-color:#fff;right:7px;top:10px}#docs-access-level-indicator{margin-left:12px}.docs-access-level-indicator-view{background-color:#4d90fe}.docs-access-level-indicator-comment{background-color:#1aa863}.docs-access-level-indicator-view .goog-toolbar-menu-button-caption,.docs-access-level-indicator-comment .goog-toolbar-menu-button-caption{min-width:93px}.goog-toolbar .docs-access-level-indicator-locked{color:#757575}.docs-access-level-indicator-locked .goog-toolbar-menu-button-caption{min-width:unset}.docs-access-level-indicator-locked .goog-toolbar-menu-button-outer-box{background-color:#ffffff}.docs-access-level-indicator-locked .goog-toolbar-menu-button-dropdown{height:12px;margin-left:10px;margin-top:6px;width:6px}.docs-access-level-indicator-no-icon-label{margin-left:9px}.docs-access-level-indicator-menu.docs-acl-indicator-visual-update{border-radius:8px;max-width:272px;padding:22px 24px 24px 24px}.docs-access-level-indicator-menu.docs-acl-indicator-visual-update .docs-access-level-indicator-menu-text{padding:0;font-size:14px;color:#3c4043}.docs-access-level-indicator-menu.docs-acl-indicator-visual-update .docs-access-level-indicator-request-access-button{height:24px;margin:16px 0 0 0;padding:4px 12px;text-transform:none}.docs-access-level-indicator-menu-text{color:rgba(0,0,0,.67);font-size:13px;line-height:20px;padding:10px 20px 7px;width:196px}.docs-access-level-indicator-button-area{text-align:left;padding:6px 20px 6px 13px}.docs-access-level-indicator-request-access-button.jfk-button{cursor:pointer;border-radius:2px;font-size:12px;font-weight:500;padding:6px 6px 5px;text-transform:uppercase}.docs-access-level-indicator-request-access-button-locked,.docs-access-level-indicator-request-access-button-view{color:#4285f4}.docs-access-level-indicator-request-access-button-comment{color:#0f9d58}.docs-access-level-indicator-request-access-button.jfk-button-disabled{cursor:default}.docs-access-level-indicator-request-access-button.jfk-button-hover,.docs-access-level-indicator-request-access-button:focus{background-color:rgba(153,153,153,.2)}.docs-access-level-indicator-request-access-button.jfk-button-selected,.docs-access-level-indicator-request-access-button.jfk-button-active{background-color:rgba(153,153,153,.4)}#docs-approvals-status-indicator-toolbar-separator{margin-right:0px}.docs-gm #docs-primary-toolbars #docs-approvals-locked-menu-button.goog-toolbar-menu-button{cursor:pointer;height:24px;line-height:24px;margin:6px 0 6px 4px;padding:0 4px;user-select:none}#docs-approvals-locked-menu-button .goog-toolbar-menu-button-dropdown{margin-left:2px}.docs-gm #docs-primary-toolbars .docs-approval-status-indicator{cursor:pointer;color:#188038;font-size:14px;font-weight:500;height:26px;letter-spacing:.25px;margin:5px 0px 5px 4px;min-width:unset;padding:0px 12px 0px 9px;user-select:none}.docs-gm #docs-primary-toolbars .docs-approval-status-indicator .docs-icon-img{content:url(//ssl.gstatic.com/docs/common/material_common_sprite146_green.svg);cursor:default;margin:-1px 2px 4px 0px}.docs-approval-status-indicator-text{line-height:23px}.docs-icon-inputtools-button-inner{margin:2px 0}.docs-icon-inputtools-menuitem-inner{margin:1px 0;opacity:.70}.docs-icon.docs-icon-inputtools-menuitem-outter,.docs-material .docs-icon.docs-icon-inputtools-menuitem-outter{margin:0 10px 0 12px}.docs-material .docs-icon.docs-icon-inputtools-menuitem-outter,.docs-material #inputToolsToggleButton .docs-icon{width:21px;height:21px}@media print{.docs-ui-unprintable{display:none!important}}.docs-fontmenu-icon{left:16px}.docs-fontmenu-text{padding-left:23px}.docs-fontmenu-newlyadded{background-color:#fffecc}.goog-menuitem-highlight.docs-menuitem-add-fonts{border:none;padding-top:6px;padding-bottom:6px}.goog-menuitem-highlight.docs-fontmenu-newlyadded,.goog-menuitem-hover.docs-fontmenu-newlyadded{background-color:#eee}#docs-font-family .goog-toolbar-menu-button-caption{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:70px}.docs-fontmenu .docs-submenuitem{border:none;height:18px;padding:6px 8em 6px 30px}.docs-fontmenu .docs-submenuitem-splitbutton{height:28px;line-height:28px}.docs-fontmenu .docs-submenuitem .goog-menuitem-content{height:17px;line-height:normal}.docs-fontmenu .docs-submenuitem .goog-menuitem-checkbox{height:21px;top:3px}.docs-fontmenu .docs-submenuitem::before{content:'\0025ba';position:absolute;right:0;color:#6e6e6e;width:34px;text-align:center;font-size:70%;line-height:30px;top:0}body[dir="rtl"] .docs-fontmenu .docs-submenuitem::before{content:'\0025c4'}.docs-fontmenu .docs-halfhovermenuitem .goog-submenu-arrow{display:none}#contain-402{bottom:10px;position:fixed;right:50px;z-index:1002}.sketchy-dialog.modal-dialog{padding:0}.sketchy-dialog .modal-dialog-title{margin:24px 44px 14px 44px;position:relative}.docs-gm .sketchy-dialog .modal-dialog-title{margin:24px}.sketchy-dialog-title-close{margin-right:0;position:absolute;right:0;top:-8px}.docs-gm .sketchy-dialog-title-close{top:-5px}.sketchy-dialog-title-autosave{color:#999;font-weight:normal;font-size:12px;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;margin-left:24px}.docs-gm .sketchy-dialog-title-autosave{color:#80868b}.waffle-comment-anchor{width:240px}.docs-gm .waffle-comment-anchor{width:282px}.docos-mole{bottom:28px}.waffle-docos-target-cell-border{border-color:#f4b400}.waffle-docos-target-cell-rect{background-color:#ffe168;opacity:.5;pointer-events:none}.waffle-docos-target-cell-resolved-rect{background-color:#d9d9d9;opacity:.5;pointer-events:none}th.waffle-docos-target-cell-header{background-color:#fcfac6}.waffle-objwrap-gvizchart{background-color:white;height:100%;z-index:18}.waffle-embedded-object-overlay{outline:0;position:absolute;z-index:10}.waffle-obj-menu-open{background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -763px -13px;border:none;color:#15c;float:right;height:13px;margin:10px;padding:0;text-decoration:none;width:13px}.waffle-obj-menu-open-active,.waffle-obj-menu-open:hover{background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -618px -27px}.waffle-obj-message-div{padding:15px 0 15px 15px;font-size:12pt}.waffle-borderless-embedded-object-overlay{border:1px solid #999;margin:0;outline:none;position:absolute;z-index:10;user-select:none;pointer-events:all}.waffle-borderless-embedded-object-container{position:relative}.waffle-borderless-embedded-object-container .waffle-objwrap-gvizchart{background-color:transparent;z-index:15}.waffle-obj-control{position:absolute;z-index:18}.waffle-obj-glasspane-control.waffle-obj-control{z-index:17}.waffle-obj-glasspane-control{left:0;position:absolute;top:0}.waffle-obj-gviz-control{border:1px solid #999;position:absolute;right:-48px;top:-1px}.waffle-obj-drag-component{position:absolute;border:none;background-color:#0096fd}.waffle-selectionbox-background{display:none}.docs-charts-tooltip{z-index:3}.waffle-charts-alert{box-shadow:0px 2px 2px 0px rgba(0,0,0,0.14),0px 3px 1px -2px rgba(0,0,0,0.12),0px 1px 5px 0px rgba(0,0,0,0.2);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;background:rgba(0,0,0,0.87);border-radius:2px;bottom:0;line-height:16px;margin:4px;max-height:93%;max-width:99%;padding:10px 14px;position:absolute;white-space:nowrap;z-index:1000}.waffle-charts-alert-text{color:#fff;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;white-space:normal}.waffle-charts-alert-link-div{float:right;padding-left:35px}a.waffle-charts-alert-link{transition:opacity 250ms cubic-bezier(0.4,0.0,0.2,1);color:#a1c2fa;cursor:pointer;text-decoration:none;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;opacity:0.87;text-transform:uppercase}a.waffle-charts-alert-link:hover{opacity:1}a.waffle-charts-alert-link-close{color:white;margin-left:15px}.waffle-charts-overflow-legend{background-color:#ffffff;border:1px solid #999;position:absolute}.waffle-charts-overflow-legend-scrollbar{position:absolute;top:0;width:10px}.waffle-obj-menu-control{right:5px;top:5px}.waffle-obj-menu-button{background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -763px -13px;cursor:pointer;height:13px;width:13px}.waffle-obj-menu-button.waffle-obj-menu-control-active,.waffle-obj-menu-button:hover{background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -618px -27px}.waffle-obj-menu-control-material{right:6px;top:6px}.waffle-obj-menu-control-table-chart{right:20px}.waffle-chart-filter-indicator-control{right:6px;top:6px}.waffle-borderless-embedded-object-overlay-focused .waffle-chart-filter-indicator-control{right:24px}.waffle-chart-filter-indicator-control-table-chart{right:20px}.waffle-borderless-embedded-object-overlay-focused .waffle-chart-filter-indicator-control-table-chart{right:38px}.waffle-objwrap-gvizchart div[id^='google-visualization-errors-all-']{background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSIjRTBFMEUwIj48cGF0aCBkPSJNOSAxN0g3di03aDJ2N3ptNCAwaC0yVjdoMnYxMHptNCAwaC0ydi00aDJ2NHptMi41IDJoLTE1VjVoMTV2MTR6bTAtMTZoLTE1Yy0xIDAtMiAxLTIgMnYxNGMwIDEgMSAyIDIgMmgxNWMxIDAgMi0xIDItMlY1YzAtMS0xLTItMi0yeiIvPjxwYXRoIGZpbGw9Im5vbmUiIGQ9Ik0wIDBoMjR2MjRIMHoiLz48L3N2Zz4="),url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgNjAwIDM3MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMCAxdjFoNjAwVjF6bTAgOTB2MWg2MDB2LTF6bTAgOTF2MWg2MDB2LTF6bTAgOTF2MWg2MDB2LTF6IiBmaWxsPSIjZWVlIi8+PHBhdGggZD0iTTAgMzY2djJoNjAwdi0yeiIgZmlsbD0iI2NmY2ZjZiIvPjwvc3ZnPgo=");background-position:center,0 0;background-repeat:no-repeat,repeat-x;background-size:100px 100px,auto 100%;height:100%;width:100%;white-space:normal}.waffle-objwrap-gvizchart div[id^='google-visualization-errors-all-']>div{font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif!important;font-size:14px!important;padding-top:15px;text-align:center}.waffle-objwrap-gvizchart div[id^='google-visualization-errors-all-']>div>span{background-color:transparent!important;color:#db4437!important;display:block}.waffle-objwrap-gvizchart div[id^='google-visualization-errors-all-']>div>span:before{background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+PHBhdGggZmlsbD0iI0RCNDQzNyIgZD0iTTggMEMzLjYgMCAwIDMuNiAwIDhzMy42IDggOCA4IDgtMy42IDgtOC0zLjYtOC04LTh6bS44IDEySDcuMnYtMS42aDEuNlYxMnptMC0zLjJINy4yVjRoMS42djQuOHoiLz48L3N2Zz4K");background-position:0 0;background-repeat:no-repeat;background-size:16px 16px;content:'';display:inline-block;height:16px;margin-right:10px;vertical-align:sub;width:16px}div.ac-datavalidation-renderer{z-index:1001;overflow:auto;box-shadow:1px 2px 5px rgba(0,0,0,0.4)}div.ac-datavalidation-renderer-upside-down{z-index:1001;overflow:auto;box-shadow:1px 0 5px rgba(0,0,0,0.4)}.waffle-ac-renderer{margin:0px 0px;padding:0;z-index:85;overflow:visible;position:absolute;white-space:nowrap;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:12px;font-weight:normal;line-height:22px;border:1px solid rgba(0,0,0,0.2);background:#fff;box-shadow:0 2px 4px rgba(0,0,0,.2)}.waffle-ac-row{margin:0;cursor:pointer;padding:2px 10px;color:#666666}.waffle-ac-active{background:#f5f5f5;color:#000;border-top:1px solid #ebebeb;border-bottom:1px solid #ebebeb;padding:1px 10px}.waffle-ac-highlighted{font-weight:500}#docs-chrome{zoom:1}.docs-toolbar .goog-menuitem-highlight{background-color:#e0edfe}.ie8 .goog-toolbar-button-disabled .toolbar-icon,.ie8 .goog-toolbar-button-disabled .docs-icon-img,.ie8 .goog-toolbar-button-disabled .goog-toolbar-button-inner-box,.ie8 .goog-toolbar-menu-button-disabled .toolbar-icon,.ie8 .goog-toolbar-menu-button-disabled .docs-icon-img,.ie8 .goog-toolbar-menu-button-disabled .goog-toolbar-menu-button-caption,.ie8 .goog-toolbar-menu-button-disabled .goog-color-menu-button-indicator,.ie8 .goog-toolbar-menu-button-disabled .goog-toolbar-menu-button-dropdown{filter:alpha(opacity=30)}.close-icon-small{width:12px;background-position:-720px 2px}.docs-icon.goog-menuitem-icon{position:absolute}.goog-clipboard{width:16px}#chart-toolbar-container{width:100%}.chart-toolbar-container-with-omnibox{display:inline-block}#chart-toolbar{border:none;padding:0 30px 0 0;position:absolute;right:0;top:0}#datasheet-toolbar{background:none;border-width:0!important;display:inline;min-height:35px;padding:0}.chart-toolbar-with-omnibox#chart-toolbar{right:40px}.docs-material .chart-toolbar-with-omnibox{background:none}#chart-toolbar-title{padding-top:3px}.chart-toolbar-title-with-omnibox{display:inline-block;vertical-align:middle}#chart-toolbar-title.sheet-toolbar-title{line-height:normal}.sheet-toolbar{min-height:22px}.object-toolbar-secondary{margin-right:13px!important}.sheet-toolbar-title{font-weight:500;vertical-align:middle;line-height:20px;padding:0 6px 0 4px}.goog-color-menu-button-indicator{border-bottom:4px solid #f0f0f0}#num-fmt-currency{margin-top:-250px}#num-fmt-date{margin-top:-100px}.num-fmt{clear:both;height:1em;width:180px}.num-fmt b{display:block;font-weight:normal;float:left}.num-fmt span{display:block;float:right;color:#666;font-size:85%}.currency-fmt{width:120px;font-size:92%;height:0.9em}.date-fmt{width:140px;font-size:92%;height:0.9em}.cond-fmt .goog-color-menu-button-indicator{border-bottom-style:double}#formula-bar{padding:4px 0;background:#e5e5e5;margin-right:auto}#formula-bar table{width:100%;border-spacing:0}#t-formula-bar-label{vertical-align:middle;color:#444;padding:0 8px}#t-formula-bar-label.waffle-formulabar-label-disabled{color:#9fa4b3}#t-formula-bar-input-container{width:100%;padding:0}#t-formula-bar-input{resize:none;border:1px #7f9db9 solid;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;background-color:#ffffff}#t-formula-bar-input.waffle-formulabar-input-disabled{background-color:#eee;border-color:#c0c0c0}#t-formula-bar-input .cell-input{word-wrap:break-word;-webkit-nbsp-mode:space;-webkit-line-break:after-white-space}.ie8 .goog-toolbar-button-disabled .toolbar-icon,.ie8 .goog-toolbar-button-disabled .docs-icon-img,.ie8 .goog-toolbar-button-disabled .goog-toolbar-button-inner-box,.ie8 .goog-toolbar-menu-button-disabled .toolbar-icon,.ie8 .goog-toolbar-menu-button-disabled .docs-icon-img,.ie8 .goog-toolbar-menu-button-disabled .goog-toolbar-menu-button-caption,.ie8 .goog-toolbar-menu-button-disabled .goog-color-menu-button-indicator,.ie8 .goog-toolbar-menu-button-disabled .goog-toolbar-menu-button-dropdown{filter:alpha(opacity=30)}.docs-toolbar-small-separator+div.goog-toolbar-select{margin-left:-4px}#t-text-rotation-palette .goog-palette-table{border-right:1px solid #eee}.docs-gm #t-text-rotation-palette .goog-palette-table{border-right:1px solid #dadce0}body:not(.docs-gm) #t-text-rotation-palette .goog-palette-cell-selected,.waffle-combobox-menuitem-selected{background-color:#e1e1e1}.waffle-text-rotation-combobox{border-color:transparent}body:not(.docs-gm) .waffle-text-rotation-combobox{margin-top:-3px!important}.docs-gm .goog-toolbar-combo-button.waffle-text-rotation-combobox{margin:1px}.waffle-text-rotation-combobox.goog-toolbar-combo-button-hover{background:transparent}.docs-material .waffle-text-rotation-combobox.goog-toolbar-combo-button-hover{background:rgba(0,0,0,.06)}.waffle-text-rotation-combobox .goog-toolbar-combo-button-input{height:28px;width:25px}.waffle-revisions-frame{border-style:none}.waffle-revisions-older-text{color:#676767}.waffle-revisions-container{background-color:#fff;z-index:15;overflow:hidden;position:absolute;left:0}#revisions-toolbar{padding:2px 0}#t-revisions-back{margin-left:6px}#t-revisions-revert,#t-revisions-label{margin:0 8px;font-weight:500}#t-revisions-label{line-height:180%}#t-revisions-highlighted-label{position:absolute;right:6px;top:0;line-height:217%}#t-revisions-highlighted{border:2px solid #ffa82d;background-color:#ffd396;padding:2px}#t-revisions-menu{overflow-y:auto;max-height:75%;width:290px}#t-revisions-menu .goog-menuitem{padding:4px 0px;width:268px;clear:both;height:1em}#t-revisions-menu em{display:block;float:left;white-space:nowrap;text-align:right;font-style:normal;width:134px}#t-revisions-menu span{display:block;float:left;white-space:nowrap;color:#666;width:134px}.waffle-spellcheck-target-cell-rect{background-color:#f8b39b;opacity:.5;pointer-events:none}div.sheet-toolbar{width:100%;background-image:none;min-height:35px;border-bottom:1px solid #d9d9d9;padding:0}.sheet-toolbar-button{margin:3px 2px 0 0}.sheet-toolbar-title{line-height:35px;padding:0 44px 0 44px}.toolbar-decimal-icon{margin-bottom:-7px}.docs-material .docs-icon.toolbar-decimal-icon{margin-bottom:-4px}.docs-material #t-num-fmt-currency,.docs-material #t-num-fmt-percent{font-size:13px}#formula-bar{background:#fff;border-bottom:1px solid #c0c0c0;height:23px;padding:0;position:relative}#t-formula-bar-input{border:none;bottom:4px;left:0;line-height:13px;position:absolute;right:0;top:4px}#t-formula-bar-input.waffle-formulabar-input-disabled{background-color:#fff;border:none}#t-formula-bar-label{float:left;opacity:.55;padding:0;position:relative;text-align:center;top:50%;transform:translateY(-50%);width:45px}.docs-icon-insert-formula{margin-top:-1px}.docs-material .docs-icon-insert-formula{margin-top:0;opacity:.70}.formulabar-disabled#formula-bar{background-color:#f8f8f8}.formulabar-disabled #t-formula-bar-label{color:#9fa4b3;opacity:.4}.formulabar-disabled #t-formula-bar-input{background-color:#f8f8f8!important}.formulabar-disabled .default-formula-text-color{color:#777}#t-formula-bar-input-container{height:100%;padding:0 10px;overflow:hidden;width:auto}#t-formula-bar-input-container>div{height:100%;overflow-x:hidden;overflow-y:auto;position:relative}#t-formula-bar-progress-bar{float:right;margin-top:7px;padding:0;width:161px}#t-formula-bar-progress-bar .progress-bar-horizontal{width:146px;height:5px;border:1px solid #999;padding:1px;background-color:#fff}#t-formula-bar-progress-bar .progress-bar-thumb{background-color:#ccc}.formula-bar-separator{float:left;width:1px;height:100%;position:relative}.formula-bar-separator>div{background-color:#ccc;bottom:3px;left:0;position:absolute;right:0;top:3px;width:1px}#formula-bar-dragger{border-bottom:1px solid #c0c0c0;height:4px;margin-top:-5px;position:absolute;width:100%}#formula-bar-dragger.formula-bar-hoverable{cursor:ns-resize}#formula-bar-dragger.formula-bar-hoverable:hover{border-bottom:1px solid #a0a0a0}div.formula-bar-disabled{background-color:#ccc}.waffle-formulabar-cellinput-disabled{background-color:#ccc}#t-merge-menu{margin-right:2px}.docs-material #t-merge-menu{margin-right:1px}.goog-toolbar-color-menu-button .goog-toolbar-menu-button-dropdown{margin-top:9px}.goog-menuitem-mnemonic-separator{font-weight:normal}.waffle-banding-pane-sidebar-content{overflow-y:hidden}.waffle-banding-pane{font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;height:100%;overflow-y:auto}.docs-gm .waffle-gm-sidebar .waffle-banding-pane{height:calc(100% - 36px)}.waffle-banding-range-picker{border-bottom:1px solid lightgrey;padding:15px 10px}.waffle-banding-range-label{padding-bottom:5px}.docs-gm .waffle-gm-sidebar .waffle-banding-range-label{color:#3c4043;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;line-height:20px;padding-bottom:10px}.waffle-banding-header-footer-checkbox-wrapper{border-bottom:1px solid lightgrey;padding:10px}.docs-gm .waffle-gm-sidebar .waffle-banding-header-footer-checkbox-wrapper{padding-bottom:0}.docs-gm .waffle-gm-sidebar .waffle-banding-range-picker,.docs-gm .waffle-gm-sidebar .waffle-banding-header-footer-checkbox-wrapper{border-bottom:0}.waffle-banding-checkbox-wrapper{padding:5px 0}.docs-gm .waffle-gm-sidebar .waffle-banding-checkbox-wrapper{display:inline;padding-right:20px}.waffle-banding-checkbox-wrapper .docs-material-gm-labeled-checkbox{display:inline;max-width:none;width:auto}.waffle-banding-pane-color-picker{padding:15px 10px}.waffle-banding-pane-color-picker-label{padding:5px 0}.docs-gm .waffle-gm-sidebar .waffle-banding-pane-color-picker-label{color:#3c4043;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:12px;font-weight:500;line-height:12px}.waffle-banding-color-picker-table,.waffle-banding-color-picker-focused,.waffle-banding-color-picker-hover{border:0;margin:0;outline:none;padding:0;width:0}.waffle-banding-color-picker-table{border-spacing:5px;border-collapse:separate}.docs-gm .waffle-gm-sidebar .waffle-banding-color-picker-table{border-spacing:4px}.waffle-banding-color-picker-cell{border-width:0}.waffle-banding-color-picker-cell:focus{outline:1px solid #5e97f6}.waffle-banding-pane-color-tile-wrapper{border:1px solid transparent}.waffle-banding-color-picker-cell-selected .waffle-banding-pane-color-tile-wrapper{border:1px solid #4d90fe}.waffle-banding-color-picker-cell-hover .waffle-banding-pane-color-tile{border-color:darkgrey}.waffle-banding-pane-color-tile{border:1px solid lightgrey;cursor:pointer;height:35px;line-height:35px;margin:1px;vertical-align:middle;width:26px}.docs-gm .waffle-banding-pane-color-tile{width:33px}.docs-gm .waffle-assistant-banding-recommendation .waffle-banding-pane-color-tile{width:26px}.waffle-banding-pane-color-tile-wrapper .docs-sheet-add .docs-icon{margin-left:4px}.docs-gm .waffle-banding-pane-color-tile-wrapper .docs-sheet-add .docs-icon{margin-left:7px}.docs-gm .waffle-gm-sidebar .docs-sheet-add .docs-icon-img{content:url(//ssl.gstatic.com/docs/common/material_common_sprite146_green.svg)}.waffle-banding-pane-color-tile-band{border-bottom:1px solid lightgrey;height:8px;width:100%}.waffle-banding-pane-color-tile-band:last-child{border-bottom-width:0}.waffle-banding-pane-color-picker-preview{padding-top:10px}.docs-gm .waffle-gm-sidebar .waffle-banding-pane-color-picker-preview{padding:5px}.waffle-banding-pane-color-preview{padding:5px 0}.docs-gm .waffle-gm-sidebar .waffle-banding-pane-color-preview{display:flex}.docs-material.waffle-banding-pane-color-preview .goog-toolbar-menu-button{margin:0}.waffle-banding-pane-color-preview-label{border:1px solid lightgrey;display:inline-block;height:24px;line-height:24px;margin-right:5px;text-align:center;vertical-align:middle;width:170px}.docs-material .waffle-banding-pane-color-preview-label{height:26px;line-height:26px}.docs-gm .waffle-gm-sidebar .waffle-banding-pane-color-preview-label{border-radius:4px;box-sizing:border-box;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px}.docs-gm .waffle-gm-sidebar .waffle-banding-pane-color-picker-container{border:1px solid #dadce0;border-radius:4px;margin-top:5px}.docs-gm .waffle-gm-sidebar .waffle-banding-pane-custom-color-wrapper{border-bottom:1px solid #dadce0}.waffle-banding-pane-color-preview-picker{background-color:#f8f8f8;border-color:#c6c6c6;display:inline-block;margin:0}.docs-gm .waffle-banding-pane-color-preview-picker.goog-flat-menu-button-active{background-color:#fff!important}.waffle-banding-pane-buttons{margin-bottom:24px;padding:0 10px 10px 10px}.docs-gm .waffle-gm-sidebar .waffle-banding-pane-buttons{margin-bottom:0;text-align:right}.docs-gm .waffle-gm-sidebar .waffle-banding-pane-buttons .jfk-button{margin-left:16px;margin-right:0px}.docs-gm .waffle-gm-sidebar .waffle-named-ranges-edit-buttons{text-align:right}.waffle-banding-pane-clear-container{border-top:1px solid lightgrey;bottom:0;left:0;position:absolute;text-align:center;vertical-align:bottom;width:100%}.waffle-banding-pane-clear{background-color:#fff;color:#424242;cursor:pointer;line-height:24px;padding:5px 0}.waffle-banding-pane-clear .docs-icon{opacity:0.59}.docs-gm .waffle-gm-sidebar .waffle-banding-pane-clear .docs-icon{opacity:1;opacity:unset}.docs-gm .waffle-gm-sidebar .waffle-banding-pane-clear .docs-icon-img{content:url(//ssl.gstatic.com/docs/common/material_common_sprite146_green.svg)}.waffle-banding-pane-clear:hover{background-color:#eee;border-color:darkgrey;color:#424242}.waffle-banding-pane-clear-label{padding-left:3px}.docs-gm .waffle-gm-sidebar .waffle-banding-pane-color-wrapper{margin-bottom:3px;margin-left:1px}.docs-gm .waffle-gm-sidebar .waffle-banding-pane-clear{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:white;color:#188038;border-radius:0!important;outline:none}.docs-gm .waffle-gm-sidebar .waffle-banding-pane-clear.goog-button-hover{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#f8fcf9;color:#188038}.docs-gm .waffle-gm-sidebar .waffle-banding-pane-clear.goog-button-focused{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#e7f5eb;color:#188038}.docs-gm .waffle-gm-sidebar .waffle-banding-pane-clear.goog-button-hover.goog-button-focused{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#dff2e4;color:#188038}.docs-gm .waffle-gm-sidebar .waffle-banding-pane-clear.goog-button-active{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#dff2e4;color:#188038;box-shadow:0 2px 6px 2px rgba(60,64,67,.15)}.waffle-conditionalformat-warning{background:#fff;border-bottom:1px solid #bdbdbd;border-left:8px solid #f4b400;box-sizing:border-box;box-shadow:0 1px 4px 0 rgba(0,0,0,0.22);color:#424242;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;line-height:16px;padding:14px 14px 14px 16px;z-index:2}.waffle-conditionalformat-dismiss-warning-button-holder{height:14px;margin-top:6px;width:212px}.waffle-conditionalformat-dismiss-warning-button{color:#3367d6;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;height:14px;line-height:14px;position:absolute;right:14px}.waffle-conditionalformat-scroll-pane{overflow-x:hidden;overflow-y:auto}.waffle-conditionalformat-add-rule-button{background-color:#fafafa;border:1px solid #bdbdbd;color:#3367d6;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;font-weight:500;height:15px;line-height:15px;padding:15px;text-align:left;width:218px}.jfk-button-clear-outline.waffle-conditionalformat-add-rule-button{border:1px solid #bdbdbd}.waffle-conditionalformat-add-rule-button:focus,.waffle-conditionalformat-add-rule-button:hover{background-color:#f0f0f0;cursor:pointer}.waffle-conditionalformat-add-another-rule-button{background-color:#fff;border:1px solid #eee;color:#3367d6;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:12px;font-weight:500;height:14px;line-height:14px;padding:14px 17px;text-align:left;width:214px}.jfk-button-clear-outline.waffle-conditionalformat-add-another-rule-button{border:1px solid #eee}.waffle-conditionalformat-add-another-rule-button:focus,.waffle-conditionalformat-add-another-rule-button:hover{background-color:#fafafa;cursor:pointer}.docs-gm .waffle-filterbox-container .waffle-conditionalformat-condition-type-select .goog-flat-menu-button,.docs-gm .waffle-filterbox-container .waffle-conditionalformat-condition-date-select .goog-flat-menu-button,.docs-gm .waffle-filterbox-container .waffle-conditionalformat-arg1,.docs-gm .waffle-filterbox-container .waffle-conditionalformat-arg2,.docs-gm .waffle-filterbox-container .waffle-filterbox-input{width:252px}.docs-gm .waffle-conditionalformat-condition-type-select .goog-flat-menu-button,.docs-gm .waffle-conditionalformat-condition-date-select .goog-flat-menu-button{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#fff;border:1px solid #dadce0!important;font-weight:normal}.docs-gm .waffle-filterbox-boolean-condition-picker-body input{border:1px solid #dadce0;border-radius:4px;box-sizing:border-box;color:#3c4043;padding:1px 8px;font-size:14px;height:36px;margin:8px 0}.docs-gm .waffle-filterbox-boolean-condition-picker-body input:focus{border:2px solid #1a73e8;box-shadow:none;padding:0px 7px}.waffle-conditionalformat-condition-type-select .goog-flat-menu-button,.waffle-conditionalformat-condition-date-select .goog-flat-menu-button{text-align:left}.docs-gm .waffle-conditionalformat-condition-type-select .goog-flat-menu-button,.docs-gm .waffle-conditionalformat-condition-date-select .goog-flat-menu-button{padding-right:8px}.waffle-filterbox-boolean-condition-picker-body{margin:6px 0 8px 0}.waffle-conditionalformat-add-rule-icon{background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -83px -24px;height:10px;position:absolute;right:15px;top:18px;width:10px}.waffle-conditionalformat-add-another-rule-icon{background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -552px -42px;height:18px;position:absolute;right:18px;top:13px;width:18px}.waffle-conditionalformat-view-pill{background-color:#fff;border-bottom:1px solid #ccc;cursor:pointer;height:56px;padding:10px;position:relative}.waffle-conditionalformat-view-pill.waffle-conditionalformat-filter-border{border-left:4px solid #f4b400;padding-left:6px}.waffle-conditionalformat-view-pill:focus,.waffle-conditionalformat-view-pill:hover{background-color:#f3f3f3;outline:none}.waffle-conditionalformat-drag-handle{cursor:move;height:76px;line-height:76px;left:0;position:absolute;top:0;visibility:hidden;width:10px}.waffle-conditionalformat-view-pill:hover .waffle-conditionalformat-drag-handle{visibility:visible}.waffle-conditionalformat-view-pill.waffle-conditionalformat-filter-border .waffle-conditionalformat-drag-handle{left:-4px}.waffle-conditionalformat-drag-handle-icon{background:no-repeat url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png") -716px -17px;height:18px;left:4px;position:absolute;top:29px;width:3px}.waffle-conditionalformat-format-preview{height:54px;line-height:54px;margin-right:10px;position:absolute;text-align:center;width:44px}.waffle-conditionalformat-view-pill-summary{left:56px;margin-right:8px;position:relative;width:142px}.waffle-conditionalformat-condition{color:#333;font-size:13px;font-weight:500;line-height:15px;max-height:30px;margin-bottom:4px;overflow:hidden;text-overflow:ellipsis;width:142px}.waffle-conditionalformat-range{color:#555;height:14px;font-size:12px;line-height:14px;overflow:hidden;text-overflow:ellipsis;width:142px}.waffle-conditionalformat-delete-button-holder{height:56px;line-height:56px;position:absolute;left:216px}.waffle-conditionalformat-view-pill.waffle-conditionalformat-filter-border .waffle-conditionalformat-delete-button-holder{left:212px}.waffle-conditionalformat-delete-button-holder .waffle-conditionalformat-delete-rule{opacity:0.5}.waffle-conditionalformat-delete-button-holder .waffle-conditionalformat-delete-rule:hover{opacity:1}.waffle-conditionalformat-drag-item{border:1px solid #ccc;width:228px}.waffle-conditionalformat-range-border{border-color:#8cc474;border-style:solid;line-height:0}.waffle-conditionalformat-range-picker{border-bottom:1px solid #d6d6d6;padding:0 18px 18px 18px}.waffle-conditionalformat-range-wrapper{color:#444;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:12px}.waffle-conditionalformat-slide-frame,.waffle-conditionalformat-slide-pane{position:absolute}.waffle-conditionalformat-boolean-condition-picker,.waffle-conditionalformat-gradient-format-picker{border-top:1px solid #f5f5f5;padding:0 18px}.waffle-conditionalformat-boolean-format-picker{padding:0 18px}.waffle-conditionalformat-edit-pill-section-label{color:#646464;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:12px;line-height:14px;margin-bottom:6px;margin-top:18px}.waffle-conditionalformat-edit-pill-button-bar{padding:18px;position:relative}.waffle-conditionalformat-cancel-button,.waffle-conditionalformat-done-button{cursor:pointer}.waffle-conditionalformat-format-button{background-clip:padding-box;border-color:transparent;cursor:pointer;height:32px;left:-1px;margin:0;padding:0;position:relative;width:214px}.waffle-conditionalformat-format-button-inner{font-size:13px;font-weight:normal;height:30px;line-height:30px;padding-left:6px;text-align:left;width:206px}.waffle-conditionalformat-default-style-button,.waffle-conditionalformat-custom-style-button{background:#fff;background-clip:padding-box;cursor:pointer;height:26px;line-height:26px;margin:3px}.waffle-conditionalformat-default-style-button{width:60px}.waffle-conditionalformat-custom-style-button{text-align:left;padding:0 6px;width:184px}.waffle-conditionalformat-active-style-check{color:#000;font-weight:500}.waffle-conditionalformat-condition-type-select .jfk-select,.waffle-conditionalformat-condition-date-select .jfk-select{margin:0;width:188px}.waffle-conditionalformat-condition-date-select .jfk-select{margin-top:6px}.waffle-conditionalformat-arg1{margin:6px 6px 0 0;width:196px}.waffle-conditionalformat-arg1-short{width:162px}.waffle-conditionalformat-arg2{margin:6px 6px 0 0;width:162px}.waffle-conditionalformat-arg-separator{color:#424242;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:11px;font-weight:500}.waffle-conditionalformat-multi-arg-content{max-height:135px;overflow:auto}.waffle-conditionalformat-remove{color:#999;cursor:pointer;display:inline;margin:0 0 0 8px}.waffle-conditionalformat-remove .docs-icon{height:24px;margin:0;width:24px}.waffle-filterbox-container .waffle-conditionalformat-editbox{margin:5px 0;width:225px}.waffle-conditionalformat-custom-toolbar{border:1px solid #d8d8d8;border-radius:1px;margin:6px 0;padding:0px 5px;width:186px}.docs-material.waffle-conditionalformat-custom-toolbar{background-color:#fff;padding:0 2px;width:208px;border-radius:0 0 4px 4px!important}.waffle-conditionalformat-gradient-point-holder{margin-bottom:18px}.docs-material .waffle-conditionalformat-gradient-point-holder-last{margin-bottom:0}.waffle-conditionalformat-gradient-min-select .jfk-select,.waffle-conditionalformat-gradient-mid-select .jfk-select,.waffle-conditionalformat-gradient-max-select .jfk-select{margin:0 6px 0 0;text-align:left;width:55px}.waffle-conditionalformat-gradient-input-holder{margin-right:7px;top:1px;width:84px}.docs-material .waffle-conditionalformat-gradient-input-holder{margin-right:6px}.waffle-conditionalformat-gradient-min-input,.waffle-conditionalformat-gradient-mid-input,.waffle-conditionalformat-gradient-max-input{width:66px}.waffle-conditionalformat-gradient-min-input.label-input-label-disabled,.waffle-conditionalformat-gradient-mid-input.label-input-label-disabled,.waffle-conditionalformat-gradient-max-input.label-input-label-disabled{background-color:#ebebe4}.waffle-conditionalformat-gradient-min-color,.waffle-conditionalformat-gradient-mid-color,.waffle-conditionalformat-gradient-max-color{background-color:#f8f8f8;border-color:#c6c6c6;height:27px;margin-top:0}.waffle-conditionalformat-gradient-min-color:focus,.waffle-conditionalformat-gradient-mid-color:focus,.waffle-conditionalformat-gradient-max-color:focus{border-color:#4d90fe}.docs-material .waffle-conditionalformat-gradient-min-color,.docs-material .waffle-conditionalformat-gradient-mid-color,.docs-material .waffle-conditionalformat-gradient-max-color{height:27px;margin:0}.jfk-bubble.waffle-error-bubble.waffle-conditionalformat-error-bubble{z-index:1!important}.waffle-conditionalformat-no-suggestions{color:#757575;font-size:12px;font-style:italic;padding-top:12px}.waffle-conditionalformat-suggestion{-ms-flex:1;-webkit-flex:1;flex:1;background-clip:content-box;height:24px;line-height:24px;padding:1px;text-align:center}.waffle-conditionalformat-suggestion-chip{padding-top:14px}.waffle-conditionalformat-suggestion-group{display:flex;-moz-flex-wrap:wrap;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap;border:1px solid #d0d0d0;padding:1px}.waffle-conditionalformat-suggestion-range{font-weight:500}.waffle-conditionalformat-collapsible-suggestions{border-bottom:1px solid #d6d6d6}.waffle-conditionalformat-suggestions-section{padding:18px}.waffle-conditionalformat-suggestion-text{color:#646464;font-size:12px;padding-top:6px}.waffle-conditionalformat-suggestions-title{color:#646464;font-weight:500}.waffle-conditionalformat-suggestions-spinner-container{padding-top:14px;text-align:center}.docs-gm .waffle-conditionalformat-edit-pill-section-header{color:#3c4043;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;margin-bottom:18px;margin-top:25px}.docs-gm .waffle-conditionalformat-range-picker{border-bottom:none}.docs-gm .waffle-conditionalformat-boolean-condition-picker,.docs-gm .waffle-conditionalformat-gradient-format-picker{border-top:none}.docs-gm .waffle-conditionalformat-slide-pane .waffle-conditionalformat-edit-pill-section-header{margin-top:10px;padding:0 18px}.docs-gm .waffle-conditionalformat-slide-pane .waffle-conditionalformat-edit-pill-button-bar{padding:12px 18px 18px 24px}.docs-gm .waffle-conditionalformat-slide-frame,.docs-gm .waffle-conditionalformat-slide-pane{width:100%}.docs-gm .waffle-gm-sidebar .waffle-conditionalformat-condition-type-select .jfk-select,.docs-gm .waffle-gm-sidebar .waffle-conditionalformat-condition-date-select .jfk-select{width:100%}.docs-gm .waffle-gm-sidebar .waffle-conditionalformat-default-boolean-picker{width:100%}.docs-gm .waffle-gm-sidebar .waffle-conditionalformat-arg1-holder,.docs-gm .waffle-gm-sidebar .waffle-conditionalformat-arg2,.docs-gm .waffle-gm-sidebar .waffle-conditionalformat-arg1{width:100%}.docs-gm .waffle-gm-sidebar .waffle-conditionalformat-arg2,.docs-gm .waffle-gm-sidebar .waffle-conditionalformat-arg1{padding-left:8px;padding-right:8px}.docs-gm .waffle-gm-sidebar .waffle-conditionalformat-arg-separator{font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;margin:0 7px}.waffle-conditionalformat-twoArgs-holder{align-items:center;display:flex;justify-content:space-evenly}.docs-gm .waffle-gm-sidebar .waffle-conditionalformat-format-button{border-radius:4px 4px 0px 0px!important;font-size:14px;height:36px}.docs-gm .waffle-gm-sidebar .waffle-conditionalformat-format-button,.docs-gm .waffle-gm-sidebar .waffle-conditionalformat-format-button .goog-flat-menu-button-caption,.docs-gm .waffle-gm-sidebar .waffle-conditionalformat-format-button-inner{width:100%}.docs-gm .waffle-conditionalformat-default-menu .goog-palette-table{width:100%}.docs-gm .waffle-conditionalformat-custom-toolbar{box-sizing:border-box;border-top:none;margin-left:-1px;margin-top:0px;width:100%}.docs-gm .waffle-conditionalformat-default-menu{border-radius:4px;width:262px}.docs-gm .waffle-conditionalformat-custom-style-button{width:auto}.docs-gm .waffle-conditionalformat-default-style-button{height:31px;line-height:30px;margin-left:1px;margin-right:0;width:69px}.docs-gm .waffle-conditionalformat-default-menu .trix-palette .goog-palette-table{margin:0px}.docs-gm .waffle-conditionalformat-default-menu .goog-palette.trix-palette{padding:5px}.docs-gm .waffle-conditionalformat-default-menu .trix-palette .goog-palette-cell{padding:5px}.docs-gm .waffle-conditionalformat-edit-pill-button-bar{text-align:right;padding:0 18px 24px 18px;border-bottom:1px solid #dadce0}.docs-gm .waffle-conditionalformat-done-button{margin-right:0px}.docs-gm .waffle-conditionalformat-add-another-rule-button{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:white;color:#188038;padding:16px 24px;width:100%}.waffle-conditionalformat-add-another-rule-plus,.waffle-conditionalformat-add-rule-plus{font-size:24px;font-weight:100;margin-right:13px;vertical-align:text-bottom}.docs-gm .waffle-conditionalformat-add-another-rule-plus,.docs-gm .waffle-conditionalformat-add-rule-plus{font-size:24px;font-weight:100;line-height:21px;margin-right:8px;vertical-align:text-bottom}.docs-gm .waffle-conditionalformat-default-gradient-picker{width:100%}.docs-gm .waffle-conditionalformat-gradient-min-color .goog-toolbar-menu-button-inner-box,.docs-gm .waffle-conditionalformat-gradient-mid-color .goog-toolbar-menu-button-inner-box,.docs-gm .waffle-conditionalformat-gradient-max-color .goog-toolbar-menu-button-inner-box{min-width:30px}.docs-gm .waffle-conditionalformat-gradient-min-select .jfk-select,.docs-gm .waffle-conditionalformat-gradient-mid-select .jfk-select,.docs-gm .waffle-conditionalformat-gradient-max-select .jfk-select{width:123px}.docs-gm .waffle-conditionalformat-gradient-input-holder{width:90px}.docs-gm .waffle-conditionalformat-gradient-input-holder input{width:100%}.docs-gm .waffle-conditionalformat-gradient-point{align-items:center;display:flex;justify-content:flex-start}.docs-gm .waffle-conditionalformat-gradient-point .jfk-select{height:36px;margin-top:1px;width:123px}.docs-gm .waffle-conditionalformat-delete-button-holder{left:250px!important}.docs-gm .waffle-conditionalformat-delete-button-holder .docs-icon{width:21px;height:21px}.docs-gm .waffle-conditionalformat-view-pill{display:flex}.docs-gm .waffle-conditionalformat-view-pill-summary{margin-bottom:auto;margin-top:auto}.docs-gm .waffle-conditionalformat-add-rule-button{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:white;color:#188038;height:44px;padding-top:17px;width:100%}.docs-gm .waffle-conditionalformat-drag-item{width:280px}.waffle-conditionalformat-range-args-holder .waffle-conditionalformat-arg1-holder,.waffle-conditionalformat-range-args-holder .waffle-conditionalformat-arg2-holder,.waffle-conditionalformat-range-args-holder .waffle-conditionalformat-arg1{display:flex;-ms-flex:1;-webkit-flex:1;flex:1;overflow:hidden}.waffle-conditionalformat-range-args-holder .waffle-conditionalformat-arg2{-ms-flex:1;-webkit-flex:1;flex:1;margin-right:0;overflow:hidden}.waffle-conditionalformat-range-slider{margin-top:10px}.waffle-find-replace-active-cell-rect{-webkit-animation-name:waffle-find-replace-pulse;-moz-animation-name:waffle-find-replace-pulse;-o-animation-name:waffle-find-replace-pulse;animation-name:waffle-find-replace-pulse;-webkit-animation-duration:200ms;-moz-animation-duration:200ms;-o-animation-duration:200ms;animation-duration:200ms;-webkit-animation-timing-function:ease-in-out;-moz-animation-timing-function:ease-in-out;-o-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;background-color:rgba(140,196,116,0.5);pointer-events:none;position:absolute}.docs-gm .waffle-find-replace-active-cell-rect{border:1px solid white;border-radius:1px;box-shadow:0px 0px 0px 2px black,0 2px 3px 0 rgba(60,64,67,0.30),0 6px 10px 4px rgba(60,64,67,0.15);margin:-1px 0 0 -1px}.waffle-find-replace-not-active-cell-rect{background-color:rgba(140,196,116,0.25);pointer-events:none;position:absolute}@keyframes waffle-find-replace-pulse{from{-webkit-transform:scale(1.1,1.3);-moz-transform:scale(1.1,1.3);-ms-transform:scale(1.1,1.3);-o-transform:scale(1.1,1.3);transform:scale(1.1,1.3);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}}#waffle-gotobar-button-go{margin-right:8px}.docs-slidingdialog .docs-icon-next{filter:alpha(opacity=40);opacity:.40;-moz-opacity:.40}#waffle-gotobar-input{width:200px}.waffle-gotobar-rangematcher-row-icon{width:20px}.waffle-gotobar-rangematcher-row-suggestion{padding:5px}.waffle-gotobar-rangematcher-row-message{color:#aaa;padding:5px}#waffle-gotobar-error{color:#dd4b39;cursor:default;padding:0 7px 0 0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}#waffle-gotobar-error-icon{background:#dd4b39;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;color:white;display:inline-block;font-weight:500;padding:0 5px;position:relative;text-decoration:none;top:-1px}#waffle-named-ranges-container{border-top:1px solid #bcd;height:auto;overflow-y:auto}.docs-gm #waffle-named-ranges-container{border:none}#waffle-named-ranges-add-range{background:white;border-bottom:1px solid #ddd;cursor:pointer;font-size:13px;font-weight:500;height:13px;padding:13px 10px 13px 10px}.waffle-named-ranges-add-range-active{color:#dd4b39}.waffle-named-ranges-add-range-inactive{color:#15c}.docs-gm .waffle-gm-sidebar #waffle-named-ranges-add-range{color:#188038;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;line-height:16px;height:auto}.docs-gm .waffle-gm-sidebar .waffle-named-ranges-add-range-icon{margin-top:-1px}.docs-gm .waffle-gm-sidebar .waffle-named-ranges-add-range-icon .docs-icon-img{content:url(//ssl.gstatic.com/docs/common/material_common_sprite146_green.svg)}.waffle-named-ranges-pill{border-bottom:1px solid #ddd;cursor:default;padding:10px 20px 10px 20px;position:relative}.waffle-named-ranges-pill:focus,.waffle-named-ranges-pill:hover{background-color:#f3f3f3}.docs-gm .waffle-gm-sidebar .waffle-named-ranges-pill:focus,.docs-gm .waffle-gm-sidebar .waffle-named-ranges-pill:hover{background-color:white;outline:none}.docs-gm .waffle-gm-sidebar #waffle-named-ranges-add-range,.docs-gm .waffle-gm-sidebar #waffle-named-ranges-add-range:focus{outline:none}.docs-gm .waffle-gm-sidebar #waffle-named-ranges-add-range:hover{background-color:#f8fcf9}.docs-gm .waffle-gm-sidebar #waffle-named-ranges-add-range:focus,.docs-gm .waffle-gm-sidebar .waffle-named-ranges-pill:not(.waffle-named-ranges-edit-pill):focus{background-color:#e7f5eb}.docs-gm .waffle-gm-sidebar #waffle-named-ranges-add-range:active{background-color:#dff2e4}.waffle-named-ranges-range-name,.waffle-named-ranges-range-rect,.waffle-named-ranges-edit-range-name{overflow:hidden;text-overflow:ellipsis}.waffle-named-ranges-pill:focus .waffle-named-ranges-edit-range-button,.waffle-named-ranges-pill:hover .waffle-named-ranges-edit-range-button{display:inline-block}.waffle-named-ranges-edit-range-button{color:#15c;cursor:pointer;display:none;right:1px;position:absolute;top:12px}.docs-gm .waffle-gm-sidebar .waffle-named-ranges-edit-range-button{right:24px;top:13px}.docs-gm .waffle-gm-sidebar .waffle-named-ranges-edit-range-button{box-shadow:none;background-color:transparent;background-image:none;cursor:pointer;border-color:transparent!important;border-radius:2px;border-width:1px}.docs-gm .waffle-gm-sidebar #waffle-named-ranges-edit-delete{box-shadow:none;background-color:white;background-image:none;cursor:pointer;border-color:transparent!important;border-radius:2px;border-width:1px}.docs-gm .waffle-gm-sidebar #waffle-named-ranges-edit-delete .docs-icon{height:24px;margin:0;width:24px}.docs-gm .waffle-gm-sidebar .waffle-named-ranges-edit-range-button.jfk-button-hover,.docs-gm .waffle-gm-sidebar #waffle-named-ranges-edit-delete.jfk-button-hover,.docs-gm .waffle-gm-sidebar #waffle-named-ranges-edit-delete.jfk-button-focus{box-shadow:none;background-color:rgba(0,0,0,.06);background-image:none;cursor:pointer;border-color:transparent!important;border-radius:2px;border-width:1px}.docs-gm .waffle-gm-sidebar .waffle-named-ranges-edit-range-button.jfk-button-active,.docs-gm .waffle-gm-sidebar #waffle-named-ranges-edit-delete.jfk-button-active{box-shadow:none;background-color:rgba(0,0,0,0.12);background-image:none;cursor:pointer;border-color:transparent!important;border-radius:2px;border-width:1px}.waffle-named-ranges-range-name{font-size:14px;font-weight:500}.waffle-named-ranges-edit-pill{background-color:#f3f3f3;cursor:default}.docs-gm .waffle-gm-sidebar .waffle-named-ranges-edit-pill{background-color:#fff}.waffle-named-ranges-edit-title-bar{padding:12px 0}.waffle-named-ranges-edit-range-name{font-size:15px;font-weight:500;margin:0;max-width:190px}#waffle-named-ranges-edit-delete{cursor:pointer;float:right;top:8px}.docs-gm .waffle-gm-sidebar #waffle-named-ranges-edit-delete{float:none;margin-left:4px;margin-right:0px;top:0px}.waffle-named-ranges-add-range-name-input{margin:5px 0 10px;position:relative;top:2px;width:150px}.docs-gm .waffle-gm-sidebar .waffle-named-ranges-add-range-name-input{width:calc(100%)}.docs-gm .waffle-gm-sidebar .waffle-named-ranges-add-range-name-input.waffle-named-ranges-add-range-name-input-with-delete{width:calc(100% - 32px)}.waffle-named-ranges-select-error{border-color:#dd4b39}.waffle-named-ranges-range-select-listening{background-color:#fbf2cd;margin:0 -20px 0;padding:10px 20px}.docs-gm .waffle-named-ranges-range-select-listening{background-color:transparent;background-color:unset;padding-top:0}.waffle-named-ranges-edit-range-select-done{margin-top:3px}.docs-gm .waffle-named-ranges-edit-range-select-done{margin-top:16px}.waffle-named-ranges-edit-range-select-message{display:none;margin-top:3px;width:110px}.docs-gm .waffle-gm-sidebar .waffle-named-ranges-edit-range-select-message{color:#3c4043;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;font-weight:400}.waffle-named-ranges-range-select-listening .waffle-named-ranges-edit-range-select-message{display:inline-block}.waffle-named-ranges-edit-done,.waffle-named-ranges-edit-cancel{margin-top:10px}.docs-gm .waffle-gm-sidebar .waffle-named-ranges-edit-buttons{text-align:right}.docs-gm .waffle-gm-sidebar .waffle-named-ranges-edit-buttons .jfk-button{margin-left:16px;margin-right:0px}#waffle-named-ranges-edit-validation-error{margin-top:5px}.docs-gm .waffle-gm-sidebar #waffle-named-ranges-edit-validation-error{font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:400;margin-top:10px}#waffle-named-ranges-edit-validation-error-text{color:#dd4b39;padding:0 7px 0 0}#waffle-named-ranges-edit-validation-error-icon{background:#dd4b39;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;color:white;display:inline-block;font-weight:500;padding:0 5px;position:relative;text-decoration:none;top:-1px}#waffle-named-ranges-arrowup{left:14px;position:absolute;top:32px}#waffle-named-ranges-arrowup:before,#waffle-named-ranges-arrowup:after{content:"";display:block;height:0;position:absolute;width:0}#waffle-named-ranges-arrowup:before{border-color:#ddd transparent;border-width:0 9px 9px 9px;border-style:solid;left:-9px}#waffle-named-ranges-arrowup:after{border-color:#f3f3f3 transparent;border-width:0 8px 8px 8px;border-style:solid;left:-8px;top:1px}#waffle-named-ranges-promo{cursor:default;padding:0 15px 0 15px}.docs-gm #waffle-named-ranges-promo{border-radius:8px;background-color:#e6f4ea;margin:16px;padding:16px}.waffle-named-ranges-promo-title{color:#636363;font-size:14px;font-weight:500;margin-bottom:10px}.docs-gm .waffle-named-ranges-promo-title{align-items:center;color:#188038;display:flex}.docs-gm .waffle-named-ranges-promo-title .docs-icon{margin:0 8px 0 0}.docs-gm .waffle-named-ranges-promo-title-text{font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500}.waffle-named-ranges-promo-content{color:#636363;margin:20px 0 20px}.docs-gm .waffle-named-ranges-promo-content{color:#188038;font-size:12px;letter-spacing:.3px;margin:24px 0}.docs-gm .waffle-named-ranges-promo-example{align-items:center;background-color:#fff;border-radius:4px;color:#202124;display:flex;margin-top:8px;padding:8px}.docs-gm .waffle-named-ranges-promo-example .docs-icon{margin:0 4px 0 0}.docs-gm .waffle-named-ranges-promo-example .docs-icon-img:before{content:url(//ssl.gstatic.com/docs/common/material_common_sprite146_grey_dark.svg)}.docs-gm .waffle-named-ranges-promo-example .docs-icon-img{content:url(//ssl.gstatic.com/docs/common/material_common_sprite146_grey_dark.svg)}.waffle-named-ranges-promo-separator{background-color:#ddd;border:none;color:#ddd;height:1px;margin:20px 0 20px;width:95%}.waffle-named-ranges-promo-formulabar{border:solid #f3f3f3;border-width:10px 0 10px 0;margin:15px 0 20px}.docs-gm .waffle-named-ranges-promo-footer{display:flex;justify-content:flex-end}.docs-gm .waffle-named-ranges-promo-footer a{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#e6f4ea;color:#188038;display:inline-block}.docs-gm .waffle-named-ranges-promo-footer a:hover{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#e6f4ea;color:#188038;text-decoration:none}.docs-gm .waffle-named-ranges-promo-footer a:focus,.docs-gm .waffle-named-ranges-promo-footer a:hover:focus{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#ceead6;color:#188038}.docs-gm .waffle-named-ranges-promo-footer a:active,.docs-gm .waffle-named-ranges-promo-footer a:hover:active{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#ceead6;color:#188038;box-shadow:0 1px 3px 1px rgba(60,64,67,.15)}.waffle-named-ranges-promo-lock-container{height:27px;margin-right:12px;overflow:hidden;vertical-align:middle;width:23px}.waffle-named-ranges-promo-lock:before{content:url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png")}.waffle-named-ranges-promo-lock{background:url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png");left:-618px;opacity:.60;position:relative;top:0}.docs-icon.waffle-named-ranges-locked{height:21px;margin-bottom:3px;width:21px}.docs-icon.waffle-named-ranges-unlocked{height:21px;width:21px}#waffle-named-ranges-edit-manage-named-ranges{color:#15c;cursor:pointer;margin-top:5px;padding-bottom:5px}.waffle-named-ranges-border{border-color:#8cc474;border-style:solid;line-height:0}#waffle-ritz-protection-container{border-top:1px solid #bcd;height:auto;overflow-y:auto;width:250px}.docs-gm .waffle-gm-sidebar #waffle-ritz-protection-container{border:none;width:300px}.waffle-ritz-protection-link-button{background:white;cursor:pointer;font-size:13px;height:13px;padding:13px 10px 13px 10px;color:#15c}.docs-gm .waffle-ritz-protection-link-button{color:#188038;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;line-height:16px;height:16px;padding:16px}.docs-gm .waffle-gm-sidebar .waffle-ritz-protection-add-range-icon{margin-top:-1px}.docs-gm .waffle-gm-sidebar .waffle-ritz-protection-add-range-icon .docs-icon-img{content:url(//ssl.gstatic.com/docs/common/material_common_sprite146_green.svg)}#waffle-ritz-protection-add-range{border-bottom:1px solid #ddd}.docs-gm .waffle-gm-sidebar .waffle-ritz-protection-link-button,.docs-gm .waffle-gm-sidebar .waffle-ritz-protection-link-button:focus{outline:none}.docs-gm .waffle-gm-sidebar .waffle-ritz-protection-link-button:hover{background-color:#f8fcf9}.docs-gm .waffle-gm-sidebar .waffle-ritz-protection-link-button:focus{background-color:#e7f5eb}.docs-gm .waffle-gm-sidebar .waffle-ritz-protection-link-button:active{background-color:#dff2e4}.waffle-ritz-protection-pill{border-bottom:1px solid #ddd;cursor:default;padding-bottom:10px;padding-top:10px;position:relative}.waffle-ritz-protection-pill-contents{padding-left:20px;padding-right:20px}.docs-gm .waffle-ritz-protection-pill-contents{color:#5f6368;font-size:14px;padding-left:16px;padding-right:16px}.waffle-ritz-protection-edit-permissions{border-top:1px solid #ddd;border-bottom:1px solid #ddd;padding-bottom:15px;padding-top:15px;margin-top:15px}.waffle-ritz-protection-edit-permissions-lock{left:-5px;width:15px}.waffle-ritz-protection-edit-buttons{padding-top:5px}.docs-gm .waffle-ritz-protection-edit-buttons{display:flex;justify-content:flex-end;padding-top:8px}.waffle-ritz-protection-edit-permissions-title{font-size:14px;font-weight:500;word-wrap:break-word}.waffle-ritz-protection-edit-permissions-description{color:gray}.waffle-ritz-protection-range-rect,.waffle-ritz-protection-edit-range-name{overflow:hidden;text-overflow:ellipsis}.docs-gm .waffle-ritz-protection-range-rect-holder{color:#202124;font-weight:500}.waffle-ritz-protection-view-pill{cursor:pointer}.waffle-ritz-protection-view-pill:focus,.waffle-ritz-protection-view-pill:hover{background-color:#f3f3f3}.waffle-ritz-protection-range-name{font-size:14px;font-weight:500;word-wrap:break-word}.waffle-ritz-protection-edit-pill{background-color:#fafafa;cursor:default}.docs-gm .waffle-ritz-protection-edit-pill{background-color:#fff}.waffle-ritz-protection-edit-title-bar{padding:12px 0}.waffle-ritz-protection-edit-range-name{font-size:15px;font-weight:500;margin:0;max-width:190px}#waffle-ritz-protection-edit-delete{cursor:pointer;float:right;top:8px}.docs-gm #waffle-ritz-protection-edit-delete{top:16px}.docs-gm #waffle-ritz-protection-edit-delete .docs-icon{height:24px;margin:0;width:24px}.waffle-ritz-protection-add-description-input{margin:5px 0 10px;position:relative;top:2px;width:150px}.docs-gm .waffle-ritz-protection-add-description-input{width:100%}.docs-gm .waffle-ritz-protection-edit-description-input{width:236px}.waffle-ritz-protection-select-error{border-color:#dd4b39}#waffle-ritz-protection-edit-sheet-select{margin:0px;text-align:left;width:180px}.docs-gm #waffle-ritz-protection-edit-sheet-select{width:100%}#waffle-ritz-protection-edit-sheet-select .goog-flat-menu-button-caption{text-overflow:ellipsis;overflow:hidden;width:inherit}#waffle-ritz-protection-edit-sheet-label{font-weight:500;margin:0px 5px;overflow:hidden;text-overflow:ellipsis}.waffle-ritz-protection-holes-checkbox-container{margin-bottom:5px;margin-top:10px}.docs-gm .waffle-gm-sidebar #waffle-ritz-protection-holes-checkbox-label{color:#3c4043;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;line-height:24px;padding-left:8px;vertical-align:middle}.waffle-ritz-protection-edit-done,.waffle-ritz-protection-edit-cancel{margin-top:10px}.docs-gm .waffle-ritz-protection-edit-cancel{margin-right:8px}.docs-gm .waffle-ritz-protection-edit-done{margin-right:0}.waffle-ritz-protection-edit-toggle-range,.waffle-ritz-protection-edit-toggle-sheet{margin:10px 0px;width:85px}.docs-gm .waffle-ritz-protection-tab-separator{border-top:1px solid #dadce0;margin-left:-16px;padding-top:16px;width:300px}#waffle-ritz-protection-edit-validation-error{margin-top:5px}#waffle-ritz-protection-edit-validation-error-text{color:#dd4b39;padding:0 7px 0 0}#waffle-ritz-protection-edit-validation-error-icon{background:#dd4b39;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;color:white;display:inline-block;font-weight:500;padding:0 5px;position:relative;text-decoration:none;top:-1px}.waffle-ritz-protection-edit-permissions-button{margin-top:10px;padding-right:15px}#waffle-ritz-protection-promo{cursor:default;padding:0 15px 0 15px}.waffle-ritz-protection-promo-content{color:#636363;margin:20px 0 20px}.waffle-ritz-protection-promo-separator{background-color:#ddd;border:none;color:#ddd;height:1px;margin:20px 0 20px;width:95%}.waffle-ritz-protection-promo-lock-container{height:27px;margin-right:12px;overflow:hidden;vertical-align:middle;width:23px}.waffle-ritz-protection-promo-lock:before{content:url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png")}.waffle-ritz-protection-promo-lock{background:url("//ssl.gstatic.com/docs/spreadsheets/waffle_sprite53.png");left:-618px;opacity:.60;position:relative;top:0}#waffle-ritz-protection-edit-manage-ritz-protection{color:#15c;cursor:pointer;margin-top:5px;padding-bottom:5px}.waffle-ritz-protection-border{border-color:#8cc474;border-style:solid;line-height:0}.waffle-ritz-protection-acl-loading{width:400px}.waffle-ritz-protection-acl-loading-spinner,.waffle-ritz-protection-acl-loading-text{display:inline-block;position:relative;transition:left 300ms ease-out;transition:width 300ms ease-out;vertical-align:middle}.waffle-ritz-protection-type-buttons .jfk-radiobutton{display:block;margin-bottom:4px}.waffle-ritz-protection-dropdown{margin:4px 0 24px 27px}.waffle-ritz-protection-dropdown .goog-flat-menu-button-caption{font-size:12px;text-align:left;width:345px}.waffle-ritz-protection-custom-container{margin-left:27px}.waffle-ritz-protection-acl-table-container{border-collapse:collapse;border-top:1px solid #d6d6d6;font-family:arial,sans-serif;font-size:13px;margin-bottom:10px;max-height:230px;overflow:auto;width:373px}.waffle-ritz-protection-acl-header-name,.waffle-ritz-protection-acl-header-edit{color:#616161;display:inline-block;font-family:arial,sans-serif;font-size:11px;font-weight:500}.waffle-ritz-protection-acl-header{margin-bottom:10px}.waffle-ritz-protection-acl-header-edit{text-align:right}.waffle-ritz-protection-acl-scope-col,.waffle-ritz-protection-acl-header-name{width:85%}.waffle-ritz-protection-acl-edit-col,.waffle-ritz-protection-acl-header-edit{width:15%}.waffle-ritz-protection-acl-header-edit-checkbox{margin-right:10px}.waffle-ritz-protection-acl-table{empty-cells:show;width:100%}.waffle-ritz-protection-acl-table td{border-bottom:1px solid #ebebeb;font-size:13px;padding:8px 0px}.waffle-ritz-protection-acl-missing{opacity:0.5}.waffle-ritz-protection-acl-row td{text-overflow:ellipsis}.waffle-ritz-protection-acl-scope{width:313px}.waffle-ritz-protection-acl-text{display:inline-block;margin-left:15px;overflow:hidden;text-overflow:ellipsis;vertical-align:middle;width:239px;white-space:nowrap}.waffle-ritz-protection-acl-email{color:#777;margin-left:5px}.waffle-ritz-protection-acl-checkbox{display:block;margin-left:auto;margin-right:10px}.waffle-ritz-protection-acl-default-icon{display:inline-block;filter:alpha(opacity=55);height:21px;opacity:0.55;margin-left:4px;margin-top:4px;width:21px}.waffle-ritz-protection-acl-icon-container{background-color:#f5f5f5;display:inline-block;height:29px;vertical-align:middle;width:29px}.waffle-ritz-protection-acl-custom-icon{height:29px;vertical-align:middle;width:29px}.waffle-ritz-protection-acl-icon-disabled{filter:alpha(opacity=25);opacity:0.25}.waffle-ritz-protection-add-editors-container{background-color:#f5f5f5;margin-bottom:24px;padding:16px}.waffle-ritz-protection-add-editors-label{font-size:11px;font-weight:500;padding-right:15px}.waffle-ritz-protection-add-editors-input{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding-left:8px;padding-right:8px;transition:height 200ms ease-out;width:100%}.waffle-ritz-protection-ac-renderer{background:#fff;border:1px solid #666;box-shadow:2px 2px 2px rgba(102,102,102,.4);color:#333;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;max-height:120px;overflow:hidden;position:absolute;width:369px;white-space:nowrap;z-index:1010}.waffle-ritz-protection-ac-renderer .goog-contacts-ui-autocomplete-new-section{border-top:1px solid #666;padding-top:2px}.waffle-ritz-protection-ac-renderer .ac-row{cursor:pointer;padding:4px 10px 4px 4px}.waffle-ritz-protection-ac-renderer .ac-highlighted{color:#222}.waffle-ritz-protection-ac-renderer .ac-active{background:#eee}.waffle-ritz-protection-list{border-collapse:collapse;border-top:1px solid #ebebeb;font-family:arial,sans-serif;font-size:13px;margin-bottom:24px;margin-left:27px;max-height:200px;outline:transparent;overflow:auto}.waffle-ritz-protection-item{border-bottom:1px solid #ebebeb;padding:5px 0}.waffle-ritz-protection-item-hover{background:#eee}.waffle-ritz-protection-item-name{font-size:13px;font-weight:500;word-wrap:break-word}.waffle-ritz-protection-item-range{color:gray;font-size:12px;word-wrap:break-word}.waffle-ritz-protection-acl-butter{background:#f9edbe;border:1px solid #f0c36d;color:#222;font-family:arial,sans-serif;font-size:13px;margin-bottom:10px;margin-top:10px;max-width:358px;padding:5px;text-align:center;width:100%}.waffle-ritz-protection-acl-butter-text{display:inline-block}.waffle-ritz-protection-acl-butter-href{text-decoration:underline}.waffle-ritz-protection-acl-butter-action{cursor:pointer;color:#15c;display:inline-block}.docs-gm .waffle-gm-sidebar .waffle-flat-multi-range-select-done{margin-top:8px}.docs-gm .waffle-gm-sidebar .waffle-flat-range-select-listening,.docs-gm .waffle-gm-sidebar .waffle-flat-multi-range-select-listening{background-color:transparent;background-color:unset}.docs-gm .waffle-gm-sidebar .waffle-ritz-protection-pill-contents .waffle-flat-multi-range-row{margin-bottom:8px}.docs-gm .waffle-gm-sidebar .waffle-ritz-protection-pill-contents .waffle-flat-multi-range-add-another{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:white;border:1px solid #dadce0!important;color:#188038;height:24px;padding:3px 12px 5px;display:inline-block;margin:0}.docs-gm .waffle-gm-sidebar .waffle-ritz-protection-pill-contents .waffle-flat-multi-range-add-another:focus{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#e7f5eb;border:1px solid #bbe2c6!important;height:24px;padding:3px 12px 5px}.docs-gm .waffle-gm-sidebar .waffle-ritz-protection-pill-contents .waffle-flat-multi-range-add-another:hover{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#f8fcf9;border:1px solid #c8e7d1!important;height:24px;padding:3px 12px 5px}.docs-gm .waffle-gm-sidebar .waffle-ritz-protection-pill-contents .waffle-flat-multi-range-add-another:hover:focus{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#dff2e4;border:1px solid #b5e0c1!important;height:24px;padding:3px 12px 5px}.docs-gm .waffle-gm-sidebar .waffle-ritz-protection-pill-contents .waffle-flat-multi-range-add-another:active,.docs-gm .waffle-gm-sidebar .waffle-ritz-protection-pill-contents .waffle-flat-multi-range-add-another:hover:active{background-image:none;border:1px solid transparent!important;border-radius:4px;box-shadow:none;box-sizing:border-box;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;height:36px;letter-spacing:0.25px;line-height:16px;padding:9px 24px 11px 24px;background:#dff2e4;border:1px solid transparent!important;box-shadow:0 2px 6px 2px rgba(60,64,67,.15);height:24px;padding:3px 12px 5px}.docs-gm .goog-tab-bar.spreadsheet-settings-dialog-tab-bar .goog-tab.spreadsheet-settings-tab{color:#5f6368;text-align:center;width:120px}.docs-gm .goog-tab-bar.spreadsheet-settings-dialog-tab-bar{border-bottom-color:#e8eaed!important}.docs-gm .goog-tab-bar.spreadsheet-settings-dialog-tab-bar .goog-tab.spreadsheet-settings-tab.goog-tab-selected,.docs-gm .goog-tab-bar.spreadsheet-settings-dialog-tab-bar .goog-tab.spreadsheet-settings-tab.goog-tab-hover{border-bottom:2px solid #188038;color:#202124}.docs-gm .dialog-settings .dialog-settings-input{width:210px}.docs-gm .dialog-settings .jfk-select{max-width:210px}.docs-gm .dialog-settings{width:670px}.docs-gm .dialog-settings-label{padding-bottom:4px;padding-top:4px}.docs-gm .dialog-settings-display-language{padding-top:4px}.docs-gm .dialog-settings .goog-flat-menu-button-caption{text-align:left}.docs-gm .modal-dialog.dialog-settings .jfk-select.goog-flat-menu-button{padding-left:14px}.goog-tab-bar.spreadsheet-settings-dialog-tab-bar{background:none;border-bottom-color:silver!important;margin-bottom:20px;padding-left:0!important}.goog-tab-bar.spreadsheet-settings-dialog-tab-bar .goog-tab.spreadsheet-settings-tab{color:#bdbdbd;cursor:pointer;font-weight:500;margin:1px 15px 0 0;padding:4px 8px;text-decoration:none;top:1px}.goog-tab-bar.spreadsheet-settings-dialog-tab-bar .goog-tab.spreadsheet-settings-tab.goog-tab-selected,.goog-tab-bar.spreadsheet-settings-dialog-tab-bar .goog-tab.spreadsheet-settings-tab.goog-tab-hover{background:none;border-bottom:3px solid #4d90fe;border-left:none;border-right:none;border-top:none;color:black}.dialog-settings .dialog-settings-input{width:175px}.dialog-settings .jfk-select{max-width:171px;box-sizing:border-box}.dialog-settings .goog-flat-menu-button-caption{text-overflow:ellipsis}.grid-container {height:100%;width:100%;overflow:auto} \ No newline at end of file From 7914257ad894786c0ced50e7f3f500e3d031b3e6 Mon Sep 17 00:00:00 2001 From: Wesley Shillingford Date: Fri, 14 Feb 2020 18:27:56 +0000 Subject: [PATCH 09/87] Update account_info with confirmation_height_frontier (#232) --- docs/commands/rpc-protocol.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/commands/rpc-protocol.md b/docs/commands/rpc-protocol.md index 1fddcd6d3..bf50450a9 100644 --- a/docs/commands/rpc-protocol.md +++ b/docs/commands/rpc-protocol.md @@ -149,11 +149,13 @@ Returns frontier, open block, change representative block, balance, last modifie "modified_timestamp": "1501793775", "block_count": "33", "confirmation_height" : "28", + "confirmation_height_frontier" : "34C70FCA0952E29ADC7BEE6F20381466AE42BD1CFBA4B7DFFE8BD69DF95449EB", "account_version": "1" } ``` -In response `confirmation_height` only available for _version 19.0+_ +In response `confirmation_height` only available for _version 19.0+_ +In response `confirmation_height_frontier` only available for _version 21.0+_ which is the block hash at that confirmation height. **Optional "representative", "weight", "pending"** _version 9.0+_ From 898b79c74d2dd952fb7dae4cdbf727842aa41113 Mon Sep 17 00:00:00 2001 From: Zach Hyatt <2311564+zhyatt@users.noreply.github.com> Date: Mon, 17 Feb 2020 08:52:45 -0600 Subject: [PATCH 10/87] Fix open block example previous as 0 (#234) * Fix open block example previous as 0 * Reference existing creating transactions section instead of duplicating --- docs/integration-guides/key-management.md | 2 +- docs/integration-guides/the-basics.md | 187 +--------------------- 2 files changed, 3 insertions(+), 186 deletions(-) diff --git a/docs/integration-guides/key-management.md b/docs/integration-guides/key-management.md index c1a110ca1..9c68c4b67 100644 --- a/docs/integration-guides/key-management.md +++ b/docs/integration-guides/key-management.md @@ -289,7 +289,7 @@ curl -d '{ | | | | `"json_block"` | always `"true"`, so that the output is JSON-formatted | | `"type"` | always the constant `"state"` | - | `"previous"` | `"frontier"` from `account_info` response | + | `"previous"` | `"frontier"` from `account_info` response, or `0` if first block on new account | | `"account"` | `"account"` address used in the `account_info` call above that the block will be created for | | `"representative"` | `"representative"` address returned in the `account_info` call | | `"balance"` | balance of the account in $raw$ **after** this transaction is completed (decreased if sending, increased if receiving). In this example, we will receive 7 $nano$ ($7 \times 10^{30} raw$) based on the assumed details of the block the `"link"` hash refers to (block contents not shown in this example). | diff --git a/docs/integration-guides/the-basics.md b/docs/integration-guides/the-basics.md index e0544ae3c..ebd2b1701 100644 --- a/docs/integration-guides/the-basics.md +++ b/docs/integration-guides/the-basics.md @@ -235,192 +235,9 @@ The digital signing algorithm (which internally applies another Blake2b hashing) !!! warning "Private/public key usage" Make sure that your private key uses the correct partnering public key while signing as using an incorrect public key may leak information about your private key. -### Block Creation Examples +### Creating Blocks -Read these examples in order to correctly interpret balances and block hashes on the example account-chain. - -!!! note - All example `"work"` values included in the responses are not valid (`0000000000000000`). - -#### Receive - -*Scenario* - -* Address creates block sending 5 $nano$ to `nano_3igf8hd4sjshoibbbkeitmgkp1o6ug4xads43j6e4gqkj5xk5o83j8ja9php` -* Hash of block sending funds is `B2EC73C1F503F47E051AD72ECB512C63BA8E1A0ACC2CEE4EA9A22FE1CBDB693F` -* We want to receive the pending 5 $nano$ into this new (unopened) account - -*Action* - -* Create a block to receive Nano for account: `nano_3igf8hd4sjshoibbbkeitmgkp1o6ug4xads43j6e4gqkj5xk5o83j8ja9php` account-chain. -* Sets `nano_3p1asma84n8k84joneka776q4egm5wwru3suho9wjsfyuem8j95b3c78nw8j` as the representative. -* This receives the block hash `B2EC73C1F503F47E051AD72ECB512C63BA8E1A0ACC2CEE4EA9A22FE1CBDB693F` and because this is the first block on the account, the account is considered "opened". - -```bash -curl -d '{ - "action":"block_create", - "json_block": "true", - "type":"state", - "previous":"FC5A7FB777110A858052468D448B2DF22B648943C097C0608D1E2341007438B0", - "account":"nano_3igf8hd4sjshoibbbkeitmgkp1o6ug4xads43j6e4gqkj5xk5o83j8ja9php", - "representative":"nano_3p1asma84n8k84joneka776q4egm5wwru3suho9wjsfyuem8j95b3c78nw8j", - "balance":"5000000000000000000000000000000", - "link":"B2EC73C1F503F47E051AD72ECB512C63BA8E1A0ACC2CEE4EA9A22FE1CBDB693F", - "wallet":"557832FF41BAF4860ED4D7023E9ACE74F1427C3F8232B6AFFB491D98DD0EA1A2" -}' http://127.0.0.1:7076 -``` - -```json -{ - "hash": "597395E83BD04DF8EF30AF04234EAAFE0606A883CF4AEAD2DB8196AAF5C4444F", - "block": { - "type": "state", - "account": "nano_3igf8hd4sjshoibbbkeitmgkp1o6ug4xads43j6e4gqkj5xk5o83j8ja9php", - "previous": "FC5A7FB777110A858052468D448B2DF22B648943C097C0608D1E2341007438B0", - "representative": "nano_3p1asma84n8k84joneka776q4egm5wwru3suho9wjsfyuem8j95b3c78nw8j", - "balance": "5000000000000000000000000000001", - "link": "B2EC73C1F503F47E051AD72ECB512C63BA8E1A0ACC2CEE4EA9A22FE1CBDB693F", - "link_as_account": "nano_3eqegh1zc1znhr4joosgsfakrrxtjrf1om3exs9cmajhw97xptbzi3kfba1j", - "signature": "90CBD62F5466E35DB3BFE5EFDBC6283BD30C0591A3787C9458D11F2AF6188E45E6E71B5F4A8E3598B1C80080D6024867878E355161AD1935CD757477991D3B0B", - "work": "0000000000000000" - } -} -``` - -!!! info - * The `"balance"` field is in $raw$ format. For more information, see [units](#units). - * Take note of the field `"link_as_account"`. This is if the `"link"` field were to be interpreted as a 256-bit public key and translated into an "nano\_..." address. This field is only provided for convenience and is stripped away before it is broadcast to the network. - * If you are creating and signing your own blocks external to nano\_node, you do not need to include a `"link_as_account"` field. - ---- - -#### Send - -*Scenario* - -* We want to send from our account `nano_3igf8hd4sjshoibbbkeitmgkp1o6ug4xads43j6e4gqkj5xk5o83j8ja9php`. -* We want to send 2 $nano$ to account `nano_1q3hqecaw15cjt7thbtxu3pbzr1eihtzzpzxguoc37bj1wc5ffoh7w74gi6p`. - -*Response* - -```bash -curl -d '{ - "action":"block_create", - "type":"state", - "previous":"597395E83BD04DF8EF30AF04234EAAFE0606A883CF4AEAD2DB8196AAF5C4444F", - "account":"nano_3igf8hd4sjshoibbbkeitmgkp1o6ug4xads43j6e4gqkj5xk5o83j8ja9php", - "representative":"nano_3p1asma84n8k84joneka776q4egm5wwru3suho9wjsfyuem8j95b3c78nw8j", - "balance":"3000000000000000000000000000000", - "link":"nano_1q3hqecaw15cjt7thbtxu3pbzr1eihtzzpzxguoc37bj1wc5ffoh7w74gi6p", - "wallet":"557832FF41BAF4860ED4D7023E9ACE74F1427C3F8232B6AFFB491D98DD0EA1A2" -}' http://127.0.0.1:7076 -``` - -```json -{ - "hash": "128106287002E595F479ACD615C818117FCB3860EC112670557A2467386249D4", - "block": { - "type": "state", - "account": "nano_3igf8hd4sjshoibbbkeitmgkp1o6ug4xads43j6e4gqkj5xk5o83j8ja9php", - "previous": "597395E83BD04DF8EF30AF04234EAAFE0606A883CF4AEAD2DB8196AAF5C4444F", - "representative": "nano_3p1asma84n8k84joneka776q4egm5wwru3suho9wjsfyuem8j95b3c78nw8j", - "balance": "3000000000000000000000000000000", - "link": "5C2FBB148E006A8E8BA7A75DD86C9FE00C83F5FFDBFD76EAA09531071436B6AF", - "link_as_account": "nano_1q3hqecaw15cjt7thbtxu3pbzr1eihtzzpzxguoc37bj1wc5ffoh7w74gi6p", - "signature": "D7975EE2F6FAE1FC7DA336FB9DD5F7E30FC1A6825021194E614F0588073D1A4901E34E3CAE8739F1DE2FD85A73D2A0B26F8BE6539E0548C9A45E1C1887BFFC05", - "work": "0000000000000000" - } -} -``` - -!!! info - Because the account balance was reduced from `5000000000000000000000000000000` $raw$ to `3000000000000000000000000000000` $raw$, the block is interpreted as a send. The `"link"` field is populated with the public key of the account we are sending to. - ---- - -#### Change - -*Scenario* - -* We want to change the representative of our account `nano_3igf8hd4sjshoibbbkeitmgkp1o6ug4xads43j6e4gqkj5xk5o83j8ja9php` -* We want the representative to be `nano_1anrzcuwe64rwxzcco8dkhpyxpi8kd7zsjc1oeimpc3ppca4mrjtwnqposrs` - -*Response* - -```bash -curl -d '{ - "action":"block_create", - "type":"state", - "previous":"128106287002E595F479ACD615C818117FCB3860EC112670557A2467386249D4", - "account":"nano_3igf8hd4sjshoibbbkeitmgkp1o6ug4xads43j6e4gqkj5xk5o83j8ja9php", - "representative":"nano_1anrzcuwe64rwxzcco8dkhpyxpi8kd7zsjc1oeimpc3ppca4mrjtwnqposrs", - "balance":"3000000000000000000000000000000", - "link":"0000000000000000000000000000000000000000000000000000000000000000", - "wallet":"557832FF41BAF4860ED4D7023E9ACE74F1427C3F8232B6AFFB491D98DD0EA1A2" -}' http://127.0.0.1:7076 -``` - -```json -{ - "hash": "2A322FD5ACAF50C057A8CF5200A000CF1193494C79C786B579E0B4A7D10E5A1E", - "block": { - "type": "state", - "account": "nano_3igf8hd4sjshoibbbkeitmgkp1o6ug4xads43j6e4gqkj5xk5o83j8ja9php", - "previous": "128106287002E595F479ACD615C818117FCB3860EC112670557A2467386249D4", - "representative": "nano_1anrzcuwe64rwxzcco8dkhpyxpi8kd7zsjc1oeimpc3ppca4mrjtwnqposrs", - "balance": "3000000000000000000000000000000", - "link": "0000000000000000000000000000000000000000000000000000000000000000", - "link_as_account": "nano_1111111111111111111111111111111111111111111111111111hifc8npp", - "signature": "7E9A7B368DBEB280B01C22633DC82F6CEF00F529E07B76A0232614D2BCDAF85BF52AC9DA4DBE4468B6F144CE82F2FDE44080C8363F903A6EC3D999252CB1E801", - "work": "0000000000000000" - } -} -``` - -!!! note - Note that the `""link"` field is all 0's. As another sanity check, we notice the all 0 public key gets translated into the burn address `nano_1111111111111111111111111111111111111111111111111111hifc8npp` - ---- - -#### Change & Send - -*Scenario* - -* We want to change our representative at the same time we perform a send or receive of funds. -* We want to send 2 more $nano$ to account `nano_1q3hqecaw15cjt7thbtxu3pbzr1eihtzzpzxguoc37bj1wc5ffoh7w74gi6p` -* We want to revert our representative back to `nano_3p1asma84n8k84joneka776q4egm5wwru3suho9wjsfyuem8j95b3c78nw8j` - -*Response* - -```bash -curl -d '{ - "action":"block_create", - "type":"state", - "previous":"2A322FD5ACAF50C057A8CF5200A000CF1193494C79C786B579E0B4A7D10E5A1E", - "account":"nano_3igf8hd4sjshoibbbkeitmgkp1o6ug4xads43j6e4gqkj5xk5o83j8ja9php", - "representative":"nano_3p1asma84n8k84joneka776q4egm5wwru3suho9wjsfyuem8j95b3c78nw8j", - "balance":"1000000000000000000000000000000", - "link":"nano_1q3hqecaw15cjt7thbtxu3pbzr1eihtzzpzxguoc37bj1wc5ffoh7w74gi6p", - "wallet":"557832FF41BAF4860ED4D7023E9ACE74F1427C3F8232B6AFFB491D98DD0EA1A2" -}' http://127.0.0.1:7076 -``` - -```json -{ - "hash": "9664412A834F0C27056C7BC4A363FBAE86DF8EF51341A5A5EA14061727AE519F", - "block": { - "type": "state", - "account": "nano_3igf8hd4sjshoibbbkeitmgkp1o6ug4xads43j6e4gqkj5xk5o83j8ja9php", - "previous": "2A322FD5ACAF50C057A8CF5200A000CF1193494C79C786B579E0B4A7D10E5A1E", - "representative": "nano_3p1asma84n8k84joneka776q4egm5wwru3suho9wjsfyuem8j95b3c78nw8j", - "balance": "1000000000000000000000000000000", - "link": "5C2FBB148E006A8E8BA7A75DD86C9FE00C83F5FFDBFD76EAA09531071436B6AF", - "link_as_account": "nano_1q3hqecaw15cjt7thbtxu3pbzr1eihtzzpzxguoc37bj1wc5ffoh7w74gi6p", - "signature": "4D388F982188E337D22E0E66CD24BCABD09BED1E920940C453039B55B6A4724D7BD106019AACC1840480938FF4FA024F041E6E6A32B3641C28E0262025020B03", - "work": "0000000000000000" - } -} -``` +For details on how to create individual blocks for sending from, receiving to, opening or changing representatives for an account, please see the [Creating Transactions](/integration-guides/key-management/#creating-transactions) section. --- From d71beb05c7c8e504226bd6d58f2c00c9c5aa15e1 Mon Sep 17 00:00:00 2001 From: Zach Hyatt <2311564+zhyatt@users.noreply.github.com> Date: Mon, 17 Feb 2020 09:43:47 -0600 Subject: [PATCH 11/87] Markets and services added to Roadmap (#227) --- docs/releases/roadmap.md | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/docs/releases/roadmap.md b/docs/releases/roadmap.md index ef9d46223..49c1809ee 100644 --- a/docs/releases/roadmap.md +++ b/docs/releases/roadmap.md @@ -12,6 +12,30 @@ This roadmap document represents the current areas that are being pursued by the ??? info "Global Markets" **Status** + * CycleBit Launched (Dec. 23rd 2019) + + * DigiFinex Launched (Dec. 23rd 2019) + + * ShareRing Launched (Dec. 6th 2019) + + * Coinify Launched (Dec. 2nd 2019) + + * Kraken Launched (Nov. 6th 2019) + + * Binance US Launched (Nov. 20th 2019) + + * Changelly Launched (Nov. 13th 2019) + + * Probit Launched (Nov. 4th 2019) + + * MetalPay Launched (Sept. 10th 2019) + + * Uphold Launched (Aug. 29th 2019) + + * Crypto.com Launched (Aug. 27th 2019) + + * CoinGate Launched (Dec. 20th 2018) + * Huobi Launched (Oct. 31st 2018) * Bitinka Launched (Jul. 10th 2018) @@ -20,8 +44,6 @@ This roadmap document represents the current areas that are being pursued by the * OKEx Launched (Feb. 1st 2018) - * Nanex Launched (Jan. 31st 2018) - * KuCoin Launched (Jan. 5th 2018) * Recruiting community managers to work alongside the core team to use social media platforms to provide users information about Nano @@ -92,6 +114,8 @@ This roadmap document represents the current areas that are being pursued by the ??? info "Point of Sale" **Status** + * Appia Launched (Dec. 19th 2019) + * [Kappture](https://www.kappture.co.uk), a UK-based POS manufacturer, announces an exclusive integration of Nano into their ePOS systems and releases a [white paper](https://www.kappture.co.uk/files/accepting-cryptocurrency-at-the-point-of-sale.pdf) detailing the decision to only include Nano (June 2019) --- @@ -128,7 +152,7 @@ This roadmap document represents the current areas that are being pursued by the ??? info "Fiat On-Ramp" **Status** - Fiat on-ramps are now available with base pairs including USD, EUR and GBP. + Fiat on-ramps are now available with base pairs including USD, EUR, GBP and more. Continuing to seek out and add additional gateways to provide easy access to Nano for users across the globe. @@ -240,6 +264,9 @@ See the [Upcoming Features](/releases/upcoming-features) page for more details o ??? success "Hardware Wallets" **Status** + + + * Ledger Nano S integration completed (6/11/18) * Jolt Hardware wallet development announced (5/31/18) From ccf02e3fede8e91c7ecadfcc3c90274d56e07e31 Mon Sep 17 00:00:00 2001 From: Zach Hyatt <2311564+zhyatt@users.noreply.github.com> Date: Mon, 17 Feb 2020 09:44:03 -0600 Subject: [PATCH 12/87] Add current release to Active Releases section, update active releases definition (#226) --- docs/releases/node-releases.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/releases/node-releases.md b/docs/releases/node-releases.md index 8a101146d..41e7fa012 100644 --- a/docs/releases/node-releases.md +++ b/docs/releases/node-releases.md @@ -32,10 +32,11 @@ The following release is currently under development. Details about potential fe --- ## Active Releases -The following older releases can still actively participate on the network with other nodes of the same and newer versions. +The following releases can still actively participate on the network by peering with other nodes of the same versions. Any nodes running versions earlier than these will no longer peer with the latest and fall out of sync with the network. | Node Version | Protocol Version | Release Date | Release Notes | GitHub Links | | | | | | | +| 20.0 | 17 | 2019-11-12 | [V20.0](/releases/node-releases/#v200) | [Release](https://github.com/nanocurrency/nano-node/releases/tag/V20.0) - [Milestone](https://github.com/nanocurrency/nano-node/milestone/10) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V19.0...V20.0) | | 19.0 | 17 | 2019-07-11 | [V19.0](/releases/node-releases/#v190) | [Release](https://github.com/nanocurrency/nano-node/releases/tag/V19.0) - [Milestone](https://github.com/nanocurrency/nano-node/milestone/9) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V18.0...V19.0) | | 18.0 | 16 | 2019-02-21 || [Release](https://github.com/nanocurrency/nano-node/releases/tag/V18.0) - [Milestone](https://github.com/nanocurrency/nano-node/milestone/7) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V17.1...V18.0) | From 1a8584a39c5ba6604d830b5bdba4d82a42d6d945 Mon Sep 17 00:00:00 2001 From: Guilherme Lawless Date: Tue, 18 Feb 2020 13:56:08 +0000 Subject: [PATCH 13/87] Update beta work threshold to 1/64x (#235) Closes #221 --- docs/running-a-node/beta-network.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/running-a-node/beta-network.md b/docs/running-a-node/beta-network.md index 241b297fe..4b87637ce 100644 --- a/docs/running-a-node/beta-network.md +++ b/docs/running-a-node/beta-network.md @@ -14,11 +14,9 @@ A few common reasons for joining the beta network include: ## Differences from the main network -Up to node *v19.0*, the main and beta networks had no functional differences. However, starting from *v20.0*, the following differences apply to the **beta network**. - | Parameter | Main Network | Beta Network | Comment | |-----------|--------------|--------------|---------| -| [Proof of Work](/integration-guides/the-basics/#proof-of-work) Difficulty Threshold | `0xffffffc000000000` | `0xfffffc0000000000` | 16 times lower on the beta network | +| [Proof of Work](/integration-guides/the-basics/#proof-of-work) Difficulty Threshold | `0xffffffc000000000` | `0xfffff00000000000` | 64 times lower on the beta network | ## Node release testing From 284373933e1586b7a83776183f2276545b339dc1 Mon Sep 17 00:00:00 2001 From: Guilherme Lawless Date: Tue, 18 Feb 2020 13:58:17 +0000 Subject: [PATCH 14/87] Add details on updating websocket filters (#237) Closes #230 --- docs/integration-guides/advanced.md | 34 +++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/docs/integration-guides/advanced.md b/docs/integration-guides/advanced.md index 508bddadf..53d9f8a98 100644 --- a/docs/integration-guides/advanced.md +++ b/docs/integration-guides/advanced.md @@ -239,6 +239,21 @@ If the action succeeds, the following message will be sent back (note that no me } ``` +### Update + +Some subscriptions can be updated without requiring unsubscribing and re-subscribing to the same topic. A typical message is the following: + +```json +{ + "action": "update", + "topic": "confirmation", + "options": { + ... + } +} +``` + +Updatable filter options are mentioned in the examples below. ### Subscribe/Unsubscribe @@ -344,6 +359,25 @@ Filters for **confirmation** can be used to subscribe only to selected accounts. * When `all_local_accounts` is set to **`true`**, blocks that mention accounts in any wallet will be broadcasted. * `accounts` is a list of additional accounts to subscribe to. Both prefixes are supported. +??? tip "Updating the list of accounts" + _version 21.0+_ + The list of `accounts` for which blocks are broadcasted can be updated (see [Update](#update)): + ```json + { + "action": "update", + "topic": "confirmation", + "options": { + "accounts_add": [ + ... // additional accounts to track + ], + "accounts_del": [ + ... // accounts to remove from tracking + ] + } + } + ``` + Note that this can result in an empty filter. + ##### Response Options ###### Type field From 512d1600fc4daf3ec83d1fd5546a900423ae364e Mon Sep 17 00:00:00 2001 From: Guilherme Lawless Date: Wed, 19 Feb 2020 15:51:02 +0000 Subject: [PATCH 15/87] Work version RPC and websocket updates (#238) For https://github.com/nanocurrency/nano-node/pull/2569 --- docs/commands/rpc-protocol.md | 15 +++++++++++++++ docs/integration-guides/advanced.md | 3 ++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/docs/commands/rpc-protocol.md b/docs/commands/rpc-protocol.md index bf50450a9..21bc52ae6 100644 --- a/docs/commands/rpc-protocol.md +++ b/docs/commands/rpc-protocol.md @@ -631,6 +631,11 @@ Default "false". If "true", "block" in the response will contain a JSON subtree Work value (16 hexadecimal digits string, 64 bit). Uses **work** value for block from external source +**Optional "version"** + +_version 21.0+_ +Work version string. Currently "work_1" is the default and only valid option. Only used if optional **work** is not given. + --- ### block_hash @@ -2647,6 +2652,11 @@ Multiplier from base difficulty (positive number). Uses equivalent difficulty as _version 20.0+_ A valid Nano account. If provided and `use_peers` is set to `true`, this information will be relayed to work peers. +**Optional "version"** + +_version 21.0+_ +Work version string. Currently "work_1" is the default and only valid option. + --- ### work_peer_add @@ -2749,6 +2759,11 @@ _version 20.0+_ Multiplier from base difficulty (positive number). Uses equivalent difficulty as **multiplier** from base difficulty to validate work. ***Note:*** overrides the `difficulty` parameter. +**Optional "version"** + +_version 21.0+_ +Work version string. Currently "work_1" is the default and only valid option. + --- ## Wallet RPCs diff --git a/docs/integration-guides/advanced.md b/docs/integration-guides/advanced.md index 53d9f8a98..9866511af 100644 --- a/docs/integration-guides/advanced.md +++ b/docs/integration-guides/advanced.md @@ -638,7 +638,8 @@ Successful work generation: "request": { "hash": "3ECE2684044C0EAF2CA6B1C72F11AFC5B5A75C00CFF993FB17B6E75F78ABF175", "difficulty": "ffffff999999999a", - "multiplier": "10.000000000009095" + "multiplier": "10.000000000009095", + "version": "work_1" // since V21.0 }, "result": { "source": "192.168.1.101:7000", From b3243f0d07d7406304879b2101e7e43afb6a4f6e Mon Sep 17 00:00:00 2001 From: Wesley Shillingford Date: Thu, 20 Feb 2020 16:03:53 +0000 Subject: [PATCH 16/87] --enable_udp CLI option (#229) Commit once https://github.com/nanocurrency/nano-node/pull/2555 is in. --- docs/commands/command-line-interface.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/docs/commands/command-line-interface.md b/docs/commands/command-line-interface.md index 8c9850c5a..e765f6a42 100644 --- a/docs/commands/command-line-interface.md +++ b/docs/commands/command-line-interface.md @@ -16,7 +16,7 @@ Remove all send IDs from the database (dangerous: not intended for production us Pass node configuration values. This takes precedence over any values in the configuration file. This option can be repeated multiple times. ### --confirmation_height_clear -_version 19.0+_ Sets the confirmation heights of all accounts to 0. Optional `--account` to only reset a single account. +_version 19.0+_ Sets the confirmation heights of all accounts to 0. Optional `--account` to only reset a single account. Do not use while the node is running. ### --daemon Start node daemon. Since version 19.0, network and path will be output, similar to: @@ -203,7 +203,9 @@ Turn off listener on the bootstrap network so incoming TCP (bootstrap) connectio _version 19.0+_ Turn off use of TCP live network (TCP for bootstrap will remain available) -### --disable_udp +### --disable_udp (Deprecated) +_version 21.0+_ +This option has been deprecated and will be removed in future versions. It has no effect because it is now the default. _version 19.0+_ Turn off use of UDP live network @@ -213,5 +215,9 @@ Prevent periodic cleaning of unchecked table ### --disable_unchecked_drop Prevent drop of all unchecked entries at node/wallet start +### --enable_udp +_version 21.0+_ +Turn on use of the UDP live network. + ### --fast_bootstrap Increase bootstrap processor limits to allow more blocks before hitting full state and verify/write more per database call. Also disable deletion of processed unchecked blocks From aef4fc59e205fa5359fec1754da55a3549cffc10 Mon Sep 17 00:00:00 2001 From: Zach Hyatt <2311564+zhyatt@users.noreply.github.com> Date: Fri, 21 Feb 2020 10:39:43 -0600 Subject: [PATCH 17/87] Set explicit background color (#240) * Fix open block example previous as 0 * Reference existing creating transactions section instead of duplicating * Set explicit background color to fix dark background when embedding in dark mode sites/platforms --- docs/stylesheets/extras.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/stylesheets/extras.css b/docs/stylesheets/extras.css index c70fd7e89..36597c0da 100644 --- a/docs/stylesheets/extras.css +++ b/docs/stylesheets/extras.css @@ -1,3 +1,7 @@ +.md-container { + background-color: white; +} + .md-header-nav__button.md-logo img { display: block; height: 48px; From bba7daf041cb89271adcd64ef6c1bd4b81478e30 Mon Sep 17 00:00:00 2001 From: Zach Hyatt <2311564+zhyatt@users.noreply.github.com> Date: Fri, 28 Feb 2020 09:56:01 -0600 Subject: [PATCH 18/87] Add IPC 2.0 details (#242) * Move IPC details to own page and add v2 details for rpc gateway and auth * Add new encodings and added config and encoding to top v2 section * Remove go client reference * Add simpler permissions example and extra warning about work in progress * Move request/response section to top and remove duplicate encodings --- docs/integration-guides/advanced.md | 46 ---- docs/integration-guides/ipc-integration.md | 281 +++++++++++++++++++++ mkdocs.yml | 1 + 3 files changed, 282 insertions(+), 46 deletions(-) create mode 100644 docs/integration-guides/ipc-integration.md diff --git a/docs/integration-guides/advanced.md b/docs/integration-guides/advanced.md index 9866511af..e28f245b5 100644 --- a/docs/integration-guides/advanced.md +++ b/docs/integration-guides/advanced.md @@ -841,49 +841,3 @@ Increase max open files limit. Edit `/etc/security/limits.conf` & add root hard nofile 65535 ``` Then restart session & nano_node service. Check changes with `ulimit -n` - -## IPC Integration - -As of v18, the Nano node exposes a low level IPC interface over which multiple future APIs can be marshalled. Currently, the IPC interface supports the legacy RPC JSON format. The HTTP based RPC server is still available. Because the only IPC encoding is currently "legacy RPC", RPC config options like "enable_control" still apply. - -### Transports -TCP and unix domain sockets are supported. Named pipes and shared memory may be supported in future releases. - -### IPC clients - -A demo web server written in Go is available at https://github.com/nanocurrency/rpc-go. This allows HTTP clients to make JSON requests via IPC, which is compatible with the existing format. The web server can communicate with a node over domain sockets or TCP. - -A NodeJS client is available at https://github.com/meltingice/nano-ipc-js - -A Python client is being developed at https://github.com/guilhermelawless/nano-ipc-py - -### Configuration - -IPC is configured in the `node.ipc.tcp` and `node.ipc.local` sections of the node configuration file. A documented configuration file can be generated by following the instructions in [Configuration](/running-a-node/configuration/#ipc). - -### IPC request/response format - -A client must make requests using the following framing format: - -``` -REQUEST ::= HEADER PAYLOAD -HEADER ::= u8('N') ENCODING u8(0) u8(0) -ENCODING ::= u8(1) -PAYLOAD ::= -``` - -Two encodings currently exist: - -* 1: legacy RPC [_since v18.0_] -* 2: legacy RPC allowing unsafe operations if node is configured so [_since v19.0_] - -The encoding is followed by two reserved zero-bytes. These allow for future extensions, such as versioning and extended headers. - -Note that the framing format does not include a length field - this is optionally placed in the respective payloads. The reason is that some encodings might want to be "streamy", sending responses in chunks, or end with a sentinel. - -``` -LEGACY_RPC_PAYLOAD ::= be32(length) JSON request -LEGACY_RPC_RESPONSE ::= be32(length) JSON response -``` - -In short, JSON requests and responses are 32-bit big-endian length-prefixed. diff --git a/docs/integration-guides/ipc-integration.md b/docs/integration-guides/ipc-integration.md new file mode 100644 index 000000000..6113ee673 --- /dev/null +++ b/docs/integration-guides/ipc-integration.md @@ -0,0 +1,281 @@ +title: IPC Integration | Nano Documentation +description: Learn how to integration into the Nano node using the Interprocess communication (IPC) interface. + +The node manages communications using an IPC interface with v1 introduced in V18 (see [IPC v1 Details](#ipc-v1-details)) and upgraded to v2 in V21 to include more robust options. This latest version supports the original RPC v1 endpoint and introduces RPC v2 for completion in future release, along with an authentication system for more granular control of permissioned calls. + +**Configuration** + +IPC is configured in the `node.ipc.tcp` and `node.ipc.local` sections of the node configuration file. A documented configuration file can be generated by following the instructions in [Configuration](/running-a-node/configuration/#ipc). + +## IPC request/response format + +A client must make requests using the following framing format: + +``` +REQUEST ::= HEADER PAYLOAD +HEADER ::= u8('N') ENCODING u8(0) u8(0) +ENCODING ::= u8(1) +PAYLOAD ::= +``` + +Four encodings currently exist: + +* 1: legacy RPC [_since v18.0_] +* 2: legacy RPC allowing unsafe operations if node is configured so [_since v19.0_] +* 3: flatbuffers [_since v21.0_] +* 4: json over flatbuffers [_since v21.0_] + +The encoding is followed by two reserved zero-bytes. These allow for future extensions, such as versioning and extended headers. + +Note that the framing format does not include a length field - this is optionally placed in the respective payloads. The reason is that some encodings might want to be "streamy", sending responses in chunks, or end with a sentinel. + +``` +LEGACY_RPC_PAYLOAD ::= be32(length) JSON request +LEGACY_RPC_RESPONSE ::= be32(length) JSON response +``` + +In short, JSON requests and responses are 32-bit big-endian length-prefixed. + +## RPC Gateway + +The RPC gateway automatically translates between Flatbuffers and JSON messages over HTTP. The request and response is standard JSON. + +!!! info "Examples require TLS support" + The examples below assumes the node is compiled with TLS support. If not, replace https with http. If using TLS with a self-signed certificate, add --insecure to curl commands. + +### Making calls without a message envelope +A message envelope is a way to tell the server which message type is sent, as well as other information such as credentials. + +For HTTP clients, it's convenient to send messages _without_ an envelope. They do so by appending the message name (using uppercase CamelCase) to the path: + +`POST` to https://www.example.com:7076/api/v2/AccountWeight +``` +{ + "account": "nano_3t6k35gi95xu6tergt6p69ck76ogmitsa8mnijtpxm9fkcm736xtoncuohr3" +} +``` + +The RPC 1.0 `action` field is thus not necessary. + +The response message is always wrapped in an envelope. JSON clients use the `message` property to access the message: + +```json +{ + "time": 1579736914615, + "message_type": "AccountWeightResponse", + "message": { + "voting_weight": "668657804547735335568510480612620716" + } +} +``` + +The `message_type` is always Error if a call fails: + +```json +{ + "time": 1579737134595, + "message_type": "Error", + "message": { + "code": 3, + "message": "Access denied" + } +} +``` + +The `time` property is milliseconds since unix epoch when the message was produced on the server. + +**Relation to the WebSocket response structure** + +The `message` and `time` properties of the response envelope is exactly the same as in WebSockets (https://docs.nano.org/integration-guides/advanced/#websocket-support) Instead of `message_type`, WebSockets use `topic`. This structure should help simplify clients using both HTTP and WebSockets. + +**Headers** + +When calling without an envelope, credentials and a correlation id can still be set using an HTTP header: + +`curl --header "Nano-Api-Key:mywalletuser" ...` + +The correlation header is Nano-Correlation-Id, which can be an arbitrary string. This is usually not useful for request/response JSON clients, but may be valuable if responses from RPCs and WebSocket subscriptions are dealt with in a common message handler on the client. + +### Making calls with message envelopes + +If the message name is missing from the path, an envelope will be expected which tells the node about the message type. + +`POST` to https://www.example.com:7076/api/v2 +```json +{ + "message_type" : "AccountWeight", + "message": { + "account": "nano_3t6k35gi95xu6tergt6p69ck76ogmitsa8mnijtpxm9fkcm736xtoncuohr3" + } +} +``` + +The above is similar to using the "action" property in RPC 1.0. The main difference is that the message itself is always placed in a "message" property. + +The envelope allows additional information to be sent, such as credentials: + +`POST` to https://www.example.com:7076/api/v2 + +```json +{ + "credentials": "mywalletuser", + "message_type" : "AccountWeight", + "message": { + "account": "nano_3t6k35gi95xu6tergt6p69ck76ogmitsa8mnijtpxm9fkcm736xtoncuohr3" + } +} +``` + +**Large requests** +While somewhat less convenient, the envelope approach is desirable for very large requests, because the node doesn't need to copy the message into an envelope. + +--- + +### Flatbuffers mapping + +Here's the corresponding message definitions for the AccountWeight request and response types: + +``` +/** Returns the voting weight for the given account */ +table AccountWeight { + /** A nano_ address */ + account: string (required); +} + +/** Response to AccountWeight */ +table AccountWeightResponse { + /** Voting weight as a decimal number*/ + voting_weight: string (required); +} +``` + +--- + +### Parsing errors + +Any problems with the JSON request will be reported with error details: + +```json +{ + "message_type": "Error", + "message": { + "code": 1, + "message": "Invalid message format: 3: 2: error: required field is missing: account in AccountWeight" + } +} +``` + +--- + +## IPC Authorization + +!!! warning "Work in progress" + Permission settings is a work in progress, and their exact definition and defaults will be part of RPC 2.0 in a future node release. + +With IPC 2.0, the Nano node offers an authorization system. + +The configuration is done in `config-access.toml` by defining users and optional roles. Permissions are then assigned to these. The node only checks for permissions, never roles. This way, you can freely structure roles and users the way that suits your situation. + +There is also a default user with limited default permissions, currently only allowed to use the `AccountWeight` and `IsAlive` calls. This is used when no credentials are given. The permissions of the default user can also be changed in the configuration file. + +Credentials: + +* IPC clients set the credentials in the message envelope +* HTTP(S) clients either use a message envelope or the HTTP Header `Nano-Api-Key` + +!!! tip "Layered security highly recommended" + While permissions enable node operators to pick what functionality to expose to which users, it is still highly recommended that layered security is used. For instance, a wallet backend should expose only required functionality to clients. The backend can then communicate with the node with credentials for additional security. + +### Call example + +```bash +curl --header "Nano-Api-Key:mywalletuser" --insecure -d \ + '{ "account": "nano_3t6k35gi95xu6tergt6p69ck76ogmitsa8mnijtpxm9fkcm736xtoncuohr3"}' \ + https://www.example.com:7076/api/v2/AccountWeight +``` +This uses HTTPS (which the node supports through a build option), and the `--insecure` is there because the node's certificate in this example is self-signed. + +Using an envelope instead of the `AccountWeight` endpoint: + +```json +{ + "credentials": "mywalletuser", + "message_type" : "AccountWeight", + "message": + { + "account": "nano_3t6k35gi95xu6tergt6p69ck76ogmitsa8mnijtpxm9fkcm736xtoncuohr3" + } +} +``` + +`POST` the above to https://www.example.com:7076/api/v2 + +### Configuration examples + +For testing IPC without caring about permissions, this gives access to everything: + +```toml +[[user]] +allow = "unrestricted" +``` + +A more elaborate sample: + +!!! warning "Work in progress" + Permission settings is a work in progress, and their exact definition and defaults will be part of RPC 2.0 in a future node release. + +```toml +[[role]] +id = "service_admin" +allow = "api_service_register, api_service_stop" + +[[user]] +# User id's are typically randomly generated strings which +# matches the credentials in API requests. +id = "user-2bb818ee-6424-4750-8bdb-db23bab7bc57" + +# Inherit all the permissions from these roles +roles = "service_admin" + +# Add additional permissions for this specific user +allow = "wallet_seed_change, api_topic_confirmation" + +# A list of specific permissions can be denied as well +deny = "api_account_weight" + +[[user]] +id = "history-viewer-e3cf8a09-bd74-4ef2-9b84-e14f3db2bb4b" + +# Add specific permission for this user +allow = "api_account_info, api_account_history" + +# Do not inherit any default permissions. This is useful +# for making users with a explicit set of minimum permissions. +# The default user can also be set to bare. That way, a node can be +# exposed with a limited set of default permissions. +bare = true +``` + +### Reload config + +The access file can be reloaded without restarting the node or wallet. For the node: + +`killall -SIGHUP nano_node` + +(actual syntax depends on OS) + +--- + +## IPC V1 Details + +As of v18, the Nano node exposes a low level IPC interface over which multiple future APIs can be marshalled. Currently, the IPC interface supports the legacy RPC JSON format. The HTTP based RPC server is still available. Because the only IPC encoding is currently "legacy RPC", RPC config options like "enable_control" still apply. + +**Transports** + +TCP and unix domain sockets are supported. Named pipes and shared memory may be supported in future releases. + +**IPC clients** + +A NodeJS client is available at https://github.com/meltingice/nano-ipc-js + +A Python client is being developed at https://github.com/guilhermelawless/nano-ipc-py \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index 64f46852e..37ab0bd03 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -34,6 +34,7 @@ nav: - Key Management: integration-guides/key-management.md - Block Confirmation Tracking: integration-guides/block-confirmation-tracking.md - Build Options: integration-guides/build-options.md + - IPC Integration: integration-guides/ipc-integration.md - Advanced: integration-guides/advanced.md - Commands: - RPC Protocol: commands/rpc-protocol.md From 5474e598d71c579a31fa35078f10518228a53a33 Mon Sep 17 00:00:00 2001 From: Guilherme Lawless Date: Wed, 4 Mar 2020 18:41:08 +0000 Subject: [PATCH 19/87] Updates for some recent PRs with new CLI commands (#245) --- docs/commands/command-line-interface.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docs/commands/command-line-interface.md b/docs/commands/command-line-interface.md index e765f6a42..0fd143f96 100644 --- a/docs/commands/command-line-interface.md +++ b/docs/commands/command-line-interface.md @@ -184,6 +184,14 @@ Increase block processor allowed blocks queue size before dropping live network ### --block_processor_verification_size Increase batch signature verification size in block processor, default 0 (limited by config signature_checker_threads), unlimited for fast_bootstrap +### --inactive_votes_cache_size +_version 21.0+_ +Increase cached votes without active elections size, default 16384 + +### --vote_processor_capacity +_version 21.0+_ +Vote processor queue size before dropping votes, default 144k + ### --disable_backup Turn off automatic wallet backup process @@ -219,5 +227,9 @@ Prevent drop of all unchecked entries at node/wallet start _version 21.0+_ Turn on use of the UDP live network. +### --allow_bootstrap_peers_duplicates +_version 21.0+_ +Allow multiple connections to the same peer in bootstrap attempts + ### --fast_bootstrap Increase bootstrap processor limits to allow more blocks before hitting full state and verify/write more per database call. Also disable deletion of processed unchecked blocks From dedfbdc2189a90f6d63ae08d900efd38db0bf3f4 Mon Sep 17 00:00:00 2001 From: Zach Hyatt <2311564+zhyatt@users.noreply.github.com> Date: Thu, 5 Mar 2020 10:27:24 -0800 Subject: [PATCH 20/87] Move websockets details to own page, adjust related links (#243) * Move websockets details to own page, adjust related links * Fix and update link to websockets from IPC guide * Fix link to websocket configuration * Adjust headings organization and expand updating list of account sections Co-authored-by: Guilherme Lawless --- docs/commands/rpc-protocol.md | 2 +- docs/integration-guides/advanced.md | 506 ------------------ .../block-confirmation-tracking.md | 6 +- docs/integration-guides/ipc-integration.md | 2 +- docs/integration-guides/websockets.md | 506 ++++++++++++++++++ docs/releases/node-releases.md | 4 +- docs/running-a-node/configuration.md | 2 +- docs/running-a-node/docker-management.md | 2 +- docs/snippets/beta-network-details-simple.md | 2 +- docs/snippets/network-details-simple.md | 2 +- docs/snippets/network-details.md | 2 +- mkdocs.yml | 1 + 12 files changed, 519 insertions(+), 518 deletions(-) create mode 100644 docs/integration-guides/websockets.md diff --git a/docs/commands/rpc-protocol.md b/docs/commands/rpc-protocol.md index 21bc52ae6..0fef3b4b5 100644 --- a/docs/commands/rpc-protocol.md +++ b/docs/commands/rpc-protocol.md @@ -1130,7 +1130,7 @@ _version 12.0+_ duration, time, confirmation_stats: version 17.0+_ Returns hash, tally weight, election duration (in milliseconds), election confirmation timestamp for recent elections winners; since V20.0, the confirmation request count; since V21.0, the number of blocks and voters. Also returns stats: count of elections in history (limited to 2048) & average duration time. -With version 19.0+ `confirmation_history_size` can be managed in the configuration file to adjust the number of elections to be kept in history and returned by this call. Due to timings inside the node, the default 2048 limit will return all confirmations up to traffic levels of approximately 56 confirmations/sec. To properly track levels above this, increase this value or use the confirmation subscription through the [websocket](/integration-guides/advanced/#websocket-support) instead. +With version 19.0+ `confirmation_history_size` can be managed in the configuration file to adjust the number of elections to be kept in history and returned by this call. Due to timings inside the node, the default 2048 limit will return all confirmations up to traffic levels of approximately 56 confirmations/sec. To properly track levels above this, increase this value or use the confirmation subscription through the [websocket](/integration-guides/websockets) instead. **Request:** ```json diff --git a/docs/integration-guides/advanced.md b/docs/integration-guides/advanced.md index e28f245b5..fb90cc6b1 100644 --- a/docs/integration-guides/advanced.md +++ b/docs/integration-guides/advanced.md @@ -192,512 +192,6 @@ Once the block is created and signed on the `(COLD)` computer, transfer the cont --- -## WebSocket Support - -!!! note "" - Available in version 19.0+ only. When upgrading from version 18 or earlier, the node performs a confirmation height upgrade. During this process, the WebSocket notifications may include confirmations for old blocks. Services must handle duplicate notifications, as well as missed blocks as WebSockets do not provide guaranteed delivery. Reasons for missed blocks include intermittent network issues and internal containers (in the node or clients) reaching capacity. - ---8<-- "multiple-confirmation-notifications.md" - -The Nano node offers notification of confirmed blocks over WebSockets. This offers higher throughput over the HTTP callback, and uses a single ingoing connection instead of an outgoing connection for every block. - -The HTTP callback is still available and both mechanisms can be used at the same time. - -**Example** - -Sample clients are available: - -* Node.js: https://github.com/cryptocode/nano-websocket-sample-nodejs -* Python: https://github.com/guilhermelawless/nano-websocket-sample-py - -**Configuration** - -For details on configuring websockets within a node, see the [websocket section of Running a Node Configuration](/running-a-node/configuration#websocket). - -With the default configuration, localhost clients should connect to `ws://[::1]:7078`. - -### Acknowledgement - -All WebSocket actions can optionally request an acknowledgement. The following is an example for the *subscribe* action. - -```json -{ - "action": "subscribe", - "topic": "confirmation", - "ack": true, - "id": "" -} -``` - -If the action succeeds, the following message will be sent back (note that no message ordering is guaranteed): - -```json -{ - "ack": "subscribe", - "time": "", - "id": "" -} -``` - -### Update - -Some subscriptions can be updated without requiring unsubscribing and re-subscribing to the same topic. A typical message is the following: - -```json -{ - "action": "update", - "topic": "confirmation", - "options": { - ... - } -} -``` - -Updatable filter options are mentioned in the examples below. - -### Subscribe/Unsubscribe - -To receive notifications through the websocket you must subscribe to the specific topic and a standard subscription without filters looks like this: - -```json -{ - "action": "subscribe", - "topic": "confirmation" -} -``` - -Unsubscribing also has the format: - -To unsubscribe: -```json -{ - "action": "unsubscribe", - "topic": "confirmation" -} -``` - -**Optional Filters** - -Some topics support filters as well. Details of the subscription filter options for each topic are included in examples below. - -!!! note - Note that, if **empty** `options` are supplied (see examples below), an empty filter will be used and nothing will be broadcasted. - -**Available Topics** - -Current topics available for subscribing to include: - -* `confirmation` -* `vote` (experimental, unfinished) -* `stopped_election` -* `active_difficulty` - ---- - -#### Confirmations - ---8<-- "multiple-confirmation-notifications.md" - -##### Subscribing - -To subscribe to all confirmed blocks: - -```json -{ - "action": "subscribe", - "topic": "confirmation" -} -``` - -##### Filtering options - -###### Confirmation types - -The node classifies block confirmations into the following categories: - -* **Active quorum**: a block is confirmed through voting (including `block_confirm` RPC if block is previously unconfirmed) -* **Active confirmation height**: a block which is confirmed as a dependent election from a successor through voting (or by `block_confirm` RPC if the block is already confirmed) -* **Inactive**: a block that is not in active elections is implicitly confirmed by a successor. - -By default, the node emits **all** confirmations to WebSocket clients. However, the following filtering option is available: - -```json -{ - "action": "subscribe", - "topic": "confirmation", - "options": { - "confirmation_type": "" - } -} -``` - -The most common values for `confirmation_type` are `all` (default), `active` and `inactive`. - -If more fine-grained filtering is needed, `active` can be replaced with `active_quorum` or `active_confirmation_height` per the definitions above. - -###### Accounts - -Filters for **confirmation** can be used to subscribe only to selected accounts. Once filters are given, blocks from accounts that do not match the options are not broadcasted. - -!!! warning "Legacy blocks never broadcasted" - Note that [legacy blocks](/glossary#legacy-blocks) are never broadcasted if filters are given, even if they match the accounts. - -```json -{ - "action": "subscribe", - "topic": "confirmation", - "options": { - "all_local_accounts": true, - "accounts": [ - "nano_16c4ush661bbn2hxc6iqrunwoyqt95in4hmw6uw7tk37yfyi77s7dyxaw8ce", - "nano_3dmtrrws3pocycmbqwawk6xs7446qxa36fcncush4s1pejk16ksbmakis32c" - ] - } -} -``` - -* When `all_local_accounts` is set to **`true`**, blocks that mention accounts in any wallet will be broadcasted. -* `accounts` is a list of additional accounts to subscribe to. Both prefixes are supported. - -??? tip "Updating the list of accounts" - _version 21.0+_ - The list of `accounts` for which blocks are broadcasted can be updated (see [Update](#update)): - ```json - { - "action": "update", - "topic": "confirmation", - "options": { - "accounts_add": [ - ... // additional accounts to track - ], - "accounts_del": [ - ... // accounts to remove from tracking - ] - } - } - ``` - Note that this can result in an empty filter. - -##### Response Options - -###### Type field - -Confirmations sent through WebSockets, whether filtering is used or not, contains a `confirmation_type` field with values `active_quorum`, `active_confirmation_height` or `inactive`. - -###### Block content inclusion - -By setting `include_block` to `false`, the block content will not be present. Default is `true`. -Because account filtering needs block content to function, setting this flag to false is currently incompatible with account filtering. This restriction may be lifted in future releases. - -```json -{ - "action": "subscribe", - "topic": "confirmation", - "options": { - "include_block": "false", - } -} -``` - -###### Election info - -Details about the election leading to the confirmation can be obtained by setting the `include_election_info` option to true: - -```json -{ - "action": "subscribe", - "topic": "confirmation", - "options": { - "include_election_info": "true" - } -} -``` - -Including the election info option results in the following fields being included: - -* election `duration` in milliseconds -* end of election `time` as milliseconds since epoch -* weight `tally` in raw unit -* the confirmation `request_count` (_version 20.0+_) -* number of blocks and voters (_version 21.0+_) - -##### Sample Results - -!!! note "Differences from the HTTP callback" - * The "block" contains JSON instead of an escaped string. This makes parsing easier. - * The JSON received by the client contains a topic, event time (milliseconds since epoch) and the message itself. - * Subtype is part of block (if it's a state block) - * There is no "is_send" property since "subtype" signifies the intent for state blocks. - * A confirmation type is added, which can be filtered. - -```json -{ - "topic": "confirmation", - "time": "1564935350664", - "message": { - "account": "nano_1tgkjkq9r96zd3pkr7edj8e4qbu3wr3ps6ettzse8hmoa37nurua7faupjhc", - "amount": "15621963968634827029081574961", - "hash": "0E889F83E28152A70E87B92D846CA3D8966F3AEEC65E11B25F7B4E6760C57CA3", - "confirmation_type": "active_quorum", - "election_info": { - "duration": "546", - "time": "1564935348219", - "tally": "42535295865117307936387010521258262528", - "request_count": "1", // since V20.0 - "blocks": "1", // since V21.0 - "voters": "52" // since V21.0 - }, - "block": { - "type": "state", - "account": "nano_1tgkjkq9r96zd3pkr7edj8e4qbu3wr3ps6ettzse8hmoa37nurua7faupjhc", - "previous": "4E9003ABD469D1F58A70518234016797FA654B494A2627B8583052629A91689E", - "representative": "nano_3rw4un6ys57hrb39sy1qx8qy5wukst1iiponztrz9qiz6qqa55kxzx4491or", - "balance": "0", - "link": "3098F4C0D1D8BD889AF078CDFF81E982B8EFA6D6D8FAE954CF0CDC7A256C3F8B", - "link_as_account": "nano_1e6rym1f5p7xj4fh1y8fzy1ym1orxymffp9tx7cey58whakprhwdzuk533th", - "signature": "D5C332587B1A4DEA35B6F03B0A9BEB45C5BBE582060B0252C313CF411F72478721F8E7DA83A779BA5006D571266F32BDE34C1447247F417F8F12101D3ADAF705", - "work": "c950fc037d61e372", - "subtype": "send" - } - } -} -``` - ---- - -#### Votes - -!!! warning "Experimental, unfinished" - This subscription is experimental and not all votes are broadcasted. The message format might change in the future. - -##### Subscribing - -To subscribe to all votes notifications: - -```json -{ - "action": "subscribe", - "topic": "vote" -} -``` - -##### Filtering options - -The following filtering options can be combined. - -###### Representatives - -Used to subscribe only to votes from selected representatives. Once filters are given, votes from representatives that do not match the options are not broadcasted. If the result is an empty filter (for example, all given accounts are invalid), then the filter is not used. A message is logged in the node logs when this happens. - -```json -{ - "action": "subscribe", - "topic": "vote", - "options": { - "representatives": [ - "nano_16c4ush661bbn2hxc6iqrunwoyqt95in4hmw6uw7tk37yfyi77s7dyxaw8ce", - "nano_3dmtrrws3pocycmbqwawk6xs7446qxa36fcncush4s1pejk16ksbmakis32c" - ] - } -} -``` - -###### Vote type - -Votes are one of three types: - -- `replay` , if this exact vote had been seen before -- `vote`, if it is the first time the vote has been seen -- `indeterminate`, when it cannot be determined due to a lack of an associated election - -By default only `vote` type votes are broadcasted, and the others are filtered. To disable these filters set `include_replays` to `true` and/or `include_indeterminate` to `true`. - -```json -{ - "action": "subscribe", - "topic": "vote", - "options": { - "include_replays": "true", - "include_indeterminate": "true" - } -} -``` - -##### Sample Results - -```json -{ - "topic": "vote", - "time": "1554995525343", - "message": { - "account": "nano_1n5aisgwmq1oibg8c7aerrubboccp3mfcjgm8jaas1fwhxmcndaf4jrt75fy", - "signature": "1950700796914893705657789944906107642480343124305202910152471520450456881722545967829502369630995363643731706156278026749554294222131169148120786048025353", - "sequence": "855471574", - "blocks": [ - "6FB9DE5D7908DEB8A2EA391AEA95041587CBF3420EF8A606F1489FECEE75C869" - ], - "type": "replay" // since V21.0, can be vote/replay/indeterminate - } -} -``` - ---- - -#### Stopped elections - -If an election is stopped for any reason, the corresponding block hash is sent on the `"stopped_election"` topic. Reasons for stopping elections include low priority elections being dropped due to processing queue capacity being reached, and forced processing via [`process`](/commands/rpc-protocol/#process) RPC when there's a fork. - -##### Subscribing - -To subscribe to all stopped elections notifications: - -```json -{ - "action": "subscribe", - "topic": "stopped_election" -} -``` - -##### Filtering options - -No filters are currently available for the `stopped_election` topic. - -##### Sample Results - -```json -{ - "topic": "stopped_election", - "time": "1560437195533", - "message": { - "hash": "FA6D344ECAB2C5E1C04E62B2BC6EE072938DD47530AB26E0D5A9A384302FBEB3" - } -} -``` - ---- - -#### Active difficulty - -##### Subscribing - -To subscribe to all active difficulty notifications: - -```json -{ - "action": "subscribe", - "topic": "active_difficulty" -} -``` - -##### Filtering options - -No filters are currently available for the `active_difficulty` topic. - -##### Sample Results - -```json -{ - "topic": "active_difficulty", - "time": "1561661736065", - "message": { - "network_minimum": "ffffffc000000000", - "network_current": "ffffffc81644d01f", - "multiplier": "1.144635159892734" - } -} -``` - -#### Proof of work - -This subscription is available since _v20.0_ - -##### Subscribing - -To subscribe to PoW generation notifications: - -```json -{ - "action": "subscribe", - "topic": "work" -} -``` - -##### Filtering options - -No filters are currently available for the `work` topic. - -##### Sample Results - -Successful work generation: - -```json -{ - "success": "true", - "reason": "", - "duration": "306", - "request": { - "hash": "3ECE2684044C0EAF2CA6B1C72F11AFC5B5A75C00CFF993FB17B6E75F78ABF175", - "difficulty": "ffffff999999999a", - "multiplier": "10.000000000009095", - "version": "work_1" // since V21.0 - }, - "result": { - "source": "192.168.1.101:7000", - "work": "4352c6e222703c57", - "difficulty": "ffffffd2ca03b921", - "multiplier": "22.649415016750655" - }, - "bad_peers": "" -} -``` - -Work generation cancelled with one bad peer (unresponsive or provided invalid work): - -```json -{ - "success": "false", - "reason": "cancelled", - "duration": "539", - "request": { - "hash": "3ECE2684044C0EAF2CA6B1C72F11AFC5B5A75C00CFF993FB17B6E75F78ABF175", - "difficulty": "ffffff999999999a", - "multiplier": "10.000000000009095" - }, - "bad_peers": [ - "192.168.1.101:7000" - ] -} -``` - -Notes: - -- The duration is in milliseconds -- If work generation fails, the notification is similar to the work cancelled notification, except `"reason": "failure"` -- When work generation is done locally it will show `"source": "local"` - -### Keepalive - -This action is available since _v20.0_ - -Keepalive allows checking the liveliness of the websocket without refreshing it or changing a subscription. Use the format: - -```json -{ - "action": "ping" -} -``` - -The expected response is: - -```json -{ - "ack": "pong", - "time": "" -} -``` - ---- - ## HTTP callback Send JSON POST requests with every confirmed block to callback server configured for the node. diff --git a/docs/integration-guides/block-confirmation-tracking.md b/docs/integration-guides/block-confirmation-tracking.md index 646f7a120..3bb8cd1ac 100644 --- a/docs/integration-guides/block-confirmation-tracking.md +++ b/docs/integration-guides/block-confirmation-tracking.md @@ -10,13 +10,13 @@ A primary function of any integration is to track confirmation of blocks on the ### Receiving notifications of confirmation -The recommended method for receiving notifications is via WebSockets through the confirmation `topic`. This method involves sending a subscribe command to start receiving notifications every time a block is confirmed by the network. It is recommended that the `confirmation_type` filtering options are not used for this purpose, to make it less likely to miss a notification. +The recommended method for receiving notifications is via [WebSockets](/integration-guides/websockets) through the confirmation `topic`. This method involves sending a subscribe command to start receiving notifications every time a block is confirmed by the network. It is recommended that the `confirmation_type` filtering options are not used for this purpose, to make it less likely to miss a notification. **Setup process** -1. Update your [WebSocket configuration](/running-a-node/configuration/#websocket) +1. Update your [WebSocket configuration](/running-a-node/configuration/#nodewebsocket) 1. Connect to the WebSocket at the configured endpoint -1. Send a [subscription request for all confirmations](/integration-guides/advanced/#confirmations) including the ack option and validate the subscription request was successful +1. Send a [subscription request for all confirmations](/integration-guides/websockets#confirmations) including the ack option and validate the subscription request was successful 1. Listen for block confirmation notifications from the WebSocket As confirmations are received they can be parsed and handled as necessary. All operations handling notifications from the node on block confirmation should be idempotent as multiple notifications for the same block hash can occur. diff --git a/docs/integration-guides/ipc-integration.md b/docs/integration-guides/ipc-integration.md index 6113ee673..e5b4e5637 100644 --- a/docs/integration-guides/ipc-integration.md +++ b/docs/integration-guides/ipc-integration.md @@ -86,7 +86,7 @@ The `time` property is milliseconds since unix epoch when the message was produc **Relation to the WebSocket response structure** -The `message` and `time` properties of the response envelope is exactly the same as in WebSockets (https://docs.nano.org/integration-guides/advanced/#websocket-support) Instead of `message_type`, WebSockets use `topic`. This structure should help simplify clients using both HTTP and WebSockets. +The `message` and `time` properties of the response envelope is exactly the same as in [WebSockets](/integration-guides/websockets). Instead of `message_type`, WebSockets use `topic`. This structure should help simplify clients using both HTTP and WebSockets. **Headers** diff --git a/docs/integration-guides/websockets.md b/docs/integration-guides/websockets.md new file mode 100644 index 000000000..577b9ee4f --- /dev/null +++ b/docs/integration-guides/websockets.md @@ -0,0 +1,506 @@ +title: WebSockets | Nano Documentation +description: Details for integration into WebSockets for notifications from the Nano node. + +!!! note "" + Available in version 19.0+ only. When upgrading from version 18 or earlier, the node performs a confirmation height upgrade. During this process, the WebSocket notifications may include confirmations for old blocks. Services must handle duplicate notifications, as well as missed blocks as WebSockets do not provide guaranteed delivery. Reasons for missed blocks include intermittent network issues and internal containers (in the node or clients) reaching capacity. + +--8<-- "multiple-confirmation-notifications.md" + +The Nano node offers notification of confirmed blocks over WebSockets. This offers higher throughput over the HTTP callback, and uses a single ingoing connection instead of an outgoing connection for every block. + +The HTTP callback is still available and both mechanisms can be used at the same time. + +## Example clients + +Sample clients are available: + +* Node.js: https://github.com/cryptocode/nano-websocket-sample-nodejs +* Python: https://github.com/guilhermelawless/nano-websocket-sample-py + +## Configuration + +For details on configuring websockets within a node, see the [websocket section of Running a Node Configuration](/running-a-node/configuration#websocket). + +With the default configuration, localhost clients should connect to `ws://[::1]:7078`. + +## Acknowledgement + +All WebSocket actions can optionally request an acknowledgement. The following is an example for the *subscribe* action. + +```json +{ + "action": "subscribe", + "topic": "confirmation", + "ack": true, + "id": "" +} +``` + +If the action succeeds, the following message will be sent back (note that no message ordering is guaranteed): + +```json +{ + "ack": "subscribe", + "time": "", + "id": "" +} +``` + +## Update + +Some subscriptions can be updated without requiring unsubscribing and re-subscribing to the same topic. A typical message is the following: + +```json +{ + "action": "update", + "topic": "confirmation", + "options": { + ... + } +} +``` + +Updatable filter options are mentioned in the examples below. + +## Keepalive + +This action is available since _v20.0_ + +Keepalive allows checking the liveliness of the websocket without refreshing it or changing a subscription. Use the format: + +```json +{ + "action": "ping" +} +``` + +The expected response is: + +```json +{ + "ack": "pong", + "time": "" +} +``` + +## Subscribe/Unsubscribe + +To receive notifications through the websocket you must subscribe to the specific topic and a standard subscription without filters looks like this: + +```json +{ + "action": "subscribe", + "topic": "confirmation" +} +``` + +Unsubscribing also has the format: + +To unsubscribe: +```json +{ + "action": "unsubscribe", + "topic": "confirmation" +} +``` + +**Optional Filters** + +Some topics support filters as well. Details of the subscription filter options for each topic are included in examples below. + +!!! note + Note that, if **empty** `options` are supplied (see examples below), an empty filter will be used and nothing will be broadcasted. + +**Available Topics** + +Current topics available for subscribing to include: + +* `confirmation` +* `vote` (experimental, unfinished) +* `stopped_election` +* `active_difficulty` + +--- + +## Subscription Options + +### Confirmations + +--8<-- "multiple-confirmation-notifications.md" + +##### Subscribing + +To subscribe to all confirmed blocks: + +```json +{ + "action": "subscribe", + "topic": "confirmation" +} +``` + +##### Filtering options + +###### Confirmation types + +The node classifies block confirmations into the following categories: + +* **Active quorum**: a block is confirmed through voting (including `block_confirm` RPC if block is previously unconfirmed) +* **Active confirmation height**: a block which is confirmed as a dependent election from a successor through voting (or by `block_confirm` RPC if the block is already confirmed) +* **Inactive**: a block that is not in active elections is implicitly confirmed by a successor. + +By default, the node emits **all** confirmations to WebSocket clients. However, the following filtering option is available: + +```json +{ + "action": "subscribe", + "topic": "confirmation", + "options": { + "confirmation_type": "" + } +} +``` + +The most common values for `confirmation_type` are `all` (default), `active` and `inactive`. + +If more fine-grained filtering is needed, `active` can be replaced with `active_quorum` or `active_confirmation_height` per the definitions above. + +###### Accounts + +Filters for **confirmation** can be used to subscribe only to selected accounts. Once filters are given, blocks from accounts that do not match the options are not broadcasted. + +!!! warning "Legacy blocks never broadcasted" + Note that [legacy blocks](/glossary#legacy-blocks) are never broadcasted if filters are given, even if they match the accounts. + +```json +{ + "action": "subscribe", + "topic": "confirmation", + "options": { + "all_local_accounts": true, + "accounts": [ + "nano_16c4ush661bbn2hxc6iqrunwoyqt95in4hmw6uw7tk37yfyi77s7dyxaw8ce", + "nano_3dmtrrws3pocycmbqwawk6xs7446qxa36fcncush4s1pejk16ksbmakis32c" + ] + } +} +``` + +* When `all_local_accounts` is set to **`true`**, blocks that mention accounts in any wallet will be broadcasted. +* `accounts` is a list of additional accounts to subscribe to. Both prefixes are supported. + +!!! tip "Updating the list of accounts" + _version 21.0+_ + The list of `accounts` for which blocks are broadcasted can be updated (see [Update](#update)): + ```json + { + "action": "update", + "topic": "confirmation", + "options": { + "accounts_add": [ + ... // additional accounts to track + ], + "accounts_del": [ + ... // accounts to remove from tracking + ] + } + } + ``` + Note that this can result in an empty filter. + +##### Response Options + +###### Type field + +Confirmations sent through WebSockets, whether filtering is used or not, contains a `confirmation_type` field with values `active_quorum`, `active_confirmation_height` or `inactive`. + +###### Block content inclusion + +By setting `include_block` to `false`, the block content will not be present. Default is `true`. +Because account filtering needs block content to function, setting this flag to false is currently incompatible with account filtering. This restriction may be lifted in future releases. + +```json +{ + "action": "subscribe", + "topic": "confirmation", + "options": { + "include_block": "false", + } +} +``` + +###### Election info + +Details about the election leading to the confirmation can be obtained by setting the `include_election_info` option to true: + +```json +{ + "action": "subscribe", + "topic": "confirmation", + "options": { + "include_election_info": "true" + } +} +``` + +Including the election info option results in the following fields being included: + +* election `duration` in milliseconds +* end of election `time` as milliseconds since epoch +* weight `tally` in raw unit +* the confirmation `request_count` (_version 20.0+_) +* number of blocks and voters (_version 21.0+_) + +##### Sample Results + +!!! note "Differences from the HTTP callback" + * The "block" contains JSON instead of an escaped string. This makes parsing easier. + * The JSON received by the client contains a topic, event time (milliseconds since epoch) and the message itself. + * Subtype is part of block (if it's a state block) + * There is no "is_send" property since "subtype" signifies the intent for state blocks. + * A confirmation type is added, which can be filtered. + +```json +{ + "topic": "confirmation", + "time": "1564935350664", + "message": { + "account": "nano_1tgkjkq9r96zd3pkr7edj8e4qbu3wr3ps6ettzse8hmoa37nurua7faupjhc", + "amount": "15621963968634827029081574961", + "hash": "0E889F83E28152A70E87B92D846CA3D8966F3AEEC65E11B25F7B4E6760C57CA3", + "confirmation_type": "active_quorum", + "election_info": { + "duration": "546", + "time": "1564935348219", + "tally": "42535295865117307936387010521258262528", + "request_count": "1", // since V20.0 + "blocks": "1", // since V21.0 + "voters": "52" // since V21.0 + }, + "block": { + "type": "state", + "account": "nano_1tgkjkq9r96zd3pkr7edj8e4qbu3wr3ps6ettzse8hmoa37nurua7faupjhc", + "previous": "4E9003ABD469D1F58A70518234016797FA654B494A2627B8583052629A91689E", + "representative": "nano_3rw4un6ys57hrb39sy1qx8qy5wukst1iiponztrz9qiz6qqa55kxzx4491or", + "balance": "0", + "link": "3098F4C0D1D8BD889AF078CDFF81E982B8EFA6D6D8FAE954CF0CDC7A256C3F8B", + "link_as_account": "nano_1e6rym1f5p7xj4fh1y8fzy1ym1orxymffp9tx7cey58whakprhwdzuk533th", + "signature": "D5C332587B1A4DEA35B6F03B0A9BEB45C5BBE582060B0252C313CF411F72478721F8E7DA83A779BA5006D571266F32BDE34C1447247F417F8F12101D3ADAF705", + "work": "c950fc037d61e372", + "subtype": "send" + } + } +} +``` + +--- + +### Votes + +!!! warning "Experimental, unfinished" + This subscription is experimental and not all votes are broadcasted. The message format might change in the future. + +##### Subscribing + +To subscribe to all votes notifications: + +```json +{ + "action": "subscribe", + "topic": "vote" +} +``` + +##### Filtering options + +The following filtering options can be combined. + +###### Representatives + +Used to subscribe only to votes from selected representatives. Once filters are given, votes from representatives that do not match the options are not broadcasted. If the result is an empty filter (for example, all given accounts are invalid), then the filter is not used. A message is logged in the node logs when this happens. + +```json +{ + "action": "subscribe", + "topic": "vote", + "options": { + "representatives": [ + "nano_16c4ush661bbn2hxc6iqrunwoyqt95in4hmw6uw7tk37yfyi77s7dyxaw8ce", + "nano_3dmtrrws3pocycmbqwawk6xs7446qxa36fcncush4s1pejk16ksbmakis32c" + ] + } +} +``` + +###### Vote type + +Votes are one of three types: + +- `replay` , if this exact vote had been seen before +- `vote`, if it is the first time the vote has been seen +- `indeterminate`, when it cannot be determined due to a lack of an associated election + +By default only `vote` type votes are broadcasted, and the others are filtered. To disable these filters set `include_replays` to `true` and/or `include_indeterminate` to `true`. + +```json +{ + "action": "subscribe", + "topic": "vote", + "options": { + "include_replays": "true", + "include_indeterminate": "true" + } +} +``` + +##### Sample Results + +```json +{ + "topic": "vote", + "time": "1554995525343", + "message": { + "account": "nano_1n5aisgwmq1oibg8c7aerrubboccp3mfcjgm8jaas1fwhxmcndaf4jrt75fy", + "signature": "1950700796914893705657789944906107642480343124305202910152471520450456881722545967829502369630995363643731706156278026749554294222131169148120786048025353", + "sequence": "855471574", + "blocks": [ + "6FB9DE5D7908DEB8A2EA391AEA95041587CBF3420EF8A606F1489FECEE75C869" + ], + "type": "replay" // since V21.0, can be vote/replay/indeterminate + } +} +``` + +--- + +### Stopped elections + +If an election is stopped for any reason, the corresponding block hash is sent on the `"stopped_election"` topic. Reasons for stopping elections include low priority elections being dropped due to processing queue capacity being reached, and forced processing via [`process`](/commands/rpc-protocol/#process) RPC when there's a fork. + +##### Subscribing + +To subscribe to all stopped elections notifications: + +```json +{ + "action": "subscribe", + "topic": "stopped_election" +} +``` + +##### Filtering options + +No filters are currently available for the `stopped_election` topic. + +##### Sample Results + +```json +{ + "topic": "stopped_election", + "time": "1560437195533", + "message": { + "hash": "FA6D344ECAB2C5E1C04E62B2BC6EE072938DD47530AB26E0D5A9A384302FBEB3" + } +} +``` + +--- + +### Active difficulty + +##### Subscribing + +To subscribe to all active difficulty notifications: + +```json +{ + "action": "subscribe", + "topic": "active_difficulty" +} +``` + +##### Filtering options + +No filters are currently available for the `active_difficulty` topic. + +##### Sample Results + +```json +{ + "topic": "active_difficulty", + "time": "1561661736065", + "message": { + "network_minimum": "ffffffc000000000", + "network_current": "ffffffc81644d01f", + "multiplier": "1.144635159892734" + } +} +``` + +### Proof of work + +This subscription is available since _v20.0_ + +##### Subscribing + +To subscribe to PoW generation notifications: + +```json +{ + "action": "subscribe", + "topic": "work" +} +``` + +##### Filtering options + +No filters are currently available for the `work` topic. + +##### Sample Results + +Successful work generation: + +```json +{ + "success": "true", + "reason": "", + "duration": "306", + "request": { + "hash": "3ECE2684044C0EAF2CA6B1C72F11AFC5B5A75C00CFF993FB17B6E75F78ABF175", + "difficulty": "ffffff999999999a", + "multiplier": "10.000000000009095", + "version": "work_1" // since V21.0 + }, + "result": { + "source": "192.168.1.101:7000", + "work": "4352c6e222703c57", + "difficulty": "ffffffd2ca03b921", + "multiplier": "22.649415016750655" + }, + "bad_peers": "" +} +``` + +Work generation cancelled with one bad peer (unresponsive or provided invalid work): + +```json +{ + "success": "false", + "reason": "cancelled", + "duration": "539", + "request": { + "hash": "3ECE2684044C0EAF2CA6B1C72F11AFC5B5A75C00CFF993FB17B6E75F78ABF175", + "difficulty": "ffffff999999999a", + "multiplier": "10.000000000009095" + }, + "bad_peers": [ + "192.168.1.101:7000" + ] +} +``` + +Notes: + +- The duration is in milliseconds +- If work generation fails, the notification is similar to the work cancelled notification, except `"reason": "failure"` +- When work generation is done locally it will show `"source": "local"` \ No newline at end of file diff --git a/docs/releases/node-releases.md b/docs/releases/node-releases.md index 41e7fa012..11bfe3648 100644 --- a/docs/releases/node-releases.md +++ b/docs/releases/node-releases.md @@ -225,7 +225,7 @@ The addition of confirmation height to the database requires the node to validat For those looking to utilize the new WebSocket confirmation subscription or new `confirmed` field in [`block_info`](/commands/rpc-protocol/#block_info) RPC responses, special considerations should be taken if implementing before confirmation height updates are complete: -* If the [websocket confirmation subscription](/integration-guides/advanced/#confirmations) is hooked up to receive all confirmations (default) then notifications for confirmations will come through during the cementing process on a new or upgrading ledger as the confirmation process will occur (it also fires for dependent confirmations) +* If the [websocket confirmation subscription](/integration-guides/websockets) is hooked up to receive all confirmations (default) then notifications for confirmations will come through during the cementing process on a new or upgrading ledger as the confirmation process will occur (it also fires for dependent confirmations) * Calls to [`block_info`](/commands/rpc-protocol/#block_info) for blocks in the ledger before the confirmation height upgrade process began may indicate `confirmed` as `false` despite their having been confirmed on the network before. This is expected behavior. * To validate that confirmation height upgrade is complete, note the `count` value from the [`block_count`](/commands/rpc-protocol/#block_count) RPC when the upgrade is started and once the `cemented` amount returned by this call (include the `include_cemented` option) is higher than that previous count, cementing is in sync. @@ -289,7 +289,7 @@ By default the RPC server will run in the node process, but can be configured to * New `active_elections_size` will limit the number of active elections allowed before dropping occurs. Default is 50,000 but higher settings are recommended for nodes provisioned with 8GB RAM or more * New `bandwidth_limit` will limit the outbound voting traffic to 5MB/s by default -* New `confirmation_history_size` provides an adjustable limit on the batching of confirmations return in the [confirmation_history](/commands/rpc-protocol/#confirmation_history) RPC. Default 2048 which will support up to \~56 confirmations/sec before confirmations may be missed. **The new [websocket setup](/integration-guides/advanced/#websocket-support) with confirmation subscription is recommended over use of the [confirmation_history](/commands/rpc-protocol/#confirmation_history) RPC.** +* New `confirmation_history_size` provides an adjustable limit on the batching of confirmations return in the [confirmation_history](/commands/rpc-protocol/#confirmation_history) RPC. Default 2048 which will support up to \~56 confirmations/sec before confirmations may be missed. **The new [websocket setup](/integration-guides/websockets) with confirmation subscription is recommended over use of the [confirmation_history](/commands/rpc-protocol/#confirmation_history) RPC.** !!! tip "Advanced Configuration" New `vote_generator_delay` allows for tuning performance of bundling votes by hash before sending. diff --git a/docs/running-a-node/configuration.md b/docs/running-a-node/configuration.md index 5ab19dcef..36935110b 100644 --- a/docs/running-a-node/configuration.md +++ b/docs/running-a-node/configuration.md @@ -228,7 +228,7 @@ enable = true port = 7078 ``` -With the above configuration, localhost clients should connect to `ws://[::1]:7078`. For details on how to integrate using websockets, see the [Websocket Support section of the Integration Guides](/integration-guides/advanced#websocket-support). +With the above configuration, localhost clients should connect to `ws://[::1]:7078`. For details on how to integrate using websockets, see the [Websocket Support section of the Integration Guides](/integration-guides/websockets). !!! tip "Configuration for docker nodes" Docker nodes have the default `address` set to `"::ffff:0.0.0.0"`. To allow a connection between the host and the node, include `-p 127.0.0.1:7078:7078` (or another port if changed) in the `docker run` command or equivalent. diff --git a/docs/running-a-node/docker-management.md b/docs/running-a-node/docker-management.md index 9548817b8..39f48f0e2 100644 --- a/docs/running-a-node/docker-management.md +++ b/docs/running-a-node/docker-management.md @@ -46,7 +46,7 @@ docker run --restart=unless-stopped -d \ | `--restart=unless-stopped` | Restarts the container if it crashes | | `nanocurrency/nano:${NANO_TAG}` | Specifies the container to execute with tag | | `-p [::1]:7076:7076`
or `-p 127.0.0.1:7076:7076` | Indicates that only RPC commands originating from the host will be accepted. **WARNING: Without the proper IP configured here, anyone with access to your system's IP address can control your nano\_node.** | -| `-p [::1]:7078:7078`
or `-p 127.0.0.1:7078:7078` | Indicates that only the host can create a connection to the [websocket server](/integration-guides/advanced/#websocket-support). Data throughput can be very high depending on configuration, which could slow down the node if available outside the host. +| `-p [::1]:7078:7078`
or `-p 127.0.0.1:7078:7078` | Indicates that only the host can create a connection to the [websocket server](/integration-guides/websockets). Data throughput can be very high depending on configuration, which could slow down the node if available outside the host. If you wish to use different ports, change the host ports in the `docker run` command; do not change the ports in the [config-node.toml](/running-a-node/configuration) file. diff --git a/docs/snippets/beta-network-details-simple.md b/docs/snippets/beta-network-details-simple.md index a7cd0ce67..0a8ae045e 100644 --- a/docs/snippets/beta-network-details-simple.md +++ b/docs/snippets/beta-network-details-simple.md @@ -2,4 +2,4 @@ * **54000 UDP:** For [live network](/glossary#live-network) activity (fallback since V19.0) * **54000 TCP:** For [live network](/glossary#live-network) activity (since V19.0) and [bootstrap network](/glossary#bootstrap-network) activity * **55000 TCP:** For communication with RPC server. Anyone with access to this port can control your node's RPC. - * **57000 TCP:** For communication with [websocket server](/integration-guides/advanced/#websocket-support). Depending on configuration, data throughput can be very high. \ No newline at end of file + * **57000 TCP:** For communication with [websocket server](/integration-guides/websockets). Depending on configuration, data throughput can be very high. \ No newline at end of file diff --git a/docs/snippets/network-details-simple.md b/docs/snippets/network-details-simple.md index 7334473d6..aadc02b84 100644 --- a/docs/snippets/network-details-simple.md +++ b/docs/snippets/network-details-simple.md @@ -2,4 +2,4 @@ * **7075 UDP:** For [live network](/glossary#live-network) activity (fallback since V19.0) * **7075 TCP:** For [live network](/glossary#live-network) activity (since V19.0) and [bootstrap network](/glossary#bootstrap-network) activity * **7076 TCP:** For communication with RPC server. **Do not expose this outside of your production environment. Anyone with access to this port can control your node's RPC.** - * **7078 TCP:** For communication with [websocket server](/integration-guides/advanced/#websocket-support). Depending on configuration, data throughput can be very high. \ No newline at end of file + * **7078 TCP:** For communication with [websocket server](/integration-guides/websockets). Depending on configuration, data throughput can be very high. \ No newline at end of file diff --git a/docs/snippets/network-details.md b/docs/snippets/network-details.md index c0218809a..c76260919 100644 --- a/docs/snippets/network-details.md +++ b/docs/snippets/network-details.md @@ -5,4 +5,4 @@ | 7075 | UDP | Enabled |
  • Primary node activity port
  • Port configurable in `config-node.toml:node/peering_port`
  • Binds to all adapters; unicast
  • Contents: Raw nano protocol datagrams
  • All standard ledger activity goes through this port
  • If blocked the node will not function
| | 7075 | TCP | Enabled |
  • Node bootstrapping server
  • Share port configuration in `config-node.toml:node/peering_port`
  • Binds to all adapters; unicast
  • Contents: Raw nano protocol stream
  • Transmits the ledger to new nodes in bulk
  • If blocked other nodes will not be able retrieve the ledger from this node
| | 7076 | TCP | Disabled |
  • RPC server
  • Port configurable in `config-rpc.toml:rpc/port`
  • Enable in `config-node.toml:rpc/enable` or by starting `nano_rpc` manually
  • Binds to localhost by default for security reasons, configurable in `config-rpc.toml:rpc/address`; unicast
  • Contents: Unencrypted HTTP requests containing JSON object bodies
  • Allows the node to be queried or controlled through HTTP requests
  • If blocked the node will not be able to be queried or controlled by HTTP
  • **WARNING: Exposing this port externally while setting `enable_control` option to `true` in configs could expose your wallet, allow the node to be stopped remotely and open your node up to other dangerous activity.** See the [Node Security page](/running-a-node/security) for more details.
| -| 7078 | TCP | Disabled |
  • Websocket server
  • Port configurable in `config-node.toml:node.websocket/port`
  • Enable in `config-node.toml:node.websocket/enable`
  • Binds to localhost by default due to data throughput potentially being very high; producer-subscriber broadcast
  • Contents: Standard websocket frames containing JSON-encoded objects
  • See [WebSocket Support](/integration-guides/advanced/#websocket-support) for details on configuration
| \ No newline at end of file +| 7078 | TCP | Disabled |
  • Websocket server
  • Port configurable in `config-node.toml:node.websocket/port`
  • Enable in `config-node.toml:node.websocket/enable`
  • Binds to localhost by default due to data throughput potentially being very high; producer-subscriber broadcast
  • Contents: Standard websocket frames containing JSON-encoded objects
  • See [WebSocket Support](/integration-guides/websockets) for details on configuration
| \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index 37ab0bd03..aca7cc30d 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -34,6 +34,7 @@ nav: - Key Management: integration-guides/key-management.md - Block Confirmation Tracking: integration-guides/block-confirmation-tracking.md - Build Options: integration-guides/build-options.md + - WebSockets: integration-guides/websockets.md - IPC Integration: integration-guides/ipc-integration.md - Advanced: integration-guides/advanced.md - Commands: From bd97b7bf16f31c9426e528b50f676e17bb15b08c Mon Sep 17 00:00:00 2001 From: Zach Hyatt <2311564+zhyatt@users.noreply.github.com> Date: Mon, 9 Mar 2020 13:31:49 -0700 Subject: [PATCH 21/87] Work Generation page (#248) * Add work threads to node config page * Create new work generation page and remove work gen from the basics * Apply suggestions from code review Co-Authored-By: Guilherme Lawless * Minor adjustments based on review * Remove local work peer from work_peers example * Add minimizing latency callout for separate work machine * Add max_work_generate_multiplier as notable config and explain use in wallet behavior section * Move max work gen multiplier to callout lower down page * Update benchmark data to show current timing * Update docs/integration-guides/work-generation.md Co-Authored-By: Guilherme Lawless Co-authored-by: Guilherme Lawless --- docs/integration-guides/the-basics.md | 83 ------- docs/integration-guides/work-generation.md | 209 ++++++++++++++++++ docs/running-a-node/configuration.md | 15 +- ...rnative-work-generation-setup-preferred.md | 2 + mkdocs.yml | 1 + 5 files changed, 226 insertions(+), 84 deletions(-) create mode 100644 docs/integration-guides/work-generation.md create mode 100644 docs/snippets/alternative-work-generation-setup-preferred.md diff --git a/docs/integration-guides/the-basics.md b/docs/integration-guides/the-basics.md index ebd2b1701..09d8a3eff 100644 --- a/docs/integration-guides/the-basics.md +++ b/docs/integration-guides/the-basics.md @@ -34,89 +34,6 @@ The Nano Network achieves consensus using the unique [Open Representative Voting --- -## Proof-of-Work - -Every Nano transaction contains a small Proof-of-Work (PoW) which is only used as an anti-spam measure. It is not used in the consensus mechanism. - -!!! quote "" - **Within the Nano Protocol, Proof-of-Work is used only as an anti-spam measure.** - -In general, PoW is the solving of a simple math problem where a solution can only be found by repeatedly guessing and checking. The harder the problem, the more guesses it takes on average to find an answer. Once found, the non-unique solution can then be verified with a single check. This allows computers to prove (on average) that they spent a certain amount of computation power. - -!!! info - Nano's Proof of Work uses the [blake2b cryptographic hash function](https://blake2.net/) - -### Calculating Work - -The `"work"` field in transactions contains a 64-bit [nonce](https://en.wikipedia.org/wiki/Cryptographic_nonce) found using the blake2b hash function. The nonce satisfies the equation. - -$$ -blake2b(\text{nonce} || \text{prev_block_hash}) \ge \text{threshold} -$$ - -Currently the mainnet's base threshold is `0xffffffc000000000`. When running a node the work is automatically calculated for you, but options exist for delegating work generation to [work peers](/running-a-node/configuration/#work_peers) and allowing GPU acceleration by [enabling OpenCL](/running-a-node/configuration/#opencl_enable). With the addition of Dynamic PoW and rework in V19.0, the threshold used to calculate work can vary under certain conditions. - -!!! info - At the base threshold, any random nonce has a $1.49 * 10^{-8}$ chance of being a correct solution. This results in an average of $67,108,864$ guesses to generate a valid nonce that requires only a single blake2b hash to validate. - -#### First Account Block - -The first block on an account-chain doesn't have a previous (head) block, so a variant of the above equation is used to calculate the `"work"` field: - -$$ -blake2b(\text{nonce} || \text{public_key}) \ge \text{threshold} -$$ - -### Difficulty Multiplier - -Relative difficulty, or difficulty multiplier, describes how much more value a PoW has compared to another. In the node this is typically used to compare against the base threshold, often in relation to rework being performed or validated for the Dynamic PoW feature introduced in V19.0. - -A multiplier can be obtained with the following expression. - -$$ -\frac{(2^{64} - \text{base_difficulty})}{(2^{64} - \text{work_difficulty})} -$$ - -In the inverse direction, in order to get the equivalent difficulty for a certain multiplier, the following expression can be used. - -$$ -2^{64} - \frac{2^{64} - \text{base_difficulty}}{\text{multiplier}} -$$ - -??? example "Code Snippets" - **Python** - ```python - def to_multiplier(difficulty: int, base_difficulty) -> float: - return float((1 << 64) - base_difficulty) / float((1 << 64) - difficulty) - - def from_multiplier(multiplier: float, base_difficulty: int = NANO_DIFFICULTY) -> int: - return int((1 << 64) - ((1 << 64) - base_difficulty) / multiplier) - ``` - - **Rust** - ```rust - fn to_multiplier(difficulty: u64, base_difficulty: u64) -> f64 { - (base_difficulty.wrapping_neg() as f64) / (difficulty.wrapping_neg() as f64) - } - - fn from_multiplier(multiplier: f64, base_difficulty: u64) -> u64 { - (((base_difficulty.wrapping_neg() as f64) / multiplier) as u64).wrapping_neg() - } - ``` - - **C++** - ```cpp - double to_multiplier(uint64_t const difficulty, uint64_t const base_difficulty) { - return static_cast(-base_difficulty) / (-difficulty); - } - - uint64_t from_multiplier(double const multiplier, uint64_t const base_difficulty) { - return (-static_cast((-base_difficulty) / multiplier)); - } - ``` - ---- - ## Account, Key, Seed and Wallet IDs When dealing with the various IDs in the node it is important to understand the function and implication of each one. diff --git a/docs/integration-guides/work-generation.md b/docs/integration-guides/work-generation.md new file mode 100644 index 000000000..88797e9dc --- /dev/null +++ b/docs/integration-guides/work-generation.md @@ -0,0 +1,209 @@ +title: Work Generation | Nano Documentation +description: Understand the best configurations for work generation on the Nano network. + +Every block published to the network, whether a send, receive or representative change block, requires a small, valid [Proof-of-Work](/glossary/#proof-of-work-pow) to be completed above a minimum difficulty floor (threshold). As of V21 this threshold is different for different block types: send and change blocks require a higher threshold, while receive blocks are lower. + +This work value is not used in concensus, but instead is one of the first pieces of data used to validate blocks on the network and is a key component of maintaining consistent quality of service on the network. + +## System considerations + +The following configuration options should be taken into careful consideration when planning work generation resources for services integrating with Nano. These options should be combined to provide the best separation of resources between node participation on network vs. work generation needs. + +!!! warning "Representatives should avoid heavy RPC use and work generation" + Supporting the network by running a representative is recommended for many services, however it is not recommended that voting nodes are used for heavy RPC or work generation activities. Wherever possible, integrations should utilize separate machines for their integration nodes and consensus-producing, voting nodes. + +### CPU vs. GPU + +As GPUs provide faster and more energy efficient work generation than CPUs, and reduce RPC delays during heavy usage periods, they are preferred for any setups able to utilize them. In cases where the node is running on the same machine where work generation is done, GPUs are highly recommended to avoid performance impacts to the node that relying CPU cores can cause. + +### Choosing a machine + +Using a separate machine to manage work generation is recommended where possible. The machine running the node should have a minimum of dedicated resources to keep in sync with the network and any potential interruption due to work generation activities should be avoided. Note that this separation introduces latency, so efforts should be done to keep that to a minimum including running machines in the same region or cluster, avoiding routing work requests through external edge networks, etc. + +### Software for work generation + +Although the node can be configured to generate work directly, there are plans to separate work generation from the node into its own application and process. To help prepare for this future architecturs the preferred setup today is to use the [Nano Work Server](https://github.com/nanocurrency/nano-work-server) for work generation. + +### Number of work peers + +To provide a more robust and redundant work generation setup, multiple [work peers](/running-a-node/configuration/#nodework_peers) can be used. Any node configured with multiple peers will make requests serially from the list of work peers until a successful response is received. + +!!! tip "Disable local CPU work generation" + Since using the same CPU resources the node relies on for work generation can cause performance issues, local CPU work generation should be turned off by setting [`node.work_threads`](/running-a-node/configuration/#nodework_threads) = `0` when using work peers. + +## Recommended configurations + +Below are common, recommended configurations for planning work generation needs. Based on the considerations outlined above, the following general rules apply when planning resources: + +- GPU-based work generation is recommended wherever reasonable +- Running the [Nano Work Server](https://github.com/nanocurrency/nano-work-server) is preferred, regardless of machine or CPU/GPU decisions +- CPU-based work generation on the same machine the node is running is not recommended + +### Heavy RPC, regular work generation + +Services with heavy RPC calls and work generation can benefit from ensuring dedicated resources exist for each process separately. To maximize performance a separate machine running the [Nano Work Server](https://github.com/nanocurrency/nano-work-server) with a GPU attached is recommended: + +1. Setup a machine separate from the node with GPU attached +1. Install the [Nano Work Server](https://github.com/nanocurrency/nano-work-server/blob/master/README.md#installation) +1. Setup a service to start and monitor the work server process using the GPU option `--gpu ` and run `nano-work-server --help` for additional options and details +1. Configure the machine running the node to allow traffic over TCP from the work generation machine's IP address +1. Add the work machine IP address as a [work peer](/running-a-node/configuration/#nodework_peers) in the node's `config-node.toml` file + +!!! info "CPU for lower generation levels" + For services with heavier RPC usage but less work generation needs excluding the GPU in the above example and relying on the CPU resources of the separate machine is also an option. This can be done by setting [`node.work_threads`](/running-a-node/configuration/#nodework_threads) to the appropriate thread count for your needs. + + Make sure to benchmark the machine performance to plan for any potential spikes, as CPU generation is slower. + +### Light RPC, regular work generation + +Services where RPC usage is lighter but regular work generation is needed could move work generation to the same machine if a GPU is used: + +1. Install the [Nano Work Server](https://github.com/nanocurrency/nano-work-server/blob/master/README.md#installation) on the same machine as the node +1. Setup a service to start and monitor the work server process with options for using the GPU - `--gpu ` is required, run `nano-work-server --help` for additional options and details +1. Configure the node to prevent local CPU work generation by setting [`node.work_threads`](/running-a-node/configuration/#nodework_threads) = `0` + +!!! info "Node work generation option" + A less preferred alternative to setting up, running and monitoring the Nano Work Server is to use the node itself to generate work. This should only be done with an attached GPU by setting up and enabling OpenCL with [`opencl.enable`](/running-a-node/configuration/#openclenable) = `true` and adusting `opencl.device` and `opencl.platform` to match your setup. + +--- + +## Benchmarks + +### Benchmark commands + +To benchmark a specific device you want to know the performance for, the node CLI commands or a separate script for the Nano Work Server can be used. + +**Using the Nano node** + +1. Install and configure the Nano node on the machine +1. Run a CLI command: + * CPU: `nano_node --debug_profile_generate` + * GPU: `nano_node --debug_opencl --platform=0 --device=0` (updating `platform` and `device` as necessary) + +This will trigger continual work generation, so let it run until a sufficient sample size of times are generated (at least 100 instances). Compute the average of these times which is the number of microseconds to generate work. + +**Using Nano Work Server** + +If using work server, head over to the README at https://github.com/guilhermelawless/blake2b-pow-bench for details for benchmark script execution. + + +### Example benchmarks + +Below are work generation benchmarks from a variety of consumer-grade CPUs and GPUs updated in late 2017. + +| Device | Epoch v1
# PoW/sec | +|--------|-| +| Nvidia Tesla V100 (AWS) | 6.4 | +| Nvidia Tesla P100 (Google,Cloud) | 4.9 | +| Nvidia Tesla K80 (Google,Cloud) | 1.64 | +| AMD RX 470 OC | 1.59 | +| Nvidia GTX 1060 3GB | 1.25 | +| Intel Core i7 4790K AVX2 | 0.33 | +| Intel Core i7 4790K,WebAssembly (Firefox) | 0.14 | +| Google Cloud 4 vCores 0.14-0.16 | 0.14-0.16 | +| ARM64 server 4 cores (Scaleway) | 0.05-0.07 | + +--- + +## Work calculation details + +### Work equation + +The `"work"` field in transactions contains a 64-bit [nonce](https://en.wikipedia.org/wiki/Cryptographic_nonce) found using the [blake2b hash function](https://blake2.net/). The nonce satisfies the following equations depending on block height: + +**Block Height 1** + +The first block on an account-chain doesn't have a previous (head) block, so the account public key is used: + +$$ +blake2b(\text{nonce} || \text{public_key}) \ge \text{threshold} +$$ + +**Block Height 2 and up** + +Once an account has an existing block the previous block hash is used for all blocks going forward: + +$$ +blake2b(\text{nonce} || \text{prev_block_hash}) \ge \text{threshold} +$$ + +### Difficulty thresholds + +The mainnet's base difficulty threshold is currently `0xffffffc000000000` for all blocks. For a block to be valid, its work field must satisfy the above work equations using this value for threshold. Nodes also prioritize the order in which they confirm transactions based on how far above this threshold the work value is. This only happens in case of saturation. Due to prioritization, it may be desirable to generate work further above the threshold to guarantee faster processing by the network. To assist integrations with managing these work difficulty levels, nodes monitor the trend of difficulty seen on unconfirmed blocks, and expose that value via the [`active_difficulty`](/commands/rpc-protocol/#active_difficulty) RPC. + +**Development node wallet behavior** + +The developer wallet included with the node is configured to pre-cache work at the base threshold and monitor any blocks it publishes to the network for confirmation. If they are not confirmed within 5 seconds, the difficulty on that block will be compared against the active difficulty seen on the network. If the block has a lower work value than the network, then new work generation is requested at the higher level. + +**Difficulty management for external integrations** + +For services aiming to ensure the highest priority on their transactions, the confirmation of published blocks should be monitored by their integration and work levels compared against active difficulty in a similar fashion to the development wallet mentioned above. If work is left at base difficulty there could be delays in the transactions being processed during heavy network usage times. + +!!! tip "Configure max work generate multiplier" + Due to the possibility of network work levels increasing beyond the capabilities of certain work generation setups, the config option [`node.max_work_generate_multiplier`](/running-a-node/configuration/#nodemax_work_generate_multiplier) can be used to limit how high a work value will be requested at. All setups, whether using the developer wallet or an external integration, should implement an appropriate limit which defaults to 64x in V20. + +!!! warning "Upcoming threshold changes and variations by block type" + Plans are underway to change the thresholds based on the type of block with the release of V21 and subsequent distribution of v2 epoch blocks to enable the feature. See the [Development Update: V21 PoW Difficulty Increases article](https://medium.com/nanocurrency/development-update-v21-pow-difficulty-increases-362b5d052c8e) for full details. + +### Pre-caching + +Work for an account can be pre-cached and saved for immediate use on an account as long as it was based on the current frontier block at the time of use. Although this customization must be made externally to the node, it can help level out potential spikes in work generation, especially useful with wallet implementations. + +To accomplish this, after a block is published for an account (whatever type of block), note the _**hash**_ of that block and use it in a RPC [work_generate](https://docs.nano.org/commands/rpc-protocol/#work_generate) call. Note that you may require setting `“use_peers”: “true”`. + +Upon receiving a response, store its value in your database for later use for that account. Note that after a new block is published for the account, that value will no longer be a valid PoW. + +**Pre-caching when next block type is unknown** + +With V21+ the work difficulty thresholds were split by block type. For many integrations, such as wallet providers, the context of what type of block will be generated next for an account is unknown. The recommendation for these cases is to generate difficulty at the higher threshold of a send/change block to ensure delays are avoided and the best user experience is available when using wallets. + +**Utilizing lower work when batching** + +For services that process receiving their pending transactions in bulk the lower work threshold of receive blocks can be taken advantage of. In doing so, the difficulty is 64x lower than a send/change block, but the difficulty will be normalized for proper prioritization if published during heavy network load times. + + +### Difficulty multiplier + +Relative difficulty, or difficulty multiplier, describes how much more value a PoW has compared to another. In the node this is typically used to compare against the base threshold, often in relation to rework being performed or validated for proper priotizing of transactions. This value is available as part of the [`active_difficulty`](/commands/rpc-protocol/#active_difficulty) RPC, but can also be obtained with the following expression: + +$$ +\frac{(2^{64} - \text{base_difficulty})}{(2^{64} - \text{work_difficulty})} +$$ + +In the inverse direction, in order to get the equivalent difficulty for a certain multiplier, the following expression can be used. + +$$ +2^{64} - \frac{2^{64} - \text{base_difficulty}}{\text{multiplier}} +$$ + +??? example "Code Snippets" + **Python** + ```python + def to_multiplier(difficulty: int, base_difficulty) -> float: + return float((1 << 64) - base_difficulty) / float((1 << 64) - difficulty) + + def from_multiplier(multiplier: float, base_difficulty: int = NANO_DIFFICULTY) -> int: + return int((1 << 64) - ((1 << 64) - base_difficulty) / multiplier) + ``` + + **Rust** + ```rust + fn to_multiplier(difficulty: u64, base_difficulty: u64) -> f64 { + (base_difficulty.wrapping_neg() as f64) / (difficulty.wrapping_neg() as f64) + } + + fn from_multiplier(multiplier: f64, base_difficulty: u64) -> u64 { + (((base_difficulty.wrapping_neg() as f64) / multiplier) as u64).wrapping_neg() + } + ``` + + **C++** + ```cpp + double to_multiplier(uint64_t const difficulty, uint64_t const base_difficulty) { + return static_cast(-base_difficulty) / (-difficulty); + } + + uint64_t from_multiplier(double const multiplier, uint64_t const base_difficulty) { + return (-static_cast((-base_difficulty) / multiplier)); + } + ``` diff --git a/docs/running-a-node/configuration.md b/docs/running-a-node/configuration.md index 36935110b..53078af8d 100644 --- a/docs/running-a-node/configuration.md +++ b/docs/running-a-node/configuration.md @@ -194,13 +194,26 @@ Used when offloading work generation to another node or service. Format must be ```toml [node] work_peers = [ - "::ffff:127.0.0.1:7076", "example.work-peer.org:7000" ] ``` --- +#### node.work_threads + +--8<-- "alternative-work-generation-setup-preferred.md" + +Determines the number of local CPU threads to used for work generation. To turn off local CPU work generation set to `0`. See [opencl.enable](#opencl-enable) below for details on setting the node up for GPU-based work generation (preferred). + +--- + +#### node.max_work_generate_multiplier + +Sets a limit on the multiplier above the base difficulty threshold that the node will generate. If the node is setup as a work peer itself, no requests for work higher than this limit will be accepted. Default value is `64.000000000000000`. + +--- + #### opencl.enable To enable GPU acceleration for PoW, set this option to `true`. Other OpenCL parameters may need to be adjusted depending on the desired setup. diff --git a/docs/snippets/alternative-work-generation-setup-preferred.md b/docs/snippets/alternative-work-generation-setup-preferred.md new file mode 100644 index 000000000..07812a00f --- /dev/null +++ b/docs/snippets/alternative-work-generation-setup-preferred.md @@ -0,0 +1,2 @@ +!!! warning "Alternative work generation setup preferred" + Due to potential performance impacts to nodes participating on the network (voting, staying in sync, etc.), when possible this option should be updated to a value of `0` to turn off local work generation. Please see the [Work Generation guide](/integration-guides/work-generation) for best practices. \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index aca7cc30d..0f91e1305 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -33,6 +33,7 @@ nav: - The Basics: integration-guides/the-basics.md - Key Management: integration-guides/key-management.md - Block Confirmation Tracking: integration-guides/block-confirmation-tracking.md + - Work Generation: integration-guides/work-generation.md - Build Options: integration-guides/build-options.md - WebSockets: integration-guides/websockets.md - IPC Integration: integration-guides/ipc-integration.md From 51a1ecbc34c3426a4a1576685e9f756f0e448e1a Mon Sep 17 00:00:00 2001 From: Zach Hyatt <2311564+zhyatt@users.noreply.github.com> Date: Tue, 10 Mar 2020 12:13:51 -0500 Subject: [PATCH 22/87] Upgrade to mermaid 8.4.8 with minor diagram adjustments to support (#254) --- docs/integration-guides/advanced.md | 2 +- docs/javascript/mermaid-loose-security.js | 6 ++++++ docs/whitepaper/english.md | 6 ++++-- mkdocs.yml | 3 ++- 4 files changed, 13 insertions(+), 4 deletions(-) create mode 100644 docs/javascript/mermaid-loose-security.js diff --git a/docs/integration-guides/advanced.md b/docs/integration-guides/advanced.md index fb90cc6b1..ddc2bddae 100644 --- a/docs/integration-guides/advanced.md +++ b/docs/integration-guides/advanced.md @@ -42,7 +42,7 @@ sequenceDiagram COLD-->>COLD: Generate & Sign COLD-->>HOT: Return Signed HOT->>Network: Publish Signed - Note over COLD,HOT: Cold/Hot Wallet transfers are done offline using USB Stick or similar. + Note over COLD,HOT: Cold/Hot Wallet transfers are done
offline using USB Stick or similar. ``` --- diff --git a/docs/javascript/mermaid-loose-security.js b/docs/javascript/mermaid-loose-security.js new file mode 100644 index 000000000..04ad6ec5a --- /dev/null +++ b/docs/javascript/mermaid-loose-security.js @@ -0,0 +1,6 @@ +var config = { + startOnLoad:true, + securityLevel:'loose', +}; + +mermaid.initialize(config); \ No newline at end of file diff --git a/docs/whitepaper/english.md b/docs/whitepaper/english.md index dbc87be8e..9dd336364 100644 --- a/docs/whitepaper/english.md +++ b/docs/whitepaper/english.md @@ -220,7 +220,8 @@ graph LR; Observe-->Quorum; Quorum-->Confirm; ``` -

(a) When no conflict is detected, no further overhead is required.

+ +

(a) When no conflict is detected, no further overhead is required.

```mermaid graph LR; @@ -230,7 +231,8 @@ graph LR; Conflict-->Vote; Vote-->Confirm; ``` -

(b) In the event of a conflicting transaction, nodes vote for the valid transaction.

+ +

(b) In the event of a conflicting transaction, nodes vote for the valid transaction.

Transferring funds from one account to another requires two transactions: a *send* deducting the amount from the sender's balance diff --git a/mkdocs.yml b/mkdocs.yml index 0f91e1305..aa0c6ff7f 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -92,7 +92,8 @@ markdown_extensions: - meta extra_javascript: - 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-MML-AM_CHTML' - - 'https://unpkg.com/mermaid@7.1.2/dist/mermaid.min.js' + - 'https://unpkg.com/mermaid@8.4.8/dist/mermaid.min.js' + - 'javascript/mermaid-loose-security.js' extra_css: - 'stylesheets/extras.css' extra: From 1584530e78acb401a6be24f5bef79afc40276a5d Mon Sep 17 00:00:00 2001 From: Guilherme Lawless Date: Fri, 27 Mar 2020 14:34:51 +0000 Subject: [PATCH 23/87] New fields in confirmation_active (#256) * New fields in confirmation_active * Empty commit to fix CI --- docs/commands/rpc-protocol.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/commands/rpc-protocol.md b/docs/commands/rpc-protocol.md index 0fef3b4b5..b89f73860 100644 --- a/docs/commands/rpc-protocol.md +++ b/docs/commands/rpc-protocol.md @@ -1070,7 +1070,7 @@ Boolean, false by default. Returns a list of block hashes in the account chain s ### confirmation_active _version 16.0+_ -Returns list of active elections roots (excluding stopped & aborted elections). Find info about specific root with [confirmation_info](#confirmation_info) +Returns list of active elections roots (excluding stopped & aborted elections); since V21, also includes the number of unconfirmed and confirmed active elections. Find info about specific root with [confirmation_info](#confirmation_info) !!! note The roots provided are two parts and differ between the first account block and subsequent blocks: @@ -1090,7 +1090,9 @@ Returns list of active elections roots (excluding stopped & aborted elections). { "confirmations": [ "8031B600827C5CC05FDC911C28BBAC12A0E096CCB30FA8324F56C123676281B28031B600827C5CC05FDC911C28BBAC12A0E096CCB30FA8324F56C123676281B2" - ] + ], + "unconfirmed": "133", // since V21.0 + "confirmed": "5" // since V21.0 } ``` @@ -1186,7 +1188,7 @@ If the block is unknown on the node, the following error will be returned: ### confirmation_info _version 16.0+_ -Returns info about active election by **root**. Including announcements count, last winner (initially local ledger block), total tally of voted representatives, concurrent blocks with tally & block contents for each. Using the optional `json_block` is recommended since v19.0. +Returns info about an unconfirmed active election by **root**. Including announcements count, last winner (initially local ledger block), total tally of voted representatives, concurrent blocks with tally & block contents for each. Using the optional `json_block` is recommended since v19.0. !!! note The roots provided are two parts and differ between the first account block and subsequent blocks: From 22332b46164f54e00a492cf4f98a684740d4c5f9 Mon Sep 17 00:00:00 2001 From: Guilherme Lawless Date: Fri, 27 Mar 2020 14:34:59 +0000 Subject: [PATCH 24/87] Update active_difficulty description (#255) * Update active_difficulty description * Empty commit to fix CI --- docs/commands/rpc-protocol.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/commands/rpc-protocol.md b/docs/commands/rpc-protocol.md index b89f73860..24da8aee0 100644 --- a/docs/commands/rpc-protocol.md +++ b/docs/commands/rpc-protocol.md @@ -411,7 +411,7 @@ Boolean, false by default. Only returns blocks which have their confirmation hei ### active_difficulty _version 19.0+_ -Returns the difficulty values (16 hexadecimal digits string, 64 bit) for the minimum required on the network (`network_minimum`) as well as the current active difficulty seen on the network (`network_current`, 5 minute trended average of adjusted difficulty seen on confirmed transactions) which can be used to perform rework for better prioritization of transaction processing. A multiplier of the `network_current` from the base difficulty of `network_minimum` is also provided for comparison. +Returns the difficulty values (16 hexadecimal digits string, 64 bit) for the minimum required on the network (`network_minimum`) as well as the current active difficulty seen on the network (`network_current`, 10 second trended average of adjusted difficulty seen on prioritized transactions) which can be used to perform rework for better prioritization of transaction processing. A multiplier of the `network_current` from the base difficulty of `network_minimum` is also provided for comparison. **Request:** ```json From 9a7c9152940bb3d60af9c36633b2753f9c4b1995 Mon Sep 17 00:00:00 2001 From: Zach Hyatt <2311564+zhyatt@users.noreply.github.com> Date: Fri, 3 Apr 2020 11:13:52 -0500 Subject: [PATCH 25/87] =?UTF-8?q?Add=20snippet=20for=20process=20RPC=20sub?= =?UTF-8?q?type=20recommendation=20and=20use=20in=20RPC=20com=E2=80=A6=20(?= =?UTF-8?q?#258)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add snippet for process RPC subtype recommendation and use in RPC commands and integration guides * Add links back to process RPC in snippet and expand subtype option details --- docs/commands/rpc-protocol.md | 11 ++++++++++- docs/integration-guides/key-management.md | 6 +++--- docs/snippets/process-sub-type-recommended.md | 2 ++ 3 files changed, 15 insertions(+), 4 deletions(-) create mode 100644 docs/snippets/process-sub-type-recommended.md diff --git a/docs/commands/rpc-protocol.md b/docs/commands/rpc-protocol.md index 24da8aee0..fad73ff31 100644 --- a/docs/commands/rpc-protocol.md +++ b/docs/commands/rpc-protocol.md @@ -1888,11 +1888,14 @@ Boolean, false by default. Only returns hashes which have their confirmation hei ### process Publish **block** to the network. Using the optional `json_block` is recommended since v19.0. Since v20.0, blocks are watched for confirmation by default (see optional `watch_work`). +--8<-- "process-sub-type-recommended.md" + **Request:** ```json { "action": "process", "json_block": "true", + "subtype": "send", "block": { "type": "state", "account": "nano_1qato4k7z3spc8gq1zyd8xeqfbzsoxwo36a45ozbrxcatut7up8ohyardu1z", @@ -1920,7 +1923,13 @@ Boolean, false by default. Manually forcing fork resolution if processed block i **Optional "subtype"** _version 18.0+_ -String, empty by default. Additional check for state blocks subtype (send/receive/open/change/epoch). I.e. prevent accidental sending to incorrect accounts instead of receiving pending blocks +String, empty by default. Additional check for state blocks subtype, i.e. prevent accidental sending to incorrect accounts instead of receiving pending blocks. Options: + +* `send` - account balance is reduced +* `receive` - account balance is increased +* `open` - first block on account with account balance initially set higher than 0 +* `change` - account balance is unchanged, representative field value changed to valid public address +* `epoch` - block signed with epoch signer private key (does not allow balance or representative changes) **Optional "json_block"** diff --git a/docs/integration-guides/key-management.md b/docs/integration-guides/key-management.md index 9c68c4b67..b844bee68 100644 --- a/docs/integration-guides/key-management.md +++ b/docs/integration-guides/key-management.md @@ -435,11 +435,14 @@ curl -d '{ Common to all of these transactions is the need to broadcast the completed block to the network. This is achieved by the [`process`](/commands/rpc-protocol#process) RPC command which accepts the block as stringified JSON data. If you followed the previous examples, you used the option `json_block` for RPC [`block_create`](/commands/rpc-protocol#block_create), which allows you use the non-stringified version, as long as you include the same option in this RPC call. A successful broadcast will return the broadcasted block's hash. +--8<-- "process-sub-type-recommended.md" + ##### Request Example ```bash curl -d '{ "action": "process", "json_block": "true", + "subtype": "send", "block": { "type": "state", "account": "nano_1rawdji18mmcu9psd6h87qath4ta7iqfy8i4rqi89sfdwtbcxn57jm9k3q11", @@ -461,9 +464,6 @@ curl -d '{ } ``` -!!! tip "Use block subtype as a sanity check" - Since V18.0, [`process`](/commands/rpc-protocol/#process) has an optional string `"subtype"`, which takes the value of send/receive/open/change. This field can be used to prevent performing an unintended operation with a block, as the request will return an error if the block details don't match the provided `"subtype"`. - !!! tip "Block watching and re-work" Since V20.0, blocks processed using [`process`](/commands/rpc-protocol/#process) are placed under observation by the node for re-broadcasting and re-generation of work under certain conditions. If you wish to disable this feature, add `"watch_work": "false"` to the process RPC command. diff --git a/docs/snippets/process-sub-type-recommended.md b/docs/snippets/process-sub-type-recommended.md new file mode 100644 index 000000000..f5a659ed2 --- /dev/null +++ b/docs/snippets/process-sub-type-recommended.md @@ -0,0 +1,2 @@ +!!! warning "Including `subtype` in `process` RPC calls highly recommended" + In order to avoid potential incorrect sends **including the optional `subtype` parameter on all [`process`](/commands/rpc-protocol/#process) RPC calls is highly recommended**. In the next version of the RPC this parameter will be required. \ No newline at end of file From afdb65a4045c036a59aa7ea6c0d82981d2afcacf Mon Sep 17 00:00:00 2001 From: Mathias Monnerville Date: Mon, 6 Apr 2020 16:06:43 +0200 Subject: [PATCH 26/87] Fix typo in account_create description (#260) --- docs/commands/command-line-interface.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/commands/command-line-interface.md b/docs/commands/command-line-interface.md index 0fd143f96..051db673a 100644 --- a/docs/commands/command-line-interface.md +++ b/docs/commands/command-line-interface.md @@ -1,7 +1,7 @@ # Command Line Interface ### --account_create --wallet=`` -Insert next deterministic key in to `` +Insert next deterministic key into `` ### --account_get --key=`` Get account number for the `` From 35038e2d6bf5b3b248af184abe69aca9576d4001 Mon Sep 17 00:00:00 2001 From: Guilherme Lawless Date: Wed, 8 Apr 2020 08:43:00 +0100 Subject: [PATCH 27/87] Add tcp_excluded stat for rejected incoming connections (#259) --- docs/running-a-node/troubleshooting.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/running-a-node/troubleshooting.md b/docs/running-a-node/troubleshooting.md index ab3f4ba67..85bedb28d 100644 --- a/docs/running-a-node/troubleshooting.md +++ b/docs/running-a-node/troubleshooting.md @@ -247,6 +247,7 @@ details: tcp_accept_success tcp_accept_failure tcp_write_drop + tcp_excluded // ipc invocations From 1b65fe2fdd0e0ef0fb9c43d1497a08a34441d478 Mon Sep 17 00:00:00 2001 From: Mathias Monnerville Date: Wed, 8 Apr 2020 19:23:02 +0200 Subject: [PATCH 28/87] Fix typo in word (#262) --- docs/integration-guides/the-basics.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/integration-guides/the-basics.md b/docs/integration-guides/the-basics.md index 09d8a3eff..b30f6723f 100644 --- a/docs/integration-guides/the-basics.md +++ b/docs/integration-guides/the-basics.md @@ -49,7 +49,7 @@ The reason this is necessary is because we want to store information about each This is the value that you get back when using the `wallet_create` etc RPC commands, and what the node expects for RPC commands with a `"wallet"` field as input. ### Seed -This is a series of 32 random bytes of data, usually represented as a 64 character, uppercase hexadecimal string (0-9A-F). This value is used to derive **account private keys** for accounts by combining it with an index and then putting that into the following hash function where `||` means concatentation and `i` is a 32bit unsigned integer: `PrivK[i] = blake2b(outLen = 32, input = seed || i)` +This is a series of 32 random bytes of data, usually represented as a 64 character, uppercase hexadecimal string (0-9A-F). This value is used to derive **account private keys** for accounts by combining it with an index and then putting that into the following hash function where `||` means concatenation and `i` is a 32bit unsigned integer: `PrivK[i] = blake2b(outLen = 32, input = seed || i)` Private keys are derived **deterministically** from the seed, which means that as long as you put the same seed and index into the derivation function, you will get the same resulting private key every time. Therefore, knowing just the seed allows you to be able to access all the derived private keys from index 0 to 2^32 - 1 (because the index value is a unsigned 32 bit integer). From b401515e4a78cfa20c93848535ae74f3cc43b4cb Mon Sep 17 00:00:00 2001 From: Sergey Kroshnin Date: Sat, 18 Apr 2020 13:02:01 +0300 Subject: [PATCH 29/87] Asynchronous epoch upgrade RPC (#263) * Asynchronous epoch upgrade RPC https://github.com/nanocurrency/nano-node/pull/2704 * Add version specification --- docs/commands/rpc-protocol.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/commands/rpc-protocol.md b/docs/commands/rpc-protocol.md index fad73ff31..1682c3011 100644 --- a/docs/commands/rpc-protocol.md +++ b/docs/commands/rpc-protocol.md @@ -1465,6 +1465,10 @@ Upgrade network to new **epoch** with epoch signer private **key** **Optional "count"** Number. Determines limit of number of accounts to upgrade. +**Optional "threads"** +_version 21.0+_ +Number. Determines limit of work threads to use for concurrent upgrade processes (useful with multiple work peers or high work peer latency). + --- ### frontier_count From a0c3470aa6b277773ba7ec043090c2a30ab098b8 Mon Sep 17 00:00:00 2001 From: Wesley Shillingford Date: Mon, 20 Apr 2020 11:24:34 +0100 Subject: [PATCH 30/87] Add information for reporting a crash on linux with v21 (#265) * Add information for reporting a crash of linux with v21 * Update docs/commands/command-line-interface.md Co-Authored-By: Guilherme Lawless * Gui review comment Co-authored-by: Guilherme Lawless --- docs/commands/command-line-interface.md | 3 ++ docs/running-a-node/troubleshooting.md | 59 ++++++++++++++----------- 2 files changed, 35 insertions(+), 27 deletions(-) diff --git a/docs/commands/command-line-interface.md b/docs/commands/command-line-interface.md index 051db673a..84e841b28 100644 --- a/docs/commands/command-line-interface.md +++ b/docs/commands/command-line-interface.md @@ -59,6 +59,9 @@ Generates fake debug activity ### --debug_output_last_backtrace_dump Output the stacktrace stored after a node crash. +### --debug_generate_crash_report +After a node crash on linux, this command consumes the dump files generated from that crash and produces a "nano_node_crash_report.txt" file. Requires `addr2line` to be installed on the system. See the [troubleshooting guide](/running-a-node/troubleshooting/#what-to-do-if-the-node-crashes-linux) for more information. + ### --debug_profile_bootstrap Profile simulated bootstrap process diff --git a/docs/running-a-node/troubleshooting.md b/docs/running-a-node/troubleshooting.md index 85bedb28d..7267cc593 100644 --- a/docs/running-a-node/troubleshooting.md +++ b/docs/running-a-node/troubleshooting.md @@ -21,25 +21,40 @@ If the node crashes, the most commonly seen message is "Segmentation fault (core When you are done gathering all information, please [create a new Github issue](https://github.com/nanocurrency/nano-node/issues/new), or [reach us on Discord](https://chat.nano.org) in the *#support* channel, detailing your issue as much as possible. -!!! example "Step 1: Getting version information" - This command prints the node build information. - **Not using docker:** - ```bash - ./nano_node --version - ``` - **Using docker:** +!!! note "Getting the latest node log" + The following command will order the log files such that the first one in the output is the most recent. If you restarted the node since the crash, then the relevant log file is not the latest one. Please be careful to give us the relevant log file. + ```bash - docker exec ${NANO_NAME} nano_node --version + # Nano -> NanoBeta if debugging a beta node + ls -dlt ~/Nano/log/* | head ``` - Example output: - ``` - Version 20.0 - Build Info d5abc6ab "GNU C++ version " "7.4.0" "BOOST 107000" BUILT "Aug 6 2019" - ``` + Please provide the complete log file. + +Please follow the steps below for the corresponding node version you are using. Should there be an error obtaining the information in a newer version, the older version steps should then be attempted. +#### _v21_+ nodes + +!!! example "Step 1: Make sure addr2line is installed" + It is likely installed already, consult documentation for your linux distribution if it is not mentioned below: + **Ubuntu** + `apt-get install addr2line` + + **Fedora 22+** + `dnf install addr2line` + +!!! example "(Optional) Step 2: Save crash dump files" + The next step will clean up the dump files generated during the crash, if you wish to keep these then save `nano_node_backtrace.dump`, and all `nano_node_crash_load_address_dump_*.txt` files. -!!! example "Step 2: Getting dmesg information" +!!! example "Step 3: Generate crash report" + Run: + `./nano_node --debug_generate_crash_report` + + This will generate a text file `nano_node_crash_report.txt` please send us the contents of this file. + +#### _v20_ nodes + +!!! example "Step 1: Getting dmesg information" Depending on the error, it is possible you do not find any useful information in this step, in which case please move on to Step 3. Run the following command and look for `nano_node` at the end. If you see a relevant message, gather all messages with a similar timestamp - the number within brackets on the left. @@ -58,7 +73,7 @@ When you are done gathering all information, please [create a new Github issue]( From this output, only the last 3 lines are relevant. -!!! example "Step 3: Getting syslog information" +!!! example "Step 2: Getting syslog information" More information might be available in syslog. Run the following command and look for the time the crash ocurred. ```bash @@ -74,17 +89,7 @@ When you are done gathering all information, please [create a new Github issue]( Include the relevant lines from the output. In this example, the log is similar to the one from Step 2. -!!! example "Step 4: Getting the latest node log" - The following command will order the log files such that the first one in the output is the most recent. If you restarted the node since the crash, then the relevant log file is not the latest one. Please be careful to give us the relevant log file. - - ```bash - # Nano -> NanoBeta if debugging a beta node - ls -dlt ~/Nano/log/* | head - ``` - - Please provide the complete log file. - -!!! example "Step 5: Getting a backtrace dump" +!!! example "Step 3: Getting a backtrace dump" This command will produce some basic information about the error. **Not using docker**: @@ -100,7 +105,7 @@ When you are done gathering all information, please [create a new Github issue]( docker cp ${NANO_NAME}:/crash_files/ . && mv crash_files/* . ``` -!!! example "Step 6: Producing the archive file" +!!! example "Step 4: Producing the archive file" See the output of this command for the name of the file you should include in your report. ```bash FILE="nano_node_crash_$(date +"%Y-%m-%d_%H-%M-%S.tar.gz")" && tar czf $FILE --exclude=*.tar.gz nano_node_* && echo "Created archive $FILE" From cbc677ed40001946aca2e2ec7874f8fc764215b8 Mon Sep 17 00:00:00 2001 From: Guilherme Lawless Date: Tue, 21 Apr 2020 21:17:53 +0100 Subject: [PATCH 31/87] Add note on passing strings via --config (#266) --- docs/running-a-node/configuration.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/running-a-node/configuration.md b/docs/running-a-node/configuration.md index 53078af8d..13e7b4a11 100644 --- a/docs/running-a-node/configuration.md +++ b/docs/running-a-node/configuration.md @@ -161,6 +161,9 @@ Example that enables the RPC and WebSocket servers: `nano_node --config rpc.enable=true --config node.websocket.enable=true` +Strings are passed with escaped quotes (`\"`), such as: + +`nano_node --config node.httpcallback.target=\"api/callback\"` !!! info "Mixing config options on the command line and TOML files" If a config file exists, config values passed in via the command line will take precedence. From ca99bbdafa4861c0693e80e87e3b05f3e15667c4 Mon Sep 17 00:00:00 2001 From: Guilherme Lawless Date: Wed, 22 Apr 2020 18:21:37 +0100 Subject: [PATCH 32/87] Additional ledger stats (#267) https://github.com/nanocurrency/nano-node/pull/2515 --- docs/running-a-node/troubleshooting.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/running-a-node/troubleshooting.md b/docs/running-a-node/troubleshooting.md index 7267cc593..123a694cf 100644 --- a/docs/running-a-node/troubleshooting.md +++ b/docs/running-a-node/troubleshooting.md @@ -200,6 +200,9 @@ details: state_block epoch_block fork + old + gap_previous + gap_source // Message specific keepalive From 8197f93f079712bf79a7479577328297e5a5536c Mon Sep 17 00:00:00 2001 From: Wesley Shillingford Date: Wed, 22 Apr 2020 18:40:14 +0100 Subject: [PATCH 33/87] Node telemetry (#231) * Node telemetry * Update node_telemetry RPC * Add websocket description * Update rpc, add sentence about outliers removed * Gui comments * Update rpc with active difficulty * Add telemetry with protocol details to networking section * Update stats * Update docs/protocol-design/networking.md Co-Authored-By: Guilherme Lawless * Update docs/protocol-design/networking.md Co-Authored-By: Guilherme Lawless * Gui comment typo * Update docs/commands/rpc-protocol.md Co-Authored-By: Guilherme Lawless * Update docs/commands/rpc-protocol.md Co-Authored-By: Guilherme Lawless * Update docs/protocol-design/networking.md Co-Authored-By: Guilherme Lawless * Add Zach's table (thanks) Co-authored-by: Guilherme Lawless --- docs/commands/command-line-interface.md | 4 + docs/commands/rpc-protocol.md | 97 +++++++++++++++++++++++++ docs/integration-guides/websockets.md | 54 +++++++++++++- docs/protocol-design/networking.md | 22 +++++- docs/running-a-node/troubleshooting.md | 11 +++ 5 files changed, 186 insertions(+), 2 deletions(-) diff --git a/docs/commands/command-line-interface.md b/docs/commands/command-line-interface.md index 84e841b28..c88cb3419 100644 --- a/docs/commands/command-line-interface.md +++ b/docs/commands/command-line-interface.md @@ -226,6 +226,10 @@ Prevent periodic cleaning of unchecked table ### --disable_unchecked_drop Prevent drop of all unchecked entries at node/wallet start +### --disable_providing_telemetry_metrics +_version 21.0+_ +Do not provide any telemetry data to nodes requesting it. Responses are still made to requests, but they will have an empty payload. + ### --enable_udp _version 21.0+_ Turn on use of the UDP live network. diff --git a/docs/commands/rpc-protocol.md b/docs/commands/rpc-protocol.md index 1682c3011..0c76d1d13 100644 --- a/docs/commands/rpc-protocol.md +++ b/docs/commands/rpc-protocol.md @@ -1704,6 +1704,103 @@ Removing node ID (restart required to take effect) --- +### node_telemetry +_version 21.0+_ +Return metrics from nodes. See [networking node telemetry](/protocol-design/networking#node-telemetry) for more information. +**Request:** +```json +{ + "action": "node_telemetry" +} +``` +**Response:** +```json +{ + "block_count": "5777903", + "cemented_count": "688819", + "unchecked_count": "443468", + "account_count": "620750", + "bandwidth_cap": "1572864", + "peer_count": "32", + "protocol_version": "18", + "uptime": "556896", + "genesis_block": "F824C697633FAB78B703D75189B7A7E18DA438A2ED5FFE7495F02F681CD56D41", + "major_version": "21", + "minor_version": "0", + "patch_version": "0", + "pre_release_version": "0", + "maker": "0", + "timestamp": "1587055945990", + "active_difficulty": "ffffffcdbf40aa45" +} +``` + +This contains a summarized view of the network with 10% of lower/upper bound results removed to reduce the effect of outliers. Returned values are calculated as follows: + +| Field Name | Response details | +|------------|------------------------------------| +| **block_count** | average count of blocks in ledger (including unconfirmed) | +| **cemented_count** | average count of blocks cemented in ledger (only confirmed) | +| **unchecked_count** | average count of unchecked blocks | +| **account_count** | average count of accounts in ledger | +| **bandwidth_cap** | `0` = unlimited; the mode is chosen if there is more than 1 common result otherwise the results are averaged (excluding `0`) | +| **peer_count** | average count of peers nodes are connected to | +| **\*_version** | mode (most common) of (protocol, major, minor, patch, pre_release) versions | +| **uptime** | number of seconds since the UTC epoch at the point where the response is sent from the peer | +| **genesis_block** | mode (most common) of genesis block hashes | +| **maker** | meant for third party node software implementing the protocol so that it can be distinguished, `0` = Nano Foundation | +| **timestamp** | number of milliseconds since the UTC epoch at the point where the response is sent from the peer | +| **active_difficulty** | the current network difficulty, see [active_difficulty](/commands/rpc-protocol/#active_difficulty) "network_current" | + +This only returns values which have been cached by the ongoing polling of peer metric data. Each response is cached for 60 seconds on the main network and 15 seconds on beta; a few additional seconds are added on for response delays. + +**Optional "raw"** +When setting raw to true metrics from all nodes are displayed. It additionally contains **signature**, **node_id**, **address** and **port** from each peer. + +**Request:** +```json +{ + "action": "node_telemetry", + "raw" : "true" +} +``` + +**Response:** +```json +{ + "metrics": [ + { + "signature": "5F8DEE5F895D53E122FDEB4B1B4118A41F9DDB818C6B299B09DF59131AF9F201BB7057769423F6B0C868B57509177B54D5D2C731405FE607527F5E2B6B2E290F", + "node_id": "DF00C99E4205D74B0B20E2F9399DCF847C6A8FDFD9F47BAB2F95EE8C056B670C" + ... + "address": "::ffff:152.89.106.89", + "port": "54000" + }, + { + "signature": "D691B855D9EC70EA6320DE609EB379EB706845433E034AD22721E8F91BF3A26156F40CCB2E98653F1E63D4CE5F10F530A835DE1B154D1213464E3B9BB9BE4908", + "node_id": "C8172AB14437B245760B418621AD0FF22003F4ED55C1736C41FAFEAFC30FF70B" + ... + "address": "::ffff:95.216.205.215", + "port": "54006" + } + ... + ] +} +``` + +**Optional "address" & "port"** +Get metrics from a specific peer. It accepts both ipv4 and ipv6 addresses +```json +{ + "action": "node_telemetry", + "address": "246.125.123.456", + "port": "7075" +} +``` +Metrics for the local node can be requested using the peering port and any loopback address **127.0.0.1**, **::1** or **[::1]** + +--- + ### peers Returns a list of pairs of online peer IPv6:port and its node protocol network version diff --git a/docs/integration-guides/websockets.md b/docs/integration-guides/websockets.md index 577b9ee4f..4b16e90fa 100644 --- a/docs/integration-guides/websockets.md +++ b/docs/integration-guides/websockets.md @@ -503,4 +503,56 @@ Notes: - The duration is in milliseconds - If work generation fails, the notification is similar to the work cancelled notification, except `"reason": "failure"` -- When work generation is done locally it will show `"source": "local"` \ No newline at end of file +- When work generation is done locally it will show `"source": "local"` + + +### Node telemetry + +This subscription is available since _v21.0_ + +##### Subscribing + +To subscribe to node telemetry response notifications: + +```json +{ + "action": "subscribe", + "topic": "telemetry" +} +``` + +##### Filtering options + +No filters are currently available for the `telemetry` topic. + +##### Sample Results + +```json +{ + "topic": "telemetry", + "time": "1587109495082", + "message": { + "signature": "A133AD584C3C1F44BB7FDA1F53B80DA83EBF5E3D9DCB55D74F0B6899151331C1FB11E4E29CE54F3B4C315FEAEECAD4AF383BDB175ECA76C1744DE51AEB097709", + "node_id": "59A442B93C43623EB250330A31B158D7DF97EFB9365ABACC1A9416968FDCE4CB", + "block_count": "23173713", + "cemented_count": "23173713", + "unchecked_count": "0", + "account_count": "1502809", + "bandwidth_cap": "5242880", + "peer_count": "36", + "protocol_version": "18", + "uptime": "636056", + "genesis_block": "F824C697633FAB78B703D75189B7A7E18DA438A2ED5FFE7495F02F681CD56D41", + "major_version": "21", + "minor_version": "0", + "patch_version": "0", + "pre_release_version": "0", + "maker": "0", + "timestamp": "1587109484086", + "address": "::ffff:165.22.133.254", + "port": "54000" + } +} +``` +See the [node_telemetry](/commands/rpc-protocol/#node_telemetry) RPC command which gives more information about the message response + diff --git a/docs/protocol-design/networking.md b/docs/protocol-design/networking.md index 5a0a8abf4..692de55c2 100644 --- a/docs/protocol-design/networking.md +++ b/docs/protocol-design/networking.md @@ -6,4 +6,24 @@ Nano is designed to use the minimum amount of computing resources possible by co --8<-- "network-details.md" ## IPV4/IPV6 addressing -The system is built to only operate on IPv6 and uses IPv4-mapped IPv6 addresses to connect to IPv4 hosts. \ No newline at end of file +The system is built to only operate on IPv6 and uses IPv4-mapped IPv6 addresses to connect to IPv4 hosts. + +## Node telemetry +In _v21_ node telemetry was added to node. This allows peers to communicate telemetry metrics to each other. For specific details on the message format see `telemetry_ack` in the [protocol specification](https://github.com/nanocurrency/protocol/tree/master/reference). + +The nodes are designed to reply to `telemetry_req` messages. They avoid replying if messages are received from the same peer in quick succession; the minimum time until another reply is 60 seconds on the main network, 15 seconds on beta. This is done to reduce bandwidth. + +Telemetry messsages bypass the node's bandwidth limiter so that services monitoring the network can still do so during when the network is heavily used. Sending `telemetry_req` frequently within this exclusion zone could see your ip blacklisted by other peers. The node safely handles this for you by doing ongoing requests periodically and only sent when valid to do so. + +### Signing +`Telemetry_ack` messages are signed using [ED25519](/protocol-design/signing-hashing-and-key-derivation/#signing-algorithm-ed25519) as follows: + +``` +ED25519(key = node id public key, message = "node id || block count || cemented count|| unchecked count || account count || bandwidth capacity || peer count || protocol version || uptime || genesis block hash || major version || minor version || patch version || pre-release version || maker || timestamp since UTC epoch || active difficulty") +``` + +The node id used in the initial handshake is used for signing. The genesis block hash should be in big endian. +The data is signed so that it cannot be forged by a Man In The Middle (MITM) attack. + +!!! warning "Peer disconnections" + Sending incorrectly signed telemetry data to peers will result in being blacklisted as it is seen as malicious, make sure the signing is correct! Verify signatures against known signing done by node by testing [local telemetry](/commands/rpc-protocol#node_telemetry). Nodes with a different genesis block hash will also be disconnected. diff --git a/docs/running-a-node/troubleshooting.md b/docs/running-a-node/troubleshooting.md index 123a694cf..6ffc19409 100644 --- a/docs/running-a-node/troubleshooting.md +++ b/docs/running-a-node/troubleshooting.md @@ -249,6 +249,8 @@ details: invalid_confirm_req_message invalid_confirm_ack_message invalid_node_id_handshake_message + invalid_telemetry_req_message + invalid_telemetry_ack_message outdated_version // tcp @@ -278,6 +280,15 @@ details: requests_generated_votes, requests_unknown + // telemetry + different_genesis_hash + invalid_signature + node_id_mismatch + request_within_protection_cache_zone + no_response_received + unsolicited_telemetry_ack + failed_send_telemetry_req + dir (direction) : in out From 2af0cea7f0f83fcc796d97f600875b5b92c37311 Mon Sep 17 00:00:00 2001 From: Guilherme Lawless Date: Fri, 24 Apr 2020 17:15:51 +0100 Subject: [PATCH 34/87] Fix link to running docker with a user (#272) Thanks Jonathan! --- docs/running-a-node/security.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/running-a-node/security.md b/docs/running-a-node/security.md index be3c367d5..c81b53d31 100644 --- a/docs/running-a-node/security.md +++ b/docs/running-a-node/security.md @@ -49,4 +49,4 @@ Using a variety of these control measures for server access can increase your re When running a node in Docker there is an extra layer of port controls between the node in the Docker container and the host machine. The default node configuration provided with Docker images in [Docker hub](https://hub.docker.com/r/nanocurrency/nano), along with examples in our documentation [for commands such as `docker run`](/running-a-node/docker-management/#starting), result in allowing RPC access only to the machine hosting the container. This is the recommended setup for most nodes. -To make sure Docker security is understood by any node operator and the setup used is as secure as possible, we recommend reading up on general best practices for using Docker, consider [running Docker with non-root USER](/running-a-node/docker-management.md#docker-user-support) and verifying external access to RPC calls are controlled sufficiently by the Docker host machine. \ No newline at end of file +To make sure Docker security is understood by any node operator and the setup used is as secure as possible, we recommend reading up on general best practices for using Docker, consider [running Docker with non-root USER](/running-a-node/docker-management/#docker-user-support) and verifying external access to RPC calls are controlled sufficiently by the Docker host machine. From 7cbad80443aeea09132a9d0458150a2281c46321 Mon Sep 17 00:00:00 2001 From: Sergey Kroshnin Date: Sat, 25 Apr 2020 08:54:24 +0300 Subject: [PATCH 35/87] Difficulty calculation for RPC block_create (#261) --- docs/commands/rpc-protocol.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/commands/rpc-protocol.md b/docs/commands/rpc-protocol.md index 0c76d1d13..853093e9c 100644 --- a/docs/commands/rpc-protocol.md +++ b/docs/commands/rpc-protocol.md @@ -636,6 +636,11 @@ Work value (16 hexadecimal digits string, 64 bit). Uses **work** value for block _version 21.0+_ Work version string. Currently "work_1" is the default and only valid option. Only used if optional **work** is not given. +**Optional "difficulty"** +_version 21.0+_ +Difficulty value (16 hexadecimal digits string, 64 bit). Uses **difficulty** value to generate work. Only used if optional **work** is not given. +If difficulty and work values are both not given, RPC processor tries to calculate difficulty for work generation based on ledger data: epoch from previous block or from link for receive subtype; block subtype from previous block balance. + --- ### block_hash From dfccf6cda652ff149b6dfe672cf3db0c071a10ac Mon Sep 17 00:00:00 2001 From: Guilherme Lawless Date: Mon, 27 Apr 2020 16:32:03 +0100 Subject: [PATCH 36/87] Websocket new_unconfirmed_block (#274) --- docs/integration-guides/websockets.md | 100 +++++++++++++++++--------- 1 file changed, 67 insertions(+), 33 deletions(-) diff --git a/docs/integration-guides/websockets.md b/docs/integration-guides/websockets.md index 4b16e90fa..93440a7f6 100644 --- a/docs/integration-guides/websockets.md +++ b/docs/integration-guides/websockets.md @@ -111,18 +111,9 @@ Some topics support filters as well. Details of the subscription filter options !!! note Note that, if **empty** `options` are supplied (see examples below), an empty filter will be used and nothing will be broadcasted. -**Available Topics** - -Current topics available for subscribing to include: - -* `confirmation` -* `vote` (experimental, unfinished) -* `stopped_election` -* `active_difficulty` - --- -## Subscription Options +## Available Topics ### Confirmations @@ -529,30 +520,73 @@ No filters are currently available for the `telemetry` topic. ```json { - "topic": "telemetry", - "time": "1587109495082", - "message": { - "signature": "A133AD584C3C1F44BB7FDA1F53B80DA83EBF5E3D9DCB55D74F0B6899151331C1FB11E4E29CE54F3B4C315FEAEECAD4AF383BDB175ECA76C1744DE51AEB097709", - "node_id": "59A442B93C43623EB250330A31B158D7DF97EFB9365ABACC1A9416968FDCE4CB", - "block_count": "23173713", - "cemented_count": "23173713", - "unchecked_count": "0", - "account_count": "1502809", - "bandwidth_cap": "5242880", - "peer_count": "36", - "protocol_version": "18", - "uptime": "636056", - "genesis_block": "F824C697633FAB78B703D75189B7A7E18DA438A2ED5FFE7495F02F681CD56D41", - "major_version": "21", - "minor_version": "0", - "patch_version": "0", - "pre_release_version": "0", - "maker": "0", - "timestamp": "1587109484086", - "address": "::ffff:165.22.133.254", - "port": "54000" - } + "topic": "telemetry", + "time": "1587109495082", + "message": { + "signature": "A133AD584C3C1F44BB7FDA1F53B80DA83EBF5E3D9DCB55D74F0B6899151331C1FB11E4E29CE54F3B4C315FEAEECAD4AF383BDB175ECA76C1744DE51AEB097709", + "node_id": "59A442B93C43623EB250330A31B158D7DF97EFB9365ABACC1A9416968FDCE4CB", + "block_count": "23173713", + "cemented_count": "23173713", + "unchecked_count": "0", + "account_count": "1502809", + "bandwidth_cap": "5242880", + "peer_count": "36", + "protocol_version": "18", + "uptime": "636056", + "genesis_block": "F824C697633FAB78B703D75189B7A7E18DA438A2ED5FFE7495F02F681CD56D41", + "major_version": "21", + "minor_version": "0", + "patch_version": "0", + "pre_release_version": "0", + "maker": "0", + "timestamp": "1587109484086", + "address": "::ffff:165.22.133.254", + "port": "54000" + } } ``` See the [node_telemetry](/commands/rpc-protocol/#node_telemetry) RPC command which gives more information about the message response + +### New unconfirmed blocks + +This subscription is available since _v21.0_ + +!!! danger "These blocks are not confirmed" + Blocks received through this websocket should **not** be used for tracking confirmations, as they are unconfirmed and could be replaced by a conflicting block. Read the [confirmation tracking guide](/integration-guides/block-confirmation-tracking/) for more details. + +##### Subscribing + +To subscribe to node telemetry response notifications: + +```json +{ + "action": "subscribe", + "topic": "new_unconfirmed_block" +} +``` + +##### Filtering options + +No filters are currently available for the `new_unconfirmed_block` topic. + +##### Sample Results + +```json +{ + "topic": "new_unconfirmed_block", + "time": "1587109495082", + "message": { + "type": "state", + "account": "nano_1unw379kgu1iub1caswn5khfk4b6tzinku8ww7uds9z7nwubj3dgt6yzjpiw", + "previous": "A01B96AFE86DC82FECD13F8C3A4F1AC779DCDAF60166F94F1A2CD3987F4609F0", + "representative": "nano_1stofnrxuz3cai7ze75o174bpm7scwj9jn3nxsn8ntzg784jf1gzn1jjdkou", + "balance": "2345399869764044123018481994", + "link": "E0049F6D5D5661A714D8928D287285A0105B07720661F8C8B1FC8EE5B15FC067", + "link_as_account": "nano_3r16mxpotom3nwcfj6nf73sada1ide5q63m3z56d5z6gwprozi59ocyuoxc1", + "signature": "7BDD77BE14552263F9AF5130229A3BBB9038EE4B9C29E66D3D58280EF43B7FAF2DBC7070BD9CA39C844B7068E3AF40B04CE1D5CEEEA142C8FE20EE091A3C320E", + "work": "8ebdd4aa0bf1263e", + "subtype": "receive" + } +} +``` \ No newline at end of file From 708632d30d61cf853643f5a1893d0fcbba7cda79 Mon Sep 17 00:00:00 2001 From: Guilherme Lawless Date: Mon, 27 Apr 2020 16:35:29 +0100 Subject: [PATCH 37/87] Add new and missing stats (#273) --- docs/running-a-node/troubleshooting.md | 58 ++++++++++++++++++-------- 1 file changed, 41 insertions(+), 17 deletions(-) diff --git a/docs/running-a-node/troubleshooting.md b/docs/running-a-node/troubleshooting.md index 6ffc19409..dca31e36b 100644 --- a/docs/running-a-node/troubleshooting.md +++ b/docs/running-a-node/troubleshooting.md @@ -158,7 +158,7 @@ All configuration nodes and values are optional, with the default values shown i ``` type: - traffic + traffic_udp traffic_tcp error message @@ -167,16 +167,19 @@ type: rollback bootstrap vote + election http_callback peering ipc tcp udp - observer confirmation_height + confirmation_observer drop aggregator requests + filter + telemetry details: all @@ -187,12 +190,12 @@ details: http_callback unreachable_host - // observer specific - observer_confirmation_active_quorum - observer_confirmation_active_conf_height - observer_confirmation_inactive - - // ledger, block, bootstrap + // confirmation_observer specific + active_quorum + active_conf_height + inactive_conf_height + + // ledger block bootstrap send receive open @@ -204,20 +207,22 @@ details: gap_previous gap_source - // Message specific + // message specific keepalive publish republish_vote confirm_req confirm_ack node_id_handshake + telemetry_req + telemetry_ack - // bootstrap, callback + // bootstrap callback initiate initiate_lazy initiate_wallet_lazy - // Bootstrap specific + // bootstrap specific bulk_pull bulk_pull_account bulk_pull_deserialize_receive_block @@ -227,15 +232,28 @@ details: bulk_pull_request_failure bulk_push frontier_req + frontier_confirmation_failed + frontier_confirmation_successful error_socket_close - // Vote specific + // vote specific vote_valid vote_replay + vote_indeterminate vote_invalid vote_overflow + + // election specific vote_new vote_cached + late_block + late_block_seconds + election_non_priority + election_priority + election_block_conflict + election_difficulty_update + election_drop + election_restart // udp blocking @@ -257,6 +275,7 @@ details: tcp_accept_success tcp_accept_failure tcp_write_drop + tcp_write_no_socket_drop tcp_excluded // ipc @@ -267,6 +286,8 @@ details: // confirmation height blocks_confirmed + blocks_confirmed_unbounded + blocks_confirmed_bounded invalid_block // [request] aggregator @@ -274,15 +295,18 @@ details: aggregator_dropped // requests - requests_cached_hashes, - requests_generated_hashes, - requests_cached_votes, - requests_generated_votes, + requests_cached_hashes + requests_generated_hashes + requests_cached_votes + requests_generated_votes requests_unknown + // duplicate + duplicate_publish + // telemetry - different_genesis_hash invalid_signature + different_genesis_hash node_id_mismatch request_within_protection_cache_zone no_response_received From d11da08267d80d26a002723ad2cae53af413935d Mon Sep 17 00:00:00 2001 From: Guilherme Lawless Date: Mon, 27 Apr 2020 17:27:38 +0100 Subject: [PATCH 38/87] Updates for CLI work generation and semantics change to RPC work_validate (#269) * Changes to CLI work generation * Changes to RPC work_validate; clarify work_generate (no functional changes) * Add more details on valid_all and valid_receive --- docs/commands/command-line-interface.md | 7 ++- docs/commands/rpc-protocol.md | 68 +++++++++++++++++++------ 2 files changed, 57 insertions(+), 18 deletions(-) diff --git a/docs/commands/command-line-interface.md b/docs/commands/command-line-interface.md index c88cb3419..f5ad623c1 100644 --- a/docs/commands/command-line-interface.md +++ b/docs/commands/command-line-interface.md @@ -67,7 +67,8 @@ Profile simulated bootstrap process ### --debug_profile_generate Profile work generation -Optional `--pow_sleep_interval` in version 19.0+ which sets an amount to sleep (in nanoseconds) between batches of POW calculations when using the CPU. +Optional `--pow_sleep_interval` in version 19.0+ which sets an amount to sleep (in nanoseconds) between batches of POW calculations when using the CPU. +Optionals `--difficulty` and `--multiplier` (only the latter is used if both given) in version 21.0+ to set the work generation threshold. ### --debug_profile_validate Profile work validation @@ -96,7 +97,9 @@ Profile signature verification [Disabled] Profile xorshift algorithms ### --debug_opencl --platform=`` --device=`` --threads=`` -_[Draft]_ Profile OpenCL work generation for `` on `` using `` count. To retrieve available platforms & devices run --diagnostics +_[Draft]_ Profile OpenCL work generation for `` on `` using `` count. To retrieve available platforms & devices run --diagnostics. +Optionals `--difficulty` and `--multiplier` (only the latter is used if both given) in version 21.0+ to set the work generation threshold. + ### --diagnostics Run internal diagnostics and validate existing config file (or create default config file if it doesn't exist) diff --git a/docs/commands/rpc-protocol.md b/docs/commands/rpc-protocol.md index 853093e9c..7ac5f7dc2 100644 --- a/docs/commands/rpc-protocol.md +++ b/docs/commands/rpc-protocol.md @@ -2725,7 +2725,7 @@ Stop generating **work** for block ### work_generate _enable_control required_ -Generates **work** for block. **hash** is the frontier of the account or in the case of an open block, the public key representation of the account which can be found with [account_key](#account_key) +Generates **work** for block. **hash** is the frontier of the account or in the case of an open block, the public key representation of the account which can be found with [account_key](#account_key). --8<-- "enable-control-warning.md" @@ -2733,16 +2733,15 @@ Generates **work** for block. **hash** is the frontier of the account or in the ```json { "action": "work_generate", - "hash": "718CC2121C3E641059BC1C2CFC45666C99E8AE922F7A807B7D07B62C995D79E2", - "difficulty": "ffffffd21c3933f3" + "hash": "718CC2121C3E641059BC1C2CFC45666C99E8AE922F7A807B7D07B62C995D79E2" } ``` **Response:** ```json { - "work": "2bf29ef00786a6bc", - "difficulty": "ffffffd21c3933f4", - "multiplier": "1.394647", + "work": "2b3d689bbcb21dca", + "difficulty": "fffffff93c41ec94", // of the resulting work + "multiplier": "1.182623871097636", // since v19.0, calculated from default base difficulty "hash": "718CC2121C3E641059BC1C2CFC45666C99E8AE922F7A807B7D07B62C995D79E2" // since v20.0 } ``` @@ -2756,7 +2755,7 @@ Without this parameter, the node will only generate work locally. **Optional "difficulty"** _version 19.0+_ -Difficulty value (16 hexadecimal digits string, 64 bit). Uses **difficulty** value to generate work. +Difficulty value (16 hexadecimal digits string, 64 bit). Uses **difficulty** value to generate work. Defaults to the network base difficulty. **Optional "multiplier"** @@ -2843,32 +2842,69 @@ Clear work peers node list until restart --- ### work_validate -Check whether **work** is valid for block +Check whether **work** is valid for block. Provides two values: **valid_all** is `true` if the work is valid at the current network difficulty (work can be used for any block). **valid_receive** is `true` if the work is valid for use in a receive block. + +**Read the details below when using this RPC in V21**. + +!!! warning "Semantics change in V21.0" + In V21.0, when the optional **difficulty** is *not* given, **valid** is no longer included in the response. + + Use the new response fields **"valid_all"** and **"valid_receive"** taking into account the subtype of the block using this work value: + + - **valid_all** validates at the current network difficulty. As soon as the node processes the first [epoch_2 block](/releases/network-upgrades#increased-work-difficulty), this difficulty is increased. + - **valid_receive** is completely accurate **only once the [epoch_2 upgrade](/releases/network-upgrades#increased-work-difficulty) is finished.** Until the upgrade is finished, it is only accurate if the account where this work will be used is already upgraded. The upgrade status of an account can be obtained from [account_info](#account_info). The account is upgraded if "account_version" is `"2"`. **Request:** ```json { "action": "work_validate", "work": "2bf29ef00786a6bc", - "hash": "718CC2121C3E641059BC1C2CFC45666C99E8AE922F7A807B7D07B62C995D79E2", - "difficulty": "ffffffd21c3933f3" + "hash": "718CC2121C3E641059BC1C2CFC45666C99E8AE922F7A807B7D07B62C995D79E2" } ``` -**Response:** +**Response since v21.0:** ```json { - "valid": "1", - "difficulty": "ffffffd21c3933f4", - "multiplier": "1.394647" + "valid_all": "1", + "valid_receive": "1", + "difficulty": "fffffff93c41ec94", + "multiplier": "1.182623871097636" // calculated from the default base difficulty } ``` -*Since version 19.0+:* The response also includes the work `value` in hexadecimal format, and a `multiplier` from the base difficulty (not from the optionally given difficulty). +??? abstract "Response up to v20.0" + ```json + { + "valid": "1", + "difficulty": "fffffff93c41ec94", // since v19.0 + "multiplier": "9.4609" // since v19.0 + } + ``` **Optional "difficulty"** _version 19.0+_ -Difficulty value (16 hexadecimal digits string, 64 bit). Uses **difficulty** value to validate work +Difficulty value (16 hexadecimal digits string, 64 bit). Uses **difficulty** value to validate work. Defaults to the network base difficulty. Response includes extra field **valid** signifying validity at the given difficulty. + +**Request with given "difficulty"** +```json +{ + "action": "work_validate", + "difficulty": "ffffffffffffffff", + "work": "2bf29ef00786a6bc", + "hash": "718CC2121C3E641059BC1C2CFC45666C99E8AE922F7A807B7D07B62C995D79E2" +} +``` +**Response with given "difficulty:** +```json +{ + "valid": "0", + "valid_all": "1", // since v21.0 + "valid_receive": "1", // since v21.0 + "difficulty": "fffffff93c41ec94", + "multiplier": "1.182623871097636" +} +``` **Optional "multiplier"** From eef9d35624bbe9fb7b4bfd71c15325e88aef7004 Mon Sep 17 00:00:00 2001 From: Guilherme Lawless Date: Mon, 27 Apr 2020 19:34:31 +0100 Subject: [PATCH 39/87] CLI compare rep weights (#275) * Group and move debug commands to the end * Add --compare_rep_weights * Explain in a list (Zach review) --- docs/commands/command-line-interface.md | 184 +++++++++++++----------- 1 file changed, 102 insertions(+), 82 deletions(-) diff --git a/docs/commands/command-line-interface.md b/docs/commands/command-line-interface.md index f5ad623c1..66eea752e 100644 --- a/docs/commands/command-line-interface.md +++ b/docs/commands/command-line-interface.md @@ -9,9 +9,22 @@ Get account number for the `` ### --account_key --account=`` Get the public key for `` -### --clear_send_ids +### --clear_send_ids Remove all send IDs from the database (dangerous: not intended for production use) +### --compare_rep_weights +_version 21.0+_ +Displays a summarized comparison between the hardcoded bootstrap weights and representative weights from the ledger. Full comparison is output to logs. Optional [`--data_path`](#-data_pathpath). + +* Differences between total weights (`hardcoded weight` and `ledger weight`) are due to unreceived (pending) blocks +* `mismatched`: + * `samples`: the number of mismatched samples is equal to the number of hardcoded weights, even those with zero mismatch + * `total`: sum of the absolute difference between individual samples from hardcoded and ledger weights + * `mean`: `total` divided by `samples` + * `sigma`: from the samples, a distribution $N(\mu, \sigma)$ is obtained +* `outliers`: mismatch samples above $\mu + \sigma$, for potential inspection +* `newcomers`: large voting weights found in the ledger but not hardcoded, for potential inspection + ### --config key=value Pass node configuration values. This takes precedence over any values in the configuration file. This option can be repeated multiple times. @@ -27,79 +40,7 @@ Path: /home/USER/NanoTest ``` ### --data_path=`` -Use the supplied `` as the data directory - -### --debug_account_count -Display the number of accounts - -### --debug_account_versions -_version 20.0+_ Display the total counts of each version for all accounts (including unpocketed) - -### --debug_block_count -Display the number of blocks - -### --debug_bootstrap_generate -Generate bootstrap sequence of blocks - -### --debug_cemented_block_count -_version 19.0+_ Display the number of cemented blocks (blocks which are under the confirmation height of their accounts) - -### --debug_dump_frontier_unchecked_dependents -_version 19.0+_ Dump frontiers which have matching unchecked keys - -### --debug_dump_online_weight -List online weights table and current online_weights value - -### --debug_dump_representatives -List representatives and weights - -### --debug_mass_activity -Generates fake debug activity - -### --debug_output_last_backtrace_dump -Output the stacktrace stored after a node crash. - -### --debug_generate_crash_report -After a node crash on linux, this command consumes the dump files generated from that crash and produces a "nano_node_crash_report.txt" file. Requires `addr2line` to be installed on the system. See the [troubleshooting guide](/running-a-node/troubleshooting/#what-to-do-if-the-node-crashes-linux) for more information. - -### --debug_profile_bootstrap -Profile simulated bootstrap process - -### --debug_profile_generate -Profile work generation -Optional `--pow_sleep_interval` in version 19.0+ which sets an amount to sleep (in nanoseconds) between batches of POW calculations when using the CPU. -Optionals `--difficulty` and `--multiplier` (only the latter is used if both given) in version 21.0+ to set the work generation threshold. - -### --debug_profile_validate -Profile work validation - -### --debug_profile_kdf -Profile kdf function - -### --debug_profile_sign -Profile signature generation - -### --debug_profile_votes -Profile vote verification - -### --debug_stacktrace -_version 20.0+_ -Prints a stacktrace example, useful to verify that it includes the desired information, such as files, function names and line numbers - -### --debug_validate_blocks -_version 19.0+_ -Validate blocks in the ledger, includes checks for confirmation height - -### --debug_verify_profile -Profile signature verification - -### --debug_xorshift_profile -[Disabled] Profile xorshift algorithms - -### --debug_opencl --platform=`` --device=`` --threads=`` -_[Draft]_ Profile OpenCL work generation for `` on `` using `` count. To retrieve available platforms & devices run --diagnostics. -Optionals `--difficulty` and `--multiplier` (only the latter is used if both given) in version 21.0+ to set the work generation threshold. - +Use the supplied `` as the data directory. ### --diagnostics Run internal diagnostics and validate existing config file (or create default config file if it doesn't exist) @@ -176,6 +117,7 @@ Prints default representative for `` ### --wallet_representative_set --wallet=`` --account=`` Set `` as default representative for `` + ## Launch options When initially starting the nano_node or nano_wallet as a service the following launch options are available. @@ -191,11 +133,11 @@ Increase block processor allowed blocks queue size before dropping live network Increase batch signature verification size in block processor, default 0 (limited by config signature_checker_threads), unlimited for fast_bootstrap ### --inactive_votes_cache_size -_version 21.0+_ +_version 21.0+_ Increase cached votes without active elections size, default 16384 ### --vote_processor_capacity -_version 21.0+_ +_version 21.0+_ Vote processor queue size before dropping votes, default 144k ### --disable_backup @@ -218,9 +160,10 @@ _version 19.0+_ Turn off use of TCP live network (TCP for bootstrap will remain available) ### --disable_udp (Deprecated) -_version 21.0+_ +_version 21.0+_ This option has been deprecated and will be removed in future versions. It has no effect because it is now the default. -_version 19.0+_ + +_version 19.0+_ Turn off use of UDP live network ### --disable_unchecked_cleanup @@ -229,17 +172,94 @@ Prevent periodic cleaning of unchecked table ### --disable_unchecked_drop Prevent drop of all unchecked entries at node/wallet start -### --disable_providing_telemetry_metrics -_version 21.0+_ +### --disable_providing_telemetry_metrics +_version 21.0+_ Do not provide any telemetry data to nodes requesting it. Responses are still made to requests, but they will have an empty payload. ### --enable_udp -_version 21.0+_ +_version 21.0+_ Turn on use of the UDP live network. ### --allow_bootstrap_peers_duplicates -_version 21.0+_ +_version 21.0+_ Allow multiple connections to the same peer in bootstrap attempts ### --fast_bootstrap Increase bootstrap processor limits to allow more blocks before hitting full state and verify/write more per database call. Also disable deletion of processed unchecked blocks + + +## Debug commands + +### --debug_account_count +Display the number of accounts + +### --debug_account_versions +_version 20.0+_ +Display the total counts of each version for all accounts (including unpocketed) + +### --debug_block_count +Display the number of blocks + +### --debug_bootstrap_generate +Generate bootstrap sequence of blocks + +### --debug_cemented_block_count +_version 19.0+_ +Display the number of cemented blocks (blocks which are under the confirmation height of their accounts) + +### --debug_dump_frontier_unchecked_dependents +_version 19.0+_ +Dump frontiers which have matching unchecked keys + +### --debug_dump_online_weight +List online weights table and current online_weights value + +### --debug_dump_representatives +List representatives and weights + +### --debug_mass_activity +Generates fake debug activity + +### --debug_output_last_backtrace_dump +Output the stacktrace stored after a node crash. + +### --debug_generate_crash_report +After a node crash on linux, this command consumes the dump files generated from that crash and produces a "nano_node_crash_report.txt" file. Requires `addr2line` to be installed on the system. See the [troubleshooting guide](/running-a-node/troubleshooting/#what-to-do-if-the-node-crashes-linux) for more information. + +### --debug_profile_bootstrap +Profile simulated bootstrap process + +### --debug_profile_generate +Profile work generation +Optional `--pow_sleep_interval` in version 19.0+ which sets an amount to sleep (in nanoseconds) between batches of POW calculations when using the CPU. +Optionals `--difficulty` and `--multiplier` (only the latter is used if both given) in version 21.0+ to set the work generation threshold. + +### --debug_profile_validate +Profile work validation + +### --debug_profile_kdf +Profile kdf function + +### --debug_profile_sign +Profile signature generation + +### --debug_profile_votes +Profile vote verification + +### --debug_stacktrace +_version 20.0+_ +Prints a stacktrace example, useful to verify that it includes the desired information, such as files, function names and line numbers + +### --debug_validate_blocks +_version 19.0+_ +Validate blocks in the ledger, includes checks for confirmation height + +### --debug_verify_profile +Profile signature verification + +### --debug_xorshift_profile +[Disabled] Profile xorshift algorithms + +### --debug_opencl --platform=`` --device=`` --threads=`` +_[Draft]_ Profile OpenCL work generation for `` on `` using `` count. To retrieve available platforms & devices run --diagnostics. +Optionals `--difficulty` and `--multiplier` (only the latter is used if both given) in version 21.0+ to set the work generation threshold. \ No newline at end of file From 19c5323e7b01fa97b58478f4ca047a1a4be339ad Mon Sep 17 00:00:00 2001 From: Zach Hyatt Date: Mon, 27 Apr 2020 15:56:12 -0500 Subject: [PATCH 40/87] Ledger Management page (#264) * Add SSD free space recommendations * Switch to ledger management page and expand content * Minor typo update * Add guide to updating the node on another machine * Minor updates based on feedback * Update downloaded ledger section title and recommended actions, other minor tweaks * Update docs/running-a-node/ledger-management.md Co-Authored-By: Guilherme Lawless * Update docs/running-a-node/ledger-management.md Co-Authored-By: Guilherme Lawless * Adjust and simplify usage of --compare_rep_weights CLI * Add new heading for top, link from some related spots * Update docs/running-a-node/ledger-management.md Co-Authored-By: Guilherme Lawless * Update docs/running-a-node/ledger-management.md Co-Authored-By: Guilherme Lawless * Update docs/running-a-node/ledger-management.md Co-Authored-By: Guilherme Lawless * Update docs/running-a-node/ledger-management.md Co-Authored-By: Guilherme Lawless * Update docs/running-a-node/ledger-management.md Co-Authored-By: Guilherme Lawless * Update docs/running-a-node/ledger-management.md Co-Authored-By: Guilherme Lawless Co-authored-by: Guilherme Lawless --- .travis.yml | 1 + docs/running-a-node/ledger-management.md | 187 ++++++++++++++++++ docs/running-a-node/rocksdb-ledger-backend.md | 89 --------- docs/snippets/hardware-recommendations.md | 4 +- mkdocs.yml | 8 +- requirements.txt | 1 + 6 files changed, 197 insertions(+), 93 deletions(-) create mode 100644 docs/running-a-node/ledger-management.md delete mode 100644 docs/running-a-node/rocksdb-ledger-backend.md diff --git a/.travis.yml b/.travis.yml index ed27a819a..b5c5d8bca 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,6 +11,7 @@ before_script: - pip install pymdown-extensions - pip install mkdocs-material - pip install MarkdownHighlight + - pip install mkdocs-redirects script: - | if [ "${TRAVIS_PULL_REQUEST}" != "false" ]; then diff --git a/docs/running-a-node/ledger-management.md b/docs/running-a-node/ledger-management.md new file mode 100644 index 000000000..8660e970f --- /dev/null +++ b/docs/running-a-node/ledger-management.md @@ -0,0 +1,187 @@ +# Ledger Management + +## Ledger file + +The node automatically manages the full Nano ledger in the `data.ldb` file which can be found in the data folder at these locations: + +--8<-- "folder-locations.md" + +This file will grow in size as the ledger does. As of April 2020 there are over 49 million blocks in the ledger which requires at least 26GB of free space. See [hardware recommendations](/running-a-node/node-setup/#hardware-recommendations) for more preferred node specs. + +!!! warning "RocksDB uses many files" + The above details are for the default LMDB database setup. If using RocksDB, please note that it uses potentially 100s of SST files to manage the ledger so details should be followed from the [RocksDB Ledger Backend](#rocksdb-ledger-backend) section below. + +!!! tip "Updating the node may require a lengthy ledger upgrade" + Read the [guide](#updating-the-node) further down this page for some tips on how to minimize downtime during an update. + +--- + +## Bootstrapping + +When starting a new node the ledger must be downloaded and kept updated in order to participate on the network properly. This is done automatically via bootstrapping - the node downloads and verifies blocks from other nodes across the network. This process can take hours to days to complete depending on network conditions and [hardware specifications](/running-a-node/node-setup/#hardware-recommendations). + +!!! warning "Restarting node during bootstrapping not recommended" + It is **highly recommended to avoid restarting the node during bootstrapping** as this can cause extra delays in the syncing process. An exception can be made when it is very clear from calls to the [`block_count`](/commands/rpc-protocol/#block_count) RPC that block counts are stuck for multiple hours. + +### Tuning options + +Depending on machine and networking resources, the bootstrap performance can be improved by updating the following [configuration](/running-a-node/configuration/) values: + +* `node.bootstrap_connections_max`: up to max of `128` +* `node.bootstrap_connections`: up to max of `16` + +The additional resource usage these options cause should be considered, especially if left during normal operation (after initial bootstrap is complete). + +--- + +## Downloaded ledger files + +!!! tip "Always backup your ledgers file" + Whenever you are attempting to change the ledger, it is highly recommended you create backups of the existing `data.ldb` file to ensure you have a rollback point if issues are encountered. + +To avoid bootstrapping times, a [ledger file](#ledger-file) (`data.ldb`) can be downloaded off-network and added to the data file used by the node. This process is sometimes referred to as a "fast sync". The Nano Foundation provides a daily ledger file download in the #ledger channel of our [Discord server](https://chat.nano.org). This is posted by `SergSW` and contains checksums for validation. + +Before using this method there are a few considerations to ensure it is done safely: + +### Data source +Make sure you trust the source providing the data to you. If you are unfamiliar with the individual or organization providing the ledger, consider other options for the data or fallback to the default of [bootstrapping](#bootstrapping) from the network. + +### Validating blocks and voting weights +Blocks are confirmed using the voting weight of representatives and these weights are determined by the account balances assigned to those representatives. In addition, the node releases contain a hard-coded set of representative weights captured at the time of the node release to help this process during bootstrapping. + +If looking to use a downloaded ledger there is a risk of it providing inaccurate representative voting weights. Although the potential impacts of this are minimal, below are some recommended steps to take which can help provide additional confidence the ledger can be used. + +1. **Scan the ledger for integrity using the [`--debug_validate_blocks`](/commands/command-line-interface/#-debug_validate_blocks) CLI command**. If issues are found they should be inspected carefully and alternative sources of a ledger may need to be considered as failures with this command have a high chance of indicating potentially malicious behavior. +1. **Review the differences in representative voting weights by running the [`--compare_rep_weights`](/commands/command-line-interface/#-compare_rep_weights) CLI command** with the new ledger in the default data folder (old ledger backed up) or in a different data folder by using the optional `--data_path` argument. This will compare the new ledger voting weights against the hardcoded values in the node (set at the time of release). See the [CLI command](/commands/command-line-interface/#-compare_rep_weights) for details on the output with special attention paid to entries in the `outliers` and `newcomers` sections. By inspecting those addresses in public explorers such as [Nanocrawler.cc](https://nanocrawler.cc), this can help to determine if voting weight may have been manipulated in the downloaded ledger. + +If you need support with this process or need help in evaluating some of the CLI command results, join the [Node and Representative Management category](https://forum.nano.org/c/node-and-rep/8) on the [Nano Forums](https://forum.nano.org). + +### Confirmation data +Within each account on the ledger a confirmation height is set. This indicates the height of the last block on that chain where quorum was observed on the network. This is set locally by the node and a new ledger file may include this information with it. If the ledger is from a trusted source this confirmation data can be kept, which will save bandwidth and resources on the network by not querying for votes to verify these confirmations. + +If confirmation data for the ledger is not trusted the [--confirmation_height_clear](/commands/command-line-interface/#-confirmation_height_clear) CLI can be used to clear these out. + +--- + +## Updating the node + +Occasionally, updating to the [latest node version](/releases/node-releases/#current-release) requires upgrading the existing ledger which can have the following effects: + +- Significant downtime, from a few minutes to several hours, during which the node RPC is not accessible and no voting occurs. The upgrade is especially slower if the ledger is not on an SSD. +- Temporary increased disk space usage - up to 3x the current ledger size in total (e.g. 60GB for a 20GB ledger) + +In order to minimize downtime, consider performing the update in a different machine, and replacing the [ledger file](#ledger-file) once complete. Note the following instructions, where **Machine A** has the node and ledger, and **Machine B** will be updating it. + +1. Create a directory `/home//Nano_Update` on Machine B. +1. Stop the node on Machine A. +1. Copy the `data.ldb` [file](#ledger-management) from Machine A to `/home//Nano_Update/data.ldb` on Machine B. +1. Start the node again on Machine A. +1. Download the [latest node version](/releases/node-releases/#current-release). For the purposes of this guide, using a binary is easier. +1. Run the following command (varies based on your operating system): `./nano_node --debug_block_count --data_path /home//Nano_Update --config node.logging.log_to_cerr=true` +1. The message *"Upgrade in progress..."* will be displayed if a ledger upgrade is required. Wait until the command finishes and **do not stop the upgrade preemptively**. +1. Copy `/home//Nano_Update/data.ldb` from Machine B to a temporary location on Machine A. **do not overwrite data.ldb on Machine A while the node is running**. +1. Stop and **upgrade** to the latest node version on Machine A as you would do normally. +1. Stop the node on Machine A in case upgrading restarted it. +1. Replace `/home//Nano/data.ldb` with the transferred file. +1. Restart the node. + +In the event that you are unable to upgrade the ledger on another machine but would still like to minimize downtime, consider [obtaining the ledger from another source](#downloaded-ledger-files) as a last resource. + +--- + +## RocksDB Ledger Backend + +!!! warning "RocksDB is experimental, do not use in production" + RocksDB is being included in _V20.0_ as experimental only. Future versions of the node may allow for production use of RocksDB, however old experimental RocksDB ledgers are not guarenteed to be compatible and may require resyncing from scratch. + + If you are testing RocksDB and want to discuss results, configurations, etc. please join the forum topic here: https://forum.nano.org/t/rocksdb-ledger-backend-testing/111 + +The node ledger currently uses LMDB (Lightning memory-mapped database) by default as the data store. As of _v20+_ the option to use RocksDB becomes available as an experimental option. +This document will not go into much detail about theses key-value data stores as there is a lot of information available online. +It is anticipated that bootstrapping will be slower using RocksDB during the initial version at least, but live traffic should be faster due to singluar writes being cached in memory and flushed to disk in bulk. + +Using RocksDB requires a few extra steps as it is an externally required dependency which requires a recent version of RocksDB, so older repositories may not be sufficient, it also requires `zlib`. If using the docker node, skip to [Enable RocksDB](#enable-rocksdb). + +### Installation + +**Linux** +Ubuntu 19.04 and later: +``` +sudo apt-get install zlib1g-dev +sudo apt-get install librocksdb-dev +``` +Otherwise: +``` +sudo apt-get install zlib1g-dev +export USE_RTTI=1 +git clone https://github.com/facebook/rocksdb.git +cd rocksdb +make static_lib +make install +``` +**MacOS** +`brew install rocksdb` + +**Windows** +Recommended way is to use `vcpkg`: + +* add `set (VCPKG_LIBRARY_LINKAGE static)` to the top of `%VCPKG_DIR%\ports\rocksdb\portfile.cmake` +* `vcpkg install rocksdb:x64-windows` + +For other or more detailed instructions visit the official page: +https://github.com/facebook/rocksdb/blob/master/INSTALL.md + +### Build node with RocksDB support +Once RocksDB is installed successfully, the node must be built with RocksDB support using the CMake variable `-DNANO_ROCKSDB=ON` + +The following CMake options can be used to specify where the RocksDB and zlib libraries are if they cannot be found automatically: +``` +ROCKSDB_INCLUDE_DIRS +ROCKSDB_LIBRARIES +ZLIB_LIBRARY +ZLIB_INCLUDE_DIR +``` +### Enable RocksDB +This can be enabled by adding the following to the `config-node.toml` file: + +``` +[node.rocksdb] +enable = true +``` + +There are many other options which can be set. Due to RocksDB generally using more memory the defaults have been made pessimistic in order to run on a wider range of lower end devices. Recommended settings if on a system with 8GB or more RAM (see TOML comments in the generated file for more information on what these do): + +``` +[node.rocksdb] +bloom_filter_bits = 10 +block_cache = 1024 +enable_pipelined_write=true +cache_index_and_filter_blocks=true +block_size=64 +memtable_size=128 +num_memtables=3 +total_memtable_size=0 +``` +Comparision: + +| LMDB | RocksDB | +| :-------: | :---------: | +| Tested with the node for many years | Experimental status | +| 1 file (data.ldb) | 100+ SST files | +| *15GB live ledger size | Smaller file size (11GB) | +| Not many options to configure | Very configurable | +| Unlikely to be further optimized | Many optimizations possible in future | +| Part of the node build process | Required external dep (incl recent version 5.13+) | +| - | Less file I/O (writes are flushed in bulk) | +| - | May use more memory | + +\* At the time of writing (Oct 2019) + +RocksDB Limitations: + +* Automatic backups not currently supported +* Database transaction tracker is not supported +* Cannot execute CLI commands which require writing to the database, such as `nano_node --peer_clear` these must be executed when the node is stopped + +!!! note "Snapshotting with RocksDB" + When backing up using the --snapshot CLI option, it is currently set up to do incremental backups, which reduces the need to copy the whole database. However if the original files are deleted, then the backup directory should also be deleted otherwise there can be inconsistencies. diff --git a/docs/running-a-node/rocksdb-ledger-backend.md b/docs/running-a-node/rocksdb-ledger-backend.md deleted file mode 100644 index 50276a61a..000000000 --- a/docs/running-a-node/rocksdb-ledger-backend.md +++ /dev/null @@ -1,89 +0,0 @@ -# RocksDB Ledger Backend - -!!! warning "RocksDB is experimental, do not use in production" - RocksDB is being included in _V20.0_ as experimental only. Future versions of the node may allow for production use of RocksDB, however old experimental RocksDB ledgers are not guarenteed to be compatible and may require resyncing from scratch. - - If you are testing RocksDB and want to discuss results, configurations, etc. please join the forum topic here: https://forum.nano.org/t/rocksdb-ledger-backend-testing/111 - -The node ledger currently uses LMDB (Lightning memory-mapped database) by default as the data store. As of _v20+_ the option to use RocksDB becomes available as an experimental option. -This document will not go into much detail about theses key-value data stores as there is a lot of information available online. -It is anticipated that bootstrapping will be slower using RocksDB during the initial version at least, but live traffic should be faster due to singluar writes being cached in memory and flushed to disk in bulk. - -Using RocksDB requires a few extra steps as it is an externally required dependency which requires a recent version of RocksDB, so older repositories may not be sufficient, it also requires `zlib`. If using the docker node, can skip to 3.: -### 1. Install RocksDB -#### Linux -Ubuntu 19.04 and later: -``` -sudo apt-get install zlib1g-dev -sudo apt-get install librocksdb-dev -``` -Otherwise: -``` -sudo apt-get install zlib1g-dev -export USE_RTTI=1 -git clone https://github.com/facebook/rocksdb.git -cd rocksdb -make static_lib -make install -``` -#### MacOS -`brew install rocksdb` -#### Windows -Recommended way is to use vcpkg: - -* add `set (VCPKG_LIBRARY_LINKAGE static)` to the top of `%VCPKG_DIR%\ports\rocksdb\portfile.cmake` -* `vcpkg install rocksdb:x64-windows` - -For other or more detailed instructions visit the official page: -https://github.com/facebook/rocksdb/blob/master/INSTALL.md -### 2. Build node with RocksDB support -Once RocksDB is installed successfully, the node must be built with RocksDB support using the CMake variable `-DNANO_ROCKSDB=ON` - -The following CMake options can be used to specify where the RocksDB and zlib libraries are if they cannot be found automatically: -``` -ROCKSDB_INCLUDE_DIRS -ROCKSDB_LIBRARIES -ZLIB_LIBRARY -ZLIB_INCLUDE_DIR -``` -### 3. Enable RocksDB -This can be enabled by adding the following to the config-node.toml file -``` -[node.rocksdb] -enable = true -``` -There are many other options which can be set. Due to RocksDB generally using more memory the defaults have been made pessimistic in order to run on a wider range of lower end devices. Recommended settings if on a system with 8GB or more RAM (see TOML comments in the generated file for more information on what these do): -``` -[node.rocksdb] -bloom_filter_bits = 10 -block_cache = 1024 -enable_pipelined_write=true -cache_index_and_filter_blocks=true -block_size=64 -memtable_size=128 -num_memtables=3 -total_memtable_size=0 -``` -Comparision: - -| LMDB | RocksDB | -| :-------: | :---------: | -| Tested with the node for many years | Experimental status | -| 1 file (data.ldb) | 100+ SST files | -| *15GB live ledger size | Smaller file size (11GB) | -| Not many options to configure | Very configurable | -| Unlikely to be further optimized | Many optimizations possible in future | -| Part of the node build process | Required external dep (incl recent version 5.13+) | -| - | Less file I/O (writes are flushed in bulk) | -| - | May use more memory | - -*At the time of writing (Oct 2019) - -RocksDB Limitations: - -* Automatic backups not currently supported -* Database transaction tracker is not supported -* Cannot execute CLI commands which require writing to the database, such as `nano_node --peer_clear` these must be executed when the node is stopped - -!!! note "Snapshotting with RocksDB" - When backing up using the --snapshot CLI option, it is currently set up to do incremental backups, which reduces the need to copy the whole database. However if the original files are deleted, then the backup directory should also be deleted otherwise there can be inconsistencies. diff --git a/docs/snippets/hardware-recommendations.md b/docs/snippets/hardware-recommendations.md index 7123f3864..5fd28b126 100644 --- a/docs/snippets/hardware-recommendations.md +++ b/docs/snippets/hardware-recommendations.md @@ -6,7 +6,7 @@ The following are minimum recommended specifications for nodes with more than 0. * 4GB RAM * Quad-Core CPU * 250 MB/s bandwidth (2TB of available monthly bandwidth) -* SSD-based hard drive +* SSD-based hard drive with 80GB+ of free space #### Representative Node The following are minimum recommended specifications for nodes with less than 0.1% of the online voting weight (regular [Representatives](/glossary#representative)): @@ -14,7 +14,7 @@ The following are minimum recommended specifications for nodes with less than 0. * 2GB RAM (additional RAM or swap space may be needed if bootstrapping a new node from scratch) * Dual-Core CPU * 100 MB/s bandwidth (1TB of available monthly bandwidth) -* SSD-based hard drive +* SSD-based hard drive with 80GB+ of free space !!! warning Various factors affect resource usage including how often RPC calls are made, other applications running on the machine, etc. These recommendations should be evaluated along with other considerations. diff --git a/mkdocs.yml b/mkdocs.yml index aa0c6ff7f..26d0a5075 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -27,7 +27,7 @@ nav: - Beta Network: running-a-node/beta-network.md - Configuration: running-a-node/configuration.md - Troubleshooting: running-a-node/troubleshooting.md - - RocksDB Ledger Backend: running-a-node/rocksdb-ledger-backend.md + - Ledger Management: running-a-node/ledger-management.md - Beyond the Node: running-a-node/beyond-the-node.md - Integration Guides: - The Basics: integration-guides/the-basics.md @@ -119,4 +119,8 @@ extra: - type: 'instagram' link: 'https://www.instagram.com/nanocurrency/' repo_name: 'nanocurrency/nano-docs' -repo_url: 'https://github.com/nanocurrency/nano-docs' \ No newline at end of file +repo_url: 'https://github.com/nanocurrency/nano-docs' +plugins: + - redirects: + redirect_maps: + 'running-a-node/rocksdb-ledger-backend.md': 'running-a-node/ledger-management.md' \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 774678a28..3eae2e04d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,3 +10,4 @@ pymdown-extensions==6.0 PyYAML==5.1 six==1.12.0 tornado==6.0.2 +mkdocs-redirects==1.0.0 \ No newline at end of file From 6459d4339fc276d62da41c69b72899e744646647 Mon Sep 17 00:00:00 2001 From: Guilherme Lawless Date: Thu, 30 Apr 2020 19:41:12 +0100 Subject: [PATCH 41/87] Fix search bar (#276) --- mkdocs.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/mkdocs.yml b/mkdocs.yml index 26d0a5075..1f0a7943e 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -97,8 +97,6 @@ extra_javascript: extra_css: - 'stylesheets/extras.css' extra: - search: - - tokenizer: '[\s\-\.]+' social: - type: 'github' link: 'https://github.com/nanocurrency' @@ -121,6 +119,7 @@ extra: repo_name: 'nanocurrency/nano-docs' repo_url: 'https://github.com/nanocurrency/nano-docs' plugins: + - search - redirects: redirect_maps: - 'running-a-node/rocksdb-ledger-backend.md': 'running-a-node/ledger-management.md' \ No newline at end of file + 'running-a-node/rocksdb-ledger-backend.md': 'running-a-node/ledger-management.md' From eb10859ef92f47b8998dd652fdb5bf8c0a3903f0 Mon Sep 17 00:00:00 2001 From: Guilherme Lawless Date: Thu, 30 Apr 2020 21:17:16 +0100 Subject: [PATCH 42/87] Result difficulty in RPC block_create (#277) --- docs/commands/rpc-protocol.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/commands/rpc-protocol.md b/docs/commands/rpc-protocol.md index 7ac5f7dc2..d047b522d 100644 --- a/docs/commands/rpc-protocol.md +++ b/docs/commands/rpc-protocol.md @@ -613,6 +613,7 @@ Default "false". If "true", "block" in the response will contain a JSON subtree ```json { "hash": "FF0144381CFF0B2C079A115E7ADA7E96F43FD219446E7524C48D1CC9900C4F17", + "difficulty": "ffffffe1278b3dc6", // since V21.0 "block": { "type": "state", "account": "nano_3qgmh14nwztqw4wmcdzy4xpqeejey68chx6nciczwn9abji7ihhum9qtpmdr", From 6bf5f74c71de1440595e43f0f18a4ba202f07822 Mon Sep 17 00:00:00 2001 From: Zach Hyatt Date: Wed, 6 May 2020 13:56:42 -0500 Subject: [PATCH 43/87] Add callout for pending and accounts_pending to recommend include_only_confirmed optional be used (#280) --- docs/commands/rpc-protocol.md | 4 ++++ docs/snippets/rpc_include_only_confirmed_recommended.md | 4 ++++ 2 files changed, 8 insertions(+) create mode 100644 docs/snippets/rpc_include_only_confirmed_recommended.md diff --git a/docs/commands/rpc-protocol.md b/docs/commands/rpc-protocol.md index d047b522d..7d3cb2ee9 100644 --- a/docs/commands/rpc-protocol.md +++ b/docs/commands/rpc-protocol.md @@ -306,6 +306,8 @@ Returns a list of pairs of account and block hash representing the head block fo ### accounts_pending Returns a list of block hashes which have not yet been received by these **accounts** +--8<-- "rpc_include_only_confirmed_recommended.md" + **Request:** ```json { @@ -1859,6 +1861,8 @@ _version 20.0 will generate the node_id with `node_` prefix, earlier versions wi ### pending Returns a list of block hashes which have not yet been received by this account. +--8<-- "rpc_include_only_confirmed_recommended.md" + **Request:** ```json { diff --git a/docs/snippets/rpc_include_only_confirmed_recommended.md b/docs/snippets/rpc_include_only_confirmed_recommended.md new file mode 100644 index 000000000..7b2b0d6a4 --- /dev/null +++ b/docs/snippets/rpc_include_only_confirmed_recommended.md @@ -0,0 +1,4 @@ +!!! warning "Optional `include_only_confirmed` recommended" + By default this will return blocks not in active elections but unconfirmed (e.g., block was received but node was restarted, election was dropped, new ledger with reset confirmation height). + + **To avoid potential issues related to these situations setting the `include_only_confirmed` = `true` is recommended for most use cases.** \ No newline at end of file From 341ab33628dbd1b14bc81b0cdeda84c53a3f07d4 Mon Sep 17 00:00:00 2001 From: Sergey Kroshnin Date: Fri, 8 May 2020 23:13:07 +0300 Subject: [PATCH 44/87] Websocket bootstrap subscription & attempt ID (#211) * Websocket bootstrap subscription & attempt ID * available since v21.0 * Update websockets.md --- docs/commands/rpc-protocol.md | 12 ++++++ docs/integration-guides/websockets.md | 55 ++++++++++++++++++++++++++- 2 files changed, 66 insertions(+), 1 deletion(-) diff --git a/docs/commands/rpc-protocol.md b/docs/commands/rpc-protocol.md index 7d3cb2ee9..3e374af53 100644 --- a/docs/commands/rpc-protocol.md +++ b/docs/commands/rpc-protocol.md @@ -908,6 +908,10 @@ Initialize bootstrap to specific **IP address** and **port**. Not compatible wit _version 20.0+_ Default "false". If "true", frontier confirmation will not be performed for this bootstrap. Normally not to be changed. +**Optional "id"** +_version 21.0+_ +String, empty by default. Set specific ID for new bootstrap attempt for better tracking. + --- ### bootstrap_any @@ -929,6 +933,10 @@ Initialize multi-connection bootstrap to random peers. Not compatible with launc _version 20.0+_ Boolean, false by default. Manually force closing of all current bootstraps +**Optional "id"** +_version 21.0+_ +String, empty by default. Set specific ID for new bootstrap attempt for better tracking. + --- ### bootstrap_lazy @@ -952,6 +960,10 @@ Initialize lazy bootstrap with given block **hash**. Not compatible with launch Boolean, false by default. Manually force closing of all current bootstraps +**Optional "id"** +_version 21.0+_ +String, empty by default. Set specific ID for new bootstrap attempt for better tracking. + --- ### bootstrap_status diff --git a/docs/integration-guides/websockets.md b/docs/integration-guides/websockets.md index 93440a7f6..2ab38696a 100644 --- a/docs/integration-guides/websockets.md +++ b/docs/integration-guides/websockets.md @@ -496,6 +496,7 @@ Notes: - If work generation fails, the notification is similar to the work cancelled notification, except `"reason": "failure"` - When work generation is done locally it will show `"source": "local"` +--- ### Node telemetry @@ -589,4 +590,56 @@ No filters are currently available for the `new_unconfirmed_block` topic. "subtype": "receive" } } -``` \ No newline at end of file +``` + +--- + +#### Bootstrap + +This subscription is available since _v21.0_ + +##### Subscribing + +To subscribe to bootstrap attempts start/exit notifications: +```json +{ + "action": "subscribe", + "topic": "bootstrap" +} +``` + +##### Filtering options + +No filters are currently available for the `bootstrap` topic. + +##### Sample Results + +```json +{ + "topic": "bootstrap", + "time": "1561661740065", + "message": { + "reason": "started", + "id": "C9FF2347C4DF512A7F6B514CC4A0F79A", + "mode": "legacy" + } +} +``` + +```json +{ + "topic": "bootstrap", + "time": "1561661740565", + "message": { + "reason": "exited", + "id": "C9FF2347C4DF512A7F6B514CC4A0F79A", + "mode": "legacy", + "total_blocks": "1000000", + "duration": "500" + } +} +``` + +Notes: + +- The duration is in seconds From eff223d78918eb9f808b007f44b63c6b3f9ea8c1 Mon Sep 17 00:00:00 2001 From: Sergey Kroshnin Date: Mon, 11 May 2020 11:14:19 +0300 Subject: [PATCH 45/87] Multitreaded --validate_blocks (#278) * Multitreaded --validate_blocks https://github.com/nanocurrency/nano-node/pull/2749 * Alias --debug_validate_blocks --- docs/commands/command-line-interface.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/commands/command-line-interface.md b/docs/commands/command-line-interface.md index 66eea752e..db98e6ec3 100644 --- a/docs/commands/command-line-interface.md +++ b/docs/commands/command-line-interface.md @@ -79,6 +79,10 @@ Clear unchecked blocks ### --vacuum Compact database. If data_path is missing, the database in data directory is compacted. Optional `--unchecked_clear`, `--clear_send_ids`, `--online_weight_clear`, `--peer_clear` +### --validate_blocks +_version 21.0+_ (_version 19.0+_ as `--debug_validate_blocks`) +Validate blocks in the ledger, includes checks for confirmation height. Optional `--threads` for multithreaded validation in version 21.0+. Multithreaded validation can limit other host operations with high I/O & CPU usage. + ### --version Prints out version @@ -251,8 +255,7 @@ _version 20.0+_ Prints a stacktrace example, useful to verify that it includes the desired information, such as files, function names and line numbers ### --debug_validate_blocks -_version 19.0+_ -Validate blocks in the ledger, includes checks for confirmation height +Alias to [`--validate_blocks`](#-validate_blocks) ### --debug_verify_profile Profile signature verification From d0db774007ab5b3de69aec6eeff0d35999481c5d Mon Sep 17 00:00:00 2001 From: Jim Huang Date: Wed, 13 May 2020 05:28:06 +0800 Subject: [PATCH 46/87] Refer to RocksDB specific section as an experimental feature (#286) --- docs/integration-guides/build-options.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/integration-guides/build-options.md b/docs/integration-guides/build-options.md index 1047e2143..0b66156f1 100644 --- a/docs/integration-guides/build-options.md +++ b/docs/integration-guides/build-options.md @@ -114,7 +114,7 @@ Format: `cmake -D VARNAME=VARVALUE` * `NANO_TIMED_LOCKS=50` (*v20.0+* when the number of milliseconds a mutex is held is equal or greater than this output a stacktrace, 0 disables.) * `NANO_STACKTRACE_BACKTRACE=ON` (*v20.0+* use a different configuration of Boost backtrace in stacktraces, attempting to display filenames, function names and line numbers. Needs `libbacktrace` to be installed. Some [workarounds](https://www.boost.org/doc/libs/develop/doc/html/stacktrace/configuration_and_build.html#stacktrace.configuration_and_build.f3) may be necessary depending on system and configuration. Use CLI [`--debug_stacktrace`](/commands/command-line-interface#-debug_stacktrace) to get an example output.) * `CI_BUILD=TRUE` (*v20.0+* if enabled, uses environment variable `TRAVIS_TAG` (required) to modify the locally reported node version; example `TRAVIS_TAG="My Nano Node v20"`) -* `NANO_ROCKSDB=ON` (*v20.0+* NOTE: RocksDB support is still in experimental stages and should not be used in production systems. To build the node with RocksDB [click here](/running-a-node/rocksdb-ledger-backend/) for more details) +* `NANO_ROCKSDB=ON` (*v20.0+* NOTE: RocksDB support is still in experimental stages and should not be used in production systems. To build the node with RocksDB [click here](/running-a-node/rocksdb-ledger-backend/#rocksdb-ledger-backend) for more details) **Build Node** @@ -353,7 +353,7 @@ If running on a debugger, add the argument `--gtest_break_on_failure` break at t ### Environment variables to customize tests * `TEST_KEEP_TMPDIRS=1` - Setting this to anything will prevent the tests deleting any files it creates, useful for debugging log files. -* `TEST_USE_ROCKSDB=1` - Use the RocksDB ledger backend for the tests instead of LMDB. The tests must be built with [RocksDB](/running-a-node/rocksdb-ledger-backend/) support. +* `TEST_USE_ROCKSDB=1` - Use the RocksDB ledger backend for the tests instead of LMDB. The tests must be built with [RocksDB](/running-a-node/rocksdb-ledger-backend/#rocksdb-ledger-backend) support. * `TEST_BASE_PORT=26000` - The base port used in tests, the range of ports used in this case would be 26000 - 26199. This is useful if wanting to run multiple tests at once without port conflicts, the default base port used is 24000. ### Sanitizers From 019a85a1941bad0efdc77e5808d053b0cf0e5866 Mon Sep 17 00:00:00 2001 From: Jim Huang Date: Wed, 13 May 2020 05:29:57 +0800 Subject: [PATCH 47/87] Consolidate boost build instructions (#283) The original instructions about boost are confusing, and we can use the unified script to fetch and build boost from scratch for both GNU/Linux and macOS. --- docs/integration-guides/build-options.md | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/docs/integration-guides/build-options.md b/docs/integration-guides/build-options.md index 0b66156f1..825e1a572 100644 --- a/docs/integration-guides/build-options.md +++ b/docs/integration-guides/build-options.md @@ -211,22 +211,14 @@ Follow the [build instructions](#build-instructions-unix-centos-arch-linux). --8<-- "unsupported-configuration.md" -### Static Boost -```bash -wget -O boost_1_67_0.tar.gz https://netix.dl.sourceforge.net/project/boost/boost/1.67.0/boost_1_67_0.tar.gz -tar xzvf boost_1_67_0.tar.gz -cd boost_1_67_0 -./bootstrap.sh --with-libraries=filesystem,log,program_options,system,thread -./b2 --prefix=../[boost] link=static install -cd .. -``` - ### Node ```bash git clone --recursive https://github.com/nanocurrency/nano-node.git nano_build cd nano_build -cmake -DBOOST_ROOT=../[boost] -G "Unix Makefiles" +export BOOST_ROOT=`pwd`/../boost_build +sh util/build_prep/bootstrap_boost.sh -m +cmake -G "Unix Makefiles" . make nano_node cp nano_node ../nano_node && cd .. && ./nano_node --diagnostics ``` @@ -240,8 +232,9 @@ cp nano_node ../nano_node && cd .. && ./nano_node --diagnostics ```bash git clone --recursive https://github.com/nanocurrency/nano-node.git nano_build cd nano_build +export BOOST_ROOT=`pwd`/../boost_build sh util/build_prep/bootstrap_boost.sh -m -cmake -DBOOST_ROOT=../[boost] -G "Unix Makefiles" +cmake -G "Unix Makefiles" . make nano_node cp nano_node ../nano_node && cd .. && ./nano_node --diagnostics ``` From 04533eef7aaf3ed77535f35810b91180394c252c Mon Sep 17 00:00:00 2001 From: Jim Huang Date: Wed, 13 May 2020 05:30:09 +0800 Subject: [PATCH 48/87] Clarify misleading Unix descriptions (#281) Linux is modelled on the Unix operating system, but GNU/Linux is not Unix. This patch clarifies the wording on all occurrence of Unix and changes them into Debian/Ubuntu to reflect the exact target descriptions. --- docs/integration-guides/build-options.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/integration-guides/build-options.md b/docs/integration-guides/build-options.md index 825e1a572..1bba1722a 100644 --- a/docs/integration-guides/build-options.md +++ b/docs/integration-guides/build-options.md @@ -143,7 +143,7 @@ Format: `cmake -D VARNAME=VARVALUE` --- -## Unix Dependencies +## Debian/Ubuntu Dependencies These instructions are for the following systems: @@ -159,7 +159,7 @@ sudo apt-get update && sudo apt-get upgrade sudo apt-get install git cmake g++ curl wget ``` -Follow the [build instructions](#build-instructions-unix-centos-arch-linux). +Follow the [build instructions](#build-instructions-debian-centos-arch-linux). ## CentOS 7 Dependencies @@ -192,7 +192,7 @@ sudo make install cd .. ``` -Follow the [build instructions](#build-instructions-unix-centos-arch-linux). +Follow the [build instructions](#build-instructions-debian-centos-arch-linux). ## Arch Linux Dependencies @@ -203,11 +203,11 @@ pacman -Syu pacman -S base-devel git gcc cmake curl wget ``` -Follow the [build instructions](#build-instructions-unix-centos-arch-linux). +Follow the [build instructions](#build-instructions-debian-centos-arch-linux). --- -## Build Instructions - Unix, CentOS, Arch Linux +## Build Instructions - Debian, CentOS, Arch Linux --8<-- "unsupported-configuration.md" From baf9c025d53a35a45aba95e33ef2410d93e19497 Mon Sep 17 00:00:00 2001 From: Jim Huang Date: Wed, 13 May 2020 05:30:31 +0800 Subject: [PATCH 49/87] Deprecate the term Mac OSX. Use macOS instead (#282) In 2012, with the release of OS X 10.8 Mountain Lion, the name of the system was shortened from Mac OS X to OS X. In 2016, with the release of macOS 10.12 Sierra, the name was changed from OS X to macOS to streamline it with the branding of Apple's other primary operating systems: iOS, watchOS, and tvOS. Reference: https://en.wikipedia.org/wiki/MacOS --- docs/integration-guides/build-options.md | 2 +- docs/running-a-node/troubleshooting.md | 2 +- docs/snippets/beta-folder-locations.md | 4 ++-- docs/snippets/folder-locations.md | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/integration-guides/build-options.md b/docs/integration-guides/build-options.md index 1bba1722a..86982abe4 100644 --- a/docs/integration-guides/build-options.md +++ b/docs/integration-guides/build-options.md @@ -225,7 +225,7 @@ cp nano_node ../nano_node && cd .. && ./nano_node --diagnostics --- -## Build Instructions - OSX +## Build Instructions - macOS --8<-- "unsupported-configuration.md" diff --git a/docs/running-a-node/troubleshooting.md b/docs/running-a-node/troubleshooting.md index dca31e36b..553b5b6c3 100644 --- a/docs/running-a-node/troubleshooting.md +++ b/docs/running-a-node/troubleshooting.md @@ -7,7 +7,7 @@ The default location of standard node log files for various systems: | **OS** | **Location** | |---------|--------------| | Windows | `:::bash C:\Users\\AppData\Local\Nano\log` -or- `:::bash %LOCALAPPDATA%\Nano\log` | -| OSX | `:::bash /Users//Library/Nano/log ` | +| macOS | `:::bash /Users//Library/Nano/log ` | | Linux | `:::bash /home//Nano/log ` | --- diff --git a/docs/snippets/beta-folder-locations.md b/docs/snippets/beta-folder-locations.md index 1a2e73154..9ed0fa4c6 100644 --- a/docs/snippets/beta-folder-locations.md +++ b/docs/snippets/beta-folder-locations.md @@ -1,5 +1,5 @@ | **OS** | **Location** | |---------|--------------| | Windows | `:::bash C:\Users\\AppData\Local\NanoBeta\` | -| OSX | `:::bash /Users//Library/NanoBeta/ ` | -| Linux | `:::bash /home//NanoBeta/ ` | \ No newline at end of file +| macOS | `:::bash /Users//Library/NanoBeta/ ` | +| Linux | `:::bash /home//NanoBeta/ ` | diff --git a/docs/snippets/folder-locations.md b/docs/snippets/folder-locations.md index 65388d6b9..201c10761 100644 --- a/docs/snippets/folder-locations.md +++ b/docs/snippets/folder-locations.md @@ -1,5 +1,5 @@ | **OS** | **Location** | |---------|--------------| | Windows | `:::bash C:\Users\\AppData\Local\Nano\` | -| OSX | `:::bash /Users//Library/Nano/ ` | -| Linux | `:::bash /home//Nano/ ` | \ No newline at end of file +| macOS | `:::bash /Users//Library/Nano/ ` | +| Linux | `:::bash /home//Nano/ ` | From 54c5f190c59dcd843a148e4133e06273bdf66aaf Mon Sep 17 00:00:00 2001 From: Zach Hyatt Date: Thu, 14 May 2020 11:27:06 -0500 Subject: [PATCH 50/87] Clarify --compare_rep_weights CLI is V21.0+ (#288) --- docs/running-a-node/ledger-management.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/running-a-node/ledger-management.md b/docs/running-a-node/ledger-management.md index 8660e970f..4e4dd883c 100644 --- a/docs/running-a-node/ledger-management.md +++ b/docs/running-a-node/ledger-management.md @@ -52,7 +52,7 @@ Blocks are confirmed using the voting weight of representatives and these weight If looking to use a downloaded ledger there is a risk of it providing inaccurate representative voting weights. Although the potential impacts of this are minimal, below are some recommended steps to take which can help provide additional confidence the ledger can be used. 1. **Scan the ledger for integrity using the [`--debug_validate_blocks`](/commands/command-line-interface/#-debug_validate_blocks) CLI command**. If issues are found they should be inspected carefully and alternative sources of a ledger may need to be considered as failures with this command have a high chance of indicating potentially malicious behavior. -1. **Review the differences in representative voting weights by running the [`--compare_rep_weights`](/commands/command-line-interface/#-compare_rep_weights) CLI command** with the new ledger in the default data folder (old ledger backed up) or in a different data folder by using the optional `--data_path` argument. This will compare the new ledger voting weights against the hardcoded values in the node (set at the time of release). See the [CLI command](/commands/command-line-interface/#-compare_rep_weights) for details on the output with special attention paid to entries in the `outliers` and `newcomers` sections. By inspecting those addresses in public explorers such as [Nanocrawler.cc](https://nanocrawler.cc), this can help to determine if voting weight may have been manipulated in the downloaded ledger. +1. **Review the differences in representative voting weights by running the [`--compare_rep_weights`](/commands/command-line-interface/#-compare_rep_weights) CLI command** (_v21.0+ only)_ with the new ledger in the default data folder (old ledger backed up) or in a different data folder by using the optional `--data_path` argument. This will compare the new ledger voting weights against the hardcoded values in the node (set at the time of release). See the [CLI command](/commands/command-line-interface/#-compare_rep_weights) for details on the output with special attention paid to entries in the `outliers` and `newcomers` sections. By inspecting those addresses in public explorers such as [Nanocrawler.cc](https://nanocrawler.cc), this can help to determine if voting weight may have been manipulated in the downloaded ledger. If you need support with this process or need help in evaluating some of the CLI command results, join the [Node and Representative Management category](https://forum.nano.org/c/node-and-rep/8) on the [Nano Forums](https://forum.nano.org). From 98e6edece12f17aeaece8853faa5ba8ff227324e Mon Sep 17 00:00:00 2001 From: Guilherme Lawless Date: Fri, 15 May 2020 17:17:17 +0100 Subject: [PATCH 51/87] Update guide on contributing (#290) Some mentions of the `master` branch have been changed to `develop`. --- docs/protocol-design/overview.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/protocol-design/overview.md b/docs/protocol-design/overview.md index e233fef12..40c32b121 100644 --- a/docs/protocol-design/overview.md +++ b/docs/protocol-design/overview.md @@ -94,6 +94,7 @@ Nano prefers the standard GitHub workflow. You create a fork of the Nano reposit Before: +* Branch out of the **develop** branch. The **master** branch is only updated on new releases. * Review your code locally. Have you followed the guidelines in this document? * Run tests. Did you consider adding a test case for your feature? * Run ASAN and TSAN to detect memory or threading bugs @@ -109,13 +110,13 @@ After: ##### Resolve conflicts -If time passes between your pull request (PR) submission and the team accepting it, merge conflicts may occur due to activity on master, such as merging other PR's before yours. In order for your PR to be accepted, you must resolve these conflicts. +If time passes between your pull request (PR) submission and the team accepting it, merge conflicts may occur due to activity on develop, such as merging other PR's before yours. In order for your PR to be accepted, you must resolve these conflicts. The preferred process is to rebase your changes, resolve any conflicts, and push your changes again. [^2][^3] * Check out your branch * `git fetch upstream` -* `git rebase upstream/master` +* `git rebase upstream/develop` * Resolve conflicts in your favorite editor * `git add {filename}` * `git rebase --continue` @@ -184,4 +185,4 @@ Your code will be reviewed with security in mind, but please do your part before [^2]: https://help.github.com/articles/resolving-merge-conflicts-after-a-git-rebase/ [^3]: https://help.github.com/articles/resolving-a-merge-conflict-using-the-command-line/ [^4]: https://github.com/todotxt/todo.txt-android/wiki/Squash-All-Commits-Related-to-a-Single-Issue-into-a-Single-Commit -[^5]: https://dmitryfrank.com/articles/indent_with_tabs_align_with_spaces \ No newline at end of file +[^5]: https://dmitryfrank.com/articles/indent_with_tabs_align_with_spaces From e37a9e5734a708fd8ffea766c73bc802c03f5af2 Mon Sep 17 00:00:00 2001 From: Sergey Kroshnin Date: Sat, 16 May 2020 00:50:54 +0300 Subject: [PATCH 52/87] Add CLI command for better LMDB compaction (#193) * Add CLI command for better LMDB compaction Docs change for https://github.com/nanocurrency/nano-node/pull/2435 * More --vacuum details --- docs/commands/command-line-interface.md | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/docs/commands/command-line-interface.md b/docs/commands/command-line-interface.md index db98e6ec3..5dc1dc6d8 100644 --- a/docs/commands/command-line-interface.md +++ b/docs/commands/command-line-interface.md @@ -69,15 +69,20 @@ Clear record history for long term online weight trending ### --peer_clear Clear cached peers +### --rebuild_database +Rebuild LMDB database with `--vacuum` for best compaction. Requires approximately `data.ldb size * 2` free space on disk. + ### --snapshot -Compact database and create snapshot, functions similar to vacuum but does not replace the existing database. Optional `--unchecked_clear`, `--clear_send_ids`, `--online_weight_clear`, `--peer_clear` -Optional `--confirmation_height_clear` in version 19.0+ +Compact database and create snapshot, functions similar to vacuum but does not replace the existing database. Optional `--unchecked_clear`, `--clear_send_ids`, `--online_weight_clear`, `--peer_clear`. +Optional `--confirmation_height_clear` in version 19.0+. ### --unchecked_clear Clear unchecked blocks ### --vacuum -Compact database. If data_path is missing, the database in data directory is compacted. Optional `--unchecked_clear`, `--clear_send_ids`, `--online_weight_clear`, `--peer_clear` +Compact database. If data_path is missing, the database in data directory is compacted. Optional `--unchecked_clear`, `--clear_send_ids`, `--online_weight_clear`, `--peer_clear`. +Optional `--confirmation_height_clear` in version 19.0+. +Optional `--rebuild_database` in version 21.0+. Requires approximately `data.ldb size * 2` free space on disk. ### --validate_blocks _version 21.0+_ (_version 19.0+_ as `--debug_validate_blocks`) From af24db8cf50ad8fd9b9ed86e6a5d84b2913e62f4 Mon Sep 17 00:00:00 2001 From: Guilherme Lawless Date: Sat, 16 May 2020 19:18:34 +0100 Subject: [PATCH 53/87] Work generation practical guide (#289) * First iteration of practical guide * Split into two diagrams * Move work generation config options to the work generation guide * Simplify configuration now that it's in the work generation guide * Update debug_opencl description * Update benchmark commands * Add callout on target version * Note on CLI commands not using the node configuration * Update work-generation.md * Update work-generation.md * Sort debug CLI command Co-authored-by: Zach Hyatt --- docs/commands/command-line-interface.md | 8 +- docs/integration-guides/work-generation.md | 100 ++++++++++++++++++--- docs/running-a-node/configuration.md | 38 +------- 3 files changed, 96 insertions(+), 50 deletions(-) diff --git a/docs/commands/command-line-interface.md b/docs/commands/command-line-interface.md index 5dc1dc6d8..e46cdc7b0 100644 --- a/docs/commands/command-line-interface.md +++ b/docs/commands/command-line-interface.md @@ -235,6 +235,10 @@ Output the stacktrace stored after a node crash. ### --debug_generate_crash_report After a node crash on linux, this command consumes the dump files generated from that crash and produces a "nano_node_crash_report.txt" file. Requires `addr2line` to be installed on the system. See the [troubleshooting guide](/running-a-node/troubleshooting/#what-to-do-if-the-node-crashes-linux) for more information. +### --debug_opencl +Profile OpenCL work generation for (optional) `--device=` on `--device=` using `--threads=` count. To retrieve available platforms & devices run [--diagnostics](#-diagnostics). +Optionals `--difficulty` and `--multiplier` (only the latter is used if both given) in version 21.0+ to set the work generation threshold. + ### --debug_profile_bootstrap Profile simulated bootstrap process @@ -267,7 +271,3 @@ Profile signature verification ### --debug_xorshift_profile [Disabled] Profile xorshift algorithms - -### --debug_opencl --platform=`` --device=`` --threads=`` -_[Draft]_ Profile OpenCL work generation for `` on `` using `` count. To retrieve available platforms & devices run --diagnostics. -Optionals `--difficulty` and `--multiplier` (only the latter is used if both given) in version 21.0+ to set the work generation threshold. \ No newline at end of file diff --git a/docs/integration-guides/work-generation.md b/docs/integration-guides/work-generation.md index 88797e9dc..e7b60aeef 100644 --- a/docs/integration-guides/work-generation.md +++ b/docs/integration-guides/work-generation.md @@ -1,9 +1,11 @@ title: Work Generation | Nano Documentation description: Understand the best configurations for work generation on the Nano network. +!!!tip "Some sections of this page target node version 21 or higher" + Every block published to the network, whether a send, receive or representative change block, requires a small, valid [Proof-of-Work](/glossary/#proof-of-work-pow) to be completed above a minimum difficulty floor (threshold). As of V21 this threshold is different for different block types: send and change blocks require a higher threshold, while receive blocks are lower. -This work value is not used in concensus, but instead is one of the first pieces of data used to validate blocks on the network and is a key component of maintaining consistent quality of service on the network. +This work value is not used in consensus, but instead is one of the first pieces of data used to validate blocks on the network and is a key component of maintaining consistent quality of service on the network. ## System considerations @@ -67,25 +69,101 @@ Services where RPC usage is lighter but regular work generation is needed could --- +## Practical guides + +### Work generated using the node, incl. work peers + +``` mermaid +graph TD + A{Block signing
location?} + A -->|in the node| B[RPC block_create
no "work"] + A -->|not in the node| C_1(Create and sign block) + B -->block((block)) + C_1 -->|block| C_2[RPC work_generate
"block": block] + C_2 -->|work| C_3(Use work in block) + C_3 -->block + block -->D[RPC process
"watch_work": "true"] +``` + +### Work generated without using the node + +``` mermaid +graph TD + M{Access to a node?} -->|yes| N[active_difficulty RPC or WS] + M --> |no| O_1(Telemetry) + N -->|network_minimum| P_1(Generate work at
network_minimum difficulty) + O_1 -->O_2((active
difficulty)) + P_1 -->|work| P_2(Use work in block) + P_2 -->P_3((block)) + P_3 -->P_4[RPC process
"watch_work": "false"] + P_4 -->P_5(Track block confirmation) + P_5 -->P_6{Block unconfirmed
after 5 seconds?} + P_6 -->P_7[active_difficulty RPC or WS] + P_7 -->|network_current| P_8{Block difficulty less
than network_current ?} + P_8 -->|yes| P_9(Generate work at
network_current difficulty) + P_8 -->|no| P_6 + P_9 -->|updated_work| P_10(Use updated_work in block) + P_10 -->P_4 +``` + +--- + +## Node Configuration + +The following configuration options can be changed in `node-config.toml`. For more information on the location of this file, and general information on the configuration of the node, see the [Configuration](/running-a-node/configuration/) page. + +### opencl.enable + +!!!success "When GPU acceleration is enabled, the CPU is also used by default" + Make sure to set `node.work_threads` to `0` when using the GPU + +To enable GPU acceleration for work generation, set this option to `true`. Other fields may need to be changed if you have multiple OpenCL-enabled platforms and devices. + +### node.work_threads + +!!!tip "Recommended value: `node.work_threads = 0`" + +Determines the number of local CPU threads to used for work generation. **While enabled by default, it is [recommended](#recommended-configurations) to turn off local CPU work generation.** + +Set to `0` to turn off local CPU work generation. + +### node.work_peers +Used when offloading work generation to another node or service. Format must be ipv6, preceded by `::ffff:` if ipv4. Hostnames are supported since v21. Calls are made to the address:port designated using the standard RPC format [work_generate](/commands/rpc-protocol#work_generate). Example: + +```toml +[node] +work_peers = [ + "example.work-peer.org:7000", + "::ffff:192.168.1.25:7076" +] +``` + +### node.max_work_generate_multiplier + +Sets a limit on the generation difficulty. Multiplier is based off the [base difficulty threshold](#difficulty-thresholds). If the node is setup as a work peer itself, requests for work higher than this limit are ignored. Default value is `64`. + +--- + ## Benchmarks ### Benchmark commands -To benchmark a specific device you want to know the performance for, the node CLI commands or a separate script for the Nano Work Server can be used. +**Node RPC or external work server** -**Using the Nano node** +1. Setup one of the following: + - A node with RPC enabled and any desired work peer + - A standalone work server +1. Use the script from [blake2b-pow-bench](https://github.com/guilhermelawless/blake2b-pow-bench) -1. Install and configure the Nano node on the machine -1. Run a CLI command: - * CPU: `nano_node --debug_profile_generate` - * GPU: `nano_node --debug_opencl --platform=0 --device=0` (updating `platform` and `device` as necessary) +**Node local work generation** -This will trigger continual work generation, so let it run until a sufficient sample size of times are generated (at least 100 instances). Compute the average of these times which is the number of microseconds to generate work. +Note that these commands do not use the configuration of the node. Prefer using the alternative above for that purpose, such as changing the number of threads for CPU work generation, or using work peers. -**Using Nano Work Server** +[CPU](/commands/command-line-interface#-debug_profile_generate) with all available threads: `nano_node --debug_profile_generate [--difficulty fffffff800000000] [--multiplier 1.0]` -If using work server, head over to the README at https://github.com/guilhermelawless/blake2b-pow-bench for details for benchmark script execution. +[GPU](/commands/command-line-interface#-debug_opencl) acceleration: `nano_node --debug_opencl --platform=0 --device=0 [--difficulty fffffff800000000] [--multiplier 1.0]` +The command will trigger continual work generation, so let it run until a sufficient sample size of times are generated (at least 100 instances). Compute the average of these times which are the number of microseconds it took to generate each sample. ### Example benchmarks @@ -159,7 +237,7 @@ With V21+ the work difficulty thresholds were split by block type. For many inte **Utilizing lower work when batching** -For services that process receiving their pending transactions in bulk the lower work threshold of receive blocks can be taken advantage of. In doing so, the difficulty is 64x lower than a send/change block, but the difficulty will be normalized for proper prioritization if published during heavy network load times. +For services that process receiving their pending transactions in bulk the lower work threshold of receive blocks can be taken advantage of. In doing so, the difficulty is 64x lower than a send/change block, but the difficulty will be normalized for proper prioritization if published during heavy network load times. ### Difficulty multiplier diff --git a/docs/running-a-node/configuration.md b/docs/running-a-node/configuration.md index 13e7b4a11..20ae76b62 100644 --- a/docs/running-a-node/configuration.md +++ b/docs/running-a-node/configuration.md @@ -179,6 +179,9 @@ Config options are referred to below using the format `section.setting`. This fo enable_voting = true ``` +### Work generation options +These configurations are located in the [Work Generation Guide](/integration-guides/work-generation/#node-configuration). + ### config-node.toml #### node.enable_voting @@ -191,41 +194,6 @@ As of V18.0, nodes with weight delegated to them under this value in their confi --- -#### node.work_peers -Used when offloading work generation to another node or service. Format must be ipv6, preceded by `::ffff:` if ipv4. Hostnames are supported since v21. Calls are made to the address:port designated using the standard RPC format [work_generate](/commands/rpc-protocol#work_generate). Example: - -```toml -[node] -work_peers = [ - "example.work-peer.org:7000" -] -``` - ---- - -#### node.work_threads - ---8<-- "alternative-work-generation-setup-preferred.md" - -Determines the number of local CPU threads to used for work generation. To turn off local CPU work generation set to `0`. See [opencl.enable](#opencl-enable) below for details on setting the node up for GPU-based work generation (preferred). - ---- - -#### node.max_work_generate_multiplier - -Sets a limit on the multiplier above the base difficulty threshold that the node will generate. If the node is setup as a work peer itself, no requests for work higher than this limit will be accepted. Default value is `64.000000000000000`. - ---- - -#### opencl.enable - -To enable GPU acceleration for PoW, set this option to `true`. Other OpenCL parameters may need to be adjusted depending on the desired setup. - -!!! tip "Using OpenCL and CPU for work generation" - Since V20.0, if OpenCL is enabled, both the GPU and CPU are used for work generation. The number of CPU threads is set with `node.work_threads`. To disable CPU work generation, set that value to "0". - ---- - #### node.ipc IPC is disabled by default. For details about using the IPC setup, see the [IPC Integration Guide](/integration-guides/advanced#ipc-integration). From c53e86c0c4f57ed12a33ff563160b1396e1c7228 Mon Sep 17 00:00:00 2001 From: Zach Hyatt Date: Mon, 18 May 2020 10:13:33 -0500 Subject: [PATCH 54/87] Update bandwidth reqs (#296) --- docs/snippets/hardware-recommendations.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/snippets/hardware-recommendations.md b/docs/snippets/hardware-recommendations.md index 5fd28b126..25448e71f 100644 --- a/docs/snippets/hardware-recommendations.md +++ b/docs/snippets/hardware-recommendations.md @@ -5,7 +5,7 @@ The following are minimum recommended specifications for nodes with more than 0. * 4GB RAM * Quad-Core CPU -* 250 MB/s bandwidth (2TB of available monthly bandwidth) +* 200 Mbps bandwidth (2TB or more of available monthly bandwidth) * SSD-based hard drive with 80GB+ of free space #### Representative Node @@ -13,7 +13,7 @@ The following are minimum recommended specifications for nodes with less than 0. * 2GB RAM (additional RAM or swap space may be needed if bootstrapping a new node from scratch) * Dual-Core CPU -* 100 MB/s bandwidth (1TB of available monthly bandwidth) +* 100 Mbps bandwidth (2TB or more of available monthly bandwidth) * SSD-based hard drive with 80GB+ of free space !!! warning From 6a7c479e671a4e08eb9a4738709d90426fa3d01d Mon Sep 17 00:00:00 2001 From: Wesley Shillingford Date: Mon, 18 May 2020 16:32:18 +0100 Subject: [PATCH 55/87] Deprecate batch_size/debug_mass_activity and add missing versions to some CLI commands (#295) --- docs/commands/command-line-interface.md | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/docs/commands/command-line-interface.md b/docs/commands/command-line-interface.md index e46cdc7b0..f28e83aeb 100644 --- a/docs/commands/command-line-interface.md +++ b/docs/commands/command-line-interface.md @@ -26,10 +26,12 @@ Displays a summarized comparison between the hardcoded bootstrap weights and rep * `newcomers`: large voting weights found in the ledger but not hardcoded, for potential inspection ### --config key=value +_version 20.0+_ Pass node configuration values. This takes precedence over any values in the configuration file. This option can be repeated multiple times. ### --confirmation_height_clear -_version 19.0+_ Sets the confirmation heights of all accounts to 0. Optional `--account` to only reset a single account. Do not use while the node is running. +_version 19.0+_ +Sets the confirmation heights of all accounts to 0. Optional `--account` to only reset a single account. Do not use while the node is running. ### --daemon Start node daemon. Since version 19.0, network and path will be output, similar to: @@ -46,6 +48,7 @@ Use the supplied `` as the data directory. Run internal diagnostics and validate existing config file (or create default config file if it doesn't exist) ### --generate_config node|rpc +_version 20.0+_ Write configuration to stdout, populated with commented-out defaults suitable for this system. Pass the configuration type, `node` or `rpc`. If `--use_defaults` is passed, the generated config will not have values commented-out. This is not recommended except for testing and debugging. @@ -61,15 +64,19 @@ Generates a adhoc random keypair and prints it to stdout Derive public key and account number from `` ### --network +_version 19.0+_ Allows selection of a different network at runtime. Values `live`, `beta` and `test` supported. ### --online_weight_clear +_version 18.0+_ Clear record history for long term online weight trending ### --peer_clear +_version 18.0+_ Clear cached peers ### --rebuild_database +_version 21.0+_ Rebuild LMDB database with `--vacuum` for best compaction. Requires approximately `data.ldb size * 2` free space on disk. ### --snapshot @@ -165,7 +172,7 @@ Turn off use of wallet-based bootstrap Turn off listener on the bootstrap network so incoming TCP (bootstrap) connections are rejected. **Note:** this does not impact TCP traffic for the live network. ### --disable_tcp_realtime -_version 19.0+_ +_version 19.0+_ Turn off use of TCP live network (TCP for bootstrap will remain available) ### --disable_udp (Deprecated) @@ -196,6 +203,9 @@ Allow multiple connections to the same peer in bootstrap attempts ### --fast_bootstrap Increase bootstrap processor limits to allow more blocks before hitting full state and verify/write more per database call. Also disable deletion of processed unchecked blocks +### --batch_size (Deprecated) +_version 18.0+_ +Increase sideband upgrade batch size (default 512). Deprecated in _v21_ and will be removed in _v22_ as it will not support upgrades from v18 nodes and earlier. ## Debug commands @@ -226,13 +236,15 @@ List online weights table and current online_weights value ### --debug_dump_representatives List representatives and weights -### --debug_mass_activity -Generates fake debug activity +### --debug_mass_activity (Deprecated) +Generates fake debug activity. Deprecated in _v21+_, can use `slow_test --gtest_filter=system.generate_mass_activity` instead. ### --debug_output_last_backtrace_dump +_version 19.0+_ Output the stacktrace stored after a node crash. ### --debug_generate_crash_report +_version 21.0+_ After a node crash on linux, this command consumes the dump files generated from that crash and produces a "nano_node_crash_report.txt" file. Requires `addr2line` to be installed on the system. See the [troubleshooting guide](/running-a-node/troubleshooting/#what-to-do-if-the-node-crashes-linux) for more information. ### --debug_opencl From 6ba00b132c7f7e85cacbf404d930872f02de63dc Mon Sep 17 00:00:00 2001 From: Chip Thien Date: Tue, 19 May 2020 04:33:17 -0500 Subject: [PATCH 56/87] Websocket fixes (#293) * Fix websocket fragment * Remove mention of default configuration. As the default configuration is different on Docker vs non Docker, this sentence could be ambiguous. Furthermore, the URL to connect to is also stated in /running-a-node/configuration#websocket so no need to maintain URL consistency between the two pages. * Fix fragment and grammar. --- docs/integration-guides/websockets.md | 4 +--- docs/running-a-node/configuration.md | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/docs/integration-guides/websockets.md b/docs/integration-guides/websockets.md index 2ab38696a..490370701 100644 --- a/docs/integration-guides/websockets.md +++ b/docs/integration-guides/websockets.md @@ -19,9 +19,7 @@ Sample clients are available: ## Configuration -For details on configuring websockets within a node, see the [websocket section of Running a Node Configuration](/running-a-node/configuration#websocket). - -With the default configuration, localhost clients should connect to `ws://[::1]:7078`. +For details on configuring websockets within a node, see the [websocket section of Running a Node Configuration](/running-a-node/configuration#nodewebsocket). ## Acknowledgement diff --git a/docs/running-a-node/configuration.md b/docs/running-a-node/configuration.md index 20ae76b62..9244363db 100644 --- a/docs/running-a-node/configuration.md +++ b/docs/running-a-node/configuration.md @@ -249,7 +249,7 @@ JSON POST requests with every confirmed block are sent to the callback server as For details on how to integrate using the HTTP callback, see the [HTTP Callback section of the Integration Guides](/integration-guides/advanced#http-callback). !!! tip - When possible, using the [websockets](#websocket) is recommended as it provides more efficiency, more options for types of information to receive and better control over the volume of notifications with filtering. + When possible, using a [websocket](#nodewebsocket) is recommended as it provides more efficiency, more options for types of information to receive and better control over the volume of notifications with filtering. --- From e4de3e46fca35c1e5d4359c9e997220c64c34007 Mon Sep 17 00:00:00 2001 From: Jim Huang Date: Thu, 21 May 2020 01:12:37 +0800 Subject: [PATCH 57/87] Provide alternative method to download ledger file (#294) My Nano Ninja API can redirect the current ledger file preserved at Yandex. It is convenient for Docker and/or shell scripting integration. --- docs/running-a-node/ledger-management.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/docs/running-a-node/ledger-management.md b/docs/running-a-node/ledger-management.md index 4e4dd883c..8aa084992 100644 --- a/docs/running-a-node/ledger-management.md +++ b/docs/running-a-node/ledger-management.md @@ -39,7 +39,18 @@ The additional resource usage these options cause should be considered, especial !!! tip "Always backup your ledgers file" Whenever you are attempting to change the ledger, it is highly recommended you create backups of the existing `data.ldb` file to ensure you have a rollback point if issues are encountered. -To avoid bootstrapping times, a [ledger file](#ledger-file) (`data.ldb`) can be downloaded off-network and added to the data file used by the node. This process is sometimes referred to as a "fast sync". The Nano Foundation provides a daily ledger file download in the #ledger channel of our [Discord server](https://chat.nano.org). This is posted by `SergSW` and contains checksums for validation. +To avoid bootstrapping times, a [ledger file](#ledger-file) (`data.ldb`) can be downloaded off-network and added to the data file used by the node. This process is sometimes referred to as a "fast sync". The Nano Foundation provides a daily ledger file download in the `#ledger` channel of our [Discord server](https://chat.nano.org). This is posted by `SergSW` and contains checksums for validation. +Alternatively, one of [My Nano Ninja](https://mynano.ninja/api) APIs redirects the current ledger file preserved at [Yandex](https://yandex.com/): +```bash +wget -O ledger.7z https://mynano.ninja/api/ledger/download -q --show-progress +``` + +Verify the checksum of the above downloaded ledger file: +```bash +printf "%s ledger.7z" `wget -q -O - https://mynano.ninja/api/ledger/checksum/sha256` | sha256sum --check +``` + +Be patient and wait for the message `ledger.7z: OK`. Before using this method there are a few considerations to ensure it is done safely: From 0e8016e09fc7f29067e492a5c937640d1e2d8d70 Mon Sep 17 00:00:00 2001 From: Guilherme Lawless Date: Thu, 21 May 2020 19:20:15 +0100 Subject: [PATCH 58/87] Fix broken links to work generation related configs (#298) --- docs/integration-guides/work-generation.md | 16 ++++++++-------- docs/releases/node-releases.md | 2 +- docs/snippets/hardware-recommendations.md | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/integration-guides/work-generation.md b/docs/integration-guides/work-generation.md index e7b60aeef..9f1e9ec51 100644 --- a/docs/integration-guides/work-generation.md +++ b/docs/integration-guides/work-generation.md @@ -28,10 +28,10 @@ Although the node can be configured to generate work directly, there are plans t ### Number of work peers -To provide a more robust and redundant work generation setup, multiple [work peers](/running-a-node/configuration/#nodework_peers) can be used. Any node configured with multiple peers will make requests serially from the list of work peers until a successful response is received. +To provide a more robust and redundant work generation setup, multiple [work peers](#nodework_peers) can be used. Any node configured with multiple peers will make requests serially from the list of work peers until a successful response is received. !!! tip "Disable local CPU work generation" - Since using the same CPU resources the node relies on for work generation can cause performance issues, local CPU work generation should be turned off by setting [`node.work_threads`](/running-a-node/configuration/#nodework_threads) = `0` when using work peers. + Since using the same CPU resources the node relies on for work generation can cause performance issues, local CPU work generation should be turned off by setting [`node.work_threads`](#nodework_threads) = `0` when using work peers. ## Recommended configurations @@ -49,10 +49,10 @@ Services with heavy RPC calls and work generation can benefit from ensuring dedi 1. Install the [Nano Work Server](https://github.com/nanocurrency/nano-work-server/blob/master/README.md#installation) 1. Setup a service to start and monitor the work server process using the GPU option `--gpu ` and run `nano-work-server --help` for additional options and details 1. Configure the machine running the node to allow traffic over TCP from the work generation machine's IP address -1. Add the work machine IP address as a [work peer](/running-a-node/configuration/#nodework_peers) in the node's `config-node.toml` file +1. Add the work machine IP address as a [work peer](#nodework_peers) in the node's `config-node.toml` file !!! info "CPU for lower generation levels" - For services with heavier RPC usage but less work generation needs excluding the GPU in the above example and relying on the CPU resources of the separate machine is also an option. This can be done by setting [`node.work_threads`](/running-a-node/configuration/#nodework_threads) to the appropriate thread count for your needs. + For services with heavier RPC usage but less work generation needs excluding the GPU in the above example and relying on the CPU resources of the separate machine is also an option. This can be done by setting [`node.work_threads`](#nodework_threads) to the appropriate thread count for your needs. Make sure to benchmark the machine performance to plan for any potential spikes, as CPU generation is slower. @@ -62,10 +62,10 @@ Services where RPC usage is lighter but regular work generation is needed could 1. Install the [Nano Work Server](https://github.com/nanocurrency/nano-work-server/blob/master/README.md#installation) on the same machine as the node 1. Setup a service to start and monitor the work server process with options for using the GPU - `--gpu ` is required, run `nano-work-server --help` for additional options and details -1. Configure the node to prevent local CPU work generation by setting [`node.work_threads`](/running-a-node/configuration/#nodework_threads) = `0` +1. Configure the node to prevent local CPU work generation by setting [`node.work_threads`](#nodework_threads) = `0` !!! info "Node work generation option" - A less preferred alternative to setting up, running and monitoring the Nano Work Server is to use the node itself to generate work. This should only be done with an attached GPU by setting up and enabling OpenCL with [`opencl.enable`](/running-a-node/configuration/#openclenable) = `true` and adusting `opencl.device` and `opencl.platform` to match your setup. + A less preferred alternative to setting up, running and monitoring the Nano Work Server is to use the node itself to generate work. This should only be done with an attached GPU by setting up and enabling OpenCL with [`node.opencl.enable`](#nodeopenclenable) = `true` and adusting `node.opencl.device` and `node.opencl.platform` to match your setup. --- @@ -112,7 +112,7 @@ graph TD The following configuration options can be changed in `node-config.toml`. For more information on the location of this file, and general information on the configuration of the node, see the [Configuration](/running-a-node/configuration/) page. -### opencl.enable +### node.opencl.enable !!!success "When GPU acceleration is enabled, the CPU is also used by default" Make sure to set `node.work_threads` to `0` when using the GPU @@ -218,7 +218,7 @@ The developer wallet included with the node is configured to pre-cache work at t For services aiming to ensure the highest priority on their transactions, the confirmation of published blocks should be monitored by their integration and work levels compared against active difficulty in a similar fashion to the development wallet mentioned above. If work is left at base difficulty there could be delays in the transactions being processed during heavy network usage times. !!! tip "Configure max work generate multiplier" - Due to the possibility of network work levels increasing beyond the capabilities of certain work generation setups, the config option [`node.max_work_generate_multiplier`](/running-a-node/configuration/#nodemax_work_generate_multiplier) can be used to limit how high a work value will be requested at. All setups, whether using the developer wallet or an external integration, should implement an appropriate limit which defaults to 64x in V20. + Due to the possibility of network work levels increasing beyond the capabilities of certain work generation setups, the config option [`node.max_work_generate_multiplier`](#nodemax_work_generate_multiplier) can be used to limit how high a work value will be requested at. All setups, whether using the developer wallet or an external integration, should implement an appropriate limit which defaults to 64x in V20. !!! warning "Upcoming threshold changes and variations by block type" Plans are underway to change the thresholds based on the type of block with the release of V21 and subsequent distribution of v2 epoch blocks to enable the feature. See the [Development Update: V21 PoW Difficulty Increases article](https://medium.com/nanocurrency/development-update-v21-pow-difficulty-increases-362b5d052c8e) for full details. diff --git a/docs/releases/node-releases.md b/docs/releases/node-releases.md index 11bfe3648..0226c971e 100644 --- a/docs/releases/node-releases.md +++ b/docs/releases/node-releases.md @@ -151,7 +151,7 @@ As part of the original implementation work we were able to setup infrastructure * **BEHAVIOR CHANGE** [`process`](/commands/rpc-protocol/#process) now takes an optional flag `watch_work` (default `true`). Unless set to `false`, processed blocks can be subject to PoW rework * **BEHAVIOR CHANGE** [`bootstrap`](/commands/rpc-protocol/#bootstrap), [`bootstrap_any`](/commands/rpc-protocol/#bootstrap_any) and [`boostrap_lazy`](/commands/rpc-protocol/#bootstrap_lazy) will now throw errors when certain launch flags are used to disabled bootstrap methods - see each RPC page for details -* **BEHAVIOR CHANGE** RPCs requiring work generation will now throw errors when work generation is disabled (no [work peers](/running-a-node/configuration/#nodework_peers), no [OpenCL](/running-a-node/configuration/#openclenable) and no work threads configured) +* **BEHAVIOR CHANGE** RPCs requiring work generation will now throw errors when work generation is disabled (no [work peers](/integration-guides/work-generation/#nodework_peers), no [OpenCL](/integration-guides/work-generation/#nodeopenclenable) and no work threads configured) * [`block_count`](/commands/rpc-protocol/#block_count) no longer requires config option `enable_control` to get the cemented block count * [`unchecked`](/commands/rpc-protocol/#unchecked) now takes an optional flag `json_block` to return blocks in JSON-format * [`version`](/commands/rpc-protocol/#version) now includes more fields - network label, identifier (hash of the genesis open block) and build information diff --git a/docs/snippets/hardware-recommendations.md b/docs/snippets/hardware-recommendations.md index 25448e71f..fdb35e366 100644 --- a/docs/snippets/hardware-recommendations.md +++ b/docs/snippets/hardware-recommendations.md @@ -22,4 +22,4 @@ The following are minimum recommended specifications for nodes with less than 0. !!! tip "Proof-of-Work Generation" For nodes being used with services requiring regular or high volume sending and receiving of transactions, special considerations must be made for handling Proof-of-Work generation activities. - GPUs provide much higher throughput than CPUs. [Work peers](/running-a-node/configuration/#work_peers) can also be configured for generating work outside the node. \ No newline at end of file + GPUs provide much higher throughput than CPUs. [Work peers](/integration-guides/work-generation/#nodework_peers) can also be configured for generating work outside the node. \ No newline at end of file From c93142b75b87d4a98155fcd9db4bc740947e6f62 Mon Sep 17 00:00:00 2001 From: Zach Hyatt Date: Thu, 21 May 2020 15:04:57 -0500 Subject: [PATCH 59/87] Broken link checker (#302) * Force strict link checking during CI build process * Add broken link to check proper CI build failure * Fix broken link * Fix link formats on work generation page --- .travis.yml | 2 +- docs/integration-guides/work-generation.md | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.travis.yml b/.travis.yml index b5c5d8bca..5b2cf764d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,7 +15,7 @@ before_script: script: - | if [ "${TRAVIS_PULL_REQUEST}" != "false" ]; then - mkdocs build + mkdocs build --strict elif [ "${TRAVIS_PULL_REQUEST}" = "false" ] && [ "${TRAVIS_BRANCH}" = "master" ]; then openssl aes-256-cbc -K $encrypted_5f828affe522_key -iv $encrypted_5f828affe522_iv -in deploy-key.enc -out deploy-key -d chmod 600 deploy-key diff --git a/docs/integration-guides/work-generation.md b/docs/integration-guides/work-generation.md index 9f1e9ec51..2d4e9c6de 100644 --- a/docs/integration-guides/work-generation.md +++ b/docs/integration-guides/work-generation.md @@ -3,7 +3,7 @@ description: Understand the best configurations for work generation on the Nano !!!tip "Some sections of this page target node version 21 or higher" -Every block published to the network, whether a send, receive or representative change block, requires a small, valid [Proof-of-Work](/glossary/#proof-of-work-pow) to be completed above a minimum difficulty floor (threshold). As of V21 this threshold is different for different block types: send and change blocks require a higher threshold, while receive blocks are lower. +Every block published to the network, whether a send, receive or representative change block, requires a small, valid [Proof-of-Work](../glossary.md#proof-of-work-pow) to be completed above a minimum difficulty floor (threshold). As of V21 this threshold is different for different block types: send and change blocks require a higher threshold, while receive blocks are lower. This work value is not used in consensus, but instead is one of the first pieces of data used to validate blocks on the network and is a key component of maintaining consistent quality of service on the network. @@ -110,7 +110,7 @@ graph TD ## Node Configuration -The following configuration options can be changed in `node-config.toml`. For more information on the location of this file, and general information on the configuration of the node, see the [Configuration](/running-a-node/configuration/) page. +The following configuration options can be changed in `node-config.toml`. For more information on the location of this file, and general information on the configuration of the node, see the [Configuration](../running-a-node/configuration.md) page. ### node.opencl.enable @@ -128,7 +128,7 @@ Determines the number of local CPU threads to used for work generation. **While Set to `0` to turn off local CPU work generation. ### node.work_peers -Used when offloading work generation to another node or service. Format must be ipv6, preceded by `::ffff:` if ipv4. Hostnames are supported since v21. Calls are made to the address:port designated using the standard RPC format [work_generate](/commands/rpc-protocol#work_generate). Example: +Used when offloading work generation to another node or service. Format must be ipv6, preceded by `::ffff:` if ipv4. Hostnames are supported since v21. Calls are made to the address:port designated using the standard RPC format [work_generate](../commands/rpc-protocol.md#work_generate). Example: ```toml [node] @@ -159,9 +159,9 @@ Sets a limit on the generation difficulty. Multiplier is based off the [base dif Note that these commands do not use the configuration of the node. Prefer using the alternative above for that purpose, such as changing the number of threads for CPU work generation, or using work peers. -[CPU](/commands/command-line-interface#-debug_profile_generate) with all available threads: `nano_node --debug_profile_generate [--difficulty fffffff800000000] [--multiplier 1.0]` +[CPU](../commands/command-line-interface.md#-debug_profile_generate) with all available threads: `nano_node --debug_profile_generate [--difficulty fffffff800000000] [--multiplier 1.0]` -[GPU](/commands/command-line-interface#-debug_opencl) acceleration: `nano_node --debug_opencl --platform=0 --device=0 [--difficulty fffffff800000000] [--multiplier 1.0]` +[GPU](../commands/command-line-interface.md#-debug_opencl) acceleration: `nano_node --debug_opencl --platform=0 --device=0 [--difficulty fffffff800000000] [--multiplier 1.0]` The command will trigger continual work generation, so let it run until a sufficient sample size of times are generated (at least 100 instances). Compute the average of these times which are the number of microseconds it took to generate each sample. @@ -207,7 +207,7 @@ $$ ### Difficulty thresholds -The mainnet's base difficulty threshold is currently `0xffffffc000000000` for all blocks. For a block to be valid, its work field must satisfy the above work equations using this value for threshold. Nodes also prioritize the order in which they confirm transactions based on how far above this threshold the work value is. This only happens in case of saturation. Due to prioritization, it may be desirable to generate work further above the threshold to guarantee faster processing by the network. To assist integrations with managing these work difficulty levels, nodes monitor the trend of difficulty seen on unconfirmed blocks, and expose that value via the [`active_difficulty`](/commands/rpc-protocol/#active_difficulty) RPC. +The mainnet's base difficulty threshold is currently `0xffffffc000000000` for all blocks. For a block to be valid, its work field must satisfy the above work equations using this value for threshold. Nodes also prioritize the order in which they confirm transactions based on how far above this threshold the work value is. This only happens in case of saturation. Due to prioritization, it may be desirable to generate work further above the threshold to guarantee faster processing by the network. To assist integrations with managing these work difficulty levels, nodes monitor the trend of difficulty seen on unconfirmed blocks, and expose that value via the [`active_difficulty`](../commands/rpc-protocol.md#active_difficulty) RPC. **Development node wallet behavior** @@ -227,7 +227,7 @@ For services aiming to ensure the highest priority on their transactions, the co Work for an account can be pre-cached and saved for immediate use on an account as long as it was based on the current frontier block at the time of use. Although this customization must be made externally to the node, it can help level out potential spikes in work generation, especially useful with wallet implementations. -To accomplish this, after a block is published for an account (whatever type of block), note the _**hash**_ of that block and use it in a RPC [work_generate](https://docs.nano.org/commands/rpc-protocol/#work_generate) call. Note that you may require setting `“use_peers”: “true”`. +To accomplish this, after a block is published for an account (whatever type of block), note the _**hash**_ of that block and use it in a RPC [work_generate](../commands/rpc-protocol.md#work_generate) call. Note that you may require setting `“use_peers”: “true”`. Upon receiving a response, store its value in your database for later use for that account. Note that after a new block is published for the account, that value will no longer be a valid PoW. @@ -242,7 +242,7 @@ For services that process receiving their pending transactions in bulk the lower ### Difficulty multiplier -Relative difficulty, or difficulty multiplier, describes how much more value a PoW has compared to another. In the node this is typically used to compare against the base threshold, often in relation to rework being performed or validated for proper priotizing of transactions. This value is available as part of the [`active_difficulty`](/commands/rpc-protocol/#active_difficulty) RPC, but can also be obtained with the following expression: +Relative difficulty, or difficulty multiplier, describes how much more value a PoW has compared to another. In the node this is typically used to compare against the base threshold, often in relation to rework being performed or validated for proper priotizing of transactions. This value is available as part of the [`active_difficulty`](../commands/rpc-protocol.md#active_difficulty) RPC, but can also be obtained with the following expression: $$ \frac{(2^{64} - \text{base_difficulty})}{(2^{64} - \text{work_difficulty})} From 702e89e568f622e5238d44f372c55432ed351f19 Mon Sep 17 00:00:00 2001 From: Sergey Kroshnin Date: Mon, 25 May 2020 11:37:59 +0300 Subject: [PATCH 60/87] Specify some Nano cryptopgraphic functions details (#292) * Blake2b lengths (output digests can be from 8 up to 512 bit). Ed25519 is using 512, block hash 256, accounts checksum 40. * Specific Argon2 version (Argon2d ver. 1.0). * Extra notice about blake2b concatenation usage for key derivation from seed (with python sample). * Mnemonic seed reference from basics. * Blake2b from cryptopp is not used. Random number generator & SipHash are used * Notices about BIP44 private keys derivation & entropy * Make Python sample more clear for concatenation --- docs/integration-guides/the-basics.md | 37 +++++++++++++++++-- docs/integration-guides/work-generation.md | 2 +- docs/protocol-design/overview.md | 2 +- .../signing-hashing-and-key-derivation.md | 8 ++-- 4 files changed, 39 insertions(+), 10 deletions(-) diff --git a/docs/integration-guides/the-basics.md b/docs/integration-guides/the-basics.md index b30f6723f..c946689be 100644 --- a/docs/integration-guides/the-basics.md +++ b/docs/integration-guides/the-basics.md @@ -49,20 +49,49 @@ The reason this is necessary is because we want to store information about each This is the value that you get back when using the `wallet_create` etc RPC commands, and what the node expects for RPC commands with a `"wallet"` field as input. ### Seed -This is a series of 32 random bytes of data, usually represented as a 64 character, uppercase hexadecimal string (0-9A-F). This value is used to derive **account private keys** for accounts by combining it with an index and then putting that into the following hash function where `||` means concatenation and `i` is a 32bit unsigned integer: `PrivK[i] = blake2b(outLen = 32, input = seed || i)` +This is a series of 32 random bytes of data, usually represented as a 64 character, uppercase hexadecimal string (0-9A-F). This value is used to derive **account private keys** for accounts by combining it with an index and then putting that into the following hash function where `||` means concatenation and `i` is a 32-bit big-endian unsigned integer: `PrivK[i] = blake2b(outLen = 32, input = seed || i)` -Private keys are derived **deterministically** from the seed, which means that as long as you put the same seed and index into the derivation function, you will get the same resulting private key every time. Therefore, knowing just the seed allows you to be able to access all the derived private keys from index 0 to 2^32 - 1 (because the index value is a unsigned 32 bit integer). +Private keys are derived **deterministically** from the seed, which means that as long as you put the same seed and index into the derivation function, you will get the same resulting private key every time. Therefore, knowing just the seed allows you to be able to access all the derived private keys from index 0 to 2^32 - 1 (because the index value is a unsigned 32-bit integer). Wallet implementations will commonly start from index 0 and increment it by 1 each time you create a new account so that recovering accounts is as easy as importing the seed and then repeating this account creation process. +It should be noted that Nano reference wallet is using described Blake2b private keys derivation path. However some implementations can use BIP44 deterministic wallets and [menmonic seed](/integration-guides/key-management/#mnemonic-seed) producing different private keys for given seed and indices. Additionally 24-word mnemonic can be derived from a Nano 64 length hex seed as entropy with clear notice for users that this is not BIP44 seed/entropy. + +??? info "Code samples" + + Python deterministic key: + ```python + import hashlib + seed = b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" # "0000000000000000000000000000000000000000000000000000000000000001" + index = 0x00000001.to_bytes(4, 'big') # 1 + blake2b_state = hashlib.blake2b(digest_size=32) + blake2b_state.update(seed+index) + # where `+` means concatenation, not sum: https://docs.python.org/3/library/hashlib.html#hashlib.hash.update + # code line above is equal to `blake2b_state.update(seed); blake2b_state.update(index)` + PrivK = blake2b_state.digest() + print(blake2b_state.hexdigest().upper()) # "1495F2D49159CC2EAAAA97EBB42346418E1268AFF16D7FCA90E6BAD6D0965520" + ``` + + Mnemonic words for Blake2b Nano seed using [Bitcoinjs](https://github.com/bitcoinjs/bip39): + ```js + const bip39 = require('bip39') + + const mnemonic = bip39.entropyToMnemonic('0000000000000000000000000000000000000000000000000000000000000001') + // => abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon diesel + + bip39.mnemonicToEntropy(mnemonic) + // => '0000000000000000000000000000000000000000000000000000000000000001' + ``` + + ### Account private key This is also a 32 byte value, usually represented as a 64 character, uppercase hexadecimal string(0-9A-F). It can either be random (an *ad-hoc key*) or derived from a seed, as described above. This is what represents control of a specific account on the ledger. If you know or can know the private key of someone's account, you can transact as if you own that account. ### Account public key -This is also a 32 byte value, usually represented as a 64 character, uppercase hexadecimal string (0-9A-F). It is derived from an *account private key* by using the ed25519 curve using blake2b as the hash function (instead of sha). Usually account public keys will not be passed around in this form, rather the below address is used. +This is also a 32 byte value, usually represented as a 64 character, uppercase hexadecimal string (0-9A-F). It is derived from an *account private key* by using the ED25519 curve using Blake2b-512 as the hash function (instead of SHA-512). Usually account public keys will not be passed around in this form, rather the below address is used. ### Account public address -This is what you think of as someone's Nano address: it's a string that starts with `nano_` (previously `xrb_`), then has 52 characters which are the *account public key* but encoded with a specific base32 encoding algorithm to prevent human transcription errors by limiting ambiguity between different characters (no `O` and `0` for example). Then the final 8 characters are a checksum of the account public key to aid in discovering typos, also encoded with the same base32 scheme. +This is what you think of as someone's Nano address: it's a string that starts with `nano_` (previously `xrb_`), then has 52 characters which are the *account public key* but encoded with a specific base32 encoding algorithm to prevent human transcription errors by limiting ambiguity between different characters (no `O` and `0` for example). Then the final 8 characters are Blake2b-40 checksum of the account public key to aid in discovering typos, also encoded with the same base32 scheme (5 bytes). So for address `nano_1anrzcuwe64rwxzcco8dkhpyxpi8kd7zsjc1oeimpc3ppca4mrjtwnqposrs`: diff --git a/docs/integration-guides/work-generation.md b/docs/integration-guides/work-generation.md index 2d4e9c6de..2b073da62 100644 --- a/docs/integration-guides/work-generation.md +++ b/docs/integration-guides/work-generation.md @@ -191,7 +191,7 @@ The `"work"` field in transactions contains a 64-bit [nonce](https://en.wikipedi **Block Height 1** -The first block on an account-chain doesn't have a previous (head) block, so the account public key is used: +The first block on an account-chain doesn't have a previous (head) block, so the account public key is used (`||` means concatenation): $$ blake2b(\text{nonce} || \text{public_key}) \ge \text{threshold} diff --git a/docs/protocol-design/overview.md b/docs/protocol-design/overview.md index 40c32b121..b8ede7b44 100644 --- a/docs/protocol-design/overview.md +++ b/docs/protocol-design/overview.md @@ -33,7 +33,7 @@ Make sure you have the correct [Boost version](https://github.com/nanocurrency/n | **Name** | **Details** | | | | -| cryptopp | Provides the implementation for blake2, AES and other cryptographic schemes. | +| cryptopp | Provides the implementation for random number generator, SipHash, AES and other cryptographic schemes. | | phc‑winner‑argon2 | When encrypting with AES, the password first goes through key derivation, and argon2 is our hash of choice for doing that. | | lmdb | The database library used for the ledger and wallet, with local patches for Windows. This is a very fast and portable key/value store with ordered keys. It is extremely resilient to crashes in the program, OS, and power-downs without corruption. | | miniupnp | This library is used to do port mapping if the gateway supports it. | diff --git a/docs/protocol-design/signing-hashing-and-key-derivation.md b/docs/protocol-design/signing-hashing-and-key-derivation.md index 066f3b9b4..130ddf87f 100644 --- a/docs/protocol-design/signing-hashing-and-key-derivation.md +++ b/docs/protocol-design/signing-hashing-and-key-derivation.md @@ -2,7 +2,7 @@ ### Signing algorithm: ED25519 -ED25519 is an elliptic curve algorithm developed in an academic setting with a focus on security from side channel attack, performance, and fixing a lot of the little annoyances in most elliptic curve systems[^1]. However, it should be noted that instead of using SHA-512 in the key derivation function, Nano uses Blake2b. +ED25519 is an elliptic curve algorithm developed in an academic setting with a focus on security from side channel attack, performance, and fixing a lot of the little annoyances in most elliptic curve systems[^1]. However, it should be noted that instead of using SHA-512 in the key derivation function, Nano uses Blake2b-512. !!! failure "Incorrect, SHA-512 has been used" ``` @@ -10,7 +10,7 @@ ED25519 is an elliptic curve algorithm developed in an academic setting with a f 3B6A27BCCEB6A42D62A3A8D02A6F0D73653215771DE243A63AC048A18B59DA29 ``` -!!! success "Correct, Blake2b digested the seed" +!!! success "Correct, Blake2b-512 digested the seed" ``` 0000000000000000000000000000000000000000000000000000000000000000 -> 19D3D919475DEED4696B5D13018151D1AF88B2BD3BCFF048B45031C1F36D1858 @@ -18,11 +18,11 @@ ED25519 is an elliptic curve algorithm developed in an academic setting with a f ### Hashing algorithm: Blake2 -Compared to existing cryptocurrencies, the hash algorithm chosen is much less important since it's not being used in a [Proof-of-Work](/glossary#proof-of-work-pow) context. In Nano hashing is used purely as a digest algorithm against block contents. Blake2 is a highly optimized cryptographic hash function whose predecessor was a SHA3 finalist.[^2] +Compared to existing cryptocurrencies, the hash algorithm chosen is much less important since it's not being used in a [Proof-of-Work](/glossary#proof-of-work-pow) context. In Nano hashing is used purely as a digest algorithm against block contents. Blake2b-256 is a highly optimized cryptographic hash function whose predecessor was a SHA3 finalist.[^2] ### Key derivation function: Argon2 -The key derivation function of Argon2 is used for securing the account keys in the reference wallet. [^3] +The key derivation function of Argon2d version 1.0 is used for securing the account keys in the reference wallet. [^3] [^1]:http://ed25519.cr.yp.to/ [^2]:https://blake2.net/ From 81a54671406c261bed717c9ac2eb075f3801a62c Mon Sep 17 00:00:00 2001 From: Sergey Kroshnin Date: Tue, 26 May 2020 23:46:34 +0300 Subject: [PATCH 61/87] CLI command for a frontier confirmation speed test (#268) --- docs/commands/command-line-interface.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/commands/command-line-interface.md b/docs/commands/command-line-interface.md index f28e83aeb..a77e9197f 100644 --- a/docs/commands/command-line-interface.md +++ b/docs/commands/command-line-interface.md @@ -271,6 +271,10 @@ Profile signature generation ### --debug_profile_votes Profile vote verification +### --debug_profile_frontiers_confirmation +_version 21.0+_ +Profile frontiers confirmation speed + ### --debug_stacktrace _version 20.0+_ Prints a stacktrace example, useful to verify that it includes the desired information, such as files, function names and line numbers From ca0e21f8195c3604b532743fd65e8e3160f6d3be Mon Sep 17 00:00:00 2001 From: Sergey Kroshnin Date: Tue, 26 May 2020 23:46:56 +0300 Subject: [PATCH 62/87] Add launch flag --disable_block_processor_unchecked_deletion (#291) https://github.com/nanocurrency/nano-node/pull/2557 --- docs/commands/command-line-interface.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/commands/command-line-interface.md b/docs/commands/command-line-interface.md index a77e9197f..52de0c454 100644 --- a/docs/commands/command-line-interface.md +++ b/docs/commands/command-line-interface.md @@ -192,6 +192,10 @@ Prevent drop of all unchecked entries at node/wallet start _version 21.0+_ Do not provide any telemetry data to nodes requesting it. Responses are still made to requests, but they will have an empty payload. +### --disable_block_processor_unchecked_deletion +_version 21.0+_ +Disable deletion of unchecked blocks after processing. + ### --enable_udp _version 21.0+_ Turn on use of the UDP live network. @@ -201,7 +205,7 @@ _version 21.0+_ Allow multiple connections to the same peer in bootstrap attempts ### --fast_bootstrap -Increase bootstrap processor limits to allow more blocks before hitting full state and verify/write more per database call. Also disable deletion of processed unchecked blocks +Increase bootstrap processor limits to allow more blocks before hitting full state and verify/write more per database call. Also disable deletion of processed unchecked blocks. ### --batch_size (Deprecated) _version 18.0+_ From ae7522dab298362ef7ac8ecbe0be05aeaae6047d Mon Sep 17 00:00:00 2001 From: Jim Huang Date: Thu, 28 May 2020 02:47:47 +0800 Subject: [PATCH 63/87] Use consistent math representation (#304) --- docs/integration-guides/the-basics.md | 2 +- docs/protocol-design/distribution-and-units.md | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/integration-guides/the-basics.md b/docs/integration-guides/the-basics.md index c946689be..37341c457 100644 --- a/docs/integration-guides/the-basics.md +++ b/docs/integration-guides/the-basics.md @@ -51,7 +51,7 @@ This is the value that you get back when using the `wallet_create` etc RPC comma ### Seed This is a series of 32 random bytes of data, usually represented as a 64 character, uppercase hexadecimal string (0-9A-F). This value is used to derive **account private keys** for accounts by combining it with an index and then putting that into the following hash function where `||` means concatenation and `i` is a 32-bit big-endian unsigned integer: `PrivK[i] = blake2b(outLen = 32, input = seed || i)` -Private keys are derived **deterministically** from the seed, which means that as long as you put the same seed and index into the derivation function, you will get the same resulting private key every time. Therefore, knowing just the seed allows you to be able to access all the derived private keys from index 0 to 2^32 - 1 (because the index value is a unsigned 32-bit integer). +Private keys are derived **deterministically** from the seed, which means that as long as you put the same seed and index into the derivation function, you will get the same resulting private key every time. Therefore, knowing just the seed allows you to be able to access all the derived private keys from index 0 to $2^{32} - 1$ (because the index value is a unsigned 32-bit integer). Wallet implementations will commonly start from index 0 and increment it by 1 each time you create a new account so that recovering accounts is as easy as importing the seed and then repeating this account creation process. diff --git a/docs/protocol-design/distribution-and-units.md b/docs/protocol-design/distribution-and-units.md index 24f6dc5ae..a3046fa91 100644 --- a/docs/protocol-design/distribution-and-units.md +++ b/docs/protocol-design/distribution-and-units.md @@ -19,21 +19,21 @@ The distribution of Nano (formerly RaiBlocks) was performed through solving manu During distribution the Genesis seed was kept in cold storage and funds were moved to the Landing account once per week to minimize the number of live, undistributed blocks. These were subsequently moved into the Faucet account for distribution until the faucet was closed and remaining funds sent to the Burn account. !!! info "Total Supply" - With 2^128 - 1 Nano in the original Genesis account, upon closing of the faucet and burning of the remaining funds, the total supply which is 100% in circulation ended at **~133,248,297 Nano** (or more precisely 133248297920938463463374607431768211455 raw). Since then, additional funds have been sent to the known burn address slightly lowering the amount in circulation as a result. This amount can be found using the [available_supply](/commands/rpc-protocol/#available_supply) RPC. + With $2^{128} - 1$ Nano in the original Genesis account, upon closing of the faucet and burning of the remaining funds, the total supply which is 100% in circulation ended at **~133,248,297 Nano** (or more precisely 133248297920938463463374607431768211455 raw). Since then, additional funds have been sent to the known burn address slightly lowering the amount in circulation as a result. This amount can be found using the [available_supply](/commands/rpc-protocol/#available_supply) RPC. ## Unit Dividers A 128 bit integer is used to represent account balances. A set of SI prefixes was used to make the numbers more accessible and avoid confusion. The reference wallet uses Mnano (or NANO/Nano) as a divider. | Name | SI Prefix | Integer | Power |---------------|-----------|------------------------------------|------- -| | Gnano | 1000000000000000000000000000000000 | 10^33 -| NANO/Nano | Mnano | 1000000000000000000000000000000 | 10^30 -| | knano | 1000000000000000000000000000 | 10^27 -| | nano | 1000000000000000000000000 | 10^24 -| | mnano | 1000000000000000000000 | 10^21 -| | unano | 1000000000000000000 | 10^18 -| raw | | 1 | 10^0 +| | Gnano | 1000000000000000000000000000000000 | $10^{33}$ +| NANO/Nano | Mnano | 1000000000000000000000000000000 | $10^{30}$ +| | knano | 1000000000000000000000000000 | $10^{27}$ +| | nano | 1000000000000000000000000 | $10^{24}$ +| | mnano | 1000000000000000000000 | $10^{21}$ +| | unano | 1000000000000000000 | $10^{18}$ +| raw | | 1 | $10^{0}$ 1 raw is the smallest possible division and NANO/Nano (Mnano) is the current standard division used in most wallets, on exchanges, etc. -[^1]:https://medium.com/nanocurrency/the-nano-faucet-c99e18ae1202 \ No newline at end of file +[^1]:https://medium.com/nanocurrency/the-nano-faucet-c99e18ae1202 From b2780bf57dbd718665bd24774d0072af1c1aef5c Mon Sep 17 00:00:00 2001 From: Zach Hyatt Date: Wed, 27 May 2020 15:10:22 -0500 Subject: [PATCH 64/87] Add voting as representative guide, revise snippets, adjust config locations (#303) * Add voting as representative guide, revise snippets, adjust config locations * Move security recommendations to top of node type list * Adjust websocket configuration callouts * Add hardware recommendations to voting guide --- docs/integration-guides/ipc-integration.md | 38 ++++- docs/integration-guides/websockets.md | 20 ++- docs/running-a-node/configuration.md | 132 +++++++++--------- docs/running-a-node/node-setup.md | 32 +++-- docs/running-a-node/overview.md | 31 ++-- docs/running-a-node/security.md | 2 + .../voting-as-a-representative.md | 89 ++++++++++++ ...fig-node-option-node-enable-voting-true.md | 10 ++ .../config-node-option-rpc-enable-true.md | 10 ++ .../dedicated-representative-nodes.md | 2 + docs/snippets/hardware-recommendations.md | 18 +-- docs/snippets/join-technical-mailing-list.md | 2 + docs/snippets/network-details.md | 8 +- mkdocs.yml | 7 +- 14 files changed, 297 insertions(+), 104 deletions(-) create mode 100644 docs/running-a-node/voting-as-a-representative.md create mode 100644 docs/snippets/config-node-option-node-enable-voting-true.md create mode 100644 docs/snippets/config-node-option-rpc-enable-true.md create mode 100644 docs/snippets/dedicated-representative-nodes.md create mode 100644 docs/snippets/join-technical-mailing-list.md diff --git a/docs/integration-guides/ipc-integration.md b/docs/integration-guides/ipc-integration.md index e5b4e5637..6879df603 100644 --- a/docs/integration-guides/ipc-integration.md +++ b/docs/integration-guides/ipc-integration.md @@ -5,7 +5,43 @@ The node manages communications using an IPC interface with v1 introduced in V18 **Configuration** -IPC is configured in the `node.ipc.tcp` and `node.ipc.local` sections of the node configuration file. A documented configuration file can be generated by following the instructions in [Configuration](/running-a-node/configuration/#ipc). +These configuration options are set in the [`config-node.toml` file](../running-a-node/configuration.md#configuration-file-locations). + +IPC is configured in the `node.ipc.tcp` and `node.ipc.local` sections: + +```toml +[node.ipc.local] + +# If enabled, certain unsafe RPCs can be used. Not recommended for production systems. +# type:bool +#allow_unsafe = false + +# Enable or disable IPC via local domain socket. +# type:bool +#enable = false + +# Timeout for requests. +# type:seconds +#io_timeout = 15 + +# Path to the local domain socket. +# type:string +#path = "/tmp/nano" + +[node.ipc.tcp] + +# Enable or disable IPC via TCP server. +# type:bool +#enable = false + +# Timeout for requests. +# type:seconds +#io_timeout = 15 + +# Server listening port. +# type:uint16 +#port = 7077 +``` ## IPC request/response format diff --git a/docs/integration-guides/websockets.md b/docs/integration-guides/websockets.md index 490370701..97da14a96 100644 --- a/docs/integration-guides/websockets.md +++ b/docs/integration-guides/websockets.md @@ -19,7 +19,25 @@ Sample clients are available: ## Configuration -For details on configuring websockets within a node, see the [websocket section of Running a Node Configuration](/running-a-node/configuration#nodewebsocket). +These configuration options are set in the [`config-node.toml` file](../running-a-node/configuration.md#configuration-file-locations). + +```toml +[node.websocket] + +# WebSocket server bind address. +# type:string,ip +address = "::1" + +# Enable or disable WebSocket server. +# type:bool +enable = true + +# WebSocket server listening port. +# type:uint16 +port = 7078 +``` + +With the above configuration, localhost clients should connect to `ws://[::1]:7078`. If using with Docker, see [Managing the Container](../running-a-node/docker-management.md#managing-the-container) for details on port and address settings. ## Acknowledgement diff --git a/docs/running-a-node/configuration.md b/docs/running-a-node/configuration.md index 9244363db..a40d8b552 100644 --- a/docs/running-a-node/configuration.md +++ b/docs/running-a-node/configuration.md @@ -1,6 +1,6 @@ # Node Configuration -The Nano node software is designed to run with little or no configuration. All configuration options have defaults that can be changed using TOML configuration files, by passing config values via the command line, or a combination of the two methods. +The Nano node software is designed to run with little or no configuration. All configuration options have defaults that can be changed using TOML configuration files, by passing configuration values via the command line, or a combination of the two methods. !!! success "Automatic migration and backups of JSON files" Versions prior to 20 use JSON as the configuration file format, and these will be automatically migrated to TOML files on startup. Note that only non-default values are migrated. @@ -143,7 +143,7 @@ The Nano node software is designed to run with little or no configuration. All c } ``` -## Configuration File Locations +## Configuration file locations The node and its related processes will look for the files listed below, either in their default location or the location specified with `--data_path`. These files are *optional*. The table includes a command which can be used to generate a documented TOML file with defaults suitable for the system. @@ -153,6 +153,28 @@ The default locations of the config files are listed in the table below. --8<-- "folder-locations.md" +## Options formatting + +Config options are referred to in the documentation using the format `category.option` where `category` can be multiple levels. For example, the `node.enable_voting` option would correspond to the following entry in the TOML file: + +```toml +[node] + +# Enable or disable voting. Enabling this option requires additional system resources, namely increased CPU, bandwidth and disk usage. +# type:bool +enable_voting = true +``` + +While a multiple category option like `node.websocket.enable` would correspond to this TOML file entry: + +```toml +[node.websocket] + +# Enable or disable WebSocket server. +# type:bool +enable = false +``` + ## Passing config values on the command line Instead of changing the config file, config values can be passed in via the `--config` option, which can be repeated multiple times. @@ -170,98 +192,76 @@ Strings are passed with escaped quotes (`\"`), such as: ## Notable configuration options -This section details some of the most important configuration options. - -Config options are referred to below using the format `section.setting`. This format can be used directly on the command line, such as `--config node.enable_voting=true`. The corresponding entry in the TOML file would be: - -```toml -[node] -enable_voting = true -``` - -### Work generation options -These configurations are located in the [Work Generation Guide](/integration-guides/work-generation/#node-configuration). - -### config-node.toml - -#### node.enable_voting -As of V18.0, newly setup nodes have voting disabled by default. In order to participate in network consensus, this value must be updated to enable voting and the node restarted. - ---- +As of _V20.0_ the sample TOML packaged with the binaries and available for [generation via the command line](#configuration-file-locations) are commented out with descriptions of each option. Where applicable the following integration areas have those options included along with additional context where necessary. -#### node.vote_minimum -As of V18.0, nodes with weight delegated to them under this value in their config will not vote, regardless of the `enable_voting` flag setting. In order for a node to vote, this value must be lower than the weight delegated to the representative account setup on the node. +### Work generation +See the [Work Generation guide](../integration-guides/work-generation.md#node-configuration). ---- +### WebSockets +See the [WebSockets Integration guide](../integration-guides/websockets.md#configuration). -#### node.ipc +### RPC -IPC is disabled by default. For details about using the IPC setup, see the [IPC Integration Guide](/integration-guides/advanced#ipc-integration). +--8<-- "config-node-option-rpc-enable-true.md" ---- +#### enable_control +This configuration option is set in the [`config-rpc.toml`](../running-a-node/configuration.md#configuration-file-locations) file. -#### node.websocket +Due to their sensitive or dangerous nature, certain RPC calls/options require this setting to be enabled before they can be used. Examples of RPC calls that require this include: -!!! note "" - Available in Version 19.0+ only +* [stop](../commands/rpc-protocol.md#stop): allows you to completely stop the node from running +* [work_generate](../commands/rpc-protocol.md#work_generate): allows potential consumption of CPU or GPU resources on the node or attached work peers to generate PoW +* [send](../commands/rpc-protocol.md#send): can be used to transfer available funds in the wallet to another account +* Various other wallet and resource-heavy operations ```toml -[node.websocket] -address = "::1" -enable = true -port = 7078 +# Enable or disable control-level requests. +# WARNING: Enabling this gives anyone with RPC access the ability to stop the node and access wallet funds. +# type:bool +enable_control = false ``` -With the above configuration, localhost clients should connect to `ws://[::1]:7078`. For details on how to integrate using websockets, see the [Websocket Support section of the Integration Guides](/integration-guides/websockets). - -!!! tip "Configuration for docker nodes" - Docker nodes have the default `address` set to `"::ffff:0.0.0.0"`. To allow a connection between the host and the node, include `-p 127.0.0.1:7078:7078` (or another port if changed) in the `docker run` command or equivalent. - ---- +!!! danger "Dangerous RPC calls controlled by `enable_control`" + Due to the sensitive or dangerous nature of these calls, **caution should be used when considering setting `enable_control` to `true`** in your config file. It is highly recommended to **only enable this when RPC ports are listening exclusively to local or loopback IP addresses** or other measure are put in place outside the node to limit RPC access to dangerous calls. For more details see the [Node Security page](security.md). -### config-rpc.toml +More advanced options for controlling the process the RPC server runs under can be found in the [Running Nano as a service guide](../integration-guides/advanced.md#running-nano-as-a-service). -#### enable_control +### IPC +See the [IPC Integration guide](../integration-guides/ipc-integration.md#configuration). -Due to their sensitive or dangerous nature, certain RPC calls/options require this setting to be enabled before they can be used. Examples of RPC calls that require this include: +### Voting +See the [Voting as a Representative guide](voting-as-a-representative.md). -* [stop](/commands/rpc-protocol#stop): allows you to completely stop the node from running -* [work_generate](/commands/rpc-protocol#work_generate): allows potential consumption of CPU or GPU resources on the node or attached work peers to generate PoW -* [send](/commands/rpc-protocol#send): can be used to transfer available funds in the wallet to another account -* Various other wallet and resource-heavy operations +### HTTP callback -!!! danger "Dangerous RPC calls controlled by `enable_control`" - Due to the sensitive or dangerous nature of these calls, **caution should be used when considering setting `enable_control` to `true`** in your config file. It is highly recommended to **only enable this when RPC ports are listening exclusively to local or loopback IP addresses** or other measure are put in place outside the node to limit RPC access to dangerous calls. For more details see the [Node Security page](/running-a-node/security). - ---- +!!! tip + When possible, using a [WebSocket](../integration-guides/websockets.md#configuration) is recommended as it provides more efficiency, more options for types of information to receive and better control over the volume of notifications with filtering. -#### HTTP callback +These configuration options are set in the [`config-node.toml`](../running-a-node/configuration.md#configuration-file-locations) file. ```toml [node.httpcallback] -address = "::ffff:127.0.0.1" -port = 17076 -target = "/" -``` - -JSON POST requests with every confirmed block are sent to the callback server as defined in the config values above: `http://callback_address:callback_port`. Callback target should include a leading slash. - -For details on how to integrate using the HTTP callback, see the [HTTP Callback section of the Integration Guides](/integration-guides/advanced#http-callback). -!!! tip - When possible, using a [websocket](#nodewebsocket) is recommended as it provides more efficiency, more options for types of information to receive and better control over the volume of notifications with filtering. +# Callback address. +# type:string,ip +#address = "" ---- +# Callback port number. +# type:uint16 +#port = 0 -## RPC +# Callback target path. +# type:string,uri +#target = "" +``` -More details about the RPC setup can be found in the [Running Nano as a service guide](/integration-guides/advanced/#running-nano-as-a-service). +JSON POST requests with every confirmed block are sent to the callback server as defined in the config values above: `http://callback_address:callback_port`. Callback target should include a leading slash. ---8<-- "multiple-node-setups-warning.md" +For details on how to integrate using the HTTP callback, see the [HTTP Callback section of the Integration Guides](../integration-guides/advanced.md#http-callback). --- --8<-- "network-details.md" ## Ledger backends -LMDB is used by default, in _v20.0+_ [RocksDB](/running-a-node/rocksdb-ledger-backend) can be used instead +LMDB is used by default, in _v20.0+_ [RocksDB](ledger-management.md#rocksdb-ledger-backend) is also available as an experimental option. See [Ledger Management](ledger-management.md) guide for more details. diff --git a/docs/running-a-node/node-setup.md b/docs/running-a-node/node-setup.md index 6d9171eec..2392a3c32 100644 --- a/docs/running-a-node/node-setup.md +++ b/docs/running-a-node/node-setup.md @@ -17,27 +17,29 @@ While you can run a Nano node by downloading a binary or building from source, i --- +## Hardware recommendations + --8<-- "hardware-recommendations.md" --- -### Network Ports +## Network Ports -The nano\_node will use two configurable ports throughout its lifecycle. The default values suggested by the [network details](/running-a-node/configuration/#network-details) are below: +The nano\_node will use two configurable ports throughout its lifecycle. The default values suggested by the [network details](configuration.md#network-details) are below: --8<-- "network-details-simple.md" !!! note "" - By default nano\_node will attempt to use UPnP. [Troubleshooting information can be found here](/running-a-node/troubleshooting/#troubleshooting-upnp) + By default nano\_node will attempt to use UPnP. [Troubleshooting information can be found here](troubleshooting.md#troubleshooting-upnp) --- -### Installing Docker +## Installing Docker Docker must be installed on the host machine and instructions can be found here: https://docs.docker.com/install/. We recommend installing the latest stable version available. --- -### Pulling the Docker Image +## Pulling the Docker Image [![Docker Pulls](https://img.shields.io/docker/pulls/nanocurrency/nano.svg)](https://hub.docker.com/r/nanocurrency/nano/) The Docker image can be downloaded via `docker pull`. We can either grab the `latest` or a specific version/tag. Not specifying a tag defaults to `latest`. An example of each is found below. @@ -49,7 +51,7 @@ docker pull nanocurrency/nano Pulls a specific version of the Nano node: ```bash -docker pull nanocurrency/nano:V18.0 +docker pull nanocurrency/nano:V20.0 ``` !!! tip @@ -59,8 +61,20 @@ docker pull nanocurrency/nano:V18.0 --- -### Starting the Node -With Docker there are basic commands for managing containers. To properly bring the node up, learn these commands beginning with [starting the container](/running-a-node/docker-management#starting). +## Starting the Node +With Docker there are basic commands for managing containers. To properly bring the node up, learn these commands beginning with [starting the container](docker-management.md#starting). !!! info "Advanced Builds" - For additional options around building the node to run on various platforms, head over to the [Integration Guides Build Options](/integration-guides/build-options). \ No newline at end of file + For additional options around building the node to run on various platforms, head over to the [Integration Guides Build Options](../integration-guides/build-options.md). + +--- + +## Additional setup +The above instructions cover getting a node up and running with the default configuration settings. Additional setup areas to explore include: + +- Learning more about [managing the node in a Docker container](docker-management.md) +- Updating [node configuration options](configuration.md) to enable various features +- Setting up the node to [vote as a representative](voting-as-a-representative.md) +- Finding out how to best [manage your ledger file](ledger-management.md) + +--8<-- "join-technical-mailing-list.md" \ No newline at end of file diff --git a/docs/running-a-node/overview.md b/docs/running-a-node/overview.md index 0dcbba501..8d2db25c2 100644 --- a/docs/running-a-node/overview.md +++ b/docs/running-a-node/overview.md @@ -14,27 +14,40 @@ Regardless of the motivation for running a node, it will only benefit the networ ## Node types -### Principal Representative Nodes -Currently, nodes configured with Representative accounts with at least 0.1% of the [online voting weight](/glossary#online-voting-weight) delegated to them participate more broadly in network consensus because they send votes to their peers which are subsequently rebroadcast. +--8<-- "dedicated-representative-nodes.md" + +!!! tip "Review Node security guide" + Regardless of the type of node you are planning to run, make sure to review the [Node security guide](security.md) to ensure best practice with configuration, firewalls and more. + +### Non-voting nodes +When first setting up a node it will not be configured to participate in consensus by voting on traffic. This type of node is common and is recommended for all integrations. If your goal in setting up a node is to learn how to integrate and use Nano for payments, this is the best starting point. If you want to dedicate resources to help secure consensus on the network, then a Representative node should be explored. + +### Representative nodes +If a node is setup with a Representative account, is configured to vote and has **less than 0.1% of [online voting weight](/glossary#online-voting-weight)** delegated to them, they are a considered Representative node. These nodes will validate and vote on transactions seen on the network; however, other nodes on the network will not rebroadcast their votes. + +### Principal Representative nodes +Representative nodes with **at least 0.1% of the [online voting weight](/glossary#online-voting-weight)** delegated to them participate more broadly in network consensus because they send votes to their peers which are subsequently rebroadcast. These nodes have the most impact to the security and availability of the network so [keeping them secure](security.md) and following [maintenance recommendations](#maintenance) should be taken seriously. !!! success "Becoming a Principal Representative" With the ability for any user on the network to redelegate their voting weight, even an account with no weight today can become a Principal Representative over time. -### Representative Nodes -Nodes with less than 0.1% of [online voting weight](/glossary#online-voting-weight) will validate and vote on transactions seen on the network; however, other peers on the network will not rebroadcast their votes. - -## Resources and ongoing maintenance +## Hardware recommendations + Nodes consume CPU, RAM, disk IO and bandwidth IO resources, all of which come at a cost. In order to keep the node participating and in-sync, the recommended specifications for machines based on node type below should be followed. --8<-- "hardware-recommendations.md" -And with any system, ongoing maintenance must be taken into account to avoid issues: +## Maintenance + +--8<-- "join-technical-mailing-list.md" + +With any system, ongoing maintenance must be taken into account to avoid issues. The following are a few examples of regular activities that should be committed to, especially when running a [Representative](#representative-nodes) or [Principal Representative](#principal-representative-nodes) node: - Performing OS-level updates and security patches regularly applied -- Upgrading to the latest node versions they are available +- Upgrading to the [latest node versions](../releases/node-releases.md) as they are available - Following best practices for securing passwords or other sensitive data related to the node -Without taking care with the security and maintenance of systems hosting the node, any benefit to the network could be lost. +Without taking care of the security and maintenance of systems hosting the node, any benefit to the network could be lost. Continue learning about how best to keep the node secure in our [Node security guide](security.md). [^1]: https://medium.com/nanocurrency/the-incentives-to-run-a-node-ccc3510c2562 [^2]: https://medium.com/@clemahieu/emergent-centralization-due-to-economies-of-scale-83cc85a7cbef diff --git a/docs/running-a-node/security.md b/docs/running-a-node/security.md index c81b53d31..080f25e72 100644 --- a/docs/running-a-node/security.md +++ b/docs/running-a-node/security.md @@ -5,6 +5,8 @@ description: Information about how to properly secure your Nano node when gettin There are [many reasons to run a Nano node](/running-a-node/overview/#why-run-a-node) on the network. Nodes are the participants that help vote on transaction validity, assist other nodes with bootstrapping blocks in the ledger and providing an access point to all accounts. But those who choose to run them should be making a long-term commitment to [run them on proper hardware](/running-a-node/node-setup/#hardware-recommendations), keep them updated with the [latest release](/releases/node-releases/) and, most importantly, keep their setup as secure as possible. +--8<-- "join-technical-mailing-list.md" + The details below are guidelines on things to watch out for when setting up and securing your Nano node. As the node can be run on many different operating systems, some of these guidelines have been kept more general. There are plenty of resources online for learning how to apply these guidelines to more specific setups and additional details will be included in the docs here as they are appropriate. ## Node configuration diff --git a/docs/running-a-node/voting-as-a-representative.md b/docs/running-a-node/voting-as-a-representative.md new file mode 100644 index 000000000..c11010a76 --- /dev/null +++ b/docs/running-a-node/voting-as-a-representative.md @@ -0,0 +1,89 @@ +# Voting as a Representative + +The default [node setup](node-setup.md) guide provides instructions for getting a non-voting node setup, but if you're looking to run a [Representative node](overview.md#representative-nodes), and perhaps hoping to become a [Principal Representative](overview.md#principal-representative-nodes), the node will need to be configured to vote and be setup with a Representative account. + +--8<-- "join-technical-mailing-list.md" + +Before getting into the setup instructions, there are a few important considerations: + +## Commitment, security and maintenance +Running a Nano Representative is a commitment to helping secure the network. This can only be done if the operation of the node is taken seriously. + +* Prepare for the necessary [maintenance](overview.md#maintenance) on the node and host machine +* Carefully review the [security guide](security.md) and follow general security best practices at all times +* Ensure you are prepared for the time and cost commitments of maintaining the node over the long term to help maximize the benefits + +## Hardware recommendations + +--8<-- "hardware-recommendations.md" + +--- + +## Step 1: Enable voting +For the node to start voting, the following [configuration](configuration.md) options need to be updated: + +--8<-- "config-node-option-node-enable-voting-true.md" + +--8<-- "config-node-option-rpc-enable-true.md" + +#### enable_control +This configuration option is set in the [`config-rpc.toml`](../running-a-node/configuration.md#configuration-file-locations) file. Please make sure you are aware of the sensitive RPC calls enabling this option opens up as detailed on the [configuration page](configuration.md#enable_control). + +```toml +# Enable or disable control-level requests. +# WARNING: Enabling this gives anyone with RPC access the ability to stop the node and access wallet funds. +# type:bool +enable_control = true +``` + +--- + +## Step 2: Setup Representative account + +Add a representative account to a wallet: + +1. Use [wallet_create](../commands/rpc-protocol.md#wallet_create) RPC, optionally with `seed` if you already know your representative account’s seed +1. One of the following: + - [wallet_add](../commands/rpc-protocol.md#wallet_add) RPC, if you have a private key and didn’t have a seed before + - [account_create](../commands/rpc-protocol.md#account_create) RPC if you had a seed or are creating a new representative account +1. Verify the account is in the wallet with [account_list](../commands/rpc-protocol.md#account_list) + + +Open the account - until you do [account_info](../commands/rpc-protocol.md#account_info) and others will fail: + +1. Send some funds to the account, at least 0.01 Nano +1. Use [search_pending](../commands/rpc-protocol.md#search_pending) to make the wallet open the account automatically +1. Use [account_info](../commands/rpc-protocol.md#account_info) to verify the state of the account + - If the account is still not open, use [receive](../commands/rpc-protocol.md#receive) as a backup + +--- + +## Step 3: Restart the node and check voting + +Before the node will vote, the representative account configured above must have at least 1000 Nano delegated to it. This is done by changing the representative of other accounts in your wallet with [account_representative_set](../commands/rpc-protocol.md#account_representative_set). If you do not control over 1000 Nano, you will need to have others delegate their weight to your representative. + +Once you have enough weight, after a few minutes you can search for your representative account on the [mynano.ninja](https://mynano.ninja/) site to verify it is voting. + +--8<-- "multiple-node-setups-warning.md" + +## Step 4: Monitoring and more + +Congratulations on getting your representative setup! If you are able to do a good job maintaining the node and keeping it performing well, you may have a chance at becoming a [Principal Representative](overview.md#principal-representative-nodes). To reach this higher level of participation in consensus, you must get at least 0.1% of [online voting weight](/glossary#online-voting-weight) delegated to your node. After that any votes you send for transactions will be rebroadcast by other nodes to help with consensus even more. + +Once you are comfortable with your node setup and want to connect it to the broader Nano ecosystem, there are a few recommended options: + +### Setup monitoring + +Details for setting up a popular monitoring service for the node can be found at https://github.com/NanoTools/nanoNodeMonitor. Not only can this provide a website for viewing the status and promoting your representative, but it also provides metrics to popular services in the ecosystem who help monitor the broader network status and performance, such as [NanoCrawler.cc](https://nanocrawler.cc) and [MyNano.ninja](https://mynano.ninja). + +### Connect with community services + +At [MyNano.ninja](https://mynano.ninja) you can also verify your representative and share additional details about your social accounts. Many community members use this service to evaluate representatives which can help you get additional weight if your setup is reliable and well maintained. + +### Ongoing maintenance and support + +As you continue maintaining your representative there are great community resources available for support: + +* Ask questions in the [Node and Representative Management](https://forum.nano.org/c/node-and-rep/8) category of the Nano Forum +* Connect on the [Nano Discord server](https://chat.nano.org) for discussion around node maintenance +* Join our [Technical Updates Mailing List](http://eepurl.com/gZucL1) to stay updated on releases, network upgrade details and more \ No newline at end of file diff --git a/docs/snippets/config-node-option-node-enable-voting-true.md b/docs/snippets/config-node-option-node-enable-voting-true.md new file mode 100644 index 000000000..7b74f43e2 --- /dev/null +++ b/docs/snippets/config-node-option-node-enable-voting-true.md @@ -0,0 +1,10 @@ +#### node.enable_voting +As of V18.0, newly setup nodes have voting disabled by default. In order to participate in network consensus, this value must be updated in the [`config-node.toml`](../running-a-node/configuration.md#configuration-file-locations) file. + +```toml +[node] + +# Enable or disable voting. Enabling this option requires additional system resources, namely increased CPU, bandwidth and disk usage. +# type:bool +enable_voting = true +``` \ No newline at end of file diff --git a/docs/snippets/config-node-option-rpc-enable-true.md b/docs/snippets/config-node-option-rpc-enable-true.md new file mode 100644 index 000000000..08a76994f --- /dev/null +++ b/docs/snippets/config-node-option-rpc-enable-true.md @@ -0,0 +1,10 @@ +#### rpc.enable +To enable communication via RPC, set this configuration option in the [`config-node.toml`](../running-a-node/configuration.md#configuration-file-locations) file. + +```toml +[rpc] + +# Enable or disable RPC +# type:bool +enable = true +``` \ No newline at end of file diff --git a/docs/snippets/dedicated-representative-nodes.md b/docs/snippets/dedicated-representative-nodes.md new file mode 100644 index 000000000..cef11cb39 --- /dev/null +++ b/docs/snippets/dedicated-representative-nodes.md @@ -0,0 +1,2 @@ +!!! tip "Dedicated Representative nodes recommended" + Due to the resources needed to participate in the voting process, it is recommended that **any node setup as a Representative should be dedicated to generating consensus**. If the resources of the Representative are used for other activities, such as application integrations or , it reduces the potential benefit that node brings to the network. \ No newline at end of file diff --git a/docs/snippets/hardware-recommendations.md b/docs/snippets/hardware-recommendations.md index fdb35e366..595b3e63d 100644 --- a/docs/snippets/hardware-recommendations.md +++ b/docs/snippets/hardware-recommendations.md @@ -1,25 +1,21 @@ -### Hardware Recommendations - -#### Principal Representative Node -The following are minimum recommended specifications for nodes with more than 0.1% of the online voting weight ([Principal Representatives](/glossary#principal-representative)): +### Principal Representative Nodes +The following are minimum recommended specifications for nodes with more than 0.1% of the online voting weight ([Principal Representatives](../glossary.md#principal-representative)): * 4GB RAM * Quad-Core CPU * 200 Mbps bandwidth (2TB or more of available monthly bandwidth) * SSD-based hard drive with 80GB+ of free space -#### Representative Node -The following are minimum recommended specifications for nodes with less than 0.1% of the online voting weight (regular [Representatives](/glossary#representative)): +### Non-voting and Representative Nodes +The following are minimum recommended specifications for non-voting nodes and Represntative nodes with less than 0.1% of the online voting weight (regular [Representatives](../glossary.md#representative)): * 2GB RAM (additional RAM or swap space may be needed if bootstrapping a new node from scratch) * Dual-Core CPU * 100 Mbps bandwidth (2TB or more of available monthly bandwidth) * SSD-based hard drive with 80GB+ of free space -!!! warning +!!! warning "Varied resource usage" Various factors affect resource usage including how often RPC calls are made, other applications running on the machine, etc. These recommendations should be evaluated along with other considerations. -!!! tip "Proof-of-Work Generation" - For nodes being used with services requiring regular or high volume sending and receiving of transactions, special considerations must be made for handling Proof-of-Work generation activities. - - GPUs provide much higher throughput than CPUs. [Work peers](/integration-guides/work-generation/#nodework_peers) can also be configured for generating work outside the node. \ No newline at end of file +!!! tip "Work Generation guide" + For nodes being used with services requiring regular or high volume sending and receiving of transactions, special considerations must be made for handling Proof-of-Work generation activities. Find details on configuring a GPU, external work services and more for the perfect setup in the [Work Generation guide](../integration-guides/work-generation.md). \ No newline at end of file diff --git a/docs/snippets/join-technical-mailing-list.md b/docs/snippets/join-technical-mailing-list.md new file mode 100644 index 000000000..401402a29 --- /dev/null +++ b/docs/snippets/join-technical-mailing-list.md @@ -0,0 +1,2 @@ +!!! info "Join the technical updates mailing list" + Follow this link to sign up for email updates on the latest protocol/node releases and other technical details. This will include network upgrades such as the upcoming epoch distribution: Join Mailing List \ No newline at end of file diff --git a/docs/snippets/network-details.md b/docs/snippets/network-details.md index c76260919..dce838713 100644 --- a/docs/snippets/network-details.md +++ b/docs/snippets/network-details.md @@ -2,7 +2,7 @@ | Port | Type | Default | Details | | | | | | -| 7075 | UDP | Enabled |
  • Primary node activity port
  • Port configurable in `config-node.toml:node/peering_port`
  • Binds to all adapters; unicast
  • Contents: Raw nano protocol datagrams
  • All standard ledger activity goes through this port
  • If blocked the node will not function
| -| 7075 | TCP | Enabled |
  • Node bootstrapping server
  • Share port configuration in `config-node.toml:node/peering_port`
  • Binds to all adapters; unicast
  • Contents: Raw nano protocol stream
  • Transmits the ledger to new nodes in bulk
  • If blocked other nodes will not be able retrieve the ledger from this node
| -| 7076 | TCP | Disabled |
  • RPC server
  • Port configurable in `config-rpc.toml:rpc/port`
  • Enable in `config-node.toml:rpc/enable` or by starting `nano_rpc` manually
  • Binds to localhost by default for security reasons, configurable in `config-rpc.toml:rpc/address`; unicast
  • Contents: Unencrypted HTTP requests containing JSON object bodies
  • Allows the node to be queried or controlled through HTTP requests
  • If blocked the node will not be able to be queried or controlled by HTTP
  • **WARNING: Exposing this port externally while setting `enable_control` option to `true` in configs could expose your wallet, allow the node to be stopped remotely and open your node up to other dangerous activity.** See the [Node Security page](/running-a-node/security) for more details.
| -| 7078 | TCP | Disabled |
  • Websocket server
  • Port configurable in `config-node.toml:node.websocket/port`
  • Enable in `config-node.toml:node.websocket/enable`
  • Binds to localhost by default due to data throughput potentially being very high; producer-subscriber broadcast
  • Contents: Standard websocket frames containing JSON-encoded objects
  • See [WebSocket Support](/integration-guides/websockets) for details on configuration
| \ No newline at end of file +| 7075 | UDP | Enabled |
  • Primary node activity port
  • Port configurable in `config-node.toml`, option `node.peering_port`
  • Binds to all adapters; unicast
  • Contents: Raw nano protocol datagrams
  • All standard ledger activity goes through this port
  • If blocked the node will not function
| +| 7075 | TCP | Enabled |
  • Node bootstrapping server
  • Share port configuration in `config-node.toml`, option `node.peering_port`
  • Binds to all adapters; unicast
  • Contents: Raw nano protocol stream
  • Transmits the ledger to new nodes in bulk
  • If blocked other nodes will not be able retrieve the ledger from this node
| +| 7076 | TCP | Disabled |
  • RPC server
  • Port configurable in `config-rpc.toml`, option `rpc.port`
  • Enable in `config-node.toml`, option `rpc.enable` or by starting `nano_rpc` manually
  • Binds to localhost by default for security reasons, configurable in `config-rpc.toml`, option `rpc.address`; unicast
  • Contents: Unencrypted HTTP requests containing JSON object bodies
  • Allows the node to be queried or controlled through HTTP requests
  • If blocked the node will not be able to be queried or controlled by HTTP
  • **WARNING: Exposing this port externally while setting `enable_control` option to `true` in configs could expose your wallet, allow the node to be stopped remotely and open your node up to other dangerous activity.** See the [Node Security page](/running-a-node/security) for more details.
| +| 7078 | TCP | Disabled |
  • Websocket server
  • Port configurable in `config-node.toml`, option `node.websocket.port`
  • Enable in `config-node.toml`, option `node.websocket.enable`
  • Binds to localhost by default due to data throughput potentially being very high; producer-subscriber broadcast
  • Contents: Standard websocket frames containing JSON-encoded objects
  • See [WebSocket Support](/integration-guides/websockets) for details on configuration
| \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index 1f0a7943e..628e2a96f 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -21,13 +21,14 @@ nav: - Exploring More: what-is-nano/exploring-more.md - Running a Node: - Overview: running-a-node/overview.md - - Node Setup: running-a-node/node-setup.md - Security: running-a-node/security.md + - Node Setup: running-a-node/node-setup.md - Docker Management: running-a-node/docker-management.md - - Beta Network: running-a-node/beta-network.md - Configuration: running-a-node/configuration.md - - Troubleshooting: running-a-node/troubleshooting.md - Ledger Management: running-a-node/ledger-management.md + - Voting as a Representative: running-a-node/voting-as-a-representative.md + - Beta Network: running-a-node/beta-network.md + - Troubleshooting: running-a-node/troubleshooting.md - Beyond the Node: running-a-node/beyond-the-node.md - Integration Guides: - The Basics: integration-guides/the-basics.md From 5a49b5e55e9faadef78f94cf72181b15e8a726a3 Mon Sep 17 00:00:00 2001 From: Zach Hyatt Date: Wed, 27 May 2020 15:38:36 -0500 Subject: [PATCH 65/87] Add notes about UDP being disabled in V21 (#249) * Add notes about UDP being disabled in V21 * Move udp deprecation callout to snippet, add inside other snippets --- docs/snippets/beta-network-details-simple.md | 4 +++- docs/snippets/network-details-simple.md | 4 +++- docs/snippets/network-details.md | 4 +++- docs/snippets/udp-deprecated.md | 2 ++ 4 files changed, 11 insertions(+), 3 deletions(-) create mode 100644 docs/snippets/udp-deprecated.md diff --git a/docs/snippets/beta-network-details-simple.md b/docs/snippets/beta-network-details-simple.md index 0a8ae045e..9d2a474a6 100644 --- a/docs/snippets/beta-network-details-simple.md +++ b/docs/snippets/beta-network-details-simple.md @@ -2,4 +2,6 @@ * **54000 UDP:** For [live network](/glossary#live-network) activity (fallback since V19.0) * **54000 TCP:** For [live network](/glossary#live-network) activity (since V19.0) and [bootstrap network](/glossary#bootstrap-network) activity * **55000 TCP:** For communication with RPC server. Anyone with access to this port can control your node's RPC. - * **57000 TCP:** For communication with [websocket server](/integration-guides/websockets). Depending on configuration, data throughput can be very high. \ No newline at end of file + * **57000 TCP:** For communication with [websocket server](/integration-guides/websockets). Depending on configuration, data throughput can be very high. + +--8<-- "udp-deprecated.md" diff --git a/docs/snippets/network-details-simple.md b/docs/snippets/network-details-simple.md index aadc02b84..68d4220f9 100644 --- a/docs/snippets/network-details-simple.md +++ b/docs/snippets/network-details-simple.md @@ -2,4 +2,6 @@ * **7075 UDP:** For [live network](/glossary#live-network) activity (fallback since V19.0) * **7075 TCP:** For [live network](/glossary#live-network) activity (since V19.0) and [bootstrap network](/glossary#bootstrap-network) activity * **7076 TCP:** For communication with RPC server. **Do not expose this outside of your production environment. Anyone with access to this port can control your node's RPC.** - * **7078 TCP:** For communication with [websocket server](/integration-guides/websockets). Depending on configuration, data throughput can be very high. \ No newline at end of file + * **7078 TCP:** For communication with [websocket server](/integration-guides/websockets). Depending on configuration, data throughput can be very high. + +--8<-- "udp-deprecated.md" diff --git a/docs/snippets/network-details.md b/docs/snippets/network-details.md index dce838713..8052ea8c1 100644 --- a/docs/snippets/network-details.md +++ b/docs/snippets/network-details.md @@ -5,4 +5,6 @@ | 7075 | UDP | Enabled |
  • Primary node activity port
  • Port configurable in `config-node.toml`, option `node.peering_port`
  • Binds to all adapters; unicast
  • Contents: Raw nano protocol datagrams
  • All standard ledger activity goes through this port
  • If blocked the node will not function
| | 7075 | TCP | Enabled |
  • Node bootstrapping server
  • Share port configuration in `config-node.toml`, option `node.peering_port`
  • Binds to all adapters; unicast
  • Contents: Raw nano protocol stream
  • Transmits the ledger to new nodes in bulk
  • If blocked other nodes will not be able retrieve the ledger from this node
| | 7076 | TCP | Disabled |
  • RPC server
  • Port configurable in `config-rpc.toml`, option `rpc.port`
  • Enable in `config-node.toml`, option `rpc.enable` or by starting `nano_rpc` manually
  • Binds to localhost by default for security reasons, configurable in `config-rpc.toml`, option `rpc.address`; unicast
  • Contents: Unencrypted HTTP requests containing JSON object bodies
  • Allows the node to be queried or controlled through HTTP requests
  • If blocked the node will not be able to be queried or controlled by HTTP
  • **WARNING: Exposing this port externally while setting `enable_control` option to `true` in configs could expose your wallet, allow the node to be stopped remotely and open your node up to other dangerous activity.** See the [Node Security page](/running-a-node/security) for more details.
| -| 7078 | TCP | Disabled |
  • Websocket server
  • Port configurable in `config-node.toml`, option `node.websocket.port`
  • Enable in `config-node.toml`, option `node.websocket.enable`
  • Binds to localhost by default due to data throughput potentially being very high; producer-subscriber broadcast
  • Contents: Standard websocket frames containing JSON-encoded objects
  • See [WebSocket Support](/integration-guides/websockets) for details on configuration
| \ No newline at end of file +| 7078 | TCP | Disabled |
  • Websocket server
  • Port configurable in `config-node.toml`, option `node.websocket.port`
  • Enable in `config-node.toml`, option `node.websocket.enable`
  • Binds to localhost by default due to data throughput potentially being very high; producer-subscriber broadcast
  • Contents: Standard websocket frames containing JSON-encoded objects
  • See [WebSocket Support](/integration-guides/websockets) for details on configuration
| + +--8<-- "udp-deprecated.md" diff --git a/docs/snippets/udp-deprecated.md b/docs/snippets/udp-deprecated.md new file mode 100644 index 000000000..12f9f8390 --- /dev/null +++ b/docs/snippets/udp-deprecated.md @@ -0,0 +1,2 @@ +!!! warning "UDP disabled by default, deprecated" + As of V21 peering and communicating via UDP has been disabled by default and is deprecated. The ability to use UDP will be removed from the node in a future release yet to be determined. From d9a2c76d819b1e900c5d2b3d0ba32f3a0df664c8 Mon Sep 17 00:00:00 2001 From: Jim Huang Date: Mon, 1 Jun 2020 22:35:51 +0800 Subject: [PATCH 66/87] Fall back to IPv4 address if IPv6 is not available (#308) The documentation mentions several IPv6 addresses, but it lacked of an appropriate explanation about the fallback on IPv4. --- docs/integration-guides/advanced.md | 3 +++ docs/running-a-node/docker-management.md | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/integration-guides/advanced.md b/docs/integration-guides/advanced.md index ddc2bddae..64d4fe74c 100644 --- a/docs/integration-guides/advanced.md +++ b/docs/integration-guides/advanced.md @@ -286,6 +286,9 @@ The choice depends on the setup and security that you want. The easiest way is t curl -g -d '{ "action": "block_count" }' '[::1]:7076' +!!! tip + If you get `curl: (7) Couldn't connect to server`, replace `[::1]:7076` with `127.0.0.1:7076`. + **To stop node, use** curl -g -d '{ "action": "stop" }' '[::1]:7076' diff --git a/docs/running-a-node/docker-management.md b/docs/running-a-node/docker-management.md index 39f48f0e2..0a167a57f 100644 --- a/docs/running-a-node/docker-management.md +++ b/docs/running-a-node/docker-management.md @@ -205,6 +205,6 @@ For other commands, review the [RPC Protocol](/commands/rpc-protocol) details. ### Troubleshooting -If you get `Error starting userland proxy: port is not a proto:IP:port: 'tcp:[:'.` or want to expose IPv4 port, use `-p 127.0.0.1:7076:7076`. +If you get `Error starting userland proxy: port is not a proto:IP:port: 'tcp:[:'.` or want to expose IPv4 port, use `-p 127.0.0.1:7076:7076`. Likewise, if you get `curl: (7) Couldn't connect to server` when interacting with the node, replace `[::1]:7076` with `127.0.0.1:7076`. If you get `create ~: volume name is too short, names should be at least two alphanumeric characters.` replace the `~` with the full pathname such as `/Users/someuser`. From 56a6d44fd6303f012c3e1e6e4534894e5c159f40 Mon Sep 17 00:00:00 2001 From: Jim Huang Date: Thu, 4 Jun 2020 04:29:28 +0800 Subject: [PATCH 67/87] Add footnote to International System of Units (SI) prefix (#310) --- .../protocol-design/distribution-and-units.md | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/docs/protocol-design/distribution-and-units.md b/docs/protocol-design/distribution-and-units.md index a3046fa91..b312a5f17 100644 --- a/docs/protocol-design/distribution-and-units.md +++ b/docs/protocol-design/distribution-and-units.md @@ -22,18 +22,19 @@ During distribution the Genesis seed was kept in cold storage and funds were mov With $2^{128} - 1$ Nano in the original Genesis account, upon closing of the faucet and burning of the remaining funds, the total supply which is 100% in circulation ended at **~133,248,297 Nano** (or more precisely 133248297920938463463374607431768211455 raw). Since then, additional funds have been sent to the known burn address slightly lowering the amount in circulation as a result. This amount can be found using the [available_supply](/commands/rpc-protocol/#available_supply) RPC. ## Unit Dividers -A 128 bit integer is used to represent account balances. A set of SI prefixes was used to make the numbers more accessible and avoid confusion. The reference wallet uses Mnano (or NANO/Nano) as a divider. - -| Name | SI Prefix | Integer | Power -|---------------|-----------|------------------------------------|------- -| | Gnano | 1000000000000000000000000000000000 | $10^{33}$ -| NANO/Nano | Mnano | 1000000000000000000000000000000 | $10^{30}$ -| | knano | 1000000000000000000000000000 | $10^{27}$ -| | nano | 1000000000000000000000000 | $10^{24}$ -| | mnano | 1000000000000000000000 | $10^{21}$ -| | unano | 1000000000000000000 | $10^{18}$ -| raw | | 1 | $10^{0}$ +A 128 bit integer is used to represent account balances. A set of SI prefixes[^2] was used to make the numbers more accessible and avoid confusion. The reference wallet uses Mnano (or NANO/Nano) as a divider. + +| Name | SI Prefix | Integer | Power +|---------------|-------------|------------------------------------|------- +| | Gnano | 1000000000000000000000000000000000 | $10^{33}$ +| NANO/Nano | Mnano | 1000000000000000000000000000000 | $10^{30}$ +| | knano | 1000000000000000000000000000 | $10^{27}$ +| | nano | 1000000000000000000000000 | $10^{24}$ +| | mnano | 1000000000000000000000 | $10^{21}$ +| | μnano/unano | 1000000000000000000 | $10^{18}$ +| raw | | 1 | $10^{0}$ 1 raw is the smallest possible division and NANO/Nano (Mnano) is the current standard division used in most wallets, on exchanges, etc. [^1]:https://medium.com/nanocurrency/the-nano-faucet-c99e18ae1202 +[^2]:The SI prefixes are metric prefixes that were standardized for use in the International System of Units (SI) by the International Bureau of Weights and Measures (BIPM). https://www.bipm.org/en/measurement-units/prefixes.html From 8b65d530eb739f118c557c175af68a23f53219af Mon Sep 17 00:00:00 2001 From: Guilherme Lawless Date: Thu, 4 Jun 2020 06:18:08 +0100 Subject: [PATCH 68/87] Add requests_cannot_vote stat (#311) For https://github.com/nanocurrency/nano-node/pull/2785 --- docs/running-a-node/troubleshooting.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/running-a-node/troubleshooting.md b/docs/running-a-node/troubleshooting.md index 553b5b6c3..d432db8b9 100644 --- a/docs/running-a-node/troubleshooting.md +++ b/docs/running-a-node/troubleshooting.md @@ -299,6 +299,7 @@ details: requests_generated_hashes requests_cached_votes requests_generated_votes + requests_cannot_vote requests_unknown // duplicate From dd9243d7e261f8e0aba6c669879a92d80ac3b33e Mon Sep 17 00:00:00 2001 From: Jim Huang Date: Sat, 6 Jun 2020 02:12:41 +0800 Subject: [PATCH 69/87] Update the download link to open source Qt (#314) The Qt framework is available under both open source and commercial licenses, and the NANO Wallet should be built with LGPL/GPL edition of Qt. --- docs/integration-guides/build-options.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/integration-guides/build-options.md b/docs/integration-guides/build-options.md index 86982abe4..ca1ab04f4 100644 --- a/docs/integration-guides/build-options.md +++ b/docs/integration-guides/build-options.md @@ -53,7 +53,7 @@ This installs `nano_node-beta` to bin. **Required Source** * [Boost 1.67](http://www.boost.org/users/history/version_1_67_0.html) extracted to [boost.src] (OR `sh nano-node/util/build_prep/bootstrap_boost.sh -m`) - * (wallet) [Qt 5.x open source edition](https://www1.qt.io/download-open-source/) extracted to [qt.src] + * (wallet) [Qt 5.x open source edition](https://www.qt.io/download-open-source) extracted to [qt.src] * Nano node source in [nano-node.src] **Required build tools** @@ -246,7 +246,7 @@ cp nano_node ../nano_node && cd .. && ./nano_node --diagnostics ### Dependencies * [Boost 1.67+ for your build env](https://sourceforge.net/projects/boost/files/boost-binaries) -* [Qt 5.9.5+ 64-bit (open source version) appropriate for your build env](https://www.qt.io/download) +* [Qt 5.9.5+ 64-bit (open source version) appropriate for your build env](https://www.qt.io/download-open-source) * [Git for Windows](https://git-scm.com/download/win) **git_bash** * [CMake](https://cmake.org/download/) * [Visual Studio 2017 Community](https://my.visualstudio.com/Downloads?q=visual%20studio%202017&wt.mc_id=o~msft~vscom~older-downloads) (or higher edition, if you have a valid license. eg. Professional or Enterprise) From e34f3fcbc8dfe9ecf157fe729b2bebd332d6e446 Mon Sep 17 00:00:00 2001 From: Jim Huang Date: Mon, 8 Jun 2020 16:57:58 +0800 Subject: [PATCH 70/87] Clarify valgrind and sanitizers as dynamic analysis tools (#317) Valgrind is a generic framework for creating dynamic analysis tools such as checkers and profilers. And, the sanitizer suite shipped with LLVM and GCC provides compilation-based dynamic analysis tools. Both are not static analysis tools. --- docs/protocol-design/overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/protocol-design/overview.md b/docs/protocol-design/overview.md index b8ede7b44..9f2886976 100644 --- a/docs/protocol-design/overview.md +++ b/docs/protocol-design/overview.md @@ -172,7 +172,7 @@ Your code will be reviewed with security in mind, but please do your part before * Avoid using ANSI C functions. Many of these are prone to buffer overruns. * Avoid using C strings and direct buffer manipulation. -* Use static analysis tools, such as valgrind, XCode instrumentation, linters and sanitizers. These tools are also great for debugging crashes and performance problems. +* Use static and dynamic analysis tools, such as valgrind, XCode instrumentation, linters and sanitizers. These tools are also great for debugging crashes and performance problems. ### General tips for contributors From 45a387cfb76c8ed581b0f1e3851b210b291e59ee Mon Sep 17 00:00:00 2001 From: Zach Hyatt Date: Mon, 8 Jun 2020 09:10:53 -0500 Subject: [PATCH 71/87] Add LMDB config options to Ledger mgmt guid (#306) e --- docs/running-a-node/configuration.md | 6 +++--- docs/running-a-node/ledger-management.md | 20 +++++++++++++++++++- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/docs/running-a-node/configuration.md b/docs/running-a-node/configuration.md index a40d8b552..0c3c9f8d1 100644 --- a/docs/running-a-node/configuration.md +++ b/docs/running-a-node/configuration.md @@ -232,6 +232,9 @@ See the [IPC Integration guide](../integration-guides/ipc-integration.md#configu ### Voting See the [Voting as a Representative guide](voting-as-a-representative.md). +### Ledger backends +See the [Ledger Management guide](ledger-management.md). + ### HTTP callback !!! tip @@ -262,6 +265,3 @@ For details on how to integrate using the HTTP callback, see the [HTTP Callback --- --8<-- "network-details.md" - -## Ledger backends -LMDB is used by default, in _v20.0+_ [RocksDB](ledger-management.md#rocksdb-ledger-backend) is also available as an experimental option. See [Ledger Management](ledger-management.md) guide for more details. diff --git a/docs/running-a-node/ledger-management.md b/docs/running-a-node/ledger-management.md index 8aa084992..ea344ba79 100644 --- a/docs/running-a-node/ledger-management.md +++ b/docs/running-a-node/ledger-management.md @@ -1,5 +1,8 @@ # Ledger Management +!!! tip "Default and experimental backends available" + By default the node uses LMDB as the ledger backend, which the first part of this guide is focused on. The second part of the guide covers [RocksDB](#rocksdb-ledger-backend), which is an experimental option available as of _v20.0+_. + ## Ledger file The node automatically manages the full Nano ledger in the `data.ldb` file which can be found in the data folder at these locations: @@ -16,6 +19,21 @@ This file will grow in size as the ledger does. As of April 2020 there are over --- +## Configuration + +!!! note "" + Available in Version 21.0+ only + +Within the `node.lmdb` section of the [`config-node.toml`](../running-a-node/configuration.md#configuration-file-locations) file, the following options can be set to better tune LMDB performance for the available resources. + +| Option name | Details | +| | | +| `map_size` | Allows the map size to be changed (default value is 128GB). This only affects the ledger database. | +| `max_databases` | Maximum open LMDB databases. Increase default if more than 100 wallets is required. [External management](/integration-guides/key-management/) is recommended when a large amounts of wallets are required. | +| `sync` | LMDB environment flags. Applies to ledger, not wallet:
  • `always`: Default (MDB_NOSUBDIR \| MDB_NOTLS \| MDB_NORDAHEAD).
  • `nosync_safe`: Do not flush meta data eagerly. This may cause loss of transactions, but maintains integrity (MDB_NOSUBDIR \| MDB_NOTLS \| MDB_NORDAHEAD \| MDB_NOMETASYNC).
  • `nosync_unsafe`: Let the OS decide when to flush to disk. On filesystems with write ordering, this has the same guarantees as nosync_safe, otherwise corruption may occur on system crash (MDB_NOSUBDIR \| MDB_NOTLS \| MDB_NORDAHEAD \| MDB_NOSYNC).
  • `nosync_unsafe_large_memory`: Use a writeable memory map. Let the OS decide when to flush to disk, and make the request asynchronous. This may give better performance on systems where the database fits entirely in memory, otherwise it may be slower. Note that this option will expand the file size logically to map_size. It may expand the file physically on some file systems. (MDB_NOSUBDIR \| MDB_NOTLS \| MDB_NORDAHEAD \| MDB_NOSYNC \| MDB_WRITEMAP \| MDB_MAPASYNC).
| + +--- + ## Bootstrapping When starting a new node the ledger must be downloaded and kept updated in order to participate on the network properly. This is done automatically via bootstrapping - the node downloads and verifies blocks from other nodes across the network. This process can take hours to days to complete depending on network conditions and [hardware specifications](/running-a-node/node-setup/#hardware-recommendations). @@ -25,7 +43,7 @@ When starting a new node the ledger must be downloaded and kept updated in order ### Tuning options -Depending on machine and networking resources, the bootstrap performance can be improved by updating the following [configuration](/running-a-node/configuration/) values: +Depending on machine and networking resources, the bootstrap performance can be improved by updating the following [configuration](/running-a-node/configuration/) values in the [`config-node.toml`](../running-a-node/configuration.md#configuration-file-locations) file: * `node.bootstrap_connections_max`: up to max of `128` * `node.bootstrap_connections`: up to max of `16` From 37962b565d47f8c767fba8b2f2aed7d7db8ff272 Mon Sep 17 00:00:00 2001 From: Zach Hyatt Date: Mon, 8 Jun 2020 09:11:30 -0500 Subject: [PATCH 72/87] Add link checker details to README (#307) * Add link checker details to README * Update readme.md --- readme.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 0e6ccc55b..00f931448 100644 --- a/readme.md +++ b/readme.md @@ -34,6 +34,14 @@ Pages automatically have a `

` title setup for them based on the page name so ### Table of Contents Currently the ToC on the right side is limited to a depth of 4, so `##`, `###` and `####` will be included there. Higher header levels can be used on the page ot better organize content but will not be in the ToC. +### Links +MkDocs has a link checker built in that can be run using the `--strict` flag on `mkdocs serve` or `mkdocs build` command. This flag is included in the build pipeline. In order for it to work, links must be referencing the relative file path with the file extension included and no trailing slashes. Anchors are not included in this check. Although relative URLs will function if used, they will not be verified by the link checker. + +For example, linking from a page in the`running-a-node` folder to `integration-guides` would be: + +* Gets checked: `../integration-guides/the-basics.md`. +* Doesn't get checked: `/integration-guides/the-basics` + ### Snippets The `snippets` folder contains reusable pieces of content which can be inserted as follows: @@ -77,4 +85,4 @@ Types include: - quote ### Mermaid Sequence Diagrams -Support has been added for Mermaid Sequence Diagrams, documentation can be found here: https://mermaidjs.github.io/#/sequenceDiagram \ No newline at end of file +Support has been added for Mermaid Sequence Diagrams, documentation can be found here: https://mermaidjs.github.io/#/sequenceDiagram From ad110092fc796856b9da7de7b7d1cd55375b89bb Mon Sep 17 00:00:00 2001 From: Jim Huang Date: Mon, 8 Jun 2020 22:12:36 +0800 Subject: [PATCH 73/87] Command 'addr2line' is part of binutils package (#313) For most GNU/Linux distributions, command 'addr2line` is provided by 'binutils' package, and this patch fixes the installation information for both Ubuntu/Debian and Fedora. Reference: https://command-not-found.com/addr2line --- docs/running-a-node/troubleshooting.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/running-a-node/troubleshooting.md b/docs/running-a-node/troubleshooting.md index d432db8b9..37824eec9 100644 --- a/docs/running-a-node/troubleshooting.md +++ b/docs/running-a-node/troubleshooting.md @@ -37,11 +37,11 @@ Please follow the steps below for the corresponding node version you are using. !!! example "Step 1: Make sure addr2line is installed" It is likely installed already, consult documentation for your linux distribution if it is not mentioned below: - **Ubuntu** - `apt-get install addr2line` + **Ubuntu/Debian** + `apt-get install binutils` **Fedora 22+** - `dnf install addr2line` + `dnf install binutils` !!! example "(Optional) Step 2: Save crash dump files" The next step will clean up the dump files generated during the crash, if you wish to keep these then save `nano_node_backtrace.dump`, and all `nano_node_crash_load_address_dump_*.txt` files. From ac80bcc3e47e68ae3ccf8ed711fecb157511292c Mon Sep 17 00:00:00 2001 From: Jim Huang Date: Mon, 8 Jun 2020 22:16:24 +0800 Subject: [PATCH 74/87] Genesis coin supply is 2^{128} - 1 raw (#320) --- docs/protocol-design/distribution-and-units.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/protocol-design/distribution-and-units.md b/docs/protocol-design/distribution-and-units.md index b312a5f17..a02306693 100644 --- a/docs/protocol-design/distribution-and-units.md +++ b/docs/protocol-design/distribution-and-units.md @@ -19,7 +19,7 @@ The distribution of Nano (formerly RaiBlocks) was performed through solving manu During distribution the Genesis seed was kept in cold storage and funds were moved to the Landing account once per week to minimize the number of live, undistributed blocks. These were subsequently moved into the Faucet account for distribution until the faucet was closed and remaining funds sent to the Burn account. !!! info "Total Supply" - With $2^{128} - 1$ Nano in the original Genesis account, upon closing of the faucet and burning of the remaining funds, the total supply which is 100% in circulation ended at **~133,248,297 Nano** (or more precisely 133248297920938463463374607431768211455 raw). Since then, additional funds have been sent to the known burn address slightly lowering the amount in circulation as a result. This amount can be found using the [available_supply](/commands/rpc-protocol/#available_supply) RPC. + With $2^{128} - 1$ raw (i.e. `FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF` HEX raw) in the original Genesis account, upon closing of the faucet and burning of the remaining funds, the total supply which is 100% in circulation ended at **~133,248,297 Nano** (or more precisely 133248297920938463463374607431768211455 raw). Since then, additional funds have been sent to the known burn address slightly lowering the amount in circulation as a result. This amount can be found using the [available_supply](/commands/rpc-protocol/#available_supply) RPC. ## Unit Dividers A 128 bit integer is used to represent account balances. A set of SI prefixes[^2] was used to make the numbers more accessible and avoid confusion. The reference wallet uses Mnano (or NANO/Nano) as a divider. From 7d222ce4ce20c2c8f7097c168c3816017b70bebf Mon Sep 17 00:00:00 2001 From: Jim Huang Date: Tue, 9 Jun 2020 00:22:25 +0800 Subject: [PATCH 75/87] Use precise term "directory" when refering to file system (#312) Quote from Wikipedia [1]: There is a difference between a directory, which is a file system concept, and the graphical user interface metaphor that is used to represent it (a folder). Since most operations mentioned in NANO Documentation are dedicated to hierarchical file systems instead of GUI behaviors, it would be more precise to use "directory." [1] https://en.wikipedia.org/wiki/Directory_(computing) --- docs/integration-guides/build-options.md | 18 +++++++++--------- docs/running-a-node/beta-network.md | 10 +++++----- docs/running-a-node/configuration.md | 4 ++-- docs/running-a-node/docker-management.md | 16 ++++++++-------- docs/running-a-node/ledger-management.md | 6 +++--- ...ocations.md => beta-directory-locations.md} | 0 ...older-contents.md => directory-contents.md} | 4 ++-- ...der-locations.md => directory-locations.md} | 0 readme.md | 2 +- 9 files changed, 30 insertions(+), 30 deletions(-) rename docs/snippets/{beta-folder-locations.md => beta-directory-locations.md} (100%) rename docs/snippets/{folder-contents.md => directory-contents.md} (53%) rename docs/snippets/{folder-locations.md => directory-locations.md} (100%) diff --git a/docs/integration-guides/build-options.md b/docs/integration-guides/build-options.md index ca1ab04f4..5e5a384c1 100644 --- a/docs/integration-guides/build-options.md +++ b/docs/integration-guides/build-options.md @@ -26,22 +26,22 @@ sudo yum install nanocurrency-beta This installs `nano_node-beta` to bin. -## Nano Folder +## Nano Directory ### Contents ---8<-- "folder-contents.md" +--8<-- "directory-contents.md" ### Locations ---8<-- "folder-locations.md" +--8<-- "directory-locations.md" -??? tip "Moving folder locations" +??? tip "Moving directory locations" Some users desire to change the blockchain download location. A solution is available for the no gui nano_node (see https://github.com/nanocurrency/nano-node/issues/79), but no concrete solution is available for the GUI client. However, a workaround can be acheived via the use of symbolic links. Below is a short tutorial for Windows builds: - 1. Rename/delete the Nano folder in your `appdata` Local folder (if you haven't run the wallet yet, skip this step). This is necessary because the command to create a symbolic link in windows will fail if the the input directory already exists. - 1. Decide on where you want to store the blockchain and create a symbolic link. The command is (in an administrative command-prompt): `mklink /d "C:\Users\\AppData\Local\Nano\" "E:\Some\Other\Directory"`. This command creates a symbolic link for a directory (`/d`) that 'redirects' all requests for files/directories in the `Local\Nano` folder to the `Other\Directory`. This means that a file created in the input directory will actually be in the output directory (on the other disk). - 1. Verify it works. Create a file in your Nano folder in your appdata, and you should see it appear in the directory you linked it to (and vice-versa). If you have old wallets or a partially-downloaded blockchain, copy them back into the local directory. Start the wallet. + 1. Rename/delete the Nano directory in your `appdata` Local directory (if you haven't run the wallet yet, skip this step). This is necessary because the command to create a symbolic link in windows will fail if the the input directory already exists. + 1. Decide on where you want to store the blockchain and create a symbolic link. The command is (in an administrative command-prompt): `mklink /d "C:\Users\\AppData\Local\Nano\" "E:\Some\Other\Directory"`. This command creates a symbolic link for a directory (`/d`) that 'redirects' all requests for files/directories in the `Local\Nano` directory to the `Other\Directory`. This means that a file created in the input directory will actually be in the output directory (on the other disk). + 1. Verify it works. Create a file in your Nano directory in your appdata, and you should see it appear in the directory you linked it to (and vice-versa). If you have old wallets or a partially-downloaded blockchain, copy them back into the local directory. Start the wallet. --- @@ -263,14 +263,14 @@ git clone --recursive https://github.com/nanocurrency/nano-node cd nano-node ``` -**Create a `build` folder inside nano-node (makes for easier cleaning of build)** +**Create a `build` directory inside nano-node (makes for easier cleaning of build)** Using git_bash: ```bash mkdir build cd build ``` -* **Note:** all subsequent commands should be run within this "build" folder. +* **Note:** all subsequent commands should be run within this "build" directory. **Get redistributables** diff --git a/docs/running-a-node/beta-network.md b/docs/running-a-node/beta-network.md index 4b87637ce..448825b21 100644 --- a/docs/running-a-node/beta-network.md +++ b/docs/running-a-node/beta-network.md @@ -39,9 +39,9 @@ Setting up a node on the beta network is similar to the main network. To start y ___ -### Folder locations +### Directory locations ---8<-- "beta-folder-locations.md" +--8<-- "beta-directory-locations.md" !!! info Directory names for extracting builds downloaded from GitHub or https://beta.nano.org/ will be updated with RC versions for V19 and later. @@ -76,7 +76,7 @@ docker run --restart=unless-stopped -d \ -p 54000:54000 \ -p [::1]:55000:55000 \ -p [::1]:57000:57000 \ - -v ${NANO_HOST_FOLDER_BETA}:/root \ + -v ${NANO_HOST_DIR_BETA}:/root \ --name ${NANO_NAME} \ nanocurrency/nano-beta:latest-including-rc ``` @@ -85,8 +85,8 @@ docker run --restart=unless-stopped -d \ * For an explanation of the options included in the Docker `run` command, see [Starting the Container](/running-a-node/docker-management/#starting) details for the main network. * See [Docker management](/running-a-node/docker-management/) for other related commands -!!! warning "Separate host folders" - Be sure to use a different host folder for main network and beta network Docker node setups. Attempting to use the same folder will result in issues. +!!! warning "Separate host directories" + Be sure to use a different host directory for main network and beta network Docker node setups. Attempting to use the same directory will result in issues. ## Additional beta resources diff --git a/docs/running-a-node/configuration.md b/docs/running-a-node/configuration.md index 0c3c9f8d1..ba5d08fa7 100644 --- a/docs/running-a-node/configuration.md +++ b/docs/running-a-node/configuration.md @@ -5,7 +5,7 @@ The Nano node software is designed to run with little or no configuration. All c !!! success "Automatic migration and backups of JSON files" Versions prior to 20 use JSON as the configuration file format, and these will be automatically migrated to TOML files on startup. Note that only non-default values are migrated. - In version 19.0 when the node is upgraded between releases, including any beta releases, all config files will be backed up prior to the upgrade in the same folder for easy recovery if needed. + In version 19.0 when the node is upgraded between releases, including any beta releases, all config files will be backed up prior to the upgrade in the same directory for easy recovery if needed. As TOML files are never upgraded by the node, no backups are created for these. @@ -151,7 +151,7 @@ The node and its related processes will look for the files listed below, either The default locations of the config files are listed in the table below. ---8<-- "folder-locations.md" +--8<-- "directory-locations.md" ## Options formatting diff --git a/docs/running-a-node/docker-management.md b/docs/running-a-node/docker-management.md index 0a167a57f..318ee2eac 100644 --- a/docs/running-a-node/docker-management.md +++ b/docs/running-a-node/docker-management.md @@ -4,11 +4,11 @@ Docker greatly simplifies node management. Below we will go over some of the be --8<-- "docker-limitations.md" -### Nano Folder +### Nano Directory ---8<-- "folder-contents.md" +--8<-- "directory-contents.md" -For Docker setups, the `${NANO_HOST_FOLDER}` indicated in the steps below will be the location of these files on your host machine. +For Docker setups, the `${NANO_HOST_DIR}` indicated in the steps below will be the location of these files on your host machine. ### Managing the Container @@ -22,7 +22,7 @@ The following command will start the node container. Either set the specified en * `${NANO_TAG}` - The version of docker image you will be running. For consumers, `latest` is acceptable, but for enterprise use, a manually set tag to the latest version number is recommended. -* `${NANO_HOST_FOLDER}` - Location on the host computer where the ledger, configuration files, and logs will be stored. The Docker container will directly store files such as [config-node.toml](/running-a-node/configuration) and `data.ldb` into this directory. +* `${NANO_HOST_DIR}` - Location on the host computer where the ledger, configuration files, and logs will be stored. The Docker container will directly store files such as [config-node.toml](/running-a-node/configuration) and `data.ldb` into this directory. --- @@ -32,7 +32,7 @@ docker run --restart=unless-stopped -d \ -p 7075:7075 \ -p [::1]:7076:7076 \ -p [::1]:7078:7078 \ - -v ${NANO_HOST_FOLDER}:/root \ + -v ${NANO_HOST_DIR}:/root \ --name ${NANO_NAME} \ nanocurrency/nano:${NANO_TAG} ``` @@ -42,7 +42,7 @@ docker run --restart=unless-stopped -d \ | `-d` | Starts the docker container as a daemon | | `-p 7075:7075/udp` | Maps the network activity port | | `-p 7075:7075` | Maps the bootstrapping TCP port | -| `-v ${NANO_HOST_FOLDER}:/root` | Maps the host's Nano directory to the guest `/root` directory | +| `-v ${NANO_HOST_DIR}:/root` | Maps the host's Nano directory to the guest `/root` directory | | `--restart=unless-stopped` | Restarts the container if it crashes | | `nanocurrency/nano:${NANO_TAG}` | Specifies the container to execute with tag | | `-p [::1]:7076:7076`
or `-p 127.0.0.1:7076:7076` | Indicates that only RPC commands originating from the host will be accepted. **WARNING: Without the proper IP configured here, anyone with access to your system's IP address can control your nano\_node.** | @@ -62,7 +62,7 @@ This will start the docker container using host ports 7075 and 7076 and put the On port 7075, both TCP and UDP are required. !!! warning - If you are running multiple nano\_node Docker containers, **DO NOT** share the same `${NANO_HOST_FOLDER}`, each nano\_node requires its own independent files. + If you are running multiple nano\_node Docker containers, **DO NOT** share the same `${NANO_HOST_DIR}`, each nano\_node requires its own independent files. --- @@ -136,7 +136,7 @@ docker stop ${NANO_NAME} !!! warning Modifications made to configuration files while the Docker container is running have no effect until the container is restarted. -You may now edit the [configuration files](/running-a-node/configuration) located in `${NANO_HOST_FOLDER}` using your preferred text editor. +You may now edit the [configuration files](/running-a-node/configuration) located in `${NANO_HOST_DIR}` using your preferred text editor. Once modifications are complete, [start up the docker container again](#starting) using the same command. diff --git a/docs/running-a-node/ledger-management.md b/docs/running-a-node/ledger-management.md index ea344ba79..50e33905e 100644 --- a/docs/running-a-node/ledger-management.md +++ b/docs/running-a-node/ledger-management.md @@ -5,9 +5,9 @@ ## Ledger file -The node automatically manages the full Nano ledger in the `data.ldb` file which can be found in the data folder at these locations: +The node automatically manages the full Nano ledger in the `data.ldb` file which can be found in the data directory at these locations: ---8<-- "folder-locations.md" +--8<-- "directory-locations.md" This file will grow in size as the ledger does. As of April 2020 there are over 49 million blocks in the ledger which requires at least 26GB of free space. See [hardware recommendations](/running-a-node/node-setup/#hardware-recommendations) for more preferred node specs. @@ -81,7 +81,7 @@ Blocks are confirmed using the voting weight of representatives and these weight If looking to use a downloaded ledger there is a risk of it providing inaccurate representative voting weights. Although the potential impacts of this are minimal, below are some recommended steps to take which can help provide additional confidence the ledger can be used. 1. **Scan the ledger for integrity using the [`--debug_validate_blocks`](/commands/command-line-interface/#-debug_validate_blocks) CLI command**. If issues are found they should be inspected carefully and alternative sources of a ledger may need to be considered as failures with this command have a high chance of indicating potentially malicious behavior. -1. **Review the differences in representative voting weights by running the [`--compare_rep_weights`](/commands/command-line-interface/#-compare_rep_weights) CLI command** (_v21.0+ only)_ with the new ledger in the default data folder (old ledger backed up) or in a different data folder by using the optional `--data_path` argument. This will compare the new ledger voting weights against the hardcoded values in the node (set at the time of release). See the [CLI command](/commands/command-line-interface/#-compare_rep_weights) for details on the output with special attention paid to entries in the `outliers` and `newcomers` sections. By inspecting those addresses in public explorers such as [Nanocrawler.cc](https://nanocrawler.cc), this can help to determine if voting weight may have been manipulated in the downloaded ledger. +1. **Review the differences in representative voting weights by running the [`--compare_rep_weights`](/commands/command-line-interface/#-compare_rep_weights) CLI command** (_v21.0+ only)_ with the new ledger in the default data directory (old ledger backed up) or in a different data directory by using the optional `--data_path` argument. This will compare the new ledger voting weights against the hardcoded values in the node (set at the time of release). See the [CLI command](/commands/command-line-interface/#-compare_rep_weights) for details on the output with special attention paid to entries in the `outliers` and `newcomers` sections. By inspecting those addresses in public explorers such as [Nanocrawler.cc](https://nanocrawler.cc), this can help to determine if voting weight may have been manipulated in the downloaded ledger. If you need support with this process or need help in evaluating some of the CLI command results, join the [Node and Representative Management category](https://forum.nano.org/c/node-and-rep/8) on the [Nano Forums](https://forum.nano.org). diff --git a/docs/snippets/beta-folder-locations.md b/docs/snippets/beta-directory-locations.md similarity index 100% rename from docs/snippets/beta-folder-locations.md rename to docs/snippets/beta-directory-locations.md diff --git a/docs/snippets/folder-contents.md b/docs/snippets/directory-contents.md similarity index 53% rename from docs/snippets/folder-contents.md rename to docs/snippets/directory-contents.md index 65421633d..d78a2460b 100644 --- a/docs/snippets/folder-contents.md +++ b/docs/snippets/directory-contents.md @@ -1,4 +1,4 @@ -The Nano folder contains: wallets file (`wallets.ldb`), [log files](/running-a-node/troubleshooting/#log-files), optional config files, ledger file (data.ldb) and related lock files. +The Nano directory contains: wallets file (`wallets.ldb`), [log files](/running-a-node/troubleshooting/#log-files), optional config files, ledger file (data.ldb) and related lock files. !!! warning "Protect wallet and backup files" - The built-in node wallet is for use in development and testing only. Those using it should take care in protecting access to the wallets.ldb file and backup files, whether encrypted or not, for added security. \ No newline at end of file + The built-in node wallet is for use in development and testing only. Those using it should take care in protecting access to the wallets.ldb file and backup files, whether encrypted or not, for added security. diff --git a/docs/snippets/folder-locations.md b/docs/snippets/directory-locations.md similarity index 100% rename from docs/snippets/folder-locations.md rename to docs/snippets/directory-locations.md diff --git a/readme.md b/readme.md index 00f931448..0f5745766 100644 --- a/readme.md +++ b/readme.md @@ -43,7 +43,7 @@ For example, linking from a page in the`running-a-node` folder to `integration-g * Doesn't get checked: `/integration-guides/the-basics` ### Snippets -The `snippets` folder contains reusable pieces of content which can be inserted as follows: +The `snippets` directory contains reusable pieces of content which can be inserted as follows: `--8<-- "snippet-file-name.md"` From 967e643cab034a8a1ef889a1bf67a551dcdd8d89 Mon Sep 17 00:00:00 2001 From: Sergey Kroshnin Date: Tue, 9 Jun 2020 09:30:29 +0300 Subject: [PATCH 76/87] Optional "block" given to RPC "work_generate" to infer difficulty (#284) * Optional "block" given to RPC "work_generate" to infer difficulty * Commit guilhermelawless proposal Co-authored-by: Guilherme Lawless * Update rpc-protocol.md * Optional "json_block" Co-authored-by: Guilherme Lawless Co-authored-by: Zach Hyatt --- docs/commands/rpc-protocol.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/docs/commands/rpc-protocol.md b/docs/commands/rpc-protocol.md index 3e374af53..b6fd23bed 100644 --- a/docs/commands/rpc-protocol.md +++ b/docs/commands/rpc-protocol.md @@ -2787,9 +2787,19 @@ A valid Nano account. If provided and `use_peers` is set to `true`, this informa **Optional "version"** -_version 21.0+_ +_version 21.0+_ Work version string. Currently "work_1" is the default and only valid option. +**Optional "block"** + +_version 21.0+_ +A valid Nano block (string or JSON). Using the optional `json_block` is recommended. If provided and `difficulty` or `multiplier` are both not given, RPC processor tries to calculate the appropriate difficulty threshold based on ledger data. + +**Optional "json_block"** + +_version 21.0+_ +Default "false". If "true", `block` in the request should contain a JSON subtree instead of a JSON string. + --- ### work_peer_add From 43d4fd5bbca63f9d4075d46b1533a7b6835c1893 Mon Sep 17 00:00:00 2001 From: Wesley Shillingford Date: Tue, 9 Jun 2020 13:42:58 +0100 Subject: [PATCH 77/87] Telemetry update (#321) --- docs/commands/rpc-protocol.md | 10 ++++++---- docs/integration-guides/websockets.md | 5 +++-- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/docs/commands/rpc-protocol.md b/docs/commands/rpc-protocol.md index b6fd23bed..5ee6a0b3a 100644 --- a/docs/commands/rpc-protocol.md +++ b/docs/commands/rpc-protocol.md @@ -1790,16 +1790,18 @@ When setting raw to true metrics from all nodes are displayed. It additionally c { "metrics": [ { - "signature": "5F8DEE5F895D53E122FDEB4B1B4118A41F9DDB818C6B299B09DF59131AF9F201BB7057769423F6B0C868B57509177B54D5D2C731405FE607527F5E2B6B2E290F", - "node_id": "DF00C99E4205D74B0B20E2F9399DCF847C6A8FDFD9F47BAB2F95EE8C056B670C" + "block_count": "5777903", ... + "node_id": "DF00C99E4205D74B0B20E2F9399DCF847C6A8FDFD9F47BAB2F95EE8C056B670C", + "signature": "5F8DEE5F895D53E122FDEB4B1B4118A41F9DDB818C6B299B09DF59131AF9F201BB7057769423F6B0C868B57509177B54D5D2C731405FE607527F5E2B6B2E290F", "address": "::ffff:152.89.106.89", "port": "54000" }, { - "signature": "D691B855D9EC70EA6320DE609EB379EB706845433E034AD22721E8F91BF3A26156F40CCB2E98653F1E63D4CE5F10F530A835DE1B154D1213464E3B9BB9BE4908", - "node_id": "C8172AB14437B245760B418621AD0FF22003F4ED55C1736C41FAFEAFC30FF70B" + "block_count": "5777902", ... + "node_id": "C8172AB14437B245760B418621AD0FF22003F4ED55C1736C41FAFEAFC30FF70B", + "signature": "D691B855D9EC70EA6320DE609EB379EB706845433E034AD22721E8F91BF3A26156F40CCB2E98653F1E63D4CE5F10F530A835DE1B154D1213464E3B9BB9BE4908", "address": "::ffff:95.216.205.215", "port": "54006" } diff --git a/docs/integration-guides/websockets.md b/docs/integration-guides/websockets.md index 97da14a96..01dec7078 100644 --- a/docs/integration-guides/websockets.md +++ b/docs/integration-guides/websockets.md @@ -540,8 +540,6 @@ No filters are currently available for the `telemetry` topic. "topic": "telemetry", "time": "1587109495082", "message": { - "signature": "A133AD584C3C1F44BB7FDA1F53B80DA83EBF5E3D9DCB55D74F0B6899151331C1FB11E4E29CE54F3B4C315FEAEECAD4AF383BDB175ECA76C1744DE51AEB097709", - "node_id": "59A442B93C43623EB250330A31B158D7DF97EFB9365ABACC1A9416968FDCE4CB", "block_count": "23173713", "cemented_count": "23173713", "unchecked_count": "0", @@ -557,6 +555,9 @@ No filters are currently available for the `telemetry` topic. "pre_release_version": "0", "maker": "0", "timestamp": "1587109484086", + "active_difficulty": "ffffffcdbf40aa45", + "node_id": "59A442B93C43623EB250330A31B158D7DF97EFB9365ABACC1A9416968FDCE4CB", + "signature": "A133AD584C3C1F44BB7FDA1F53B80DA83EBF5E3D9DCB55D74F0B6899151331C1FB11E4E29CE54F3B4C315FEAEECAD4AF383BDB175ECA76C1744DE51AEB097709", "address": "::ffff:165.22.133.254", "port": "54000" } From 04435a97d9590df6e718d1a4dab36642bf20ecc5 Mon Sep 17 00:00:00 2001 From: Wesley Shillingford Date: Tue, 9 Jun 2020 23:01:46 +0100 Subject: [PATCH 78/87] node_telemetry -> telemetry RPC rename (#322) * Update telemetry RPC * Update telemetry RPC links and references Co-authored-by: Zach Hyatt --- docs/commands/rpc-protocol.md | 198 +++++++++++++------------- docs/integration-guides/websockets.md | 2 +- docs/protocol-design/networking.md | 2 +- 3 files changed, 101 insertions(+), 101 deletions(-) diff --git a/docs/commands/rpc-protocol.md b/docs/commands/rpc-protocol.md index 5ee6a0b3a..2f6e0c635 100644 --- a/docs/commands/rpc-protocol.md +++ b/docs/commands/rpc-protocol.md @@ -1724,105 +1724,6 @@ Removing node ID (restart required to take effect) --- -### node_telemetry -_version 21.0+_ -Return metrics from nodes. See [networking node telemetry](/protocol-design/networking#node-telemetry) for more information. -**Request:** -```json -{ - "action": "node_telemetry" -} -``` -**Response:** -```json -{ - "block_count": "5777903", - "cemented_count": "688819", - "unchecked_count": "443468", - "account_count": "620750", - "bandwidth_cap": "1572864", - "peer_count": "32", - "protocol_version": "18", - "uptime": "556896", - "genesis_block": "F824C697633FAB78B703D75189B7A7E18DA438A2ED5FFE7495F02F681CD56D41", - "major_version": "21", - "minor_version": "0", - "patch_version": "0", - "pre_release_version": "0", - "maker": "0", - "timestamp": "1587055945990", - "active_difficulty": "ffffffcdbf40aa45" -} -``` - -This contains a summarized view of the network with 10% of lower/upper bound results removed to reduce the effect of outliers. Returned values are calculated as follows: - -| Field Name | Response details | -|------------|------------------------------------| -| **block_count** | average count of blocks in ledger (including unconfirmed) | -| **cemented_count** | average count of blocks cemented in ledger (only confirmed) | -| **unchecked_count** | average count of unchecked blocks | -| **account_count** | average count of accounts in ledger | -| **bandwidth_cap** | `0` = unlimited; the mode is chosen if there is more than 1 common result otherwise the results are averaged (excluding `0`) | -| **peer_count** | average count of peers nodes are connected to | -| **\*_version** | mode (most common) of (protocol, major, minor, patch, pre_release) versions | -| **uptime** | number of seconds since the UTC epoch at the point where the response is sent from the peer | -| **genesis_block** | mode (most common) of genesis block hashes | -| **maker** | meant for third party node software implementing the protocol so that it can be distinguished, `0` = Nano Foundation | -| **timestamp** | number of milliseconds since the UTC epoch at the point where the response is sent from the peer | -| **active_difficulty** | the current network difficulty, see [active_difficulty](/commands/rpc-protocol/#active_difficulty) "network_current" | - -This only returns values which have been cached by the ongoing polling of peer metric data. Each response is cached for 60 seconds on the main network and 15 seconds on beta; a few additional seconds are added on for response delays. - -**Optional "raw"** -When setting raw to true metrics from all nodes are displayed. It additionally contains **signature**, **node_id**, **address** and **port** from each peer. - -**Request:** -```json -{ - "action": "node_telemetry", - "raw" : "true" -} -``` - -**Response:** -```json -{ - "metrics": [ - { - "block_count": "5777903", - ... - "node_id": "DF00C99E4205D74B0B20E2F9399DCF847C6A8FDFD9F47BAB2F95EE8C056B670C", - "signature": "5F8DEE5F895D53E122FDEB4B1B4118A41F9DDB818C6B299B09DF59131AF9F201BB7057769423F6B0C868B57509177B54D5D2C731405FE607527F5E2B6B2E290F", - "address": "::ffff:152.89.106.89", - "port": "54000" - }, - { - "block_count": "5777902", - ... - "node_id": "C8172AB14437B245760B418621AD0FF22003F4ED55C1736C41FAFEAFC30FF70B", - "signature": "D691B855D9EC70EA6320DE609EB379EB706845433E034AD22721E8F91BF3A26156F40CCB2E98653F1E63D4CE5F10F530A835DE1B154D1213464E3B9BB9BE4908", - "address": "::ffff:95.216.205.215", - "port": "54006" - } - ... - ] -} -``` - -**Optional "address" & "port"** -Get metrics from a specific peer. It accepts both ipv4 and ipv6 addresses -```json -{ - "action": "node_telemetry", - "address": "246.125.123.456", - "port": "7075" -} -``` -Metrics for the local node can be requested using the peering port and any loopback address **127.0.0.1**, **::1** or **[::1]** - ---- - ### peers Returns a list of pairs of online peer IPv6:port and its node protocol network version @@ -2491,6 +2392,105 @@ Boolean, false by default. Returns a consecutive list of block hashes in the acc --- +### telemetry +_version 21.0+_ +Return metrics from nodes. See [networking node telemetry](/protocol-design/networking#node-telemetry) for more information. +**Request:** +```json +{ + "action": "telemetry" +} +``` +**Response:** +```json +{ + "block_count": "5777903", + "cemented_count": "688819", + "unchecked_count": "443468", + "account_count": "620750", + "bandwidth_cap": "1572864", + "peer_count": "32", + "protocol_version": "18", + "uptime": "556896", + "genesis_block": "F824C697633FAB78B703D75189B7A7E18DA438A2ED5FFE7495F02F681CD56D41", + "major_version": "21", + "minor_version": "0", + "patch_version": "0", + "pre_release_version": "0", + "maker": "0", + "timestamp": "1587055945990", + "active_difficulty": "ffffffcdbf40aa45" +} +``` + +This contains a summarized view of the network with 10% of lower/upper bound results removed to reduce the effect of outliers. Returned values are calculated as follows: + +| Field Name | Response details | +|------------|------------------------------------| +| **block_count** | average count of blocks in ledger (including unconfirmed) | +| **cemented_count** | average count of blocks cemented in ledger (only confirmed) | +| **unchecked_count** | average count of unchecked blocks | +| **account_count** | average count of accounts in ledger | +| **bandwidth_cap** | `0` = unlimited; the mode is chosen if there is more than 1 common result otherwise the results are averaged (excluding `0`) | +| **peer_count** | average count of peers nodes are connected to | +| **\*_version** | mode (most common) of (protocol, major, minor, patch, pre_release) versions | +| **uptime** | number of seconds since the UTC epoch at the point where the response is sent from the peer | +| **genesis_block** | mode (most common) of genesis block hashes | +| **maker** | meant for third party node software implementing the protocol so that it can be distinguished, `0` = Nano Foundation | +| **timestamp** | number of milliseconds since the UTC epoch at the point where the response is sent from the peer | +| **active_difficulty** | the current network difficulty, see [active_difficulty](/commands/rpc-protocol/#active_difficulty) "network_current" | + +This only returns values which have been cached by the ongoing polling of peer metric data. Each response is cached for 60 seconds on the main network and 15 seconds on beta; a few additional seconds are added on for response delays. + +**Optional "raw"** +When setting raw to true metrics from all nodes are displayed. It additionally contains **signature**, **node_id**, **address** and **port** from each peer. + +**Request:** +```json +{ + "action": "telemetry", + "raw" : "true" +} +``` + +**Response:** +```json +{ + "metrics": [ + { + "block_count": "5777903", + ... + "node_id": "DF00C99E4205D74B0B20E2F9399DCF847C6A8FDFD9F47BAB2F95EE8C056B670C", + "signature": "5F8DEE5F895D53E122FDEB4B1B4118A41F9DDB818C6B299B09DF59131AF9F201BB7057769423F6B0C868B57509177B54D5D2C731405FE607527F5E2B6B2E290F", + "address": "::ffff:152.89.106.89", + "port": "54000" + }, + { + "block_count": "5777902", + ... + "node_id": "C8172AB14437B245760B418621AD0FF22003F4ED55C1736C41FAFEAFC30FF70B", + "signature": "D691B855D9EC70EA6320DE609EB379EB706845433E034AD22721E8F91BF3A26156F40CCB2E98653F1E63D4CE5F10F530A835DE1B154D1213464E3B9BB9BE4908", + "address": "::ffff:95.216.205.215", + "port": "54006" + } + ... + ] +} +``` + +**Optional "address" & "port"** +Get metrics from a specific peer. It accepts both ipv4 and ipv6 addresses +```json +{ + "action": "telemetry", + "address": "246.125.123.456", + "port": "7075" +} +``` +Metrics for the local node can be requested using the peering port and any loopback address **127.0.0.1**, **::1** or **[::1]** + +--- + ### validate_account_number Check whether **account** is a valid account number using checksum diff --git a/docs/integration-guides/websockets.md b/docs/integration-guides/websockets.md index 01dec7078..a448cb303 100644 --- a/docs/integration-guides/websockets.md +++ b/docs/integration-guides/websockets.md @@ -563,7 +563,7 @@ No filters are currently available for the `telemetry` topic. } } ``` -See the [node_telemetry](/commands/rpc-protocol/#node_telemetry) RPC command which gives more information about the message response +See the [telemetry](../commands/rpc-protocol.md#telemetry) RPC command which gives more information about the message response ### New unconfirmed blocks diff --git a/docs/protocol-design/networking.md b/docs/protocol-design/networking.md index 692de55c2..174762535 100644 --- a/docs/protocol-design/networking.md +++ b/docs/protocol-design/networking.md @@ -26,4 +26,4 @@ The node id used in the initial handshake is used for signing. The genesis block The data is signed so that it cannot be forged by a Man In The Middle (MITM) attack. !!! warning "Peer disconnections" - Sending incorrectly signed telemetry data to peers will result in being blacklisted as it is seen as malicious, make sure the signing is correct! Verify signatures against known signing done by node by testing [local telemetry](/commands/rpc-protocol#node_telemetry). Nodes with a different genesis block hash will also be disconnected. + Sending incorrectly signed telemetry data to peers will result in being blacklisted as it is seen as malicious, make sure the signing is correct! Verify signatures against known signing done by node by testing [local telemetry](../commands/rpc-protocol.md#telemetry). Nodes with a different genesis block hash will also be disconnected. From 2072055dbe429da08a01ef9ec8cd0d79ca78bdd6 Mon Sep 17 00:00:00 2001 From: Guilherme Lawless Date: Wed, 10 Jun 2020 14:19:41 +0100 Subject: [PATCH 79/87] Hide pre-V21 bootstrap_status response by default (#218) --- docs/commands/rpc-protocol.md | 54 +++++++++++++++++------------------ 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/docs/commands/rpc-protocol.md b/docs/commands/rpc-protocol.md index 2f6e0c635..ca172ece3 100644 --- a/docs/commands/rpc-protocol.md +++ b/docs/commands/rpc-protocol.md @@ -1027,33 +1027,33 @@ _versions 21.0+_ ] } ``` -**Response:** -_versions 17.0-20.0_ -```json -{ - "clients": "0", - "pulls": "0", - "pulling": "0", - "connections": "31", - "idle": "31", - "target_connections": "16", - "total_blocks": "13558", - "runs_count": "0", - "requeued_pulls": "31", - "frontiers_received": "true", - "frontiers_confirmed": "false", - "mode": "legacy", - "lazy_blocks": "0", - "lazy_state_backlog": "0", - "lazy_balances": "0", - "lazy_destinations": "0", - "lazy_undefined_links": "0", - "lazy_pulls": "32", - "lazy_keys": "32", - "lazy_key_1": "36897874BDA3028DC8544C106BE1394891F23DDDF84DE100FED450F6FBC8122C", - "duration": "29" -} -``` + +??? abstract "Response V17.0-V20.0" + ```json + { + "clients": "0", + "pulls": "0", + "pulling": "0", + "connections": "31", + "idle": "31", + "target_connections": "16", + "total_blocks": "13558", + "runs_count": "0", + "requeued_pulls": "31", + "frontiers_received": "true", + "frontiers_confirmed": "false", + "mode": "legacy", + "lazy_blocks": "0", + "lazy_state_backlog": "0", + "lazy_balances": "0", + "lazy_destinations": "0", + "lazy_undefined_links": "0", + "lazy_pulls": "32", + "lazy_keys": "32", + "lazy_key_1": "36897874BDA3028DC8544C106BE1394891F23DDDF84DE100FED450F6FBC8122C", + "duration": "29" + } + ``` --- From b6ede2b2b672feeff0f60eb9205cfc05e8a7288e Mon Sep 17 00:00:00 2001 From: Zach Hyatt Date: Wed, 10 Jun 2020 10:42:38 -0500 Subject: [PATCH 80/87] V21 release notes (#271) * Initial V21 Release Notes setup * Add SSD free space recommendations * Switch to ledger management page and expand content * Minor typo update * Add guide to updating the node on another machine * Add callout for beta testing * Minor updates based on feedback * Initial draft of V21 release notes and related epoch upgrade details * Update downloaded ledger section title and recommended actions, other minor tweaks * Update docs/running-a-node/ledger-management.md Co-Authored-By: Guilherme Lawless * Update docs/running-a-node/ledger-management.md Co-Authored-By: Guilherme Lawless * Adjust and simplify usage of --compare_rep_weights CLI * Update docs/releases/node-releases.md Co-Authored-By: Guilherme Lawless * Update docs/releases/node-releases.md Co-Authored-By: Guilherme Lawless * Move release notes out to individual pages for current and previous * Add new heading for top, link from some related spots * Add release details for v19 and v20 under previous release notes headers * Move telemetry forge warning to snippet and add to rpc page * Move some epoch upgrade considerations to network upgrades page and reorganize * Various minor updates per feedback * Update docs/running-a-node/ledger-management.md Co-Authored-By: Guilherme Lawless * Update docs/running-a-node/ledger-management.md Co-Authored-By: Guilherme Lawless * Update docs/running-a-node/ledger-management.md Co-Authored-By: Guilherme Lawless * Update docs/running-a-node/ledger-management.md Co-Authored-By: Guilherme Lawless * Update docs/running-a-node/ledger-management.md Co-Authored-By: Guilherme Lawless * Clarify recommended ledger upgrade process * Add release notes reference to block create difficulty in response and minor block create RPC format changes * Add database versions and adjust version details all into snippets * Minor typo and other changes * Callout for websocket enabled by default in docker * Fix links for config moved to work generation guide * Mailing list callout refresh * Add callout for static log file option * Resolve conflicts * Convert private key warning to danger callout * Move mailing list callout to top * Add basic callout for new difficulty thresholds * Initial benchmark additions and format updates * Add logging.log_rpc to notable configs * Remove callouts for --generate_config and --config, these were added in v20 * Add callout to --debug_generate_crash_report and update some links to the new format * Adjust live network glossary definition for deprecated UDP in V21 * Callout telemetry websocket as preferred over regular rpc telemetry calls * Include node telemetry websocket in release notes * Add turn off RPC logging to release notes * Add epoch block signer details to network upgrades * Updates to RPC work_generate * Add nano-work-server and work generation guide callouts * Add release notes draft callout to current release notes page * Expand beta network details * Add active difficulty callout box on network upgrades page * Fix broken links * Broken link fix * Add useful guide updates at end of release notes * Fix broken link to old pow section, link to glossary instead * Update docs/running-a-node/beta-network.md Co-authored-by: Guilherme Lawless * Update docs/releases/current-release-notes.md Co-authored-by: Guilherme Lawless * Remove beta ledger file and clarify current builds on node release page * Add lines between active releases Co-authored-by: Guilherme Lawless --- docs/commands/command-line-interface.md | 75 ++-- docs/commands/rpc-protocol.md | 7 +- docs/glossary.md | 2 +- docs/images/mailing-list.svg | 11 + docs/integration-guides/the-basics.md | 2 +- docs/integration-guides/work-generation.md | 43 ++- docs/releases/current-release-notes.md | 153 ++++++++ docs/releases/network-upgrades.md | 82 ++++- docs/releases/node-releases.md | 332 ++---------------- docs/releases/previous-release-notes.md | 262 ++++++++++++++ docs/running-a-node/beta-network.md | 42 ++- docs/running-a-node/configuration.md | 13 + docs/snippets/current-beta-build-links.md | 5 + docs/snippets/join-technical-mailing-list.md | 16 +- .../known-issue-macos-too-many-open-files.md | 2 +- .../known-issue-peers-stake-reporting.md | 2 +- docs/snippets/release-details-v18-0.md | 3 + docs/snippets/release-details-v19-0.md | 5 + docs/snippets/release-details-v20-0.md | 7 + docs/snippets/release-details-v21-0.md | 5 + docs/snippets/release-details-v22-0.md | 3 + docs/snippets/setup-beta-testing.md | 2 + docs/snippets/telemetry-can-be-forged.md | 2 + mkdocs.yml | 2 + 24 files changed, 710 insertions(+), 368 deletions(-) create mode 100644 docs/images/mailing-list.svg create mode 100644 docs/releases/current-release-notes.md create mode 100644 docs/releases/previous-release-notes.md create mode 100644 docs/snippets/current-beta-build-links.md create mode 100644 docs/snippets/release-details-v18-0.md create mode 100644 docs/snippets/release-details-v19-0.md create mode 100644 docs/snippets/release-details-v20-0.md create mode 100644 docs/snippets/release-details-v21-0.md create mode 100644 docs/snippets/release-details-v22-0.md create mode 100644 docs/snippets/setup-beta-testing.md create mode 100644 docs/snippets/telemetry-can-be-forged.md diff --git a/docs/commands/command-line-interface.md b/docs/commands/command-line-interface.md index 52de0c454..42bf22b12 100644 --- a/docs/commands/command-line-interface.md +++ b/docs/commands/command-line-interface.md @@ -112,7 +112,10 @@ Changes seed for `` to ``. Note the legacy `--key` option can sti ### --wallet_decrypt_unsafe --wallet=`` --password=`` Decrypts `` using `` -**!!THIS WILL PRINT YOUR PRIVATE KEY AND SEED TO STDOUT!!** + +!!! danger + **USE WITH CAUTION: THIS WILL PRINT YOUR PRIVATE KEY AND SEED TO STDOUT** + If you didn't set password yet, use --wallet_decrypt_unsafe --wallet=`` ### --wallet_destroy --wallet=`` @@ -137,7 +140,12 @@ Set `` as default representative for `` ## Launch options When initially starting the nano_node or nano_wallet as a service the following launch options are available. -NOTE: These options are only for developer use so please understand the impacts before use. +!!! note "Intended for developer use" + These options are only for developer use so please understand the impacts before use. + +### --allow_bootstrap_peers_duplicates +_version 21.0+_ +Allow multiple connections to the same peer in bootstrap attempts ### --block_processor_batch_size Increase block processor transaction batch write size, default 0 (limited by config block_processor_batch_max_time), 256k for fast_bootstrap @@ -148,14 +156,6 @@ Increase block processor allowed blocks queue size before dropping live network ### --block_processor_verification_size Increase batch signature verification size in block processor, default 0 (limited by config signature_checker_threads), unlimited for fast_bootstrap -### --inactive_votes_cache_size -_version 21.0+_ -Increase cached votes without active elections size, default 16384 - -### --vote_processor_capacity -_version 21.0+_ -Vote processor queue size before dropping votes, default 144k - ### --disable_backup Turn off automatic wallet backup process @@ -175,13 +175,6 @@ Turn off listener on the bootstrap network so incoming TCP (bootstrap) connectio _version 19.0+_ Turn off use of TCP live network (TCP for bootstrap will remain available) -### --disable_udp (Deprecated) -_version 21.0+_ -This option has been deprecated and will be removed in future versions. It has no effect because it is now the default. - -_version 19.0+_ -Turn off use of UDP live network - ### --disable_unchecked_cleanup Prevent periodic cleaning of unchecked table @@ -200,16 +193,16 @@ Disable deletion of unchecked blocks after processing. _version 21.0+_ Turn on use of the UDP live network. -### --allow_bootstrap_peers_duplicates -_version 21.0+_ -Allow multiple connections to the same peer in bootstrap attempts - ### --fast_bootstrap Increase bootstrap processor limits to allow more blocks before hitting full state and verify/write more per database call. Also disable deletion of processed unchecked blocks. -### --batch_size (Deprecated) -_version 18.0+_ -Increase sideband upgrade batch size (default 512). Deprecated in _v21_ and will be removed in _v22_ as it will not support upgrades from v18 nodes and earlier. +### --inactive_votes_cache_size +_version 21.0+_ +Increase cached votes without active elections size, default 16384 + +### --vote_processor_capacity +_version 21.0+_ +Vote processor queue size before dropping votes, default 144k ## Debug commands @@ -240,19 +233,17 @@ List online weights table and current online_weights value ### --debug_dump_representatives List representatives and weights -### --debug_mass_activity (Deprecated) -Generates fake debug activity. Deprecated in _v21+_, can use `slow_test --gtest_filter=system.generate_mass_activity` instead. - -### --debug_output_last_backtrace_dump -_version 19.0+_ -Output the stacktrace stored after a node crash. - ### --debug_generate_crash_report _version 21.0+_ After a node crash on linux, this command consumes the dump files generated from that crash and produces a "nano_node_crash_report.txt" file. Requires `addr2line` to be installed on the system. See the [troubleshooting guide](/running-a-node/troubleshooting/#what-to-do-if-the-node-crashes-linux) for more information. ### --debug_opencl -Profile OpenCL work generation for (optional) `--device=` on `--device=` using `--threads=` count. To retrieve available platforms & devices run [--diagnostics](#-diagnostics). +Profile OpenCL work generation for (optional) `--device=` on `--device=` using `--threads=` count. To retrieve available platforms & devices run [--diagnostics](#-diagnostics). + +### --debug_output_last_backtrace_dump +_version 19.0+_ +Output the stacktrace stored after a node crash. + Optionals `--difficulty` and `--multiplier` (only the latter is used if both given) in version 21.0+ to set the work generation threshold. ### --debug_profile_bootstrap @@ -291,3 +282,23 @@ Profile signature verification ### --debug_xorshift_profile [Disabled] Profile xorshift algorithms + +## Deprecated commands + +### Debug + +##### --debug_mass_activity (Deprecated) +Generates fake debug activity. Deprecated in _v21+_, can use `slow_test --gtest_filter=system.generate_mass_activity` instead. + +### Launch options + +##### --batch_size (Deprecated) +_version 18.0+_ +Increase sideband upgrade batch size (default 512). Deprecated in _v21_ and will be removed in _v22_ as it will not support upgrades from v18 nodes and earlier. + +##### --disable_udp (Deprecated) +_version 21.0+_ +This option has been deprecated and will be removed in future versions. It has no effect because it is now the default. + +_version 19.0+_ +Turn off use of UDP live network diff --git a/docs/commands/rpc-protocol.md b/docs/commands/rpc-protocol.md index ca172ece3..f3ac5b76f 100644 --- a/docs/commands/rpc-protocol.md +++ b/docs/commands/rpc-protocol.md @@ -640,8 +640,10 @@ _version 21.0+_ Work version string. Currently "work_1" is the default and only valid option. Only used if optional **work** is not given. **Optional "difficulty"** -_version 21.0+_ + +_version 21.0+_ Difficulty value (16 hexadecimal digits string, 64 bit). Uses **difficulty** value to generate work. Only used if optional **work** is not given. + If difficulty and work values are both not given, RPC processor tries to calculate difficulty for work generation based on ledger data: epoch from previous block or from link for receive subtype; block subtype from previous block balance. --- @@ -2795,7 +2797,8 @@ Work version string. Currently "work_1" is the default and only valid option. **Optional "block"** _version 21.0+_ -A valid Nano block (string or JSON). Using the optional `json_block` is recommended. If provided and `difficulty` or `multiplier` are both not given, RPC processor tries to calculate the appropriate difficulty threshold based on ledger data. +A valid Nano block (string or JSON). Using the optional `json_block` is recommended. If provided and `difficulty` or `multiplier` are both not given, RPC processor tries to calculate the appropriate difficulty threshold based on ledger data. +***Note:*** block should be the one where the resulting work value will be used, not the previous block. **Optional "json_block"** diff --git a/docs/glossary.md b/docs/glossary.md index 8e8f347db..0771afd92 100644 --- a/docs/glossary.md +++ b/docs/glossary.md @@ -65,7 +65,7 @@ A block with funds being transferred to an [account](#account) owned by a [walle Blocks on an account chain before the first v1 block (which is often the v1 epoch block but can be other types). The first v1 block and all subsequent blocks are stateful blocks. #### live network -A sub-network established between peers via User Datagram Protocol (UDP) for communicating newly published blocks, votes and other non-bootstrap related traffic. This is available within all Nano networks (main, beta and test networks). +A sub-network established between peers via Transmission Control Protocol (TCP) for communicating newly published blocks, votes and other non-bootstrap related traffic. This is available within all Nano networks (main, beta and test networks). In versions prior to V19, this was done via User Datagram Protocol (UDP). UDP was retained as a fallback for peer connection for versions 19 and 20. As of V21, use of UDP is deprecated. #### online voting weight Also called online stake, it is a trended value. The node samples online representative weights every 5 minutes across a rolling 2 week period. The online voting weight value is the median of those samples. diff --git a/docs/images/mailing-list.svg b/docs/images/mailing-list.svg new file mode 100644 index 000000000..894884fda --- /dev/null +++ b/docs/images/mailing-list.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/docs/integration-guides/the-basics.md b/docs/integration-guides/the-basics.md index 37341c457..303f62390 100644 --- a/docs/integration-guides/the-basics.md +++ b/docs/integration-guides/the-basics.md @@ -145,7 +145,7 @@ Because each block contains the current state of the account, the `"type"` of th | balance | decimal string | 16 bytes | Resulting balance (in [raw](#units)) | | link | - | 32 bytes | Multipurpose field - see link table below | | signature | 128 hex-char string | 64 bytes | ED25519+Blake2b 512-bit signature | -| work | 16 hex-char string | 8 bytes | [Proof of Work](#proof-of-work) Nonce | +| work | 16 hex-char string | 8 bytes | [Proof of Work](../glossary.md#proof-of-work-pow) Nonce | Depending on the action each transaction intends to perform, the `"link"` field will have a different value for [block_create](/commands/rpc-protocol#block_create) RPC command: diff --git a/docs/integration-guides/work-generation.md b/docs/integration-guides/work-generation.md index 2b073da62..36d132198 100644 --- a/docs/integration-guides/work-generation.md +++ b/docs/integration-guides/work-generation.md @@ -167,19 +167,22 @@ The command will trigger continual work generation, so let it run until a suffic ### Example benchmarks -Below are work generation benchmarks from a variety of consumer-grade CPUs and GPUs updated in late 2017. - -| Device | Epoch v1
# PoW/sec | -|--------|-| -| Nvidia Tesla V100 (AWS) | 6.4 | -| Nvidia Tesla P100 (Google,Cloud) | 4.9 | -| Nvidia Tesla K80 (Google,Cloud) | 1.64 | -| AMD RX 470 OC | 1.59 | -| Nvidia GTX 1060 3GB | 1.25 | -| Intel Core i7 4790K AVX2 | 0.33 | -| Intel Core i7 4790K,WebAssembly (Firefox) | 0.14 | -| Google Cloud 4 vCores 0.14-0.16 | 0.14-0.16 | -| ARM64 server 4 cores (Scaleway) | 0.05-0.07 | +Below are work generation benchmarks from a variety of consumer-grade CPUs and GPUs. All values are presented in **# work/second generated**. See the [difficulty thresholds section](#difficulty-thresholds) below for details about values required for different epoch versions and block types. + +| **Device** | **Epoch v1**
All Blocks | **Epoch v2**
Send/Change Blocks | **Epoch v2**
Receive Blocks | +|--------|-|-|-| +| Nvidia Tesla V100 (AWS) | 6.4 | | | +| Nvidia Tesla P100 (Google,Cloud) | 4.9 | | | +| Nvidia Tesla K80 (Google,Cloud) | 1.64 | | | +| AMD RX 470 OC | 1.59 | | | +| Nvidia GTX 1060 3GB | 1.25 | | | +| Intel Core i7 4790K AVX2 | 0.33 | | | +| Intel Core i7 4790K,WebAssembly (Firefox) | 0.14 | | | +| Google Cloud 4 vCores | 0.14-0.16 | | | +| ARM64 server 4 cores (Scaleway) | 0.05-0.07 | | | +| Nvidia GTX 1080 | 2.63 | 0.37 | 21.29 | +| Nvidia RTX 2080 Ti | 4.01 | 0.51 | 31.5 | +| AMD R9-3900X (12C/24T@3.97GHz AVX2) | 1.97 | 0.26 | 15.6 | --- @@ -207,7 +210,19 @@ $$ ### Difficulty thresholds -The mainnet's base difficulty threshold is currently `0xffffffc000000000` for all blocks. For a block to be valid, its work field must satisfy the above work equations using this value for threshold. Nodes also prioritize the order in which they confirm transactions based on how far above this threshold the work value is. This only happens in case of saturation. Due to prioritization, it may be desirable to generate work further above the threshold to guarantee faster processing by the network. To assist integrations with managing these work difficulty levels, nodes monitor the trend of difficulty seen on unconfirmed blocks, and expose that value via the [`active_difficulty`](../commands/rpc-protocol.md#active_difficulty) RPC. +The mainnet's base difficulty threshold is currently `ffffffc000000000` for all epoch v1 blocks. For a block to be valid, its work field must satisfy the above work equations using this value for threshold. Nodes also prioritize the order in which they confirm transactions based on how far above this threshold the work value is. This only happens in case of saturation. + +Due to prioritization, it may be desirable to generate work further above the threshold to guarantee faster processing by the network. To assist integrations with managing these work difficulty levels, nodes monitor the trend of difficulty seen on unconfirmed blocks, and expose that value via the [`active_difficulty`](../commands/rpc-protocol.md#active_difficulty) RPC. + +After the next [network upgrade to increase difficulty](../releases/network-upgrades.md#increased-work-difficulty), which will occur after the [V21.0 release](../releases/current-release-notes.md) and subsequent distribution of epoch v2 blocks, there will be two difficulty thresholds: + +| Epoch version | Block Type | Difficulty Threshold | +| | | | +| 1 | All | `ffffffc000000000` | +| 2 | Send or change | `fffffff800000000` | +| 2 | Receive | `fffffe0000000000` | + +Although preparations can be done ahead of the upgrade, please find related considerations in the [network upgrade to increase difficulty](../releases/network-upgrades.md#increased-work-difficulty) section. **Development node wallet behavior** diff --git a/docs/releases/current-release-notes.md b/docs/releases/current-release-notes.md new file mode 100644 index 000000000..4a3a30335 --- /dev/null +++ b/docs/releases/current-release-notes.md @@ -0,0 +1,153 @@ +title: Current Release Notes | Nano Documentation +description: Details of the most current Nano node release including upgrade notices, major features, API changes and more + +# Current Release Notes: V21.0 + +!!! warning "V21.0 is in Release Candidate phase" + Although the current active version of the Nano node is V20.0, this page was updated with V21.0 details to provide early access to the upcoming changes before final release. Visit the [Previous Release Notes page](previous-release-notes.md) for V20.0 and earlier Release Notes. + + The details here are nearly final, but subject to change prior to the final release. + +--8<-- "release-details-v21-0.md" + +--8<-- "known-issue-macos-too-many-open-files.md" + +!!! info "Nano Forum available" + The Nano Forum is available at https://forum.nano.org/ as a resource to ask questions and get support when participating on the network. The [Node and Representative Management category](https://forum.nano.org/c/node-and-rep) is a great place to ask node upgrade related questions. + +--8<-- "join-technical-mailing-list.md" + +## Upgrade Notices + +The following key upgrade details should be reviewed by all node operators to determine how they will impact plans for upgrading: + +### Database upgrades +An in-place database upgrade will occur with this release to accomodate epoch-related flags. Machines will need at least 20-30GB free disk space to accommodate the upgrade. During the upgrade process, which may take multiple hours to complete depending on the machine specs, the node will not participate on the network or respond to RPC calls. + +As a result, **the recommended approach is to upgrade the ledger in a separate environment before replacing on production**. For detailed steps on this approach and other options, see the [Updating the node section](/running-a-node/ledger-management/#updating-the-node) of the Ledger Management page. + +### Minor RPC breaking changes +Although breaking changes were kept to a minimum in this release, there are two RPC calls with such changes: `work_validate` and `bootstrap_status`. For integrations using them, carefully review the additional details on these changes included in the [RPC Updates](#rpc-updates) section below. + +### Upcoming v2 epoch upgrade +As outlined in the [February Development Update: V21 PoW Difficulty Increases](https://medium.com/nanocurrency/development-update-v21-pow-difficulty-increases-362b5d052c8e), an epoch block distribution must be done to complete the upgrade to the new work difficulty thresholds. **All integrations generating work are encouraged to review the details on the [Network Upgrades page under the Upcoming upgrades section](/releases/network-upgrades#increased-work-difficulty) ahead of the epoch V2 distribution.** + +!!! danger "Only node V21.0 will be active after epoch distribution" + Nodes upgrading to V21.0 will remain peered with nodes V19.0 and V20.0 on the network until the epoch v2 block distribution begins. **After the first epoch v2 block is distributed, all nodes not running V21.0 will no longer be able to participate on the network.** This distribution will occur once 90% of voting weight and key services on the network have upgraded. Communications around the progress towards this goal will be sent following the release. + + More details about this network upgrade can be found on the [Network Upgrades page under the Upcoming upgrades section](/releases/network-upgrades#increased-work-difficulty) + + **All network participants are encouraged to upgrade to V21.0 as soon as possible to avoid disruption.** + +### UDP disabled by default +With all active peers capable of communicating via TCP, the UDP connections will be disabled by default in this version. To avoid disruptions, all nodes should allow traffic on 7075 TCP (see [Network Ports](/running-a-node/node-setup/#network-ports) details) and once upgraded, the [`peers`](/commands/rpc-protocol/#peers) RPC call should return at least dozens of peers and the [`confirmation_quorum`](/commands/rpc-protocol/#confirmation_quorum) RPC call should have a `peers_stake_total` value in the high tens of millions of Nano. + +Although not recommended, if necessary the temporary use of UDP can be done with the new [`--enable_udp`](/commands/command-line-interface/#-enable_udp) flag. + +--- + +## Major Updates + +### Work difficulty increase +As mentioned in the [Upgrade Notices](#upgrade-notices) section above, work difficulty changes were implemented in V21, but will not be activated until epoch v2 blocks are distributed at a future date. Please review the [Upcoming upgrades section](/releases/network-upgrades#increased-work-difficulty) of the Network Upgrades page for details. + +Updates on the progress toward the epoch upgrade will be posted in our many social channels as well as sent through our technical updates mailing list which can be joined here: Join Mailing List. + +### Node Telemetry +To allow better communication between nodes about various performance and other details, telemetry was added between peers. Various version details, account and block counts, active difficulty and more can be discovered from individual peers or summarized across them. + +Details of what is shared and options for receiving them can be found in the [node telemetry WebSocket section](../integration-guides/websockets.md#node-telemetry) and [`node_telemetry`](/commands/rpc-protocol/#telemetry) RPC. For protocol level details, see [Node Telemetry section](/protocol-design/networking/#node-telemetry) under Protocol Design > Networking. + +--8<-- "telemetry-can-be-forged.md" + +Continued conversation around telemetry is happening through the [related forum discussion](https://forum.nano.org/t/node-telemetry-metrics/112/8). + +### IPC 2.0 +As a key update towards the upcoming RPC 2.0 redesign, this background upgrade will provide more performant communication to the node, allow easier integration across various languages by supporting Flatbuffers and provide the foundation for [more granular authorization of specific calls](https://github.com/cryptocode/notes/wiki/IPC-Authorization). + +### Better election alignment and performance +Behind the scenes many improvements were made to better streamline alignment of elections across the network and allow for better performance. Resource usage by nodes, particularly network bandwidth, will be reduced even further than previous levels. No action is needed to take advantage of this increase other than upgrading your node to V21 as soon as you can! + +--- + +## Node Configuration and Management Updates + +!!! info "Support in Nano Forum" + For node operators looking to upgrade their node or tune their configurations, the [Node and Representative Management category](https://forum.nano.org/c/node-and-rep) of the forum is a great resource to use. + +The following options are notable node configuration updates. Additional configuration changes have been included in this release and can be found when generating the config files. + +* The ability to enable a static log file name is available via the `node.logging.stable_log_filename` option. If update to `true`, a static log file of `log/node.log` will be written to and rotated to timestamped files once full. This option requires the node being built with Boost 1.70+ (default for Docker images and published binaries). +* Nodes will now clear their peers lists and online weight if they are started after more than 1 week of being offline. This aims to improve re-peering in these situations, as well as provide more accurate online weight values as the node begins participating on the network again ([related PR](https://github.com/nanocurrency/nano-node/pull/2506)). +* When `watch_work` is set to `false` in the [process](../commands/rpc-protocol.md#process) RPC, it is no longer required to have [`enable_control`](../running-a-node/configuration.md#enable_control) = `true` in the `config-rpc.toml` file. + +!!! note "Log when voting, warn multiple accounts" + When the node is started there are new messages pushed to the logs which indicate when voting is enabled and how many representatives are configured to vote. A warning will be included in both the logs and `stdout` if multiple representatives are configured to be voting. + +--- + +## RPC Updates + +* **BREAKING CHANGE** [`work_validate`](/commands/rpc-protocol/#work_validate) has multiple changes to the response, one which will break most existing integrations: + * If `difficulty` parameter is not explicitly passed in the request, the existing `valid` field will not be returned (**breaking**) + * `valid_all` is a new return field, `true` if the work is valid at the current default difficulty (will go up after epoch upgrade) + * `valid_receive` is a new return field, `true` if the work is valid at the lower epoch_2 receive difficulty (only useful after the epoch upgrade is finished) + * **To best understand how these and other epoch related changes will impact your integration, it is highly recommended that the [Upcoming upgrades > Increased work difficulty section](/releases/network-upgrades#increased-work-difficulty) of the Network Upgrades is carefully reviewed** +* `active_difficulty` [RPC](/commands/rpc-protocol/#active_difficulty) and [WebSocket](/integration-guides/websockets/#active-difficulty) will automatically begin returning the higher difficulty threshold for send/change blocks in the `network_minimum` field once the epoch upgrade begins, otherwise the response formats will remain the same +* **BREAKING CHANGE** [`bootstrap_status`](/commands/rpc-protocol/#bootstrap_status) responses now have `connections` field as an array of connection-related fields and adds an `attempts` field with an area of individual bootstrap attempt details, each including information such as a unique id, type of bootstrap (legacy, lazy) and various other granular information. +* [`block_create`](/commands/rpc-protocol/#block_create) response now contains the `difficulty` value of the work included in the block for easy reference by integrations. When generating work for the created block, the node ledger data is used to estimate the required difficulty threshold. +* [`work_generate`](/commands/rpc-protocol/#work_generate) request now accepts optional `block` (and corresponding boolean `json_block`), which is used to estimate the required difficulty threshold by using ledger data. Two common use-cases are generating work for blocks created elsewhere, and re-generating work for a previously published block. +* [`account_info`](/commands/rpc-protocol/#account_info) responses now contain `confirmation_height_frontier` which is the hash of the last confirmed block. + +--8<-- "process-sub-type-recommended.md" + +## CLI Updates + +* **NEW** [`--debug_generate_crash_report`](../commands/command-line-interface.md#-debug_generate_crash_report) greatly simplifies [troubleshooting when a node crashes in Linux](../running-a-node/troubleshooting.md#what-to-do-if-the-node-crashes-linux). +* **NEW** [`--rebuild_database`](../commands/command-line-interface.md#-rebuild_database) provides a better compaction method for LMDB. **NOTE:** This requires approximately `data.ldb` file size * 2 in free space on disk. +* **NEW** [`--compare_rep_weights`](../commands/command-line-interface.md#-compare_rep_weights) gives the ability to compare the current ledger voting weight distribution against the hard coded weights provided in the node on release. Useful when attempting to use a downloaded ledger. More details on use can be found on the [Ledger Management page](../running-a-node/ledger-management.md). +* **NEW** [`--inactive_votes_cache_size`](../commands/command-line-interface.md#-inactive_votes_cache_size) allows adjusting of the cache that holds votes where the block does not have an action election, default is 16384 votes. + +--- + +## WebSockets + +* Updates to WebSocket subscriptions are now allowed on the [`confirmation`](/integration-guides/websockets/#confirmations) topic. With `options` of `accounts_add` and `accounts_del` an existing subscription can now be more easily managed to avoid resubscribing with a large list of accounts or managing multiple subscriptions. +* **NEW** [`bootstrap`](/integration-guides/websockets/#bootstrap) topic provides notifications about the starting and exiting of bootstrap attempts. +* **NEW** [`new_unconfirmed_block`](/integration-guides/websockets/#new-unconfirmed-blocks) topic provides notifications about blocks which were just processed and are being seen by the node for the first time. This is useful for integrations that want to watch for blocks they didn't create themselves, but for which they want to update with new work (external work watcher). +* WebSocket server is now enabled by default in V21+ Docker images to make it more consistent with RPC server setup and documented port mappings + +--- + +## Developer/Debug Options + +* [`confirmation_active`](/commands/rpc-protocol/#confirmation_active) RPC response includes new `unconfirmed` and `confirmed` fields to help with more granular election tracking and monitoring +* When the node is started there are new messages pushed to the logs which indicate when voting is enabled and how many representatives are configured to vote. A warning will be included in both the logs and `stdout` if multiple representatives are configured to be voting. +* New [`--debug_generate_crash_report`](/commands/command-line-interface/#-debug_generate_crash_report) CLI command consumes the dump files to create a helpful crash report. See [What to do if the node crashes (Linux)](/running-a-node/troubleshooting/#what-to-do-if-the-node-crashes-linux) for more details on using this command. +* New [`logging.log_rpc`](../running-a-node/configuration.md#logginglog_rpc) configuration can be optionally set to `false` to prevent explicit logging of RPC requests made to the node + +--- + +## Deprecations + +The following functionality is now deprecated and will be removed in a future release: + +* UDP is disabled by default in this version and will be removed in a future release. Launch flag [`--disable_udp`](/commands/command-line-interface/#deprecated-commands) is deprecated and temporary use of UDP can be done with the new [`--enable_udp`](/commands/command-line-interface/#-enable_udp) flag. + +--- + +## Builds and Commands + +--8<-- "current-release-build-links.md" + +--- + +## Useful guide updates + +We've been making many useful updates to the documentation here, especially around various guides for managing different aspects of the Nano node. Here are a few worth digging into: + +* **NEW** [Ledger Management](../running-a-node/ledger-management.md) +* **NEW** [Voting as a Representative](../running-a-node/voting-as-a-representative.md) +* **NEW** [Work Generation](../integration-guides/work-generation.md) +* [Node Security](../running-a-node/security.md) +* [Block Confirmation Tracking](../integration-guides/block-confirmation-tracking.md) diff --git a/docs/releases/network-upgrades.md b/docs/releases/network-upgrades.md index 28810cf8f..72b196892 100644 --- a/docs/releases/network-upgrades.md +++ b/docs/releases/network-upgrades.md @@ -2,10 +2,77 @@ For details on why and how network upgrades happen, along with explanations of the various types, please see the [Upgrades overview](#upgrades-overview) and [Upgrade methods](#upgrade-methods) sections further down. +--8<-- "join-technical-mailing-list.md" + --- ## Upcoming upgrades +### Increased work difficulty + +To help ensure Quality of Service on the network by increasing the difficulty required for send and change blocks to be considered valid by the network (8x compared to current). To help offset the difficulty increase and add incentive to receive blocks so ledger pruning can be done more broadly in the future, the difficulty for receive blocks will simultaneously be reduced (1/8 compared to current). + +#### Transition details + +This upgrade is sometimes referenced as the epoch v2 upgrade and the relate events to complete are as follows: + +| Date | Type | Description | +|------|------|-------------| +| TBD | Node release | Nano node V21.0 released which includes changes necessary for supporting new difficulty validation and generation | +| TBD | v2 epoch blocks distribution start | Distribution of v2 epoch blocks to all accounts to mark in the ledger the point at which the new work difficulty levels will be required. The start of this distribution process will occur once key services and over 90% of voting weight on the network has upraded. | +| TBD | v2 epoch blocks distribution end | Distribution of epoch blocks ends after all accounts are upgraded. | + +!!! warning "Nodes de-peered with epoch blocks" + Due to the nature of the work difficulty changes, any nodes not updated to V21.0 at the time of epoch block distribution will be de-peered from the network. + +#### Recommended preparations + +In order to best prepare for the transition to new thresholds, the following items should be considered: + +**Work generation guide** +The new [Work Generation guide](../integration-guides/work-generation.md) was written to help users and integrations leverage their work generation at all times. + +**Work validation** +The [`work_validate`](../commands/rpc-protocol.md#work_validate) RPC has multiple changes to the response, one which will break most existing integrations when upgrading to V21, two others that will become useful after upgrade: + +* If `difficulty` parameter is not explicitly passed in the request, the existing `valid` field will not be returned (**breaking**) +* `valid_all` is a new return field, `true` if the work is valid at the current default difficulty (will go up after epoch upgrade) +* `valid_receive` is a new return field, `true` if the work is valid at the lower epoch_2 receive difficulty (only useful after the epoch upgrade is finished) +* **If possible, it is best to avoid using this RPC until the epoch upgrade is completed** + +**External work generation** +[nano-work-server](https://github.com/nanocurrency/nano-work-server) has been updated to use the higher threshold by default when not given an explicit `difficulty`. The `work_validate` response has the same breaking changes as above. + +* Prefer directly using the server as a [work peer](../integration-guides/work-generation.md#nodework_peers) as outlined in the [guide](../integration-guides/work-generation.md#work-generated-using-the-node-incl-work-peers). The node always requests the appropriate difficulty threshold when using RPC [block_create](../commands/rpc-protocol.md#block_create), or [work_generate](../commands/rpc-protocol.md#work_generate) with the optional `block`. +* In cases where requesting directly from a node is not possible, avoid using the lower threshold for receive blocks until the epoch upgrade is fully complete. + +**Work generation performance** +Testing out work generation capabilities on a machine is recommended. Details for how to accomplish this can be found in the [Benchmark section of the Work Generation guide](../integration-guides/work-generation.md#benchmarks). + +**Other integration considerations** +Although it is already recommended as best practice, any integrations not already calling for the frontier block when constructing a transaction should do so. If hashes are being internally tracked and frontier is not requested, the integration could unintentionally cause a fork on the account with distribution of epoch blocks. + +See [Step 1: Get Account Info](../integration-guides/key-management.md#send-transaction) for the [`account_info`](../commands/rpc-protocol.md#account_info) RPC recommendation when creating transactions. + +??? info "Post-distribution active difficulty changes" + **The following changes will only be valid after the epoch v2 distribution is complete or the accounts you are dealing with have been upgraded.** + + To programatically retrieve the current difficulty for any integrations doing work generation outside the node, the `network_minimum` field in [`active_difficulty`](../commands/rpc-protocol.md#active_difficulty) RPC and [WebSocket topic](../integration-guides/websockets.md#active-difficulty) will see a change from `ffffffc000000000` (pre-epoch v2 difficulty) to `fffffff800000000` (8x higher epoch v2 difficulty), an indication the epoch upgrade has begun. + + Once this occurs, send and change blocks should use this newly returned, higher threshold, and receive blocks can optionally use `fffffe0000000000` as the lower threshold going forward. + +#### Transition Explanation + +When changing the work difficulty requirements it is necessary to mark a point in each account where the difficulty requirements change so bootstrapping and other behaviors can accurately validate historical blocks. For this reason the epoch blocks are being distributed to act as the marker in the ledger. + +Once epoch block distribution is started the ability to validate the new work difficulty levels is required. Since node versions before V21.0 do not have the ability to do this, they will be immediately de-peered from the network and cannot participate with the current network until upgraded. + +To mitigate the impacts of this approach the Nano Foundation will be communicating regularly about progress and monitoring closely the activity on the network. Once acceptable conditions exist to finalize the transition, the distribution will begin. The current plan is to start once over 90% of voting weight has been upgraded, along with all the key services on the network. + +--- + +## Future upgrades + ### New PoW algorithm **Purpose** @@ -50,14 +117,14 @@ The upgrade to [state blocks](/integration-guides/the-basics/#blocks-specificati | 2018-04-11 | Canary block | Parse canary block distributed which enabled parsing of state blocks by nodes so manual generation of that block type would be accepted on the network going forward. This action was performed after a majority of the network upgraded to the required V11.0 to allow confirmations to occur on this new block type. | | 2018-05-20 | Canary block | Generation canary block distributed which forced the generation of state blocks by nodes going forward. At this point both state and legacy type (open, send, receive, change) blocks remain valid on the network. | | 2018-08-20 | Node release | Nano node V15.0 released with support for epoch blocks built-in and away distribution. | -| 2018-10-25 | Epoch blocks start | Distribution of epoch blocks begins. | -| 2019-05-24 | Epoch blocks end | Distribution of epoch blocks is finished. All accounts, opened and unopened, are now capped and can no longer attempt inserting legacy style blocks. | +| 2018-10-25 | Epoch v1 block distribution start | Distribution of epoch v1 blocks begins. | +| 2019-05-24 | Epoch v1 block distribution end | Distribution of epoch v1 blocks is finished. All accounts, opened and unopened, are now capped and can no longer attempt inserting legacy style blocks. | ### Vote-by-Hash **Purpose** -The upgrade to include the [vote-by-hash](/glossary/#active-transaction) feature was based on a hardcoded timestamp in the node. After this time nodes began voting using this new feature. +The upgrade to include the [vote-by-hash](../glossary.md#vote-by-hash) feature was based on a hardcoded timestamp in the node. After this time nodes began voting using this new feature. **Transition Details** @@ -109,4 +176,11 @@ A special block type that can only be generated using a pre-determined private k | Trigger | Uses blocks | Benefits | Drawbacks | |---------|-------------|----------|-----------| -| Node upgrade + distribution of epoch blocks | Yes |
  • Provides clean upgrade markers directly within the ledger on every account-chain
  • Timing flexible
  • Ability to asynchronously upgrade block versions even for inactive/unopened account chains
|
  • Requires manual intervention
  • Introduces ability for non-account owner to write to account chain in a highly restricted way
  • Adds additional code complexity
  • Requires large volume of blocks
| \ No newline at end of file +| Node upgrade + distribution of epoch blocks | Yes |
  • Provides clean upgrade markers directly within the ledger on every account-chain
  • Timing flexible
  • Ability to asynchronously upgrade block versions even for inactive/unopened account chains
|
  • Requires manual intervention
  • Introduces ability for non-account owner to write to account chain in a highly restricted way
  • Adds additional code complexity
  • Requires large volume of blocks
| + +The following are the epoch versions and the related accounts which are used to distribute them to the network. For certain protocol implementations these epoch signers need to be included to efficiently determine whether incoming blocks are epoch blocks. + +| Version | Epoch signer account | Notes | +|---------|----------------------|-------| +| 1 | `xrb_3t6k35gi95xu6tergt6p69ck76ogmitsa8mnijtpxm9fkcm736xtoncuohr3` | Genesis account | +| 2 | `nano_3qb6o6i1tkzr6jwr5s7eehfxwg9x6eemitdinbpi7u8bjjwsgqfj4wzser3x` | Undistributed as of June 2020, see [Increased work difficulty](#increased-work-difficulty) details above | \ No newline at end of file diff --git a/docs/releases/node-releases.md b/docs/releases/node-releases.md index 0226c971e..c155bffc9 100644 --- a/docs/releases/node-releases.md +++ b/docs/releases/node-releases.md @@ -6,18 +6,12 @@ description: Explore details of the current, next and past releases of the Nano Updates to the Nano protocol are done through major node releases, occurring approximately every 1 to 4 months, and necessary patch releases in between. As changes are made to the protocol over time, newer node versions will stop peering with older versions. Details on which versions are actively peering, supported and being developed are included below. ## Current Release -The following release is the latest and only release actively supported by the Nano Foundation. This release and the [Active Releases](#active-releases) below represent the only node versions that will participate on the main network. +The following release is the latest and only release actively supported by the Nano Foundation. This release and the [Active Releases](#active-releases) below represent the only node versions that will participate on the main network. More details can be found on the [Current Release Notes page](/releases/current-release-notes). -| Node Version | Protocol Version | Release Date | Release Notes | GitHub Links | -| | | | | | -| 20.0 | 17 | 2019-11-12 | [V20.0](/releases/node-releases/#v200) | [Release](https://github.com/nanocurrency/nano-node/releases/tag/V20.0) - [Milestone](https://github.com/nanocurrency/nano-node/milestone/10) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V19.0...V20.0) | +--8<-- "release-details-v20-0.md" **Builds and Commands** ---8<-- "known-issue-peers-stake-reporting.md" - ---8<-- "known-issue-macos-too-many-open-files.md" - --8<-- "current-release-build-links.md" --- @@ -25,307 +19,59 @@ The following release is the latest and only release actively supported by the N ## Next Planned Release The following release is currently under development. Details about potential features to be included can be found on the [Upcoming Features page](/releases/upcoming-features). -| Node Version | Protocol Version | Release Date | Release Notes | GitHub Links | -| | | | | | -| 21.0 | TBD | TBD | TBD | Release - [Milestone](https://github.com/nanocurrency/nano-node/milestone/18) - Changelog | - ---- - -## Active Releases -The following releases can still actively participate on the network by peering with other nodes of the same versions. Any nodes running versions earlier than these will no longer peer with the latest and fall out of sync with the network. - -| Node Version | Protocol Version | Release Date | Release Notes | GitHub Links | -| | | | | | -| 20.0 | 17 | 2019-11-12 | [V20.0](/releases/node-releases/#v200) | [Release](https://github.com/nanocurrency/nano-node/releases/tag/V20.0) - [Milestone](https://github.com/nanocurrency/nano-node/milestone/10) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V19.0...V20.0) | -| 19.0 | 17 | 2019-07-11 | [V19.0](/releases/node-releases/#v190) | [Release](https://github.com/nanocurrency/nano-node/releases/tag/V19.0) - [Milestone](https://github.com/nanocurrency/nano-node/milestone/9) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V18.0...V19.0) | -| 18.0 | 16 | 2019-02-21 || [Release](https://github.com/nanocurrency/nano-node/releases/tag/V18.0) - [Milestone](https://github.com/nanocurrency/nano-node/milestone/7) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V17.1...V18.0) | - ---8<-- "known-issue-macos-too-many-open-files.md" - ---- - -## Inactive Releases -The following versions are no longer peered with by nodes running the active versions above and will not work properly communicate if run on the network. The details below are for historical purposes only. - -??? info "Inactive Releases" - - | Node Version | Protocol Version | Release Date | Release Notes | GitHub Links | - | | | | | | - | 17.1 | 15 | 2018-12-21 || [Release](https://github.com/nanocurrency/nano-node/releases/tag/V17.1) - [Milestone](https://github.com/nanocurrency/nano-node/milestone/17) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V17.0...V17.1) | - | 17.0 | 15 | 2018-12-18 || [Release](https://github.com/nanocurrency/nano-node/releases/tag/V17.0) - [Milestone](https://github.com/nanocurrency/nano-node/milestone/6) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V16.3...V17.0) | - | 16.3 | 14 | 2018-11-20 || [Release](https://github.com/nanocurrency/nano-node/releases/tag/V16.3) - [Milestone](https://github.com/nanocurrency/nano-node/milestone/14) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V16.2...V16.3) | - | 16.2 | 14 | 2018-10-11 || [Release](https://github.com/nanocurrency/nano-node/releases/tag/V16.2) - [Milestone](https://github.com/nanocurrency/nano-node/milestone/13) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V16.1...V16.2) | - | 16.1 | 14 | 2018-09-29 || [Release](https://github.com/nanocurrency/nano-node/releases/tag/V16.1) - [Milestone](https://github.com/nanocurrency/nano-node/milestone/11) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V16.0...V16.1) | - | 16.0 | 14 | 2018-09-11 || [Release](https://github.com/nanocurrency/nano-node/releases/tag/V16.0) - [Milestone](https://github.com/nanocurrency/nano-node/milestone/2) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V15.2...V16.0) | - | 15.2 | 13 | 2018-08-22 || [Release](https://github.com/nanocurrency/nano-node/releases/tag/V15.2) - [Milestone](https://github.com/nanocurrency/nano-node/milestone/8) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V15.1...V15.2) | - | 15.1 | 13 | 2018-08-20 || [Release](https://github.com/nanocurrency/nano-node/releases/tag/V15.1) - [Milestone](https://github.com/nanocurrency/nano-node/milestone/5) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V15.0...V15.1) | - | 15.0 | 13 | 2018-08-20 || [Release](https://github.com/nanocurrency/nano-node/releases/tag/V15.0) - [Milestone](https://github.com/nanocurrency/nano-node/milestone/1) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V14.2...V15.0) | - | 14.2 | 11 | 2018-06-21 || [Release](https://github.com/nanocurrency/nano-node/releases/tag/V14.2) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V14.1...V14.2) | - | 14.1 | 10 | 2018-06-11 || [Release](https://github.com/nanocurrency/nano-node/releases/tag/V14.1) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V14.0...V14.1) | - | 14.0 | 10 | 2018-06-11 || [Release](https://github.com/nanocurrency/nano-node/releases/tag/V14.0) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V13.0...V14.0) | - | 13.0 | 9 | 2018-05-10 || [Release](https://github.com/nanocurrency/nano-node/releases/tag/V13.0) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V12.1...V13.0) | - | 12.1 | 8 | 2018-04-21 || [Release](https://github.com/nanocurrency/nano-node/releases/tag/V12.1) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V12.0...V12.1) | - | 12.0 | 8 | 2018-04-18 || [Release](https://github.com/nanocurrency/nano-node/releases/tag/V12.0) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V11.2...V12.0) | - | 11.2 | 7 | 2018-04-04 || [Release](https://github.com/nanocurrency/nano-node/releases/tag/V11.2) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V11.1...V11.2) | - | 11.1 | 7 | 2018-03-29 || [Release](https://github.com/nanocurrency/nano-node/releases/tag/V11.1) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V11.0...V11.1) | - | 11.0 | 7 | 2018-03-23 || [Release](https://github.com/nanocurrency/nano-node/releases/tag/V11.0) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V10.0...V11.0) | - | 10.0 | 6 | 2018-02-15 || [Release](https://github.com/nanocurrency/nano-node/releases/tag/V10.0) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V9.0...V10.0) | - | All Previous | | | | | - -## Release Notes - -### V20.0 - -!!! info "Nano Forum available" - The Nano Forum is available at https://forum.nano.org/ as a resource to ask questions and get support when participating on the network. The [Node and Representative Management category](https://forum.nano.org/c/node-and-rep) is a great place to ask node upgrade related questions. - -#### Upgrade Notices - -!!! warning "Only node V18.0 and higher supported" - With V20.0 only nodes V18.0 and higher will be peered with on the network (see [Active Releases](/releases/node-releases/#active-releases) above). This means any nodes running versions earlier than 18.0 will begin to lose peers and fall out of sync over time once upgrades to V20.0 begin. - - **If you are running a node version earlier than V18.0, please update as soon as possible to avoid disruption.** - -**Database upgrades** - -!!! danger "Upgrade requires downtime, read carefully" - Please review the following details carefully as the automatic database upgrade process will cause downtime for the node. -This version brings some new optimizations to the ledger which require database upgrades to be performed. Due to the nature of upgrades, the following impacts will occur: - -* Upgrade times depend on specs of the node host but are expected to be between 5 and 15 minutes for most cases. -* Upgrade activities are synchronous which means the node will not be participating on the network and RPC requests won’t be available during the upgrade process - **services requiring uptime should plan to swap out their ledger for one upgraded by a separate node or download from a trusted source.** -* Ledger size will grow by up to 50% during this process - **please ensure you have free disk space of 3x the current ledger before starting the upgrade (currently ~16GB on the main network).** -* A database vacuum will be automatically performed after the upgrade to reclaim disk space, which can be verified complete in the logs. -* Doing proper ledger backups is recommended before starting this process. **Ensure you have enough disk space to allow for any ledger backups plus the additional disk space required for the database upgrade mentioned above.** A new config option in V20, `node.backup_before_upgrade`, will allow for automated ledger backups between future versions. - -**New .toml config files** -A new setup in V20.0 uses internal default config values, so config files are only needed for non-default settings. During upgrade new .toml format files will be created for the config.json and rpc_config.json files if they contain non-default values. Before migration `config_backup_toml_migration.json` and `rpc_config_backup_toml_migration.json` files will be created for backup. - -The following commands can be used to generated commented out, complete config files for review: - -!!! warning "Only set non-default values in .toml files" - It is not recommended to uncomment all values in the .toml file output from commands below. Instead, only uncomment or insert non-default values to ensure any default value changes in future release are only overridden when needed. - ---8<-- "toml-config-commands.md" - -More details on the new configuration setup can be found in the node [Configuration documentation](https://docs.nano.org/running-a-node/configuration/). - -**Networking changes** -Improvements to default network setup in this version requires less setup from node operators, specifically around port forwarding. Although new setups will immediately benefit, any existing systems that have already setup port forwarding may be impacted by these changes. For those systems, we recommend validating your network setup allows proper peering with a test V20.0 node prior to upgrading. If you run into issues, review the [Troubleshooting UPnP documentation](/running-a-node/troubleshooting/#troubleshooting-upnp) for assistance. Additional help can be sought in the [Node and Representative Management forum category](https://forum.nano.org/c/node-and-rep). - -**Proof-of-Work management** -A couple changes to PoW management that services should be aware of: - -* With OpenCL enabled, nodes will still use the local CPU for work generation by default. Setting `node.work_threads` to `0` will turn this off if required. -* Regenerating PoW for delayed transactions during high network load will now happen by default through the [process RPC](https://docs.nano.org/commands/rpc-protocol/#process). If you wish to turn this off, setting `watch_work` to `false` is required. - -**Other updates to review** -Improvements to the [External Management](https://docs.nano.org/integration-guides/key-management/#external-management) and [Block Confirmation and Tracking](https://docs.nano.org/integration-guides/block-confirmation-tracking/) documentation should help clarify the recommended approaches to building integrations. - - ---- - -#### Major Updates - -**Migration to .toml config files** -Better legibility, support for comments, and no more having the node write to your config files are some of the benefits of this upgrade. Any non-default values captured in your existing .json files will be migrated and you can export a full list of configuration options for use with simple commands. See additional callouts in [Upgrade Notices](#upgrade-notices) above and in the node [Configuration documentation](https://docs.nano.org/running-a-node/configuration/). - -**Proof-of-Work regeneration outside development wallet** -Any requests to the [process RPC](https://docs.nano.org/commands/rpc-protocol/#process) will have the new `watch_work` option turned on by default, allowing the node to regenerate Proof-of-Work for blocks even if they are outside of the node’s development wallet. This makes Dynamic PoW and prioritization function more consistently across the network. If you have an external integration utilizing this RPC call, you will automatically start taking advantage of rework during confirmation delays on the network. - -**RocksDB experimental support** -With better disk IO usage, RocksDB is being introduced in this version with experimental support. It is not recommended for use in production, but those interested in testing out a more performant database for the ledger should checkout [how to install RocksDB](https://docs.nano.org/running-a-node/rocksdb-ledger-backend/) and try it out on development and test systems. We also have a [related discussion in our forum](https://forum.nano.org/t/rocksdb-ledger-backend-testing/111/4) for those interested. - -**Active elections and other optimizations** -Thanks to our excellent community testers putting effort into collecting and analyzing block, voting and confirmation data from the beta network, we’ve found various optimizations with the active elections process, confirmation request attempts and bootstrapping behaviors. Various changes have been implemented to help reduce resource usage on nodes in various areas and increase the available throughput on the network. This feature also enhances the effectiveness of prioritization and rework of PoW. No action is needed to take advantage of these great updates. - -**Infrastructure for PoW transition** -Back in September we [announced a new PoW algorithm design](https://medium.com/nanocurrency/v20-a-look-at-lydia-62bf6e1b24b) we had been working on which aimed to be memory hard. After open sourcing an implementation of the algorithm, an efficient low-memory solution was found and we subsequently [removed the algorithm implementation from V20](https://medium.com/nanocurrency/nano-pow-v20-update-e2197ff52941). - -As part of the original implementation work we were able to setup infrastructure for moving PoW out of the node process in the future, and also added support for version 2 of epoch blocks, which will allow the [network upgrade](https://docs.nano.org/releases/network-upgrades/) later when a new PoW algorithm is ready. These updates will be included in Lydia but not be utilized until a future version. To follow along with node releases going forward, check out the [Upcoming Features](https://docs.nano.org/releases/upcoming-features/) page. - - ---- - -#### RPC Updates - -* **BEHAVIOR CHANGE** [`process`](/commands/rpc-protocol/#process) now takes an optional flag `watch_work` (default `true`). Unless set to `false`, processed blocks can be subject to PoW rework -* **BEHAVIOR CHANGE** [`bootstrap`](/commands/rpc-protocol/#bootstrap), [`bootstrap_any`](/commands/rpc-protocol/#bootstrap_any) and [`boostrap_lazy`](/commands/rpc-protocol/#bootstrap_lazy) will now throw errors when certain launch flags are used to disabled bootstrap methods - see each RPC page for details -* **BEHAVIOR CHANGE** RPCs requiring work generation will now throw errors when work generation is disabled (no [work peers](/integration-guides/work-generation/#nodework_peers), no [OpenCL](/integration-guides/work-generation/#nodeopenclenable) and no work threads configured) -* [`block_count`](/commands/rpc-protocol/#block_count) no longer requires config option `enable_control` to get the cemented block count -* [`unchecked`](/commands/rpc-protocol/#unchecked) now takes an optional flag `json_block` to return blocks in JSON-format -* [`version`](/commands/rpc-protocol/#version) now includes more fields - network label, identifier (hash of the genesis open block) and build information -* [`peers`](/commands/rpc-protocol/#peers) and [`node_id`](/commands/rpc-protocol/#node_id) now return node IDs with a `node_` prefix -* [work_generate](/commands/rpc-protocol/#work_generate) and [work_validate](/commands/rpc-protocol/#work_validate) can now take a multiplier (against base difficulty) to set a different difficulty threshold - -#### CLI Updates -* **NEW** [`generate_config [node|rpc]`](/commands/command-line-interface/#-generate_config-noderpc) prints sample configuration files to *stdout* - * `use_defaults` additional argument to generate uncommented entries (not recommended) -* **NEW** [`config`](/commands/command-line-interface/#-config-keyvalue) passes configuration arguments, alternative to setting in the config file +!!! tip "V21.0 is in Release Candidate phase" + The Release Candidate build is available for V21.0 and a draft of the Release Notes can be found on the [Current Release Notes page](/releases/current-release-notes). ---- - -#### Node Configuration Updates - -!!! info "Support in Nano Forum" - For node operators looking to upgrade to V20.0 or tune their configurations, the [Node and Representative Management category](https://forum.nano.org/c/node-and-rep) of the forum is a great resource to use. - -!!! tip "Generate .toml config to see options" - As noted in the [Upgrade Notices](#upgrade-notices) above, this version will migrate your existing .json files over to .toml files. Only non-default values for these fields will be added to the new .toml file. If you wish to adjust other options, use the [config generation commands](/running-a-node/configuration/#configuration-file-locations) to see all available options. - -The following options are notable node configuration updates. Additional configuration changes have been included in this release and can be found when generating the config files. - -* `backup_before_upgrade` (default `false`) enables automatic backup of the ledger and wallet databases when updating to a new node version -* `work_watcher_period` (default `5` seconds) controls how frequently the node should check the confirmation status of block in the work watcher, and re-generate higher difficulty work if unconfirmed -* `max_work_generate_multiplier` (default `64.0`) previously `max_work_generate_difficulty`, now a multiplier for easier management, specifies the absolute maximum difficulty multiplier to be used for work generation - ---- - -#### Developer/Debug Options - -* New RPC [`epoch_upgrade`](/commands/rpc-protocol/#epoch_upgrade) allowing easier epoch distribution (**Note** - this epoch requires a special private key to be used, see the [Network Upgrades](/releases/network-upgrades/#epoch-blocks) page for information) -* RPC [`bootstrap`](/commands/rpc-protocol/#bootstrap) has a new optional "bypass_frontier_confirmation" -* RPC [`bootstrap_status`](/commands/rpc-protocol/#bootstrap_status) now displays more data about the current bootstrap attempt -* New CLI [`debug_stacktrace`](/commands/command-line-interface/#-debug_stacktrace) displays an example stacktrace, simulating an unexpected program crash -* New CLI [`debug_account_versions`](/commands/command-line-interface/#-debug_account_versions) displays the total number of accounts separated by version and opened/unopened -* CLI [`debug_validate_blocks`](/commands/command-line-interface/#-debug_validate_blocks) updated to cover more cases -* CLI `debug_profile_verify` renamed to [`debug_profile_validate`](/commands/command-line-interface/#-debug_profile_validate) and now provides simplified work validation profiling -* New CMake build options: - * `NANO_ROCKSDB` enables use of the RocksDB database backend, experimental - * `NANO_WARN_TO_ERR` turns compiler warnings into errors on Linux/Mac - * `NANO_TIMED_LOCKS` provides information on mutexes held for a long time - * `NANO_STACKTRACE_BACKTRACE` uses `libbacktrace` to provide stacktraces - * `CI_BUILD` if set, uses the `TRAVIS_TAG` environment variable to modify the locally reported node version, to help with support tickets - ---- - -#### Deprecations +--8<-- "release-details-v21-0.md" -The following functionality is now deprecated and will be removed in a future release: - -* Addresses containing a dash (ex. `nano-` or `xrb-`) are being deprecated and will not longer be compatible with the node in a future release. Addresses using underscores will only be supported. +--8<-- "setup-beta-testing.md" --- -### V19.0 - -Upgrade Notices - -**Version Limits** -Upgrades from versions V17.1 and to V19 will involve a sequential database upgrade and impact participation of the node on the network. RPC calls will be unavailable for a long period of time amongst other impacts. - -!!! warning "Upgrading from V17.1 and earlier to V19.0 not recommended" - It is highly recommended that nodes are upgraded to V18.0 first or a V18.0 ledger is acquired and used when upgrading to V19.0. - -**Confirmation tracking considerations** -The addition of confirmation height to the database requires the node to validate that blocks are confirmed before the cementing can occur. This process can take up to 24 hours or longer to complete and will cause an increase in some resource usage, particularly CPU and network bandwidth increases, but won’t impact participation on the network. For integrations watching confirmations, the existing [HTTP callback](/integration-guides/advanced/#http-callback), [block_confirm](/commands/rpc-protocol/#block_confirm) RPC and [confirmation_history](/commands/rpc-protocol/#confirmation_history) RPC methods will continue to function as before. - -!!! warning "Tracking confirmed block hashes required" - It is required that tracking of confirmed block hashes outside the node is done to avoid potential duplicate notifications from causing issues. This was a requirement in previous versions and remains the same with V19. - -For those looking to utilize the new WebSocket confirmation subscription or new `confirmed` field in [`block_info`](/commands/rpc-protocol/#block_info) RPC responses, special considerations should be taken if implementing before confirmation height updates are complete: - -* If the [websocket confirmation subscription](/integration-guides/websockets) is hooked up to receive all confirmations (default) then notifications for confirmations will come through during the cementing process on a new or upgrading ledger as the confirmation process will occur (it also fires for dependent confirmations) -* Calls to [`block_info`](/commands/rpc-protocol/#block_info) for blocks in the ledger before the confirmation height upgrade process began may indicate `confirmed` as `false` despite their having been confirmed on the network before. This is expected behavior. -* To validate that confirmation height upgrade is complete, note the `count` value from the [`block_count`](/commands/rpc-protocol/#block_count) RPC when the upgrade is started and once the `cemented` amount returned by this call (include the `include_cemented` option) is higher than that previous count, cementing is in sync. - -**Emitting nano_ prefixed addresses** -In this and future versions, all addresses emitted from the node will use the `nano_` prefix. It will continue to support input for `xrb_` prefixed addresses, but all services must verify they are properly set up to handle the node outputting `nano_` prefixed addresses. - -**Live network over TCP** -Live network traffic over TCP is now available and operates on the same port (7075 for main network, 54000 for beta network) as the bootstrapping network that was already available over TCP. Because of this, existing network setups that are open inbound and outbound on port 7075 for TCP should function as expected with V19.0. For those running production services, it is still recommended to verify [network ports setup](/running-a-node/node-setup/#network-ports) and consider setting up a new node on internal networks to ensure it can connect and participate on the main network before production nodes are upgraded. - -* To check for proper connection via TCP, call the [`peers`](/commands/rpc-protocol/#peers) RPC with `peer_details` option and look for peers with `type` = `tcp`. This command can be used to search for these instances: - -``` -curl -sd '{"action": "peers", "peer_details":"true"}' [::1]:7076 | grep "\"type\": \"tcp\"" | wc -l -``` - ---- - -Major Updates - -**Confirmation Height** -This provides cementing of blocks by marking on an account the highest block height that has been confirmed for the account. A more detailed look at this feature can be found in the relatd Medium article: https://medium.com/nanocurrency/looking-up-to-confirmation-height-69f0cd2a85bc - -**TCP Network** -Blocks being published and voted on live are now supported via TCP, with UDP remaining as a fallback. See the TCP callouts in [Upgrade Notices](#upgrade-notices) above for information about verifying your network setup is ready for the upgrade. - -**Dynamic Proof-of-Work and Prioritization** -With the ability to track work difficulty seen on the network and have the node wallet produce more difficult work for local blocks, this feature allows users to get their transactions prioritized for processing. More details about this feature can be found in the Medium article: https://medium.com/nanocurrency/dynamic-proof-of-work-prioritization-4618b78c5be9 +## Active Releases +The following releases can still actively participate on the network by peering with other nodes of the same versions. Any nodes running versions earlier than these will no longer peer with the latest and fall out of sync with the network. -**RPC Process Options** -By default the RPC server will run in the node process, but can be configured to run as a child process or completely out of process (currently limited to running on the same computer), depending on your needs. See [Running Nano as a service](/integration-guides/advanced/#running-nano-as-a-service) for more details. +--8<-- "release-details-v20-0.md" --- -RPC/CLI Updates - -!!! success "No Breaking Changes" - There were no breaking changes made in V19 for any RPC or CLI commands. It is recommended any integrations run tests against V19 before upgrading production nodes, and also explore the various changes below to improve their setups. - -* **NEW** [`unopened`](/commands/rpc-protocol/#unopened) RPC provides the total pending balance for unopened accounts -* **NEW** [`active_difficulty`](/commands/rpc-protocol/#active_difficulty) RPC allows tracking of the difficulty levels seen on the network which can be used to target higher levels of PoW to prioritize transactions -* Using [`--diagnostics`](/commands/command-line-interface/#-diagnostics) CLI option now validates config and generates default one if it doesn’t exist -* [`wallet_create`](/commands/rpc-protocol/#wallet_create) and [`wallet_change_seed`](/commands/rpc-protocol/#wallet_change_seed) RPCs accept seed and return restored accounts for easier seed management -* The [`pending`](/commands/rpc-protocol/#pending) RPC can now optionally be using `sorting` by amount -* Difficulty and multiplier options available in [`work_generate`](/commands/rpc-protocol/#work_generate) and [`work_validate`](/commands/rpc-protocol/#work_validate) RPCs for easier management of dynamic work levels on blocks -* State blocks returned by [`block_info`](/commands/rpc-protocol/#block_info)/[`blocks_info`](/commands/rpc-protocol/#blocks_info) contain `subtype` for easier identification of block types -* Json literals supported for block input ([`process`](/commands/rpc-protocol/#process), [`sign`](/commands/rpc-protocol/#sign), and [`block_hash`](/commands/rpc-protocol/#block_hash)) and output ([`block_create`](/commands/rpc-protocol/#block_create), [`block_info`](/commands/rpc-protocol/#block_info), [`blocks_info`](/commands/rpc-protocol/#blocks_info), [`confirmation_info`](/commands/rpc-protocol/#confirmation_info), [`unchecked_get`](/commands/rpc-protocol/#unchecked_get) and [`unchecked_keys`](/commands/rpc-protocol/#unchecked_keys)) on RPC calls -* A new optional argument `include_not_found` in [`blocks_info`](/commands/rpc-protocol/#blocks_info) allows requests which contain invalid block hashes to get results that include an array of `blocks_not_found` instead of just an error -* The [`account_history`](/commands/rpc-protocol/#account_history) RPC now: - * Accepts `account_filter` to allow filtering of results to a specific account or set of accounts - * Allows `reverse` option to return details starting from the head block on the account - * Block `height` on account chain now included in response -* The [`accounts_pending`](/commands/rpc-protocol/#accounts_pending) RPC allows for sorting by amounts -* For [`ledger`](/commands/rpc-protocol/#ledger) and [`unopened`](/commands/rpc-protocol/#unopened) RPCs a new optional threshold value can be used to limit results by balance -* A new `include_cemented` option in [`block_count`](/commands/rpc-protocol/#block_count) RPC adds return of the cemented blocks in the ledger - cemented blocks are ones that have been confirmed and are at or below the confirmation height set on the account +--8<-- "release-details-v19-0.md" --- -Node Configuration Updates - -**[Config.json](/running-a-node/configuration/#configjson)** - -* New `active_elections_size` will limit the number of active elections allowed before dropping occurs. Default is 50,000 but higher settings are recommended for nodes provisioned with 8GB RAM or more -* New `bandwidth_limit` will limit the outbound voting traffic to 5MB/s by default -* New `confirmation_history_size` provides an adjustable limit on the batching of confirmations return in the [confirmation_history](/commands/rpc-protocol/#confirmation_history) RPC. Default 2048 which will support up to \~56 confirmations/sec before confirmations may be missed. **The new [websocket setup](/integration-guides/websockets) with confirmation subscription is recommended over use of the [confirmation_history](/commands/rpc-protocol/#confirmation_history) RPC.** - -!!! tip "Advanced Configuration" - New `vote_generator_delay` allows for tuning performance of bundling votes by hash before sending. - -**[Rpc_config.json](/running-a-node/configuration/#rpc_configjson)** -This new file was split out from the [config.json](/running-a-node/configuration/#configjson) file as the RPC server can now be run in its own process. Entries previously existing in [config.json](/running-a-node/configuration/#configjson) were migrated over and new values added. One setting to note: the `max_request_size` parameter is defaulted to 32MB - if your service is submitting data amounts larger than this you will need to adjust accordingly. - -**Automated config backups** -Backups of config files will be made prior to upgrades. During upgrades from V18 to V19 you will see a backup created even for the new [rpc_config.json](/running-a-node/configuration/#rpc_configjson) - this is expected behavior given the upgrade process. - ---- - -Developer/Debug Options - -* New launch flag for tuning block processor: [`--block_processor_batch_size`](/commands/command-line-interface/#-block_processor_batch_size), [`--block_processor_full_size`](/commands/command-line-interface/#-block_processor_full_size) and [`--block_processor_verification_size`](/commands/command-line-interface/#-block_processor_verification_size) -* New [launch flags](/commands/command-line-interface/#launch-options) for disabling TCP real-time network and UDP for debugging connectivity -* Expanded [`stats`](/commands/rpc-protocol/#stats) RPC contains additional values related to confirmation height +--8<-- "release-details-v18-0.md" --- -Deprecations - -The following RPC calls are being deprecated and will be removed in a future release: - -* [history](/commands/rpc-protocol/#history) -* [payment_begin](/commands/rpc-protocol/#payment_begin) -* [payment_end](/commands/rpc-protocol/#payment_end) -* [payment_init](/commands/rpc-protocol/#payment_init) -* [payment_wait](/commands/rpc-protocol/#payment_wait) +## Inactive Releases +The following versions are no longer peered with by nodes running the active versions above and will not work properly communicate if run on the network. The details below are for historical purposes only. ---- +??? info "Inactive Releases" -Other Notices + | Node | Protocol | Database | Release Date | Release Notes | GitHub Links | + | | | | | | | + | 17.1 | 15 | | 2018-12-21 || [Release](https://github.com/nanocurrency/nano-node/releases/tag/V17.1) - [Milestone](https://github.com/nanocurrency/nano-node/milestone/17) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V17.0...V17.1) | + | 17.0 | 15 | | 2018-12-18 || [Release](https://github.com/nanocurrency/nano-node/releases/tag/V17.0) - [Milestone](https://github.com/nanocurrency/nano-node/milestone/6) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V16.3...V17.0) | + | 16.3 | 14 | | 2018-11-20 || [Release](https://github.com/nanocurrency/nano-node/releases/tag/V16.3) - [Milestone](https://github.com/nanocurrency/nano-node/milestone/14) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V16.2...V16.3) | + | 16.2 | 14 | | 2018-10-11 || [Release](https://github.com/nanocurrency/nano-node/releases/tag/V16.2) - [Milestone](https://github.com/nanocurrency/nano-node/milestone/13) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V16.1...V16.2) | + | 16.1 | 14 | | 2018-09-29 || [Release](https://github.com/nanocurrency/nano-node/releases/tag/V16.1) - [Milestone](https://github.com/nanocurrency/nano-node/milestone/11) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V16.0...V16.1) | + | 16.0 | 14 | | 2018-09-11 || [Release](https://github.com/nanocurrency/nano-node/releases/tag/V16.0) - [Milestone](https://github.com/nanocurrency/nano-node/milestone/2) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V15.2...V16.0) | + | 15.2 | 13 | | 2018-08-22 || [Release](https://github.com/nanocurrency/nano-node/releases/tag/V15.2) - [Milestone](https://github.com/nanocurrency/nano-node/milestone/8) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V15.1...V15.2) | + | 15.1 | 13 | | 2018-08-20 || [Release](https://github.com/nanocurrency/nano-node/releases/tag/V15.1) - [Milestone](https://github.com/nanocurrency/nano-node/milestone/5) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V15.0...V15.1) | + | 15.0 | 13 | | 2018-08-20 || [Release](https://github.com/nanocurrency/nano-node/releases/tag/V15.0) - [Milestone](https://github.com/nanocurrency/nano-node/milestone/1) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V14.2...V15.0) | + | 14.2 | 11 | | 2018-06-21 || [Release](https://github.com/nanocurrency/nano-node/releases/tag/V14.2) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V14.1...V14.2) | + | 14.1 | 10 | | 2018-06-11 || [Release](https://github.com/nanocurrency/nano-node/releases/tag/V14.1) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V14.0...V14.1) | + | 14.0 | 10 | | 2018-06-11 || [Release](https://github.com/nanocurrency/nano-node/releases/tag/V14.0) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V13.0...V14.0) | + | 13.0 | 9 | | 2018-05-10 || [Release](https://github.com/nanocurrency/nano-node/releases/tag/V13.0) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V12.1...V13.0) | + | 12.1 | 8 | | 2018-04-21 || [Release](https://github.com/nanocurrency/nano-node/releases/tag/V12.1) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V12.0...V12.1) | + | 12.0 | 8 | | 2018-04-18 || [Release](https://github.com/nanocurrency/nano-node/releases/tag/V12.0) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V11.2...V12.0) | + | 11.2 | 7 | | 2018-04-04 || [Release](https://github.com/nanocurrency/nano-node/releases/tag/V11.2) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V11.1...V11.2) | + | 11.1 | 7 | | 2018-03-29 || [Release](https://github.com/nanocurrency/nano-node/releases/tag/V11.1) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V11.0...V11.1) | + | 11.0 | 7 | | 2018-03-23 || [Release](https://github.com/nanocurrency/nano-node/releases/tag/V11.0) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V10.0...V11.0) | + | 10.0 | 6 | | 2018-02-15 || [Release](https://github.com/nanocurrency/nano-node/releases/tag/V10.0) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V9.0...V10.0) | + + Details for versions older than 10.0 can be found in [tagged releases in Github](https://github.com/nanocurrency/nano-node/releases?after=V10.0). -**New nanorep QR code standard** -A new nanorep [QR code standard](/integration-guides/the-basics/#uri-and-qr-code-standards) for easier management of representative changes was added for wallets and other services to consider supporting. +## Release Notes -**New recommended block explorer** -The Nano Foundation supports a new recommended block explorer - [NanoCrawler](https://nanocrawler.cc). We encourage services and exchanges linking out to block explorers to consider using NanoCrawler going forward as it provides solid design and performance for referencing blocks, accounts and more. +For the latest release notes, see the [Current Release Notes page](/releases/current-release-notes). To reference release notes for older versions ([V19.0](/releases/previous-release-notes#v190), [V20.0](/releases/previous-release-notes#v200)), see the [Previous Release Notes page](/releases/previous-release-notes). diff --git a/docs/releases/previous-release-notes.md b/docs/releases/previous-release-notes.md new file mode 100644 index 000000000..ebe0f408e --- /dev/null +++ b/docs/releases/previous-release-notes.md @@ -0,0 +1,262 @@ +title: Previous Release Notes | Nano Documentation +description: A collection of release notes for older Nano node releases including upgrade notices, major features, API changes and more + +## V20.0 + +--8<-- "release-details-v20-0.md" + +### Upgrade Notices + +!!! warning "Only node V18.0 and higher supported" + With V20.0 only nodes V18.0 and higher will be peered with on the network (see [Active Releases](/releases/node-releases/#active-releases) above). This means any nodes running versions earlier than 18.0 will begin to lose peers and fall out of sync over time once upgrades to V20.0 begin. + + **If you are running a node version earlier than V18.0, please update as soon as possible to avoid disruption.** + +**Database upgrades** + +!!! danger "Upgrade requires downtime, read carefully" + Please review the following details carefully as the automatic database upgrade process will cause downtime for the node. +This version brings some new optimizations to the ledger which require database upgrades to be performed. Due to the nature of upgrades, the following impacts will occur: + +* Upgrade times depend on specs of the node host but are expected to be between 5 and 15 minutes for most cases. +* Upgrade activities are synchronous which means the node will not be participating on the network and RPC requests won’t be available during the upgrade process - **services requiring uptime should plan to swap out their ledger for one upgraded by a separate node or download from a trusted source.** +* Ledger size will grow by up to 50% during this process - **please ensure you have free disk space of 3x the current ledger before starting the upgrade (currently ~16GB on the main network).** +* A database vacuum will be automatically performed after the upgrade to reclaim disk space, which can be verified complete in the logs. +* Doing proper ledger backups is recommended before starting this process. **Ensure you have enough disk space to allow for any ledger backups plus the additional disk space required for the database upgrade mentioned above.** A new config option in V20, `node.backup_before_upgrade`, will allow for automated ledger backups between future versions. + +**New .toml config files** +A new setup in V20.0 uses internal default config values, so config files are only needed for non-default settings. During upgrade new .toml format files will be created for the config.json and rpc_config.json files if they contain non-default values. Before migration `config_backup_toml_migration.json` and `rpc_config_backup_toml_migration.json` files will be created for backup. + +The following commands can be used to generated commented out, complete config files for review: + +!!! warning "Only set non-default values in .toml files" + It is not recommended to uncomment all values in the .toml file output from commands below. Instead, only uncomment or insert non-default values to ensure any default value changes in future release are only overridden when needed. + +--8<-- "toml-config-commands.md" + +More details on the new configuration setup can be found in the node [Configuration documentation](https://docs.nano.org/running-a-node/configuration/). + +**Networking changes** +Improvements to default network setup in this version requires less setup from node operators, specifically around port forwarding. Although new setups will immediately benefit, any existing systems that have already setup port forwarding may be impacted by these changes. For those systems, we recommend validating your network setup allows proper peering with a test V20.0 node prior to upgrading. If you run into issues, review the [Troubleshooting UPnP documentation](/running-a-node/troubleshooting/#troubleshooting-upnp) for assistance. Additional help can be sought in the [Node and Representative Management forum category](https://forum.nano.org/c/node-and-rep). + +**Proof-of-Work management** +A couple changes to PoW management that services should be aware of: + +* With OpenCL enabled, nodes will still use the local CPU for work generation by default. Setting `node.work_threads` to `0` will turn this off if required. +* Regenerating PoW for delayed transactions during high network load will now happen by default through the [process RPC](https://docs.nano.org/commands/rpc-protocol/#process). If you wish to turn this off, setting `watch_work` to `false` is required. + +**Other updates to review** +Improvements to the [External Management](https://docs.nano.org/integration-guides/key-management/#external-management) and [Block Confirmation and Tracking](https://docs.nano.org/integration-guides/block-confirmation-tracking/) documentation should help clarify the recommended approaches to building integrations. + + +--- + +### Major Updates + +**Migration to .toml config files** +Better legibility, support for comments, and no more having the node write to your config files are some of the benefits of this upgrade. Any non-default values captured in your existing .json files will be migrated and you can export a full list of configuration options for use with simple commands. See additional callouts in [Upgrade Notices](#upgrade-notices) above and in the node [Configuration documentation](https://docs.nano.org/running-a-node/configuration/). + +**Proof-of-Work regeneration outside development wallet** +Any requests to the [process RPC](https://docs.nano.org/commands/rpc-protocol/#process) will have the new `watch_work` option turned on by default, allowing the node to regenerate Proof-of-Work for blocks even if they are outside of the node’s development wallet. This makes Dynamic PoW and prioritization function more consistently across the network. If you have an external integration utilizing this RPC call, you will automatically start taking advantage of rework during confirmation delays on the network. + +**RocksDB experimental support** +With better disk IO usage, RocksDB is being introduced in this version with experimental support. It is not recommended for use in production, but those interested in testing out a more performant database for the ledger should checkout [how to install RocksDB](https://docs.nano.org/running-a-node/rocksdb-ledger-backend/) and try it out on development and test systems. We also have a [related discussion in our forum](https://forum.nano.org/t/rocksdb-ledger-backend-testing/111/4) for those interested. + +**Active elections and other optimizations** +Thanks to our excellent community testers putting effort into collecting and analyzing block, voting and confirmation data from the beta network, we’ve found various optimizations with the active elections process, confirmation request attempts and bootstrapping behaviors. Various changes have been implemented to help reduce resource usage on nodes in various areas and increase the available throughput on the network. This feature also enhances the effectiveness of prioritization and rework of PoW. No action is needed to take advantage of these great updates. + +**Infrastructure for PoW transition** +Back in September we [announced a new PoW algorithm design](https://medium.com/nanocurrency/v20-a-look-at-lydia-62bf6e1b24b) we had been working on which aimed to be memory hard. After open sourcing an implementation of the algorithm, an efficient low-memory solution was found and we subsequently [removed the algorithm implementation from V20](https://medium.com/nanocurrency/nano-pow-v20-update-e2197ff52941). + +As part of the original implementation work we were able to setup infrastructure for moving PoW out of the node process in the future, and also added support for version 2 of epoch blocks, which will allow the [network upgrade](https://docs.nano.org/releases/network-upgrades/) later when a new PoW algorithm is ready. These updates will be included in Lydia but not be utilized until a future version. To follow along with node releases going forward, check out the [Upcoming Features](https://docs.nano.org/releases/upcoming-features/) page. + + +--- + +### RPC Updates + +* **BEHAVIOR CHANGE** [`process`](/commands/rpc-protocol/#process) now takes an optional flag `watch_work` (default `true`). Unless set to `false`, processed blocks can be subject to PoW rework +* **BEHAVIOR CHANGE** [`bootstrap`](/commands/rpc-protocol/#bootstrap), [`bootstrap_any`](/commands/rpc-protocol/#bootstrap_any) and [`boostrap_lazy`](/commands/rpc-protocol/#bootstrap_lazy) will now throw errors when certain launch flags are used to disabled bootstrap methods - see each RPC page for details +* **BEHAVIOR CHANGE** RPCs requiring work generation will now throw errors when work generation is disabled (no [work peers](/integration-guides/work-generation/#nodework_peers), no [OpenCL](/integration-guides/work-generation/#nodeopenclenable) and no work threads configured) +* [`block_count`](/commands/rpc-protocol/#block_count) no longer requires config option `enable_control` to get the cemented block count +* [`unchecked`](/commands/rpc-protocol/#unchecked) now takes an optional flag `json_block` to return blocks in JSON-format +* [`version`](/commands/rpc-protocol/#version) now includes more fields - network label, identifier (hash of the genesis open block) and build information +* [`peers`](/commands/rpc-protocol/#peers) and [`node_id`](/commands/rpc-protocol/#node_id) now return node IDs with a `node_` prefix +* [work_generate](/commands/rpc-protocol/#work_generate) and [work_validate](/commands/rpc-protocol/#work_validate) can now take a multiplier (against base difficulty) to set a different difficulty threshold + +--- + +### CLI Updates + +* **NEW** [`generate_config [node|rpc]`](/commands/command-line-interface/#-generate_config-noderpc) prints sample configuration files to _stdout_ + * `use_defaults` additional argument to generate uncommented entries (not recommended) +* **NEW** [`config`](/commands/command-line-interface/#-config-keyvalue) passes configuration arguments, alternative to setting in the config file + +--- + +### Node Configuration Updates + +!!! info "Support in Nano Forum" + For node operators looking to upgrade to V20.0 or tune their configurations, the [Node and Representative Management category](https://forum.nano.org/c/node-and-rep) of the forum is a great resource to use. + +!!! tip "Generate .toml config to see options" + As noted in the [Upgrade Notices](#upgrade-notices) above, this version will migrate your existing .json files over to .toml files. Only non-default values for these fields will be added to the new .toml file. If you wish to adjust other options, use the [config generation commands](/running-a-node/configuration/#configuration-file-locations) to see all available options. + +The following options are notable node configuration updates. Additional configuration changes have been included in this release and can be found when generating the config files. + +* `backup_before_upgrade` (default `false`) enables automatic backup of the ledger and wallet databases when updating to a new node version +* `work_watcher_period` (default `5` seconds) controls how frequently the node should check the confirmation status of block in the work watcher, and re-generate higher difficulty work if unconfirmed +* `max_work_generate_multiplier` (default `64.0`) previously `max_work_generate_difficulty`, now a multiplier for easier management, specifies the absolute maximum difficulty multiplier to be used for work generation + +--- + +### Developer/Debug Options + +* New RPC [`epoch_upgrade`](/commands/rpc-protocol/#epoch_upgrade) allowing easier epoch distribution (**Note** - this epoch requires a special private key to be used, see the [Network Upgrades](/releases/network-upgrades/#epoch-blocks) page for information) +* RPC [`bootstrap`](/commands/rpc-protocol/#bootstrap) has a new optional "bypass_frontier_confirmation" +* RPC [`bootstrap_status`](/commands/rpc-protocol/#bootstrap_status) now displays more data about the current bootstrap attempt +* New CLI [`debug_stacktrace`](/commands/command-line-interface/#-debug_stacktrace) displays an example stacktrace, simulating an unexpected program crash +* New CLI [`debug_account_versions`](/commands/command-line-interface/#-debug_account_versions) displays the total number of accounts separated by version and opened/unopened +* CLI [`debug_validate_blocks`](/commands/command-line-interface/#-debug_validate_blocks) updated to cover more cases +* CLI `debug_profile_verify` renamed to [`debug_profile_validate`](/commands/command-line-interface/#-debug_profile_validate) and now provides simplified work validation profiling +* New CMake build options: + * `NANO_ROCKSDB` enables use of the RocksDB database backend, experimental + * `NANO_WARN_TO_ERR` turns compiler warnings into errors on Linux/Mac + * `NANO_TIMED_LOCKS` provides information on mutexes held for a long time + * `NANO_STACKTRACE_BACKTRACE` uses `libbacktrace` to provide stacktraces + * `CI_BUILD` if set, uses the `TRAVIS_TAG` environment variable to modify the locally reported node version, to help with support tickets + +--- + +### Deprecations + +The following functionality is now deprecated and will be removed in a future release: + +* Addresses containing a dash (ex. `nano-` or `xrb-`) are being deprecated and will not longer be compatible with the node in a future release. Addresses using underscores will only be supported. + +--- + +## V19.0 + +--8<-- "release-details-v19-0.md" + +### Upgrade Notices + +**Version Limits** +Upgrades from versions V17.1 and to V19 will involve a sequential database upgrade and impact participation of the node on the network. RPC calls will be unavailable for a long period of time amongst other impacts. + +!!! warning "Upgrading from V17.1 and earlier to V19.0 not recommended" + It is highly recommended that nodes are upgraded to V18.0 first or a V18.0 ledger is acquired and used when upgrading to V19.0. + +**Confirmation tracking considerations** +The addition of confirmation height to the database requires the node to validate that blocks are confirmed before the cementing can occur. This process can take up to 24 hours or longer to complete and will cause an increase in some resource usage, particularly CPU and network bandwidth increases, but won’t impact participation on the network. For integrations watching confirmations, the existing [HTTP callback](/integration-guides/advanced/#http-callback), [block_confirm](/commands/rpc-protocol/#block_confirm) RPC and [confirmation_history](/commands/rpc-protocol/#confirmation_history) RPC methods will continue to function as before. + +!!! warning "Tracking confirmed block hashes required" + It is required that tracking of confirmed block hashes outside the node is done to avoid potential duplicate notifications from causing issues. This was a requirement in previous versions and remains the same with V19. + +For those looking to utilize the new WebSocket confirmation subscription or new `confirmed` field in [`block_info`](/commands/rpc-protocol/#block_info) RPC responses, special considerations should be taken if implementing before confirmation height updates are complete: + +* If the [websocket confirmation subscription](/integration-guides/websockets) is hooked up to receive all confirmations (default) then notifications for confirmations will come through during the cementing process on a new or upgrading ledger as the confirmation process will occur (it also fires for dependent confirmations) +* Calls to [`block_info`](/commands/rpc-protocol/#block_info) for blocks in the ledger before the confirmation height upgrade process began may indicate `confirmed` as `false` despite their having been confirmed on the network before. This is expected behavior. +* To validate that confirmation height upgrade is complete, note the `count` value from the [`block_count`](/commands/rpc-protocol/#block_count) RPC when the upgrade is started and once the `cemented` amount returned by this call (include the `include_cemented` option) is higher than that previous count, cementing is in sync. + +**Emitting nano_ prefixed addresses** +In this and future versions, all addresses emitted from the node will use the `nano_` prefix. It will continue to support input for `xrb_` prefixed addresses, but all services must verify they are properly set up to handle the node outputting `nano_` prefixed addresses. + +**Live network over TCP** +Live network traffic over TCP is now available and operates on the same port (7075 for main network, 54000 for beta network) as the bootstrapping network that was already available over TCP. Because of this, existing network setups that are open inbound and outbound on port 7075 for TCP should function as expected with V19.0. For those running production services, it is still recommended to verify [network ports setup](/running-a-node/node-setup/#network-ports) and consider setting up a new node on internal networks to ensure it can connect and participate on the main network before production nodes are upgraded. + +* To check for proper connection via TCP, call the [`peers`](/commands/rpc-protocol/#peers) RPC with `peer_details` option and look for peers with `type` = `tcp`. This command can be used to search for these instances: + +``` +curl -sd '{"action": "peers", "peer_details":"true"}' [::1]:7076 | grep "\"type\": \"tcp\"" | wc -l +``` + +--- + +### Major Updates + +**Confirmation Height** +This provides cementing of blocks by marking on an account the highest block height that has been confirmed for the account. A more detailed look at this feature can be found in the relatd Medium article: https://medium.com/nanocurrency/looking-up-to-confirmation-height-69f0cd2a85bc + +**TCP Network** +Blocks being published and voted on live are now supported via TCP, with UDP remaining as a fallback. See the TCP callouts in [Upgrade Notices](#upgrade-notices) above for information about verifying your network setup is ready for the upgrade. + +**Dynamic Proof-of-Work and Prioritization** +With the ability to track work difficulty seen on the network and have the node wallet produce more difficult work for local blocks, this feature allows users to get their transactions prioritized for processing. More details about this feature can be found in the Medium article: https://medium.com/nanocurrency/dynamic-proof-of-work-prioritization-4618b78c5be9 + +**RPC Process Options** +By default the RPC server will run in the node process, but can be configured to run as a child process or completely out of process (currently limited to running on the same computer), depending on your needs. See [Running Nano as a service](/integration-guides/advanced/#running-nano-as-a-service) for more details. + +--- + +### RPC/CLI Updates + +!!! success "No Breaking Changes" + There were no breaking changes made in V19 for any RPC or CLI commands. It is recommended any integrations run tests against V19 before upgrading production nodes, and also explore the various changes below to improve their setups. + +* **NEW** [`unopened`](/commands/rpc-protocol/#unopened) RPC provides the total pending balance for unopened accounts +* **NEW** [`active_difficulty`](/commands/rpc-protocol/#active_difficulty) RPC allows tracking of the difficulty levels seen on the network which can be used to target higher levels of PoW to prioritize transactions +* Using [`--diagnostics`](/commands/command-line-interface/#-diagnostics) CLI option now validates config and generates default one if it doesn’t exist +* [`wallet_create`](/commands/rpc-protocol/#wallet_create) and [`wallet_change_seed`](/commands/rpc-protocol/#wallet_change_seed) RPCs accept seed and return restored accounts for easier seed management +* The [`pending`](/commands/rpc-protocol/#pending) RPC can now optionally be using `sorting` by amount +* Difficulty and multiplier options available in [`work_generate`](/commands/rpc-protocol/#work_generate) and [`work_validate`](/commands/rpc-protocol/#work_validate) RPCs for easier management of dynamic work levels on blocks +* State blocks returned by [`block_info`](/commands/rpc-protocol/#block_info)/[`blocks_info`](/commands/rpc-protocol/#blocks_info) contain `subtype` for easier identification of block types +* Json literals supported for block input ([`process`](/commands/rpc-protocol/#process), [`sign`](/commands/rpc-protocol/#sign), and [`block_hash`](/commands/rpc-protocol/#block_hash)) and output ([`block_create`](/commands/rpc-protocol/#block_create), [`block_info`](/commands/rpc-protocol/#block_info), [`blocks_info`](/commands/rpc-protocol/#blocks_info), [`confirmation_info`](/commands/rpc-protocol/#confirmation_info), [`unchecked_get`](/commands/rpc-protocol/#unchecked_get) and [`unchecked_keys`](/commands/rpc-protocol/#unchecked_keys)) on RPC calls +* A new optional argument `include_not_found` in [`blocks_info`](/commands/rpc-protocol/#blocks_info) allows requests which contain invalid block hashes to get results that include an array of `blocks_not_found` instead of just an error +* The [`account_history`](/commands/rpc-protocol/#account_history) RPC now: + * Accepts `account_filter` to allow filtering of results to a specific account or set of accounts + * Allows `reverse` option to return details starting from the head block on the account + * Block `height` on account chain now included in response +* The [`accounts_pending`](/commands/rpc-protocol/#accounts_pending) RPC allows for sorting by amounts +* For [`ledger`](/commands/rpc-protocol/#ledger) and [`unopened`](/commands/rpc-protocol/#unopened) RPCs a new optional threshold value can be used to limit results by balance +* A new `include_cemented` option in [`block_count`](/commands/rpc-protocol/#block_count) RPC adds return of the cemented blocks in the ledger - cemented blocks are ones that have been confirmed and are at or below the confirmation height set on the account + +--- + +### Node Configuration Updates + +**[Config.json](/running-a-node/configuration/#configjson)** + +* New `active_elections_size` will limit the number of active elections allowed before dropping occurs. Default is 50,000 but higher settings are recommended for nodes provisioned with 8GB RAM or more +* New `bandwidth_limit` will limit the outbound voting traffic to 5MB/s by default +* New `confirmation_history_size` provides an adjustable limit on the batching of confirmations return in the [confirmation_history](/commands/rpc-protocol/#confirmation_history) RPC. Default 2048 which will support up to \~56 confirmations/sec before confirmations may be missed. **The new [websocket setup](/integration-guides/websockets) with confirmation subscription is recommended over use of the [confirmation_history](/commands/rpc-protocol/#confirmation_history) RPC.** + +!!! tip "Advanced Configuration" + New `vote_generator_delay` allows for tuning performance of bundling votes by hash before sending. + +**[Rpc_config.json](/running-a-node/configuration/#rpc_configjson)** +This new file was split out from the [config.json](/running-a-node/configuration/#configjson) file as the RPC server can now be run in its own process. Entries previously existing in [config.json](/running-a-node/configuration/#configjson) were migrated over and new values added. One setting to note: the `max_request_size` parameter is defaulted to 32MB - if your service is submitting data amounts larger than this you will need to adjust accordingly. + +**Automated config backups** +Backups of config files will be made prior to upgrades. During upgrades from V18 to V19 you will see a backup created even for the new [rpc_config.json](/running-a-node/configuration/#rpc_configjson) - this is expected behavior given the upgrade process. + +--- + +### Developer/Debug Options + +* New launch flag for tuning block processor: [`--block_processor_batch_size`](/commands/command-line-interface/#-block_processor_batch_size), [`--block_processor_full_size`](/commands/command-line-interface/#-block_processor_full_size) and [`--block_processor_verification_size`](/commands/command-line-interface/#-block_processor_verification_size) +* New [launch flags](/commands/command-line-interface/#launch-options) for disabling TCP real-time network and UDP for debugging connectivity +* Expanded [`stats`](/commands/rpc-protocol/#stats) RPC contains additional values related to confirmation height + +--- + +### Deprecations + +The following RPC calls are being deprecated and will be removed in a future release: + +* [history](/commands/rpc-protocol/#history) +* [payment_begin](/commands/rpc-protocol/#payment_begin) +* [payment_end](/commands/rpc-protocol/#payment_end) +* [payment_init](/commands/rpc-protocol/#payment_init) +* [payment_wait](/commands/rpc-protocol/#payment_wait) + +--- + +### Other Notices + +**New nanorep QR code standard** +A new nanorep [QR code standard](/integration-guides/the-basics/#uri-and-qr-code-standards) for easier management of representative changes was added for wallets and other services to consider supporting. + +**New recommended block explorer** +The Nano Foundation supports a new recommended block explorer - [NanoCrawler](https://nanocrawler.cc). We encourage services and exchanges linking out to block explorers to consider using NanoCrawler going forward as it provides solid design and performance for referencing blocks, accounts and more. \ No newline at end of file diff --git a/docs/running-a-node/beta-network.md b/docs/running-a-node/beta-network.md index 448825b21..999bf7f90 100644 --- a/docs/running-a-node/beta-network.md +++ b/docs/running-a-node/beta-network.md @@ -12,15 +12,9 @@ A few common reasons for joining the beta network include: [Running a beta node](#running-a-beta-node) is a great way to join in and help the network grow stronger. -## Differences from the main network - -| Parameter | Main Network | Beta Network | Comment | -|-----------|--------------|--------------|---------| -| [Proof of Work](/integration-guides/the-basics/#proof-of-work) Difficulty Threshold | `0xffffffc000000000` | `0xfffff00000000000` | 64 times lower on the beta network | - ## Node release testing -The beta network is also used to coordinate the testing of Nano node releases. The Nano Foundation maintains a few beta nodes on the network and various community members also setup nodes to help provide an environment more similar to the main network. Ahead of each release builds are published as Release Candidates (RC). Starting with RC1 and incrementing with each published build (RC2, RC3, etc.), these are intended for use on the beta network to help identify issues not discovered earlier in the development process. +The beta network is also used to coordinate the testing of Nano node releases. The Nano Foundation maintains a few beta nodes on the network and various community members also setup nodes to help provide an environment more similar to the main network. During each development cycle Development Builds (DB) are prepared and shared in the Discord Beta Testing section of channels where early testing is coordinated. Once features are stabilized and included, release builds are published as Release Candidates (RC). Starting with RC1 and incrementing with each published build if needed (RC2, RC3, etc.). Final release of a version typically follows quickly once the RC is observed to be stable. We invite anyone interested in contributing to Nano to consider participating on the beta network. Not only is it beneficial to the ecosystem, it is also a great way to learn more about setting up and managing a node. @@ -43,9 +37,6 @@ ___ --8<-- "beta-directory-locations.md" -!!! info - Directory names for extracting builds downloaded from GitHub or https://beta.nano.org/ will be updated with RC versions for V19 and later. - --- ### Pulling the Docker image @@ -58,7 +49,7 @@ docker pull nanocurrency/nano-beta Pulls a specific version of the Nano node: ```bash -docker pull nanocurrency/nano-beta:V19.0RC1 +docker pull nanocurrency/nano-beta:V21.0RC1 ``` Pulls the latest release which includes any release candidate versions: @@ -92,19 +83,36 @@ docker run --restart=unless-stopped -d \ | URL | Description | | | | -| https://beta.nano.org/ | Official beta site and faucet | +| https://beta.nano.org/ | Nano Foundation beta site and faucet | | https://beta.nanocrawler.cc/ | Beta Explorer | -| https://b.repnode.org/ | Beta nodes and Stats | +| https://beta.nanoticker.info/ | Beta node details and stats | +| https://b.repnode.org/ | Beta node details and stats | + +## Differences from the main network +| Parameter | Main Network | Beta Network | Comment | +|-----------|--------------|--------------|---------| +| Epoch 1 difficulty threshold | `ffffffc000000000` | `fffff00000000000` | 64 times lower on the beta network | +| Epoch 2 send/change threshold | `fffffff800000000` | `fffff00000000000` | 2 times higher than epoch 1 | +| Epoch 2 receive threshold | `fffffe0000000000` | `ffffe00000000000` | 2 times lower than epoch 1 | + + + ## Testing Builds -### Release Candidate Builds -During Release Candidate periods the latest build on the [GitHub repository Releases page](https://github.com/nanocurrency/nano-node/releases) will be tagged with an `RC` number. Various binaries are available below the changelog there for download (Windows, Linux, macOS, etc.). If building on your own, use the [latest tags](https://github.com/nanocurrency/nano-node/tags) containing `RC`. +In addition to the Docker details above, the latest binary builds of the node for the beta network are shared in the #beta_announcements channel on our [Discord server](https://chat.nano.org) and updated below for easy reference. These assets are also available on the [GitHub repository Releases page](https://github.com/nanocurrency/nano-node/releases) under `RC#` and `DB#` tags, which can also be used to manually build if necessary. Additional details for services who wish to test their integrations on the beta network for proper migration between releases can be found in the [Release Notes area](/releases/node-releases/#release-notes). -### Development Builds -Links for beta testing builds are shared in the #beta_announcements channel on our [Discord server](https://chat.nano.org). Docker tags are also available on https://hub.docker.com/r/nanocurrency/nano-beta/tags. +### Latest Beta Builds + +--8<-- "current-beta-build-links.md" + +### Beta fund distribution + +The funds used for testing transactions on the beta network are generated from a new genesis block and distributed in bulk to various testers running nodes on the network. Given the large number of transactions done during testing the ledger can grow quite large and will be restarted from scratch between releases and/or as needed. As a result, previously distributed beta Nano are no longer useful and need to be redistributed again. + +For small amounts suitable for most basic integration, you can get beta Nano from the beta faucet here: https://beta.nano.org/faucet/. If you plan to consistently run a node on beta and want to participate in consensus as a Representative, please connect with `Zach - ATX#0646` or `Dotcom#9351` in the #beta-net channel on our [Discord server](https://chat.nano.org). ### Ongoing Test Cases A spreadsheet of some test cases is maintained separately and available for sharing with community members who are involved on the beta network. If you are interested in helping with these test cases, please connect with `Zach - ATX#0646` or `Dotcom#9351` in the #beta-net channel on our [Discord server](https://chat.nano.org). diff --git a/docs/running-a-node/configuration.md b/docs/running-a-node/configuration.md index ba5d08fa7..9e633ee66 100644 --- a/docs/running-a-node/configuration.md +++ b/docs/running-a-node/configuration.md @@ -226,6 +226,19 @@ enable_control = false More advanced options for controlling the process the RPC server runs under can be found in the [Running Nano as a service guide](../integration-guides/advanced.md#running-nano-as-a-service). +#### logging.log_rpc +This configuration option is set in the [`config-rpc.toml`](../running-a-node/configuration.md#configuration-file-locations) file. + +By default, all RPC calls and the time spent handling each one are [logged](../running-a-node/troubleshooting.md#log-files). This can be optionally turned off by switching option `logging.log_rpc` to `false` + +```toml +[logging] + +# Whether to log RPC calls. +# type:bool +log_rpc = true +``` + ### IPC See the [IPC Integration guide](../integration-guides/ipc-integration.md#configuration). diff --git a/docs/snippets/current-beta-build-links.md b/docs/snippets/current-beta-build-links.md new file mode 100644 index 000000000..92d999719 --- /dev/null +++ b/docs/snippets/current-beta-build-links.md @@ -0,0 +1,5 @@ +| OS | Version | Download link/command | +|----|---------|---------------| +| Linux | V21.0RC1 | https://repo.nano.org/beta/binaries/nano-node-V21.0RC1-Linux.tar.bz2 | +| macOS | V21.0RC1 | https://repo.nano.org/beta/binaries/nano-node-V21.0RC1-Darwin.dmg | +| Windows | V21.0RC1 | https://repo.nano.org/beta/binaries/nano-node-V21.0RC1-win64.exe | \ No newline at end of file diff --git a/docs/snippets/join-technical-mailing-list.md b/docs/snippets/join-technical-mailing-list.md index 401402a29..505504c7f 100644 --- a/docs/snippets/join-technical-mailing-list.md +++ b/docs/snippets/join-technical-mailing-list.md @@ -1,2 +1,14 @@ -!!! info "Join the technical updates mailing list" - Follow this link to sign up for email updates on the latest protocol/node releases and other technical details. This will include network upgrades such as the upcoming epoch distribution: Join Mailing List \ No newline at end of file +!!! info "" +
+
+

Join our Technical Update Mailing List

+
Follow this link to sign up for email updates on the latest protocol/node releases and other technical details. This will include network upgrades such as the upcoming epoch distribution: + http://eepurl.com/gZucL1 +
+
+
+
+ Join Technical Updates Mailing List +
+
+
diff --git a/docs/snippets/known-issue-macos-too-many-open-files.md b/docs/snippets/known-issue-macos-too-many-open-files.md index e353dbb98..e0cf5b054 100644 --- a/docs/snippets/known-issue-macos-too-many-open-files.md +++ b/docs/snippets/known-issue-macos-too-many-open-files.md @@ -1,4 +1,4 @@ -??? warning "Known Issue: macOS 'Too many open files'" +??? warning "Known Issue V19+: macOS 'Too many open files'" * **Issue:** The following error can be seen when attempting to run a full node on macOS using the built-in Qt wallet or other GUI-based wallets: "Exception while running wallet: open: Too many open files". This is due to macOS having a very low default file descriptor limit and V19.0 uses more of them after the move to TCP. diff --git a/docs/snippets/known-issue-peers-stake-reporting.md b/docs/snippets/known-issue-peers-stake-reporting.md index cf4eff222..dfe10951a 100644 --- a/docs/snippets/known-issue-peers-stake-reporting.md +++ b/docs/snippets/known-issue-peers-stake-reporting.md @@ -1,4 +1,4 @@ -??? warning "Known Issue: Peers stake reporting inaccurate (Windows only)" +??? warning "Known Issue V20: Peers stake reporting inaccurate (Windows only)" * **Issue:** For Windows builds only, when calling [confirmation_quorum RPC](/commands/rpc-protocol/#confirmation_quorum) the `peers_stake_total` amount returned may be inaccurate, returning a range from the correct full peer stake amount down to 0. diff --git a/docs/snippets/release-details-v18-0.md b/docs/snippets/release-details-v18-0.md new file mode 100644 index 000000000..a23edeba1 --- /dev/null +++ b/docs/snippets/release-details-v18-0.md @@ -0,0 +1,3 @@ +| Node | Protocol | Database | Release Date | Release Notes | GitHub Links | +| | | | | | | +| 18.0 | 16 | 13 | 2019-02-21 || [Release](https://github.com/nanocurrency/nano-node/releases/tag/V18.0) - [Milestone](https://github.com/nanocurrency/nano-node/milestone/7) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V17.1...V18.0) | \ No newline at end of file diff --git a/docs/snippets/release-details-v19-0.md b/docs/snippets/release-details-v19-0.md new file mode 100644 index 000000000..59fe40053 --- /dev/null +++ b/docs/snippets/release-details-v19-0.md @@ -0,0 +1,5 @@ +| Node | Protocol | Database | Release Date | Release Notes | GitHub Links | +| | | | | | | +| 19.0 | 17 | 14 | 2019-07-11 | [V19.0](/releases/previous-release-notes/#v190) | [Release](https://github.com/nanocurrency/nano-node/releases/tag/V19.0) - [Milestone](https://github.com/nanocurrency/nano-node/milestone/9) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V18.0...V19.0) | + +--8<-- "known-issue-macos-too-many-open-files.md" \ No newline at end of file diff --git a/docs/snippets/release-details-v20-0.md b/docs/snippets/release-details-v20-0.md new file mode 100644 index 000000000..e5b26c428 --- /dev/null +++ b/docs/snippets/release-details-v20-0.md @@ -0,0 +1,7 @@ +| Node | Protocol | Database | Release Date | Release Notes | GitHub Links | +| | | | | | | +| 20.0 | 17 | 15 | 2019-11-12 | [V20.0](/releases/previous-release-notes/#v200) | [Release](https://github.com/nanocurrency/nano-node/releases/tag/V20.0) - [Milestone](https://github.com/nanocurrency/nano-node/milestone/10) - [Changelog](https://github.com/nanocurrency/nano-node/compare/V19.0...V20.0) | + +--8<-- "known-issue-macos-too-many-open-files.md" + +--8<-- "known-issue-peers-stake-reporting.md" \ No newline at end of file diff --git a/docs/snippets/release-details-v21-0.md b/docs/snippets/release-details-v21-0.md new file mode 100644 index 000000000..a7d80b78b --- /dev/null +++ b/docs/snippets/release-details-v21-0.md @@ -0,0 +1,5 @@ +| Node | Protocol | Database | Release Date | Release Notes | GitHub Links | +| | | | | | | +| 21.0 | 18 | 18 | TBD | [V21.0](/releases/current-release-notes) | [Milestone](https://github.com/nanocurrency/nano-node/milestone/18) | + +--8<-- "known-issue-macos-too-many-open-files.md" \ No newline at end of file diff --git a/docs/snippets/release-details-v22-0.md b/docs/snippets/release-details-v22-0.md new file mode 100644 index 000000000..09e984443 --- /dev/null +++ b/docs/snippets/release-details-v22-0.md @@ -0,0 +1,3 @@ +| Node | Protocol | Database | Release Date | Release Notes | GitHub Links | +| | | | | | | +| 22.0 | TBD | TBD | TBD | TBD | Release - [Milestone](https://github.com/nanocurrency/nano-node/milestone/19) - Changelog | \ No newline at end of file diff --git a/docs/snippets/setup-beta-testing.md b/docs/snippets/setup-beta-testing.md new file mode 100644 index 000000000..846c9d233 --- /dev/null +++ b/docs/snippets/setup-beta-testing.md @@ -0,0 +1,2 @@ +!!! info "Setup for testing on beta network" + If you are looking to test the latest version of the node ahead of release, check out the [Beta Network](/running-a-node/beta-network/) page for more details about how to get setup. Testing specific features, integrations and anything else is highly encouraged during all stages of node development. \ No newline at end of file diff --git a/docs/snippets/telemetry-can-be-forged.md b/docs/snippets/telemetry-can-be-forged.md new file mode 100644 index 000000000..f3c0d0cc8 --- /dev/null +++ b/docs/snippets/telemetry-can-be-forged.md @@ -0,0 +1,2 @@ +!!! warning "Telemetry can be forged" + Although the telemetry messages are signed by nodes, the data provided by other peers can be forged by malicious nodes so they cannot be guaranteed as accurate. All details in these messages should be used as rough indicators of peer and broad network situations, but not exclusively relied on for any key integration or network activities. \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index 628e2a96f..54e1dc57d 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -51,6 +51,8 @@ nav: - Original whitepaper: whitepaper/english.md - Releases: - Node Releases: releases/node-releases.md + - Current Release Notes: releases/current-release-notes.md + - Previous Release Notes: releases/previous-release-notes.md - Network Upgrades: releases/network-upgrades.md - Upcoming Features: releases/upcoming-features.md - Roadmap: releases/roadmap.md From cf3356a8bf29ca57c2b33b6d8413b42fa1535b3e Mon Sep 17 00:00:00 2001 From: Zach Hyatt Date: Wed, 10 Jun 2020 15:58:16 -0500 Subject: [PATCH 81/87] Remove duplicate known issue on V21 release notes (#325) --- docs/releases/current-release-notes.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/releases/current-release-notes.md b/docs/releases/current-release-notes.md index 4a3a30335..810c85a2d 100644 --- a/docs/releases/current-release-notes.md +++ b/docs/releases/current-release-notes.md @@ -10,8 +10,6 @@ description: Details of the most current Nano node release including upgrade not --8<-- "release-details-v21-0.md" ---8<-- "known-issue-macos-too-many-open-files.md" - !!! info "Nano Forum available" The Nano Forum is available at https://forum.nano.org/ as a resource to ask questions and get support when participating on the network. The [Node and Representative Management category](https://forum.nano.org/c/node-and-rep) is a great place to ask node upgrade related questions. From 720f473891cdc991313769e87457aee0c0808897 Mon Sep 17 00:00:00 2001 From: Zach Hyatt Date: Wed, 10 Jun 2020 16:24:18 -0500 Subject: [PATCH 82/87] Update correct beta builds on current release notes (#326) --- docs/releases/current-release-notes.md | 2 +- docs/snippets/current-beta-build-links.md | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/releases/current-release-notes.md b/docs/releases/current-release-notes.md index 810c85a2d..080e26011 100644 --- a/docs/releases/current-release-notes.md +++ b/docs/releases/current-release-notes.md @@ -136,7 +136,7 @@ The following functionality is now deprecated and will be removed in a future re ## Builds and Commands ---8<-- "current-release-build-links.md" +--8<-- "current-beta-build-links.md" --- diff --git a/docs/snippets/current-beta-build-links.md b/docs/snippets/current-beta-build-links.md index 92d999719..850953c53 100644 --- a/docs/snippets/current-beta-build-links.md +++ b/docs/snippets/current-beta-build-links.md @@ -2,4 +2,5 @@ |----|---------|---------------| | Linux | V21.0RC1 | https://repo.nano.org/beta/binaries/nano-node-V21.0RC1-Linux.tar.bz2 | | macOS | V21.0RC1 | https://repo.nano.org/beta/binaries/nano-node-V21.0RC1-Darwin.dmg | -| Windows | V21.0RC1 | https://repo.nano.org/beta/binaries/nano-node-V21.0RC1-win64.exe | \ No newline at end of file +| Windows | V21.0RC1 | https://repo.nano.org/beta/binaries/nano-node-V21.0RC1-win64.exe | +| Docker | V21.0RC1 | `docker pull nanocurrency/nano-beta:V21.0RC1` or `docker pull nanocurrency/nano-beta:latest`
See [Pulling the Docker Image](../running-a-node/beta-network.md#pulling-the-docker-image) for more details. | \ No newline at end of file From 079ba691c0748534bd2f28a6e33b78d7ca9ca036 Mon Sep 17 00:00:00 2001 From: Jim Huang Date: Fri, 12 Jun 2020 00:23:39 +0800 Subject: [PATCH 83/87] Mention the robot which posts daily ledger file download links (#327) A robot was deployed in the '#ledger' channel for posting daily ledger file download information. --- docs/running-a-node/ledger-management.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/running-a-node/ledger-management.md b/docs/running-a-node/ledger-management.md index 50e33905e..938917bc4 100644 --- a/docs/running-a-node/ledger-management.md +++ b/docs/running-a-node/ledger-management.md @@ -57,7 +57,7 @@ The additional resource usage these options cause should be considered, especial !!! tip "Always backup your ledgers file" Whenever you are attempting to change the ledger, it is highly recommended you create backups of the existing `data.ldb` file to ensure you have a rollback point if issues are encountered. -To avoid bootstrapping times, a [ledger file](#ledger-file) (`data.ldb`) can be downloaded off-network and added to the data file used by the node. This process is sometimes referred to as a "fast sync". The Nano Foundation provides a daily ledger file download in the `#ledger` channel of our [Discord server](https://chat.nano.org). This is posted by `SergSW` and contains checksums for validation. +To avoid bootstrapping times, a [ledger file](#ledger-file) (`data.ldb`) can be downloaded off-network and added to the data file used by the node. This process is sometimes referred to as a "fast sync". The Nano Foundation provides a daily ledger file download in the `#ledger` channel of our [Discord server](https://chat.nano.org). This is posted by the robot `Nano Snapshots Uploader` and contains checksums for validation. Alternatively, one of [My Nano Ninja](https://mynano.ninja/api) APIs redirects the current ledger file preserved at [Yandex](https://yandex.com/): ```bash wget -O ledger.7z https://mynano.ninja/api/ledger/download -q --show-progress From 9989ae245c573e363a2e0c92fa490098f248180e Mon Sep 17 00:00:00 2001 From: Zach Hyatt Date: Thu, 11 Jun 2020 11:24:38 -0500 Subject: [PATCH 84/87] Add beta ledger file details (#324) --- docs/running-a-node/beta-network.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/running-a-node/beta-network.md b/docs/running-a-node/beta-network.md index 999bf7f90..8f6040801 100644 --- a/docs/running-a-node/beta-network.md +++ b/docs/running-a-node/beta-network.md @@ -114,5 +114,15 @@ The funds used for testing transactions on the beta network are generated from a For small amounts suitable for most basic integration, you can get beta Nano from the beta faucet here: https://beta.nano.org/faucet/. If you plan to consistently run a node on beta and want to participate in consensus as a Representative, please connect with `Zach - ATX#0646` or `Dotcom#9351` in the #beta-net channel on our [Discord server](https://chat.nano.org). +### Beta ledger file + +To help get beta nodes in sync more quickly it is recommended that an updated ledger file is downloaded and placed into the data directory. Often referred to as a "fast sync", more details around this approach can be found in the [Ledger Management guide](ledger-management.md#downloaded-ledger-files). Since the beta network contains no value, validating the blocks, voting weights and confirmation heights isn't necessary. + +The following command will download and unzip a recent ledger snapshot. Any existing ledger files should be backed up elswhere as this will override them. From within the [data directory](#directory-locations) run: + +``` +curl -O https://s3.us-east-2.amazonaws.com/beta-snapshot.nano.org/data.tar.gz; tar -xzvf data.tar.gz; rm -fr data.tar.gz +``` + ### Ongoing Test Cases A spreadsheet of some test cases is maintained separately and available for sharing with community members who are involved on the beta network. If you are interested in helping with these test cases, please connect with `Zach - ATX#0646` or `Dotcom#9351` in the #beta-net channel on our [Discord server](https://chat.nano.org). From 044bfa61ebbdb7ae350ec76e972d75d1753de05c Mon Sep 17 00:00:00 2001 From: Jim Huang Date: Fri, 12 Jun 2020 04:07:56 +0800 Subject: [PATCH 85/87] Improve the explanation of private key generation formula (#316) The blake2b hash function is mentioned along with its parameter. --- docs/glossary.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/glossary.md b/docs/glossary.md index 0771afd92..01ec06b97 100644 --- a/docs/glossary.md +++ b/docs/glossary.md @@ -119,10 +119,10 @@ Each node configured with a [Representative](#representative) votes on every blo The amount of weight delegated to a [Representative](#representative). #### wallet -A wallet is an organizational object in a nano\_node that holds a single seed from which multiple accounts are deterministically derived via a `uint32` index starting at 0. Private keys are derived from the seed and index as follows: +A wallet is an organizational object in a nano\_node that holds a single seed from which multiple accounts are deterministically derived via a 32-bit unsigned integer index starting at 0. Private keys are derived from the seed and index as follows: (`||` means concatenation; `blake2b` is a [highly optimized cryptographic hash function](/signing-hashing-and-key-derivation/#hashing-algorithm-blake2)) $$ -k_{private} = blake2b(seed || index) +k_{private} = blake2b(\text{seed} || \text{index}) $$ #### WALLET_ID From 3742025df757b3b37132ac1dc266d4d14565c53c Mon Sep 17 00:00:00 2001 From: Guilherme Lawless Date: Mon, 15 Jun 2020 11:45:26 +0100 Subject: [PATCH 86/87] Updates to the ledger updating guide (#323) --- docs/running-a-node/ledger-management.md | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/docs/running-a-node/ledger-management.md b/docs/running-a-node/ledger-management.md index 938917bc4..cb17ce5d0 100644 --- a/docs/running-a-node/ledger-management.md +++ b/docs/running-a-node/ledger-management.md @@ -103,16 +103,21 @@ In order to minimize downtime, consider performing the update in a different mac 1. Create a directory `/home//Nano_Update` on Machine B. 1. Stop the node on Machine A. -1. Copy the `data.ldb` [file](#ledger-management) from Machine A to `/home//Nano_Update/data.ldb` on Machine B. -1. Start the node again on Machine A. -1. Download the [latest node version](/releases/node-releases/#current-release). For the purposes of this guide, using a binary is easier. -1. Run the following command (varies based on your operating system): `./nano_node --debug_block_count --data_path /home//Nano_Update --config node.logging.log_to_cerr=true` +1. If enough free space (at least [`data.ldb`](#ledger-file) size) is available on Machine A: + * Make a local copy of [`data.ldb`](#ledger-file) in any directory. + * Start the node again on Machine A, resuming operation. + * Move the local copy of the ledger from Machine A to `/home//Nano_Update/data.ldb` on Machine B. + * Skip the next step. +1. If there is not enough free space on Machine A: + * Copy [`data.ldb`](#ledger-file) from Machine A to `/home//Nano_Update/data.ldb` on Machine B. + * Start the node again on Machine A, resuming operation. +1. Download the [latest node version](/releases/node-releases/#current-release) to Machine B. For the purposes of this guide, using a binary is easier. +1. Run the following command on Machine B (varies based on your operating system): `./nano_node --debug_block_count --data_path /home//Nano_Update --config node.logging.log_to_cerr=true` 1. The message *"Upgrade in progress..."* will be displayed if a ledger upgrade is required. Wait until the command finishes and **do not stop the upgrade preemptively**. 1. Copy `/home//Nano_Update/data.ldb` from Machine B to a temporary location on Machine A. **do not overwrite data.ldb on Machine A while the node is running**. -1. Stop and **upgrade** to the latest node version on Machine A as you would do normally. -1. Stop the node on Machine A in case upgrading restarted it. +1. **Stop** the node on Machine A. 1. Replace `/home//Nano/data.ldb` with the transferred file. -1. Restart the node. +1. **Upgrade** to the latest node version on Machine A as you would do normally. In the event that you are unable to upgrade the ledger on another machine but would still like to minimize downtime, consider [obtaining the ledger from another source](#downloaded-ledger-files) as a last resource. From c7451c649861c4a455bcac1941c2bfe5b9aeff86 Mon Sep 17 00:00:00 2001 From: Guilherme Lawless Date: Mon, 15 Jun 2020 15:01:46 +0100 Subject: [PATCH 87/87] Work benchmark updates (#328) * Update pow benchmarks with new devices * Remove legacy benchmarks missing info and re-order * Compute average from existing benchmarks with a range --- docs/integration-guides/work-generation.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/docs/integration-guides/work-generation.md b/docs/integration-guides/work-generation.md index 36d132198..40965e10d 100644 --- a/docs/integration-guides/work-generation.md +++ b/docs/integration-guides/work-generation.md @@ -174,15 +174,16 @@ Below are work generation benchmarks from a variety of consumer-grade CPUs and G | Nvidia Tesla V100 (AWS) | 6.4 | | | | Nvidia Tesla P100 (Google,Cloud) | 4.9 | | | | Nvidia Tesla K80 (Google,Cloud) | 1.64 | | | -| AMD RX 470 OC | 1.59 | | | -| Nvidia GTX 1060 3GB | 1.25 | | | -| Intel Core i7 4790K AVX2 | 0.33 | | | -| Intel Core i7 4790K,WebAssembly (Firefox) | 0.14 | | | -| Google Cloud 4 vCores | 0.14-0.16 | | | -| ARM64 server 4 cores (Scaleway) | 0.05-0.07 | | | +| Google Cloud 4 vCores | 0.15 | | | +| ARM64 server 4 cores (Scaleway) | 0.06 | | | +| Intel Core i7 6700 @3.7GHz AVX2 | 0.65 | 0.07 | 5.25 | +| AMD R7-4800U @2.8GHz AVX2 | 0.64 | 0.06 | 3.70 | +| AMD R5-3600 @4.07GHz | 0.59 | 0.09 | 3.51 | +| AMD R9-3900X @3.97GHz AVX2 | 1.97 | 0.26 | 15.6 | | Nvidia GTX 1080 | 2.63 | 0.37 | 21.29 | | Nvidia RTX 2080 Ti | 4.01 | 0.51 | 31.5 | -| AMD R9-3900X (12C/24T@3.97GHz AVX2) | 1.97 | 0.26 | 15.6 | +| AMD R9 290 | 1.23 | 0.15 | 8.06 | +| AMD RX Vega 64 | 3.77 | 0.45 | 25.00 | ---