From b995507cf77ebf8240f2a02e9d9322a97cb8eb14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Quiroz?= Date: Tue, 29 Nov 2022 15:39:14 -0300 Subject: [PATCH 01/15] chore: update headings letter spacing --- src/theme/foundations/textStyles.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/theme/foundations/textStyles.ts b/src/theme/foundations/textStyles.ts index fb95731677..c8ac62093b 100644 --- a/src/theme/foundations/textStyles.ts +++ b/src/theme/foundations/textStyles.ts @@ -4,7 +4,7 @@ export const textStyles = { fontWeight: 700, fontSize: '2.75rem', lineHeight: '3.375rem', - letterSpacing: '0.05em', + letterSpacing: '0.04em', color: 'body' }, h2: { @@ -47,20 +47,21 @@ export const textStyles = { header5: { fontFamily: 'heading', fontSize: '1rem', - letterSpacing: '0.02em', + letterSpacing: '0.04em', lineHeight: 'normal', color: 'body' }, header6: { fontFamily: 'heading', fontSize: '0.875rem', - letterSpacing: '0.02em', + letterSpacing: '0.04em', lineHeight: 'normal', color: 'body' }, 'header-font': { fontFamily: 'heading', fontWeight: 700, + letterSpacing: '0.04em', fontSize: { base: '0.86rem', sm: '1rem' }, color: 'body' }, From e5c382ca048518708699ffb15a73a9ebe5aa67f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Quiroz?= Date: Tue, 29 Nov 2022 20:38:57 -0300 Subject: [PATCH 02/15] chore: update letter spacing on headings --- src/theme/foundations/textStyles.ts | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/theme/foundations/textStyles.ts b/src/theme/foundations/textStyles.ts index 9c7f807665..2c55908249 100644 --- a/src/theme/foundations/textStyles.ts +++ b/src/theme/foundations/textStyles.ts @@ -4,7 +4,7 @@ export const textStyles = { fontWeight: 700, fontSize: '2.75rem', lineHeight: '3.375rem', - letterSpacing: '0.04em', + letterSpacing: { base: '0.03rem', md: '0.04rem' }, color: 'body' }, h2: { @@ -12,56 +12,56 @@ export const textStyles = { fontWeight: 400, fontSize: { base: '1.5rem', md: '1.75rem' }, lineHeight: 'normal', - letterSpacing: '0.04em', + letterSpacing: { base: '0.03rem', md: '0.04rem' }, color: 'body' }, header1: { fontFamily: 'heading', fontWeight: 700, fontSize: { base: '1.875rem', md: '2.125rem' }, - letterSpacing: '0.04em', + letterSpacing: { base: '0.03rem', md: '0.04rem' }, lineHeight: 'normal', color: 'body' }, header2: { fontFamily: 'heading', fontSize: { base: '1.5rem', md: '1.75rem' }, - letterSpacing: '0.04em', + letterSpacing: { base: '0.03rem', md: '0.04rem' }, lineHeight: 'normal', color: 'body' }, header3: { fontFamily: 'heading', fontSize: { base: '1.25rem', md: '1.375rem' }, - letterSpacing: '0.04em', + letterSpacing: { base: '0.03rem', md: '0.04rem' }, lineHeight: 'normal', color: 'body' }, header4: { fontFamily: 'heading', fontSize: '1.125rem', - letterSpacing: '0.04em', + letterSpacing: { base: '0.03rem', md: '0.04rem' }, lineHeight: 'normal', color: 'body' }, header5: { fontFamily: 'heading', fontSize: '1rem', - letterSpacing: '0.04em', + letterSpacing: '0.02rem', lineHeight: 'normal', color: 'body' }, header6: { fontFamily: 'heading', fontSize: '0.875rem', - letterSpacing: '0.04em', + letterSpacing: '0.02rem', lineHeight: 'normal', color: 'body' }, 'header-font': { fontFamily: 'heading', fontWeight: 700, - letterSpacing: '0.04em', + letterSpacing: '0.04rem', fontSize: { base: '0.86rem', sm: '1rem' }, color: 'body' }, @@ -69,7 +69,7 @@ export const textStyles = { fontFamily: 'heading', fontWeight: 700, lineHeight: '21px', - letterSpacing: '0.05em', + letterSpacing: '0.05rem', textAlign: { base: 'center', md: 'left' }, color: 'body' }, @@ -111,7 +111,7 @@ export const textStyles = { fontWeight: 700, textTransform: 'uppercase', lineHeight: '21.12px', - letterSpacing: '0.02em' + letterSpacing: '0.02rem' }, 'footer-text': { fontFamily: 'body', @@ -154,14 +154,14 @@ export const textStyles = { fontWeight: 400, fontSize: 'md', lineHeight: 4, - letterSpacing: '0.01em' + letterSpacing: '0.01rem' }, 'code-block': { fontFamily: 'heading', fontWeight: 400, fontSize: 'md', lineHeight: '21.12px', - letterSpacing: '0.01em' + letterSpacing: '0.01rem' }, // TODO: refactor w/ semantic tokens for light/dark mode 'link-light': {}, From 2d59711d1373ae7a15a32f62355f939d68209e6d Mon Sep 17 00:00:00 2001 From: Joe Date: Wed, 30 Nov 2022 10:38:00 +0000 Subject: [PATCH 03/15] standardize code snippets --- .../dapp-developer/native-bindings.md | 14 ++--- docs/developers/dapp-developer/native.md | 4 +- docs/developers/evm-tracing/basic-traces.md | 6 +- .../evm-tracing/built-in-tracers.md | 3 +- .../evm-tracing/javascript-tutorial.md | 4 +- docs/developers/geth-developer/dev-guide.md | 16 ++--- docs/developers/geth-developer/dev-mode.md | 22 ++++--- .../geth-developer/dns-discovery-setup.md | 18 +++--- .../geth-developer/private-network.md | 40 ++++++------- docs/fundamentals/account-management.md | 12 ++-- docs/fundamentals/command-line-options.md | 2 +- docs/fundamentals/les.md | 4 +- docs/fundamentals/logs.md | 14 ++--- docs/fundamentals/mining.md | 22 +++---- docs/fundamentals/node-architecture.md | 2 +- docs/fundamentals/peer-to-peer.md | 18 +++--- docs/fundamentals/sync-modes.md | 6 +- docs/getting-started/consensus-clients.md | 4 +- docs/getting-started/index.md | 28 ++++----- docs/getting-started/installing-geth.md | 58 +++++++++---------- .../javascript-console-contracts.md | 2 +- .../javascript-console.md | 18 +++--- docs/interacting-with-geth/rpc/batch.md | 2 +- docs/interacting-with-geth/rpc/graphql.md | 10 ++-- docs/interacting-with-geth/rpc/ns-admin.md | 16 ++--- docs/interacting-with-geth/rpc/ns-clique.md | 4 +- docs/interacting-with-geth/rpc/ns-debug.md | 31 +++++----- docs/interacting-with-geth/rpc/ns-eth.md | 8 +-- docs/interacting-with-geth/rpc/ns-les.md | 18 +++--- docs/interacting-with-geth/rpc/ns-personal.md | 20 +++---- docs/interacting-with-geth/rpc/ns-txpool.md | 6 +- docs/monitoring/dashboards.md | 2 +- docs/monitoring/metrics.md | 6 +- docs/tools/abigen.md | 8 +-- docs/tools/clef/apis.md | 8 +-- docs/tools/clef/clique-signing.md | 16 +++-- docs/tools/clef/setup.md | 10 ++-- docs/tools/clef/tutorial.md | 12 ++-- docs/tools/puppeth.md | 2 +- 39 files changed, 247 insertions(+), 249 deletions(-) diff --git a/docs/developers/dapp-developer/native-bindings.md b/docs/developers/dapp-developer/native-bindings.md index 413c2db2f5..9aa6e49ccb 100644 --- a/docs/developers/dapp-developer/native-bindings.md +++ b/docs/developers/dapp-developer/native-bindings.md @@ -21,7 +21,7 @@ Ethereum smart contracts have a schema that defines its functions and return typ Geth includes a source code generator called `abigen` that can convert Ethereum ABI definitions into easy to use, type-safe Go packages. With a valid Go development environment set up and the go-ethereum repository checked out correctly, `abigen` can be built as follows: -``` +```sh $ cd $GOPATH/src/github.com/ethereum/go-ethereum $ go build ./cmd/abigen ``` @@ -86,7 +86,7 @@ The ABI for `Storage.sol` (`Storage.abi`) looks as follows: The contract binding can then be generated by passing the ABI to `abigen` as follows: -``` +```sh $ abigen --abi Storage.abi --pkg main --type Storage --out Storage.go ``` @@ -158,13 +158,13 @@ In the previous section, the contract ABI was sufficient for generating the cont The bytecode is obtained by running the compiler again but this passing the `--bin` flag, e.g. -```shell +```sh solc --bin Storage.sol -o Storage.bin ``` Then `abigen` can be run again, this time passing `Storage.bin`: -``` +```sh $ abigen --abi Storage.abi --pkg main --type Storage --out Storage.go --bin Storage.bin ``` @@ -248,7 +248,7 @@ func main() { Running this code requests the creation of a brand new `Storage` contract on the Goerli blockchain. The contract functions can be called while the contract is waiting to be included in a block. -``` +```sh Contract pending deploy: 0x46506d900559ad005feb4645dcbb2dbbf65e19cc Transaction waiting to be mined: 0x6a81231874edd2461879b7280ddde1a857162a744e3658ca7ec276984802183b @@ -465,7 +465,7 @@ In the past, abigen allowed compilation and binding of a Solidity source file di The compilation and binding steps can be joined together into a pipeline, for example: -``` +```sh solc Storage.sol --combined-json abi,bin | abigen --pkg main --type storage --out Storage.go --combined-json - ``` @@ -475,7 +475,7 @@ The `abigen` command was made in such a way as to integrate easily into existing Place the binding generation command into a Go source file before the package definition: -``` +```go //go:generate abigen --sol Storage.sol --pkg main --out Storage.go ``` diff --git a/docs/developers/dapp-developer/native.md b/docs/developers/dapp-developer/native.md index 4e4eea9edc..aa26e089df 100644 --- a/docs/developers/dapp-developer/native.md +++ b/docs/developers/dapp-developer/native.md @@ -35,7 +35,7 @@ The canonical import path for Geth is `github.com/ethereum/go-ethereum`, with al All the Geth packages can be downloaded using: -``` +```sh $ go get -d github.com/ethereum/go-ethereum/... ``` @@ -176,7 +176,7 @@ func sendTransaction(cl *ethclient.Client) error { An instance of `gethclient` can be used in exactly the same way as `ethclient`. However, `gethclient` includes Geth-specific API methods. These additional methods are: -```shell +```sh CallContract() CreatAccessList() GCStats() diff --git a/docs/developers/evm-tracing/basic-traces.md b/docs/developers/evm-tracing/basic-traces.md index f66604605b..f8bd8885a5 100644 --- a/docs/developers/evm-tracing/basic-traces.md +++ b/docs/developers/evm-tracing/basic-traces.md @@ -54,7 +54,7 @@ debug.traceTransaction("0xfc9359e49278b7ba99f59edac0e3de49956e46e530a53c15aa7122 The same call can also be invoked from outside the node too via HTTP RPC (e.g. using Curl). In this case, the HTTP endpoint must be enabled in Geth using the `--http` command and the `debug` API namespace must be exposed using `--http.api=debug`. -``` +```sh $ curl -H "Content-Type: application/json" -d '{"id": 1, "method": "debug_traceTransaction", "params": ["0xfc9359e49278b7ba99f59edac0e3de49956e46e530a53c15aa71226b7aa92c6f"]}' localhost:8545 ``` @@ -62,7 +62,7 @@ To follow along with this tutorial, transaction hashes can be found from a local It is also possible to configure the trace by passing Boolean (true/false) values for four parameters that tweak the verbosity of the trace. By default, the *EVM memory* and *Return data* are not reported but the *EVM stack* and *EVM storage* are. To report the maximum amount of data: -```shell +```sh enableMemory: true disableStack: false disableStorage: false @@ -79,7 +79,7 @@ The above operation was run on the (now-deprecated) Rinkeby network (with a node Alternatively, disabling *EVM Stack*, *EVM Memory*, *Storage* and *Return data* (as demonstrated in the Curl request below) results in the following, much shorter, [trace dump](https://gist.github.com/karalabe/d74a7cb33a70f2af75e7824fc772c5b4). -``` +```sh $ curl -H "Content-Type: application/json" -d '{"id": 1, "method": "debug_traceTransaction", "params": ["0xfc9359e49278b7ba99f59edac0e3de49956e46e530a53c15aa71226b7aa92c6f", {"disableStack": true, "disableStorage": true}]}' localhost:8545 ``` diff --git a/docs/developers/evm-tracing/built-in-tracers.md b/docs/developers/evm-tracing/built-in-tracers.md index 9fdea51f41..06d445dc40 100644 --- a/docs/developers/evm-tracing/built-in-tracers.md +++ b/docs/developers/evm-tracing/built-in-tracers.md @@ -29,7 +29,7 @@ Note that the fields `memory`, `stack`, `returnData`, and `storage` have dynamic It is also possible to configure the trace by passing Boolean (true/false) values for four parameters that tweak the verbosity of the trace. By default, the _EVM memory_ and _Return data_ are not reported but the _EVM stack_ and _EVM storage_ are. To report the maximum amount of data: -```shell +```sh enableMemory: true disableStack: false disableStorage: false @@ -442,7 +442,6 @@ Returns: DUP13: 2, ... } - ``` ## State overrides {#state-overrides} diff --git a/docs/developers/evm-tracing/javascript-tutorial.md b/docs/developers/evm-tracing/javascript-tutorial.md index b777b91bc9..ae03c302de 100644 --- a/docs/developers/evm-tracing/javascript-tutorial.md +++ b/docs/developers/evm-tracing/javascript-tutorial.md @@ -172,7 +172,7 @@ storage, so here we can't. The solution is to have a flag, `afterSload`, which is only true in the opcode right after an `SLOAD`, when we can see the result at the top of the stack. -```javascript +```js tracer = function (tx) { return debug.traceTransaction(tx, { tracer: @@ -204,7 +204,7 @@ tracer = function (tx) { The output now contains the result in the line that follows the `SLOAD`. -```javascript +```js [ "5921: SLOAD 0", " Result: 1", diff --git a/docs/developers/geth-developer/dev-guide.md b/docs/developers/geth-developer/dev-guide.md index c467fcdffd..1a816c5e5c 100644 --- a/docs/developers/geth-developer/dev-guide.md +++ b/docs/developers/geth-developer/dev-guide.md @@ -16,13 +16,13 @@ Developers should use a recent version of Go for building and testing. We use th Switch to the go-ethereum repository root directory. All code can be built using the go tool, placing the resulting binary in `$GOPATH/bin`. -```text +```sh go install -v ./... ``` go-ethereum exectuables can be built individually. To build just geth, use: -```text +```sh go install -v ./cmd/geth ``` @@ -32,13 +32,13 @@ Cross compilation is not recommended, please build Geth for the host architectur Testing a package: -``` +```sh go test -v ./eth ``` Running an individual test: -``` +```sh go test -v ./eth -run TestMethod ``` @@ -46,7 +46,7 @@ go test -v ./eth -run TestMethod Running benchmarks, eg.: -``` +```sh go test -v -bench . -run BenchmarkJoin ``` @@ -56,7 +56,7 @@ For more information, see the [go test flags](https://golang.org/cmd/go/#hdr-Tes A stack trace provides a very detailed look into the current state of the geth node. It helps us to debug issues easier as it contains information about what is currently done by the node. Stack traces can be created by running `debug.stacks()` in the Geth console. If the node was started without the console command or with a script in the background, the following command can be used to dump the stack trace into a file. -``` +```sh geth attach --exec "debug.stacks()" > stacktrace.txt ``` @@ -128,7 +128,7 @@ If Geth is started with the `--pprof` option, a debugging HTTP server is made av Note that if multiple instances of Geth exist, port `6060` will only work for the first instance that was launched. To generate stacktraces for other instances, they should be started up with alternative pprof ports. Ensure `stderr` is being redirected to a logfile. -``` +```sh geth -port=30300 -verbosity 5 --pprof --pprof.port 6060 2>> /tmp/00.glog geth -port=30301 -verbosity 5 --pprof --pprof.port 6061 2>> /tmp/01.glog geth -port=30302 -verbosity 5 --pprof --pprof.port 6062 2>> /tmp/02.glog @@ -136,7 +136,7 @@ geth -port=30302 -verbosity 5 --pprof --pprof.port 6062 2>> /tmp/02.glog Alternatively to kill the clients (in case they hang or stalled syncing, etc) and have the stacktrace too, use the `-QUIT` signal with `kill`: -``` +```sh killall -QUIT geth ``` diff --git a/docs/developers/geth-developer/dev-mode.md b/docs/developers/geth-developer/dev-mode.md index bff6d92cba..7e868ea665 100644 --- a/docs/developers/geth-developer/dev-mode.md +++ b/docs/developers/geth-developer/dev-mode.md @@ -26,7 +26,7 @@ Starting Geth in developer mode is as simple as providing the `--dev` flag. It i Remix will be used to deploy a smart contract to the node which requires information to be exchanged externally to Geth's own domain. To permit this, enable `http` and the `net` namespace must be enabled and the Remix URL must be provided to `--http.corsdomain`. For this tutorial some other namespaces will also be enabled. The full command is as follows: -```shell +```sh geth --dev --http --http.api eth,web3,net --http.corsdomain "http://remix.ethereum.org" ``` @@ -71,7 +71,7 @@ INFO [05-09|10:49:03.316] Commit new sealing work number=1 seal This terminal must be left running throughout the entire tutorial. In a second terminal, attach a Javascript console. By default the `ipc` file is saved in the `datadir`: -```shell +```sh geth attach /geth.ipc ``` @@ -91,7 +91,7 @@ To exit, press ctrl-d or type exit For simplicity this tutorial uses Geth's built-in account management. First, the existing accounts can be displayed using `eth.accounts`: -```shell +```sh eth.accounts ``` @@ -104,7 +104,7 @@ true The following command can be used to query the balance. The return value is in units of Wei, which is divided by 118 to give units of ether. This can be done explicitly or by calling the `web3.FromWei()` function: -```shell +```sh eth.getBalance(eth.coinbase)/1e18 // or @@ -120,7 +120,7 @@ Using `web3.fromWei()` is less error prone because the correct multiplier is bui A new account can be created using Clef. Some of the ether from the coinbase can then be transferred across to it. A new account is generated using the `newaccount` function on the command line: -```shell +```sh clef newaccount --keystore ``` @@ -128,13 +128,13 @@ The terminal will display a request for a password, twice. Once provided, a new To reconfirm the account creation, running `eth.accounts` in the Javascript console should display an array containing two account addresses, one being the coinbase and the other being the newly generated address. The following command transfers 50 ETH from the coinbase to the new account: -```shell +```sh eth.sendTransaction({from: eth.coinbase, to: eth.accounts[1], value: web3.toWei(50, "ether")}) ``` A transaction hash will be returned to the console. This transaction hash will also be displayed in the logs in the Geth console, followed by logs confirming that a new block was mined (remember in the local development network blocks are mined when transactions are pending). The transaction details can be displayed in the Javascript console by passing the transaction hash to `eth.getTransaction()`: -```shell +```sh eth.getTransaction("0x62044d2cab405388891ee6d53747817f34c0f00341cde548c0ce9834e9718f27") ``` @@ -263,7 +263,7 @@ The transaction hash can be used to retrieve the transaction details using the G The `from` address is the account that sent the transaction, the `to` address is the deployment address of the contract. The value entered into Remix is now in storage at that contract address. This can be retrieved using Remix by calling the `retrieve` function - to do this simply click the `retrieve` button. Alternatively, it can be retrieved using `web3.getStorageAt` using the Geth Javascript console. The following command returns the value in the contract storage (replace the given address with the correct one displayed in the Geth logs). -```shell +```sh web3.eth.getStorageAt("0x407d73d8a49eeb85d32cf465507dd71d507100c1", 0) ``` @@ -279,7 +279,7 @@ The returned value is a left-padded hexadecimal value. For example, the return v This tutorial used an ephemeral blockchain that is completely destroyed and started afresh during each dev-mode session. However, it is also possible to create persistent blockchain and account data that can be reused across multiple sessions. This is done by providing the `--datadir` flag and a directory name when starting Geth in dev-mode. -```shell +```sh geth --datadir dev-chain --dev --http --http.api web3,eth,net --http.corsdomain "remix.ethereum.org" ``` @@ -287,10 +287,8 @@ geth --datadir dev-chain --dev --http --http.api web3,eth,net --http.corsdomain Geth will fail to start in dev-mode if keys have been manually created or imported into the keystore in the `--datadir` directory. This is because the account cannot be automatically unlocked. To resolve this issue, the password defined when the account was created can be saved to a text file and its path passed to the `--password` flag on starting Geth, for example if `password.txt` is saved in the top-level `go-ethereum` directory: -```shell - +```sh geth --datadir dev-chain --dev --http --http.api web3,eth,net --http.corsdomain "remix.ethereum.org" --password password.txt - ``` **Note** that this is an edge-case that applies when both the `--datadir` and `--dev` flags are used and a key has been manually created or imported into the keystore. diff --git a/docs/developers/geth-developer/dns-discovery-setup.md b/docs/developers/geth-developer/dns-discovery-setup.md index fafc71a205..1cc888d27a 100644 --- a/docs/developers/geth-developer/dns-discovery-setup.md +++ b/docs/developers/geth-developer/dns-discovery-setup.md @@ -11,13 +11,13 @@ DNS-based node lists can serve as a fallback option when connectivity to the dis `cmd/devp2p` is a developer utility and is not included in the Geth distribution. You can install this command using `go get`: -```shell +```sh go get github.com/ethereum/go-ethereum/cmd/devp2p ``` To create a signing key, the `ethkey` utility is needed. -```shell +```sh go get github.com/ethereum/go-ethereum/cmd/ethkey ``` @@ -25,7 +25,7 @@ go get github.com/ethereum/go-ethereum/cmd/ethkey Our first step is to compile a list of all reachable nodes. The DHT crawler in cmd/devp2p is a batch process which runs for a set amount of time. You should should schedule this command to run at a regular interval. To create a node list, run -```shell +```sh devp2p discv4 crawl -timeout 30m all-nodes.json ``` @@ -45,13 +45,13 @@ To create a filtered node set, first create a new directory to hold the output s can use any directory name, though it's good practice to use the DNS domain name as the name of this directory. -```shell +```sh mkdir mainnet.nodes.example.org ``` Then, to create the output set containing Ethereum mainnet nodes only, run -```shell +```sh devp2p nodeset filter all-nodes.json -eth-network mainnet > mainnet.nodes.example.org/nodes.json ``` @@ -67,13 +67,13 @@ The following filter flags are available: To turn a node list into a DNS node tree, the list needs to be signed. To do this, a key pair is required. To create the key file in the correct format, the cmd/ethkey utility should be used. Choose a strong password to encrypt the key on disk! -```shell +```sh ethkey generate dnskey.json ``` Now use `devp2p dns sign` to update the signature of the node list. If the list's directory name differs from the name it will be published at,specify the DNS name the using the `-domain` flag. This command will prompt for the key file password and update the tree signature. -```shell +```sh devp2p dns sign mainnet.nodes.example.org dnskey.json ``` @@ -85,7 +85,7 @@ Now that the tree is signed, it can be published to a DNS provider. cmd/devp2p c To publish to CloudFlare, first create an API token in the management console. cmd/devp2p expects the API token in the `CLOUDFLARE_API_TOKEN` environment variable. Now use the following command to upload DNS TXT records via the CloudFlare API: -```shell +```sh devp2p dns to-cloudflare mainnet.nodes.example.org ``` @@ -95,6 +95,6 @@ Note that this command uses the domain name specified during signing. Any existi Once a tree is available through a DNS name, Geth can use it with the `--discovery.dns` command line flag. Node trees are referenced using the `enrtree://` URL scheme. The URL of the tree can be found in the `enrtree-info.json` file created by `devp2p dns sign`. Pass the URL as an argument to the flag in order to make use of the published tree. -```shell +```sh geth --discovery.dns "enrtree://AMBMWDM3J6UY3M32TMMROUNLX6Y3YTLVC3DC6HN2AVG5NHNSAXDW6@mainnet.nodes.example.org" ``` diff --git a/docs/developers/geth-developer/private-network.md b/docs/developers/geth-developer/private-network.md index e5e5b5b127..161c6a7c89 100644 --- a/docs/developers/geth-developer/private-network.md +++ b/docs/developers/geth-developer/private-network.md @@ -17,7 +17,7 @@ A private network is composed of multiple Ethereum nodes that can only connect t Ethereum Mainnet has Network ID = 1. There are also many other networks that Geth can connect to by providing alternative Chain IDs, some are testnets and others are alternative networks built from forks of the Geth source code. Providing a network ID that is not already being used by an existing network or testnet means the nodes using that network ID can only connect to each other, creating a private network. A list of current network IDs is available at [Chainlist.org](https://chainlist.org/). The network ID is controlled using the `networkid` flag, e.g. -```shell +```sh geth --networkid 12345 ``` @@ -49,7 +49,7 @@ Below is an example of a `genesis.json` file for a PoA network. The `config` sec The signer account keys can be generated using the [geth account](/docs/fundamentals/account-management) command (this command can be run multiple times to create more than one signer key). -```shell +```sh geth account new --datadir data ``` @@ -117,13 +117,13 @@ Since Ethash is the default consensus algorithm, no additional parameters need t To create a blockchain node that uses this genesis block, first use `geth init` to import and sets the canonical genesis block for the new chain. This requires the path to `genesis.json` to be passed as an argument. -```shell +```sh geth init --datadir data genesis.json ``` When Geth is started using `--datadir data` the genesis block defined in `genesis.json` will be used. For example: -```shell +```sh geth --datadir data --networkid 12345 ``` @@ -143,7 +143,7 @@ The modification to `genesis.json` is as follows: The upgrade command is: -```shell +```sh geth init --datadir data genesis.json ``` @@ -155,13 +155,13 @@ To configure a bootstrap node, the IP address of the machine the bootstrap node The bootstrap node IP is set using the `--nat` flag (the command below contains an example address - replace it with the correct one). -```shell +```sh geth --datadir data --networkid 15 --nat extip:172.16.254.4 ``` The 'node record' of the bootnode can be extracted using the JS console: -```shell +```sh geth attach data/geth.ipc --exec admin.nodeInfo.enr ``` @@ -174,7 +174,7 @@ This command should print a base64 string such as the following example. Other n If the nodes are intended to connect across the Internet, the bootnode and all other nodes must have public IP addresses assigned, and both TCP and UDP traffic can pass their firewalls. If Internet connectivity is not required or all member nodes connect using well-known IPs, Geth should be set up to restrict peer-to-peer connectivity to an IP subnet. Doing so will further isolate the network and prevents cross-connecting with other blockchain networks in case the nodes are reachable from the Internet. Use the `--netrestrict` flag to configure a whitelist of IP networks: -```shell +```sh geth --netrestrict 172.16.254.0/24 ``` @@ -186,13 +186,13 @@ Before running a member node, it must be initialized with the same genesis file For example, using data directory (example: `data2`) and listening port (example: `30305`): -```shell +```sh geth --datadir data2 --networkid 12345 --port 30305 --bootnodes ``` With the member node running, it is possible to check that it is connected to the bootstrap node or any other node in the network by attaching a console and running `admin.peers`. It may take up to a few seconds for the nodes to get connected. -```shell +```sh geth attach data2/geth.ipc --exec admin.peers ``` @@ -200,7 +200,7 @@ geth attach data2/geth.ipc --exec admin.peers To set up Geth for signing blocks in Clique, a signer account must be available. The account must already be available as a keyfile in the keystore. To use it for signing blocks, it must be unlocked. The following command, for address `0x7df9a875a174b3bc565e6424a0050ebc1b2d1d82` will prompt for the account password, then start signing blocks: -```shell +```sh geth --unlock 0x7df9a875a174b3bc565e6424a0050ebc1b2d1d82 --mine ``` @@ -210,7 +210,7 @@ Mining can be further configured by changing the default gas limit blocks conver For PoW in a simple private network, a single CPU miner instance is enough to create a stable stream of blocks at regular intervals. To start a Geth instance for mining, it can be run with all the usual flags plus the following to configure mining: -```shell +```sh geth --mine --miner.threads=1 --miner.etherbase=0xf41c74c9ae680c1aa78f42e5647a62f353b7bdde ``` @@ -220,13 +220,13 @@ This will start mining bocks and transactions on a single CPU thread, crediting This section will run through the commands for setting up a simple private network of two nodes. Both nodes will run on the local machine using the same genesis block and network ID. The data directories for each node will be named `node1` and `node2`. -```shell +```sh `mkdir node1 node2` ``` Each node will have an associated account that will receive some ether at launch. The following command creates an account for Node 1: -```shell +```sh geth --datadir node1 account new ``` @@ -286,7 +286,7 @@ In each data directory save a copy of the following `genesis.json` to the top le The nodes can now be set up using `geth init` as follows: -```shell +```sh geth init --datadir node1 genesis.json ``` @@ -308,13 +308,13 @@ INFO [05-13|15:41:47.558] Successfully wrote genesis state database=chai The next step is to configure a bootnode. This can be any node, but for this tutorial the developer tool `bootnode` will be used to quickly and easily configure a dedicated bootnode. First the bootnode requires a key, which can be created with the following command, which will save a key to `boot.key`: -```shell +```sh bootnode -genkey boot.key ``` This key can then be used to generate a bootnode as follows: -``` +```sh bootnode -nodekey boot.key -addr :30305 ``` @@ -329,7 +329,7 @@ INFO [05-13|15:50:03.645] New local node record seq=1,652,453 The two nodes can now be started. Open separate terminals for each node, leaving the bootnode running in the original terminal. In each terminal, run the following command (replacing `node1` with `node2` where appropriate, and giving each node a different port ID. The account address and password file for node 1 must also be provided: -```shell +```sh ./geth --datadir node1 --port 30306 --bootnodes enode://f7aba85ba369923bffd3438b4c8fde6b1f02b1c23ea0aac825ed7eac38e6230e5cadcf868e73b0e28710f4c9f685ca71a86a4911461637ae9ab2bd852939b77f@127.0.0.1:0?discport=30305 --networkid 123454321 --unlock 0xC1B2c0dFD381e6aC08f34816172d6343Decbb12b --password node1/password.txt ``` @@ -434,13 +434,13 @@ This should return the following: The account associated with Node 1 was supposed to be funded with some ether at the chain genesis. This can be checked easily using `eth.getBalance()`: -```shell +```sh eth.getBalance(eth.accounts[0]) ``` This account can then be unlocked and some ether sent to Node 2, using the following commands: -```javascript +```js // send some Wei eth.sendTransaction({ to: '0xc94d95a5106270775351eecfe43f97e8e75e59e8', diff --git a/docs/fundamentals/account-management.md b/docs/fundamentals/account-management.md index 00b44d2d7d..12fbf32e0b 100644 --- a/docs/fundamentals/account-management.md +++ b/docs/fundamentals/account-management.md @@ -66,7 +66,7 @@ Clef will request the new password in the terminal. The same can be achieved using raw JSON requests (this example send the request to Clef's exposed HTTP port using curl): -```shell +```sh curl -X POST --data '{"id": 0, "jsonrpc": "2.0", "method": "account_new", "params": []}' http://localhost:8550 -H "Content-Type: application/json" ``` @@ -149,7 +149,7 @@ It is also possible to create an account by importing an existing private key. F Geth requires the private key to be stored as a file which contains the private key as unencrypted canonical elliptic curve bytes encoded into hex (i.e. plain text key without leading 0x). The new account is then saved in encrypted format, protected by a passphrase the user provides on request. As always, this passphrase must be securely and safely backed up - there is no way to retrieve or reset it if it is forgotten! -```shell +```sh $ geth account import --datadir /some-dir ./keyfile ``` @@ -166,7 +166,7 @@ This import/export process is **not necessary** for users transferring accounts It is also possible to import an account in non-interactive mode by saving the account password as plaintext in a `.txt` file and passing its path with the `--password` flag on startup. -```shell +```sh geth account import --password path/password.txt path/keyfile ``` @@ -198,13 +198,13 @@ This will cause Clef to prompt for a new password, twice, and then the Clef mast Geth's `account update` subcommand can also be used to update the account password: -```shell +```sh geth account update a94f5374fce5edbc8e2a8697c15331677e6ebf0b ``` Alternatively, in non-interactive mode the path to a password file containing the account password in unencrypted plaintext can be passed with the `--password` flag: -```shell +```sh geth account update a94f5374fce5edbc8e2a8697c15331677e6ebf0b --password path/password.txt ``` @@ -218,7 +218,7 @@ With Clef, indiscriminate account unlocking is no longer a feature. Instead, Cle Transactions can be sent using raw JSON requests to Geth or using `web3js` in the Javascript console. Either way, with Clef acting as the signer the transactions will not get sent until approval is given in Clef. The following code snippet shows how a transaction could be sent between two accounts in the keystore using the Javascript console. -```shell +```sh var tx = {from: eth.accounts[1], to: eth.accounts[2], value: web3.toWei(5, "ether")} # this will hang until approval is given in the Clef console diff --git a/docs/fundamentals/command-line-options.md b/docs/fundamentals/command-line-options.md index 90553567b2..c77bfd0fab 100644 --- a/docs/fundamentals/command-line-options.md +++ b/docs/fundamentals/command-line-options.md @@ -12,7 +12,7 @@ geth --help ## Commands {#commands} -``` +```sh NAME: geth - the go-ethereum command line interface diff --git a/docs/fundamentals/les.md b/docs/fundamentals/les.md index 413b259bda..7c540f8871 100644 --- a/docs/fundamentals/les.md +++ b/docs/fundamentals/les.md @@ -33,7 +33,7 @@ Recent versions of Geth (>`1.9.14`) unindex older transactions to save disk spac The whole command for starting Geth with a light server could look as follows: -```shell +```sh geth --light.serve 50 --txlookuplimit 0 ``` @@ -41,7 +41,7 @@ geth --light.serve 50 --txlookuplimit 0 Running a light client simply requires Geth to be started in light mode. It is likely that a user would also want to interact with the light node using, for example, RPC. This can be enabled using the `--http` command. -```shell +```sh geth --syncmode light --http --http.api "eth,debug" ``` diff --git a/docs/fundamentals/logs.md b/docs/fundamentals/logs.md index 4b50787691..a7cbd50839 100644 --- a/docs/fundamentals/logs.md +++ b/docs/fundamentals/logs.md @@ -33,7 +33,7 @@ geth --verbosity 5 >> /path/eth.log 2>&1 When Geth starts up it immediately reports a fairly long page of configuration details and status reports that allow the user to confirm Geth is on the right network and operating in its intended modes. The basic structure of a log message is as follows: -``` +```sh MESSAGE_TYPE [MONTH-DAY][TIME] MESSAGE VALUE ``` @@ -41,7 +41,7 @@ Where `MESSAGE_TYPE` can be `INFO`, `WARN`, `ERROR` or `DEBUG`. These tags categ The messages displayed on startup break down as follows: -``` +```terminal INFO [10-04|10:20:52.028] Starting Geth on Ethereum mainnet... INFO [10-04|10:20:52.028] Bumping default cache on mainnet provided=1024 updated=4096 INFO [10-04|10:20:52.030] Maximum peer count ETH=50 LES=0 total=50 @@ -59,7 +59,7 @@ INFO [10-04|10:20:52.372] Persisted trie from memory database nodes=12356 s The logs above show the user that the node is connecting to Ethereum Mainnet and some low level configuration details. The cache size is bumped to the Mainnet default (4096). The maximum peer count is the highest number of peers this node is allowed to connect to and can be used to control the bandwidth requirements of the node. Logs relating to `ethash` are out of date since Ethereum moved to proof-of-stake based consensus and can safely be ignored. -``` +```terminal --------------------------------------------------------------------------------------------------------------------------------------------------------- INFO [10-04|10:20:52.386] Chain ID: 1 (mainnet) INFO [10-04|10:20:52.386] Consensus: Beacon (proof-of-stake), merged from Ethash (proof-of-work) @@ -83,7 +83,7 @@ INFO [10-04|10:20:52.387] - Gray Glacier: 15050000 (https://gith The above block of messages are related to past Ethereum hard forks. The names are the names of the hard forks and the numbers are the blocks at which the hard fork occurs. This means that blocks with numbers that exceed these values have the configuration required by that hard fork. The specification of each hard fork is available at the provided links (and more information is available on [ethereum.org](https://ethereum.org/en/history/)). The message `Consensus: Beacon (proof-of-stake), merged from Ethash (proof-of-work)` indicates that the node requires a Beacon node to follow the canonical chain - Geth cannot participate in consensus on its own. -``` +```terminal INFO [10-04|10:20:52.387] Merge configured: INFO [10-04|10:20:52.387] - Hard-fork specification: https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/paris.md INFO [10-04|10:20:52.387] - Network known to be merged: true @@ -97,7 +97,7 @@ WARN [10-04|10:20:52.388] Engine API enabled protocol=eth The messages above relate to [The Merge](https://ethereum.org/en/upgrades/merge/). The Merge was Ethereum's transition from proof-of-work to proof-of-stake based consensus. In Geth, The Merge came in the form of the Paris hard fork which was triggered at a [terminal total difficulty](https://ethereum.org/en/glossary/#terminal-total-difficulty) of 58750000000000000000000 instead of a preconfigured block number like previous hard forks. The hard fork specification is linked in the log message. The message `network known to be merged: true` indicates that the node is following a chain that has passed the terminal total difficulty and undergone the Paris hard fork. Since September 15 2022 this will always be true for nodes on Ethereum Mainnet (and the merged testnets Sepolia and Goerli). The warning `Engine API enabled` informs the user that Geth is exposing the set of API methods required for communication with a consensus client. -``` +```terminal INFO [10-04|10:20:52.389] Starting peer-to-peer node instance=Geth/v1.11.0-unstable-e004e7d2-20220926/linux-amd64/go1.19.1 INFO [10-04|10:20:52.409] New local node record seq=1,664,875,252,408 id=9aa0e5b14ccd75ec ip=127.0.0.1 udp=30303 tcp=30303 INFO [10-04|10:20:52.409] Started P2P networking self=enode://1ef45ab610c2893b70483bf1791b550e5a93763058b0abf7c6d9e6201e07212d61c4896d64de07342c9df734650e3b40812c2dc01f894b6c385acd180ed30fc8@127.0.0.1:30303 @@ -120,7 +120,7 @@ The default for Geth is to sync in snap mode. This requires a block header to be Assuming Geth has a synced consensus client and some peers it will start importing headers, block bodies and receipts. The log messages for data downloading look as follows: -``` +```terminal INFO [07-28|10:29:49.681] Block synchronisation started INFO [07-28|10:29:50.427] Imported new block headers count=1 elapsed=253.434ms number=12,914,945 hash=ee1a08..9ce38a INFO [07-28|10:30:00.224] Imported new block receipts count=64 elapsed=13.703s number=12,914,881 hash=fef964..d789fc age=18m5s size=7.69MiB @@ -130,7 +130,7 @@ INFO [07-28|10:30:21.665] Imported new state entries For state sync, Geth reports when the state heal is in progress. This can takea long time. The log message includes values for the number of `accounts`, `slots`, `codes` and `nodes` that were downloaded in the current healing phase, and the pending field is the number of state entires waiting to be downloaded. The `pending` value is not necessarily the number of state entries remaining until the healing is finished. As the blockchain progresses the state trie is updated and therefore the data that needs to be downloaded to heal the trie can increase as well as decrease over time. Ultimately, the state should heal faster than the blockchain progresses so the node can get in sync. When the state healing is finished there is a post-sync snapshot generation phase. The node is not in sync until the state healing phase is over. If the node is still regularly reporting `State heal in progress` it is not yet in sync - the state healing is still ongoing. -``` +```terminal INFO [07-28|10:30:21.965] State heal in progress accounts=169,633@7.48MiB slots=57314@4.17MiB codes=4895@38.14MiB nodes=43,293,196@11.70GiB pending=112,626 INFO [09-06|01:31:59.885] Rebuilding state snapshot INFO [09-06|01:31:59.910] Resuming state snapshot generation root=bc64d4..fc1edd accounts=0 slots=0 storage=0.00B dangling=0 elapsed=18.838ms diff --git a/docs/fundamentals/mining.md b/docs/fundamentals/mining.md index 0c93b12a09..7506c9577a 100644 --- a/docs/fundamentals/mining.md +++ b/docs/fundamentals/mining.md @@ -31,19 +31,19 @@ An account to receive block rewards must first be defined. The address of the ac The account address can be provided to `--mining.etherbase` when Geth is started. This instructs Geth to direct any block rewards to this address. Once started, Geth will sync the blockchain. If Geth has not connected to this network before, or if the data directory has been deleted, this can take several days. Also, enable HTTP traffic with the `--http` command. -```shell +```sh geth --http --miner.etherbase 0xC95767AC46EA2A9162F0734651d6cF17e5BfcF10 ``` The progress of the blockchain syncing can be monitored by attaching a JavaScript console in another terminal. More detailed information about the console can be found on the [Javascript Console](/docs/interface/javascript-console) page. To attach and open a console: -```shell +```sh geth attach http://127.0.0.1:8545 ``` Then in the console, to check the sync progress: -```shell +```sh eth.syncing ``` @@ -71,12 +71,12 @@ If the sync is progressing correctly the output will look similar to the followi Once the blockchain is synced, mining can begin. In order to begin mining, Ethminer must be run and connected to Geth in a new terminal. OpenCL can be used for a wide range of GPUs, CUDA can be used specifically for Nvidia GPUs: -```shell +```sh #OpenCL ethminer -v 9 -G -P http://127.0.0.1:8545 ``` -```shell +```sh #CUDA ethminer -v -U -P http://127.0.0.1:8545 ``` @@ -99,7 +99,7 @@ More verbose logs can be configured using `-v` and a value between 0-9. The Etha When Geth is started it is not mining by default. Unless it is specifically instructed to mine, it acts only as a node, not a miner. Geth starts as a (CPU) miner if the `--mine` flag is provided. The `--miner.threads` parameter can be used to set the number parallel mining threads (defaulting to the total number of processor cores). -```shell +```sh geth --mine --miner.threads=4 ``` @@ -116,13 +116,13 @@ Note that mining only makes sense if you are in sync with the network (since you Like with GPU mining, an etherbase account must be set. This defaults to the primary account in the keystore but can be set to an alternative address using the `--miner.etherbase` command: -```shell +```sh geth --miner.etherbase '0xC95767AC46EA2A9162F0734651d6cF17e5BfcF10' --mine ``` If there is no account available an account wil be created and automatically configured to be the coinbase. The Javascript console can be used to reset the etherbase account at runtime: -```shell +```sh miner.setEtherbase(eth.accounts[2]) ``` @@ -130,20 +130,20 @@ Note that your etherbase does not need to be an address of a local account, it j There is an option to add extra data (32 bytes only) to the mined blocks. By convention this is interpreted as a unicode string, so it can be used to add a short vanity tag using `miner.setExtra` in the Javascript console. -```shell +```sh miner.setExtra("ΞTHΞЯSPHΞЯΞ") ``` The console can also be used to check the current hashrate in units H/s (Hash operations per second): -```shell +```sh eth.hashrate 712000 ``` After some blocks have been mined, the etherbase account balance with be >0. Assuming the etherbase is a local account: -```shell +```sh eth.getBalance(eth.coinbase).toNumber(); '34698870000000' ``` diff --git a/docs/fundamentals/node-architecture.md b/docs/fundamentals/node-architecture.md index c41c9e5dcf..a27d5b0627 100644 --- a/docs/fundamentals/node-architecture.md +++ b/docs/fundamentals/node-architecture.md @@ -9,7 +9,7 @@ The execution client (Geth) is responsible for transaction handling, transaction The relationship between the two Ethereum clients is shown in the schematic below. The two clients each connect to their own respective peer-to-peer (P2P) networks. This is because the execution clients gossip transactions over their P2P network enabling them to manage their local transaction pool. The consensus clients gossip blocks over their P2P network, enabling consensus and chain growth. -![node-architecture](/public/images/docs/node_architecture.png) +![node-architecture](/images/docs/node_architecture.png) For this two-client structure to work, consensus clients must be able to pass bundles of transactions to Geth to be executed. Executing the transactions locally is how the client validates that the transactions do not violate any Ethereum rules and that the proposed update to Ethereum’s state is correct. Likewise, when the node is selected to be a block producer the consensus client must be able to request bundles of transactions from Geth to include in the new block. This inter-client communication is handled by a local RPC connection using the [engine API](https://github.com/ethereum/execution-apis/blob/main/src/engine/specification.md). diff --git a/docs/fundamentals/peer-to-peer.md b/docs/fundamentals/peer-to-peer.md index 51287036c2..e7fa274d4c 100644 --- a/docs/fundamentals/peer-to-peer.md +++ b/docs/fundamentals/peer-to-peer.md @@ -12,7 +12,7 @@ These testnets started as proof-of-work and proof-of-authority testnets, but the **Note:** Network selection is not persisted from a config file. To connect to a pre-defined network you must always enable it explicitly, even when using the `--config` flag to load other configuration values. For example: -```shell +```sh # Generate desired config file. You must specify testnet here. geth --goerli --syncmode "full" ... dumpconfig > goerli.toml @@ -26,7 +26,7 @@ Geth continuously attempts to connect to other nodes on the network until it has A new node entering the network for the first time gets introduced to a set of peers by a bootstrap node ("bootnode") whose sole purpose is to connect new nodes to peers. The endpoints for these bootnodes are hardcoded into Geth, but they can also be specified by providing the `--bootnode` flag along with comma-separated bootnode addresses in the form of [enodes](https://ethereum.org/en/developers/docs/networking-layer/network-addresses/#enode) on startup. For example: -```shell +```sh geth --bootnodes enode://pubkey1@ip1:port1,enode://pubkey2@ip2:port2,enode://pubkey3@ip3:port3 ``` @@ -48,7 +48,7 @@ There are occasions when Geth simply fails to connect to peers. The common reaso The `net` module has two attributes that enable checking node connectivity from the [interactive Javascript console](/docs/interface/javascript-console). These are `net.listening` which reports whether the Geth node is listening for inbound requests, and `peerCount` which returns the number of active peers the node is connected to. -```javascript +```js > net.listening true @@ -58,7 +58,7 @@ true Functions in the `admin` module provide more information about the connected peers, including their IP address, port number, supported protocols etc. Calling `admin.peers` returns this information for all connected peers. -``` +```sh > admin.peers [{ ID: 'a4de274d3a159e10c2c9a68c326511236381b84c9ec52e72ad732eb0b2b1a2277938f78593cdbe734e6002bf23114d434a085d260514ab336d4acdc312db671b', @@ -90,7 +90,7 @@ Functions in the `admin` module provide more information about the connected pee The `admin` module also includes functions for gathering information about the local node rather than its peers. For example, `admin.nodeInfo` returns the name and connectivity details for the local node. -``` +```sh > admin.nodeInfo { Name: 'Geth/v0.9.14/darwin/go1.4.2', @@ -112,7 +112,7 @@ It is often useful for developers to connect to private test networks rather tha Geth also supports static nodes. Static nodes are specific peers that are always connected to. Geth reconnects to these peers automatically when it is restarted. Specific nodes are defined to be static nodes by adding their enode addresses to a config file. The easiest way to create this config file is to run: -``` +```sh geth --datadir dumpconfig > config.toml ``` @@ -126,7 +126,7 @@ Ensure the other lines in `config.toml` are also set correctly before starting G Static nodes can also be added at runtime in the Javascript console by passing an enode address to `admin.addPeer()`: -```javascript +```js admin.addPeer( 'enode://f4642fa65af50cfdea8fa7414a5def7bb7991478b768e296f5e4a54e8b995de102e0ceae2e826f293c481b5325f89be6d207b003382e18a8ecba66fbaf6416c0@33.4.2.1:30303' ); @@ -136,7 +136,7 @@ admin.addPeer( It is sometimes desirable to cap the number of peers Geth will connect to in order to limit on the computational and bandwidth cost associated with running a node. By default, the limit is 50 peers, however, this can be updated by passing a value to `--maxpeers`: -```shell +```sh geth --maxpeers 15 ``` @@ -146,7 +146,7 @@ Trusted nodes can be added to `config.toml` in the same way as for static nodes. Nodes can be added using the `admin.addTrustedPeer()` call in the Javascript console and removed using `admin.removeTrustedPeer()` call. -```javascript +```js admin.addTrustedPeer( 'enode://f4642fa65af50cfdea8fa7414a5def7bb7991478b768e296f5e4a54e8b995de102e0ceae2e826f293c481b5325f89be6d207b003382e18a8ecba66fbaf6416c0@33.4.2.1:30303' ); diff --git a/docs/fundamentals/sync-modes.md b/docs/fundamentals/sync-modes.md index c4321e8e00..6e52a6cd68 100644 --- a/docs/fundamentals/sync-modes.md +++ b/docs/fundamentals/sync-modes.md @@ -13,7 +13,7 @@ There are two types of full node that use different mechanisms to sync up to the Snap sync starts froma relatively recent block and syncs from there to the head of the chain, keeping only the most recent 128 block states in memory. The block header to sync up to is provided by the consensus client. Between the initial sync block and the 128 most recent blocks, the node stores occasional snapshots that can be used to rebuild any intermediate state "on-the-fly". The difference between the snap-synced node and a full block-by-block synced node is that a snap synced node started from an initial checkpoint that was more recent than the genesis block. Snap sync is much faster than a full block-by-block sync from genesis. To start a node with snap sync pass `--syncmode snap` at startup. -![state pruning options](/public/images/docs/state-pruning.png) +![state pruning options](/images/docs/state-pruning.png) _This image shows the state stored by each sync-mode - red indicates stored state. The full width of each line represents origin to present head_ Snap sync works by first downloading the headers for a chunk of blocks. Once the headers have been verified, the block bodies and receipts for those blocks are downloaded. In parallel, Geth also sync begins state-sync. In state-sync, Geth first downloads the leaves of the state trie for each block without the intermediate nodes along with a range proof. The state trie is then regenerated locally. @@ -48,10 +48,6 @@ A light node syncs very quickly and stores the bare minimum of blockchain data. Read more about light nodes on our [LES page](/docs/interface/les). -The following diagram shows how Geth stores state data in the different sync modes: - -![state pruning options](/public/images/docs/state-pruning.png) - ## Consensus layer syncing {#consensus-layer-syncing} Now that Ethereum has switched to proof-of-stake, all consensus logic and block propagation is handled by consensus clients. This means that syncing the blockchain is a process shared between the consensus and execution clients. Blocks are downloaded by the consensus client and verified by the execution client. In order for Geth to sync, it requires a header from its connected consensus client. Geth does not import any data until it is instructed to by the consensus client. **Geth cannot sync without being connected to a consensus client**. This includes block-by-block syncing from genesis. The consensus client is required to provide a header from the tip of the chain that Geth can sync towards - without it, Geth cannot know that it has followed the right sequence of blocks. diff --git a/docs/getting-started/consensus-clients.md b/docs/getting-started/consensus-clients.md index 86c531b619..2772060950 100644 --- a/docs/getting-started/consensus-clients.md +++ b/docs/getting-started/consensus-clients.md @@ -17,7 +17,7 @@ The authorization must then be applied to a specific address/port. This is achie A complete command to start Geth so that it can connect to a consensus client looks as follows: -```shell +```sh geth --authrpc.addr localhost --authrpc.port 8551 --authrpc.vhosts localhost --authrpc.jwtsecret /tmp/jwtsecret ``` @@ -58,7 +58,7 @@ Please see the pages on [syncing](/docs/fundamentals/sync-modes) for more detail Geth is the portal for users to send transactions to Ethereum. The Geth Javascript console is available for this purpose, and the majority of the [JSON-RPC API](/docs/rpc/server) will remain available via web3js or HTTP requests with commands as json payloads. These options are explained in more detail on the [Javascript Console page](/docs/interface/javascript-console). The Javascript console can be started using the following command in a separate terminal (assuming Geth's IPC file is saved in `datadir`): -```shell +```sh geth attach datadir/geth.ipc ``` diff --git a/docs/getting-started/index.md b/docs/getting-started/index.md index 7fd157227d..4531ce1df4 100644 --- a/docs/getting-started/index.md +++ b/docs/getting-started/index.md @@ -37,7 +37,7 @@ There are several methods for generating accounts in Geth. This tutorial demonst An account is a pair of keys (public and private). Clef needs to know where to save these keys to so that they can be retrieved later. This information is passed to Clef as an argument. This is achieved using the following command: -```shell +```sh clef newaccount --keystore geth-tutorial/keystore ``` @@ -82,7 +82,7 @@ The previous commands used Clef's `newaccount` function to add new key pairs to To start Clef, run the Clef executable passing as arguments the keystore file location, config directory location and a chain ID. The config directory was automatically created inside the `geth-tutorial` directory during the previous step. The [chain ID](https://chainlist.org/) is an integer that defines which Ethereum network to connect to. Ethereum mainnet has chain ID 1. In this tutorial Chain ID 11155111 is used which is that of the Sepolia testnet. It is very important that this chain ID parameter is set to 11155111 - Clef uses the chain ID to sign messages so it must be correct. The following command starts Clef on Sepolia: -```shell +```sh clef --keystore geth-tutorial/keystore --configdir geth-tutorial/clef --chainid 11155111 ``` @@ -115,7 +115,7 @@ Geth is the Ethereum client that will connect the computer to the Ethereum netwo The following command should be run in a new terminal, separate to the one running Clef: -```shell +```sh geth --sepolia --datadir geth-tutorial --authrpc.addr localhost --authrpc.port 8551 --authrpc.vhosts localhost --authrpc.jwtsecret geth-tutorial/jwtsecret --http --http.api eth,net --signer=geth-tutorial/clef/clef.ipc --http ``` @@ -153,14 +153,14 @@ INFO [04-29][15:54:19:656] Imported new block receipts count=698 elapsed=4.46 This message will be displayed periodically until state healing has finished: -``` +```sh INFO [10-20|20:20:09.510] State heal in progress accounts=313,309@17.95MiB slots=363,525@28.77MiB codes=7222@50.73MiB nodes=49,616,912@12.67GiB pending=29805 ``` When state healing is finished, the node is in sync and ready to use. Sending an empty Curl request to the http server provides a quick way to confirm that this too has been started without any issues. In a third terminal, the following command can be run: -```shell +```sh curl http://localhost:8545 ``` @@ -186,7 +186,7 @@ Geth provides a Javascript console that exposes the Web3.js API. This means that This tutorial will use the HTTP option. Note that the terminals running Geth and Clef should both still be active. In a new (third) terminal, the following command can be run to start the console and connect it to Geth using the exposed http port: -```shell +```sh geth attach http://127.0.0.1:8545 ``` @@ -208,7 +208,7 @@ The console is now active and connected to Geth. It can now be used to interact In this tutorial, the accounts are managed using Clef. This means that requesting information about the accounts requires explicit approval in Clef, which should still be running in its own terminal. Earlier in this tutorial, two accounts were created using Clef. The following command will display the addresses of those two accounts and any others that might have been added to the keystore before or since. -```javascript +```js eth.accounts; ``` @@ -245,7 +245,7 @@ It is also possible for this request to time out if the Clef approval took too l Having confirmed that the two addresses created earlier are indeed in the keystore and accessible through the Javascript console, it is possible to retrieve information about how much ether they own. The Sepolia faucet should have sent 0.05 ETH to the address provided, meaning that the balance of one of the accounts should be at least 0.05 ether and the other should be 0. There are other faucets available that may dispense more ETH per request, and multipel requests can be made to accumulate more ETH. The following command displays the account balance in the console: -```javascript +```js web3.fromWei(eth.getBalance('0xca57F3b40B42FCce3c37B8D18aDBca5260ca72EC'), 'ether'); ``` @@ -265,7 +265,7 @@ Repeating the command for the other (empty) account should yield: The command `eth.sendTransaction` can be used to send some ether from one address to another. This command takes three arguments: `from`, `to` and `value`. These define the sender and recipient addresses (as strings) and the amount of Wei to transfer. It is far less error prone to enter the transaction value in units of ether rather than Wei, so the value field can take the return value from the `toWei` function. The following command, run in the Javascript console, sends 0.1 ether from one of the accounts in the Clef keystore to the other. Note that the addresses here are examples - the user must replace the address in the `from` field with the address currently owning 1 ether, and the address in the `to` field with the address currently holding 0 ether. -```javascript +```js eth.sendTransaction({ from: '0xca57f3b40b42fcce3c37b8d18adbca5260ca72ec', to: '0xce8dba5e4157c2b284d8853afeeea259344c1653', @@ -335,7 +335,7 @@ It is also advised to check the account balances using Geth by repeating the ins The transaction hash is a unique identifier for this specific transaction that can be used later to retrieve the transaction details. For example, the transaction details can be viewed by pasting this hash into the [Sepolia block explorer](https://sepolia.etherscan.io/). The same information can also be retrieved directly from the Geth node. The hash returned in the previous step can be provided as an argument to `eth.getTransaction` to return the transaction information: -```javascript +```js eth.getTransaction('0x99d489d0bd984915fd370b307c2d39320860950666aac3f261921113ae4f95bb'); ``` @@ -373,7 +373,7 @@ Up to this point this tutorial has interacted with Geth using the convenience li The command below returns the balance of the given account. This is a HTTP POST request to the local port 8545. The `-H` flag is for header information. It is used here to define the format of the incoming payload, which is JSON. The `--data` flag defines the content of the payload, which is a JSON object. That JSON object contains four fields: `jsonrpc` defines the spec version for the JSON-RPC API, `method` is the specific function being invoked, `params` are the function arguments, and `id` is used for ordering transactions. The two arguments passed to `eth_getBalance` are the account address whose balance to check and the block to query (here `latest` is used to check the balance in the most recently mined block). -```shell +```sh curl -X POST http://127.0.0.1:8545 \ -H "Content-Type: application/json" \ --data '{"jsonrpc":"2.0", "method":"eth_getBalance", "params":["0xca57f3b40b42fcce3c37b8d18adbca5260ca72ec","latest"], "id":1}' @@ -387,7 +387,7 @@ A successful call will return a response like the one below: The balance is in the `result` field in the returned JSON object. However, it is denominated in Wei and presented as a hexadecimal string. There are many options for converting this value to a decimal in units of ether, for example by opening a Python console and running: -```python +```py 0xc7d54951f87f7c0 / 1e18 ``` @@ -401,7 +401,7 @@ This returns the balance in ether: The curl command below returns the list of all accounts. -```shell +```sh curl -X POST http://127.0.0.1:8545 \ -H "Content-Type: application/json" \ --data '{"jsonrpc":"2.0", "method":"eth_accounts","params":[], "id":1}' @@ -417,7 +417,7 @@ This requires approval in Clef. Once approved, the following information is retu Sending a transaction between accounts can also be achieved using Curl. Notice that the value of the transaction is a hexadecimal string in units of Wei. To transfer 0.1 ether, it is first necessary to convert this to Wei by multiplying by 1018 then converting to hex. 0.1 ether is `"0x16345785d8a0000"` in hex. As before, update the `to` and `from` fields with the addresses in the Clef keystore. -```shell +```sh curl -X POST http://127.0.0.1:8545 \ -H "Content-Type: application/json" \ --data '{"jsonrpc":"2.0", "method":"eth_sendTransaction", "params":[{"from": "0xca57f3b40b42fcce3c37b8d18adbca5260ca72ec","to": "0xce8dba5e4157c2b284d8853afeeea259344c1653","value": "0x16345785d8a0000"}], "id":1}' diff --git a/docs/getting-started/installing-geth.md b/docs/getting-started/installing-geth.md index f0041a4ae5..2c6e2d4a3f 100644 --- a/docs/getting-started/installing-geth.md +++ b/docs/getting-started/installing-geth.md @@ -11,20 +11,20 @@ There are several ways to install Geth, including via a package manager, downloa The easiest way to install go-ethereum is to use the Geth Homebrew tap. The first step is to check that Homebrew is installed. The following command should return a version number. -```shell +```sh brew -v ``` If a version number is returned, then Homebrew is installed. If not, Homebrew can be installed by following the instructions [here](https://brew.sh/). With Homebrew installed, the following commands add the Geth tap and install Geth: -```shell +```sh brew tap ethereum/ethereum brew install ethereum ``` The previous command installs the latest stable release. Developers that wish to install the most up-to-date version can install the Geth repository's master branch by adding the `--devel` parameter to the install command: -```shell +```sh brew install ethereum --devel ``` @@ -32,7 +32,7 @@ These commands install the core Geth software and the following developer tools: Updating an existing Geth installation to the latest version can be achieved by stopping the node and running the following commands: -```shell +```sh brew update brew upgrade brew reinstall ethereum @@ -46,20 +46,20 @@ The easiest way to install Geth on Ubuntu-based distributions is with the built- The following command enables the launchpad repository: -```shell +```sh sudo add-apt-repository -y ppa:ethereum/ethereum ``` Then, to install the stable version of go-ethereum: -```shell +```sh sudo apt-get update sudo apt-get install ethereum ``` Or, alternatively the develop version: -```shell +```sh sudo apt-get update sudo apt-get install ethereum-unstable ``` @@ -68,7 +68,7 @@ These commands install the core Geth software and the following developer tools: Updating an existing Geth installation to the latest version can be achieved by stopping the node and running the following commands: -```shell +```sh sudo apt-get update sudo apt-get install ethereum sudo apt-get upgrade geth @@ -86,7 +86,7 @@ Updating an existing Geth installation can be achieved by stopping the node, dow Geth can be installed on FreeBSD using the package manager `pkg`. The following command downloads and installs Geth: -```shell +```sh pkg install go-ethereum ``` @@ -96,7 +96,7 @@ The full list of command line options can be viewed [here](/docs/fundamentals/Co Updating an existing Geth installation to the latest version can be achieved by stopping the node and running the following commands: -```shell +```sh pkg upgrade ``` @@ -106,7 +106,7 @@ When the node is started again, Geth will automatically use all the data from th Installing Geth using ports, simply requires navigating to the `net-p2p/go-ethereum` ports directory and running `make install` as root: -```shell +```sh cd /usr/ports/net-p2p/go-ethereum make install ``` @@ -117,7 +117,7 @@ The full list of command line options can be viewed [here](/docs/fundamentals/Co Updating an existing Geth installation can be achieved by stopping the node and running the following command: -```shell +```sh portsnap fetch ``` @@ -127,7 +127,7 @@ When the node is started again, Geth will automatically use all the data from th The Geth package is available from the [community repo](https://www.archlinux.org/packages/community/x86_64/geth/). It can be installed by running: -```shell +```sh pacman -S geth ``` @@ -137,7 +137,7 @@ The full list of command line options can be viewed [here](/docs/fundamentals/Co Updating an existing Geth installation can be achieved by stopping the node and running the following command: -```shell +```sh sudo pacman -Sy ``` @@ -168,7 +168,7 @@ A Docker image with recent snapshot builds from our `develop` branch is maintain Pulling an image and starting a node is achieved by running these commands: -```shell +```sh docker pull ethereum/client-go docker run -it -p 30303:30303 ethereum/client-go ``` @@ -191,7 +191,7 @@ The image has the following ports automatically exposed: Updating Geth to the latest version simply requires stopping the container, pulling the latest version from Docker and running it: -```shell +```sh docker stop ethereum/client-go docker pull ethereum/client-go:latest docker run -it -p 30303:30303 ethereum/client-go @@ -205,25 +205,25 @@ Geth is written in [Go](https://golang.org/), so building from source code requi With Go installed, Geth can be downloaded into a `GOPATH` workspace via: -```shell +```sh go get -d github.com/ethereum/go-ethereum ``` You can also install specific versions via: -```shell +```sh go get -d github.com/ethereum/go-ethereum@v1.9.21 ``` The above commands do not build any executables. To do that you can either build one specifically: -```shell +```sh go install github.com/ethereum/go-ethereum/cmd/geth ``` Alternatively, the following command, run in the project root directory (`ethereum/go-ethereum`) in the GO workspace, builds the entire project and installs Geth and all the developer tools: -```shell +```sh go install ./... ``` @@ -232,7 +232,7 @@ Another common error is: `go: cannot use path@version syntax in GOPATH mode`. Th Updating an existing Geth installation can be achieved using `go get`: -```shell +```sh go get -u github.com/ethereum/go-ethereum ``` @@ -240,7 +240,7 @@ go get -u github.com/ethereum/go-ethereum The Chocolatey package manager provides an easy way to install the required build tools. Chocolatey can be installed by following these [instructions](https://chocolatey.org). Then, to install the build tool the following commands can be run in an Administrator command prompt: -``` +```sh C:\Windows\system32> choco install git C:\Windows\system32> choco install golang C:\Windows\system32> choco install mingw @@ -248,7 +248,7 @@ C:\Windows\system32> choco install mingw Installing these packages sets up the path environment variables. To get the new path a new command prompt must be opened. To install Geth, a Go workspace directory must first be created, then the Geth source code can be created and built. -``` +```sh C:\Users\xxx> mkdir src\github.com\ethereum C:\Users\xxx> git clone https://github.com/ethereum/go-ethereum src\github.com\ethereum\go-ethereum C:\Users\xxx> cd src\github.com\ethereum\go-ethereum @@ -260,26 +260,26 @@ C:\Users\xxx\src\github.com\ethereum\go-ethereum> go install -v ./cmd/... To build Geth from source code on FreeBSD, the Geth Github repository can be cloned into a local directory. -```shell +```sh git clone https://github.com/ethereum/go-ethereum ``` Then, the Go compiler can be used to build Geth: -```shell +```sh pkg install go ``` If the Go version currently installed is >= 1.5, Geth can be built using the following command: -```shell +```sh cd go-ethereum make geth ``` If the installed Go version is < 1.5 (quarterly packages, for example), the following command can be used instead: -```shell +```sh cd go-ethereum CC=clang make geth ``` @@ -295,7 +295,7 @@ build/bin/geth Geth can also be built without using Go workspaces. In this case, the repository should be cloned to a local repository. Then, the command `make geth` configures everything for a temporary build and cleans up afterwards. This method of building only works on UNIX-like operating systems, and a Go installation is still required. -```shell +```sh git clone https://github.com/ethereum/go-ethereum.git cd go-ethereum make geth @@ -305,7 +305,7 @@ These commands create a Geth executable file in the `go-ethereum/build/bin` fold To update an existing Geth installation simply stop the node, navigate to the project root directory and pull the latest version from the Geth Github repository. then rebuild and restart the node. -```shell +```sh cd go-ethereum git pull make geth diff --git a/docs/interacting-with-geth/javascript-console-contracts.md b/docs/interacting-with-geth/javascript-console-contracts.md index f95d14a936..7e447ade90 100644 --- a/docs/interacting-with-geth/javascript-console-contracts.md +++ b/docs/interacting-with-geth/javascript-console-contracts.md @@ -9,7 +9,7 @@ The [Introduction to the Javascript console](/docs/interacting-with-geth/javascr First we need a contract to deploy. We can use the well-known `Storage.sol` contract written in Solidity. The following Solidity code can be copied and pasted into a text editor and saved as `go-ethereum/storage-contract/Storage.sol`. -```Solidity +```js // SPDX License-Identifier: GPL 3.0 pragma solidity ^0.8.0; diff --git a/docs/interacting-with-geth/javascript-console.md b/docs/interacting-with-geth/javascript-console.md index bbfe254538..30d2e53a9e 100644 --- a/docs/interacting-with-geth/javascript-console.md +++ b/docs/interacting-with-geth/javascript-console.md @@ -5,7 +5,7 @@ description: How to interact with Geth using Javascript Geth responds to instructions encoded as JSON objects as defined in the [JSON-RPC-API](/docs/rpc/server). A Geth user can send these instructions directly, for example over HTTP using tools like [Curl](https://github.com/curl/curl). The code snippet below shows a request for an account balance sent to a local Geth node with the HTTP port `8545` exposed. -``` +```sh curl --data '{"jsonrpc":"2.0","method":"eth_getBalance", "params": ["0x9b1d35635cc34752ca54713bb99d38614f63c955", "latest"], "id":2}' -H "Content-Type: application/json" localhost:8545 ``` @@ -24,7 +24,7 @@ The purpose of Geth's Javascript console is to provide a built-in environment to There are two ways to start an interactive session using Geth console. The first is to provide the `console` command when Geth is started up. This starts the node and runs the console in the same terminal. It is therefore convenient to suppress the logs from the node to prevent them from obscuring the console. If the logs are not needed, they can be redirected to the `dev/null` path, effectively muting them. Alternatively, if the logs are required they can be redirected to a text file. The level of detail provided in the logs can be adjusted by providing a value between 1-6 to the `--verbosity` flag as in the example below: -```shell +```sh # to mute logs geth console 2> /dev/null @@ -34,7 +34,7 @@ geth console --verbosity 3 2> geth-logs.log Alternatively, a Javascript console can be attached to an existing Geth instance (i.e. one that is running in another terminal or remotely). In this case, `geth attach` can be used to open a Javascript console connected to the Geth node. It is also necessary to define the method used to connect the console to the node. Geth supports websockets, HTTP or local IPC. To use HTTP or Websockets, these must be enabled at the node by providing the following flags at startup: -```shell +```sh # enable websockets geth --ws @@ -44,7 +44,7 @@ geth --http The commands above use default HTTP/WS endpoints and only enables the default JSON-RPC libraries. To update the Websockets or HTTP endpoints used, or to add support for additional libraries, the `.addr` `.port` and `.api` flags can be used as follows: -```shell +```sh # define a custom http adress, custom http port and enable libraries geth --http --http.addr 192.60.52.21 --http.port 8552 --http.api eth,web3,admin @@ -56,7 +56,7 @@ It is important to note that by default **some functionality, including account The Javascript console can also be connected to a Geth node using IPC. When Geth is started, a `geth.ipc` file is automatically generated and saved to the data directory. This file, or a custom path to a specific ipc file can be passed to `geth attach` as follows: -```shell +```sh geth attach datadir/geth.ipc ``` @@ -99,7 +99,7 @@ It is also possible to load pre-written Javascript files into the console by pas when starting the console. This is useful for setting up complex contract objects or loading frequently-used functions. -```shell +```sh geth console --preload "/my/scripts/folder/utils.js" ``` @@ -114,17 +114,17 @@ to `geth attach` or `geth console`. The result is displayed directly in the term For example, to display the accounts in the keystore: -```shell +```sh geth attach --exec eth.accounts ``` -```shell +```sh geth attach --exec eth.blockNumber ``` The same syntax can be used to execute a local script file with more complex statements on a remote node over http, for example: -```shell +```sh geth attach http://geth.example.org:8545 --exec 'loadScript("/tmp/checkbalances.js")' geth attach http://geth.example.org:8545 --jspath "/tmp" --exec 'loadScript("checkbalances.js")' diff --git a/docs/interacting-with-geth/rpc/batch.md b/docs/interacting-with-geth/rpc/batch.md index a347bfc5aa..3afd8ae08f 100644 --- a/docs/interacting-with-geth/rpc/batch.md +++ b/docs/interacting-with-geth/rpc/batch.md @@ -5,7 +5,7 @@ description: How to make batch requests using JSON-RPC API The JSON-RPC [specification](https://www.jsonrpc.org/specification#batch) outlines how clients can send multiple requests at the same time by filling the request objects in an array. This feature is implemented by Geth's API and can be used to cut network delays. Batching offers visible speed-ups specially when used for fetching larger amounts of mostly independent data objects. Below is an example for fetching a list of blocks in JS: -```javascript +```js import fetch from 'node-fetch'; async function main() { diff --git a/docs/interacting-with-geth/rpc/graphql.md b/docs/interacting-with-geth/rpc/graphql.md index be84f582f0..52fb2f60b3 100644 --- a/docs/interacting-with-geth/rpc/graphql.md +++ b/docs/interacting-with-geth/rpc/graphql.md @@ -7,13 +7,13 @@ In addition to the [JSON-RPC APIs](/docs/interacting_with_geth/RPC/server), Geth The GraphQL endpoint piggybacks on the HTTP transport used by JSON-RPC. Hence the relevant `--http` flags and the `--graphql` flag should be passed to Geth: -```bash +```sh geth --http --graphql ``` Now queries can be raised against `http://localhost:8545/graphql`. To change the port, provide a custom port number to `--http.port`, e.g.: -```bash +```sh geth --http --http.port 9545 --graphql ``` @@ -46,20 +46,20 @@ Reading out data from Geth is the biggest use-case for GraphQL. In addition to u For example, the code snippet below shows how to obtain the latest block number using Curl. Note the use of a JSON object for the data section: -```bash +```sh ❯ curl -X POST http://localhost:8545/graphql -H "Content-Type: application/json" --data '{ "query": "query { block { number } }" }' {"data":{"block":{"number":6004069}}} ``` Alternatively store the JSON-ified query in a file (let's call it `block-num.query`) and do: -```bash +```sh ❯ curl -X POST http://localhost:8545/graphql -H "Content-Type: application/json" --data '@block-num.query' ``` Executing a simple query in JS looks as follows. Here the lightweight library `graphql-request` is used to perform the request. Note the use of variables instead of hardcoding the block number in the query: -```javascript +```js const { request, gql } = require('graphql-request'); const query = gql` diff --git a/docs/interacting-with-geth/rpc/ns-admin.md b/docs/interacting-with-geth/rpc/ns-admin.md index 7f6c46873e..24dabc9ea0 100644 --- a/docs/interacting-with-geth/rpc/ns-admin.md +++ b/docs/interacting-with-geth/rpc/ns-admin.md @@ -19,7 +19,7 @@ The method accepts a single argument, the [`enode`](https://ethereum.org/en/deve ### Example -```javascript +```js > admin.addPeer("enode://a979fb575495b8d6db44f750317d0f4622bf4c2aa3365d6af7c284339968eef29b69ad0dce72a4d8db5ebb4968de0e3bec910127f134779fbcb0cb6d3331163c@52.16.188.185:30303") true ``` @@ -45,7 +45,7 @@ The `datadir` administrative property can be queried for the absolute path the r ### Example -```javascript +```js > admin.datadir "/home/john/.ethereum" ``` @@ -80,7 +80,7 @@ The `nodeInfo` administrative property can be queried for all the information kn ### Example -```javascript +```js > admin.nodeInfo { enode: "enode://44826a5d6a55f88a18298bca4773fca5749cdc3a5c9f308aa7d810e9b31123f3e7c5fba0b1d70aac5308426f47df2a128a6747040a3815cc7dd7167d03be320d@[::]:30303", @@ -124,7 +124,7 @@ The `peers` administrative property can be queried for all the information known ### Example -```javascript +```js > admin.peers [{ caps: ["eth/61", "eth/62", "eth/63"], @@ -196,7 +196,7 @@ The method returns a boolean flag specifying whether the HTTP RPC listener was o ### Example -```javascript +```js > admin.startHTTP("127.0.0.1", 8545) true ``` @@ -220,7 +220,7 @@ The method returns a boolean flag specifying whether the WebSocket RPC listener ### Example -```javascript +```js > admin.startWS("127.0.0.1", 8546) true ``` @@ -237,7 +237,7 @@ The `stopHTTP` administrative method closes the currently open HTTP RPC endpoint ### Example -```javascript +```js > admin.stopHTTP() true ``` @@ -254,7 +254,7 @@ The `stopWS` administrative method closes the currently open WebSocket RPC endpo ### Example -```javascript +```js > admin.stopWS() true ``` diff --git a/docs/interacting-with-geth/rpc/ns-clique.md b/docs/interacting-with-geth/rpc/ns-clique.md index a6455d6d55..3d9c0bab66 100644 --- a/docs/interacting-with-geth/rpc/ns-clique.md +++ b/docs/interacting-with-geth/rpc/ns-clique.md @@ -16,7 +16,7 @@ Retrieves a snapshot of all clique state at a given block. Example: -```javascript +```js > clique.getSnapshot(5463755) { hash: "0x018194fc50ca62d973e2f85cffef1e6811278ffd2040a4460537f8dbec3d5efc", @@ -120,7 +120,7 @@ This is a debugging method which returns statistics about signer activity for th Example: -``` +```js > clique.status() { inturnPercent: 100, diff --git a/docs/interacting-with-geth/rpc/ns-debug.md b/docs/interacting-with-geth/rpc/ns-debug.md index 774e105c7d..a35b59f2b7 100644 --- a/docs/interacting-with-geth/rpc/ns-debug.md +++ b/docs/interacting-with-geth/rpc/ns-debug.md @@ -29,7 +29,7 @@ The location is specified as `:`. Example: -``` javascript +``` js > debug.backtraceAt("server.go:443") ``` @@ -120,7 +120,7 @@ Retrieves the state that corresponds to the block number and returns a list of a #### Example -```javascript +```js > debug.dumpBlock(10) { fff7ac99c8e4feb60c9750054bdc14ce1857f181: { @@ -385,12 +385,14 @@ When JS-based tracing (see below) was first implemented, the intended usecase wa This means that this method is only 'useful' for callers who control the node -- at least sufficiently to be able to read the artefacts from the filesystem after the fact. The method can be used to dump a certain transaction out of a given block: -``` + +```js > debug.standardTraceBlockToFile("0x0bbe9f1484668a2bf159c63f0cf556ed8c8282f99e3ffdb03ad2175a863bca63", {txHash:"0x4049f61ffbb0747bb88dc1c85dd6686ebf225a3c10c282c45a8e0c644739f7e9", disableMemory:true}) ["/tmp/block_0x0bbe9f14-14-0x4049f61f-099048234"] ``` Or all txs from a block: -``` + +```js > debug.standardTraceBlockToFile("0x0bbe9f1484668a2bf159c63f0cf556ed8c8282f99e3ffdb03ad2175a863bca63", {disableMemory:true}) ["/tmp/block_0x0bbe9f14-0-0xb4502ea7-409046657", "/tmp/block_0x0bbe9f14-1-0xe839be8f-954614764", "/tmp/block_0x0bbe9f14-2-0xc6e2052f-542255195", "/tmp/block_0x0bbe9f14-3-0x01b7f3fe-209673214", "/tmp/block_0x0bbe9f14-4-0x0f290422-320999749", "/tmp/block_0x0bbe9f14-5-0x2dc0fb80-844117472", "/tmp/block_0x0bbe9f14-6-0x35542da1-256306111", "/tmp/block_0x0bbe9f14-7-0x3e199a08-086370834", "/tmp/block_0x0bbe9f14-8-0x87778b88-194603593", "/tmp/block_0x0bbe9f14-9-0xbcb081ba-629580052", "/tmp/block_0x0bbe9f14-10-0xc254381a-578605923", "/tmp/block_0x0bbe9f14-11-0xcc434d58-405931366", "/tmp/block_0x0bbe9f14-12-0xce61967d-874423181", "/tmp/block_0x0bbe9f14-13-0x05a20b35-267153288", "/tmp/block_0x0bbe9f14-14-0x4049f61f-606653767", "/tmp/block_0x0bbe9f14-15-0x46d473d2-614457338", "/tmp/block_0x0bbe9f14-16-0x35cf5500-411906321", "/tmp/block_0x0bbe9f14-17-0x79222961-278569788", "/tmp/block_0x0bbe9f14-18-0xad84e7b1-095032683", "/tmp/block_0x0bbe9f14-19-0x4bd48260-019097038", "/tmp/block_0x0bbe9f14-20-0x1517411d-292624085", "/tmp/block_0x0bbe9f14-21-0x6857e350-971385904", "/tmp/block_0x0bbe9f14-22-0xbe3ae2ca-236639695"] @@ -399,7 +401,7 @@ Files are created in a temp-location, with the naming standard `block_ debug.traceBlock("0xblock_rlp") { gas: 85301, @@ -580,7 +583,7 @@ The `debug_traceCall` method lets you run an `eth_call` within the context of th No specific call options: -```sh +```js > debug.traceCall(null, "0x0") { failed: false, @@ -591,7 +594,7 @@ No specific call options: ``` Tracing a call with a destination and specific sender, disabling the storage and memory output (less data returned over RPC) -```sh +```js debug.traceCall({ "from": "0xdeadbeef29292929192939494959594933929292", "to": "0xde929f939d939d393f939393f93939f393929023", @@ -603,7 +606,7 @@ debug.traceCall({ It is possible to supply 'overrides' for both state-data (accounts/storage) and block data (number, timestamp etc). In the example below, a call which executes `NUMBER` is performed, and the overridden number is placed on the stack: -```sh +```js > debug.traceCall({ from: eth.accounts[0], value:"0x1", @@ -747,25 +750,25 @@ Sets the logging verbosity pattern. If you want to see messages from a particular Go package (directory) and all subdirectories, use: -``` javascript +``` js > debug.vmodule("eth/*=6") ``` If you want to restrict messages to a particular package (e.g. p2p) but exclude subdirectories, use: -``` javascript +``` js > debug.vmodule("p2p=6") ``` If you want to see log messages from a particular source file, use -``` javascript +``` js > debug.vmodule("server.go=6") ``` You can compose these basic patterns. If you want to see all output from peer.go in a package below eth (eth/peer.go, eth/downloader/peer.go) as well as output from package p2p at level <= 5, use: -``` javascript +``` js debug.vmodule("eth/*/peer.go=6,p2p=5") ``` diff --git a/docs/interacting-with-geth/rpc/ns-eth.md b/docs/interacting-with-geth/rpc/ns-eth.md index 691d2d2af5..0b737a12ab 100644 --- a/docs/interacting-with-geth/rpc/ns-eth.md +++ b/docs/interacting-with-geth/rpc/ns-eth.md @@ -69,7 +69,7 @@ The method returns a single `Binary` consisting the return value of the executed With a synced Rinkeby node with RPC exposed on localhost (`geth --rinkeby --http`) we can make a call against the [CheckpointOracle](https://rinkeby.etherscan.io/address/0xebe8efa441b9302a0d7eaecc277c09d20d684540) to retrieve the list of administrators: -``` +```sh $ curl --data '{"method":"eth_call","params":[{"to":"0xebe8efa441b9302a0d7eaecc277c09d20d684540","data":"0x45848dfc"},"latest"],"id":1,"jsonrpc":"2.0"}' -H "Content-Type: application/json" -X POST localhost:8545 ``` @@ -85,7 +85,7 @@ And the result is an Ethereum ABI encoded list of accounts: Just for the sake of completeness, decoded the response is: -``` +```sh 0xd9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3, 0x78d1ad571a1a09d60d9bbf25894b44e4c8859595, 0x286834935f4a8cfb4ff4c77d5770c2775ae2b0e7, @@ -98,7 +98,7 @@ The above _simple example_ showed how to call a method already exposed by an on- We can gut out the [original](https://github.com/ethereum/go-ethereum/blob/master/contracts/checkpointoracle/contract/oracle.sol) checkpoint oracle contract with one that retains the same fields (to retain the same storage layout), but one that includes a different method set: -``` +```js pragma solidity ^0.5.10; contract CheckpointOracle { @@ -120,7 +120,7 @@ contract CheckpointOracle { With a synced Rinkeby node with RPC exposed on localhost (`geth --rinkeby --http`) we can make a call against the live [Checkpoint Oracle](https://rinkeby.etherscan.io/address/0xebe8efa441b9302a0d7eaecc277c09d20d684540), but override its byte code with our own version that has an accessor for the voting threshold field: -``` +```sh $ curl --data '{"method":"eth_call","params":[{"to":"0xebe8efa441b9302a0d7eaecc277c09d20d684540","data":"0x0be5b6ba"}, "latest", {"0xebe8efa441b9302a0d7eaecc277c09d20d684540": {"code":"0x6080604052348015600f57600080fd5b506004361060285760003560e01c80630be5b6ba14602d575b600080fd5b60336045565b60408051918252519081900360200190f35b6007549056fea265627a7a723058206f26bd0433456354d8d1228d8fe524678a8aeeb0594851395bdbd35efc2a65f164736f6c634300050a0032"}}],"id":1,"jsonrpc":"2.0"}' -H "Content-Type: application/json" -X POST localhost:8545 ``` diff --git a/docs/interacting-with-geth/rpc/ns-les.md b/docs/interacting-with-geth/rpc/ns-les.md index 5c5a912311..e88065216e 100644 --- a/docs/interacting-with-geth/rpc/ns-les.md +++ b/docs/interacting-with-geth/rpc/ns-les.md @@ -17,7 +17,7 @@ Get information about currently connected and total/individual allowed connectio ### Example -```javascript +```js > les.serverInfo { freeClientCapacity: 16000, @@ -41,7 +41,7 @@ Get individual client information (connection, balance, pricing) on the specifie ### Example -```javascript +```js > les.clientInfo([]) { 37078bf8ea160a2b3d129bb4f3a930ce002356f83b820f467a07c1fe291531ea: { @@ -113,7 +113,7 @@ Get individual client information on clients with a positive balance in the spec ### Example -```javascript +```js > les.priorityClientInfo("0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", 100) { 37078bf8ea160a2b3d129bb4f3a930ce002356f83b820f467a07c1fe291531ea: { @@ -208,7 +208,7 @@ Add signed value to the token balance of the specified client and update its `me ### Example -```javascript +```js > les.addBalance("0x6a47fe7bb23fd335df52ef1690f37ab44265a537b1d18eb616a3e77f898d9e77", 1000000000, "qwerty") [968379616, 1968379616] ``` @@ -225,7 +225,7 @@ Set capacity and pricing factors for the specified list of connected clients or ### Example -```javascript +```js > les.setClientParams(["0x6a47fe7bb23fd335df52ef1690f37ab44265a537b1d18eb616a3e77f898d9e77"], { "capacity": 100000, "pricing/timeFactor": 0, @@ -250,7 +250,7 @@ Set default pricing factors for subsequently connected clients. ### Example -```javascript +```js > les.setDefaultParams({ "pricing/timeFactor": 0, "pricing/capacityFactor": 1000000000, @@ -274,7 +274,7 @@ Get the index and hashes of the latest known checkpoint. ### Example -```javascript +```js > les.latestCheckpoint ["0x110", "0x6eedf8142d06730b391bfcbd32e9bbc369ab0b46ae226287ed5b29505a376164", "0x191bb2265a69c30201a616ae0d65a4ceb5937c2f0c94b125ff55343d707463e5", "0xf58409088a5cb2425350a59d854d546d37b1e7bef8bbf6afee7fd15f943d626a"] ``` @@ -291,7 +291,7 @@ Get checkpoint hashes by index. ### Example -```javascript +```js > les.getCheckpoint(256) ["0x93eb4af0b224b1097e09181c2e51536fe0a3bf3bb4d93e9a69cab9eb3e28c75f", "0x0eb055e384cf58bc72ca20ca5e2b37d8d4115dce80ab4a19b72b776502c4dd5b", "0xda6c02f7c51f9ecc3eca71331a7eaad724e5a0f4f906ce9251a2f59e3115dd6a"] ``` @@ -308,7 +308,7 @@ Get the address of the checkpoint oracle contract. ### Example -```javascript +```js > les.checkpointContractAddress "0x9a9070028361F7AAbeB3f2F2Dc07F82C4a98A02a" ``` diff --git a/docs/interacting-with-geth/rpc/ns-personal.md b/docs/interacting-with-geth/rpc/ns-personal.md index cb8a39b648..87eed5a427 100644 --- a/docs/interacting-with-geth/rpc/ns-personal.md +++ b/docs/interacting-with-geth/rpc/ns-personal.md @@ -47,7 +47,7 @@ Returns all the Ethereum account addresses of all keys in the key store. ### Example -```javascript +```js > personal.listAccounts ["0x5e97870f263700f46aa00d967821199b9bc5a120", "0x3d80b31a78c30fc628f20b2c89d7ddbf6e53cedc"] ``` @@ -63,7 +63,7 @@ Returns a list of wallets this node manages. ### Example -```javascript +```js > personal.listWallets [{ accounts: [{ @@ -96,7 +96,7 @@ Returns the address of the new account. At the geth console, `newAccount` will p ### Example -```javascript +```js > personal.newAccount() Passphrase: Repeat passphrase: @@ -105,7 +105,7 @@ Repeat passphrase: The passphrase can also be supplied as a string. -```javascript +```js > personal.newAccount("h4ck3r") "0x3d80b31a78c30fc628f20b2c89d7ddbf6e53cedc" ``` @@ -136,7 +136,7 @@ The account can be used with `eth_sign` and `eth_sendTransaction` while it is un ### Examples -```javascript +```js > personal.unlockAccount("0x5e97870f263700f46aa00d967821199b9bc5a120") Unlock account 0x5e97870f263700f46aa00d967821199b9bc5a120 Passphrase: @@ -145,14 +145,14 @@ true Supplying the passphrase and unlock duration as arguments: -```javascript +```js > personal.unlockAccount("0x5e97870f263700f46aa00d967821199b9bc5a120", "foo", 30) true ``` To type in the passphrase and still override the default unlock duration, pass `null` as the passphrase. -``` +```js > personal.unlockAccount("0x5e97870f263700f46aa00d967821199b9bc5a120", null, 30) Unlock account 0x5e97870f263700f46aa00d967821199b9bc5a120 Passphrase: @@ -181,7 +181,7 @@ The transaction is the same argument as for `eth_sendTransaction` (i.e. [transac ### Examples -```javascript +```js > var tx = {from: "0x391694e7e0b0cce554cb130d723a9d27458f9298", to: "0xafa3f8684e54059998bc3a7b0d2b0da075154d66", value: web3.toWei(1.23, "ether")} undefined > personal.sendTransaction(tx, "passphrase") @@ -204,7 +204,7 @@ See ecRecover to verify the signature. ### Examples -```javascript +```js > personal.sign("0xdeadbeaf", "0x9b2055d370f73ec7d8a03e965129118dc8f5bf83", "") "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b" ``` @@ -229,7 +229,7 @@ SignTransaction will create a transaction from the given arguments and tries to ### Examples -```javascript +```js > personal.sign("0xdeadbeaf", "0x9b2055d370f73ec7d8a03e965129118dc8f5bf83", "") "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b" > personal.ecRecover("0xdeadbeaf", "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b") diff --git a/docs/interacting-with-geth/rpc/ns-txpool.md b/docs/interacting-with-geth/rpc/ns-txpool.md index 969704986d..34f3b6a861 100644 --- a/docs/interacting-with-geth/rpc/ns-txpool.md +++ b/docs/interacting-with-geth/rpc/ns-txpool.md @@ -21,7 +21,7 @@ Please note, there may be multiple transactions associated with the same account ### Example -```javascript +```js > txpool.content { pending: { @@ -129,7 +129,7 @@ Please note, there may be multiple transactions associated with the same account ### Example -```javascript +```js > txpool.inspect { pending: { @@ -196,7 +196,7 @@ The result is an object with two fields `pending` and `queued`, each of which is ### Example -```javascript +```js > txpool.status { pending: 10, diff --git a/docs/monitoring/dashboards.md b/docs/monitoring/dashboards.md index 27f64dc6d6..cba38862b0 100644 --- a/docs/monitoring/dashboards.md +++ b/docs/monitoring/dashboards.md @@ -56,7 +56,7 @@ create user geth with password choosepassword Verify created entries with: -``` +```sh show databases show users ``` diff --git a/docs/monitoring/metrics.md b/docs/monitoring/metrics.md index 4a2462291f..87ce5aecbf 100644 --- a/docs/monitoring/metrics.md +++ b/docs/monitoring/metrics.md @@ -42,14 +42,14 @@ A gauge is a single int64 value. Its value can increment and decrement - as with Geth collects metrics if the `--metrics` flag is provided at startup. Those metrics are available via an HTTP server if the `--metrics.addr` flag is also provided. By default the metrics are served at `127.0.0.1:6060/debug/metrics` but a custom IP address can be provided. A custom port can also be provided to the `--metrics.port` flag. More computationally expensive metrics are toggled on or off by providing or omitting the `--metrics.expensive` flag. For example, to serve all metrics at the default address and port: -``` +```sh geth --metrics --metrics.addr 127.0.0.1 --metrics.expensive ``` Navigating the browser to the given metrics address displays all the available metrics in the form of JSON data that looks similar to: -``` +```sh chain/account/commits.50-percentile: 374072 chain/account/commits.75-percentile: 830356 chain/account/commits.95-percentile: 1783005.3999976 @@ -67,7 +67,7 @@ Any developer is free to add, remove or modify the available metrics as they see Geth also supports dumping metrics directly into an influx database. In order to activate this, the `--metrics.influxdb` flag must be provided at startup. The API endpoint,username, password and other influxdb tags can also be provided. The available tags are: -``` +```sh --metrics.influxdb.endpoint value InfluxDB API endpoint to report metrics to (default: "http://localhost:8086") --metrics.influxdb.database value InfluxDB database name to push reported metrics to (default: "geth") --metrics.influxdb.username value Username to authorize access to the database (default: "test") diff --git a/docs/tools/abigen.md b/docs/tools/abigen.md index c48210ed48..fe29303851 100644 --- a/docs/tools/abigen.md +++ b/docs/tools/abigen.md @@ -5,7 +5,7 @@ description: Introduction to the Go binding generator tool, Abigen Abigen is a binding-generator for easily interacting with Ethereum using Go. Abigen creates easy-to-use, type-safe Go packages from Ethereum smart contract definitions known as ABIs. This abstracts away a lot of the complexity of handling smart contract deployment and interaction in Go native applications such as encoding and decoding smart contracts into EVM bytecode. Abigen comes bundled with Geth. A full Geth installation includes the abigen binary. Abigen can also be built independently by navigating to `go-ethereum/cmd/abigen` and running `go build`, or equivalently: -``` +```sh $ cd $GOPATH/src/github.com/ethereum/go-ethereum $ go build ./cmd/abigen ``` @@ -18,7 +18,7 @@ Ethereum smart contracts have a schema that defines its functions and return typ To demonstrate the binding generator a contract is required. The contract `Storage.sol` implements two very simple functions: `store` updates a user-defined `uint256` to the contract's storage, and `retrieve` displays the value stored in the contract to the user. The Solidity code is as follows: -```solidity +```js // SPDX-License-Identifier: GPL-3.0 pragma solidity >0.7.0 < 0.9.0; @@ -43,7 +43,7 @@ contract Storage { This contract can be pasted into a text file and saved as `Storage.sol`. The following code snippet shows how an ABI can be generated for `Storage.sol` using the Solidity compiler `solc`. -```shell +```sh solc --abi Storage.sol -o build ``` @@ -72,7 +72,7 @@ The ABI for `Storage.sol` (`Storage.abi`) looks as follows: The contract binding can then be generated by passing the ABI to `abigen` as follows: -``` +```sh $ abigen --abi Storage.abi --pkg main --type Storage --out Storage.go ``` diff --git a/docs/tools/clef/apis.md b/docs/tools/clef/apis.md index 4182677d5f..0247845cad 100644 --- a/docs/tools/clef/apis.md +++ b/docs/tools/clef/apis.md @@ -275,7 +275,7 @@ Response Bash example: -```bash +```sh > curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"account_signTransaction","params":[{"from":"0x694267f14675d7e1b9494fd8d72fefe1755710fa","gas":"0x333","gasPrice":"0x1","nonce":"0x0","to":"0x07a565b7ed7d7a678680a4c162885bedbb695fe0", "value":"0x0", "data":"0x4401a6e40000000000000000000000000000000000000000000000000000000000000012"},"safeSend(address)"],"id":67}' http://localhost:8550/ {"jsonrpc":"2.0","id":67,"result":{"raw":"0xf88380018203339407a565b7ed7d7a678680a4c162885bedbb695fe080a44401a6e4000000000000000000000000000000000000000000000000000000000000001226a0223a7c9bcf5531c99be5ea7082183816eb20cfe0bbc322e97cc5c7f71ab8b20ea02aadee6b34b45bb15bc42d9c09de4a6754e7000908da72d48cc7704971491663","tx":{"nonce":"0x0","gasPrice":"0x1","gas":"0x333","to":"0x07a565b7ed7d7a678680a4c162885bedbb695fe0","value":"0x0","input":"0x4401a6e40000000000000000000000000000000000000000000000000000000000000012","v":"0x26","r":"0x223a7c9bcf5531c99be5ea7082183816eb20cfe0bbc322e97cc5c7f71ab8b20e","s":"0x2aadee6b34b45bb15bc42d9c09de4a6754e7000908da72d48cc7704971491663","hash":"0xeba2df809e7a612a0a0d444ccfa5c839624bdc00dd29e3340d46df3870f8a30e"}}} @@ -533,8 +533,7 @@ Invoked when there's a transaction for approval. Here's a method invocation: -```bash - +```sh curl -i -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"account_signTransaction","params":[{"from":"0x694267f14675d7e1b9494fd8d72fefe1755710fa","gas":"0x333","gasPrice":"0x1","nonce":"0x0","to":"0x07a565b7ed7d7a678680a4c162885bedbb695fe0", "value":"0x0", "data":"0x4401a6e40000000000000000000000000000000000000000000000000000000000000012"},"safeSend(address)"],"id":67}' http://localhost:8550/ ``` @@ -579,8 +578,7 @@ Results in the following invocation on the UI: The same method invocation, but with invalid data: -```bash - +```sh curl -i -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"account_signTransaction","params":[{"from":"0x694267f14675d7e1b9494fd8d72fefe1755710fa","gas":"0x333","gasPrice":"0x1","nonce":"0x0","to":"0x07a565b7ed7d7a678680a4c162885bedbb695fe0", "value":"0x0", "data":"0x4401a6e40000000000000002000000000000000000000000000000000000000000000012"},"safeSend(address)"],"id":67}' http://localhost:8550/ ``` diff --git a/docs/tools/clef/clique-signing.md b/docs/tools/clef/clique-signing.md index 651fabef85..0ce79becf3 100644 --- a/docs/tools/clef/clique-signing.md +++ b/docs/tools/clef/clique-signing.md @@ -66,8 +66,10 @@ Create a genesis with that account as a sealer: Initiate Geth: -``` +```sh $ geth --datadir ./ddir init genesis.json +``` +```terminal ... INFO [06-16|11:14:54.123] Writing custom genesis block INFO [06-16|11:14:54.125] Persisted trie from memory database nodes=1 size=153.00B time="64.715µs" gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B @@ -85,9 +87,10 @@ In order to make use of `clef` for signing: These two things are independent of each other. First of all, however, `clef` must be initiated (for this example the password is `clefclefclef`) -``` +```sh $ clef --keystore ./ddir/keystore --configdir ./clef --chainid 15 --suppress-bootwarn init - +``` +```terminal The master seed of clef will be locked with a password. Please specify a password. Do not forget this password! Password: @@ -111,9 +114,10 @@ After this operation, `clef` has it's own vault where it can store secrets and a With that done, `clef` can be made aware of the password. To do this `setpw
` is invoked to store a password for a given address. `clef` asks for the password, and it also asks for the master-password, in order to update and store the new secrets inside the vault. -``` +```sh $ clef --keystore ./ddir/keystore --configdir ./clef --chainid 15 --suppress-bootwarn setpw 0x9CD932F670F7eDe5dE86F756A6D02548e5899f47 - +``` +```terminal Please enter a password to store for this address: Password: Repeat password: @@ -161,7 +165,7 @@ DEBUG[06-16|11:36:42.499] Served account_list reqid=2 durat After this, Geth will start asking `clef` to sign things: -``` +```terminal -------- Sign data request-------------- Account: 0x9CD932F670F7eDe5dE86F756A6D02548e5899f47 [chksum ok] messages: diff --git a/docs/tools/clef/setup.md b/docs/tools/clef/setup.md index 3bb69cfa14..83b70f62f5 100644 --- a/docs/tools/clef/setup.md +++ b/docs/tools/clef/setup.md @@ -47,7 +47,7 @@ This is how [Split GPG](https://www.qubes-os.org/doc/split-gpg/) is implemented. On the `target` qubes, we need to define the RPC service. -```bash +```sh #!/bin/bash SIGNER_BIN="/home/user/tools/clef/clef" @@ -73,7 +73,7 @@ It would have been possible to send data directly to the `/home/user/.clef/.clef To enable the service: -```bash +```sh sudo cp qubes.Clefsign /etc/qubes-rpc/ sudo chmod +x /etc/qubes-rpc/ qubes.Clefsign ``` @@ -113,7 +113,7 @@ with socketserver.TCPServer(("",PORT), Dispatcher) as httpd: To test the flow, with `debian-work` as the `target`: -```bash +```sh $ cat newaccnt.json { "id": 0, "jsonrpc": "2.0","method": "account_new","params": []} @@ -130,13 +130,13 @@ Followed by a GTK-dialog to approve the operation: To test the full flow, start the client wrapper on the `client` qube: -``` +```sh [user@work qubes]$ python3 qubes-client.py ``` Make the request over http (`client` qube): -``` +```sh [user@work clef]$ cat newaccnt.json | curl -X POST -d @- http://localhost:8550 ``` diff --git a/docs/tools/clef/tutorial.md b/docs/tools/clef/tutorial.md index b681746463..dad09474de 100644 --- a/docs/tools/clef/tutorial.md +++ b/docs/tools/clef/tutorial.md @@ -9,9 +9,10 @@ This page provides a step-by-step walkthrough tutorial demonstrating some common First things first, Clef needs to store some data itself. Since that data might be sensitive (passwords, signing rules, accounts), Clef's entire storage is encrypted. To support encrypting data, the first step is to initialize Clef with a random master seed, itself too encrypted with a password: -```text +```sh $ clef init - +``` +```terminal WARNING! Clef is an account management tool. It may, like any software, contain bugs. @@ -193,7 +194,6 @@ Additional HTTP header data, provided by the external caller: --------------------------------------------- Approve? [y/N] - ``` Approving this transaction causes Clef to prompt the user to provide the password for the sender account. Providing the password enables the transaction to be signed and sent to Geth for broadcasting to the network. The details of the signed transaction are displayed in the console. Account passwords can also be stored in Clef's encrypted vault so that they do not have to be manually entered - [more on this below](#account-passwords). @@ -305,7 +305,7 @@ clef --keystore go-ethereum/goerli-data/ --configdir go-ethereum/goerli-data/cle The following logs will be displayed in the terminal: -``` +```terminal INFO [07-01|13:39:49.726] Rule engine configured file=rules.js INFO [07-01|13:39:49.726] Starting signer chainid=5 keystore=$go-ethereum/goerli-data/ light-kdf=false advanced=false DEBUG[07-01|13:39:49.726] FS scan times list=35.15µs set=4.251µs diff=2.766µs @@ -488,14 +488,14 @@ This returns a `Request denied` message as follows: Meanwhile, in the output logs in the Clef terminal: -```text +```terminal INFO [02-21|14:42:41] Op approved INFO [02-21|14:42:56] Op rejected ``` The signer also stores all traffic over the external API in a log file. The last 4 lines shows the two requests and their responses: -```text +```terminal $ tail -n 4 audit.log t=2022-07-01T15:52:14+0300 lvl=info msg=SignData api=signer type=request metadata="{\"remote\":\"NA\",\"local\":\"NA\",\"scheme\":\"NA\",\"User-Agent\":\"\",\"Origin\":\"\"}" addr="0xd9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3 [chksum INVALID]" data=0x202062617a6f6e6b2062617a2067617a0a content-type=data/plain t=2022-07-01T15:52:14+0300 lvl=info msg=SignData api=signer type=response data=0x636c656664656d6f7465787474686174696e636c7564657377656e2d6d65726765 error=nil diff --git a/docs/tools/puppeth.md b/docs/tools/puppeth.md index f5238a2778..20cbeaa783 100644 --- a/docs/tools/puppeth.md +++ b/docs/tools/puppeth.md @@ -164,7 +164,7 @@ The dashboard can then be viewed by navigating to the node's ip address and the Start instances of Geth for each node -``` +```sh geth --datadir Node1 --port 30301 --bootnodes --networkid -unlock --mine ``` From b04fd9206fe8637ca99af8e4d19521bfc1315de5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Quiroz?= Date: Wed, 30 Nov 2022 10:37:59 -0300 Subject: [PATCH 04/15] feat: OpenPGP Signatures data (#67) * chore: remove test data * chore: update constants * chore: update types * chore: update code-bg dark color * feat: use real data for OpenPGP Signatures table * chore: remove unused types Co-authored-by: Paul Wackerow <54227730+wackerow@users.noreply.github.com> --- src/components/UI/DataTable.tsx | 103 +++++++++++++++++-------- src/constants.ts | 77 ++++++++++++++++++ src/data/test/pgpbuild-testdata.ts | 32 -------- src/data/test/pgpdeveloper-testdata.ts | 20 ----- src/pages/_app.tsx | 9 +-- src/pages/downloads.tsx | 37 +++++---- src/theme/index.ts | 2 +- src/types.ts | 10 +++ 8 files changed, 182 insertions(+), 108 deletions(-) delete mode 100644 src/data/test/pgpbuild-testdata.ts delete mode 100644 src/data/test/pgpdeveloper-testdata.ts diff --git a/src/components/UI/DataTable.tsx b/src/components/UI/DataTable.tsx index 915f597bae..1aa5341ce9 100644 --- a/src/components/UI/DataTable.tsx +++ b/src/components/UI/DataTable.tsx @@ -1,15 +1,19 @@ import { Link, Table, Thead, Tr, Th, TableContainer, Text, Tbody, Td } from '@chakra-ui/react'; import { FC } from 'react'; -import { ReleaseData } from '../../types'; +import { OpenPGPSignaturesData, ReleaseData } from '../../types'; import { getParsedDate } from '../../utils'; interface Props { columnHeaders: string[]; - // TODO: update data type data: any; } export const DataTable: FC = ({ columnHeaders, data }) => { + // {} is a backup object for initial render where data is still undefined, to avoid errors + const dataType = Object.keys(data[0] || {})?.includes('release') + ? 'Releases' + : 'OpenPGP Signatures'; + return ( = ({ columnHeaders, data }) => { - {data.map((r: ReleaseData, idx: number) => { - return ( - - {Object.entries(r).map((item, idx) => { - const objectItems = ['release', 'commit', 'signature']; + {dataType === 'Releases' && + data.map((r: ReleaseData, idx: number) => { + return ( + + {Object.entries(r).map((item, idx) => { + const objectItems = ['release', 'commit', 'signature']; - if (objectItems.includes(item[0])) { - const label = item[1].label; - const url = item[1].url; + if (objectItems.includes(item[0])) { + const label = item[1].label; + const url = item[1].url; + + return ( + + + + {item[0] === 'commit' ? `${label}...` : label} + + + + ); + } + + if (item[0] === 'published') { + return ( + + {getParsedDate(item[1])} + + ); + } return ( - - - {item[0] === 'commit' ? `${label}...` : label} - - + {item[1]} ); - } + })} + + ); + })} + + {dataType === 'OpenPGP Signatures' && + data.map((o: OpenPGPSignaturesData, idx: number) => { + return ( + + {Object.entries(o).map((item, idx) => { + if (item[0] === 'openpgp key') { + const label = item[1].label; + const url = item[1].url; + + return ( + + + {label} + + + ); + } - if (item[0] === 'published') { return ( - {getParsedDate(item[1])} + {item[1]} ); - } - - return ( - - {item[1]} - - ); - })} - - ); - })} + })} + + ); + })} diff --git a/src/constants.ts b/src/constants.ts index 51e4822e0c..3e282e0b85 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -71,6 +71,83 @@ export const DOWNLOADS_OPENPGP_BUILD_HEADERS = [ 'OpenPGP Key', 'Fingerprint' ]; +export const DOWNLOADS_OPENPGP_SIGNATURES = [ + { + 'build server': 'Android Builder', + 'unique id': 'Go Ethereum Android Builder ', + 'openpgp key': { + label: 'F9585DE6', + url: 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x70AD154BF9585DE6' + }, + fingerprint: '8272 1824 F4D7 46E0 B5A7 AB95 70AD 154B F958 5DE6' + }, + { + 'build server': 'iOS Builder', + 'unique id': 'Go Ethereum iOS Builder ', + 'openpgp key': { + label: 'C2FF8BBF', + url: 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xF29DEFAFC2FF8BBF' + }, + fingerprint: '70AD EB8F 3BC6 6F69 0256 4D88 F29D EFAF C2FF 8BBF' + }, + { + 'build server': 'Linux Builder', + 'unique id': 'Go Ethereum Linux Builder ', + 'openpgp key': { + label: '9BA28146', + url: 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xA61A13569BA28146' + }, + fingerprint: 'FDE5 A1A0 44FA 13D2 F7AD A019 A61A 1356 9BA2 8146' + }, + { + 'build server': 'macOS Builder', + 'unique id': 'Go Ethereum macOS Builder ', + 'openpgp key': { + label: '7B9E2481', + url: 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x558915E17B9E2481' + }, + fingerprint: '6D1D AF5D 0534 DEA6 1AA7 7AD5 5589 15E1 7B9E 2481' + }, + { + 'build server': 'Windows Builder', + 'unique id': 'Go Ethereum Windows Builder ', + 'openpgp key': { + label: 'D2A67EAC', + url: 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x9417309ED2A67EAC' + }, + fingerprint: 'C4B3 2BB1 F603 4241 A9E6 50A1 9417 309E D2A6 7EAC' + } +]; +export const DOWNLOADS_DEVELOPERS_DATA = [ + { + developer: 'Felix Lange', + 'unique id': 'Felix Lange ', + 'openpgp key': { + label: 'E058A81C', + url: 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x337E68FCE058A81C' + }, + fingerprint: '6047 0B71 5865 392D E43D 75A3 337E 68FC E058 A81C' + }, + { + developer: 'Martin Holst Swende', + 'unique id': 'Martin Holst Swende ', + 'openpgp key': { + label: '05A5DDF0', + url: 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x683B438C05A5DDF0' + }, + fingerprint: 'CA99 ABB5 B36E 24AD 5DA0 FD40 683B 438C 05A5 DDF0' + }, + { + developer: 'Péter Szilágyi', + 'unique id': 'Péter Szilágyi ', + 'openpgp key': { + label: '1CCB7DD2', + url: 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x119A76381CCB7DD2' + }, + fingerprint: '4948 43FC E822 1C4C 86AB 5E2F 119A 7638 1CCB 7DD2' + } +]; + export const DOWNLOADS_OPENPGP_DEVELOPER_HEADERS = [ 'Developer', 'Unique ID', diff --git a/src/data/test/pgpbuild-testdata.ts b/src/data/test/pgpbuild-testdata.ts deleted file mode 100644 index c69facc1b3..0000000000 --- a/src/data/test/pgpbuild-testdata.ts +++ /dev/null @@ -1,32 +0,0 @@ -export const pgpBuildTestData = [ - { - 'build server': 'Android Builder', - 'unique id': 'Go Ethereum Android Builder ', - 'openpgp key': 'F9585DE6', - fingerprint: '8272 1824 F4D7 46E0 B5A7 AB95 70AD 154B F958 5DE6' - }, - { - 'build server': 'iOS Builder', - 'unique id': 'Go Ethereum iOS Builder ', - 'openpgp key': 'F9585DE6', - fingerprint: '8272 1824 F4D7 46E0 B5A7 AB95 70AD 154B F958 5DE6' - }, - { - 'build server': 'Linux Builder', - 'unique id': 'Go Ethereum Linux Builder ', - 'openpgp key': 'F9585DE6', - fingerprint: '8272 1824 F4D7 46E0 B5A7 AB95 70AD 154B F958 5DE6' - }, - { - 'build server': 'macOS Builder', - 'unique id': 'Go Ethereum macOS Builder ', - 'openpgp key': 'F9585DE6', - fingerprint: '8272 1824 F4D7 46E0 B5A7 AB95 70AD 154B F958 5DE6' - }, - { - 'build server': 'Windows Builder', - 'unique id': 'Go Ethereum Windows Builder ', - 'openpgp key': 'F9585DE6', - fingerprint: '8272 1824 F4D7 46E0 B5A7 AB95 70AD 154B F958 5DE6' - } -]; diff --git a/src/data/test/pgpdeveloper-testdata.ts b/src/data/test/pgpdeveloper-testdata.ts deleted file mode 100644 index b5a3fa17d5..0000000000 --- a/src/data/test/pgpdeveloper-testdata.ts +++ /dev/null @@ -1,20 +0,0 @@ -export const pgpDeveloperTestData = [ - { - developer: 'Felix Lange', - 'unique id': 'Felix Lange ', - 'openpgp key': 'F9585DE6', - fingerprint: '8272 1824 F4D7 46E0 B5A7 AB95 70AD 154B F958 5DE6' - }, - { - developer: 'Martin Holst Swende', - 'unique id': 'Martin Holst Swende ', - 'openpgp key': 'F9585DE6', - fingerprint: '8272 1824 F4D7 46E0 B5A7 AB95 70AD 154B F958 5DE6' - }, - { - developer: 'Péter Szilágyi', - 'unique id': 'Péter Szilágyi ', - 'openpgp key': 'F9585DE6', - fingerprint: '8272 1824 F4D7 46E0 B5A7 AB95 70AD 154B F958 5DE6' - } -]; diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index 5d1f2b46dd..d1f76091e6 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -1,15 +1,14 @@ import { ChakraProvider } from '@chakra-ui/react'; import { AppProps } from 'next/app'; +import { MDXProvider } from '@mdx-js/react'; import { Layout } from '../components/layouts'; -import 'focus-visible/dist/focus-visible'; - -import theme from '../theme'; - -import { MDXProvider } from '@mdx-js/react'; import MDXComponents from '../components/'; +import 'focus-visible/dist/focus-visible'; +import theme from '../theme'; + export default function App({ Component, pageProps }: AppProps) { return ( diff --git a/src/pages/downloads.tsx b/src/pages/downloads.tsx index 8f119d926c..3afa2c6005 100644 --- a/src/pages/downloads.tsx +++ b/src/pages/downloads.tsx @@ -1,4 +1,4 @@ -import { Center, Code, Flex, Link, ListItem, Stack, Text, UnorderedList } from '@chakra-ui/react'; +import { Code, Flex, Link, ListItem, Stack, Text, UnorderedList } from '@chakra-ui/react'; import type { GetStaticProps, NextPage } from 'next'; import { useState } from 'react'; import { XMLParser } from 'fast-xml-parser'; @@ -18,12 +18,11 @@ import { GETH_REPO_URL, METADATA, LATEST_SOURCES_BASE_URL, - RELEASE_NOTES_BASE_URL + RELEASE_NOTES_BASE_URL, + DOWNLOADS_OPENPGP_SIGNATURES, + DOWNLOADS_DEVELOPERS_DATA } from '../constants'; -import { pgpBuildTestData } from '../data/test/pgpbuild-testdata'; -import { pgpDeveloperTestData } from '../data/test/pgpdeveloper-testdata'; - import { fetchLatestReleaseCommit, fetchLatestReleaseVersionAndName, @@ -483,16 +482,17 @@ const DownloadsPage: NextPage = ({ data }) => { } sectionTitle='OpenPGP Signatures' > - {/* TODO: swap for real data */} - + - {/* TODO: swap for real data */} @@ -512,9 +512,10 @@ const DownloadsPage: NextPage = ({ data }) => { - - {/* TODO: These keys depends on the binary */} - gpg --recv-keys F9585DE6 C2FF8BBF 9BA28146 7B9E2481 D2A67EAC + + + gpg --recv-keys F9585DE6 C2FF8BBF 9BA28146 7B9E2481 D2A67EAC + @@ -532,9 +533,10 @@ const DownloadsPage: NextPage = ({ data }) => { - - {/* TODO: These are developer keys, do we need to change? */} - gpg --recv-keys E058A81C 05A5DDF0 1CCB7DD2 + + + gpg --recv-keys E058A81C 05A5DDF0 1CCB7DD2 + @@ -554,8 +556,9 @@ const DownloadsPage: NextPage = ({ data }) => { - {/* TODO: These keys depends on the binary */} - gpg --verify geth-linux-amd64-1.5.0-d0c820ac.tar.gz.asc + + gpg --verify geth-linux-amd64-1.5.0-d0c820ac.tar.gz.asc + diff --git a/src/theme/index.ts b/src/theme/index.ts index c1aa7e2a71..4900f4df0e 100644 --- a/src/theme/index.ts +++ b/src/theme/index.ts @@ -31,7 +31,7 @@ const overrides = { secondary: { _light: 'green.800', _dark: 'green.600' }, 'button-bg': { _light: 'green.50', _dark: 'green.900' }, body: { _light: 'gray.800', _dark: 'yellow.50' }, - 'code-bg': { _light: 'gray.200', _dark: 'gray.700' }, + 'code-bg': { _light: 'gray.200', _dark: 'gray.900' }, 'terminal-bg': { _light: 'gray.800', _dark: 'gray.900' }, 'terminal-text': { _light: 'green.50', _dark: 'green.200' }, bg: { _light: 'yellow.50', _dark: 'gray.800' } diff --git a/src/types.ts b/src/types.ts index 0a262c01dd..320edd7cb4 100644 --- a/src/types.ts +++ b/src/types.ts @@ -34,3 +34,13 @@ export interface ReleaseParams { blobsList: string[]; isStableRelease: boolean; } + +export interface OpenPGPSignaturesData { + 'build server': string; + 'unique id': string; + 'openpgp key': { + label: string; + url: string; + }; + fingerprint: string; +} From d4c57f9174adebc384eca99bceb2f2935cf31de6 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Wed, 30 Nov 2022 15:02:08 +0100 Subject: [PATCH 05/15] add lastModified date (#68) * add lastModified date * prettier * fix type errors on build Co-authored-by: Paul Wackerow <54227730+wackerow@users.noreply.github.com> --- src/pages/[...slug].tsx | 20 ++++++++++++++++---- src/utils/getParsedDate.ts | 9 +++++---- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/pages/[...slug].tsx b/src/pages/[...slug].tsx index 74711922ea..cb0d69cefc 100644 --- a/src/pages/[...slug].tsx +++ b/src/pages/[...slug].tsx @@ -1,7 +1,7 @@ import fs from 'fs'; import matter from 'gray-matter'; import yaml from 'js-yaml'; -import { Stack, Heading } from '@chakra-ui/react'; +import { Stack, Heading, Text } from '@chakra-ui/react'; import ChakraUIRenderer from 'chakra-ui-markdown-renderer'; import ReactMarkdown from 'react-markdown'; import gfm from 'remark-gfm'; @@ -12,6 +12,7 @@ import MDXComponents from '../components/'; import { Breadcrumbs } from '../components/docs'; import { PageMetadata } from '../components/UI'; import { textStyles } from '../theme/foundations'; +import { getParsedDate } from '../utils'; const MATTER_OPTIONS = { engines: { @@ -49,11 +50,14 @@ export const getStaticProps: GetStaticProps = async context => { const { slug } = context.params as ParsedUrlQuery; const filePath = (slug as string[])!.join('/'); let file; + let lastModified; try { file = fs.readFileSync(`${filePath}.md`, 'utf-8'); + lastModified = fs.statSync(`${filePath}.md`); } catch { file = fs.readFileSync(`${filePath}/index.md`, 'utf-8'); + lastModified = fs.statSync(`${filePath}/index.md`); } const { data: frontmatter, content } = matter(file, MATTER_OPTIONS); @@ -61,7 +65,12 @@ export const getStaticProps: GetStaticProps = async context => { return { props: { frontmatter, - content + content, + lastModified: getParsedDate(lastModified.mtime, { + month: 'numeric', + day: 'numeric', + year: 'numeric' + }) } }; }; @@ -71,9 +80,10 @@ interface Props { [key: string]: string; }; content: string; + lastModified: string; } -const DocPage: NextPage = ({ frontmatter, content }) => { +const DocPage: NextPage = ({ frontmatter, content, lastModified }) => { return ( <> @@ -84,7 +94,9 @@ const DocPage: NextPage = ({ frontmatter, content }) => { {frontmatter.title} - {/* last edited {TODO: get last edited date} */} + + last edited {lastModified} + {content} diff --git a/src/utils/getParsedDate.ts b/src/utils/getParsedDate.ts index 5c87738c12..87bca62789 100644 --- a/src/utils/getParsedDate.ts +++ b/src/utils/getParsedDate.ts @@ -1,12 +1,13 @@ -export const getParsedDate = (date: string) => { - const dateOptions = { +export const getParsedDate = ( + date: string | Date, + dateOptions: Intl.DateTimeFormatOptions = { year: 'numeric', month: 'long', day: 'numeric', hour: '2-digit', minute: '2-digit', timeZone: 'UTC' - } as const; - + } as const +) => { return new Date(date).toLocaleDateString('en', dateOptions); }; From 394f1b07e633f355da4dc228419e23134ab6b89c Mon Sep 17 00:00:00 2001 From: Joe Date: Wed, 30 Nov 2022 17:22:24 +0000 Subject: [PATCH 06/15] fix links and typos --- docs/developers/contributing.md | 3 +++ .../dapp-developer/native-accounts.md | 4 ++-- .../dapp-developer/native-bindings.md | 3 ++- docs/developers/dapp-developer/native.md | 2 +- docs/developers/evm-tracing/basic-traces.md | 6 +++--- .../evm-tracing/built-in-tracers.md | 5 ++++- docs/developers/evm-tracing/custom-tracer.md | 10 +++------ docs/developers/evm-tracing/index.md | 10 ++++----- .../evm-tracing/javascript-tutorial.md | 14 ++++++------ docs/developers/geth-developer/dev-mode.md | 9 ++++++-- docs/developers/geth-developer/disclosures.md | 4 ++-- .../geth-developer/private-network.md | 2 +- docs/faq.md | 8 +++---- docs/fundamentals/account-management.md | 2 +- docs/fundamentals/les.md | 2 +- docs/fundamentals/logs.md | 4 ++-- docs/fundamentals/mining.md | 6 +++--- docs/fundamentals/node-architecture.md | 2 +- docs/fundamentals/peer-to-peer.md | 10 ++++----- docs/fundamentals/pruning.md | 4 ++++ docs/fundamentals/sync-modes.md | 4 ++-- docs/getting-started/consensus-clients.md | 4 ++-- .../javascript-console.md | 18 ++++++---------- docs/interacting-with-geth/rpc/batch.md | 2 +- docs/interacting-with-geth/rpc/index.md | 4 ++-- docs/interacting-with-geth/rpc/ns-admin.md | 4 ++-- docs/interacting-with-geth/rpc/ns-debug.md | 20 +++++++++--------- docs/interacting-with-geth/rpc/ns-eth.md | 8 ++++--- docs/interacting-with-geth/rpc/ns-personal.md | 6 +++--- .../rpc/ns_personal_deprecation.md | 2 +- docs/interacting-with-geth/rpc/pubsub.md | 3 +++ docs/monitoring/dashboards.md | 3 ++- docs/monitoring/ethstats.md | 5 +++++ docs/resources.md | 2 +- docs/tools/clef/rules.md | 2 +- docs/tools/clef/tutorial.md | 16 +++++++------- docs/tools/devp2p.md | 2 +- docs/tools/puppeth.md | 2 +- public/images/{ => docs}/clef_ruleset.png | Bin 39 files changed, 117 insertions(+), 100 deletions(-) rename public/images/{ => docs}/clef_ruleset.png (100%) diff --git a/docs/developers/contributing.md b/docs/developers/contributing.md index c232f2abfb..39eb58bef0 100644 --- a/docs/developers/contributing.md +++ b/docs/developers/contributing.md @@ -12,8 +12,11 @@ If you'd like to contribute to the Geth source code, please fork the [Github rep Please make sure your contributions adhere to our coding guidelines: - Code must adhere to the official Go formatting guidelines (i.e. uses gofmt). + - Code must be documented adhering to the official Go commentary guidelines. + - Pull requests need to be based on and opened against the master branch. + - Commit messages should be prefixed with the package(s) they modify. E.g. "eth, rpc: make trace configs optional" diff --git a/docs/developers/dapp-developer/native-accounts.md b/docs/developers/dapp-developer/native-accounts.md index 79ea809a5b..cb9f83ca76 100644 --- a/docs/developers/dapp-developer/native-accounts.md +++ b/docs/developers/dapp-developer/native-accounts.md @@ -5,7 +5,7 @@ description: Introduction to account management in Go native applications. Geth provides a simple, yet thorough accounts package that includes all the tools developers need to leverage all the security of Geth's crypto implementation in a Go native application. The account management is done client side with all sensitive data held inside the application. This gives the user control over access permissions without relying on any third party. -**Note Geth's built-in account management is convenient and straightforward to use, but best practise is to use the external tool _Clef_ for key management.** +**Note: Geth's built-in account management is convenient and straightforward to use, but best practise is to use the external tool _Clef_ for key management.** ## Encrypted keystores {#encrypted-keystores} @@ -93,7 +93,7 @@ There are a few different ways to authorize the account manager to execute signi Assuming an instance of an [`accounts.Manager`](https://godoc.org/github.com/ethereum/go-ethereum/accounts#Manager) called `am` exists, a new account can be created to sign transactions using [`NewAccount`](https://godoc.org/github.com/ethereum/go-ethereum/accounts#Manager.NewAccount). Creating transactions is out of scope for this page so instead a random [`common.Hash`](https://godoc.org/github.com/ethereum/go-ethereum/common#Hash) will be signed instead. -For information on creating transactions in Go native applications see the [Go API page](/docs/dapp/native). +For information on creating transactions in Go native applications see the [Go API page](/docs/developers/dapp-developer/native). ```go // Create a new account to sign transactions with diff --git a/docs/developers/dapp-developer/native-bindings.md b/docs/developers/dapp-developer/native-bindings.md index 15bad3f5ab..e59f2172fa 100644 --- a/docs/developers/dapp-developer/native-bindings.md +++ b/docs/developers/dapp-developer/native-bindings.md @@ -193,7 +193,8 @@ View the full file [here](https://gist.github.com/jmcook1186/91124cfcbc7f22dcd3b The new `DeployStorage()` function can be used to deploy the contract to an Ethereum testnet from a Go application. To do this requires incorporating the bindings into a Go application that also handles account management, authorization and Ethereum backend to deploy the contract through. Specifically, this requires: -1. A running Geth node connected to an Ethereum testnet (recommended Goerli) +1. A running Geth node connected to an Ethereum testnet + 2. An account in the keystore prefunded with enough ETH to cover gas costs for deploying and interacting with the contract Assuming these prerequisites exist, a new `ethclient` can be instantiated with the local Geth node's ipc file, providing access to the testnet from the Go application. The key can be instantiated as a variable in the application by copying the JSON object from the keyfile in the keystore. diff --git a/docs/developers/dapp-developer/native.md b/docs/developers/dapp-developer/native.md index aa26e089df..cb70499657 100644 --- a/docs/developers/dapp-developer/native.md +++ b/docs/developers/dapp-developer/native.md @@ -39,7 +39,7 @@ All the Geth packages can be downloaded using: $ go get -d github.com/ethereum/go-ethereum/... ``` -More Go API support for dapp developers can be found on the [Go Contract Bindings](/docs/developers/dapp-developer/native-bindings) and [Go Account Management](/docs/dapp/native-accounts) pages. +More Go API support for dapp developers can be found on the [Go Contract Bindings](/docs/developers/dapp-developer/native-bindings) and [Go Account Management](/docs/developers/dapp-developer/native-accounts) pages. ## Tutorial {#tutorial} diff --git a/docs/developers/evm-tracing/basic-traces.md b/docs/developers/evm-tracing/basic-traces.md index 380fed3e39..e542a24c3e 100644 --- a/docs/developers/evm-tracing/basic-traces.md +++ b/docs/developers/evm-tracing/basic-traces.md @@ -42,7 +42,7 @@ An example log for a single opcode entry has the following format: ### Generating basic traces {#generating-basic-traces} -To generate a raw EVM opcode trace, Geth provides a few [RPC API endpoints](/docs/rpc/ns-debug). The most commonly used is [`debug_traceTransaction`](/docs/rpc/ns-debug#debug_tracetransaction). +To generate a raw EVM opcode trace, Geth provides a few [RPC API endpoints](/docs/interacting-with-geth/rpc/ns-debug). The most commonly used is [`debug_traceTransaction`](/docs/interacting-with-geth/rpc/ns-debug#debug_tracetransaction). In its simplest form, `traceTransaction` accepts a transaction hash as its only argument. It then traces the transaction, aggregates all the generated data and returns it as a **large** JSON object. A sample invocation from the Geth console would be: @@ -57,7 +57,7 @@ The same call can also be invoked from outside the node too via HTTP RPC (e.g. u $ curl -H "Content-Type: application/json" -d '{"id": 1, "method": "debug_traceTransaction", "params": ["0xfc9359e49278b7ba99f59edac0e3de49956e46e530a53c15aa71226b7aa92c6f"]}' localhost:8545 ``` -To follow along with this tutorial, transaction hashes can be found from a local Geth node (e.g. by attaching a [Javascript console](/docs/interface/javascript-console) and running `eth.getBlock('latest')` then passing a transaction hash from the returned block to `debug.traceTransaction()`) or from a block explorer (for [Mainnet](https://etherscan.io/) or a [testnet](https://goerli.etherscan.io/)). +To follow along with this tutorial, transaction hashes can be found from a local Geth node (e.g. by attaching a [Javascript console](/docs/interacting-with-geth/javascript-console) and running `eth.getBlock('latest')` then passing a transaction hash from the returned block to `debug.traceTransaction()`) or from a block explorer (for [Mainnet](https://etherscan.io/) or a [testnet](https://goerli.etherscan.io/)). It is also possible to configure the trace by passing Boolean (true/false) values for four parameters that tweak the verbosity of the trace. By default, the _EVM memory_ and _Return data_ are not reported but the _EVM stack_ and _EVM storage_ are. To report the maximum amount of data: @@ -98,4 +98,4 @@ To avoid those issues, Geth supports running custom JavaScript tracers _within_ This page described how to do basic traces in Geth. Basic traces are very low level and can generate lots of data that might not all be useful. Therefore, it is also possible to use a set of built-in tracers or write custom ones in Javascript or Go. -Read more about [built-in](/docs/evm-tracing/builtin-tracers) and [custom](/docs/evm-tracing/custom-tracer) traces. +Read more about [built-in](/docs/developers/evm-tracing/built-in-tracers) and [custom](/docs/developers/evm-tracing/custom-tracer) traces. diff --git a/docs/developers/evm-tracing/built-in-tracers.md b/docs/developers/evm-tracing/built-in-tracers.md index 8533abd499..1dabc52667 100644 --- a/docs/developers/evm-tracing/built-in-tracers.md +++ b/docs/developers/evm-tracing/built-in-tracers.md @@ -3,7 +3,7 @@ title: Built-in tracers description: Explanation of the tracers that come bundled in Geth as part of the tracing API. --- -Geth comes bundled with a choice of tracers that can be invoked via the [tracing API](/docs/rpc/ns-debug). Some of these built-in tracers are implemented natively in Go, and others in Javascript. The default tracer is the opcode logger (otherwise known as struct logger) which is the default tracer for all the methods. Other tracers have to be specified by passing their name to the `tracer` parameter in the API call. +Geth comes bundled with a choice of tracers that can be invoked via the [tracing API](/docs/interacting-with-geth/rpc/ns-debug). Some of these built-in tracers are implemented natively in Go, and others in Javascript. The default tracer is the opcode logger (otherwise known as struct logger) which is the default tracer for all the methods. Other tracers have to be specified by passing their name to the `tracer` parameter in the API call. ## Struct/opcode logger {#struct-opcode-logger} @@ -176,7 +176,9 @@ Return: Things to note about the call tracer: - Calls to precompiles are also included in the result + - In case a frame reverts, the field `output` will contain the raw return data + - In case the top level frame reverts, its `revertReason` field will contain the parsed reason of revert as returned by the Solidity contract #### Config @@ -184,6 +186,7 @@ Things to note about the call tracer: `callTracer` accepts two options: - `onlyTopCall: true` instructs the tracer to only process the main (top-level) call and none of the sub-calls. This avoids extra processing for each call frame if only the top-level call info are required. + - `withLog: true` instructs the tracer to also collect the logs emitted during each call. Example invokation with the `onlyTopCall` flag: diff --git a/docs/developers/evm-tracing/custom-tracer.md b/docs/developers/evm-tracing/custom-tracer.md index b7768940cd..d2d5a8d93b 100644 --- a/docs/developers/evm-tracing/custom-tracer.md +++ b/docs/developers/evm-tracing/custom-tracer.md @@ -9,7 +9,7 @@ In addition to the default opcode tracer and the built-in tracers, Geth offers t Custom tracers can also be made more performant by writing them in Go. The gain in performance mostly comes from the fact that Geth doesn't need to interpret JS code and can execute native functions. Geth comes with several built-in [native tracers](https://github.com/ethereum/go-ethereum/tree/master/eth/tracers/native) which can serve as examples. Please note that unlike JS tracers, Go tracing scripts cannot be simply passed as an argument to the API. They will need to be added to and compiled with the rest of the Geth source code. -In this section a simple native tracer that counts the number of opcodes will be covered. First follow the instructions to [clone and build](/content/docs/getting_started/Installing-Geth.md) Geth from source code. Next save the following snippet as a `.go` file and add it to `eth/tracers/native`: +In this section a simple native tracer that counts the number of opcodes will be covered. First follow the instructions to [clone and build](/docs/getting-started/installing-geth) Geth from source code. Next save the following snippet as a `.go` file and add it to `eth/tracers/native`: ```go package native @@ -113,7 +113,7 @@ To test out this tracer the source is first compiled with `make geth`. Then in t Transaction traces include the complete status of the EVM at every point during the transaction execution, which can be a very large amount of data. Often, users are only interested in a small subset of that data. Javascript trace filters are available to isolate the useful information. -Specifying the `tracer` option in one of the tracing methods (see list in [reference](/docs/rpc/ns-debug)) enables JavaScript-based tracing. In this mode, `tracer` is interpreted as a JavaScript expression that is expected to evaluate to an object which must expose the `result` and `fault` methods. There exist 4 additional methods, namely: `setup`, `step`, `enter`, and `exit`. `enter` and `exit` must be present or omitted together. +Specifying the `tracer` option in one of the tracing methods (see list in [reference](/docs/interacting-with-geth/rpc/ns-debug)) enables JavaScript-based tracing. In this mode, `tracer` is interpreted as a JavaScript expression that is expected to evaluate to an object which must expose the `result` and `fault` methods. There exist 4 additional methods, namely: `setup`, `step`, `enter`, and `exit`. `enter` and `exit` must be present or omitted together. ### Setup @@ -266,11 +266,7 @@ debug.traceTransaction(txhash, { ## Other traces -This tutorial has focused on `debug_traceTransaction()` which reports information -about individual transactions. There are also RPC endpoints that provide different -information, including tracing the EVM execution within a block, between two blocks, -for specific `eth_call`s or rejected blocks. The full list of trace functions can -be explored in the [reference documentation](/content/docs/interacting_with_geth/RPC/ns-debug.md). +This tutorial has focused on `debug_traceTransaction()` which reports information about individual transactions. There are also RPC endpoints that provide different information, including tracing the EVM execution within a block, between two blocks, for specific `eth_call`s or rejected blocks. The full list of trace functions can be explored in the [reference documentation](/docs/interacting-with-geth/rpc/ns-debug). ## Summary diff --git a/docs/developers/evm-tracing/index.md b/docs/developers/evm-tracing/index.md index 434e98e25f..8d050da0e9 100644 --- a/docs/developers/evm-tracing/index.md +++ b/docs/developers/evm-tracing/index.md @@ -28,11 +28,11 @@ This means there are limits on the transactions that can be traced imposed by th - A **light synced** node retrieving data **on demand** can in theory trace transactions for which all required historical state is readily available in the network. This is because the data required to generate the trace is requested from an les-serving full node. In practice, data availability **cannot** be reasonably assumed. -![state pruning options](/public/images/docs/state-pruning.png) +![state pruning options](/images/docs/state-pruning.png) _This image shows the state stored by each sync-mode - red indicates stored state. The full width of each line represents origin to present head_ -More detailed information about syncing is available on the [sync modes page](/docs/interface/sync-modes). +More detailed information about syncing is available on the [sync modes page](/docs/fundamentals/sync-modes). When a trace of a specific transaction is executed, the state is prepared by fetching the state of the parent block from the database. If it is not available, Geth will crawl backwards in time to find the next available state but only up to a limit defined in the `reexec` parameter which defaults to 128 blocks. If no state is available within the `reexec` window then the trace fails with `Error: required historical state unavailable` and the `reexec` parameter must be increased. If a valid state _is_ found in the `reexec` window, then Geth sequentially re-executes the transcations in each block between the last available state and the target block. The greater the value of `reexec` the longer the tracing will take because more blocks have to be re-executed to regenerate the target state. @@ -48,20 +48,20 @@ _There are exceptions to the above rules when running batch traces of entire blo The simplest type of transaction trace that Geth can generate are raw EVM opcode traces. For every EVM instruction the transaction executes, a structured log entry is emitted, containing all contextual metadata deemed useful. This includes the _program counter_, _opcode name_, _opcode cost_, _remaining gas_, _execution depth_ and any _occurred error_. The structured logs can optionally also contain the content of the _execution stack_, _execution memory_ and _contract storage_. -Read more about Geth's basic traces on the [basic traces page](/docs/evm-tracing/basic-traces). +Read more about Geth's basic traces on the [basic traces page](/docs/developers/evm-tracing/basic-traces). ### Built-in tracers {#built-in-tracers} The tracing API accepts an optional `tracer` parameter that defines how the data returned to the API call should be processed. If this parameter is ommitted the default tracer is used. The default is the struct (or 'opcode') logger. These raw opcode traces are sometimes useful, but the returned data is very low level and can be too extensive and awkward to read for many use-cases. A full opcode trace can easily go into the hundreds of megabytes, making them very resource intensive to get out of the node and process externally. For these reasons, there are a set of non-default built-in tracers that can be named in the API call to return different data from the method. Under the hood, these tracers are Go or Javascript functions that do some specific preprocessing on the trace data before it is returned. -More information about Geth's built-in tracers is available on the [built-in tracers](/docs/evm-tracing/builtin-tracers) page. +More information about Geth's built-in tracers is available on the [built-in tracers](/docs/developers/evm-tracing/builtin-tracers) page. ### Custom tracers {#custom-tracers} In addition to built-in tracers, it is possible to provide custom code that hooks to events in the EVM to process and return data in a consumable format. Custom tracers can be written either in Javascript or Go. JS tracers are good for quick prototyping and experimentation as well as for less intensive applications. Go tracers are performant but require the tracer to be compiled together with the Geth source code. This means developers only have to gather the data they actually need, and do any processing at the source. -More information about custom tracers is available on the [custom tracers](/docs/evm-tracing/custom-tracer) page. +More information about custom tracers is available on the [custom tracers](/docs/developers/evm-tracing/custom-tracer) page. ## Summary {#summary} diff --git a/docs/developers/evm-tracing/javascript-tutorial.md b/docs/developers/evm-tracing/javascript-tutorial.md index 583588db0e..9d057daa32 100644 --- a/docs/developers/evm-tracing/javascript-tutorial.md +++ b/docs/developers/evm-tracing/javascript-tutorial.md @@ -3,7 +3,7 @@ title: Tutorial for Javascript tracing description: Javascript tracing tutorial --- -Geth supports tracing via [custom Javascript tracers](/docs/evm-tracing/custom-tracer#custom-javascript-tracing). This document provides a tutorial with examples on how to achieve this. +Geth supports tracing via [custom Javascript tracers](/docs/developers/evm-tracing/custom-tracer#custom-javascript-tracing). This document provides a tutorial with examples on how to achieve this. ### A simple filter @@ -25,16 +25,16 @@ tracer = function (tx) { }; // tracer = function ... ``` -2. Run the [JavaScript console](https://geth.ethereum.org/docs/interface/javascript-console). -3. Get the hash of a recent transaction from a node or block explorer. +1. Run the [JavaScript console](/docs/interacting-with-geth/javascript-console). +2. Get the hash of a recent transaction from a node or block explorer. -4. Run this command to run the script: +3. Run this command to run the script: ```js loadScript('filterTrace_1.js'); ``` -5. Run the tracer from the script. Be patient, it could take a long time. +4. Run the tracer from the script. Be patient, it could take a long time. ```js tracer(''); @@ -48,7 +48,7 @@ tracer = function (tx) { "1375:MLOAD", "1376:DUP1", "1377:SWAP2", "1378:SUB", "1379:SWAP1", "1380:RETURN" ``` -6. Run this line to get a more readable output with each string in its own line. +5. Run this line to get a more readable output with each string in its own line. ```js console.log(JSON.stringify(tracer(''), null, 2)); @@ -56,7 +56,7 @@ tracer = function (tx) { More information about the `JSON.stringify` function is available [here](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify). -The commands above worked by calling the same `debug.traceTransaction` function that was previously explained in [basic traces](https://geth.ethereum.org/docs/dapp/tracing), but with a new parameter, `tracer`. This parameter takes the JavaScript object formated as a string. In the case of the trace above, it is: +The commands above worked by calling the same `debug.traceTransaction` function that was previously explained in [basic traces](/docs/developers/evm-tracing/basic-traces), but with a new parameter, `tracer`. This parameter takes the JavaScript object formated as a string. In the case of the trace above, it is: ```js { diff --git a/docs/developers/geth-developer/dev-mode.md b/docs/developers/geth-developer/dev-mode.md index 7e868ea665..29da44f882 100644 --- a/docs/developers/geth-developer/dev-mode.md +++ b/docs/developers/geth-developer/dev-mode.md @@ -6,17 +6,22 @@ description: Instructions for setting up Geth in developer mode It is often convenient for developers to work in an environment where changes to client or application software can be deployed and tested rapidly and without putting real-world users or assets at risk. For this purpose, Geth has a `--dev` flag that spins up Geth in "developer mode". This creates a single-node Ethereum test network with no connections to any external peers. It exists solely on the local machine. Starting Geth in developer mode does the following: - Initializes the data directory with a testing genesis block + - Sets max peers to 0 (meaning Geth does not search for peers) + - Turns off discovery by other nodes (meaning the node is invisible to other nodes) + - Sets the gas price to 0 (no cost to send transactions) + - Uses the Clique proof-of-authority consensus engine which allows blocks to be mined as-needed without excessive CPU and memory consumption + - Uses on-demand block generation, producing blocks when transactions are waiting to be mined This configuration enables developers to experiment with Geth's source code or develop new applications without having to sync to a pre-existing public network. Blocks are only mined when there are pending transactions. Developers can break things on this network without affecting other users. This page will demonstrate how to spin up a local Geth testnet and a simple smart contract will be deployed to it using the Remix online integrated development environment (IDE). ## Prerequisites {#prerequisites} -It is assumed that the user has a working Geth installation (see [installation guide](/docs/install-and-build/installing-geth)). +It is assumed that the user has a working Geth installation (see [installation guide](/docs/getting-started/installing-geth)). It would also be helpful to have basic knowledge of Geth and the Geth console. See [Getting Started](/docs/getting-started). Some basic knowledge of [Solidity](https://docs.soliditylang.org/) and [smart contract deployment](https://ethereum.org/en/developers/tutorials/deploying-your-first-smart-contract/) would be useful. @@ -170,7 +175,7 @@ Now that the user account is funded with ether, a contract can be created ready This tutorial will make use of a classic example smart contract, `Storage.sol`. This contract exposes two public functions, one to add a value to the contract storage and one to view the stored value. The contract, written in Solidity, is provided below: -```solidity +```javascript pragma solidity >=0.7.0; contract Storage{ diff --git a/docs/developers/geth-developer/disclosures.md b/docs/developers/geth-developer/disclosures.md index fc2eb944a5..a9395c7e38 100644 --- a/docs/developers/geth-developer/disclosures.md +++ b/docs/developers/geth-developer/disclosures.md @@ -41,9 +41,9 @@ In keeping with this policy, we have taken inspiration from [Solidity bug disclo ## Disclosed vulnerabilities {#disclosed-vulnerabilities} -There is a JSON-formatted list ([`vulnerabilities.json`](/vulnerabilities.json)) of some of the known security-relevant vulnerabilities concerning Geth. +There is a JSON-formatted list ([`vulnerabilities.json`](/public/docs/vulnerabilities/vulnerabilities.json)) of some of the known security-relevant vulnerabilities concerning Geth. -As of version `1.9.25`, Geth has a built-in command to check whether it is affected by any publically disclosed vulnerability, using the command `geth version-check`. This command will fetch the latest json file (and the accompanying [signature-file](vulnerabilities.json.minisig), and cross-check the data against it's own version number. +As of version `1.9.25`, Geth has a built-in command to check whether it is affected by any publically disclosed vulnerability, using the command `geth version-check`. This command will fetch the latest json file (and the accompanying [signature-file](/public/docs/vulnerabilities/vulnerabilities.json.minisig), and cross-check the data against it's own version number. The list of vulnerabilities was started in November 2020, and covers mainly `v1.9.7` and forward. diff --git a/docs/developers/geth-developer/private-network.md b/docs/developers/geth-developer/private-network.md index 161c6a7c89..87f6a4db5a 100644 --- a/docs/developers/geth-developer/private-network.md +++ b/docs/developers/geth-developer/private-network.md @@ -7,7 +7,7 @@ This guide explains how to set up a private network of multiple Geth nodes. An E ## Prerequisites {#prerequisites} -To follow the tutorial on this page it is necessary to have a working Geth installation (instructions [here](/docs/getting_started/Installing-Geth)). It is also helpful to understand Geth fundamentals (see [Getting Started](/docs/getting_started/getting_started)). +To follow the tutorial on this page it is necessary to have a working Geth installation (instructions [here](/docs/getting-started/installing-geth)). It is also helpful to understand Geth fundamentals (see [Getting Started](/docs/getting-started)). ## Private Networks {#private-networks} diff --git a/docs/faq.md b/docs/faq.md index 94677241bb..80fe501036 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -3,7 +3,7 @@ title: FAQ description: Frequently asked questions related to Geth --- -### Where can I get more information? {#where-can-i-get-more-information} +## Where can I get more information? {#where-can-i-get-more-information} This page contains answers to common questions about Geth. Source code and README documentation can be found on the Geth [Github](https://github.com/ethereum/go-ethereum). You can also ask questions on Geth's [Discord channel](https://discord.gg/WHNkYDsAKU) or keep up to date with Geth on [Twitter](https://twitter.com/go_ethereum). Information about Ethereum in general can be found at [ethereum.org](https://ethereum.org). @@ -20,7 +20,7 @@ RPC stands for Remote Procedure Call. RPC is a mode of communication between pro ## What is `jwtsecret`? {#what-is-jwtsecret} -The `jwtsecret` file is required to create an authenticated connection between Geth and a consensus client. JWT stands for JSON Web Token - it is signed using a secret key. The signed token acts as a shared secret used to check that information is sent to and received from the correct peer. Read about how to create `jwt-secret` in Geth on our [Connecting to consensus clients](/docs/getting_started/consensus-clients) page. +The `jwtsecret` file is required to create an authenticated connection between Geth and a consensus client. JWT stands for JSON Web Token - it is signed using a secret key. The signed token acts as a shared secret used to check that information is sent to and received from the correct peer. Read about how to create `jwt-secret` in Geth on our [consensus clients](/docs/getting-started/consensus-clients) page. ## I noticed my peercount slowly decreasing, and now it is at 0. Restarting doesn't get any peers. {#where-are-my-peers} @@ -32,7 +32,7 @@ sudo ntpdate -s time.nist.gov ## I would like to run multiple Geth instances but got the error "Fatal: blockchain db err: resource temporarily unavailable". {#multiple-geth-instances} -Geth uses a datadir to store the blockchain, accounts and some additional information. This directory cannot be shared between running instances. If you would like to run multiple instances follow [these](/docs/developers/geth-developer/Private-Network) instructions. +Geth uses a datadir to store the blockchain, accounts and some additional information. This directory cannot be shared between running instances. If you would like to run multiple instances follow [these](/docs/developers/geth-developer/private-network) instructions. ## When I try to use the --password command line flag, I get the error "Could not decrypt key with given passphrase" but the password is correct. Why does this error appear? {#could-not-decrypt-key} @@ -94,4 +94,4 @@ These docs mainly cover how to set up Geth, but since the switch to proof-of-sta ## How do I update Geth? {#how-to-update-geth} -Updating Geth to the latest version simply requires stopping the node, downloading the latest release and restarting the node. Precisely how to download the latest software depends on the installation method - please refer to our [Installation pages](/docs/install-and-build/Installing-Geth). +Updating Geth to the latest version simply requires stopping the node, downloading the latest release and restarting the node. Precisely how to download the latest software depends on the installation method - please refer to our [Installation pages](/docs/getting-started/installing-geth). diff --git a/docs/fundamentals/account-management.md b/docs/fundamentals/account-management.md index 12fbf32e0b..be91498500 100644 --- a/docs/fundamentals/account-management.md +++ b/docs/fundamentals/account-management.md @@ -3,7 +3,7 @@ title: Account Management with Clef description: Guide to basic account management using Geth's built-in tools --- -Geth uses an external signer called [Clef](/docs/clef/introduction) to manage accounts. This is a standalone piece of software that runs independently of - but connects to - a Geth instance. Clef handles account creation, key management and signing transactions/data. This page explains how to use Clef to create and manage accounts for use with Geth. More information about Clef, including advanced setup options, are available in our dedicated Clef docs. +Geth uses an external signer called [Clef](/docs/tools/clef/introduction) to manage accounts. This is a standalone piece of software that runs independently of - but connects to - a Geth instance. Clef handles account creation, key management and signing transactions/data. This page explains how to use Clef to create and manage accounts for use with Geth. More information about Clef, including advanced setup options, are available in our dedicated Clef docs. ## Initialize Clef {#initializing-clef} diff --git a/docs/fundamentals/les.md b/docs/fundamentals/les.md index 7c540f8871..81890b183f 100644 --- a/docs/fundamentals/les.md +++ b/docs/fundamentals/les.md @@ -45,7 +45,7 @@ Running a light client simply requires Geth to be started in light mode. It is l geth --syncmode light --http --http.api "eth,debug" ``` -Data can be requested from this light Geth instance in the same way as for a full node (i.e. using the [JSON-RPC-API](/docs/rpc/server) using tools such as [Curl](https://curl.se/) or Geth's [Javascript console](/docs/interface/javascript-console)). Instead of fetching the data from a local database as in a full node, the light Geth instance requests the data from full-node peers. +Data can be requested from this light Geth instance in the same way as for a full node (i.e. using the [JSON-RPC-API](/docs/interacting-with-geth/rpc/) using tools such as [Curl](https://curl.se/) or Geth's [Javascript console](/docs/interacting-with-geth/javascript-console)). Instead of fetching the data from a local database as in a full node, the light Geth instance requests the data from full-node peers. It's also possible to send transactions. However, light clients are not connected directly to Ethereum Mainnet but to a network of light servers that connect to Ethereum Mainnet. This means a transaction submitted by a light client is received first by a light server that then propagates it to full-node peers on the light-client's behalf. This reliance on honest light-servers is one of the trust compromises that comes along with running a light node instead of a full node. diff --git a/docs/fundamentals/logs.md b/docs/fundamentals/logs.md index a7cbd50839..f1757eaf67 100644 --- a/docs/fundamentals/logs.md +++ b/docs/fundamentals/logs.md @@ -128,7 +128,7 @@ INFO [07-28|10:30:18.658] Imported new block headers count=1 el INFO [07-28|10:30:21.665] Imported new state entries ``` -For state sync, Geth reports when the state heal is in progress. This can takea long time. The log message includes values for the number of `accounts`, `slots`, `codes` and `nodes` that were downloaded in the current healing phase, and the pending field is the number of state entires waiting to be downloaded. The `pending` value is not necessarily the number of state entries remaining until the healing is finished. As the blockchain progresses the state trie is updated and therefore the data that needs to be downloaded to heal the trie can increase as well as decrease over time. Ultimately, the state should heal faster than the blockchain progresses so the node can get in sync. When the state healing is finished there is a post-sync snapshot generation phase. The node is not in sync until the state healing phase is over. If the node is still regularly reporting `State heal in progress` it is not yet in sync - the state healing is still ongoing. +For state sync, Geth reports when the state heal is in progress. This can take a long time. The log message includes values for the number of `accounts`, `slots`, `codes` and `nodes` that were downloaded in the current healing phase, and the pending field is the number of state entires waiting to be downloaded. The `pending` value is not necessarily the number of state entries remaining until the healing is finished. As the blockchain progresses the state trie is updated and therefore the data that needs to be downloaded to heal the trie can increase as well as decrease over time. Ultimately, the state should heal faster than the blockchain progresses so the node can get in sync. When the state healing is finished there is a post-sync snapshot generation phase. The node is not in sync until the state healing phase is over. If the node is still regularly reporting `State heal in progress` it is not yet in sync - the state healing is still ongoing. ```terminal INFO [07-28|10:30:21.965] State heal in progress accounts=169,633@7.48MiB slots=57314@4.17MiB codes=4895@38.14MiB nodes=43,293,196@11.70GiB pending=112,626 @@ -198,7 +198,7 @@ The above is often seen and misinterpreted as a problem with snap sync. In reali WARN [10-03|13:10:26.441] Post-merge network, but no beacon client seen. Please launch one to follow the chain! ``` -The above message is emitted when Geth is run without a consensus client on a post-merge proof-of-stake network. Since Ethereum moved to proof-of-stake Geth alone is not enough to follow the chain because the consensus logic is now implemented by a separate piece of software called a consensus client. This log message is displayed when the consensus client is missing. Read more about this on our [consensus clients](/docs/interface/consensus-clients) page. +The above message is emitted when Geth is run without a consensus client on a post-merge proof-of-stake network. Since Ethereum moved to proof-of-stake Geth alone is not enough to follow the chain because the consensus logic is now implemented by a separate piece of software called a consensus client. This log message is displayed when the consensus client is missing. Read more about this on our [consensus clients](/docs/getting-started/consensus-clients) page. ```sh WARN [10-03 |13:10:26.499] Beacon client online, but never received consensus updates. Please ensure your beacon client is operational to follow the chain! diff --git a/docs/fundamentals/mining.md b/docs/fundamentals/mining.md index 7506c9577a..c9b03abfa7 100644 --- a/docs/fundamentals/mining.md +++ b/docs/fundamentals/mining.md @@ -27,7 +27,7 @@ The Ethminer software can be installed from a downloaded binary or built from so ### Using Ethminer with Geth {#using-ethminer} -An account to receive block rewards must first be defined. The address of the account is all that is required to start mining - the mining rewards will be credited to that address. This can be an existing address or one that is newly created by Geth. More detailed instructions on creating and importing accounts are available on the [Account Management](/docs/interface/managing-your-accounts) page. +An account to receive block rewards must first be defined. The address of the account is all that is required to start mining - the mining rewards will be credited to that address. This can be an existing address or one that is newly created by Geth. More detailed instructions on creating and importing accounts are available on the [Account Management](/docs/fundamentals/account-management) page. The account address can be provided to `--mining.etherbase` when Geth is started. This instructs Geth to direct any block rewards to this address. Once started, Geth will sync the blockchain. If Geth has not connected to this network before, or if the data directory has been deleted, this can take several days. Also, enable HTTP traffic with the `--http` command. @@ -35,7 +35,7 @@ The account address can be provided to `--mining.etherbase` when Geth is started geth --http --miner.etherbase 0xC95767AC46EA2A9162F0734651d6cF17e5BfcF10 ``` -The progress of the blockchain syncing can be monitored by attaching a JavaScript console in another terminal. More detailed information about the console can be found on the [Javascript Console](/docs/interface/javascript-console) page. To attach and open a console: +The progress of the blockchain syncing can be monitored by attaching a JavaScript console in another terminal. More detailed information about the console can be found on the [Javascript Console](/docs/interacting-with-geth/javascript-console) page. To attach and open a console: ```sh geth attach http://127.0.0.1:8545 @@ -103,7 +103,7 @@ When Geth is started it is not mining by default. Unless it is specifically inst geth --mine --miner.threads=4 ``` -CPU mining can also be started and stopped at runtime using the [console](/docs/interface/javascript-console). The command `miner.start` takes an optional parameter for the number of miner threads. +CPU mining can also be started and stopped at runtime using the [console](/docs/interacting-with-geth/javascript-console). The command `miner.start` takes an optional parameter for the number of miner threads. ```js miner.start(8); diff --git a/docs/fundamentals/node-architecture.md b/docs/fundamentals/node-architecture.md index a27d5b0627..569e960976 100644 --- a/docs/fundamentals/node-architecture.md +++ b/docs/fundamentals/node-architecture.md @@ -17,7 +17,7 @@ For this two-client structure to work, consensus clients must be able to pass bu As an execution client, Geth is responsible for creating the execution payloads - the list of transactions, updated state trie plus other execution related data - that consensus clients include in their blocks. Geth is also responsible for re-executing transactions that arrive in new blocks to ensure they are valid. Executing transactions is done on Geth's embedded computer, known as the Ethereum Virtual Machine (EVM). -Geth also offers a user-interface to Ethereum by exposing a set of [RPC methods](/developers/docs/apis/json-rpc) that enable users to query the Ethereum blockchain, submit transactions and deploy smart contracts. Often, the RPC calls are abstracted by a library such as [Web3js](https://web3js.readthedocs.io/en/v1.8.0/) or [Web3py](https://web3py.readthedocs.io/en/v5/) for example in Geth's built-in Javascript console, development frameworks or web-apps. +Geth also offers a user-interface to Ethereum by exposing a set of [RPC methods](/docs/interacting-with-geth/rpc/) that enable users to query the Ethereum blockchain, submit transactions and deploy smart contracts. Often, the RPC calls are abstracted by a library such as [Web3js](https://web3js.readthedocs.io/en/v1.8.0/) or [Web3py](https://web3py.readthedocs.io/en/v5/) for example in Geth's built-in Javascript console, development frameworks or web-apps. ## What does the consensus client do? {#consensus-client} diff --git a/docs/fundamentals/peer-to-peer.md b/docs/fundamentals/peer-to-peer.md index 055c658ecb..5fee721b68 100644 --- a/docs/fundamentals/peer-to-peer.md +++ b/docs/fundamentals/peer-to-peer.md @@ -3,12 +3,12 @@ title: Connecting To The Network description: Guide to connecting Geth to a peer-to-peer network --- -The default behaviour for Geth is to connect to Ethereum Mainnet. However, Geth can also connect to public testnets, [private networks](/docs/getting-started/private-net) and [local testnets](/docs/getting-started/dev-mode). For convenience, the two public testnets with long term support, Goerli and Sepolia, have their own command line flag. Geth can connect to these testnets simpyl by passing: +The default behaviour for Geth is to connect to Ethereum Mainnet. However, Geth can also connect to public testnets, [private networks](/docs/developers/geth-developer/private-network.md) and [local testnets](/docs/developers/geth-developer/dev-mode). For convenience, the two public testnets with long term support, Goerli and Sepolia, have their own command line flag. Geth can connect to these testnets simpyl by passing: - `--goerli`, Goerli proof-of-authority test network - `--sepolia` Sepolia proof-of-work test network -These testnets started as proof-of-work and proof-of-authority testnets, but they were transitioned to proof-of-stake in 2022 in preparation for doing the same to Ethereum Mainnet. This means that to run a node on Goerli or Sepolia it is now necessary to run a consensus client connected to Geth. This is also true for Ethereum Mainnet. **Geth does not work on proof-of-stake networks without a consensus client**! The remainder of this page will assume that Geth is connected to a consensus client that is synced to the desired network. For instructions on how to set up a consensus client please see the [Consensus Clients](/docs/interface/consensus-clients) page. +These testnets started as proof-of-work and proof-of-authority testnets, but they were transitioned to proof-of-stake in 2022 in preparation for doing the same to Ethereum Mainnet. This means that to run a node on Goerli or Sepolia it is now necessary to run a consensus client connected to Geth. This is also true for Ethereum Mainnet. **Geth does not work on proof-of-stake networks without a consensus client**! The remainder of this page will assume that Geth is connected to a consensus client that is synced to the desired network. For instructions on how to set up a consensus client please see the [Consensus Clients](/docs/getting-started/consensus-clients) page. **Note:** Network selection is not persisted from a config file. To connect to a pre-defined network you must always enable it explicitly, even when using the `--config` flag to load other configuration values. For example: @@ -40,13 +40,13 @@ There are occasions when Geth simply fails to connect to peers. The common reaso - Some firewall configurations can prohibit UDP traffic. The static nodes feature or `admin.addPeer()` on the console can be used to configure connections manually. -- Running Geth in [light mode](/docs/interface/les) often leads to connectivity issues because there are few nodes running light servers. There is no easy fix for this except to switch Geth out of light mode. **Note that light mode does not curently work on proof-of-stake networks**. +- Running Geth in [light mode](/docs/fundamentals/les) often leads to connectivity issues because there are few nodes running light servers. There is no easy fix for this except to switch Geth out of light mode. **Note that light mode does not curently work on proof-of-stake networks**. - The public test network Geth is connecting to might be deprecated or have a low number of active nodes that are hard to find. In this case, the best action is to switch to an alternative test network. ## Checking Connectivity {#checking-connectivity} -The `net` module has two attributes that enable checking node connectivity from the [interactive Javascript console](/docs/interface/javascript-console). These are `net.listening` which reports whether the Geth node is listening for inbound requests, and `peerCount` which returns the number of active peers the node is connected to. +The `net` module has two attributes that enable checking node connectivity from the [interactive Javascript console](/docs/interacting-with-geth/javascript-console). These are `net.listening` which reports whether the Geth node is listening for inbound requests, and `peerCount` which returns the number of active peers the node is connected to. ```js > net.listening @@ -106,7 +106,7 @@ The `admin` module also includes functions for gathering information about the l ## Custom Networks {#custom-networks} -It is often useful for developers to connect to private test networks rather than public testnets or Etheruem mainnet. These sandbox environments allow block creation without competing against other miners, easy minting of test ether and give freedom to break things without real-world consequences. A private network is started by providing a value to `--networkid` that is not used by any other existing public network ([Chainlist](https://chainlist.org)) and creating a custom `genesis.json` file. Detailed instructions for this are available on the [Private Networks page](/docs/interface/private-network). +It is often useful for developers to connect to private test networks rather than public testnets or Etheruem mainnet. These sandbox environments allow block creation without competing against other miners, easy minting of test ether and give freedom to break things without real-world consequences. A private network is started by providing a value to `--networkid` that is not used by any other existing public network ([Chainlist](https://chainlist.org)) and creating a custom `genesis.json` file. Detailed instructions for this are available on the [Private Networks page](/docs/developers/geth-developer/private-network). ## Static nodes {#static-nodes} diff --git a/docs/fundamentals/pruning.md b/docs/fundamentals/pruning.md index 34e92c85e6..ed53205e34 100644 --- a/docs/fundamentals/pruning.md +++ b/docs/fundamentals/pruning.md @@ -13,9 +13,13 @@ To prune a Geth node at least 40 GB of free disk space is recommended. This mean ## Pruning rules {#pruning-rules} 1. Do not try to prune an archive node. Archive nodes need to maintain ALL historic data by definition. + 2. Ensure there is at least 40 GB of storage space still available on the disk that will be pruned. Failures have been reported with ~25GB of free space. + 3. Geth is at least `v1.10` ideally > `v1.10.3` + 4. Geth is fully sync'd + 5. Geth has finished creating a snapshot that is at least 128 blocks old. This is true when "state snapshot generation" is no longer reported in the logs. With these rules satisfied, Geth's database can be pruned. diff --git a/docs/fundamentals/sync-modes.md b/docs/fundamentals/sync-modes.md index f10f754187..b20e3f86da 100644 --- a/docs/fundamentals/sync-modes.md +++ b/docs/fundamentals/sync-modes.md @@ -46,7 +46,7 @@ It is also possible to create a partial/recent archive node where the node was s A light node syncs very quickly and stores the bare minimum of blockchain data. Light nodes only process block headers, not entire blocks. This greatly reduces the computation time, storage and bandwidth required relative to a full node. This means light nodes are suitable for resource-constrained devices and can catch up to the head of the chain much faster when they are new or have been offline for a while. The trade-off is that light nodes rely heavily on data served by altruistic full nodes. A light client can be used to query data from Ethereum and submit transactions, acting as a locally-hosted Ethereum wallet. However, because they don't keep local copies of the Ethereum state, light nodes can't validate blocks in the same way as full nodes - they receive a proof from the full node and verify it against their local header chain. To start a node in light mode, pass `--syncmode light`. Be aware that full nodes serving light data are relative scarce so light nodes can struggle to find peers. **Light nodes are not currently working on proof-of-stake Ethereum**. -Read more about light nodes on our [LES page](/docs/interface/les). +Read more about light nodes on our [LES page](/docs/fundamentals/les). ## Consensus layer syncing {#consensus-layer-syncing} @@ -66,7 +66,7 @@ Read more in the [optimistic sync specs](https://github.com/ethereum/consensus-s Alternatively, the consensus client can grab a checkpoint from a trusted source which provides a target state to sync up to, before switching to full sync and verifying each block in turn. In this mode, the node trusts that the checkpoint is correct. There are many possible sources for this checkpoint - the gold standard would be to get it out-of-band from another trusted friend, but it could also come from block explorers or [public APIs/web apps](https://eth-clients.github.io/checkpoint-sync-endpoints/). Checkpoint sync is very fast - a consensus cleint should be able to sync in a few minutes using this method. -For troubleshooting, please see the `Syncing` section on the [console log messages](/docs/interface/logs) page. +For troubleshooting, please see the `Syncing` section on the [console log messages](/docs/fundamentals/logs) page. ## Summary {#summary} diff --git a/docs/getting-started/consensus-clients.md b/docs/getting-started/consensus-clients.md index 2772060950..c1d0507ca9 100644 --- a/docs/getting-started/consensus-clients.md +++ b/docs/getting-started/consensus-clients.md @@ -9,7 +9,7 @@ There are five consensus clients available, all of which connect to Geth in the ## Configuring Geth {#configuring-geth} -Geth can be downloaded and installed according to the instructions on the [Installing Geth](/docs/install-and-build/installing-geth) page. In order to connect to a consensus client, Geth must expose a port for the inter-client RPC connection. +Geth can be downloaded and installed according to the instructions on the [Installing Geth](/docs/getting-started/installing-geth) page. In order to connect to a consensus client, Geth must expose a port for the inter-client RPC connection. The RPC connection must be authenticated using a `jwtsecret` file. This is created and saved to `/geth/jwtsecret` by default but can also be created and saved to a custom location or it can be self-generated and provided to Geth by passing the file path to `--authrpc.jwtsecret`. The `jwtsecret` file is required by both Geth and the consensus client. @@ -55,7 +55,7 @@ Please see the pages on [syncing](/docs/fundamentals/sync-modes) for more detail ## Using Geth {#using-geth} -Geth is the portal for users to send transactions to Ethereum. The Geth Javascript console is available for this purpose, and the majority of the [JSON-RPC API](/docs/rpc/server) will remain available via web3js or HTTP requests with commands as json payloads. These options are explained in more detail on the [Javascript Console page](/docs/interface/javascript-console). The Javascript console can be started +Geth is the portal for users to send transactions to Ethereum. The Geth Javascript console is available for this purpose, and the majority of the [JSON-RPC API](/docs/rpc/server) will remain available via web3js or HTTP requests with commands as json payloads. These options are explained in more detail on the [Javascript Console page](/docs/interacting-with-geth/javascript-console). The Javascript console can be started using the following command in a separate terminal (assuming Geth's IPC file is saved in `datadir`): ```sh diff --git a/docs/interacting-with-geth/javascript-console.md b/docs/interacting-with-geth/javascript-console.md index 30d2e53a9e..e81e5a0074 100644 --- a/docs/interacting-with-geth/javascript-console.md +++ b/docs/interacting-with-geth/javascript-console.md @@ -3,7 +3,7 @@ title: JavaScript Console description: How to interact with Geth using Javascript --- -Geth responds to instructions encoded as JSON objects as defined in the [JSON-RPC-API](/docs/rpc/server). A Geth user can send these instructions directly, for example over HTTP using tools like [Curl](https://github.com/curl/curl). The code snippet below shows a request for an account balance sent to a local Geth node with the HTTP port `8545` exposed. +Geth responds to instructions encoded as JSON objects as defined in the [JSON-RPC-API](/docs/interacting-with-geth/rpc/server). A Geth user can send these instructions directly, for example over HTTP using tools like [Curl](https://github.com/curl/curl). The code snippet below shows a request for an account balance sent to a local Geth node with the HTTP port `8545` exposed. ```sh curl --data '{"jsonrpc":"2.0","method":"eth_getBalance", "params": ["0x9b1d35635cc34752ca54713bb99d38614f63c955", "latest"], "id":2}' -H "Content-Type: application/json" localhost:8545 @@ -18,7 +18,7 @@ This returns a result which is also a JSON object, with values expressed as hexa This is a low level and rather error-prone way to interact with Geth. Most developers prefer to use convenience libraries that abstract away some of the more tedious and awkward tasks such as converting values from hexadecimal strings into numbers, or converting between denominations of ether (Wei, Gwei, etc). One such library is [Web3.js](https://web3js.readthedocs.io/en/v1.7.3/). The purpose of Geth's Javascript console is to provide a built-in environment to use a subset of the Web3.js libraries to interact with a Geth node. -{% include note.html content="The web3.js version that comes bundled with Geth is not up to date with the official Web3.js documentation. There are several Web3.js libraries that are not available in the Geth Javascript Console. There are also administrative APIs included in the Geth console that are not documented in the Web3.js documentation. The full list of libraries available in the Geth console is available on the [JSON-RPC API page](/docs/rpc/server)." %} +{% include note.html content="The web3.js version that comes bundled with Geth is not up to date with the official Web3.js documentation. There are several Web3.js libraries that are not available in the Geth Javascript Console. There are also administrative APIs included in the Geth console that are not documented in the Web3.js documentation. The full list of libraries available in the Geth console is available on the [JSON-RPC API page](/docs/interacting-with-geth/rpc/server)." %} ## Starting the console {#starting-the-console} @@ -77,9 +77,7 @@ To exit, press ctrl-d or type exit ## Interactive use {#interactive-use} -Once the console has been started, it can be used to interact with Geth. The console supports Javascript and the full Geth [JSON-RPC API](/docs/rpc/server). For example: - -To check the balance of the first account already existing in the keystore: +Once the console has been started, it can be used to interact with Geth. The console supports Javascript and the full Geth [JSON-RPC API](/docs/interacting-with-geth/rpc/server). For example, to check the balance of the first account already existing in the keystore: ```js eth.getBalance(eth.accounts[0]); @@ -95,9 +93,7 @@ eth.sendTransaction({ }); ``` -It is also possible to load pre-written Javascript files into the console by passing the `--preload` flag -when starting the console. This is useful for setting up complex contract objects or loading frequently-used -functions. +It is also possible to load pre-written Javascript files into the console by passing the `--preload` flag when starting the console. This is useful for setting up complex contract objects or loading frequently-used functions. ```sh geth console --preload "/my/scripts/folder/utils.js" @@ -109,8 +105,7 @@ Remember that interactions that touch accounts need approval in Clef - either ma ## Non-interactive Use: Script Mode {#non-interactive-use} -It is also possible to execute JavaScript code non-interactively by passing the `--exec` and a JSON-RPC-API endpoint -to `geth attach` or `geth console`. The result is displayed directly in the terminal rather than in an interactive Javascript console. +It is also possible to execute JavaScript code non-interactively by passing the `--exec` and a JSON-RPC-API endpoint to `geth attach` or `geth console`. The result is displayed directly in the terminal rather than in an interactive Javascript console. For example, to display the accounts in the keystore: @@ -130,8 +125,7 @@ geth attach http://geth.example.org:8545 --exec 'loadScript("/tmp/checkbalances. geth attach http://geth.example.org:8545 --jspath "/tmp" --exec 'loadScript("checkbalances.js")' ``` -The `--jspath` flag is used to set a library directory for the Javascript scripts. Any parameters passed to `loadScript()` -that do not explicitly define an absolute path will be interpreted relative to the `jspath` directory. +The `--jspath` flag is used to set a library directory for the Javascript scripts. Any parameters passed to `loadScript()` that do not explicitly define an absolute path will be interpreted relative to the `jspath` directory. ## Timers {#timers} diff --git a/docs/interacting-with-geth/rpc/batch.md b/docs/interacting-with-geth/rpc/batch.md index 3afd8ae08f..7d510d3417 100644 --- a/docs/interacting-with-geth/rpc/batch.md +++ b/docs/interacting-with-geth/rpc/batch.md @@ -41,4 +41,4 @@ In this case there's no dependency between the requests. Often the retrieved dat - First to download the list of transaction hashes for all of the blocks in our desired range - And then to download the list of receipts objects for all of the transaction hashes -For use-cases which depend on several JSON-RPC endpoints the batching approach can get easily complicated. In that case Geth offers a [GraphQL API](./graphql) which is more suitable. +For use-cases which depend on several JSON-RPC endpoints the batching approach can get easily complicated. In that case Geth offers a [GraphQL API](/docs/interacting-with-geth/rpc/graphql) which is more suitable. diff --git a/docs/interacting-with-geth/rpc/index.md b/docs/interacting-with-geth/rpc/index.md index a069679d39..47cea2bd4f 100644 --- a/docs/interacting-with-geth/rpc/index.md +++ b/docs/interacting-with-geth/rpc/index.md @@ -60,7 +60,7 @@ The `--http.corsdomain` command also acceptsd wildcards that enable access to th Websocket is a bidirectional transport protocol. A Websocket connection is maintained by client and server until it is explicitly terminated by one. Most modern browsers support Websocket which means it has good tooling. -Because Websocket is bidirectional, servers can push events to clients. That makes Websocket a good choice for use-cases involving [event subscription](/docs/rpc/pubsub). Another benefit of Websocket is that after the handshake procedure, the overhead of individual messages is low, +Because Websocket is bidirectional, servers can push events to clients. That makes Websocket a good choice for use-cases involving [event subscription](/docs/interacting-with-geth/rpc/pubsub). Another benefit of Websocket is that after the handshake procedure, the overhead of individual messages is low, making it good for sending high number of requests. Configuration of the WebSocket endpoint in Geth follows the same pattern as the HTTP transport. WebSocket access can be enabled using the `--ws` flag. If no additional information is provided, Geth falls back to its default behaviour which is to establish the Websocket on port 8546. The `--ws.addr`, `--ws.port` and `--ws.api` flags can be used to customize settings for the WebSocket server. For example, to start Geth with a Websocket connection for RPC using @@ -116,7 +116,7 @@ to subscribe to events. HTTP is a familiar and idempotent transport that closes ## Engine-API {#engine-api} -The Engine-API is a set of RPC methods that enable communication between Geth and the [consensus client](/docs/getting_started/consensus-clients). These are not designed to be exposed to the user - instead they are called automatically by the clients when they need to exchange information. The Engine API is enabled by default - the user is not required to pass any instruction to Geth to enable these methods. +The Engine-API is a set of RPC methods that enable communication between Geth and the [consensus client](/docs/getting-started/consensus-clients). These are not designed to be exposed to the user - instead they are called automatically by the clients when they need to exchange information. The Engine API is enabled by default - the user is not required to pass any instruction to Geth to enable these methods. Read more in the [Engine API spec](https://github.com/ethereum/execution-apis/blob/main/src/engine/specification.md). diff --git a/docs/interacting-with-geth/rpc/ns-admin.md b/docs/interacting-with-geth/rpc/ns-admin.md index d9820168e7..2de27f1bd6 100644 --- a/docs/interacting-with-geth/rpc/ns-admin.md +++ b/docs/interacting-with-geth/rpc/ns-admin.md @@ -105,7 +105,7 @@ The `nodeInfo` administrative property can be queried for all the information kn ## admin_peerEvents {#admin-peerevents} -PeerEvents creates an [RPC subscription](/docs/rpc/pubsub) which receives peer events from the node's p2p server. The type of events emitted by the server are as follows: +PeerEvents creates an [RPC subscription](/docs/interacting-with-geth/rpc/pubsub) which receives peer events from the node's p2p server. The type of events emitted by the server are as follows: - `add`: emitted when a peer is added - `drop`: emitted when a peer is dropped @@ -179,7 +179,7 @@ Removes a remote node from the trusted peer set, but it does not disconnect it a ## admin_startHTTP {#admin-starthttp} -The `startHTTP` administrative method starts an HTTP based JSON-RPC [API](/docs/rpc/server) webserver to handle client requests. All the parameters are optional: +The `startHTTP` administrative method starts an HTTP based JSON-RPC [API](/docs/interacting-with-geth/rpc/server) webserver to handle client requests. All the parameters are optional: - `host`: network interface to open the listener socket on (defaults to `"localhost"`) - `port`: network port to open the listener socket on (defaults to `8545`) diff --git a/docs/interacting-with-geth/rpc/ns-debug.md b/docs/interacting-with-geth/rpc/ns-debug.md index 3ea5e8b2ae..8ce151439f 100644 --- a/docs/interacting-with-geth/rpc/ns-debug.md +++ b/docs/interacting-with-geth/rpc/ns-debug.md @@ -199,7 +199,7 @@ Retrieves and returns the RLP encoded block by number. | Console | `debug.getBlockRlp(number, [options])` | | RPC | `{"method": "debug_getBlockRlp", "params": [number]}` | -References: [RLP](https://github.com/ethereum/wiki/wiki/RLP) +References: [RLP](https://ethereum.org/en/developers/docs/data-structures-and-encoding/rlp/) ### debug_getHeaderRlp @@ -334,7 +334,7 @@ Sets the current head of the local chain by block number. **Note**, this is a de | RPC | `{"method": "debug_setHead", "params": [number]}` | References: -[Ethash](https://eth.wiki/en/concepts/ethash/ethash) +[Ethash](https://ethereum.org/en/developers/docs/consensus-mechanisms/pow/mining-algorithms/ethash/) ### debug_setMutexProfileFraction @@ -475,7 +475,7 @@ The `traceBlock` method will return a full stack trace of all invoked opcodes of | RPC | `{"method": "debug_traceBlock", "params": [blockRlp, {}]}` | References: -[RLP](https://github.com/ethereum/wiki/wiki/RLP) +[RLP](https://ethereum.org/en/developers/docs/data-structures-and-encoding/rlp/) #### Example @@ -524,7 +524,7 @@ Similar to [debug_traceBlock](#debug_traceblock), `traceBlockByNumber` accepts a | RPC | `{"method": "debug_traceBlockByNumber", "params": [number, {}]}` | References: -[RLP](https://github.com/ethereum/wiki/wiki/RLP) +[RLP](https://ethereum.org/en/developers/docs/data-structures-and-encoding/rlp/) ### debug_traceBlockByHash @@ -537,7 +537,7 @@ Similar to [debug_traceBlock](#debug_traceblock), `traceBlockByHash` accepts a b | RPC | `{"method": "debug_traceBlockByHash", "params": [hash {}]}` | References: -[RLP](https://github.com/ethereum/wiki/wiki/RLP) +[RLP](https://ethereum.org/en/developers/docs/data-structures-and-encoding/rlp/) ### debug_traceBlockFromFile @@ -550,11 +550,11 @@ Similar to [debug_traceBlock](#debug_traceblock), `traceBlockFromFile` accepts a | RPC | `{"method": "debug_traceBlockFromFile", "params": [fileName, {}]}` | References: -[RLP](https://github.com/ethereum/wiki/wiki/RLP) +[RLP](https://ethereum.org/en/developers/docs/data-structures-and-encoding/rlp/) ### debug_traceCall -The `debug_traceCall` method lets you run an `eth_call` within the context of the given block execution using the final state of parent block as the base. The first argument (just as in `eth_call`) is a [transaction object](/docs/rpc/objects#transaction-call-object). The block can be specified either by hash or by number as the second argument. The trace can be configured similar to `debug_traceTransaction`, see [TraceConfig](#traceconfig). The method returns the same output as `debug_traceTransaction`. +The `debug_traceCall` method lets you run an `eth_call` within the context of the given block execution using the final state of parent block as the base. The first argument (just as in `eth_call`) is a [transaction object](/docs/interacting-with-geth/rpc/objects#transaction-call-object). The block can be specified either by hash or by number as the second argument. The trace can be configured similar to `debug_traceTransaction`, see [TraceConfig](#traceconfig). The method returns the same output as `debug_traceTransaction`. | Client | Method invocation | | :-----: | --------------------------------------------------------------------------------------------------------------------------- | @@ -638,7 +638,7 @@ Returns the structured logs created during the execution of EVM between two bloc const res = provider.send('debug_subscribe', ['traceChain', '0x3f3a2a', '0x3f3a2b'])` ``` -please refer to the [subscription page](https://geth.ethereum.org/docs/rpc/pubsub) for more details. +please refer to the [subscription page](/docs/interacting-with-geth/rpc/pubsub) for more details. ### debug_traceTransaction @@ -667,9 +667,9 @@ If set, the previous four arguments will be ignored. - `timeout`: `STRING`. Overrides the default timeout of 5 seconds for JavaScript-based tracing calls. Valid values are described [here](https://golang.org/pkg/time/#ParseDuration). -- `tracerConfig`: Config for the specified `tracer`. For example see callTracer's [config](/docs/evm-tracing/builtin-tracers#config). +- `tracerConfig`: Config for the specified `tracer`. For example see callTracer's [config](/docs/developers/evm-tracing/built-in-tracers#config). -Geth comes with a bundle of [built-in tracers](/docs/evm-tracing/builtin-tracers), each providing various data about a transaction. This method defaults to the [struct logger](/docs/evm-tracing/builtin-tracers#structopcode-logger). The `tracer` field of the second parameter can be set to use any of the other tracers. Alternatively a [custom tracer](/docs/evm-tracing/custom-tracer) can be implemented in either Go or Javascript. +Geth comes with a bundle of [built-in tracers](/docs/developers/evm-tracing//built-in-tracers), each providing various data about a transaction. This method defaults to the [struct logger](/docs/developers/evm-tracing/built-in-tracers#structopcode-logger). The `tracer` field of the second parameter can be set to use any of the other tracers. Alternatively a [custom tracer](/docs/developers/evm-tracing/custom-tracer) can be implemented in either Go or Javascript. #### Example diff --git a/docs/interacting-with-geth/rpc/ns-eth.md b/docs/interacting-with-geth/rpc/ns-eth.md index 0b737a12ab..8f9bf247bd 100644 --- a/docs/interacting-with-geth/rpc/ns-eth.md +++ b/docs/interacting-with-geth/rpc/ns-eth.md @@ -7,7 +7,7 @@ Documentation for the API methods in the `eth` namespace can be found on [ethere ### eth_subscribe, eth_unsubscribe {#eth-subscribe-unsubscribe} -These methods are used for real-time events through subscriptions. See the [subscription documentation](/docs/interacting_with_geth/RPC/pubsub) for more information. +These methods are used for real-time events through subscriptions. See the [subscription documentation](/docs/interacting-with-geth/rpc/pubsub) for more information. ### eth_call {#eth-call} @@ -19,7 +19,7 @@ The method takes 3 parameters: an unsigned transaction object to execute in read ##### 1. `Object` - Transaction call object -The _transaction call object_ is mandatory. Please see [here](/docs/interacting_with_geth/RPC/objects) for details. +The _transaction call object_ is mandatory. Please see [here](/docs/interacting-with-geth/rpc/objects) for details. ##### 2. `Quantity | Tag` - Block number or the string `latest` or `pending` @@ -40,7 +40,9 @@ The _state override set_ is an optional address-to-state mapping, where each ent The goal of the _state override set_ is manyfold: - It can be used by DApps to reduce the amount of contract code needed to be deployed on chain. Code that simply returns internal state or does pre-defined validations can be kept off chain and fed to the node on-demand. + - It can be used for smart contract analysis by extending the code deployed on chain with custom methods and invoking them. This avoids having to download and reconstruct the entire state in a sandbox to run custom code against. + - It can be used to debug smart contracts in an already deployed large suite of contracts by selectively overriding some code or state and seeing how execution changes. Specialized tooling will probably be necessary. Example: @@ -138,7 +140,7 @@ Just for the sake of completeness, decoded the response is: `2`. ### eth_createAccessList {#eth-createaccesslist} -This method creates an [EIP2930](https://eips.ethereum.org/EIPS/eip-2930) type `accessList` based on a given `Transaction`. The `accessList` contains all storage slots and addresses read and written by the transaction, except for the sender account and the precompiles. This method uses the same `transaction` call [object](/docs/rpc/objects#transaction-call-object) and `blockNumberOrTag` object as `eth_call`. An `accessList` can be used to unstuck contracts that became inaccessible due to gas cost increases. +This method creates an [EIP2930](https://eips.ethereum.org/EIPS/eip-2930) type `accessList` based on a given `Transaction`. The `accessList` contains all storage slots and addresses read and written by the transaction, except for the sender account and the precompiles. This method uses the same `transaction` call [object](/docs/interacting-with-geth/rpc/objects#transaction-call-object) and `blockNumberOrTag` object as `eth_call`. An `accessList` can be used to unstuck contracts that became inaccessible due to gas cost increases. #### Parameters diff --git a/docs/interacting-with-geth/rpc/ns-personal.md b/docs/interacting-with-geth/rpc/ns-personal.md index 87eed5a427..24ec453aed 100644 --- a/docs/interacting-with-geth/rpc/ns-personal.md +++ b/docs/interacting-with-geth/rpc/ns-personal.md @@ -5,7 +5,7 @@ description: Documentation for the JSON-RPC API "personal" namespace {% include note.html content="The personal namespace will be deprecated in the very near future." %} -The personal API managed private keys in the key store. It is deprecated in favour of using [Clef](/docs/tools/clef/Introduction.md) for interacting with accounts Please refer to the [ns_personal deprecation page](/docs/interacting-with-geth/rpc/ns_personal_deprecation.md) to see the equivalent methods. The following documentation should be treated as archive information and users should migrate tousing Clef for account interactions. +The personal API managed private keys in the key store. It is deprecated in favour of using [Clef](/docs/tools/clef/Introduction) for interacting with accounts Please refer to the [ns_personal deprecation page](/docs/interacting-with-geth/rpc/ns_personal_deprecation) to see the equivalent methods. The following documentation should be treated as archive information and users should migrate tousing Clef for account interactions. ## personal_deriveAccount {#personal-deriveaccount} @@ -172,7 +172,7 @@ Deletes a pairing between wallet and Geth. Validate the given passphrase and submit transaction. -The transaction is the same argument as for `eth_sendTransaction` (i.e. [transaction object](/docs/rpc/objects#transaction-call-object)) and contains the `from` address. If the passphrase can be used to decrypt the private key belogging to `tx.from` the transaction is verified, signed and send onto the network. The account is not unlocked globally in the node and cannot be used in other RPC calls. +The transaction is the same argument as for `eth_sendTransaction` (i.e. [transaction object](/docs/interacting-with-geth/rpc/objects#transaction-call-object)) and contains the `from` address. If the passphrase can be used to decrypt the private key belogging to `tx.from` the transaction is verified, signed and send onto the network. The account is not unlocked globally in the node and cannot be used in other RPC calls. | Client | Method invocation | | :------ | ---------------------------------------------------------------- | @@ -211,7 +211,7 @@ See ecRecover to verify the signature. ## personal_signTransaction {#personal-signtransaction} -SignTransaction will create a transaction from the given arguments and tries to sign it with the key associated with `tx.from`. If the given passwd isn't able to decrypt the key it fails. The transaction is returned in RLP-form, not broadcast to other nodes. The first argument is a [transaction object](/docs/interacting_with_geth/RPC/objects) and the second argument is the password, similar to `personal_sendTransaction`. +SignTransaction will create a transaction from the given arguments and tries to sign it with the key associated with `tx.from`. If the given passwd isn't able to decrypt the key it fails. The transaction is returned in RLP-form, not broadcast to other nodes. The first argument is a [transaction object](/docs/interacting-with-geth/rpc/objects) and the second argument is the password, similar to `personal_sendTransaction`. | Client | Method invocation | | :------ | ---------------------------------------------------------------- | diff --git a/docs/interacting-with-geth/rpc/ns_personal_deprecation.md b/docs/interacting-with-geth/rpc/ns_personal_deprecation.md index a4e4ae880b..4f2137ccd0 100644 --- a/docs/interacting-with-geth/rpc/ns_personal_deprecation.md +++ b/docs/interacting-with-geth/rpc/ns_personal_deprecation.md @@ -3,7 +3,7 @@ title: Personal namespace deprecation notes description: Alternatives to the methods in the deprecated personal namespace --- -The JSON-RPC API's `personal` namespace has historically been used to manage accounts and sign transactions and data over RPC. However, it is being deprecated in favour of using [Clef](/docs/tools/clef/Introduction.md) as an external signer and account manager. One of the major changes is moving away from indiscriminate locking and unlocking of accounts and instead using Clef to explicitly approve or deny specific actions. This page shows the suggested replacement for each method in `personal`. +The JSON-RPC API's `personal` namespace has historically been used to manage accounts and sign transactions and data over RPC. However, it is being deprecated in favour of using [Clef](/docs/tools/clef/Introduction) as an external signer and account manager. One of the major changes is moving away from indiscriminate locking and unlocking of accounts and instead using Clef to explicitly approve or deny specific actions. This page shows the suggested replacement for each method in `personal`. ## Methods without replacements diff --git a/docs/interacting-with-geth/rpc/pubsub.md b/docs/interacting-with-geth/rpc/pubsub.md index 7eee1a038b..e27b3e45bf 100644 --- a/docs/interacting-with-geth/rpc/pubsub.md +++ b/docs/interacting-with-geth/rpc/pubsub.md @@ -34,8 +34,11 @@ to cancel the subscription: ## Considerations {#considerations} 1. Notifications are sent for current events and not for past events. For use cases that depend on not to miss any notifications subscriptions are probably not the best option. + 2. Subscriptions require a full duplex connection. Geth offers such connections in the form of WebSocket and IPC (enabled by default). + 3. Subscriptions are coupled to a connection. If the connection is closed all subscriptions that are created over this connection are removed. + 4. Notifications are stored in an internal buffer and sent from this buffer to the client. If the client is unable to keep up and the number of buffered notifications reaches a limit (currently 10k) the connection is closed. Keep in mind that subscribing to some events can cause a flood of notifications, e.g. listening for all logs/blocks when the node starts to synchronize. ## Create subscription {#create-subscriptions} diff --git a/docs/monitoring/dashboards.md b/docs/monitoring/dashboards.md index 68b0b6a7a6..7a73e72d8c 100644 --- a/docs/monitoring/dashboards.md +++ b/docs/monitoring/dashboards.md @@ -10,6 +10,7 @@ There are several ways to monitor the performance of a Geth node. Insights into To follow along with the instructions on this page it will be useful to have: - a running Geth instance. + - basic working knowlegde of bash/terminal. [This video](https://www.youtube.com/watch?v=cOBab8IJMYI) provides an excellent introduction to Geth monitoring. @@ -130,7 +131,7 @@ Grafana is now set up to read data from InfluxDB. Now a dashboard can be created For a Geth monitoring dashboard, copy the URL of [this dashboard](https://grafana.com/grafana/dashboards/13877/) and paste it in the "Import page" in Grafana. After saving the dashboard, it should look like this: -![Grafana 1](/public/images/docs/grafana.png) +![Grafana 1](/images/docs/grafana.png) ## Customization {#customization} diff --git a/docs/monitoring/ethstats.md b/docs/monitoring/ethstats.md index 7fe3fbed5f..22bb2d66c9 100644 --- a/docs/monitoring/ethstats.md +++ b/docs/monitoring/ethstats.md @@ -29,7 +29,9 @@ Ethstats has three components: - a server that consumes data sent to it by each individual node on a network and serves statistics generated from that data. + - a client that queries a node and sends its data to the server + - a dashboard that displays the statistics generated by the server The summary dashboard for Ethereum Mainnet can be viewed at [ethstats.net](https://ethstats.net/). @@ -48,8 +50,11 @@ each with detailed installation instructions. They all share the common trait th started with a specific URL that can be passed to Geth. [EthNetStats "Classic"](https://github.com/ethereum/eth-netstats) + [EthNet Intelligence API](https://github.com/ethereum/eth-net-intelligence-api) + [Goerli Ethstats client](https://github.com/goerli/ethstats-client) + [Goerli Ethstats server](https://github.com/goerli/ethstats-server) If enabled, Geth spins up a minimal Ethstats reporting daemon that pushes statistics about the diff --git a/docs/resources.md b/docs/resources.md index f9db44e993..6a5632a450 100644 --- a/docs/resources.md +++ b/docs/resources.md @@ -1,5 +1,5 @@ --- -title: resources +title: Resources description: Read, watch and listen more about Geth and Ethereum --- diff --git a/docs/tools/clef/rules.md b/docs/tools/clef/rules.md index b2c2b2f57f..29768078be 100644 --- a/docs/tools/clef/rules.md +++ b/docs/tools/clef/rules.md @@ -25,7 +25,7 @@ The ruleset engine acts as a gatekeeper to the command line interface - it auto- ![Clef ruleset logic](/images/docs/clef_ruleset.png) -When Clef receives a request, the ruleset engine evaluates a Javascript file for each method defined in the internal [UI API docs](/docs/tools/Clef/apis). For example the code snippet below is an example ruleset that calls the function `ApproveTx`. The call to `ApproveTx` is invoking the `ui_approveTx` [JSON_RPC API endpoint](/docs/tools/Clef/apis). Every time an RPC method is invoked the Javascript code is executed in a freshly instantiated virtual machine. +When Clef receives a request, the ruleset engine evaluates a Javascript file for each method defined in the internal [UI API docs](/docs/tools/clef/apis). For example the code snippet below is an example ruleset that calls the function `ApproveTx`. The call to `ApproveTx` is invoking the `ui_approveTx` [JSON_RPC API endpoint](/docs/tools/clef/apis). Every time an RPC method is invoked the Javascript code is executed in a freshly instantiated virtual machine. ```js function asBig(str) { diff --git a/docs/tools/clef/tutorial.md b/docs/tools/clef/tutorial.md index dad09474de..340d5c952a 100644 --- a/docs/tools/clef/tutorial.md +++ b/docs/tools/clef/tutorial.md @@ -49,7 +49,7 @@ _For readability purposes, we'll remove the WARNING printout, user confirmation ## Remote interactions {#remote-interactions} -This tutorial will use Clef with Geth on the Goerli testnet. The accounts used will be in the Goerli keystore with the path `~/go-ethereum/goerli-data/keystore`. The tutorial assumes there are two accounts in this keystore. Instructions for creating accounts can be found on the [Account managament page](/docs/interface/managing-your-accounts). Note that Clef can also interact with hardware wallets, although that is not demonstrated here. +This tutorial will use Clef with Geth on the Goerli testnet. The accounts used will be in the Goerli keystore with the path `~/go-ethereum/goerli-data/keystore`. The tutorial assumes there are two accounts in this keystore. Instructions for creating accounts can be found on the [Account managament page](/docs/fundamentals/account-management). Note that Clef can also interact with hardware wallets, although that is not demonstrated here. Clef should be started before Geth, otherwise Geth will complain that it cannot find a Clef instance to connect to. Clef should be started with the correct `chainid` for Goerli. Clef itself does not connect to a blockchain, but the `chainID` parameter is included in the data that is aggregated to form a signature. Clef also needs a path to the correct keystore passed to the `--keystore` command. A custom path to the config directory can also be provided. This is where the `ipc` file will be saved which is needed to connect Clef to Geth: @@ -77,7 +77,7 @@ INFO [07-01|11:00:46.392] IPC endpoint opened url=go-ethere Clef starts up in CLI (Command Line Interface) mode by default. Arbitrary remote processes may _request_ account interactions (e.g. sign a transaction), which the user can individually _confirm_ or _deny_. -The code snippet below shows a request made to Clef via its _External API endpoint_ using [NetCat](http://netcat.sourceforge.net/). The request invokes the ["account_list"](/docs/tools/Clef/apis#accountlist) endpoint which lists the accounts in the keystore. This command should be run in a new terminal. +The code snippet below shows a request made to Clef via its _External API endpoint_ using [NetCat](http://netcat.sourceforge.net/). The request invokes the ["account_list"](/docs/tools/clef/apis#accountlist) endpoint which lists the accounts in the keystore. This command should be run in a new terminal. ```sh echo '{"id": 1, "jsonrpc": "2.0", "method": "account_list"}' | nc -U ~/.clef/clef.ipc @@ -134,7 +134,7 @@ geth attach goerli-data/geth.ipc A simple request to list the accounts in the keystore will cause the Javascript console to hang. ```js -eth.accounts; +eth.accounts ``` Switching to the Clef terminal reveals that this is because the request is awaiting explicit confirmation from the user. The log is identical to the one shown above, when the same request for account information was made to Clef via Netcat: @@ -208,7 +208,7 @@ For example, well defined rules such as: ### Rule files {#rule-files} -Rules are implemented as Javascript code in `js` files. The ruleset engine includes the same methods as the JSON_RPC defined in the [UI Protocol](/docs/_clef/datatypes). The following code snippet demonstrates a rule file that approves a transaction if it satisfies the following conditions: +Rules are implemented as Javascript code in `js` files. The ruleset engine includes the same methods as the JSON_RPC defined in the [UI Protocol](/docs/tools/clef/datatypes). The following code snippet demonstrates a rule file that approves a transaction if it satisfies the following conditions: - the recipient is `0xae967917c465db8578ca9024c205720b1a3651a9` - the value is less than 50000000000000000 wei (0.05 ETH) @@ -503,7 +503,7 @@ t=2022-07-01T15:52:23+0300 lvl=info msg=SignData api=signer type=request meta t=2022-07-01T15:52:23+0300 lvl=info msg=SignData api=signer type=response data= error="Request denied" ``` -More examples, including a ruleset for a rate-limited window, are available on the [Clef Github](https://github.com/ethereum/go-ethereum/blob/master/cmd/clef/rules.md#example-1-ruleset-for-a-rate-limited-window) and on the [Rules page](/docs/tools/Clef/rules). +More examples, including a ruleset for a rate-limited window, are available on the [Clef Github](https://github.com/ethereum/go-ethereum/blob/master/cmd/clef/rules.md#example-1-ruleset-for-a-rate-limited-window) and on the [Rules page](/docs/tools/clef/rules). ## Under the hood {#under-the-hood} @@ -568,9 +568,9 @@ cat ~/.clef/02f90c0603f4f2f60188/config.json This tutorial has bounced back and forth between demonstrating Clef as a standalone tool by making 'manual` JSON RPC requests from the terminal and integrating it as a backend singer for Geth. Using Clef for account management is considered best practise for Geth users because of the additional security benefits it offers over and above what it offered by Geth's built-in accounts module. Clef is far more flexible and composable than Geth's built-in account management tool and can interface directly with hardware wallets, while Apps and wallets can request signatures directly from Clef. -Ultimately, the goal is to deprecate Geth's account management tools completely and replace them with Clef. Until then, users are simply encouraged to choose to use Clef as an optional backend signer for Geth. In addition to the examples on this page, the [Getting started tutorial](/docs/_getting-started/index) also demonstrates Clef/Geth integration. +Ultimately, the goal is to deprecate Geth's account management tools completely and replace them with Clef. Until then, users are simply encouraged to choose to use Clef as an optional backend signer for Geth. In addition to the examples on this page, the [Getting started tutorial](/docs/getting-started) also demonstrates Clef/Geth integration. ## Summary {#summary} -This page includes step-by-step instructions for basic and intermediate uses of Clef, including using it as a standalone app and a backend signer for Geth. Further information is available on our other Clef pages, including [Introduction](/docs/clef/introduction), [Setup](/docs/clef/setup), -[Rules](/docs/clef/rules), [Communication Datatypes](/docs/clef/datatypes) and [Communication APIs](/docs/clef/apis). Also see the [Clef Github](https://github.com/ethereum/go-ethereum/tree/master/cmd/clef) for further reading. +This page includes step-by-step instructions for basic and intermediate uses of Clef, including using it as a standalone app and a backend signer for Geth. Further information is available on our other Clef pages, including [Introduction](/docs/clef/introduction), [Setup](/docs/tools/clef/setup), +[Rules](/docs/tools/clef/rules), [Communication Datatypes](/docs/clef/datatypes) and [Communication APIs](/docs/tools/clef/apis). Also see the [Clef Github](https://github.com/ethereum/go-ethereum/tree/master/cmd/clef) for further reading. diff --git a/docs/tools/devp2p.md b/docs/tools/devp2p.md index 9b8335de04..9f443adaf0 100644 --- a/docs/tools/devp2p.md +++ b/docs/tools/devp2p.md @@ -65,7 +65,7 @@ Run `devp2p dns to-cloudflare ` to publish a tree to CloudFlare DNS. Run `devp2p dns to-route53 ` to publish a tree to Amazon Route53. -More information about these commands can be found in the [DNS Discovery Setup Guide](/docs/developers/dns-discovery-setup). +More information about these commands can be found in the [DNS Discovery Setup Guide](/docs/developers/geth-developer/dns-discovery-setup). ## Node Set Utilities {#node-set-utilities} diff --git a/docs/tools/puppeth.md b/docs/tools/puppeth.md index 20cbeaa783..dff125f26a 100644 --- a/docs/tools/puppeth.md +++ b/docs/tools/puppeth.md @@ -148,7 +148,7 @@ Puppeth will display the details of each node in a table in the terminal. ### Explorer {#explorer} -For proof-of-work networks a block explorer akin to [etherscan](etherscan.io) can be created using the Puppeth wizard. +For proof-of-work networks a block explorer akin to [etherscan](https://etherscan.io/) can be created using the Puppeth wizard. ### Faucet {#faucet} diff --git a/public/images/clef_ruleset.png b/public/images/docs/clef_ruleset.png similarity index 100% rename from public/images/clef_ruleset.png rename to public/images/docs/clef_ruleset.png From fc52cc75e4f0f6af4c51f3679e69856cb9eda549 Mon Sep 17 00:00:00 2001 From: Joe Date: Wed, 30 Nov 2022 20:23:04 +0000 Subject: [PATCH 07/15] fix link and make image work w darkmode --- docs/fundamentals/node-architecture.md | 4 ++-- .../docs/node-architecture-text-background.png | Bin 0 -> 512450 bytes 2 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 public/images/docs/node-architecture-text-background.png diff --git a/docs/fundamentals/node-architecture.md b/docs/fundamentals/node-architecture.md index 569e960976..f7929cd574 100644 --- a/docs/fundamentals/node-architecture.md +++ b/docs/fundamentals/node-architecture.md @@ -5,11 +5,11 @@ description: Introduction to how Ethereum nodes are organized and where Geth fit An Ethereum node is composed of two clients: an [execution client](https://ethereum.org/en/developers/docs/nodes-and-clients/#execution-clients) and a [consensus client](https://ethereum.org/en/developers/docs/nodes-and-clients/#consensus-clients). Geth is an [execution client](https://ethereum.org/en/developers/docs/nodes-and-clients/#execution-clients). Originally, an execution client alone was enough to run a full Ethereum node. However, ever since Ethereum turned off [proof-of-work](https://ethereum.org/en/developers/docs/consensus-mechanisms/pow/) and implemented [proof-of-stake](https://ethereum.org/en/developers/docs/consensus-mechanisms/pow/), Geth has needed to be coupled to another piece of software called a [“consensus client”](https://ethereum.org/en/developers/docs/nodes-and-clients/#consensus-clients) in order to keep track of the Ethereum blockchain. -The execution client (Geth) is responsible for transaction handling, transaction gossip, state management and supporting the Ethereum Virtual Machine ([EVM])(https://ethereum.org/en/developers/docs/evm/). However, Geth is **not** responsible for block building, block gossiping or handling consensus logic. These are in the remit of the consensus client. +The execution client (Geth) is responsible for transaction handling, transaction gossip, state management and supporting the Ethereum Virtual Machine [EVM](https://ethereum.org/en/developers/docs/evm/). However, Geth is **not** responsible for block building, block gossiping or handling consensus logic. These are in the remit of the consensus client. The relationship between the two Ethereum clients is shown in the schematic below. The two clients each connect to their own respective peer-to-peer (P2P) networks. This is because the execution clients gossip transactions over their P2P network enabling them to manage their local transaction pool. The consensus clients gossip blocks over their P2P network, enabling consensus and chain growth. -![node-architecture](/images/docs/node_architecture.png) +![node-architecture](/images/docs/node-architecture-text-background.png) For this two-client structure to work, consensus clients must be able to pass bundles of transactions to Geth to be executed. Executing the transactions locally is how the client validates that the transactions do not violate any Ethereum rules and that the proposed update to Ethereum’s state is correct. Likewise, when the node is selected to be a block producer the consensus client must be able to request bundles of transactions from Geth to include in the new block. This inter-client communication is handled by a local RPC connection using the [engine API](https://github.com/ethereum/execution-apis/blob/main/src/engine/specification.md). diff --git a/public/images/docs/node-architecture-text-background.png b/public/images/docs/node-architecture-text-background.png new file mode 100644 index 0000000000000000000000000000000000000000..0f5979cc9a45af8a26e1d9922147a698598ed5c0 GIT binary patch literal 512450 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 z zCc@eiU(eo#;JBH*Lx)@m~C;{xvXX@dAk3_G#SzxIWP6fvO#m?sKN z9|{v1aZ4s)j?^^=ohd=7R^8TE^!KA>|F1Q=sfiIR+!=*I4DyY)R6T5sc*Xwn` zn+g^I>oPD}bzI+}bQ~w3XaMtT5gr$0X1sQ+txqR&J>NF3DFO*_*z9NgjqwnG#m#3gF^0=l6qr=0Z74bKxO^^d!u zP$r-M*bzGm|E4xn)hLCIce*?oWA9o#Db}-(3yd1H7w0WM+f98~_dwaFo&u?uHhMT> zOu0x)PMkK>x(dS@Q`-V=K|zBI#HZF)-e4x;O$?b7I>lGqqP%~4+!V6@Nqohzq zr9#;`AMDdV0D!CcdRO02jxpCcCQFk*v}wq)wFGKWA)AV%wq(f3Hhj6Jb#ruaW+l|B z$V42Jl76p^U8!sn)|CvkcpheZF@zfuJGLW!mV*&k5>7Dwq(t4h-SuJqa(I)RuBWNGAtj~*BnMPV z-rw8q#2i1rV3Li#>P~+xlqN8V1HjTn%0rUS%`sV`q7dT2aD#)TEg}?UM>MS^_&U;2 z0jWEv)dZ$h(Iq4_=uL6%;!; zynm`Ye;!5`>{q}^7m<=>YmhIn;GYd;6%^Cc}+9Qz23NOsbft0 z`O5Mbw7B#+jf}$=Yb3uT#j2E)5*T?4G;$gv{qr3Q`fA@kM&)tgPX{lQk6*{de*;mP%?D%v}>@r_HLLEju(NrzG)w7?6v1D4e*LDuo4cO0> zOnJ|oN&j_@Id&#+q}<>e^uYho=HF=YM}-9P1^hcK$LD5+_5P94++N?*?&CXAB60_E ztym(?vYu@cQp({EYP?@z%V1US@fo>M<2{oEG{q>H30SaK2Zk-GlsH3wOyMj->tfa> zNt!0{<@yVM=_@NIqwcWDd>o8wG?BN7hhxUorv(v1*%2X6MZSMT3a=$js_3Z!xA{at zDX3INv!FQ$ShbujDg}`qDLEmF-&bJBELrrdBi5=8yY5+<#o|JfVLnDEW-j>;d~vE- zbiy5W30<)++k0Z*%~am!0&z!ZO5|CeeRN|)n@hOe*T3h>H_O6_;?M`OhJbV5z&G=A z-;FcB)xFWn0h2xazzOh|jPthxX;q11q2CY1;@@UPiEk!P4ptib`rwmL_e0qfs1fqf zu&X6@x--eU!Wgm1%MRI4+HMy|}vl>7|Y3O<_LansC&O z>n)VL_F$e(XN@P`(Hegj3jIKhs|kR+OET=*3p?mI}>eu!4xb$AneIe;cC zBL{$w$B3puF7lxz#e!kbB7$u~5gloKPrxpo0mvNJs=LEAt=_;t3&JJF=P^fJ&!#nO zN5~sd3e;6gwjbhwZ7)shHq}b!ASIUbDRU1)0VO6S`g@xfxVCm&srhQ*JP?c{J(0Yb zfqi0Or6hBG^GCgNAp@dVW90YwEoZv*9asEWe5FSAQpeKXLOJm!FIP_!9NXoLbz8=g zub*1&mu82`?-ByD{0GW)&U(&cLm#VD9ohU=7Bi_AjRoyi24Jryk~jDcdTXstSY&&T z=ivfWS|18sx0uO2w}BGZiN@(_5{<6WL{AtPGrdo@YrSucDAyWO|NYU0D~L151LZgR z0?B*=F&!*~l1SK}^i5wx|aCwtQr!J7jWNDd^>8 zPKeT*-3r@D`k~jO8J))DwlRD7LuFC~wk1Lp>P)i>3xm}#(K`?-cGhzrK6V35scDrKn=jU)#A&HPezrn$Mr_yjj)0jXJ|LzArmxxayL{%l{IF*V3F8^9M{ z$yT=KkW)3IEbX;#emmzcTgTAT!Z!~`iD#ExFDSQDpn?ExWUtQ#!kV!w?2^D`UgR;v z30HG2IXtp6X#4uSsq&8M8Bhn_w8r^nwFX{yb0f^)Ty;843HALjHiuz7S6E&}S7L_P zjBYvoQuo>Kl6PZRU+^HQ=VAYRbtt}}9bqY;NM@RE|I~lU7&>x-13gU0ke!`U6Mi@l zWcPV9fH=LD6F2w{P48`+4b?vHRdI zvpxR){YR~lkwysep`^7f;XDeD6i{|TtHZK5T8rJbfVm`SmXr>=1`QXTUhd$dTY^yZ zif57JC{$ObdRcyB(kPE#mkcwCVl$7C7n!*~=OXUMaEl0~jB|)9Wt|%ro3`{$;JCvI z=`T%=3|vr>)h9DDQ=Z6cY)8y^pZGQxIA&Q^Y;IlVU*D;NciHBZYx$XwrfuTTl%SKO zpj3^zMH_noZibIFiz_|8g36g3-s2=XjNdVF5@#I*#&|G{ic?g>X46vUQyF0vU27<||TXw$t z>}q1;%e1v|0{M*Ox2~_H?24DgjBO`djgf8hMl72+H8-5?gog!ltnarr`1f1d1AQ!D z3V?yY>29;2Up&=D0F}bjL3iBGmx_!M-ukqQX-zxM%hic#Q}7(`a-%y{qC`t5Qw&s5 zuDtsCX*qW7iPC#IO?o4;p{w0)k6okG57N%@WOL=piE`wA=a~Og;Mx21W^}u@-&gY0 zuf5?M(w{SQJ>z}9k?*-2Jb>_^12whW#etsPN9>>ZVU!zJXr_D|!H8V7c^wE2Mo{^~ zP_=Z-w-Co1XiS4E0ZwSLcOZUn&`plvFUVewwtF1w>?4#PwYDnr8k(Gbwg{X=N!t|bcG^gjl7Xj-X3%9oJm3dlVt8T`fYiZEwf?{7M!)~< z#9C5xc4g_lLn~aBu1UM@y0j~BvT>wViZ$AkC_4?-q@0UYV^G2af@1iZK1)}&4kJ|1 zU+;w4plmiy;~iG*4O&;J{;}aZ7UG*mD;mzyW)fF<+vHkn3rx~g;A@JDZbV}^!kV`N z=J4YIkj$v@g^sy~Lr{^&fcSnGX#ioW(RjsD+yfz8^kES(_;Ok)9dlZb<}hrexfG!kBTbgfC^tl4NqWgVczC;fV)>^(DTtV?^Fe9av z*TFBXay`!(6|2c?wHXc9o#OtUK7+W|%Amr%1x|&8{kLoZYi+kT@cR40x2^odFLx1- zymOK6?|&=FI;w@&pN)HG8oIF@s~J$-4D-If`PFlNbmDOQw67Kz3%x`uLtXrRs~?(B zk6sA3b=wdDjZR5F2J`-ffDd;dN$v z--m~nU9#R5XY=mTKB4yA#rx(8M~|NSRZ{_|w1kYy%W9+lGr}UscZQ(ztTG3SaS_9> zYBiIxoIs;CR3R9ChliGsrkfVD<+aZSM(TsFMud-U{x&{aYRJL;cF=jU+$pN~q#K%_ z#;C&kt2o*T@toEkD>;rEVwOu3ENv4F7HOgN`2h}_Mxr0f>Bn3_(J`fyW|`a4Ut))4 zG=YDiDW=dia%=)j2ojnonGG*AQ$kuu{YY~@QHT&*^8V)8`8+&4EG*=eBm_Evv__6l z1?Ca5YPSpzGbF(O`;kONNAY zOn>9uG1q^+BK5TW>w9y9@XGd*4p7d0`zQZoejvg7_wHd{9{Y{M+>TH-RUu2PcF2qQ zXa2J<7#x0U=4*YgeeL_Ku;1lB#|8FhlT;dWb)^-!rKk+w(=B!BhhtI>v))-y_{*3-4>-!{zjy<90fLJgCUvlDbZ|2>0eH!($Mo`;tM&?fKV7GW7L5L70!)KWXM@0xki+r0-);(+h?8M4@iu>+h25saO^J z63!#Msf6zV522a&nP2Ml*nYnhK&yHTNvw3BVa^K=}X z2>BNKo~c|4z1ID~DyBJs2`xX=U8gXG90V#gU(}y1u9@rFWZlmDnD8-Y>YtY3X18UD zHocOW!@nfVPG1U8quP;}Odas9wfzgZC%`E{a!`K!h6A$WjXOY7(59&=t9 z85vkYSmaPFQKR|3DrMj{TASmBbdD8jF)3N0Nq@{|vB!&4*b#k2xodpoDDISq=Dscxm|U^W?>@WCP2}SwA`=wpb1sGWskQsy zcO2}}unK(Rd&C^OJXV#_wWmx2kRSiGF#Tl#5>wGh^$xQcLafvKt3sy94aizy*DDyD zcGBIp`+m__Q<=L3rAaZ%u3a&4vj{Vz84XqPt|Fspj^LY$au4Gso$633;{#RCif^(P z-~Ec{W6z3V2bhLRp-Gn-RYGd#7zu~WOvh*DMAb4ZQHw9?KTmSmR#3}bNX>pYBv%F2 zhVo6QGsvu}5mJ#z*7ClVC~9o7xs<{dW*pU=uij z)uqWl?JsDt;BCb8C5tA0@%rD)c9mXFT!N~Y{dUzYMVxCwZ|}E%)1oo`!QbsFJlK`% zp=i01;7J{m|CW(aZgJ}JW5mwkN0p~)ecs4MqB(+t<>Y={xHwJn|@9D+|SL z*h$$-P?#>gw9hZmFm0Q0f@pO~0hs zW{UP%weH693Y0)_-Ssj};<-!=Px<-4TiAP;rOY872`Z1er=&r2C7u}&4V0z7*m{N( z^iF>?TI(z=g!E!31RlE7y8gW`{dCWfQ@(!48JPX|B8Ru%_d{LGt~+D>u4Db%QI7AK z|L)J*W5M3jwl!?}J^Qam>RtG=<+9!mJCb+bRwoXk1-tnX0#xTcL-ik;NF62iTXrOG zGnX8ScshueY}CK%-^KAOk|Bd|o{@#l%jo^iyK5kqyPlE(uUpn6q_)0tGgmj3UyS}l zprGTtd&`(fAn&uvvU0!aF8c#HFP0ls8$zRm#qOb3jH4g|l)_RJ@wO2ul+ymt5GBC} z+kAd}9-JI2PWpYa(wb^!K-|N-KUt8 zY3N|^(lQ&8F)G47dui#QmWT+6(2q>uJ=>F~W2rhD42$8OqsVi}TJT%9z&V{)!GAj_is9`lP@6|x0-*w@5c>Y#hBVBARTdEiHAhiiD-Rks zwvwu4i7z7+j;|4I39#!WD&{47Ru-L9X%6?Ac&d0_V_2AkjKX>(L%fPf&mk<(xV-sV zEkpSEZtj}%Z9F))(%SxEK=WXio=V_(dyF>ne}sBa23PyPP}eW zg;(Y_x!cM)3rNXfA}-iBubISrPNXD@V5Qen@cm+=I;qeYUQ63NM7Y)&)l^0>Og)${ z3SJ|bfcEE4A5sya(e6$R+%u&oA0He026aXJIPSQ(1ReadTay3_N(?M-w#-G-s`Q7n`G^f3FpfC;hYS_ zvB2#S438jyZC`^6c-_|MYZ)5aueMNzAG*5C#7|EaqJ11Pq$AD5cycc}h zzOH)@-F@-J;Sk%onu0Lz`5onbcD+0OOStZ_fV13NQ|LW)sS|iIH-#ZmdXORcR(Fj2 zcD@NWHVXq-#aq zFKCLntazr_L`^9={&)`kaM4=rYhR7N-^@7D@V=*~C;n3Y=Zf##MYgkQ6az#Mw}h!% zmpP4H*`}JTEebA~S_>7g8-<1+@WiYJFUcRzh=x2O+oQBmTbk^QMnhi?B)09DzF2mO zLhHsdzG?ehO5OjH$UA7ndxMsijxthd0r#U9_OTUee>?$v9icP+`8SvY04y z;l)lzDp_oqN z*t(9vI92lt#^x`BTC84pNaXlHFf;&`012$qMxuJbU`P!FlYM``^QY#PSw?0q2F{#9 z4G&iU6=q~}@4 z%PEM7(%QidGj&mMd!H^6XSPa9%TzbumpU@ykN;35H&iD)3 zY$dg72zsFNzvJZMKh!LM7*}$0n+7nE#Q^>z=;Z6ro-fB%U z8@IW53`!}^pZ3Kw(9C>1`o9T78nhdNwLTTy==yO?FWgKT4RKmO1;9-=iloRK3Rj4B zdIKhrLacsAI*N$GR2@~4#S~LaPga&zqRtfI8nx+69R@hch*LA9jzO1&)!L6@G**iu z*cL%xS&cXldO1Ndn2CNCy-cv9B|^zQi)~0Gl0U+#8IR>6uHTo0l9cA_pC~s1{WrOZ zX&ho6B?F9x<_M z*KaSkj{NXAU9Hx2nLZKz>wDhgu+kI`4Tg&eho_GIDDA5d4nw!)1tA^ItItNv=Uvx? z{Ql1K*~EQHTWavnEaUidgw8eCU7Sby@r-;{KYZ)EHud-{lGXliIfMI2%lC8AC;NPn z>x9Wj%8Y^6y;PQ8Kmq2_D{4m%-o%@6Z~Yb&dB z!{6DvIv;Ay|4y&_)>jRnFf_Eju?IHGx{rrXv4Nt2p6-DUKNXO+h5aS2)qI}=(?lnF znyuUk=O>rfo8OA6Yaf6AGmw1hB!0LKls1{eXxRk4Ba;}+qkC}QW71lKcL3Aqm-X2z z!6TLQ@~7)xM(|^)e2u$1Gopjv5r^p2YAT}b0r2)Il*m(2nFuCs?xsw<-16i<4p}e{ zTj|<2f=&G&ZhBl1Y2;9m>9_PsT43Bm0V#9*5fh}tME*n^VsLaT0>hR=i;DP%%+Stx za)!-!>3X)3R6+G_>NTn+O~^pRIvPfq$dFd#+5T9XmsI)Egc!3F-J~t2`r+jRE|&Qs z{)wf$$&61p#h>E{a$L&u7e^Y*&wKsj60w{60xyhFJj8ECDLnrsD`WM%8&wJ+U*Oaw zp7vsn6f3dz>y|IS`iuU?sJFn@T$W8U=d$|MW_4{yhsQj_{nl+<(&zjfpO{v~>TTh< zUMII!;u~q;O)u-?FJDQ*&x{`!YYoZ$9~!5+{YBOT7c9-``@L4VEULGJ`S8f`Dwd8u z)jE4s4OQ4)FJ}J7E*ExD3GFBnc`^V*shw?fDSO=C(S*w~OZP}fmufR|5HJy-^UWg* zOyGj>j#2k1fC`E<&XBEIxi&ukoen7iIaDN&ylyUBijWcvKbNXz(poKN)^Jd)%|1e% zb;ci!5bEzDvBm^Ncm&jZY)KJfPpXfeIMPi;GT*ccWt-p{o>j@svWjuf*a}66Q`0&; zIj~b=5Jp#0Db_VH^UIq{o?{M`E|Wrw&R_?ak2B$=(YbLjeJbNuBG+KbNRleA1C&rG z%w&tp!8S>itY!*^uJ$HKNGWJ|NvA)2Z~ahi1}L3N3m?cp&B~w)zJC#|E6YjU{v%c` z&_h$!fqcVXS#oJ@@^5Y zyY|auX0JQ3b-{H?66mF~uhHHsPN( z6n&=jPP4N**pQsurYoTg<;G@46qM}DRL+>{|1belYA*I7+qf%1+pYU~OmAnJ8@+jh ziXpw;Q>R_+R=1sBn@|1Yulfu26>-@l&R0LZy|Opx`uvS%Rm$DET%23%H-5WhOibT5 z^aWQKNW64C#*AO8m^ui^V9W{Mu1DK^zT|EFHW)~cs?Z|=H#obnrci6v-7Z8IqmIZN zZgzE1Q11b*Hyr;h8y_tnuiq+Nr(Ky`QI=i2qH+ld#@G!*odJ}k{08EU;Dyr_|JAM_ zv2D5ft#J_Gz?XBf+#C8#`9d0RmD+fT+$s+&`Pdz$IBw}gv_R zUjpeMK5Pt0`9fStopCn=&Q1*+O^)yw@--WplnEQ>4D^rrNjix zn0^FUoXCz$pw9?}XWTx_Es=(4I#~fYYo;2S^sQsMUEkgc0z|ag2Uhnp`lfgWmk)%d z>_P#a2L2-PBTcRlC^DxoZ;C#2tFSM;jD!kr^tGhp@?rz6sI)oW^L31{`#e#ycy5jm zW4iaMd95#SP<+7>lVxRET*9cu)5|NaaSp9T+oIZAbwAF0D!3<P?MR&kVAw*=yXjK5Fk68rM#}&(*v2~uj|ZLX$gDU@ z9X(fX-s(LKAy}`3i9rb+m0caa43h#LFkZcDltkd^BHi$15J|kBkwe zZ`9uG84)ICaqk)Qo|v7LmXC;-1MYO=%)>)U%jMDJ+#TZNd+>~8s3}k>+D`hF8ZA|r z_<-`VJaouuNwUtei`vaa_6{TcSpqQK^Z3M;PZiGAIh6{X#$NrpzRs-=IzR zo{*b;Dt&M0XJ5*$#~owettQ?%{wxNCd}lNcWrOE788i>(B5v;fdA(CNPwiy`e`tFh zAV{^On(lGoH2;}sYCFq3v+=O)yy@S7GMBB$q7rrY&TjITn?+Ff)t~TxXVawQf8=7) zv48H958a=6MJ*7|>>RgC{GuP>EHhpu&!@37j^d=>_IdpI^`!Cw(E+e<^Ha-9G#0PGtzz@|$ zrE9Z3Exu?s|MsWpg85oh>Va^+n(bKcI>O01zf{?mz||_)o z5}`rJ@}_VHN?UVc=F;Zbc?L}5hJ@8tYc=aWZOSTx2lbqYf(J#EGX$b(mGFmTMZCzv zj&uINqb)INRk4(P&aWb{DQ6}?-yC#Li=qEFnSG66rYP;}E7~J2PM|EeO-GYJ+mazW z6vhNv@F=vcX=P3~56)^;r8^(fS#;bi0L9pc{qf8LGK*Ti4sF~nHmbd@825d~#)*G5 z>`yoGvdQa%KHG0!et+&FKJp>TbACh`){ODNFpM|w_ZS1}kDLImT&`9}V@5hK{;SPJ^(&u~HbnL4hKv3G>x#pmTX@g-MEB5`0 z>{wFeaaqu2Q(7-QYv*l!q~7e3vMo8~s$|GbN@H}Ki@oDH+a}`FAJ@l5<&NuI&x=(I z)w5b0>jwDc4(HOlrGToA)0lXqzAfdMG12rX?fKaB_;e zzVptP{P(K58(n8{vGw|%!*V)%tQT)Mvq;6EVZ~C^i@TmbM$qPHuU@sFZ~$vqx6!}3 z2^Tk}-zbHPiJv+`aYuBFAZ(KFn2lwR9vDXX9$NG1n;M-b$gR*lHjoV}U2y=BQI$ffOy}d|dG}!N@*>}#R~Xf3 zG-y|=#%WSeS(9I-Jmzc^nDN<7QBxLy%^fd9!Png29BzW+w@#eMqi#iuT(=XeW6 z@Om6;X6lb2>(Jd-UoV#h)e^dZs6T(jzYLo_k~;dQU)1}{8@G#X?Jly5j~a8U6NR`M z2YfJoyQ+h)UYZm?k16l!d(LL8oX{9pBNxqJK z#Keg=Z$47jjP7|H|Gyy$rR+W$*Jx8pkuc=|V&1J_#c*&2KjriFyV<}d)3A~v1VfJD z11esMxxj=zB{GzmJx6~m>9=4-Ib5w`88*c`2CW_Day&DaHNsl{uVA|Ol+5NWF&Z!_ z!twACJq&d}UH{_(=J87!m2}2x(IIPz_WWj&b7OOae)F_!YsA;}8UhhFeDdUzYegD7 zT3vQTbm@pA00q?kt2}c;^v;8=xk5QV&^9eiF=Uv#UR7IV$Sq&;e%*6zbIkh7i`-%g zIlfU(;CeRkt(L+`q1esr)S_SbE3yRdLn0df|FHm@ewmJ<<(BmFxu-mIoD zga<_erl*f1ZPS@OY?53PPj4T#W$}RX-i~-5q3rEHu3DOH{(SF$`P05TgCr!&741mR z%c$nQq(+Irp0%_-71|Y{2hrP7PCVPZTEw{cq#S3$#(VOio~Kl|?7Rw_pjJhfM>xK=gP{NrVo`I~KnRj+3E$c* zx8Fv5>CDYv#=IZBf*gb!QFnce-G&$@;>L8D+|N^y_(0VsoG7JiNlAMC-2okE`+V{z zX>{ox0qM6O^WjN7CQ^zF!h218Imq+J?Ub=IX}^h&VYB{-C3}+dBC)M%%xr`Jll;m8 zeRS?LApO7Tf_Q%9M3aqR={#Z^xM2g89Mgq3I*y1lne!idK=Kir_3*~8#mfVoWBhyh z{P*QkM-)O|T&4+=o3bkE*GLS;(`+;Kk2>nxt*~4(Jvpw8WPvqXbO|2i{I@%6j<4ed zexRO<|IR!3w`FabYX@zOb2hK-eF37xJx{eVKWk?03~!OUJWkAE*CBx0uA?bm;Hmn1 z-OYFTkMYJHb7NU-GS&N9veFq=wUXx+-V^QTDVFQk8$pt}*gHRVcVkz}cm6OX_}1+3 zAGI<7f%-%NGaORH)M2}A=Py~s#b~%sso5*7AC2ArOO<^bxe1b?1Io_FU@{Z_2XsKdAmvq6s6A2Ok+&}Qc4j50Hv)kIig!S)Op-Ue=Dirk1&D4rY_*iKui>+-BR+T&IHK<^iwUt zW1uE0pjH&%mby57Ll@=|CCTbXvgMbhTcj2D_p9Zk$1pF#JId&Uk5D8V{s7aOzqT|L zXnr27TSjA!PK5`4jy}3?&|A#%_jFfdWwAwTog8T*uQ=7pN?JAcYehwJhkpSol{u3 zJ1BjpfQt;W^LhS>Pcc?%l(e7m1KYxWoyG90nA<}dOBGYe&sVhJyOW{@)EXUj3nzz? zbb^;f>T)`}I@tT^O}yFVJ*Dwmq2_;%Kb0s-o_^opC@MZd2vr!@g{u$ zsM`o+X_9@!%P9sVL#w2~K&@%Lrl2lLpA`34tA)V8^z(1)GkxMe;~Toq*v?i2f7SQ1 zFt&L%+LsN_4q$(K=tnpM=brnY|9UNiDhH7kE_YBZOFHctPr1mgY4VnjH*{ALeJ|S9 zr7YgNa{U2LCNNJH7?<13OhN36BKh_9-?7_H687ENsMudTtphyBX$)hq(3Z z!jg^Cp`^{;U7r32rL0V^!P(^8$O?8oQhbhl1(&IK=_$OTn1o~z6@Nu5HPu^YvH2aV zJCn3Kc`=6m5>_bPx@fGN*S0$QE9`YXmuz+ph0FOw=9hzy)I?B5WEsVo_sMzM#33T> z12drpz9xs~EO?GJCj9EY@2zg;Z7fgNbyY!L-Yum=vAQh;ECF2bIqAtP2ieNn-@R;R zbTOhZPgTx0{126Ew$=_cU21Ijc@`KSzqqvV7>c6nJ&FHssxaDhMnat>9X;=2{uvah7QE04c-&IbXJD$^ zpy7e|X*%H-{fBm=VV#@1*0H5-sG&AhSDJj!Wo=m|!?`iA|C8|>&05=Ozd`ec;(hs7 zLCI^o49a2%NJ0ofr zr&Z`Om9$_F53?{R@#)+D?0OE#Hu--D`(Y7@j+qP}nwry6NRBWqa+jb=t+qP}n z=G*7od%rh-?%mpItF4JKMjw6lUK0kH$OWzbq%49)ekxUDDxQd@EVJiZz8%*jVk3<= zL>3xC7E6Ur8tEuPMjJpnMOSgRhzoyM*Z&LKF+0R2IcQRwM9)Ul-l`NkUn)z!zEOI4 zvM#B#jE0PWtUZP2*5gLxC=bzVXc@e)mzz*3ITbNzr09upjm2wc+(9Y?4K32Vny^@- zO3@~9w;<_=BOSCYu>X#i55k+DT&3sMq$NwcV2Mp8ZC3%1F!W znB4=bztjNNS{9cT>RsTM^mVa)P6gD^8ullf=&}Wq^6Yn_UcR+&++B*5W#)VQ|Kx4H zLBV27nH(`kF%36E4GNJFbnQ~P*=~%io`QAx<|uA7?N%Q&rR7Yd3I2d8@LaI%ll84B zVO}vkF5`$Tv*K6{y97NDH*wdwGji@cAYH@?2C{yNb-uCU;`(xajtLm;IAdRrjzJRstfk&1E!Qx7 z7KXGt9C@_Zt<_Y<`TY7}!J5Y!6;JYw-#nQTIWl6B$y63 zC^6~HUCoa}DaK6!fCm_j?OTvE=lT4E7+(TW!q%=NBpd3CQ4v5zGLmF(Vvcjh>&Yn2M5!WUA*! z=lz#U0VzLvIv+j=C~ovNPE7L9#7VnvvclSEa>x z>ouShf;yh!jg-iY45DZ7{ihg2PHDLOSEdV~tX6w^Wu?fW=O!?cTNmV2<9M1|%w-Gu z@fa^-5_539adWbKvpKaY#u`)7^B$4)_eZ;X^FQQf01kHsYI>$51I^iFjG&%>05F+= zsc!PP2#990+3y;_{y;M;0L2cnL6@MRHlx94;^jvut^_S)UN{ep0?!X$ zDuF+r|2yRm3)AO6OtlY760Q$T`vybZm^m$evUvOX+)m}Ktz!9Xgd4DWEbZjhlK%Mf z2>NU}f5@4*%8=T*;8)%V+<((tk^kq;26$l{{`Y!R0#^E9djsPu>)sH1xNn~C&Gm-E zIC-p}{tOv)NA~^J^{w?!o;$w1`kSH~7T){YttkKSF96dZhTHiVa^6pca@P4zAJ2YQ zjiCpm2mx}B+!|2}0n1000^Iex{qBBb%6@0D z_#cd);fQ|9-OunR^(IsOb$v1<+0LqC#?+uTI#uk_xB&Q1qyWpbrcBwP-fV5oWWfC7 z4Oj3-zsqK%cS5{mi-GIN?q=KXr74c9Dg^-fp!dzC0D0csX$pdZ37O@ti%IeNbA&U6WH8Z7;iIO{SUm zq>Sc6e?qiZJN%`l!WAkyFe<8+dFrhvJ;C>+X~8&k%C2Nj z+0=Ye`Ba?0UjsV^-#vl`@AKP)zMoHwtJ$on=i67+7+m21m9zz|xWHeQtMY3~!0 zG!-`+f<-YY_}nUU1@JkoN8%= zM9?H%CJlR0H=gVCXs)q&MhR=Rg*f0nb9y68e?i>F zoL^FEB6dE2rab}JLo+`#1N$1Xp~h-Xn`v)+yGPc&Krox}9Ko0;9GLH4=WIz4Xg=tYEfMVAYY zyqR1TZc3rTcLR~gV7Te#xfi90O24m*$&`NqRBCAO(P@g%J0WY>MWl;ia?+=v(-S>Y zRZ&)TD2c=7Gk@7-2l{rTzUGXv><0RTb$a}l)x-Mv?BH)UQn*n2_Ek*(Z8#u$fa&|3 z*FD$fvZgo9^&u8(z~y}o%=y+?qkh5X^OMB)IZLrzt=}J7%ZFNmwyXmXk(bq+#Khfp z$?ds=-C62zgX^qc)P9Cl^quHv*?RLgXv}<^lHf^s^z)le6PC)gU|jY#aGEo}T7Udb zi7VVWyQ(1jA@n}Mr;v0#x_a5xE$E=6JYtHZA_9XFt3&D!`1gl}$o63HdY!KBVg`9* zwL?N-=XxEC60eT=@~&U5F_Sz1dh85!KYr&JV)%H6 zno94?m4)e(=*nVBKYP54(`zyTK-}C*q9`c z8Di$)^zyQ}r#8=)Ly{qDpjmddxmTWSvXj}=$-O5DVre|(`=Rb4#-0KOsJUmYp zxo2y`XQG++^Ml&f|GS@+(T_gsPHn$WK)>nMS@S1KUtN`&sm|3oc>8Uh;O*O4VL$!A z;x4XR`#mefTh!?$cgAkh;{x|OjUOPy?5k?kP}$+ExXl3Oe`8;&v7~ZMdwpr!FHb=& z%`>U%!_o7-#h;v3%H{VBC!?3uYf0y5)E2UgGxM<4(h{}d_kl#CE>YQ@N_4BtLv$;5 zS_{$|0oK#u34U-c$!skLFM%7>%Vc$~mFr`R-w>OAKOW^|T8^(REnXu3a4qo*-;*ns zFvKeWxCU=&0-5j?J(6G0kjNo9k#ppGQJWRdsz~3k$?F-^263ffG4S z3wr(ZQ|lW}|IaVq+$&F9+QI3LIK#$P@!nA;k&j^-2!vyK6zD%!4raJ}m@GbgSayDO z=Mf*8gAKtw#`!d5^aaHtN2ovuT$WHJPX*_LxAhEM2$uZ^WlV2Sa53I)EcTyd$?>8= zKyawA{o?@zv;I^#a907bm3Xcmg;Z)tM<-YX62^tiVkDWST2!(H$^G>%>7PQY%~Dc< z5r1Woo7fg1D*Da9i{RUAaqz(^?w!;z;$lU!w8;LvbqM}kdwfE|_m;43zqCco^`&HS zURQ3{*-JKM{l@0(j!m2=6E-@vy(w&Jf^E!8kOFJ~_X?HBg&DqoL}Z;#iEoDswB^B@^O^pe*{AfM5 zV`cO;b)V}FrX6|JHPrIiKLrciUf*)_XK|u-Pn%z5l4qxvS7%r97XEJs8`dae zAvoOasgaQ=(Sh670-2fX%m&j*%?s2iUBS`a=R-YuJ?G-1!{M58{~41zgdJ}Dg7I`U zkvg9t_@2mbX6*&l0)fz&oz2mFFhsKisZK~#bl5PUJTQZ>s5mgN#7uxc=Ws5?g64`O z=i6&zY&pUa*a8uTfCO2@HFOHdjiUlYuF8fdj(kDYEH&`14DttZ2i`(E5qv__l=+C{ z0`8jPVuI0(lEol_b8q&N$$oEwWyt-#HE?~zs~~kY1zy7=sy99gYK%`6k%q1E56I0m zKpA5|i5<$_f{(^y4x&~qMFR_}(QN_9n?ba3GT>KXpHE4jFQfPk3rt$`XXu5%hz-^5c`m%*>&lV>Kz> zYq`^MlgA6G>*K2)Po0$hbcZ{d+5lj*UK$2cq}?N*^$jmetE;_SUBZH2pIVg{lzWJ! z&`#X-!PuX+sr8Xytvf|Af{qiTx2|HC_`+n9tf9&aHlRPN+!(YDI^(A+N$KQCn+<`FU1Q`E&+o^ z;$9B5x6umiuKN1dA`ky=zH~lsQb23Hl1@53qYPU`jNn#bEo|nT(7(sf-~)Pc)hgj`n2zqkrT9@qJT`+a~lz{){>E za5y+mP?XcBCv$!P5&qViT@O(Yo-=*;c@k#0D6bU4C}j*gF4d1F;76f0J0u|rtAt#w zWiirn?VmmJfeDSCj3K9(M+NgV7CvlY1p8QD_cZ>3U^#*|EOviPsycYPHCdjZjGU!~f(e!brohj-tYBPm0usiuFvD7f?dJ7|#cbLSq?e)@{m5O2xgCtl`|{Mw*DG*7;qAcy4aI-P@r`c~*W#)s zToy-AvT>cEjXXnD-(ej-?PN16z+VMrqJDr*2woWAd@DvD*`MN_?+b#81cp-s%Ca_D z$DI)mvNIDZAngI(plq&7h0JgOx-;?;t|%C3;fit_T<{4#GlBAolZdjB2qt_eNJJiJ zaoYt{H1LZ=CkU=TKLCSceWIW#lsvdx)8o}TkomPOAp6FY7n&{6Y`&zz81m}s3eWG= zb~qM$;4i=TYP&0~_cPnRC&923#0O*slP`qsiro@GIodCp^D-G7^&vF}^SSU%R2a*{ z<){v{misczclmop_qw$Q;whnFnm2(JV}^A-osqHUi5T~v zfvxA~NpumPBX~d|d&I~vvu|1Ief1bA(!y?q9dz^;}^m)9{Uw~)e8TN#e20^uBQ|KRgGPAZ61;6y3miSMrF4H z{jqf^##Bf|L%>VmqJ;repT~r^=|ZF>y(^hd7luR$QcULOYK_YUMEMU_;e~AqdnRm{ z<2#y%p7~K-aDOUs#Het<5@t?d8LQ0=Wnn3RN(!e=nbw573BJDglQq=#xS*Zd=ql=E zoYv^Po9)Hc-1g+PWMUHgu`v<q&d*={H<_6k<{Oe@BnE9Mb7YD3fHU%~e71a{-a&>V+l|(LM3# zG0WZnIob;{!FFRg*CyF5NZk0i3=61LNFtRvD-)Lx!-=sjhOs12;4<)heOLx*RAX;F zJ)Jo^h!w~z1=VF4gV_&!SLrh-1mwGNY?P@kSFAk4332djG1si;#8G*ZGMX=jiP9TJMiea5 z@=9up<4bA27HjsT(q+`s*=jBEUsb|L0m)`8+Ks>~8kabDyF=3Ge09EzifbigtlYD} zDnau>LR2g=cYAY1uW{bja6py*&ux^MJ-1g8x0y6&;6@SzFJm*)IlK?=QHwfC(uet}fbfzWTUaZwp@bt-)iq zKp-bKSKjq6*U8_F$*zTC64kF46Q+Wa^?78v01M`r?RFr%SgsMLiKs`zW&~0za7{o% zQ446)Lkh~AL!A>A@-)YAo{rSZq~p=;$6X!HZd47i#8 zM;cMIy`6%CA~xbb!?SGfWS;+~C8@+a6e?|PC~OcXI?-C|tt1&lR|~vPXbpv2o%l+9 zwBWK+1Zi7n-u3kQ6l|iT(wYlXJ-Yhdl-=oXUxhXPuO&T;GKsj zXkZxsOYjaUnj3BO=rKuVl+>V>sZNmb`|Tr-v;RH>$&k-t4Ep#`^>}yP=hMQVx&CP^ zFX!dF#cY(zuqK1O*|tAhnu$w5eqx)!&8$kC=fwH*aqiRcfPyG6e2-98(lO`q$WYJ` zqG)(|j+g6?R9gYG=b|d#jwT;}{NAW(DXW()e9PB9LHDCWo{`BH)!#O&c!QY}LH}pU z|LiymhRl)SwC6f!Sya`s7;-2!;l*$7?S)_e#|5bFEG#Bc^U95@CmT}>>fR32wB=8p z@S@{8viyF?YMEVFk~eo{Pc8BIwS+_9{R)jYV!U5`*Ll-9WY)mF&cn0X;?CGnHhFyK z5?gdUz58$D8fGS8E{MK>tjha?i(~ZuGMq8j^RhOT9XPt}dB-5iA|Gfn{ovdJi3!Fs@8dO15u!HUo~ z_qvu=Y%m%OHQBsM0eyXPI#38mk?X38GEMZH8z0O6B&j(HLXPjNzge<=e71fF+}_jF z9Bz93`5X5$oPYsts&`tc{V$;PXLPK;6ftBO`Zw>w!?U;G@d>5WOev;+4p-a+A0~3b z`!`o!K57+HQuKZ{ezdQBo+k)P?9Jp0*e;g}>BJ9mF|J>~M9H=e0}}euxWxc^np(dd z)mgajt<8A>g(SUvws)U5_i@O8G~%x?STMy^GOQAo%yMP~@w2cILlp{( zs8A}neqDJ*pNvQ*JsC!X-M zXap1632fYUu6?qdsP+b8l03bJ`xy{*QeU0880y*@7?cYl#_2TSBr@x&Q6{JqczSDKQeCv>G}{; z#9AZs@cl(Zj(Spxcmpsk0VnYYzQN2?oc*umORxE}g36HnW|2Tb zCevjyH+vg1F*EB=CoI$7Dh!kaoLRa*FKz-JW1*k>Bb=eGO4X>FTRUQt!p_D}uk*{n=k+Q!A|%6P_=Q())IttT+{ zYQ`3e`D+lBCAf`R9-dwsf2svRYc{bjNKMo_GJ=fG!+%-?=(&>r3p2=<#70_Wx}8%zU{_PeLsd!b5>z>WoqKRwMq$kad4SqQ`Z0jU1#KcB#q2O z6;)MvA=&ybZBKS{^rd9Yr9_(AVTEF)afvmC=Bz? z$m0m0RxCXsh@f8?wh)48@ZiA6IN@Q$(C{RWj^izaNMgd=)J4}4nE>f*TS#j36jxKr zot1GTuYg`oGiQR_vWma>Q$ecJ#a1s2IBs?msl_U3Th1r)9S3`u4+^E;D+@1|7gae9 z+}7)l8BftTsuQCL?BQ3}6*wCW4`<%r>knzmOJfGgcUP(>X^PoOC$qa(!fo7@lBL)= zIYXb{zue%c^i(6E_@%k#Ma02_|Bp{q$QA2Gp=Y8z7An&fMtv@Yf$oQ0Gv)1N{XiAA6 zmh{{6d5#i`-Ia!1eW^gpX6@4V&T}5r_c*jm|EHzaZovivh9dW|0v1qUKBUI^pW|t3 zt55d|Wlk`3dl`=XNn~{w{Ct3Scz(6C-E6LPT#=3AxL)_WYMop7{)2xB&MZna4g_cW z$5ihI0mZ&jan(8@0Ebxo^&>NG12>S_xQ>9D>f8yd8GQbY(4ya{gDG^QBm|JNM9&2X zX(w)P6FfIHneuXsiGfViM}9*6nfxQ(7ew^a;n4WYC_nB>x4G`31Rsi8iN-+(PXqsT zJwJwcmck2BxhV*VYC?hr7XGjvyE8kyPHnFXin@+2N{uBj!KpUk*$}72A$DayoXU}0 zSPsstdE5PKigl({+|D+FnMhyxqYTI3}ppYnOn&shk48(LY@B6lHqps}0r>u|$ zP~g?q5`xr(&qt(&#T^bSv^#&K4x@gbq`5oo4Ou907Dh%^viL9xU3^jag5Zsmb~L0d zr@Hz1E_Asxx|4#%*%>%)2|7bP9_Q8VR#&Q3UhjnB!+@O_c#H>v00%88)}Cy45R^5Q znD)AD{&+bKxz|!+K>fF$VPb+1}2xHZz zyzDQOj}9fZ#vvlD1cQk?;#yJtm*NB$0&@P)iNIjD;0s9b7J9=I600VB{JV)-3_K*6 z%3L|LZvtW80wRhB*wTklmLg|pg&;7V3?Fi(9;y=$n8q5_7AU3>ZA^{2%{H_5MM)$$ z)e^gec^_0`6=DrC4k&|Qu%6x)i~uJ(zoiAzoLfx`L)C&{C^skTUvjV-hdH|XB-ba_ z^YxajgJRms`ug359WJK>83%o==LxBs;9XLK{lk+e#CFGPc9K@zDOA$bnc`N?@Amm% zJI$N_fSyNr-N}iA&XiLb*<@I@{TTX|cFa~9g8ti&Y*$|k)Gc6NR(U?4H*A@n7wd0* z4%ZgfooDGnrqaUVEPa3G(V7#<@UxiFO8~eu;`+#+ZFZA$~9`+f`M+Gnx-CVypB#rGA~(wQ8$jc`ErODefk@9w~x z_ZIHZq9I@Dee=v)yY;Anm>jH*B}H$uFM7HqEGc=g;A&dR22)Xnt)Fg;WUxGUF9{!XezFtgQ;*^p`Z{`!6mi^TGADG5JC3Li<9Y;EmS zbQlyBv(CU+TR?KC4?r*}C^Fsuql@@u{l3o_nS0%R!&kR|=0prenaAPZs>Ebb&orFQ zYwx>ix4O`_SP>BMAn5tDvE^lXwXVBC5#9D#MD8{w56_#4`FXm&qg9qGkVhIT5G^)e z(q3w^dcYctjpKH86w0paar$k+w616~h^qTi83)Ag@RFwNf0#HfCjHd|eHH@J2OgE~ zzn={X7R0XTu)EDmSk~0$+v}8lGYlg9-@bv|B&~6^UQN8cxLO6_6C{T6nqVlAdUuaI z2dfmKlDf7$O9EKo_jf{dyx|=zu(^4OTvgtmgLb&$1-QpDY`HRN3)Vv?0qq&m+pk%& zIwI5nC6JNC)zr|7)?yWDl`*hbv{kqCxiVKF3rWhX7JCa#QPK>(fSVUnZ7W;zz?{K< zc1*xLvsiGkHc2umtg}1fMr^6$BSd5rOkl71YFM7PzV()ey+nmz$<4&0vs?cdCnb`D z#v`puXEG%j(kN1BN-EozFKw&}s~Vl4E8w%|QaAE>hpWu8qNn@^f9gx&}wqoaMK0Itu# zJMq7S`*ylnh{n|xw^PU7dE0~>Sdn>YFxP}_McA+H)F!6#_}7WUhd;ZxEN@N|$Pw0f zvM|pnv|^Mggd5B4$05nznQE8S;&eTaIwyg)o{@e!NEJxrABheUja-uvxRN}o(Q|rF zu4*CwwJ;CpClps4tae&)?f|?t3~&Uy_did*Awc@R(V!uiZ%9J!R!kNnKn||mQJ_)p zON37g$wDptm?n#aB#pgu{7WSu3r3A12_SacIppDET-@E63;a+_C1U#IxxoAa=H{{? zPcKjN3ye9h>^}OJ#bqSE#g#!qqd$>gJ}87wPfN@Wm(a$5d8)Byc^*Aj*2P|ML*lh$ z3X{oZ3yb7p&Z8uU3S{X}1_$91w%hkJvwmgYiF>tw^!WbVtD{43y)BwXg#_U>9LpgK zQK7N98k}m7{I@pRu`e*1=@Q(6*5ms6%IjJ-V;T9|dU2jyz@y z3VtCAz&+av;tVMwSbW{6PmoCafAmq2^C~psGX3+P<-X?m?726=%*s&#QMKJ)7X^?WWYp+GK3!{jB&WQo!s zHDhp(yB|2RVM|~tQqde(ARy@Mz$@|7aQQJ58Id|v#;2BcLo0yA;^p1(FB>cv)JjM9 zIkFcqsJr_w{MmN*1fl=uHUAw{l;;Z(9FZIUT@m>U<&YvMDI@R2<=b(!^D*`Wissk# zF|W)>u7@Y_+ju=$2|D@kLkzZ%eB+0AIt#P3gEOm{^_+0420$*4-yG53hiU9iEy!Fs z@-VkgL4q-3 zo9%jrt-Q9wwiM2qs1b+B9hfWlPYIq9OsK)ZeU^?+Jfp&1e}Qs=?9MjFIbR+c4knxw z&O4@oma|rl47t=PT+Z2zt*O&FQ*3@Ov~I#(Pwq?{TuXavv){jw%qyheuquCzVlw1Y zGf+~gy}@NsjCFbdv!Kw6B`D=5530DWx=CeCr_egYm~w9zX&|4q6tBw<9pJgo9KV>Wy!!}J&{9(Fum@4VvGn2n}*$_DY%I1xjb)adx{6< zY2JSMno;2Y8h?{HWSDw8?wrDP*OHO>B#8>_&h_Kl;f%HGF%mm&$hzq;CcSOW8d)T4 zE1oA{f3r!gW8iHS%J0R>_5Otl0Ku{7r|iB`ukLnm;%F+7q+oIT6>y#FM`vCXBk>`S@hG%frUzZDc1i@0 zxuQuCk(TD*54bTG!i|P{(F0YXuEYBykYvjfGl#R`>S&iH6l}i%pl}q`*W*mU-a2!4 z+A?saU;n5YI^4L%@%zlM-knBza^|W4HS@g=Oq7_u0Bh#DPWw2opGjs$pjr#k-wP0n z%r0!r=(q5TnL6`!lczJu2p49JCkEu>lf(cKlSLqdK2CZ>OfJu2I};b}c~zqvHN>_XyDi|_elzUV?>Ri4kUC;hya$O`IfXfvBVf6Ev~2ab=E z9b8B@0D4b%Nf&-y-L8f&f{nFpo_2h;rr)WJEiJVb`1H;@#jpg2c>l z56y5FDCT>vs)ojnRc)ZHZkspZ1U_F`xm-vDxp9u9a<< z)r>sMuC1?~R{x<&nPMhb%qi4VyFG7#HMv-A=TewxCim^<--QLlw)|@TpX7i9({Ai{NcnO7D4wh2I-q&68i${4A3s40Z8gMGURIM`|7O)yDXtr!1}7(rc}De|L3h zbK_w(EC%z>;2uaIb6AsSpwUgY--Kgr6b;mVV$=T~!#%M~Dq2v+Furs!?$X3Cc05c4 z7Q0Gb22^M+O;^F~$gRra!UA=SA%9d(Bf)}1(gHp?;6?jI=j6pP5h%zGePW1vo6yzO zm*jHMG)OudixRH44T=+tM0d>rh|?>|ife)j^676ulrga8i$YMuD@+^$(tOU_`Wc)n zI~HK+8u4)`#*B&c@!l61=XqLnnbT?;hZj(X80b!+;ClKFSuSf$2icW#i#+``6vXOu zcV0$@o@ZHZ!w#9uALr#ZN|u+?iqHpHnv`8l!4Fi>F5gY30gK=GQ6D#5=o=jH;m1xvO$B6VwNS(rZHy;HKp5 zK2LhST)f)_A0o7f{&;r8gCUYuXACP@a+@I(x`vAM`4LD%3eaTRh^dQ8oHV>do#TpI z{-GmVou|l|zMYrlrJ|)SaLC8hU6bOrMNuhc`SbPn(4bMEmK&M0yjj57F9a0 zdH^$ES*0mal~*$-DSVbyxeItMTmzPsb2Kk8eetN~0%Bg{5oXO?=iSwJ-32Cnh1&CK z72U*t*U@7(V)mpXC4n$SL!Qv>BgJ*whoesB#yj0em*0QFx-1>i;Qx$HnPd&~f|KoA zFc>D$KA$ienEMx5U>zAJgVb2xn#IMKL3s)ihoFM1%a+pPqfFnE4cLi2)PMAHEs2q-Q8V$M!u&L!_<_N6w8{LNSKv7zN=pi!x}UPK*Qr&`nrajT67Q|cb1V6 z*weBvhCdk}C3p>1Tg$Mtv@$SJ3?*b82G)gs{ZivHDr(7;RF05LZT91`PNP6BM7@y; zybw@mrkM6ajQlzEiDZFzxP^|jx9q?Stkdq&Jhv0W-hZTH!mN62ueovFTa1M+^6kwhopQd!%xC}f^g zdZ*n#w$N9Fg38{ImZJys5IEh$64u~?IAvilER7AMDekaD(tC156)YFEz&}b-$ob}v z@50-R#D>Duqz8_5$pAeHG?Ye)Uer5FuEq%Qp!D=Ki{BIX7xp}tlQR+9*WC_$tv>3Z zKngrZSTN||XLJq63b3I;x|$R?xE-k~8dm3VJ%_js-r|9O(Qogg7DPk;lj5z9y;sp~ z(pp=~%FcZEiX1a?{Smsoq)6TQ;-ZiF04#(tSg@`;rkMXWogzHhlhfj=01pd?e|w>w z^dEXtS$(JMv3&N8YhLbJj0K==DPr&sR7{Wzt%eZVtAGE{z{(|<7jW%nbaSNZ1(<59 zsjDYGI9VE+Mi*3d0K%2Iu2!>b!W2=UIdMI=3z2fHthhP5eIeL}^nP-3fvESOoS~s1 zgpm=^H3Sms0}rz9b%)#8?wBUt#RrYDR_a;zb>w{{<1f~>I9cpSh}7*E4i1SED)meu z3$S(ODIOz0H-a&y;rS|z?i0(gm1`wTq;UM@Mxn@NCO6XPHQnRa(j^$N{AYioe~Y7 z9{&z0(;#ZJXf}XX7vX6R(M;F#owl&^1HQJj_VEOnT3g8m)o`2aNn)6b4FkRq%ADR| zZlkY*sOkAXKq;L!gGfhz zIYB~!(O&yx9|I1q|DC}cGFtPJgu+NB0smcdvNTtDO}&`7O)D3NzAa7GfdDDTCCG`twUclqcYvxz2Oy#=~(- zDwfNOoefe%0>(rpnjs1fP3ix`r`~1!!u8&*V@{bNeG746BpV zA2GPnR(2ZzX7%ZA#Qitm8&xzWCUqCuenhrs*4H-()ZHF|2LYhDihoUlC{TY%{~s!6 zKuUp{42`d5U4*EYnUywCv*EC2u$d@jv%a2*eR>01^EIfH(Tyw){IkCgG7$eq=?^f# z-fy6pUoMwvVB)8V!vh$=i_rF@h8_`z3auv-flgMFGA9n95d#fLmMRbmFmEeJs1FOg zjul(DeoFefvOCyEMnQd8CPulBIA4$K^7pjm&!`Ts7RYMKVrvFBC+T$zGFAs04oHHs z+=Ni2oGL4;A}sml*uy0Tml+H8D(+l+&7C=HOImF-CT-KhAcZ5TB>AJ@2|lh`bm>7h z^x2g-f$$AO@AQt2^9!DL-)yc?IBO3T#*`@`(9;qtJC7Mo(TgdQshlzVm@V`iRJrlX z_yIq`p9~Az6(2{yLPf<$m!U!}aXt}cyo#ox@^4XPWo+d*jS4wBz;MBqGhwH#?#}|u zzME(`*MEwPhjXk|ubrlz`0;lQMGJ=+&BipdAZq1@LbW)+3C~TVGfu}qZ@?N8F@c1H)|1PKlLRn}d-Eovb9Jt`w}LGO#+{gx zg{gG>EhZx%W@dK4XZ*ff-+~^o_r4r^BGXHI$?-yI;rAt(x=LI(Lx_Y016#H4J!Yq_ zyoAlr@h7ItaRXbM)O7$ii7x1B%96)*OPuo3O7*faWSW)B(T}^}0WeA6$8pYUNkRg+ zim@IL3VKX$qNo5;HOBz+X{%L6Ut!kEG`?(%!zyg}?qw)|-zk%t8`Ka?7FF!4H7i>L zb175Ws0~EvDPDXJLx|8C09>awKT1*4SW!~t%&g2zNY>O;R#A~)Q4hKxbEJbcr=`<1 z-k_0Fh%cZFWX>eIjn|3RZ#+#Dxw!>n1PzoEcl5R) zkw;MJux}TQxxfEJq|IOQ|9^u~UR`;wSWozCSYD9|j}rq6UEC^4z>>A?h)5?+2BnAn z9~S@iU}taf!I*iwjcWKrZ-?hRTELT5OiE}BEkCi{Q%GV6GVla zqZ_mHIG_y}#15))Pu=T_BqYC@WGLC{z+-Q1>T+|Nt@GwBE1Dw=W#iYfBdgZOr4C92 zTDsC|assEY+$1lgX}k#9`psb+FEz~1P@UoB-rJYXMZYV)2hmbpMyL=GvJ^4_H;DsB z^#f~CK}h%~{hPv{P=yHPI}_I_C~Jx6{QAO3HEnK%{-I{OVwm8c)Of8_F&&K9nmW2r za>6w5l=HR= zEPJpt^qE|g^I=m!_Y4ihMx$WYu>ewgeaD!b^MbR6T0W+5mPv6>h>B~ha~GJJgm|`P z@>o(6E#&iozYJw*ZC3u4I?ntRF)}I_Atp+@F01W8WlZaP0CYvxev@o$h(1i$xVT@F zX32xDs*EeoYmx5nAp=g>Lb`t}DZlF#Yqz5l6N_T2PeT7btS$UKyK#b|&1TEW&F(+E zBRn{LYY@SHa0NSSVkV=H;x4jIXRi!n89@jg=?SvaB~t}(PJZ=y$C+##^Ut;2*Yp9A zi!h%QubI6s7;CVJ+l86L5FO`)%ysl(AvXafvP?c>{<(E3j~8!2{E34T2P+zQ77eTw zJxDwiN*HNe#@F4x=9T~c9Rw%GSj;Q`JWl18V() zEE__zRgL8MlrWrlT?C`D!FR3@&&W8expyP^AxJ0Z_yH7)B5UrUM0 zTu_^ba4&V)Kh)*Lly6wbX}?{D2_;E&;Wmc#)}g6Yz-mXNM_ajZ?B zC|bbRN{#TGDpD`Csa@s5%`=~vy!i4nHTixIP`wbEp`Qe9#Ll!J3Ok0F8x#W3Ij+JU zfB{yc0@3YxDFDg9MRTRXJo z(z28kHYGWs0f-7o0yI(xD|#+8QaS==C$z8}jRcJ~YgTmV+cPdm1Wr1W2^XmsDGKWL_AJQz>@BT)^}A#w&Sz7T=xAtIEWow_>%g8&fYss-q;0X zW`a36*;Sh0VhZ`&^^CwwS#5hdJfm%yu_kQM@Z#>#whkkhDV%xgRO6fK7{YP92+^c2 zVI_|9CHlcR;iXUB*3NrUWXRXYSey$TLDy|0_HcTuAMr80Fib;m|BayW&OqU?h)U#b z>8C$BG^j|3_B+W=r0o38#>4|7pP~^+a(#b<(BT0x1;c*|B!%Eeggvt` z7a|Qk{3FlHAF>;CjkEVByj!WIdH8||raT`#!jBj0QuYc8zl3ZmLn{i| zOfia}e}9#RFPYb!fU!h>h6vaq()~eR?Wt6b?m8B&DGveDTHWA(KSq&2Yirp0gOr$* zjZKx`!#1y)u6?)U1u;`u$N_Q@B}Y`j4YW?c&F%mDr8E*mu&FOR@i@9+bnaQ2?B(J0 z6i{E<9H+T3Jo^fk;Spv(adJ4_B8?>cfq#cJf(>Ddr&m(jTZ`D_U&MnB{UTAwVPP!h z4+p8_%c|g}ArO$oXh_r@Uq=#=Ry0SaWdAc0SWnccs`p^EqmM%c{|&QQ1$`j=RvCR* z4Par_{nQx8Afxl{e#PcSt(?!Fy|6$zTfNannF>!U@;3PS_aw!#*T848LD8Rbs4ELs zNumP0wq(sp@^>|SKy;VvWkG^%sR(V3TJ($IR$jGnYrYRKK};^rv@}Kvh+}N8Zkc}X z*&I~_1?j%zOIt-NONmjUUOMR2ChN>gnkX)dhVMwJ9wIFxh3>irM266}Ps{6TU`%7# z@}?y00BeK6(_PixlR=INg{~*qcwUK;UvbV%zp?mv+C1#cM#@_oT`$Y90i7-zd$SAc z^FSxmZJ;I}oZG@cab$RC?&z+JGG=f)=ut*pX*!Rj#54Yv>qS&XxBhRFe{$buRXQvi zsi;jAYZ)A;8j(>ypA@2Ak9kb{^|aWz9ux-TzZ)57=m)O&(762bOX!>Qk${A_c{@{L z>^+Cae`JNT`!cGul(~C zJ)4@&WK>wl{L z7xRUXkdUxmF}`i$hl@c+U}OhZtccNTE|KWM$#G{=&#K$N!Yq{=|I2hl`Lwa`kq@G(JjQeOxWvwc<5LELN|pg(lqdVd4wooFjJ=$7s|Fj&Vy)gcmk$lqTzCKGk4Q(i4yzNmz9 zE;91Uh<^dE1kFMJ38PXo6h2kD*TLBsuD@qRx#i-=Q8cEt85vz2EuQvrVOmjhcWO!l zmU_|+-W7`Yo-RCav3TghQved1z0 z3JS7#T6F;`Y5ZlaMMBT^>y{%Z$#ZE)L0TAk!$g3&^iV58E)hP5fQa=gzlq3{szPy? zAU@J_530J^Itu^Xv)GRbzT@xN9iS@$*nM=D6ZAM}Ha1w(J6ipo^5ZIqhsP*{owd$8L@xbG1F{-!%&(Qwmfkv>6s%zJ$;Mt2&{0cq-WKx= zha?Od!CR<$m3~c@5e_$gP*CPH$JewI9diW2i%&F zi~s*JjNb}=en2;mV(N>G1^xlt;@IoO4N^8K%V*~~tp;ZOHB=4(?ubI-;8Mo;kS#yY z`K`s_HWy4>HZ#hEeaVp#EI#+hka|+Mlhf1RmA0skmyT#QX&!$yH~v& zi-ugiucdXQRalnua4w?*5B@F9sDKzP0tufbvR!EA{F<7}`wrsDE8&b!hpz#Zj6y`+ z{;!kQ`>J+*;&A!??n33c9GQ<{hMZi>yC5iY(utJ&hqCBl3R${@?239ea3O-H->=21 zHT!LRXsLiwIe*?fK2VDaiTqim+~5`G`$s7QJ+&gfl(me?TqJVr>I;*TK%9_(!FD6n z>#jg{!AsrNZZsU9{t^$(YU|G#yLfFVM}&D}HVq68+AV1WwKP_^f6p*6eXD=XL7w#V zRk$2h4s$T|2enTgD0GybLnAT#;4L78I||l~9Z7OcP0g=V0xuB1bR*ezNU)J^d;49!hXxbKY~?wZx+$sDDP86oNbQxfG*?1dQ4wLX6J0nO9GPsn2H{$7VgM*du3X&*LR4>$ck!h# z0{5@9L~0KWlxmNcsR+NCa9-QwBt`2%07b6(Z*W`p~4LQiWySpo0Or#Zk-{ zUJLg1{#4l7W0zY?1>T2y%o!3iY{82zb6M(r|9!w`X7hQgnl=ti-pu^g!ua!iGcDfz zJGajk8U(Gv{QB1DOoDP(rpuUtdWt(Cp=JH8CKC07IYZl2(da?NS{OMpS=tbyZx%9>W{U6qT0tT-N)bfBOw0 z|M3vn__c5NFx}FJDN9G-DU3}z9&c5YKb>wSvvdek&1#lN#Qd`3Ck>=&66rxjeF$=U zvQ;QPHC6AY7suRq;&0j?j8bT5NQxn(Yff@v{F&zakq=<{V`qOJ8zL=-_77`99O4jr zxv7=7PZsRuAbh%K>KMPu-2=J^49oeGzKjOMoT8+GT7Gb4MUOE6|DZof=FB7N@+KzYU$JA>xp$Dq`lH^a_e?b<&urC1MBx)~#dyPXC@YY?R z)=lD%VUE!S>$9rpf#>9C^F>Z8%AOS)M>O%B4rYQC$7xtN{ny-RAQ;M@J4eOXq;0?y z`@PNX=%6j3R;wt$03a#@oN9p&3l#=El?#66A1r9E9bFuH^4X_WQB)ncjV-D5R-wRP_fa~Xw? zPY^9_?p>?kCnEsL_F7z7Nto{dykr2%(~5BWPQLM6JyF2X$!p(GEyI_tlyT!CtH+3b zQKL)y+m&$j2;Te6myPn09wW&6x>;2s#I=&7C>iCFjeP_oL5@e0AC1WgFW^d!9tE#4 z(%>_w;O>536yEo9U9jl~!xP|vlI6!*$gy91MWw}6j0WFJ6Q3;n5o@4}0o_C~%Jh~{ z$$usy#-9r+xE$sPhSSsEUsS%a`)y-=_p<3%^|4IJ$$Sq-1vvB7o|A=-#TBD+0P!Ro z4Y>$bx+KAW^=)ogBJU}Q>@2dR^3;owBl>Du1~HEh^8z!@1*MMYiKCNSinZi~=wvbk zHMZ&MOUORLpBfq2cs>Ra_+iW^7)Y-lJi(519e%#Lot{kP%zEPF=r)LLd?ck<2w^PH zF%1a%sGMP%YZKIZ+7S(x67h7%5%Q3)olGbMI7DdYb5fQT3UEdBv=c4KaIE-@?XHJT zLI3c!;YX?edqpi`BHe~bfo@a}7UToiGlDt3N14T$TP(1_Bz>-Z8H8ri7sr6Je@xo?l zgqR7Q&?aLm=mf*(8J`{}<_Sw7>w$2!?+-I>wszHIduvm9Tp?9w?6=RD1or-$?bJ9V zd`=U1Iv>@of{&d?=GCn^DPn;}WTGbPv0!!eRXdQ)^LhgS_WdJq>;i#WMQ7Fikn(!% zJ$EqAX0tvG*cXVr=Nm-9#nKsHW6776n2&7xOmo>Yx7U1fbo#G1d>ln?rOmyv&NrN2=JrW+J!@a|L^b#pE}s;85piEg*w_>zIwpRuXeoKAM}Sna=2?5 zd!K-8IO%(*c*0f|)e$Ihgt~<+S{zF|%j3?f>=v>(VNow=^2QGW%*|Ad%{VG*qQ;N$ zzF{F#nu-1?4pci7U#X$vB`FalRn3Sj{)CIj`M&czY2p|%Ws=UQj!*} z*7mVGGHjt718f;bj}!{p(#H{1`W!cBk&Qd(3o5u+MM=X&>Bk)bA4ECiJhNgtvX7o>*PzUz0%BN z!u(Caad1MRi~L=e-4_TWIewjzf)hecYe#5O5-m#0`+1odDLYiwU6a22N5}2;)Ou%) zTd0yyoQ@Sgf^<*PrARG4L{jgo=TL|kL}(~+f3SS0=~Th*RMp*o^7bf{Eso}V=xL>M zwV#4UKNP$%2|NG0TzM!lXS|kb=Lwbdpg@h(=kMU_)o zTp$eL=_In3x zL;K18axckw=0$-Q9wW2MbPCa4EJ8UWk?2Ea=o@~E@pu}upjzI{*KB!WAOC>E4=5r9 z^4pGet~HH)>z=2N8it^*2A_w#_K7%aVhKRRd!!40p5<(9*jh{T{01m9r?C9ehS*-l z&uexp`wT2jins4t>^OSLL_)~bT!(G(^!W*jpcu)wRHBDf51U!m8o4lZ^stgIDB!Dc zAr?+w0A6+YZQhwiG-|&OKA6{(#FTiZI|cYK(fE8G3HBrLERBC|PKbvk$tr zqcnWLe_tt6*xtGt|Dp+^y#NF@I@Wtz)4lcLyFvOsE|Wiwa(y6K9^5fBxF2GmA*1zi zGSbBUq^^$b2w>gac~IScdj*dH{hYuH)e%WhIApe=1pP z3*1CpPPhCsNGmorFAZP6Zo*7>LPggO)RG$(-Syi_i}%Dlp_XHU(MG`kn+peil>4XU z1$+04vtKZ6@JKb$H2*r#)7y_7E=U&FOFW_?Kz@ZzhaRSRC|nros>j5|eQ{e78BsXkxKP)@z|cON28iQa3^lQe6v>JPQQSe6*F7wAAU z>*nqts6ers24cRU|KilZG3G)rSDv-_4oXWc=Lp!aNr}N#soM(GA}(gcDJ93)C1Exc z*Vu>C7Vcnf@tt1zC0h}cKq;NebsGOCFwgOb@59U~;oUp|m47@k{&Z`9N^E0gM zo#Gll!v5%>qB90wI2Qck3%DO^_3rU;SWSz)tVSCB{{N88`X&u`eu-;1jjn6cQK+G6 zw#@p^bzM{prG3dsgcnamRuxWgRthdO;?0>KR%*1bZy)Cj*1d-+3Oasj74w7?lg~y; z^W>Ju;wwE>eTn!)AAE(7N?RapBNm3b$wJ#$852QE5HR78LFDC;VP?7&0T`BH+;en0 z%H3dknE~*~#{rg}cF4XE}x`ijEYN?uyh(i3aj zIHF;cEDCqqkeXJ<)iYn>yAV&rlhSJF!rfl&HTEUs-1lG5YN}!$U%uSp$W8}whB+D1 z#in19W6o2GoFy(t0HN7qsFo=-vc+j#+?yQ-|V!*k@~mU=l8{g)_DUFV-n zk+&nUM&HY$P4(G#ZyjEI@dWOk8&3rayeda5($a_;hwnU?yc>t2hbE3EURUQ`x}q_& zqw2AS0$vTK`_yM=GKZ*hJeaw%=%ya9-RBx zXTJn1ld~2_*cxgv!r@+<5u5`G!UE_v)NPwWaxqAydUA8K8|H7J|C|zzJhL~fDcq)0 z39K!9Ce7c?g64v8W34<=m0O=a{iz; zx#!|C5b#kIbxY~vdN7tn#H2K|^`dWNe&E|KK{6cWKfW0Vw|G1f0fbdM#8hOi#%;7L zLS5bJ`Tv6+ImOQ~OlMS{?=*ieY+az$DlcrF>nF||4ph6CTX@iM$^x|~BrV=>} z4v>e}mrJX=HMMyNP4WpD^v_@|EEzDl`FZS@Ptrnw06*UNI5HVeBH6JGiy$>4K1uonFo@B{vWXA+MK@GIj>=h>R<0#Dh!qkKX zH(&jYNqiJ2pe(WBj~H{s`MJ6{bJSB5`A56Gs`sXVIO>KP{ew?JlPxuVY_%%yYy9*% zRj2iwbd|POm!%E0p^MwT2qU=uvtTb(s3Vf}*`ezRixYAMCuW7E1{+z*+onJ*;{J~e z`}cTf{E3boE?9W(nl{_X5;u{+7t~%q&~)R`tiGy_fiyX~`Tpyr1qa{N+jQ(Cjob2Fa-{;Y{{G=2wn{cO{&ta78C@p!q>5To4xNdZ3q7p|$h zF**s0&;&;h54nkxmbRAh(~*I2R7@^r#mJet2Yulw@8$;_{Au}ly|L$-lh0&1iBHq< z3Oxf~;AM7|f@{Efvq8(1ZY90n)1XkDe!<057{@SiXJcticeygX)Rg-D0mrq_EUZz0 zWg^{``3(>)X5(VZCm8T~1_3TM8l8><8AnYAipJyhIN{^_6V@cbydu831ovWXtwvP5M=+J@fjOzllSD(&2i7 z<*LKhzc)mN-wW%PlRUNGTLcNA$$~Ilg+K*vRp(*VVPv+D5P>tpv3f&$Y~NQYQm3&Z zWJ=I{yaH`CMWL~w%1pH39(DaQD%aD(V?}XH;pGZ zv#_WZyX`4%DEdgJU1e}$eWI{(nCi0MSvntPL_YjwykQA9|3`Ue$mim?Uq=e^+ydCj zDl-_EMdI3N6dCb3Aw!b-mre*yW{yr|El;K_U~#!x%*_w6qe{`!=~Lo}&Ahv-;QGU< zR^#XOm1iu!dz{H}MDyZ6idpNB)ZX60z;WSy2aL{^H&6fK$(qN+#}(+v=)4Nx-?cIn zoE=@Q>y52-%f?YT?+W~}U!3Dr+hO5dZ>8g%B@>UGx2HSR157zD=slP*kcWcoxD((J z{FJZ0VfzGTy@yRNZDulSSuZ69{E^o7{?#ea<9FL(=}&!ePVj$-Biu3j;k9E&Nzuej zC|6k6)X}3mP!Lodkhe-r%h(a+(_8j8mgMg!sVZq?8)9UpVnztO#^2i}Y1zNYCITU% z4M~L#jHRmVx+My9e>Ia%Gbc~?YU4TCy9mU^VHUutU_yN(@4u7~ar|$3j;Y;kz~SrD z-R;^dKUg(72t2Laj12j6in)^uOP`z!rc!04eeOScT>&H{#err}-;8^pEn$7e)W?5^ z4%dkhw*4)yKCbUQ4y&tqo zsfaH*i<_I9>cT~2fbO8@@Zj8>;e<8WQ_=`>9HpdbtGNM0_6LRJcgJXp7{gtArJ3oX z@bp$5N_9NOU9=c!xl-TQ4T@42`J@Wc+qiZlG1Wp{Lla0qD&xHpXUCddy$QZtsC-3e z<-V;`E7nKA?y|@u{LlU*o|);ZQ`%7ZS>P|$ACxpK*$MP)(eZ30hG4gV>;R!|POqnh z{244iIvi@1O>Hqfo1{@KTZSyb>|?w?wOyj1AL-WwNBOMiqxC>zYTG8Klc~qd1Ozg) zmuk!!WITWbRZ*`02%(iC38H$^+4S7X>#Ksp6T5Bc&&Hbr_*53Z`)M6bu5_q&;6o^k!TwfH$bQp;ATwG>S$md=l{^)KNsLUi{sD2 z6!l<;hqB7Q`sMxHBWzw64o#j^vp*P1l|Ei?Lqzx31M2QGp6w+_iY{aa7m64$oa%2L zZj2-!Hgc6H*U1?^nFSpVo8r+{4*-qjg!joh+0-UO9 zqVjT-X0QWV`Z~VZ&uT(41wiBuf6aY3J9~!E{4~f0zHk0YI?M`r*ZZ_weZkOk{1sZ) z9zrAWMB^PEo2(muotzL4564%Rn*~on1%S7uW*!ywSPpCDtkK5x14G2?-WvNktJkIL ze>ZOwB%STl_U^}jdL20xK^NuiUE5u(_aY;lHAQ9QA<{4gwC@m+L>YpX`u z$%OQD8tT%H3Hy-l-Dxz8J07cbb`8&?hgOHp_G6({qtEWwNHq^nJ-ztI4Fr4{?fo<< zwQ=0>23&agaIEn>ZPze~Aca%=US4#N`ENi@QtXkk5?<>f%}7 zODfy+GIup05get>T9g)CDpV-PEQJ^aDkL|Sm!%4F2A5y4d6u-q=ThX!(Bh*<6HngD zIHd_zY@)ihS8%0kA%u(xT`3V7vKU)1iRM;R<)tW7NOP3FZQ`KZYsUoYnbMtHT@?Oy z;Vg{PrxBNBoE%Azl(k%VF$reGv&ojo$Dv}2>grd&$fktJ4P+ZR_Nj%r9U$S87h6f{ zrTagoQ#VFW(GlWpOs{0EW6bttF4Jv&bx~&J=?<}>Z(TSyXbe|^lepj0!Qb32g7r}5 zl5$pXabZF6wn>$v?B{R`Rt6HauX&$`kbg1XFJ%p)7_??bhxy)ME%co4D__ZMF3+ZC zj|1oaJ$j6wjM;1uYXvF^sps>XzJ}*pZu{vl8ocZ)o_Z3H@_;r0-c7MbI%z~0S^o1r z*p_m1R?@@*H;n}kM0Y9gPY)~($UPKMaM+)RDTxV*!{i!eJn@7)mBsI^1%i@jWR(9q z2cH<-GH@KjxWAL2Fx{mBOAV6V2{wdyy@wA{F9iV-AQ*F0qb^j<4@~lkWgaMfas2Qr zz{uD~04|g=rF>U4Bps#j`+Iz7L@x{zn>xkc$TJ*F3t;6NUQDP$pSSKv!_U9=9)jvP z+lXXjLEom%(p#Gn1l-mS8YEvAL8y=MfJVR11LPmCX*M1;(ORqEy3p;KIEB0G-O;+i zd{*qS)pM_tm^S8-OOLbOBHn^MvWBrJL5iK2;!L-&|3S!TtsyG5jNU3=Fz#7>%v=&nrh?q|(Q8}U(lpT^Yy(3xlo)MiQOF~~|H)h#*@8PAMhN>ET z8wNo^i6Nn)Ln9CGUpKeHDjTZh2`zvxRqmTC{}sd&0#O3gg7#GfNNg3X&pFN5L~3&) zqhQ&*hcYaY4Ezc7M}vVE-)3EFIa$fycG6oJYk4I0yx{LklT$iyW$s=lJk5B8EMd}KQbK0dU9iPR!FeI$-DaSDj&U+jA@TXg@G}RB0qk#NgE25=T)ps5((M6q@ z;~oRZTOz0^Tg-Pmg#~o3t&ZR^oyoa#crNLg840A9dzkBN2WyNS?LXI6ukK1QGr{v& ziAHOZ?=2}buuiLrZdEVo7j1h@Zp=L=T`bpY-Mwz-*L5=UdL3cL;K@* zsmIGJOjznm$Nu&7^b`TRv`Bol@j5l9mzP9${yr}ZiE(9%w%=E&vJ`O|bzv5_gfu^| z4_i?G>l)hu^O9KL$W*XLB)`6-*N6B24qaGwWxHkW#bCzr=J!lPZwA{vCl0k-e$*gt z;;`RBTQoBJJzW)bHe%8(_boSHh@{NJ2;h_9so*rm0vkexIa0(!k-DIzao;f1!bwTd zcp=6}q@T$FgK*(!2?He9m}T_;v7V2>3*B}`s5b)9#h7dFR&}%6=y{;zV$q@tW89XC z$V^MG@T38Y{#1`*#-k>^jYufzxzBwYUp(8z)tPv?;cEvtNJF{4u7-dok0Lvs{prnT z4L#0*KdMQyN2z86Bc;t;gZQVJUTm*$TZT8|#EA>V>A6Cxn_-o7+TvS~m=kq;L{FcTH*BAuY4jVv{ASzluCYXo$AXm}?I1H8DAHSPWdkN6X4lPiMy z6N~*Ng3$(35_Aa>dg*VhVT1>b3Gxk#gx`QJ8fh5v3x`D4B$B5?fRtTZn4m!n z#(Kwzm`dc+vtgh-2>v2=`%*OFvTH4OPbyMfnxd=D`T5fN3G(({PDK4*Hx0)41vZ_< zxXID_>S_yi{ds^HoPZ`vpE~>i#Joqhkb3S>VI-!&cN^;%!62S5<|WOvk;ocibrFZ^ z!MeD<8U%7BS148S80LCw^vK}+Y{2r%2ZR9fO6k#M=*J&xrkjW^ppkARbI;JRy|>RB zIuvw*K#hJmb)OSX6dUbR7`cJh3o1=Uf8TNpj30>YXMBM#PJB;s1>V#IXF&77PB6B7lFakEoeU_E9z=k5D-uvD{P^9 zxZ!MnTNHX|oz#*cKzwy%#l4UXmn4s&&$5rp3cN2!7HTT`#4UCTs+r|5KU{dLhL^T}amxIz$u%llEnnCjCqbM4X}dt{gBJEE>#RMysjVYderc zK0Xi_wP?CRKlRLC+Y=`)zD?S7GwO7i=Q59Me;Ex-$e%&s?rn-{dHlhs@H>1*wuY#N z>k!+e=oT(-i+P})K5?5~tDs0oL)$<@%tI(ct8V z2%B67w}08rLBj`5{4%~7YU2P) zJ}i%%or2yBN%FXh1DA%0jnwVm|E4`=w*%fr9cHxlt@?XZdbdbHfe9jfBy`8an z0#EI~{Cn)q$>KAA4R-u^x97nQgW?H1)Bp0ZUuN)fcp0>3V$Wdw_GTSbgVDBkr%+jS z!7_JtaVWb0tFWA45MhrAYzr-k^WfR5-ciWyg|TV29U zVvFrG7&v(cT{?>-Hk&WY0Q0uqW9J=cxO*hXsL&d6*-e}TqQ=2aFbCx#`?Bc%0ZU!U zX~{=bLUCX!aQ?jDB2{IdHXo>ZW3ET|?~&ZTz&EzwV-UlNOVixb$KC1dXwmB<_vKse z7`R_Qb_iMU60IBmsE80RMiAD3Mg8gL{6(UgUTi;?ZP*;&ajeiH(m#Z}9(VhC& zXcNTi>dz7AAWa{Sl-m3G(_H#+(!-96i>o4j{9Bq^8b=1c% z7XkHntH2Y-%in_N8JIYf;+#9qmvmUa~Qc zlY06X9M$>g1za0;`g`{i^uBHuYytm`ifjw<zCSi3FhkxOTDSYJ30- zJldUxq25N7T3x4Qe(cP{UNQ2&^Emt)iiOp2*_2V;{=2WiMr(2Y*DVEiE0f#ej5vrair^`p8d>=pGCa9aP~|5nj5KT{ z4S0DI* zmhJCs+s7K`0f7r%5s1Bufb#RO;gp80felxuHTW$gqL2QESm4LMta&1tBwTb140cAV zGrrZ2zg50NA}h-}$kz|VcPL?KDKjhDp50A&XeIm`yf;gOjJ;_{`W$9iVzvz`l{q{Wy>UX16zW#AIs8B|rR`lr*xFS_Y;ql0D~~6yd}= zcqCeyGaGC3M>n=W^N|>pkNx&bDP^K8<$E8ot38n`?y)QG^fp1{l%B$;x&&c$AZr1@ zQ%x4I9N;KZ{1SgQNP*_y<6;du;4%E1VS3tXAny{ANWk9M^t!ZBR35PYRVzegd__(| zJ7&qTmaKb|y+Vo{@hTnD=UOC7xvof(e|}^D_qDjNyw$$Xe{pe9%-~$ufo5XIzs4** zn6?sOOhm`Vx@6iJMpX{$cL_em*O71JU3;Ub|ErUvYPVpo3!;GMy}*0sC-Yoc#}U*ukt!2u>B023{8=#Q zlV>c9=IfQew*>=dgwwH6YxhpA^AF<}RS;Rk|3md}ug{NZ?4PL(J-F1UVu&a#KQS1y zJ>y0s_M3cVY?*RE<4%Vg{i0LlFM=8Gx5pq-0+m`yphbP zGR?HT_o8YWaPRmqOWR|N-}Ma_#=u9>Jv>yIjiP}0p6u8kle-+@*K|Ha>(Bl4>)u}t zu|tzA^5K2c?chxXu!_W*#CVXU#c^cT!Y1$)y|%+063F74fBg7kPeh0NX7JQHSwSjh zGxU5!<)Bl=v9y$2E+@193r=W;5Uk$kobNyPgq9=aY-0zjE#sAta83F!^-wt)Wz)Sb z_-DSvZ14E^>;0D~WqM4}6<`vi>nUMPrvV<1HDSB^)k&cD$W9!Fsb=cuFfQeeeF3V` z6H1lcA66M!brU3a&qqyw_ZH8m^%CCd_vWYFO=5)Wg(UNkEDq}qN5fMH<1KOVm|WHR zDl~XKo;d871(JKz3uFo%mRCUmR3C1`~S*M$h$26Y)i1b7`JC zw+wI_N4=6UHkfJI3S>5?7l%!5N5za% zTVr;1=M2g6rg|9WqIAPYKLyqr|CIja{&xkk$}Q#1r)cGW472R?GJZM~q13#;v^<=# zbi+hUL1j7&k$^^kVN66FmHXDy>F*Kse5|K|N%FDg2l(gy8d}LttkvZ3Px)oc7h_qA zlWT=ann!zf(~8>B?0hBD<1J1=1h)kn!AF9u^x&Q<&L?mmC*S|<)GWzl{o42|u zDuTx9A9l3RxPcEjfC#V(B`K*mCg;J8HtpmZiM?(2iWGA&+N{Np^vycf-YZ5__NK{d z^~z9k--SB9AQ*GJ6$u0K=1T}ximsp>cOH4F9NAY{OLQg5=;6I+vi>i6jPKV^l!Trw z#CJ4uRP_{U7qXmV;_+*GvzQ=82J{VfGP1hR%H!`(5$$ox&u@o1xe8#x8P{x2a6_&s zYy}%k2zb~9PJ*4?=UmomG(9&$!l@BxZM>g0e;$IRQW0(sWB>g;{w+tZ{%G}Ps698G zaL`6Tc?(F?#CSDA7gui$G}8BM`D?$$jFT6LQJ&|65aZ2>Mvo14=MrA2+Z-!9Hl}Rs zO+5a1)_J@Z=u5xmhYb_kK%kOJg1fMPOJU?7gAS;T69tdGay;g@0i=jZ2)>)X=<2%! z8gp9Ztj+RRIowxZ3)ubWP-tm5GxXv6to`;|fXLGQblu0b?+tp z4VgIlp(D?e-{Z##7h}qt1 zsiiEGS7*cXZTRP=t-xBywXJJyTw2Ow0`nYxad%Lx4v!Iay5Nc561-ybxgRHYJZV(_ zEG&FD+I?x`lpZhD*aS9YsfCd$JugiSSE5iG%Vm}|oBW~SSIOcmUqhh`naIq&}<{zLA> zw%7vzaS<)m)Dhdh2+j%Eip%u$%xx;ltMN0syuIo;8Klr!vTaJMb-V4%*Ea$!v1gn* z%SIAj3*N0^eo@R9JdJK)(Zm}ns{0OnKeg6|avslNffITD5ACryWg28%yDKsh*>6}J z-@~vQnFDGMlrqvR8uVIv?=fP$q%CaDG8yW;%2<|qaCCD$r>9^Yf$wsafbYP6OgkDqILrNUw1@kt zWWB&=Q(&g7zH+;|?FsKT%<1#Y$kZDr1b>c1#*ESOC$@N3c@_CcYeqn@ZK|}(@%wDU z-R;9Y_;$G3;|%gY{kn3|T%nVKyvg;AQ5o3elQw!STtGEX`EBLrUK|6@&Ip!4!TLZE z6^+~7G7X2-fUZA}jFS@r)mL#i!qMG>)Nc(3O{owP+^PFHJm6$c$E~+hmf1pq*XT{| zKbr=&c2&m*Qj23{4cmDK=}sZDW^)`{=6cR zWEFf?meln6Ezb5jrCl62Z@EXHNuN*sf=4Ft`Q*x6o;Kzj^uK>)pb2;?D|lDUbJ^nZ zBl%F)RYP-i;N=HTzhaj9-PM;U=2XXezrElH*XCTRaEp@Ogx&5POTeoKYm@eSQi{um z=SUz(*iS;RcN2MUjHYP!JpHDaUQ;@nbyQ{4ql*PnWGIpc=<2^zp4827Rl&JL_^Yn{A^I zxD0`h440T=a6K5F0>`^(?W z)|Qs~y?(9lE-$5nXXssoTU%RicaI_vtWH<(yHO>V9?`QY1+v@kJQ@8RRi0j@9 zB;{XR`JYec0yb5@W+nav&4fne-Ip>F8zt|A=h<3GcD{Ty@U}DNvll>VNM|h13qon! z7Rrp#pfT~6pw6R%felB2RtzvsU1sK6m4I`0$gx@Kw-p|1Z;9~elR70#U5u11%YpS2 zj1;N~Nwre4ur?47j?B;ak^chZP&5!skKJ&^z=roXE`ApU3_W@5;1ZU6BQ24nL$~0z z|5?rjZ>om<^XQl}jQekIUFOEEht2Bbtatyb&JhiJao?3b=C*$Sd7{GICEb`P{pxk}asMG5`yGndeLC+W--X-2CfzX75>v#j?*>_eV zMQ{lu>z{;ijEbd05GMuVfqGCza>fvo7{1EO?qOTHdo`OiMN!ohy8hPfCY`q_p`$Y$ zqoJ@7%`W6J3-S=%jfa*cao={L20=kfgWxP~GNE6v5GKq;aVdFG;QkXrNjC5mU;iv* zaW|`9e7v&XAGbC#8A)T)95TDN*c#MF(6>JWD_4z@Esh_dB+ZjsB~v}L&+`+!SEl)T z&ZSbuf7#hp6g9BR>9I=-;*(+2*E4Fl-*@Jdj9WC^m%6!oJl1!5$O@8rE8{u>k7KQJUgjSjAw`Yd~n@*8!`B>e9E5{ias9z~-VW#~ zqi=ZQHd52`UzEG%Cv!Agoy}sqO0lmK?7fTsx+wWi`ra?A~tJmvjipgQkc?~94L9goLHt#3mw|HW{Ew{^4>0cG)!zee}dgxA@T?Rk? zwV40<*O!!Jo(_JkkbQot@AZX7Wlaq-i~N6uhLmhQl-k%l+92c6bRTvn?t#I?)7Ol!-YqU# z%f-db>5-r3F_J_nhs!SkRVFUAjC(PZJ=dmm5$caO%Auheg{pF2kkllZ37c-Lf06RC zJ~vT9+OE@1_Sav|ggJsp0x#zMxFi4fo+;sxPK7TD-~G`8miO+T1^FT#V#5=Euh)Nj zrSW=euj6=1KC+HPMf)Nd!J2{g4|s!5?E8bk?}^Z4JU1q{@m}#rIcI!m9;nxNN#%Lj z7N=Hhvh8E=yj3UDcvp%G(tlLv7%}}=K+G~!lk?HS%TPaHXKp|vq^*?Z(J!{>dGZd- zzwidJpHndK_XbC~0Z=RRsWI zWDx|C*IVQ!BoJ3sP1xqHiC(tpOUGAJ8=2WtX4)Fdvj_xPW~9JMOsNMU$HW{{d(2(u=o z3EBdAe!N;nG;BXCo+e7h2IALK^Pk`y0&e`6i)+&Gt2z|ixxi#nQB~g7(Cm6{Duc1m z>nUxnL%Bksu7OeE{}nOgD}FuoF0WDrJsP+{@TA%ztyy{;BQ7H;m?w&*r(<3ITp?^p zv~l3nOXVT8`%;bKv?NytjXYd|mW0SxJ88{K4YhpItayw>sTdieB6J!O$}h$QV5v{e zbn?W(jbQ-*(2g*ve&5b4A47qG89hQ?-F2feuLo6#NLa$%n_$O!X$k$TCdWw}S$%iTZ)5OhVxK!?X2?SPV0(KMJ zCPCj;XeO7#9hBGfbIMDKws5ualBK?Q37gkfZ!BTdudJrtlVx zAKz^xij1^gPz&eEj?hJVr*7K>2UD#gFI~RDjXK zv&2iUiAL*SxeFrh_=}74zL{o+fyCKzCsI<>-5oZ~^274qklfI|WxoKhZWI%2FwI`|neQdAszdrBvX3dffI5~ub{=%QprKI5VM@LP%;de$1SNg?FyZ`=X?bCjdHY zJffCVA2%GL33b3q0wBi!O?dK|&wg#~68O6=VK=66Mhc;=s3ZTnc57M~9`)lw%&LI( zCqtcn>@}#`_ue++^N3kEXs}auDRVIuF@yV5GodF#*k5IFb8*xuC{ScvG92}NpX%QY z*i2?&A>kagfW}fzPJ%t={M-aSr$9a3$8r2a;Hv#W?)qP1?`0I=^W90r^BtSQ?yTy$ z0N~&J`0fO{xYU^K`TuD8%Ah#ACRm(Zba8hl1QtnfTijg|+yaE)5G=U6ySrNm?(XjH z?hq{4-S@lq{@r@2w(8W(oSB|J-P<<=6m7g{xKI`e5w}gokgKR<=TJB({l&AYzT40* zEC)L}W>^cSsTnQSl`?`gv1|58Ry1}Ib}ENOX3Soi)|jV3qSL?gijyLM(e(3CTRo+J zfVNDBw1^rumr2=J2#7m2-sHCTraR`{i99#{=fc)Ucp#W{oN zd)L9RMuWy_?e@vGa#cZKjx=b-XYVPTJx6g8oLS=@9euyECt zh_mZaQ$n7+6rIZSRtR3Un7@mX+&BlW9u2rNSC^M{U`anqD`!nx#^O%?1Z1`!X>q%l z>gcSK`9g9DFxq2wV^=#|ZhZ#toSkX0ualkc36>hH`L(>Z^2f5+Q=c#2&Y`**&}H2+ zY$5{m8=ff7CD}meSQWGAH+-EJ5?(=M%7&NRo`pO@Pb{}}@VlvFk?o3`a&i+l>`V^r za~SntrXE?rznMN9y#8bsI-i`o=tH+&ZR@8DAx<7pj$DKW6y*D03XdTrGz=>BtALb> zSF;Nwo{v^xUP4PQjmZx0;_Kns(=60b&D-k(q-)}QoaK4$A*+fI&*S}|)j&uDrpAbO zWA1i^b+co**;8D>S;&r|q@xuB(1jZTx zlG4R+6n}|c6~5e#B0};9a5I30EqrJkL6sU2FXL>#yzCrNa#rA`6c#&=|KR;VC-mr# z(V_Z=Prqa@X>-2I;Qfl~sFcy0sMV4A<1=!P-2$)N)vxjK%~wG=Ho-t528Cko`1}e1 zMK1DO4kD9&G9_irtgTstM+ENI=f>fJ-(!OI#Lw>T*GTnr*wiVCoXfhPGnfe0sxJn& zcPozXjhbb2i?6dTHg8XuHjghJr*US$j`vY-lIvlsx836W$+scAR*IJmnr%I@n+Mau zD6-Un+W79 zD7|f;>X^6RsddtwW`6%t_G`B&v*MT2$7J0iqy;2l%IkvvtLxJf=?|SRwhZrTRMOIF3_s5l7T8f6LS8f9Z{9~>|-6C_#i0f z;zC>?PVH6qR+TN-M>X>?A&w_15~}~1#5EEZKA83IqB>b)G4f8pHh_ydXfD;FPyl?f z_dy@Gyz<1Gr_JNi_`YxH;2oQ6U3WTnGI>L%9#%f}R_2mUI(yUxz$yVU)wGBb8M3J6}!HoiFVjc?ie^Dihnv7HxSIr z>1k_r?C}wS_IaC`7}e%#nRXmvq%U-qG#!`5MCtF78!m%`DjUbbm(LSpKP%m=fCR7FAHU8J+?)tlL4FNHy0>1~mTq#mMX$>pv@L*QI zu8qL!>S4}P`_{}2)0V1Vm>9=D#TA3jS9bf6 z`U|L0Ph;cjs6sZ|$7+@VOxxGwG79hatY>V;>Nm(GNvC}X9C9$3miOsk@{{0(4$d_~ z^ZNw_Rf>UWtH!q@-`G0N9(q*9!edr1no@s=A2Zq*E!c?Q5&B0Ou7WltC(_4|IH2SJ z08P~e$U4*Q-xYF5W#!~ zh%Y;lWXVck>ukU{UAz>R=|WAMhQI$PO%-c!Bqj3&)@e3ii?pna@>|LgX;=;?uBZ!b z(3=IRk)G5V*vKxN5mZWH`M#t_zTFKF@Olu9MJOvWylo+K^;RRnF3pJySt-I%WEu0y zit#Bcy>ee)s%s@-6R5+st=2{cK>{o%ZVt6PRia4_k6PHdv*yfCWY`yRA2X_RcD^ck z-oDR`wK}{pI0-a8_u|(xea5#ORZbHzKpVkSh)%R zu&m1TJfG>$3LI1l+N}J7AX-APRh0PFirdyyg)Ul6BH`8O%$@{CjW1#Sg$j-wee9gC zy4(9}w`g0XwzUijFM_ZCBn!FwBi7o>D}~8*o?Fv%ln!PXrQKGSufGyH)VE&anu7BL z9wwy-Xhi%ITYk%-Iae8xlBjnl!!+X?-kA*FYOqlXsOZy#5)+~sZUWPkE-@ig+*xXj zeW}l9D3&nK)QLk%iq_S*&pMVvfZm6edV+2f!s|Wy1P9HeZVUaFyLXFB-u+-XR)dJJ z5##2Q%7^QG@7BY+ks?enkZH|+^D0GT|E_uG)6NOMR{QnFebl|@(rPV%p0!7fN4fa( zg(jmf%IGicuXj9Dl@zHXRE6`2v}W{;^6Lkx)Tvz8Yn*H*>mzt6i(e!A85FxZ9=Ht; z#=d1ZV|1TAd0Z#jVi=l<_lte-JR&konOO_1wsE5{b1dGj;3VkbQh0t9=L?SP-zh0! z8C>jq#gk9xMU*uF45A0wspV4`=&{s{bRy=yfpd6x6wAvC*m{qlaV$oo97X@7NG zR-|xoO42hs*&ewQN6E~LQq#(S5J=XQE+Q?Tp&IRZF1Yk3AIB`QpD>I8#H|1@vhU$A zX-Lp7QKRo$-lCT>a|XUV`TnWB_KgW)xV{N5uQ`g?t@T*c|KaMwzec{O?jrMQJ&wxy zKC&QqDeh+$ADRcQa5KmGT)FDouGfBaaUxdY4Up-j9WK~*Y}M;nS>Z^)JrvDFYkw76 zYG{X-*LWeGX1ynXn$~6h-b=dIN~(N8zzAjZK3i>X@9$@uE#!7ap^hGc3RV zhg;i=W8}(&kFR(yj&t^RR5l`dkpVKMq0X89>|w1iSMyogeM)N1fstko)q>KzK;f9Z zmzV`ok4*Iu0eBkloDcbmjE;U&8P5{Tsmaf7;~@*;vM`cgBJO7!wJIK;Q4Wvz?d%LA zbey1*BPYGrZQKV%DQnL_sJ(pS5QW!k@}Ynk;^L3DQ6-_@@~2UUwg%{i&bu#czdX)6 zF0v8IPeQBP$Z086c%4ZhtDmW+v#DT1{%94>J^hf2bsROJt)x&4gkeCiZTpL&{R6c5 zvU3P7t_R9^ka?KR)4x0o58B@|5g3m*e6&cLiL$E=G7vl+xc{g>rZ0essw6}X*EeA$ z#qtq*YnYZ6kfdvmb@96Y`Z%byDPof9XZf)=#r=0wROjVDQ2nI|M2<7Bmt8*n6PcR1 zq8Jb9zy#Sj023p(xe)i86QRqGjfg8dY{ar}!!$BL%Xlhev$==v7?`1p#Y^3y@lK&% zn{4klLwN7MZ0r_*@%zr)`s~{a6tDkW3d1|EpCZ}T4l05%Fg_qb{88P0H7)Ktlu{3V zfXUCp@bOVDzep&fx2F<8qs$7SNijf}--~G=YFgd*J5dz@jFZukG8JXslXM+5NLr1t zw|DGqNT0JSAmb#c((VA!&;vo_#Nq<@fjxu>RP?lNMOI3y51IL1f4iuFq`wxZxCLIX z!kEliU*jnsSxwZJf7jtmb~d4yXK^Bnb|S}WQ*$y4!37x^>#E@ebh8sKikh$!%HYh9 zlQEe7fEcnIwfOEH{GkN>C6A$uQSCXr-MW_2hbUMR6^(zF^faO4Qs`fCX?WyHb}vfO zdcIu%W>EkT`?%x_%Du&C;Oh+ee6ufr{RCr-YV~u^xPbitEaeC)aKHj z&=q#=WBQ+xlIXtX)n8}-t;!`~;9lU;Z**eUaWzJLAt!J(VCxg1=sHKp0D%W;4qh=_ z1&MD2iMt9tGwEYu!CmMXJoQ-Bo$d9MTwH5mh^Rk}o^GO{Z{@E^n@D+hdam#J%VA*T z*mx=UUFy#t+{Sm)2M7b5|93roVD6)bC?j_XwltXPb)X9Z15174sDy!3%AYXNXn>rl z@(dfa{3OXfl$wxCY4O}spliDq|2#cqfDbm3#%vA)4p@G+>~5P9+G2}$OJDAtt@MWQ z1%M0p0x%zLv)1kCDad$+M3*h!=gN+=E+N=EVfXrMw_)!tBYzGi4et6Ua|`~6bX=XS z?rlG3|4JJivw~W+#f$Ci4&+Y@9aFC*5~!o3F~CAZoGlyVE7$wk=t^io2$Wy+?!{%5 zl|vFD0QLW(@kVMqPBnksQA~Dsbb$0-9R-o|d zHo{g7GJ|#x#{2vb8MHT$GY%`rED`I~VJWb4r$8~%JBPvo@V3@(IBUtBm{xsa zN)=symN{bx(YkSE0I(J|nDmONrV9Lau!6by4l|~04+lCHn;oNZno0_C1)GPU${U!5 z&Yy>lG7sDnPraT>LJCCVR+iR14_?1|n{4%-XNBvto+`t8TJ$Z_20oQRG4Z~p!pnM( z2R`#af3ZNbhc{Ee)VBl;E!!<>x^ojELUV%_H3|4puaG@l>?RQ4?vC;^E*urEy2jQF zm)$x#O|GblMoAhfu?b~aQWS%#K0MPTCbcx5Jk)fO=0uCD9&)LdaMm0g@gjS}MEOyL|U|?2BgQq4kAFJ_@sE_D1#9ENWrhktDTkt0#JTf+h7H zQ3ns4O_#Cfp#hr&iBHm)bH6jA`J3ZA-)w&+M<8G#Rlh6cpomb#%;W zR!>O4GknVvx(C{dncEzSZ6idTsalhzA3yI1tJXB3L+= zwCwUX&L&yIwTy!)0uqHAZ~VD#>b-;OI$9pz{!(qz-;G7@E%?4dTon5q=?fjgwaUQq z+DiO9UaMvcnx&J#(7$Z$h95*O6Jp4N*yLV&lQ2HPcG*T0@U-3@o%uymcdzxpDp|z2)b%tna<8K`xgDUV+j<(=x`H|XESpSw zj~17h4#Y@ZZ!#r`M`41oOifhfH^WNMF7W*mDHAB6Puv58%kA|#v^mXX2KORL5l{=? zwR*J94U;6lb4rjAVF>hflDHarpU-KjB0kJ;;TtPp|0*6?FyuQHM_q_uh5~tg-MZ$> z;5>bXVF$OmVdr@)=5$`7_c@bc&m_tH9zyT_cuWlhmN7DZWDBlhI3ry(1_qqV*a2kx zxPErpt)jS{pdY@yEqZ(I$SoSg8K~%mwO+pKKg}n5J@oUUe%opbCukP)7u$I=5b~0E zJKnTdeS5K1+v0NPCOWTh~-3|=2|yPv0HV}~6@^C4 z!4=@@M3{qsVwUum%4FypF|I7%>dy}0LEafD3evbPUwD}G>^HZ;Kb*F0i=c1txhH56 zX4+5p^x(!Y%RwcGZpf=5uPpHKC97iVIDb-%Jc3q=C8;kgd9&Z%QAb&ubWGPG%um~O z0qFYI*BnH$@ESBc877`r(8TByf1udi2mDl0#VBcJhV@IoTr^6Bujo(gPEpFn3ZPL= z;_=PAwzzzB;I(W#2ni zI0;+7k3627oK_3?v+@{mypT735}n$FCzK59uQi2Z48-ERveCh0O<4|sWDgoIsA+wJ zP*SVls;lQUbwz)cXa?hhgpsa%X}eA2I=DQ&=9_j26X~`XK>=y%VWMJALEkjze>^lr zT%daWjGk>j+zJU8-0g06dA$tw$}}Qu+HPT^`0G&+}I1*2h_3}YAy)XcU?4cLviwgIEAAi+iIH*9Tf&GgYvaqh7rrvqZ`0I{CAn8&2BH+z=~BGLilH`BCz1xX5H;L_ghCd?+peij9g7XZvb2vgG#D_Id=8!ct!4mA!!&VorF>*onRGgf_%3p&@^*Bq2Up8zg&+ys0PLefKh z4}Rjo%dVaS@IobX|ATi6?zK3_`lY1gUOS;lsJ(~4<62_!R&l2n{`*^CowAmJZ&IC& zICZYc0dTehJBjQ6a{*wfx|`*35LC7IrAE^ySE?-2u9|+~cjq!Lc#Sxv-qhsmUb?hN z;{SRrYqj;*d-HBSF3S^{ibj6BF=11~B@FT%DZ_SuwtZ7@`xmClT>%Kf={^! zHucoXvN_;ypFT3OGKRrHn0mHB^6Nf%?8=bb5*oQ-qE~8&bYrg6H$JJSqX02%9y`P8 z*cLe_CZxzdXZVjeR#VD4K?zGKwMs10I;sqtvY7{&yLNZ5UzP^GM9n zZc63#^O*y{6t4TEvH1C8(@y{SD8<^X=<~_E?r;-V;N6opu)1Ck35-HO`^`OJWmDJd zH8DukU0q|dU1)FRuHO7&YA_;M*buj);V#4e?Ig_>O%hv<{-|HHlL z-(>_}&s;NRc=ezQPchen^-POXV1BLu1#2=AjpaAio&ZQda2N9ju!$;JL*pGj@#{7| zi}uvLXq;HF`ezI~Ul$`0|2=U=dqFJJz8xV!_l;g*ijez%@;vK|7*Wb4WnoFf@j|tW zo(YRQP;j9;H()q^wX}>D7z3U04N5{2)q1&{L6RbXx;!xJ%yRq5O;5HIR=8vg7xuAS z`}{hxvSgQnTv`Y_5}a{=swzZ@Hs{pdN2kC0uT6oe-&tOcw1NQko-9fvp6E3Dj=Cs7 zP+fKtgOn8B^*P~2tMfW@)KozaQ3eYE=B$*05+4fZdpB3+7c4wKJy5h(o?o4Z%4d(# zb8j=VAYzebwyvmXe!-Y%?$<=IOwZCbrJ-UvcR1ZofJ*?)ed02-8{n#NwL$!9uH-8` zi8_L-TqOo$k)a&+k%UYAb0bY^4MTE){4J)XfuM0UgLsq-J{MP%7+9F%-F`89dT}+F z#HIz-s}mCf7i%%c`ndXRp3YoMk6Iv@1!5ct4iL#H!1Y6wmcAnWeLH3HaAWWiIo^3u zwCa8Ttkd~yV1N!_qB_e^kqywv?=FB5IrEJ<1hyfpOEEPvcVcZqkxrtrnpjLsOS*_m~zwE`|4gk zeOmM_>Qv+Z2$^p3vf132@H%9q$h4D&LmngzV;Czh(Dw!^r4bkKFgD6#MfIDFX#*tE z4Udq%m&w-b<;7pG-CpLD+XBSIdI3nU$h0UzKs&V@8(qYa58=6%`2?0sbYF`;8Sl1a zF4gCwnzLm^&cyu!LAnTssgVXYgy;|wV2}uu2@zEYi|V6#`wz1NkjdR+5pG{9-wgY` z@#n_c6OnW~UN0>C!b*6RxA8*nb5Is@l zbY;EGuqc{d&%96Go~O2=23;QLZ{QNjcxrHgGC}AEAIkq~D7^$<*`2M0?v|n0Hr+V= zKI&t_hu$E_)2*0bG_WLWHR`Y(X|;{b;B7iTh+?6(&=KZ!nlQ_|5natnPG!qc2iBDt zHhK_ty({B*_qs885n}c-mSnMOMN<1~OXOMeF+3e=U-S!C*Jmw-N&sQ%G@}NC^nZDP z1!q)}zC{)46z=skm>_l2X#Oyw0H_h`Lk-KsVqnbQMU9XXh7>)CoCXu;J~Q#Jvi27! zXnPy5bIl0%CcvNH*oM+0_9{*91lFi66stfFa~cHCJe(&JN^4-uc&Cs`;DS+tsi7Gs zd7NNHY;_`={*7E1vDU&^eqOtC)1OIg;P$Tkp%3%WfaTDit2T~k-hr+m7Y~fDFMsWXG{%f53OI^=^@$phV z9Y#8wD&mT}W^(aIc0p|-P~w};mpiIhpf@GU15U(Gfg+H2O2jD1^ZkYXIq7yj0fx-h zR*HzsXv+F)d=OpH9U4g3mxwU_*8x$MRhzKtYyv}-g38|$gr59|$ zxb)gU-a_~@vS3H=f&|K+H{a;vOHu?e z^)B0j5|xCa1}tZ{9a^{VTV`j^BEANCKmddQLvAnFzBERdoEF^_-b0?Y=Y{WQ8?~6B z+6d&;BxQ0EEZF{&T7E=z#YV3lB(ooeQV6N6=<95xnXE5n?s28x1)1LcbUBTIlzaja z+FU^o`d^}Eg6QWa()!*Y0uuqil$&8lH?DjRFtP5W#|(`Xy$Z0w&;OjlW)T_~-4a8IBBLl=n`vcvY&f*Xsrn@<02=ffo3+0RWNz%{-2`D)vG#poH9Na<3Xd9kQ4?r5DdocM@{Fesq+Ad zLR26C;_w^gi@TiKspyZMMrd^C8N#JV^=?8hMkXXEo;JGfI|vr?umo@c%2(Z>7dpC< zN)}12OFQ;x26{NT71%+irT>OsDEcI6$PtJ#QHOmQJMQqM5q%axjfYW8bL9uY6_W^p zZvhHdGAaxrx6`O8NQ4VNuu6wklp0ISwFWuV6;0l#Cg_zDTa0q~qmQOs&XCNdR2o*y znr9(xBLXEY528o`r`%Q-tWOg-&s~6uvCxFw=H~#Q&!ok$$X=TP$ig$Ox1v_z;nWaZF!Jew`xZE&z5!ARutG6)duo>Avd2*ql= zOtS0#HemR@Ay?o{qUVN9qi^{{CC%#H+Uhyj$tU&qC>Yu-^DwIj80m{>taCTtjwmvK za0)@h1#`4KA)pwZ$1O=X$}pt7GDtM7iXK$V;~$D$JdI6?w4Il7P>&RL0Rn!87b%p3 zqte#m0FTd>!b=T;lV_bK38%`CrZ!3gBLe10cfpN8)|GD?9%Tremi$b>`GGd1dBIVQ}uJIZrN2Bjcoh5kO z&~7Eoozw+$-Z^Dsnfx$(<}@<@z8=~j?9S@0(W03tQW%-30rKmZlMQ}^?8x{gK zL|V>dy~V!?L71hlsPt)5_w}IYsz=TIxrxxjY`w9XB2!PW*VSaX#&Lj$M|~+Ia+q23 z4sl)CO9{^%p8$fbv&-=8MDz3500L1_rSEq_$c$N4igAQ;u($3not)MO^x;kMft0G- z@Ig zxx1a=;c#W*4SSlHe_0Mwvt+HJ^q=>vmUHLZ_Ws&F6pqFMg%? zE2v}5;AACaHy5Mye;2p{VQkW3B6MhBsdBa!a8${?5@7sb6U3>z4!gNHV6;76As9hQ-t1 zCj$7!G~tV=&nJl(1?Igtqhlt2T}-od${djDo;C@Psc;0B+EHcpg@!~9w4#c}`T-;bNG2e=1_ zWwvJOFYpC_WvHomk*N^e?&5Rtl6;%nDI>mA>eCP?#C^Run?QvDkzQY51U#JO;%O9? zR5AM|VB7bKjDe%RDscn1_SDR`J6g$mSMK=1`Oc)qGVq?g_TuR9!1&^9DIfOzkPxzx zz#Tru(44$Kpk%#YC^qf4lTbp0-4k4iuorn#W$A~SP2f6~N05^pPZCDfP#Q!*=I9%> zMyPK?CgD;&j=YIBmpRHriZD8~{{G9dNpN!Nrr`~1XGPF0!_!qok(3!Ql#>Qa)|3lJ z+)sgv67lku&f&P})*_6jn;gIpyUo$lZAVLsO6DM1gkOdL9Af6}yJpyajVgq(Z!oRC z@X=Lk^`@bn8CFkIdc+UdBgU#0`f8h>)>a?t&9kPX=Ps3HMzK2=^Tje!h5D0rmo+8~3L->WSu)2La_1^yNR5x`@8hTP4f8&pB}z2n z`=6mAAf*MpasIOVz;d+Np!Sz>u98jaI};&3tJ`=P1Pfg32$5n%si4 zgjB~bA+kVL7)e?YOG)v7CEf%CS}Mc2nZHVSFA^i&>VTMv^X_{YtkS63X;dlqlF$OY z$yoP%7LR##^5khHCAs`ztUaIhjv@z0te1WmWliHS;eC}SytsY$RJ<+e1e?fV`U6YT zWpbAFx}K-Pp?(ucEEm8?b%pryxI*BCi;6CBx&HQ&>FxYqg23xRu40vvG6EtA32}t&-76_$8EE>4l2R1vIwQ_v>2-t=MuVs-JvWz}o7aM%^kPkS zl2$%VK`uGB^)u$PyMy6a$TG$~k}(i0%Wm}*=YUk0$hLX~ZGPVm1ot$52P%ra3)B5A z65-VN8-DuFwZgv>TB#rKTO8cdg<*cCEWTG8ifDsQO`q`GysDk2BL-Bcc*cAtIgY6j zX6VBUhH__fm4lqu{VgaWc5W7s5*~Fe(G?qeYD&7(7@HmnAFjqZzvb3)Q3&7$wdUfF zM`|3M0o80$in%kLd(&65n@!}GGo>b*T87U}iYF>9P?%9vcp1hHc0@z=22*vbn`-{O zMn=DG&NjmANdJ3F80YJ(FDbb9aG&AX0J|OUEnLga_VE=q6~L7BhyVhI5qq|cpwyPX zw)&lQ0_1ENUos5r{j3@u-tXIPi;*)m*8kUYlcIut?nkP66dCs6t#a|=4s_#ws5cJq z!6|?2XB3rf_tQ>vv(U%$iY8%Is4Lc}EDh8p?~(0u+#I=p36i$uwAzC?K3OH?%rNZ> z@lA+Rq1N*inb{{bLdK{-GdtY0&1QRa-fTJ;q0r4DxKajE;wq+a#J-rUp1Qoj1&2~f zXLp1?qAMT4KX14a7cykP&Xf3@+!hzZSxo$esV~X|)P}j^!cZ9=%fR_ywXR74Roe#x zis+Hg>U~X3L#2~`D=S8&j8v=PAaQ&s9p%tS#5Oz*0)N;vxo6|37m$&INU!w4$gq?2 z#L-g6_<*D(dk8PiB@a&)spM(C(a*7wU9ffE6TELe4#o{5XM3OAAyp4n%7{Rl_X586 zx2Q#1?|VB6Z{%!iXkA{`)YpGAQ*$RbOc=+86v;H<3KoNt^i-E8t<$n(X!9rLpw!+y zX*Ay$ct+6z@esx)+}FN@_x1JmTe8C;G95cK|QYOnu50#SBL>jBK~+9`IzRj^mpkv80~AJxHk*Z!JYB28-vlf$Ex8G z-@Wy6fT6@EMm0&@BGZDTGYVrb_vZ~N2=fcvJbxeVBA>c21qiU_zPJ?P*b_O3v)@pEPhFhABvC40F?# zob*i#RqmU27yKlL?lZohryz^eTZLIn(|m`0Itt4 zx^n4?Ak)t^CO1WW1;#)*vn%&CyH<6uq*Qw~o>TV>FY&w(csUfRRR?9$S2F7I z@|dQbnSJ=FQ&LB0E~ph)Kj}5XHlg26)HzJxDTxmZNn?!m)SXradl|TlB8Z`5p@%~xba$Yd#!I^Sx8PIceM$K;)_77XN@? z-b*QZz+Az?^6#Vp*k64yDZhk=qO7RE`4vFRm><&b6p^hwxboAvmLS_bzu6nCPQ;R} zzL!SZvE1?0+&;KtuD;Gu90RmR2QXJA%7_4QbL>_GO1h29X|}}*z3yj*6jFMzXieA? za0zl6if~c#rBmp!gY4%Nu?h(6sMsyP)9630rn^3mk88UQ*z@H0b|H7|VZUA@pvc|W zb$@ZZy2?%#Q+b~5G(jDqm-kH_%hXiz^rG2}6M-Zm`31o$IF#3IU~t3-7^g6YaNq&U zAp1SgH(~vSalKmF02dYZgs63k(=$;WDa^31FBVFKN0;G-`YPnVs$Ma!1?h~SnxMs zVZr?;)UYwX?Kh#kk)}#O%%1=_DulGMyoxqJe<5N?=|?dc%Z`5|a^-0|zjrpvqYd&d z-8`1XCYUd`W+6O3u3fx3-%B`ip#4;Lv0s7Z*Y=9$JIXj53Og!}f1CFvMV65Lq-0n# zvaK?uxAJF;*fe96Vz&h;Rr2J|d_{ z>eY@*WITlM&HdX-aM&;_22Z^YCyFg+dU@&Ql0U8g9cmXVk=+&eFQ-UTuWg3Ey@3Vv z6_T_xu^2Dle^B0vG3d$=2}vWm_Ek+~WPnD{>^0!H zKS5?f49LBtVZG;{wSK9;O*H!;e9YzU9lrxzP1yvvuWo*1tbFxTPZY+MEvG^N(BcLb z6+3W9c%?aKP9mT>h;PMEBXc15Np}VvFp8M!OU!bHlnzV6ezQJ&=UZ)f>Ecx#q=yE$ znq+^(ZPe%o%NI>mZp92im$K)%x`Uj&GK91w_H{ZI#~Exm*LIt^Ijx*OZJ@&az%wOG zA%e9=+bzeemZS~`?$_>G9u>;O>wa}J0w4`66GF*>sQxTh>3%YZ>Are~Lsd4|l&vJ8 zD?-XhJjjp`?o%S2#rFz0ZXRrz*?SsFsaNyE>n5hBI|gGb`ord+Mz?^ve0qrCRB%=|V@g8!SA5;) zg@Jt+%xEG*L>() zqKOfqa-BElj-z4aZ&FHx65d`%RjR{?fP6~ohu*7!}IZa;W&fO#GP^XMI&i&HtwJw}CQZ(qzeT)OFs z-5YI>DV5%i_mPp2J>G&-<2((kgf+4ET_jQ|Gc!ji)t=r zT?apBUESYFB;hB>|61P+7>r_y_WOruGtY)ED-*8fV(ANaT%MltS%4Uo#u>M+m>x)F zDDR6!5=4H22#|oj&ps)WirD6VMfUTWox%Lo(G-hx+MmpTZ*@I2$mS zzuo3|xOL%?1)~;R<1$J=H_3-pRAn+Zm=t%Z5RZ&&)bCHGj~J#Sf@7b;pW z0U!Tmw~{sy71b3LC00w_Z-R_}dSe+CHm8OsM9u1Z&Ds1s<5jD@gEg;HFR5A7m@f0i zDS20iG~CBR(Y;nK!e8&E@zLyK)vN>Q9!OVxR+l?7!@E;_wHU3f|3FGtayhLRNZ?-} ziuG85JXwD{&gerVJylg)LjpZ_V%gE~86kA!2fg^KCqW*!=^tq5l2)@pLGot zQyPnGN5cT5q-sk|mYmrQH3zELp{w%kTX7wV+=beFiaj^&pH z%7ib!@O<~z*K&U8#B25xnu{ujcuoH-2`eu4{kO>GeVPQ19o8Qyrz@0gpsB8v(dd&N)r4)5!vd|@dRYShEr-?bnh4gi|Q0|*=mj|f!RJRNoxoQB6{SmBUYk#iDzui zBr>3>1S9)<6IGwV9%(cwW$ldMl{9RNGGiI^)Pp79s!G`J5lDhYg5h~trQyh+@OdE= zG|g%2KvVmAlFQ(P=Hx_)Pb@7r6Y=uG$l_m-K&2RAd1U`IwU3^&P9UDnE&Murfu6Tc zA})QmGC4^qcbZ1O#l#p;oCAW`oo%c}XT5>87N&GH1CFx<+B)h8(mjH=jK}B~r4Lq( zQGT3}L8dD6W-bvCWpM0fIz&eP2*zkITrs04RVXx0Zim#V? zCMYtyuP^+j%5wK4h*+m+A*v@fA50BU-O{D(r1T-GW5{i3ShG&~W$!g^@0f}AzT^jG zPaU+_=9(xK-x@*p;ae#%6k+=0K+FavlvvB@%d;hp!z@y=z62bcfS4(qmO{)b4n}p~ z5yCZAg0(ax3A3(}g+R<%VM@#^X(;%xA9NNKsqIAQ@o+Yfq;Oi}Jj-`>y3w28+uIHl zyqC5x-1MA?b=lfl3SedOebJV!qsVU`j=g~XqHLJs_`snyl>SL$+N^-jVh%g1n51vaXHh{KCsH6+npOzuJU4?8Ql$k$~gE7|yf5r~yn@37R;=!iIcl zF=Gg@!*l?~!mUuoI5Db}AaQ3i-~hLJHy3YQhS=dt$pZ~xDD(h#UhnvgXfemtn`5x& zD!2R8ibPXLL+uDXxGRxobtz*?qbUMn{wf_zfdJ3Qlv{>iCV!a<3PnO%Dj(}MiO|>h z#5zuiK>kjcH$xa}vgew*eB>P5zH%c`38G&zVdjm_#s*v%iK=qMQeTVot#gh31m>ma zl8T2eqT9%67XE4uInSe`8*XlK*FdZr2~(M&fclcAZ8@|WI#fwFDSd1`Da-#l%dK+q zF-cr-^;E(1o5_9dR4Tog|maLi{I?WNx9{v81D>leuJS-@<#(eRoQ~hO^ z;ikTL5E2L-lahlgWJnoMt39T_NGn2Qv0&;u_Rm(h`y6@0gb;}K_W??Ud#H8W{d%_2 zjOU;0WoP53%FF~(q%|J>*YdEo14Weox1-(~lC;>Y;zuB;1{i(41NX$FTFCcf8q0GR z{=hMjBaL0*ghS~0jmZt50#Yy0PmEvEi{J1EO$0N|#%O5=<@I3KF$%vYCXQym<~hlBMxGHt9|L;hd@d{T5u}ySP!P_(nm8$IHi~b))lIV>rs?VfELiO7Lv-)dy z3j>~mJ?4e!bLZ40etKKf0ivk5A|th^`T;R2zzpY3X9_xm0QRdRFt&et3{2UF@F`^j zBpV0XW*?gyOu>13S}{Oq>ENf`W(FF52iPw&clYHAq**0+s*byQ)|kvHy3QA#Di&~hZS zy_%^qNt8}T0$}~MHd9By%XO{N8U%IYu&5Uep6lQxQ z(Sz4Z2H9PD4?-~=w#RgbCf!W8(;RN9|2o`ICuKG}ptT7WrsLOL;^VyS8w`x=^|5gG z?l9q6VDI)H?ylWYauIubm5Jw~hGh3l5M23UTlnV7{eyO=rOrRM(oXXV>tb?`vuY*7 z(|a;)hwDJzX94VMSJKUwg-)Z_BI~Ae^Y_r@!EuKU9%$@|czM~QtA#L2*rW++PU}Y* zeU~?U`U{X2Aq36%SklKxqtW0EL8)Iqvf*TbxJ3{Zb*PNIhFT67%J9u)MoGzo%&RMp zbfv^)+5d4Ts@M=wv+FZq59p=p>oKB@=VL5fz@*}(MS$H2)&6VSF6hyDL2CW~V*beI zVBz2dxL##V_mN0cwt^zBAk^n(h_6kj`$ zZF>iX7}YJ;|DowCgW}+tW^s22?oM!bhu}_dcbDKSuEE_cI0Sch4est5+#Qy?dEWb- zDt=J4@T+%bPEU8A;`C3XURF^IX=7FR$;u@`lG_jInabqQQC2vUFoyb$8(<=@J;>lK2;h$il}hhwdM@ zn7pNOQJSzeR(T`7H9Ll~cQ~HFXQ3Mi~{%=F4uhsi=C4^?L@HQ_g`5Xe#_@_zd46~sUj4x zoc|^1&jNUpb>cI1`LGiEog$x~5d{>qlY0FqmB;^cuK(sILqTvqi_OHMqLyyRMnUJA zDPK$XhYot*O)+K@o~-%G`#kWXg|O)MdbdC1ZrCe2eJiunOIcqRrcW4n=`{6EZv(Q~ z@ws1CF@Md`Aqo=5@JYl)LM}$!{bz^)yPheG+s~IGA^DDbb#^xLA}53jrqyXhoSB8s ziihQQ zCn})5KcPDOfP(;`$*fu*0kO<_)*vyrjoQSOP^{hzse$6#SY?sm;ebQ~GGs&*ghWFj z3An>4ivrP&=T~A3YdSDv0EP0md^QVoIC)5Oq_6}D2JBEYj7Tw2_|Sr{ZxO3#X+eUU z^QL;ogx3FuSP|ckdml*!*<6nEg1|3saAbW7;JuAlU(U72iu-%PYwxkZNuctLznb-+ z9eB*rzPR{*rmD2p5l@nYfZe_5!#(=|z83k1xj+g1BSMuBgO>1uu&}XVRn!wd6B>J5 z67m02EtZLaAN_WvD!TsNh@IfP)hP#R1cHwep>4yqR~AAuFN-}VO z4eXG-xJ)cf%jMuveD`6WPMOjB>h5-Lr1S)KdgmLU33(M|VxdCTEERs!5<^sW-OgIo zh?bBZdl8JT4l6+W)D~#xEUZf{QwXK}<(&BE&O^1qIg#wIFe@u2dXc^p_UoB31<(7F z6u2`n*`MLkiCZ1}F#wo`C)&&rF`{`{ZCb_sw6}=2MnCS*e6}e!h`D`)xJ8PULibwN{rWxs&W_aG zC*Ix6f4(Rk93G0o1ulc`;#obPrkx*Cr`dbYIX&-Rz-)i)R2TwHyvKGb*|GOag+HNz zZJR`mT2zL~; zz|+7=d2k(93xFV%kkLla0*_A-0K;HOf=OhXPXqZe`h{3PlWEF0Y#}5!q%ZohH2*&b zH6*MQyw;v-U&L=4e5844DKa!LtV9QDFtEN*s$zL~QqoUhz!edVl=IPNPenW6cH)S# zs{dHpQi>?g8ha*+~~TPKI%+DD7X-?z!35= z>n7e~mWHJE4nO~i^Yd!TppX!=*{fySqScej6Xi|L?+@k2FIs$y?Hu^Uds|jgw{6YR z4**5VB}&n}^(yGDK!=tEX3zT+sR2cBpH3$M_*e|4xMkBqIgmh9ct_z-?h}m`t2+QS zO-^cAKhxf7ZREF_<$8Q{@WPydi};H%`Y)LX5!M+!rRAe03H;wOAp>x9c-Gyg&I_fv54cMybw$G9zB&y`sH z?#JPu(^su;Le*WjCQR)+0>qvN<>*^*!4UliGMM0=_jNP@$yO{~COSu2V)RsPjVvBcmzCLd9$*W<#$gley&YMOpq{g7af6|$eyLqknN51Vwt0H82nTy z86%QWu$|S#D($@%dt+u_A2xm(N6^5vu*2amAi@In~ zwj2A}RTs~2Ojw0TY!ZVa&nWbA(Z@OIR4fvueZTlVd{3{VRZXHyqL!5OQkTbza*$4R z<~P@|%Y=wwKn2aU;zLL#VE7T{3Ih)G~*h))DB}q zPhW0t7oKE6y1^u^vl8}AdA`kI!xQMSjFMaBAf_ET+zl?o-xb{-fU2Lw;r?{vEzVD% z+wo@}sl;21;r1ZG9yb}E7$Ve9;CNyu&bImb@7#A+*N3E^-%^K7BRbBuU*}PJy_dUr zm1T;*cpp{V7@I{8Hhb6XB>55Ue8&eDb%&uq>k78Stt?|#rkJ^RopU1qL=|8{ZV;o%{S&wWfKa6yQib)9yD3;WJ-s$U2J0}WPQEE(kMkBM44 z`O{C7IxxT|&fcuV+8DKgl(5b0AoHZ>@&4gyb7_6`wO*|q<-haknr-@5RXk9Ro5db6 zB9)7j_`N($YwQ%WR!7#L1!HMjSJ%cC#a(JuNVwVI!{+d|*x#M$Z3I(_l1G+uQcK+g zBWf5A_owgQj59G2N`V0DRjoffsVs{(zR>e7tsx>A)PFABU$f3;Aw}OYEse6uS?uT} zWJ#@l7nj;_yR(JOxKRd4u*s~pnjB4LNRTJU)|jj!$OZaELt{wO&A1}dL6w*nyG#=a zG*_hyI)054zGh4H@(iU+8!>v#ma*Ha%~}ybqBmxELw zk@dl-ttP*G=&^buDJ^r=RrJK!#Ubk32z0e195ylHrkd2#jA{dY5Rh<+4MQ0a+>BES6(-P#=OK!m#T+wXqk=~Kz)&|+7%Pj!r-V#vf_ zyY>_uEVx1a&WsnP*vc&CVM(I8tlK2*L4iU-$F1kT35(&w$Hx~y))VBhA1IZ(7gl5V znY-;a3w>N?{zkmEzK+LfgSE(6-fX@4eDnN4S7$tv_N#(ECI4)Vp81<>MuZ*M;~gQc z*~}9u{`&UY+a@_2X^Nt?a=`PsWwj84SURYj+{k$V#yuht$5`B|#eb_Gn#2({ljQ!8 zCY_o4);FNz_=bFc^;uzaHBXDnJ5lp(f}%G3g9-%~rF+{_c0t1X&Ef3C;iW?D_y32I z9#(3~my@{*)#eDXd;%B?!VoMgSxCBCg^Jb0N8A3RloGAa;Kt@}C~p3#a+UfIw{p7K z^q)6F=%8LW)_lgP-{|2Hj@ZusIy#1egd9K&A!f6%++2h#g^BzjgU7p7laB^bBq2#L zh+m;1lVl}DpR2Nu9>$+D{~hhjrqps8<=l)RDV8=vK0b@U!T%@jUu z{FktRh`0hhqXH4-zD#{RWU>;863YQWg8yYOo3#xcSLE-pZ)4OkLebou2RLSRJB=Bg z_Xo1C?Qdl@)y8X;8I(y8@|9g;$PM6Ve;smaaU~aEs3=pDDT^ud&j#IaWQ!}oy8`U5 zwo_8YlzD!K^cRr3YjUbC&;4n%WA48SDuWg?q94+RhE|t+^(yU(x-<)-@mONzr^&*M zv6B@yko7f)6d=BL#fp&DvN8?&OQW#Yyu5rjDrb9gazcf7HKK?Iwc0iEr=ijHWbS!k zNX?zf6h4z+{p2dj$7*+ujd4w<(kkUR1`HB;NhTB;f^* z92QG#uo#8OXnf8{PTOV3@}Dqthj4~LqTsvlN(|t=9Fr98vB41Fy*2)C{J^^rVW$uX zSlI9e@mwBYivIq`>}4_~B5Yp&vDB4QG{Z5OYj z8e@0(wm{;q*8dh0ZZo_2d;86ODHe8FN zkBqnL>$Rtz-Fj!Z6HjcTHq~B2_5K?|33IY_;@=C>t!2o}Z=E%1S}w?e5$wGhlmlJ& z-!FO<2Su!KnQ+?kXBW4I?#uUiy>>Yg|19(-t497>mrNZ|Fk}d%j*B${Y4L4>+E1|` zFMlhcuA!iv#F^-FIn+d5=svOmfa(^Lj3f!$Z^1k61o8|d14}U}^0|DEwZ()GPHp<~ z<+#(Y-`DZrP(iT+C}X8*6q0;Bm)CS|Umr@VPVQk`!h)U`M>D*{Mc?r%A`(0TRn3kM zRR!A91^Js*zAwuT71jL=Aozj@mhlRcXUsB7(kt@AKm|VUE1qQj@;Ge^Y)wh&Wc9ou ze#`7PXjYumn-1=!ySU0R2d>+zUZw+V}7wy-73t@Z#IBGdN zj@JPthU6QD;tQHO3QMgP&j@(;&tC@jBg8AVU1P%9x!kYHp!rubu}mo5Jh^xX`J+jM zneKpVw$-o7+uxOy!Fn^B&N8^4Lgc;k`oLeJn0Vsywtw&&ex9bWLx{=9d|ixRKAZGW z;vp0=GV3)e3SQplE!%&ceR4S1pgO*8$Z|AZz2&CM0}0oKG(q^<&$_(4H0Uwx`IC0& z64v_)EF=iUYYk;^XKk3X*$$J~|p-y2*2^OTm)27jK@W2SFLZ)wXJukkX&Uk%-EKm72B0?d`*`MBwJ+zuy8e_F9!_?TE z`@347L=jH+fk*8*1iODrncaE(oJwYisG1#L-rP5x9Ib6H@@$I}PKcI0i$aiV8 zxXvjtVkkJ9m@+mu0Povf82soo8ivSXq(z{#R7`uvp~x^5jYLlXV%;SZgYNG1IF-K- z-Yk%XI4=B8k}MrjN}M@zsCS23j7mNjSq}%=w0nuXF<3Rj6uY_68}UQjRDk zMsY<`@TRWEo_h!E#{(NWL3xiF2?80qm>J9|d!D%W<^n(gg^6Gl6g;13s3*-+U1n<) z9sqmd5^P>70n1Ot<2s1>jGS{98OdAm>!-{Xm{2*zVlB{pqMwsm!Vbve_jbxh>~n;i zEF7-vETgmNd1dQ#NpR*pO~h?~_JU~<15|&RK&;8&+;4wl?!Fv<^1W@K*=n?!Wu=?2 zm=s_fIpgXsvEwJ@j0x(`o^WxdO)nXGWCVbcyWj`*eG9EG=H+s9K3B}0dVR+q1tkh+ zKT_A5KLUrO2UytX0(Ep$*H-$W@7Ts+p(9dLu|ZQhU23-PDV(#>pH;e=fZ>v(k8VJ# z_Dx4Ig*UgN@C6pqzz+ZRD@;6_+E%k~xY{$QL0!pE&TV1DQah@yD8Z8rls}q`Y1y^H z-vGK;(JHz%DjTwTdoy7~8N?WPn#{xc`QhV}k# zupJDo6F?6O`;bh9cGAs$hKcv)nZXcRwb;UEolCwRQ8fbLb^CHCybn>vR_7bdY0GJjq!~XoC@_@1 zt=Z~i%Yq>I{_H$anU2(Zt7%BEi)^&ch(t%$sXV_s=9tdc5JI$3dCEXp?#d$hHzU?LAFBgE1nwgr8U+EYdr1TJ zd`$k6ZOT{Ci7-yckBg`K$L0$+*?&+B2g|QN_6I8A=(|4-MWr%OVnobsE-KCJyO8`L zg8k7@RT9>0rKCw>ZGI;5e_DW5UQys(njs0!8DbB|~&yJIXlSEMA=u``_K|Z3vsok0J>Ybyi;e5#Y{+@CryxsayXVjF@)dLV5bhLM`ykyBz9N1J#i?OS#@{JY9VE!7|lIEB< zo?RdnqW4tKY8jWD-cgME2LPh?RH7R6v7|n z@g@Bg$-Zn>ba&W{9l4l7I*pR2>=Pmnz#2$J#e~3>xr+8EOHV877# zRPeS@j?ye^PoO|;h5wU{J$(qb2Gu2x7U3T}Cri2n;?@mxN0OMkVk{SUB1@5$Ib!3*K`44{{4J@G-R>U1(zt~B(9eD+)`R-$XkHgZQK4-hu2PD zIQuw^WMJQdNLw3khIw%CTkv>^rg}6_sR}2yq@z+7q?`SyJ6YOjc|0f0s<$dK9!=H{0ifN zffhPC!|H0A-J9?w6kDy%2|#KJf0@`sEtkrruKIRi)nf(%!z4k7snj;$75hy zNRZ5Nhuo0?+m)}QUVbg?YeZuUX=s?PG<9o`{F4P4XO5L4s&7*Y98{|H9x}`*Jsov? zlDNz&<+(&Q=b6XN9{t&@+eN_JbqA6U(|&vb{}v+XQc_V7rX^cEBR^W~AjZ|>>&7_UbA!@X|0A+gafAqt3{{2U zl``dqDsD@^<+<;Ti+jVr?~K@gImzpyZ9JJ@#|5*j@TJUrT02=^mE%b&wNV%c&ij_R z#{$0LDAn|@_(PoeDhGFSgXy|~0Pz!ej6o<^np|lQcYlLY*VI00m%NL3Ryi3-_2zTj z`s-U3U-lSq#j-zyE!X?LTVA3s4tQqacW=lIdUty`uG@oR+5ZKRVr-iQ$)S^sQ|q&r zLdkh#^T|9FSqYkB15}y&z`b$lNJV68pFb{orYi41AGj&}Y{!$vqi6O#?F&}qbS16s zK8=jVy_p$^@RYdAXUt`ZajmTca9QIWEX~^We@Nii zNz>Lo0gyk#5@aI3$ztL0idl7Z0ABsp=jUIF)O1i#NR)=Ny$0f#TK`7-cbv25#lsC% zUo^d+`d{e^8aTAqT7PUpN_l@SjyrbvucwY(eO@l3hBJz9LfvYVQvs`-FYc~7*S+1@WC|LfllzZ3X&+xl=k&2o zh%KP%SFkTb%`mM0T0!^(lD0E}s(Eylfv5msNn3aBNUk?#vC&NdF9ih;R;w$rcoJQL zh|hDNYufs+^6r?bEA=_8ZCOV{2+WB54krMI9f2}eb1~XU`~zex1?p5l8u`Z-^#*ru z{jrA2i{&&GH}`X(g`ZNcP;4o&zNm{SEOaPucoSg?=-vdA0T^@51sr^D=Wk!>vZrY{ znj|AuB2}hM5#ndHQUW#gLbmW+3xZqA1)$|%{H zccyb`4Dscat>qDQ|DU%a@kPaK9ku(^TQV=_OgFdTn#;AfIbCK-m83OxU*FhX8)Z+NuU#HzJ9gQ0SB`*I^Rqkyf2<40lSQEt-Wk*T|~j0qN+;p-u=N1 zQDIZJ2{_xaM--Ey$moxCIvZ)-`Eu%V)&9PjdU$;7yiC;7*KFUv%MxZBeT~SI{?WM% ztm!)X{ltNss%o)>Cl8ASnloutL&fsN`84UMJT`9#jxC%)<0&oqrhOJ?#uG&g{WCp* zGuuj7JpPZBkf>c?fAHOhBp(c^KBTz`)F9lf5iM6Q@uNMRwXqq21d4wt0~Hp(-Tb?` zztT9QA|0rB3()bu>2C8}RK5szyl1+wAmu2WJzbw=eRjXv9%JWt&ntNNsT(I17$54l ztR880^>iFMeqNnzcMl6&=%If;4lqx&-EpICR~-2OqmZvQI!5RiLA4xLY3^{yS^a^Z zUgMreb6{6`_b1c{81lHI;qf@h(`Fqg#`LLuEp>cgHyyBEA{b4qDPe7muFXq^Bu+yt zH?z4YW$#7-B7IyN-P8={C#WWXaLLyjOKgX1jYm*b7+&5N21 zAofVDvNFe+UJr~RD9qSe8~Tf|&A|&j>dGw|Mk0JaX zdd`igoXa9S2X2QN9CIBwQX1jBa>V1pHdp+LGtcvrlwVj;)45rA@j`Z}>D9)W*iDO* z=W99&y0+XOyHK+8=mx?D3gUEG$zn#OQlqFdVRCUH^u@Kw$d9Ax;AD0nZpZVaoV)Fv zJ&ILt7;uUYasAd6ji)&{Rkeu4G$nX`eE9=UKAj^I)Ck(!y;r;3Xw)n<%nIN{$W(vy zT_;f%E}7{?48^k~ZaFBoBp^l5$)fnjvpHte@W}}tDMqXWIzy5epw?n?-f_4C|14+iBM+1AknH$f zc!Q9BWOrw0C;sK+>RgXt6#Mh!2Fg(-vP~5;bCePysE_PD;VK*|NFCFX)_G=UdqCHi zZJq<;&5k$3TAS8Haw09LV17cdDugV-v!91sprep_e-g( z&Lrx2T>n#RExGAwF3aI{Qz}DK1-!uefyB@FW-)O4^L1CZ$915182*mBoO%2DWd8DF z!1Rf7;;d(-`N3g?eW-7j)N41C#ul5QyEkIgnWunX9-?@2QYTi1j@eTDb;0x5vM2X+GV~14&PpEd}Pr zk56b97p8VHLZwPfyWJ@r@JDU&y*!&EScUYdSiRVFLC3&tG4mD|A zx-ED2cNK7uGX{F zWmQ-K7+Fgf2j_Q+lo`^*Ti7ORSw@#KUj&}wzPL8Kfv7Y^i>Vw10b&yD3sTi(k!YUQ zKBK_Ks5)s$#9wG%1xsjcHmdKwzR_d1m^EjTw4vKGaQNP1?@Dy) z0udfM@C1-f%k|&wY)=Y}PLb+mzfo`s7RnV3z@gB#A4K1c$>p{-+}6o;d-bQxTQWpY zSt?~7JO}}q<^M`v1Zy2bxaZB6G(#7rhGRuh?nd-O4c*Pr0e?W?@M~%a z^?e$_vfxd4-5qn*$`&@i_^Li;ay_DIWa@cRrUrdzb6;Xalfqfv29fo{d03Zosg8#e z=@E)r`|P@Ej25ly)fgxWbsZ3gXs$|T?A4H6 z(U6V4_6*W+P<*@ub}zl@;(sLy?Csm#4+m494PxH(8D72n+>f-KrcOT8q)&B3k9+@k zkt*ugr)SXjp0U3@cfRx^Gxu&aBy|&PFEBdmo1j(;u+sksU-x+HUUj)5$?d#qFa##^ z+#Hn4{v4lf{m^_8Mx%X;qyL@zBAKHWf`S4&vX+)t@uNCuAYl+h=#zoERfk9Ai*5tz z_UVbH0e5u^n*cqZkz&JlHj+>&Or4c}JMK`O?arfBqC#xH{xpu4JOu&|&49f``n32I zqTYHt`FV0?<}A5tEu?0nv(zz6#<;6gykoy(eqF=Y2mGD%%nLmo@6hF7;7hA{9874u znPrOnOQy$?IkQyZ7&*@ZcKrm@%_B8h(0hE^Nudj#H1&-&p9~@bGB=I4%L*^rR8fO* zx+qhC1um`wcfW=-nU&S$-UD|Fi=Q6rP$)00E;=`(iOe0OB|cjcwF2_Rf=0{C)`koZ z21Tl}mNZ8kPRp{04I8Ja;pz%Ta*p+OF<&4A!~CH9U@Zo<1sgoqv$z37o9Mf?0a6QM zzRY;?tvnou)4Y)P<&h+ z1bYGKG{cS%-n)|6pQN~0aK!DO(D=4ln3*%Fi;mt0BMGs?3hP^bWSoMNgT;Q9~jPCOg;Pp(2IbN85>j=u)6HFB}mg!;iU@`iR3Aj&ni zfj8ifMo5+QDT)11=5o4c&6M=^DSDRL*|ee0MI!`G9fE%RJ9k`e?wp%y4VKH>*>g@# z&nskL-+4X}{du0$N_`Jc{drMaMs^;)=nfV>2|pP*0_J04Y=M5#NvYoWS)Vh%&>#Z>D`OFj(J0BHnj;y6dk?KA$(E8kjnq z{~V1tIyyzp{bO@h`ar1Xv~0y}%*xGm2T?|@Ql!70JF2KUlAL6{T1&dACbDuqzn zi!p%odyKCGfDgwV1ae6+->$Jbs>RwS|-X(k{;o@+)*SX@yTmD;6n?;fIkv!^5b z?J&tO{Ua9$)#gR^;|C<@o5kXFnm%Aq-CQ*~iO70Ygpdn3=L9V|%Ql*_P8uvQ;;xeV z{X?FD$L?#{bpmkh&`U#t7EXg5V8r{N`;_67NTZelp^Ob7^uuF4voYe*Oj=;sQzJ<| z_2X_!HM#2@_8q8m{jgUHM}9FN+NOJgTCB#7noRu!&t%a;lW)ymf+qe<;g5;DJpbpU zyt9P%_ra!yV_)DYriH-$+vl6{qQXdTuh(S}ruYzM32=tvrC|Gvsr7x0Dx1Y0e@zHN zR9}G|b-O1yEE81qAJWda1#kDIb@!>k+AF*VX3o^-{3DkP*qT-6l^TYy~8CE?n$uwl+= zH~TvWWUme|e1F_7@jE7HsZMYFJ1m((Pnh5P5B*xAd}%u?AG@gG zPtBoOwjM~X3srIMOPzu<1|4-hh1NKm--99D+!x1$nUx0nw`D0OHbKZgDwi@Wso{=Z zpcIRbq#d2!-K)S>V|5`{bxORP>M|e3`}8LNMTBX|cjD7>ILq834?qfFB1^VUl;4TT zI-(IYrO9*5`m>M?pqu5$SrLh5sEL}V#$u1J1q&qO#6pmxi!925-eO=NC62+oypS|0 zo!Aa3D6UQw%xX5ukU?q*w6Jo0xCha-@*May7MT)>GD24MWFXm8nrIO-1QW?>p%nV) z^w9oYP&GwLP9{MfF_h*>_;f7I&&T_@?N!O5mbAHkhHlT7jE(m$TV8XZy0;FXmNDy{ z)$0Ju9CP$>AKugHZKL(wq5f7pIhMJ=9^?X%( zr0Nr}{TuE=(^1>&8UkEI&h$#RW$U4<08=TWTrMN>6?o&@=1>Fv> z3C8hCK2(?Gu01UBn%}w8XF*@s3%+a$`pT#Cz{HI}7fnb)ijwRP#}zabX2m|{vW^{Q zYN!hU0J;}z)UiKglgpD7|6u!VlhmCH)aaV3Cn%QH!WJ8mRs!5MIVZVHy;fvNslxb0 z<}{Km-d>i68p_U2j}IAR^t7}x@v$_y_B(| z!@OIC#j+_RMo@ZrX{*Z<%ZZ5rJW1J|KDtAHVQIIKoj!8S;mGWb{}C$|8&Ayn?Z*{ z#^EJq)+Xi#ALw<&HGAe7s;wnL4Kz; z1a!#w@+hHbU93oIyXCZdLuMrY+Fcp?-xahtQZp)C`|J4#LEhmXy*o1185Om73L;4ONA(T4^Jm7ulXCoxsK8+z0G&{K6 z(0)u4pqYp2bjJzT-!$rWid|rBNbC;=Rr093oiaK5u2C&=IhIyxsQs!|s`! z=ALoIc58XQ`SR!egR3AqipMfo#K)RSpt7@pA~3_Rre)*oMyS=p@sKgam)|>E6*N$F zp3}^@JX%42*Fa-iE*XPZ%2Nw z%OC^_8s^anZ8b#h%5^S7`iz(6qbj)8TgxvI@7gcgn2L9jmd7LIm5tdQ|Fwz20U2&r zA0y4~_YU(UCg6DsMqSYQmUc^n9$1<|9j^ZjEbT;*jGr+|nn4?`XU2u@Z>2i%K;4qu zr=hD$pWSI&9`Ew-qOYU5R4ilqI*Dy+?;)l#>Z4|lAxx=)I;YNn${(AUr06H#3Me>n z928VE(j{lE`kJxuP130dwVDg0TX|Mo_)MEIs7&i3q~p`kc$n91`naklR%_tU zNSkNF!o%XC&M3ZuyH5^P@O@=-5CsWPkO{b|#6T;E;@*8{R%?(oqH?OFr8Mm#tA(}6 ze!14x@z;l7!`5@A(5I?)1UYiF{gWA3h)d|QsiraH#$ahc<(VSXVTMu%JZ z@5rcjYcUm0SlXK^Is{pN2z!P0g4N5TK^7d5m==s?o%0_NR4;7;i(3j6zD9+|Qhf#P z)3KNS8=J%n4+X&X3n>{=9?o<@hdETvzO+sQ%|3HYW{b<9NOW|lV2HlpCqX4&H#NQa z`@;u<+~*q+z{R&xosVNtII`>t5JR(bJ-c`Nvz+f+ca`oKn|+{t=^BQraYf_zI{Y8x z%3_1|=G<_DOCeRcr#4nz#N<^ZW`=&7OTGpzM{^IF^z7Mgp#4h)yr} zW)J9Sa{1Pu92mzu1^#HuDJG%<4@2bwK82FmAtc^10e;;odXAq!ZdBm3rbDY(o{&rS z>mGMC&qc;as_=2n3I4_O7^mGj<=p!B29KJzxTAuC?d8hWWps&uiY6g)!i1gYzG|OS zpn1}f-(wc&neA@p&8a^iE3^w7jPD8;<-AxQl_oL*^!HMugKf5pf*OC15q6L2Ls~d! zn!I;=58<`%CFZ-gaH-kJLv!DWB&eb@1bWlqjWY>+ROj{nGBG!suXByYj~HF1`_wXq zpuL5P(Tb!cMuf%TF_B~yesFwWoLSwFHFPA|Qij_+?Bl=$=bMI6fU*tuZg>uhq2)8UBfM+AJ>`D0x-xgt>n1(0 z9Ma8N_1=;>IE0!lE@ENM@_$*7QD5??^*eO8kS7fGpUK-5Tu(vJUmm3&CALQM0YlO^ z-56BiSZHK*?@t(uEgWSYHNFfg?|gp$x|X?KR#jc%x`8`UlyYN%tLM?W4Hi&h9j};Y zzWx}`lgK4P>|j?(0OPjEdGG2vLpNMM6}vy_QRk-crN*IxoWlX4aD2?F+FFDTk(J?W z?U!=V+!a-MBRGB#)BHizmVx4vHxEB^+_5f3LHpCD+I@}H+9tRwVayn*|5$n7`3<7~ zufDV{gTkG9+f){hzQzxzpy5{y;&w+mHvmCWdr3{%_Vb_;3?CtgH~DvVKW37J4F8f( zD~GAeCJa*M$p0uaCljFq^lF?d%XXT7OHy)o=c)$phi&18j2r2y{@rW?kn>&CIX>m* zA)MZzjG6{6&s#EPf6SCt>#6DqnR96Kf}21(XX5h@%g}+!>hEQPO$MO*^t@90M^2vZ z=fpOwkY1=onX-n{DB>m9!BMDm=GQZEH#kv_F5jog_A}d@r;VGH&1K&ga@Nm5Yb-2_ znCZ#M0+1Naj9fV`FcHmbL{U0E=BgC z-g0*0N54(Ht{f%wEHR%3%AMr3Duc zp(fH@($EVBN?I&{RPpBT0Q>n3=I_NR`P^nyhBO+&E6>Zs>O{JxVt>6#czl2iUFiD7 z-r&3io4+xy&?fc9+L(wX4JZr3|AO~@rvm4$sbXrk@kNa;mlJ%_)@Z$aqfrdA)h#A% z%QGB!tz2YfY(UKIcZBqlM*CyfLVjML%+z~3>sw#+D&}fe1&UXQ4}3C2-1KB}u{5~X2t^_RC1+M*;s}A%9316jq35b%ok5I#C1}e{9Ooa3 zmX`ZJP;^Ma$OIUX7x_u7f3JPiyF3sP#=4X^-o-F}eO_-e?5y=%yJw|cFR3Vuv*J)R z@cX%^@>1z(9{l`fnCscv*04(-ZVIL^T~S)sEVKF;_!f(>(orhf)@8CBet`|K(B-^L z(&Dh@G8Fv8^quHJFdAP!V0Z51^qhh)HZd)4sI-PR9Q5vr{}fXA)KTy%6yLvlfsZuE zbg+*KnEx%@jm39zw#|Uz<*@$z7%Kzn{LU!A094#a+SdEuRK0A?j#WaNrH7kr7w^pe zjw5pbp|PJ3##q$jjCw=u)ahJXQU=m{cYhm^17_?Hb)S)g zWeQzX;4xWQSjZP=uF?JIC^0!v8#tMDKO$e|X_V8`Bw79r9J}nZxh7L5gej7)$MNq_ zC2-8Muc87&7{;mT`A4&%)o8y?9Tp#J7!RA8#W5dLs#&rE$%~G5eJmV% zslE~jx^$9?em{9>K+25qGb?MG{HC^)^K3gdUYy2w4NseVMWj?OF&LF#@fTbg*{tw9LJe`2`eKI_} zQ4Y>8?nhl%bhA*RUmwuL_kyv4Lh8Mm8nOuE!e8=tCcG|xd`4CL<$<)omBn%Q{(}Mze-1+QyP6(%eE;{4VmaX35`oK`_W*_J+FEl#El--^ z`~5We4l=O&f+fe&a=BMl*Cnc8Z{uTXzMjEV{J2QXLbag<=n@flW@w}1{}kZj@eg=} z+W&xux!CeLg`+cZ>PVevamerJcpTy1DMs0;Bq6E-8aA8KBO`CD#B!+bHw@)_u5It0 zf083m=lB=ONx#7JXAE9oWP6GI^xU8xFHMjy!G~vRnQZjx3i*LaO8^pIR9Q#=LEO3P zsD&jj3xf%%Holnu#3)*bji1RVe4%yrqGcu-AHvC=*pqbOxm(cAcE3eZ)Yt0kUrnNA zW-Q{sGV*c2Hm!%mdiFH~4T!Mp9R@`(#=d^2FQKcR8!%ziH!ocjFg9J8Va9)J<6r|u z_6yqDqAt6osY4SNI2d$~`z6`YQ%#N^bt(s}SQwx@KO92h2ThOA=^b_H-ocr_u+!|Y zA+@h{fENDj?fI6m;;URui%p&N_g|JOeX_z%`4VqUU0T)lkbC>|UaFE(#3 zhPwcl_T}Z}yW$8?AbO32dBd;H>ipRRBLea*FC$gbSOtaG>!tXGt=a|GVpX%}CET2I zQK4qj`E2_+f7&^qNZHWMhz5n%vQOQ;mT z;EFLtpP*a*sQ72Wk_rIn(R<3e50$!S5-VRd1gtMNTfO;}KK8$mC;W|9j%T5x9Xm{{ zNCUZ{JUMtE(O=D1L$`s_ArKyoL$!8idgfVhWIVQ_aPvX&h7@>d<)S+9tD(*oISUci z2+38~0N0X~0}+N;8|$H;Plbpqi?u>4wHYS}LzJ6xUV|nc_L#&ih&9W>sl@MT0c2DL z1Ehc56Aqn|&hAvvu2l(d*}3=!SI*I({g{QsKSioo)|>x~q5Q(*OD+D1Ja}>*XH=qw zxOo4Fc|szRN%0nwiKW%7;PEL!jf@^(?3vDOkCo3LoU(4CQZ|4u^UH3i$lA25+~z=9 z=hvEuyB{{exVV+7P}N#qz#qrQ^MMe9NHefn@uA zY|__O!(Mh_k)z_FqJ^sGZqe}DmQLGEgdp>$1$sE^g%T*4AhmewO~9Uj%x=7m{-5bV z2%k{$@%h_B*Xx4nRQtIumCd>RnWkeNX~@Ce`1CN&H3VJ5X8)c5Q=1LEKw~t~y6x0G z{C=7_j^Eqc;xusEJJ#qlpVCw?%yk+|;tw)jG?Uxxw)x(Z%$`i3JOPb$yNRn;NZohe zg>!^GXKQ(e(f-Sm5eM6$sx!}G8Nw_`lGm7!JtCa zB+=$QSEFgxp9F;}*WX3z_x&>v1J~piEc;T&4c3~1sph3=6$2W?^Oj0x4+L2mS_YBk z#6TIxpyV4Tmhox2Qu*T?#uQh#r`o;ZWw=nWkhg*R$9ofP?7JhyqjPo(_BuN(uQt&l zv=vzuuI}{20>WIcU3(jw%++=W_CBNdNM3eP=`~%xzgA~OwUl|4*}V15>zh)f zxcxZNQW)oIMc*| z?hb<$_u}rw-Jv)|i@Oyo?(RA`#ogTvb>VNuyG!eK{{9W0%TIju9$E6Hspn0RppurB3hN<&46D%OHQDW+KK)>Xr zg17$M%jcXu4}?U$zrCn~R$Bwf$uTX7;<#4S=nQcjdohLa5NJuqNX zq;>wu*ylrSy;V&)qgtAR9)VT?zB0x9uu6yt1ma_(3R@%MRC@keT^kEi*G=QH;xLiI zGSt5Cw?`VSg2a~9UJb>et1eZGBXG$1v33F{5 z6cFK`SO;+k$OV+HNpu$skr~T$tzFAY(m{V7{QT8io85?yOX825Dx-cn5vzY3g*t=;N0b+i<A=;g*jS8Ad57t&37=w0)3$o%YE_`?M*08fX+~AFH z8r< z6Tr6`t|$cL*f|$dYmVRVtb5O)A?H1?Hq7Z1w$@V8RA_bKtTR2VVVO|#6jqgQ=@_<- zXpj-64e~$N{eBR?osuTpSHVcWE_da0eTVc}%!@}j9J9b>*p=~Q zdX}v&Z^$bz8NQxJWSz;Y_0Jq~@cw1jBs6^6rxY)rs(VMY(({QFI$3JCcHj;3`;o~) zjbs~=vV~A6OBjs+Z^j}VY#T0dhL9D8GC&lQ8nCgKzW8l;W!;DNphACeFEtBv@xEZ= z32HMKD`(aon=*8_Y0u#(2HFUKc4nd$9OumrRO$9`*Zc#h8||sBxk^*U)W*#Cyd!sS zv_k^GXy8sNQI9G70Iu?(C*r%=!801c2+gmk+4@eU*es||RH<)8$#}=wvnXiI=P$2G ziw}cM`aNSzd|V>AN&DTy&>Qd13a5U?2B-X!gaxRpuUFT*mmT-@mfB#K0Zo{o3STBJ zMO?KNx|mzbJ{ElUH2xbK3I1nfZIPSWI(+@6`s1~aQTXME+|mRG=aecHborQK)Or1| zA=@bM+CMbOSoQbX`280gmv2kwN#2^j+m8S0_l*hR_Bbi>e23f&73u6Xe(9%UVV~3? z;^lkV4Mc~g#NJwllTagectzsk?|qB*yD=B&!A6S*M9nWXW@6n9U2ZUGwg{GHn77C- zH{}jp2^W4RUm6_<*W90S>#}mNUkjqpO>F+4T@+6BuzK<3kItm)h;@7#E>e4@7r0RpC)_%+)JMqo^!y zvZGVZ^xx7x#V0b^--H$`e=2TP88xYe!87VrYw2k-a3&3POBs3{;;tMxk;qzAI60^= zh}g+q{hJ5TD>1D(>U?&>w0o(R=E9d-mqeX>EsHMsJ!o*e*jFB-2p%$yo;!2wZ$Ah3 znh$E5`>E+xg5;cy>uYz(*KyL2?w=^^vsejQ7==)~vkXU3_pAfIOvX?qq%p^7Zzfio z&Y9~5-lv7XhujDW@7;GC*`?mpMlFElPDe+VOb7orDz~%0*xrHeFT=jV&mLyhD}whf z|8S z?h9d_`!ZvPjWzu0u5(HM&a~yHiJy!y^i@@h^B>J;Lrot)b1vXr2tITE&Y&tO5yq0P z<3@3K-QbGq20H?baWHhr5{&fTi@`@vAa`d}p!vhbxv{mx(%&S2=f++ScFa zB21p@uFP!F=db`|ag^5{6+DgosZfql&u?3i+r&i7TO?UF4*Kii5mtb8CV7`sB)ub7yG(|5`f3f;yB%p8B^?c)zh3%})QC65v`Ap}|*e|Mu z99jhcUZ^EuBP#5u0})(*kZ>)qdjH#*mGEnn@wQI+SJ0|X{X&?EbgVOz)`T5*Y8nmq zaG@`x^fq6;^_dBvFJwtaA}@Z=wVE$gkI!}7J1(E9^W@LNCK5oDZb$ecQ5+yDt-19p zY=k-(El7se9FJ6vFKYKDO=BU9l^O}99;GA?ms+hC5SSZ(O@rmE_jG*ox640My6M#X zrg$P`f=cjBfA<W6ZGeD zSQqG&C^KMIQc69u)JnOtZQpt8`uMKY=Kl^dc+a5E@!1f%zf27a&wTJZtr8XL>0zwY z*E_NvSMtY+AsLr5L!vAA;9P3CR$sKUJ$=T6Yl07;tdI@kc9GC~@U*jtFwc z6fVAgtNsW8o4v>U0sFk`V0r-1d_R#&oT_|T+@wG9(CLb}(sbS-V3w)GxN_-Dyw-7b zLA31&z%(5m*QPHcg^0SaAnrd!UQeKV#H)_4-tLLfe?8U;V^A@A5`0Qppx$ouzwoz7+w_szNvG zra}6O0jW7y$pE!vZ_hxPO%9)99LO(=zEGh%IDCo2-*_r|q+vzDau(K(7RI`y7xvJ# z!>rl4{ zyX>zj?ouh%ni(9E(h#Nzi8`O9Px#+lQQ%PI*=pUvp2=X)5U(c`ypT=fYvb-=RyEjAU)oNe_ut*@+)(28b?`aaYd_s?Xg>d` z`lJ`IscX;`p}+Dln7y;k`Mf#7C1Ut56;O{{rZAegVKR()HKt=(N$3chNp%-17{o3~ z_`I&o$&C%hEK(9AM{thc{h6Lb9jmRtPDe)1%+|q$S?p9r3K7il-#nL2?Y;^O3hc?& zkm_l2FnZZ}sgl`a%lYO!0VmwJ7sf2K7!7%3F=LYsyT#|YU&}$IhU1Ep;3U9JvSX#j z5O+p_Xh<JHBlz3)^l^m~g` z8F}~u^}CF-ndN>bu!2*$ZL7xi0_ebak3SC2v=R-m=-O=B$16{iomc&9XU`^8xstPN zF5NJ3U9Am_$t}aw+zCYLv<{>~@!J z=+61mk7V=WY187*Gx7=K6L~Rt=z|inSfnu6-~ObZDMeo<>Jp3ChzsRVW;i6<{8q=G zvr%~M9&#q^uBSr~^b{jhAmT7rg zd|x(ef0cj;f(nm=2IyVfPfOcBOPE=|=-<~{{Ie4HR}$;9JU>XITRdLNFvdsum!#)t zOzr&!pWE?_AJ_KYXDg7OSU&`Oo}RwXoXv7-8@@$*`0xOg5u*GIKC zA4@Tyd2@Jset1?eVVaT+xt?k!S94LT%xp0{M!(m=MiR49Ug^v+BFx8sGRtUm6bg(4zf!wQX4Jjj-4$Z0<=6pcU@m#1fubMRkiu7lrof?FmD z)%rF0@U7((*-bOEVn!U_@M?agYe{W+(n+P15k-WtUm&ofP&&;eE>U28c37Ib&8N`Tt zEp$7`a@RPWt^-HTqZ(1jF*U!-h6_TEzPA5Z7QEC+AIWi|`kNG=H${P=VQDyb#~ZNo z;Y{~$r`-nD@|bIJ(NhaHhZw*l`peCpDF+Q4EwWq#t0kj$?XY-wpCK6%lbDDSYoYQD zjVpDgBksCP;S>^6`OL4Z%@X(9sf_QqQTUjl!RaT=B+!t3^@<)Mi##m9%$DdE{}}H< zvMqf|ZvT@(sg{3uc2cM|%F4#pvsEKo^--;`>R4{HxBX3n@!TkvTWJtWV)T!lh%r#4MdCCM7} z!;if&SSNjKT1pk`;|8ibDVfHpK=Qqxe$Yziy5luVq|WM96qSQBLuQ|8LK77YHcNow zVq^WLh}6!x(JWp+Px#&zJNMX_+D+Hs*#J5aL4+$|y13A&?~fSC5rpo4XEXlKl=)Gt zc_mJvUY(um4*r*|?`tbuS*}M|iwxjGQ@m28L!v2+f#955LS7jIbrEHRL3JMZeo6MN2SWIVxCRmKT8YioKF);aV^sbf>kIqj#Mie?( zlsQZ|yBwKAMSxcogD%AyB^E~9HVce>H+s(3x(RKPK2JjT1{if5!4C`CXnc2 zB+G$}oa2t5*b;rE$Iq=pv#jn=8J}l080}5KVD-6}BrlpDT zp$}cf$FA7-Qla(spb|*%SL%?gJRHCW;!l-Mva#_`44)D+LHwdL+w)Y=Ge zi)&iMN_B+I!0)BuuBLPEec_iT#E3zzYPOtx5%QVr>m7f+mCJcMZ5HeWKM6AvmyF>A zYcjFVnRh|8e<}{p>;1VCoGuyA+TX#UmzV16)R=m8R|t*QGX*3>$i$Bf`{pdEf>;f_ z0xTUq8R>0LbkI+v`^Q|dXg+`p3xc$W1(T7|ytqtuqhu{>{OCZ1kb5NKJZ7BQb;Zdj zc_B$Ghf+VMeMykNxiGW;9pAGT|Fn)t{ZmousjRVN{IzziZ9q>CQE`cRT6PtSlV#Yo zZH#roCf1Ff&lBVqhEtR2nfFA!r}xx?dGbwO0ph9UT>X&*b;Qpq=tJ;jE+Tc)bc-Ax zcxPh{SD1^Nv1p~#)sH!w9h4EqSG6#DUh|TLbw}7FGM@x}i@=dm-lovv|9S!7sG8sL zxtrJluWeGq?N5ox5kn45CG2BhOz{s^G_(xPj^Yf2A*0}P3!T)8cYTaFU^WWh_Ze)| znhdSr#au>uHOS|i6ry?f1>^w9DFIt#6aZ4z!OdZf0Few0Q?XCk2YS*zt&`cn z10fBqU(xDR6K_!&jhAq3hWGhdVCxlGmcM3YN%Ga!sbrrK;OI4L0G{wZ%W)8XT=V;1 zrd_WdEF8{+`(_M`d26+wh; zn&PIelOycED;?h)IT>zbxcqdxbVilCr+FV1c>af3Gl~3js+$?d@_~lX5 zi17uTucJJ}wrSNe3!+gxJU+3su(3n}*9CMMH+9lv zESb$Cw|dn8?4~~ou2Icjb~P= zIJFRv|Femg)7lV@B;VO55S@(U9lzhhD!>10m(Wth{I`wL#dfK>uoJ$=>^L+OF@#=o zsLI59-$GGpykJo)1$64iY$dugj8OO)XKl|gbE z+E@8!IP9&G8xl^zU_{FWo4IlaG~V|z3?65_ zPk%Ooz2$C+B=F9(nD4sm1E*uNssC%iN%cM?Ott@P`H1Ok<=Wr zy#QK5re;IVR4~<2CLd|bCrP*G^if>d+@P%Hj0%ZOuJeLJP zv5gnA6m07=W#XV`7>;x#>`t57X-ybvoWi51cofz(h?AhT)ru0TlJc}?X<{3&nU*~j zyKYs@p`4T(BT65$;3b4cvY+~VU_SL~=EWb);y*8B;C3jRdQ*7;Wyhk^MIs70?KMJ< z3%${vM%{=U-g&XM#>8q01^wR`mU2fnZL8rza&w#>ikO9;J#e#rdA{NKGTdmFQ<_3= zF<)+`2O7H5%V){gs4mC{u$-xg*Jg?4t}MN!(?rOWsJgg)ku8}WA5Til%-qc8cgPc9 zm(2SsJLx29sS>D!IWR7-boH0~ft{7BcLvL1W{Eu{(gZCb_WT=N-K@-z*+w=YrW_$= zn-@?P{lia4#^4Fg|5|ecSl(ywI#(jZX%yEA4zy)su<#Wazx^(9K1^;$xmit9Uhg{G z8@({w-xcsZsEW3czgBbo%Kk;FIcieB^?Pj5c~Uz{R3>_XBmFab9p}P5T&ZP!GNhF; z$0pxYR@ARb9vNx&R3pdw7MNLbW;!RmiK*XK>FTL3jd)+GwR_F*Cn+=Ja;_nQb_S=$ zV+!x0RDcBug>NsWo&9rqM|lgj@n=R~ZUTc_S|~$B@Y%7|H%G4Ml4;T>07I_d;z@c| z+kd5JZt;J3ft~$4!gr(1d$%V;SUc;lH54?n*vW!^@>=`T5GOzSe~nO*Ly<+H5~{qo z-2?g6p9<8necbf1wd20=FijKTmH$T+Gwe{OqoYNUJf0^uN`=*^K+%{3GVp*`<|v*f z^rSf{G7DN1kCw7XB~TnA{1*;!Nr77L1Jv(igix_;Jtn1sZ*b`pd`6}lMCKO7+V!Tq z;&LDoKyAN~3}31=*_24-H#2kdggnWy_$p`fj?eF)ub5R&-5-zR*za2oLf4@CVO=o5 zPq&Tl_M$8H8hdy*xsAE_f|#zK)A0~H5tYn_iKyKVqK$S4V2Qm_Eqm&s-<|1?=sna3 z)~Q6^`yP|cZc<+bvHog8SVmiD>~cuDw_0^h-jNx-6~eh06Gl?0?Q)Nq9Eo^ECIAwr zy~{^H(*i+F>-1{^gVFkBqZh1&Fi8|IJ#yFZ^Rg5SW8W>D#$QunO*h_I?LUr!p#vX! z2b`f#eT<1$h#kz(>Y<>UmZ09ZYy95A?1dBGUG;9-bjBFF`AjGrL|_y}}0G>kaU(g=$Tz#C~%+e$T8 ziN`Cd(tR1hM&LPPu%)Gt`@$?rolb)FDTpTaS5{>_^Zv-*4M19@dj3+y>Ue@mmrHo~ zbeuvirMlSLkX05F16Q*1D`ce=*D;dA29PSp!tsiYIb!Ed><8#=o%myK1wV1b|K(Uy zxN&y!6PS!pjY3A(QW{e0`e?X_)_ecLN`vkD494D!#j5Y@`gYve7j6&$S{y;1k)R%X zv@=S7h-96tNii4`J)YuzL>`r&#roKtcYA)5V}zcjjc9eYYZNbyrF#0xiXiijwH;A}DFQ3wSIiJgY(lR{+8to{w6Dp;(a|4L!J+oAqTuCR zv+P)BFO%ftaj%a`cCbBBeba#uM!T&G1X!PRPY<=I!TGfcs*CkOI^6Ux3Yc^UdykGA z(cfh~3Jnc|_edYqKW|4w-s_T@?G~?_@51b*^&)6obj`8Q8|0tzY4WEnr))zCXCTPp zp*vAKO2$g8rmIz{#c+R}DDU>~`!sTUkv|q!LkQ|}MC*>2z_D0O>nq%b} zR0c3Mi&dgeSB6f<8OAge+3QU?V^0z#6!e%$5}7xjAd;^!SBO^n^C{`CUUM;}M{H&V zkJ{d=<9wfqKi*Y|-vz~{0A1)t)NACYRu-Nwh;W^cpQW}0TUzCDM(U+O3F5XVq- zm3JkQJ(-@WHMnMQ0{}X;^}Er$PH^lv=Kf#0%Nzb?Z$#I0PB_xd!-Q97SqSQJD$D8< zw_DDLbn?^nceE$5um$nSQz$L0F zF#Zptl5&PB$kF0+bll-B<<^b@-Y4^dbx_fDe3|#NOWi4{YSDVm+O?2=q|jFY1VqzhA3P}D(Oksuo6;ZG`j&64%>j~nawicz;x%pTDZtWAtm?opg^4ivdT+~c@U>*@)n_P5EG&`%%}yjcE|EAMG-aLKW3vuTdHx$NLnQ!$oP6t z{({^$(Nh_A7l{7>nUtXoBget)7&{kFb)dJK@u82+rg!ws(Z#oA&$~Zffz<6qMg(sC z%C9SYG9@mVXs$HHCDc4VhiG-mKhQYAsLqv84&rDY9;a;VzD-Oib;cYvUx|?0h}otuSQlww*CtDtmWL{nQnlK1R5uPlxo?j_{GO? z$;ZB2&eP%0smmXRvFE*7QOFbAa-wB{cLpLRJ?U4Lh3_4r?Clq5$vRN9rry(#y;3q% zmfeY89w7?nkX$)=SdNq#28K*g1zM;Bg^m|_2LoJkEv(XLRww&1W(wJaf)Tw~xPXp2 zGTR|Np&c%Ft}I-9J)Qb};EEeevx;svtA`!_g7==w8Cb2(pU)5>i7osyKA~KIPsc6z zZRJ{PDfa$o3>LORb)eN%(~RAd35&-7i^Xx*l%~^Idgve6S5y#wSweoO=5601tW%x! ze^};z8#IttkUv`bu8mV~Upn2P0b}N7|Kvu`jE>D=9 zTTmA@dCtUv4sty@xlX$hxW8DD#^m~ekNky6IDi8;C(au+P|+ z+2zLjT$;6PGK(?>hXf?NlYq*G63=pNly|LhF(Vv^7(*01!=KuGV(}QHXe088_O>5$ z+&f_|)EdoiK*ns}wE`emMfy_Cv~ZAnOY^!IM!yFJ7J%>FYxdO&lEN77*TV0o|z}5R?fV{S6d)({q`gw{e;%&#^HS$;UQm-?H{*t5w{$x=iuT985ix`IliAXq__{ zgx;Grc)5#?yI%UMhEg9~zfAsR7ZBhO5I8NP5wl@TqrMYVUSP#X`p^ zpmn`h$;vV^^+J_RA}NH1ppyj@KnIgy6prlHVP3=Nfyl8QE$w9T$_;;3_XkFc=O1XaIqYb&1ai(Y1SQExh@vIxEbPnChhwAv^J7xYcJfbU1rHa6q zNkanQ;OIy-2#pmyZ1l7+`(pt~^oBm`P}>alt@e8h-5%L=K5G(pOiW_@lLNBmKBD$1oU2cD zO6wBaPJ=;qfm9Y0k!EV}3f5^5m9`+NOcoR=fw1EcjB2HI!{({KK=XD#H@d2&+(q<^ zt>mX%UV?O9Ja_izZ@RZxbYg5itTlMzk@CxJkkkDe4RJE}Eof^0=3#h{xW>uESo&WP zS*wT@)b;U^0$ns2%c)POU(Su6Sm;xdF6&8XqKY8{p+hNA(`)G~uhc;iYc*$Wm^-%= znhKm=;ueVqviezK9?8_t@Ki-9V$L{yrR%BJd?sA9d(aR5-Vin&uVC?2ht%p$AEO=* z(i&cckAzYOzYr~CBHpV`ib=Eo!H42<>aD5nyj_!p<Nx1RvrT zMrzIDyl<7;twb`iOq#pxQB|8;FaCo;p<^^|cbnc2RIv!1J8RFK!p~z}??WKJNAi0r zumo@tN_mE+MJ?CKh67*b02R0pHW7D`W)R{^Ffy;%5j63Va$Tt#1#q%0!v@XYV&kcq z`w$!~S$qaSIH|IAR(HP-rOYVnfandJg$7~?fL7j)iiogf$b#bfm@hz&Y|y!WUo;^O z|CUKlJyR_5kSWTK9Y2$-s&lTblBr`xsZu4JaZ!G<1zOMj+5HeN-=6$O98|JF^e z$8V+Cd>lTY^Gei?=l3@IBYpusKReQlN=5<#5?OSC#Xdw8Q#Pw0lI|<;0BH(7(o0oC zq(K@KLV@nxM;>LIY3}+Tl2NHUyhNSYn=SS>!ibf%;$n>m<;9RWTD18z66MfCHjHq* zD*4Dbb}Tsc3ly@^zyu9*h};;`tdXw_U##YA=8icFU2q8SOu=4U=X}5g)Q7_SPWk-Y zN}JsJm%BajOqa;m+(&px4_5e6rbNJJqp$SW4U-2J7_!)9L?r&;iHyi_l?J|TJ$zi1 zTs(IBf2{sKscM_Fw{7@GO8mvBa-FeV{ULN>eWg#k$EiatPsHTBxk<5>1%nnODK6N4 z&RM-{VE@Z-J|FfZl{-tE4ZmfSDzIdnv+<1cu75w(2fF33yhus6L z<25K+kE}UjSAM*o=0{b1lLK~?CF_&GX1@_67sM2QvxZyn>J;z+#f6>G{3igF`Fr0l zG<8}$O>LVwFoP5;R)qO7#RCpn)P7_6fEb_AXA~l<&np@P)bpf?4KvX#O~xK7q0^%OeDFmb64=o2}pH2Ug|{~*%6|- zXc9?WUphyUAN@p_Q0J{;c6d?tbYdc|l=J_f zh;8$r(^AA9ki`RNWjuqtx!>dK7W4xSJo|r2$B*hEZ7DqvT6f|%4=Cb-BTym;T>d5= z@^w($<>`i#mrcu%!l2r%57<;|Ddls(Hb3rJTo0RgKfYXWJ^6pcAwUr#_evPc+sul& z^HC_D)iNtx(K*LNg?>uzzV!$T=5M>w8fn4K>`TDvFm<*{Xx2AA)ro$G{y&W!Dd07!X@iVTq+42MG2(DO+J zIF+tO$LSA)7fL#l{8+{Pfpf%S093V^r5ij(kP$I)EToXdM1ftrqQQz92X`FNV|_Or z*>monh?gdANzH?iJ3PWCOCDjR;cNgVkMv<6F=)xxDMLX!b%c>a%LLA#9LWdP{OkZo z=O%_oPzK-v5_e}P<+xU-=ha6TTTj`J!lK6Wt7vy#?CkdJ+ce{0QP_y$)r zIcF;&4h{oXnWg{%+*j#dXz9w0#t+E+R#PAU6mjn_GqVkmt_L|2-9eKYM|m{7#f8&W z;@y9HWRLHt_%ukMMVG;FPlhR{$2H63Sg&)=(nLl!T#QzFv6l(uBFE6&JjK^r+H%es zK&snQLQRP%BTD}@K!NN}cG?aktdhO0?SBkqrrll4?9U6^iRANymD>3(ulBe^6J0&I zUrQk1@`DB8Ng#)nTWbhDfMO9gu5uOZM>W$js||g4RT3 zs!d4JV<)Oez7GCyklOG0LoJ&^XlcI6QwaI;_utc%4AAg8WeXFZbLAlsSmHr@rE29I z>7@2aXwX7$f*k~W%{hOTOpmUU32>JBcKeOk2GF-RX`C=2is#9{%CJPbP$@NVMXAu% za~U8ph;wa|>E zn8xV?PXNokYdLA4lFbCyvubq6qwH9EAhV@WQjLmlAtyY{OCX1Uq?2u`&rotNyv;kG z8h|k!Z4WaQoQ{OD9KssZ1l<-JXnlNVgjg((ZFeW!E-z`f)hhx2Q~zKt!69zGI`Wi1 z72H>giSYE=;l7bZr#X6i?^5UgLE}_`rc!_5N~w$k2}?^6K8QLszoby}RfLjtUME=$ zM}<-I@ZwCY96%~c!*X_}D8|E6g*X^bBZ+SF-LorMd(HmqDId`c7LG~$@vxX6f~ogV zSFq*X0|vSYhf_lQ#GXt-h*tx!!g!{PgD@+r-zX8><|lQeff`aKxT2fWbLA9b`5^Lj z_uBJ!GG6b`0EztR`dWN}MQT8hrnSlBtTKN;h~F43OSKiI0VhlM?%aV`{ywsN@Q!ZW8*IrXf7n%C-CI>_uh zuEUO>C{Zdqg)p%^8|8`I+=XL~=0ZYpB@Ypygg0U@*0KBJ55mbf_asQRT*z*MtTbpv z+^R}?l;L~fKO{Ibz23xRPh_t&VId~r{jFSMX+Y3a6>+e{bg{r}JX;(S9@y0fi}WAm zp_U<6rxGD?k|~`>z;o&G?=J#E{IPo%OxhG+A-k0^7I_h(B}?(V2u>gu{47SIi>n)` zX(uZGmw7?pfx2>QFhwkU0nVc9!G)tK)FPxl5{!8B330b z6fq2kpC#y4kANVA-iZ({Se!JqM2jKeaChh~^4Z`h*4A~XY7Ky8y*LnGcqIUeSB$=l z;$vquE=-`C|B0B}2MhRTB+7qA;wo@Yy}*iUL+?(8BwDHs4@LBnjUA;KK2T{tZ@|8O z>Jsi2eq%A+8RoOE_qO6Yet-Xkj(}G zX@?Yx#-lJ+y3adDnmY8j7j}!MsVHFe#-rl=BCf<9>i>dCM4QdLNm%C!0)1YWzTF9n~y;5-i6 z{DOnwh8{u0tHY;Y&POUyYkarG zt;Jd3n+)32asR^Hnu)pFGlTLfe1*o~B^WYz+~70uQpu16B+J1yU#cHCuEgQ{?35tC zuQaS2jc^0Xg=XdnI#T%~C<@xx!3QTtWebU^eU~8Yiz`%a(t8mcAet3GdPyj|d^7Ap z6iBaoAy=O+8XA%RWgsMi%-&(ZqjSAsM3~h@Z1fPxJ_`%i@l z<`chFwI1thXU%Lx_L?4TiK~WZ@Kr>3k*O!3g^|X(#Mg6i3@C@N<|aeXvUJbgVipS6cO+{RP)yiKuHe#AQ}`|ylKgg%Q%C#o2u*{rwyzb#P)ngJ?bok z!a%Q?-B|s$##Mxyynv4 zWLf*Ybd<6jb$Uzc<|rDVP`CBRUpiJW4rNBz5fQYnwOj9AWZC&>ybx@p z?49}gl?ef^KL zS8*VXd4`%u^U`vyHOKx9m%mA)OkaQ43>OcFB!_vbbg^3mC$tjAV@*+z8-2(LzTgKr z?eW)Y^@#0XWk>M!GiTnD8ebvSj?K{MLl@w|yy%dV6m$qSX^Hd~vIBuNxm2rSZT8QdA9VtmkkUxpl* z!RjHCX17vNS+a%Y+*l>-h?pvK>Q5Cif~I*?h%Y6O7f^nKi`hFFdNpXfh>`-_jzKPT zqhGu>p3YHyEIA?*EX}>f`+*bpZb+}2p!Z#00}Qc#w?QzJ5@ZKU@mW3@#SK1oS6z;o z4_1{roLADQ>^xJvT_$bnCts&jM{goEtITY7SvDT4e`Ho`Ei0F3++7Mvx-Of5_l!t2 zBD2*Sa#pt+GwQDmnAD>CrPW)_yE7E~@Ui254-Cf)+IeO~3_Re0jt#!xgRUC$XpkaT z%$_|#B<0~@>zO%-18qIrRKrBEW(_q@%$3KU>+C_L}X2b)> zzGR+!e=FvfrY~iRi@)f3C=Tji_7PAf&MH_-Th?*!`Ir8`B`tRbV@8@T+AeCY_Zh+S z3txo4pSQj=79}e8k0#U8N_|$HRn65Eg{+KYxPK|*5CgirY@pSrqqYeF2M%TG&#Ng7 zDU8os?2Jl(Brc@4C}Oe}C(EA6Zc`Y21VYu1;?UM>0EVnm8D?bk(7^0lyk&tb`r0x0 z#x_s7Rv=5I`It^49)SsmD4nE%lCU3Lx2rB?WaI$ZLAJBd#zznG+%eYF?=_Mo>Bz}( zmbw4y1z1oel#ahvZO$g|DGVaX)jICKfnqyi$j-?xC}-x`8Rv{5_C3rVP{vWA`BJuM zbLzQ$g?!<&5xent0Umqv@$?kuH+N4BCP2MlZR0lw6p~Uhb&&|p=r^2AXXj&vDUzpO z%ma7lJTn$gN}pcbOAvWoRuN!rml{(;5nE*w$oY{%0`$~*_; z?_m{FL4HsBWtRaY_&Yl^V`kI5TU&Q{$dEu$GANx@Ze{?4yESDu^+kme(Em)VP+ntC zOGp9}J+AR1M_eidEvUnLa2UJp7RBXLWp2-cw43wE#KV>+c8$lAVR><3fIOEZ+GB}) z{GRDGA)En_Efi@Du{Dh#jRIu_djvLi4v+6_l3dZKM{>aBtF!txZ!CWK*AYwe$1S!S z#_9iol`$_NhOWoo>mdJI5bBr6maEDYq7A0PL@di%Q4w~T&s=!jdbn$D27xYNEg8w+ zx%0;g1V@|ALZN!G-483=AtdoM1&(MQRdE`v^E)7#nIp^=+c1(#CqY@XLKzs^urOH9 z9nMALsn?Y*eb82#cKQSw)+zkGCv?Mp+#yC(hPn3-p?2Q@LrLjfJ02I>}&sx zs%4R~lyW)u(}a6_BJrvtl*&*cB(d}(fEFS`V#kXp_Jph`7)S;woLf*1w|EmDFcYt2 zrsaO#vg)*=r0sj}S*T)V-GC>BpQH$Ual2?H^J;hMb9mpUHu#uuct84)RNGei6h_Mz*T_e()9?xvenB^0Td9*1m$`^W&l`GYVE)9&qI|7A*z>Xsn28cGHQ zj$|Zh@K()Gc+0(OHHmER(~u15@H3MbU{b&vzTgGrY8XmaIlEs|A>S)yI_s@M%lAul z>#J=fq31S@5G5WaXyk=Ra0w~REnstrrU>%4QU8`#o%-w*wui3?M^x(F?2uH zWYo*yDbsb9!|SgV2j6%Yx#xo!u4$d=c~!Cqtk|2Gb$W+r(lf6)aY;}d8=~; ztxW-YA1dfCd-eZ%)CAqZaN^O?dg2ahCA?tF%(OE%nJN_pO(k)n$Wb6wsw0pbMkZAa z4ZLr%l2s>fJA@_W*3H$#ak%hxVZoc$aasE`789VO5bO&gwK|I=%Rm7$C6A&3IoHF5 zGljF-&tBdwuh*K1z@p}>LE_KSpF`!-;W1S_)T}w7;}uK3F6S0@TS_Kb5^PA)1OpT9 zJ3PyUi7b7%NwOvq>k9xn_*L!KoC1$iRQGY`lEA==W@$449KFS%8v#9O^svvdJIV~M zoAvmV{GtIDPwmgO^vzHE#NVIPHR~Kae)WZ;d`-)uNFI%6cCC4h=8QgFYnUu7dA~sQ zyA1Y!9bopWv9`zov)ih5qCwb+SoA^mYhBItyFqf4`>s{@{I5x~Cxz`5P()!ADs+*n zrtKzoVt3E+4_I!q<-gDlf zUu5%hjI8uVQOUe!r5cM=FJFNOTBXGznOcs&Uw!)2qsrTwACsq^eJG>sBf5MOPiFh} z#>_Sa`-SP8S~;>=zm>*dJYlRv_F(38U8pw?DiK`CfVwVJEY5Lb3edJC*H*Qla6u+q z2qUSr&4F;GG%``0;4Ys`eSh0Qxfm|U&T(GD# z@~k-uOxyn)V?W#m{ZPRIp>pa6+r z6;}2-b)-nOR#BXxLv01LW)gj>5)1Hwf8$bVO)BU7y@wD(Q;Zu%p&Wv53J?(81mv?= zr*c4oYa{j-K@fSYi2y`wA=ajhnap;xD>Ef!U}C;Xw%Ot&A%_j8Oa7GQ6iE@g{|6-+ zU@?@1EC=-ZaoV9BPpFx`@xZTZz7C!l`3KW2;FBo&YN|a~#)LWZ>@jYP358NzFG?IC z%76@MC^3Zs&#R&EuwSBB3IQp>W_K&6(1DgB zxRP_fTlz%xEB|W0()YJe6NmA&inonr|JjK+fm?E;`3=B&UG3`DYpB`aV7lfbItj^a z`l^P!9nQ{G$@z}bhhwPXit`1Ox94@n11p!1yeA?hV8JwuDjl~^`}_O@z*?0W8&U{5 zlUN|^Pv<2Oq|0c+ri1*}Ucrp0=v| zeVyRX7qN;Kv-)DNxB!uWCSaz1b-cCsxqE8Zk}%6-N@Z#o52un8Iw{42xRg$}i>h=7 zcyg>Y2$!UG;uKx^{r9NyQV@sS74&F6su)?8#7m^T1&nTy>#J5$^QP!rmo7!v@9`d4 z8E8OU9npor;31#TZQxAmr(I8CN-XVV39C?NBC*`xblI=Vsto#>JKFT^_f}EiZScr&-nY`~zJ^WNu#ZHa+bo3gj zUzAm5Ms<)-ClySz-HH&8*PXQ0CRKTPg&EI`(fm!!BJ4{I=p0wB2JGLY0y3yon>3?1CZ3~}V zi#GAtPqSFn_dolIos@WD4o^(LKbA_=QJ2k8@%h+3$WNUV`gFZ1SvrTOd-X}O^Eu|l zp#@r05DqaKTr$VpVmy@B$J(n;)6*lI)O2!rB9Q9oq@#ZIj61kdZThKlxm-^CXXfZ? zs#;)pdNEdc_pU`hadxS}ojyl{`l7?)y_XE1OEKPbzp*0)(iI&j_f(bzk$NC@Y`(UV z@y|8vR&FLfdJ(Ty3i_7b_#bSy*5Mv%JS|*8!)!f3NXuyjo&pIT4-5>f zT=mjyLTexnh=g=DH0mUwy<5}4Vv>xQ$;?+(v8F}Pc@(ng^CKZ>rM8m7)i}iX2QiD^ zjGUYT^K-}xB~+-1W*7!SMby1&`%x!V&zd%aC8+OsJ$I*vJnxcIJ+DtTwx15(At@>Q z#1$%qN*~1tm!csB}<*ohz>+Ty&#lMZ_v|Hl)ugQ z71bH6SCHHgYUOIk4nW=SJP9pBGw^f3Lu~eb#Lz`2n`{7yGCHvcybSt8pFwBFJuo%m zXj+#^6irNDpLKnFxW3bPOZzJ|+HFCFFmfYq^n z`}BzSo97kby`LvB`D~xZ1rDyAe$6K#ftmgnC0#abt&_*gM+WzewiEK4r89AWQ9Q+0 zP2S!(0eDRxXI*yo8%Jjk(Cmjc+V+LKV(i)bHO7nQ=FhgYUj#)6lfn-Id z<|nX?XMg)Ms(o|)-7fE#87G*P?3Zs$=b4z_t223i4y`!<&od~lmwwg~h#z@pGU8&M ziC=0tz+ZZ$ zwL)<3hf!M~&=8%h*Ijt6)25`ab4`bRZMl?9bjOOf;V~XQb4nCbJ7Ue%-D*hfarrap zvnI{{CJBMf+1rpO=}x}vndukP5K6Yu=Ruq$jSn5}kYhcjzniU?%yy}Y(zj*bw+97R zvNz6&TaRly?-wHi?t;C-WB*TikrLqwn}5@-!#oy3f`abAtoM$|1hVAY!nzn`{kQcWP&VuM(_H#R%3h~CeyAK47{11QUcKh8#iR55Sy%@Tm zd%pMP`ZDAqEV?{RKzpnDf7#RnN-%M_jblP$Dyo}-`acNA=rfORM5kkpgEU4NIqX1~n$LI(l9nX(Ahn zX5^OLhf&(^?fa>p!XlSK0qVv3TaC4!v2m2Y9z!W)xLocq#%K=Bht*GYDKc2|a;-2K zj1{z1*D{HdKZi((f1nPsBfw$(?P76z!;;IgeE$$k#ANb*JYeoi7H}oz^-_6{YM*XBBwp!@#-;X)qVmGG;}V zQyZPkY`^A?-K~o=%2_h`oVGq>^4j+ajOS~iIp3WyBS#^pCF_dy;uyi@KdM7a_0 zEE!9}LWVIo;;3};GRrlqg_D07x*!Q3bRppuQg*vlS+TR1&i~^}#(B{d^vFc4_gXPXeRHx=$oYVj|sr8fyvB)+;5!J{EdT_kkc;vo+?`_S9FB!f~5!vC_ zvis`K;ECpTw?$gMhMFJR`r3a+^yv7XHW)PVR^6UqHFQice~lJ4PJCGv%b@uvJbc_Q zIJK>{u{#lQE%drByWHT6c`h`}nzb|evE6q45pt^tPvg$$A%_xiw#8Bx%crKePe~t& zDo8)3X0ivoNR+iB)pUI)otALKcXaR;vtN3|^CmHPM$ID&0^#g#tI{OaI;;r|&27FV zLay@CSe}|s-t{v!H~&7|@7#N5^*qP#@IAuw=s$|G;`Ji9nTe2{ z>yOVGedqwZyah?fw?osQz0>-C`LD9L~yn#P>rw{XC(^w1!$bK^X@ z-7&05(`kr)PGX^xNX<}LDQ{h_8Zo2?R8>!-E}U?Uq@)94Hr1K|BVc}NPLz(!!Y%G| z6ZSXhN~Td$jH@+Ni8n5jk7M4gd*huZN3GR+vfXcbvc(BqjXXWBb8_`Zv2_j16w0P& z=F-XAas3%Ukdcv5={NJ;dUhO4_^&D%grJXlW}iCxZsm7=S^fEQvFg2w2*bGA%(`q; zE5|2(S9WTv;;Nf?{dQzYdJCBq5xt;njH4Pe9-0DHR)nwrN4iaitJcZ2b&4stpe|+1 zTOZ*;#g}c~XxmKwSz=xTS7JUH7lZ@`SkrI>qd|W-5Ds+*Pi_ZyJ0Ma~z);ypRIs^Y zAmr(3PPqGMQ6qHRX9>3V*s*nvm!nTLHmpb*Xx4A&oE9|KxRPx@ts;Z~h`kRaH@=?I zqX!(adYr7Fn5Yn_`H()Q!4EW3C7TbQ5g7VC8r-cn2Ji4D6C*)ItI_UVG1d zVA&zTzfF$*M`_RfPsu6oE@u-AB_*Fw5}||qyCpY{lgtTpsHoUn^ff5Jv>L!u3S$(I zT-LqULHtUdc{sJbF(#~BQBC`7wJUdqBFJdCP?ru{8km?uUEa?>p0O-`L0XP&vqJ6_ z$0Tn%Sb#)By&_i!tyP7oAKIK!KtFOVLID#=S;{D1QBkmZTE{LrHGgA?nLXPg91;>y z5A^X)jfz6X_6Cv^A%WxNsE1Gl7^t@v&3!boTjLX{XPPo3w@4%<`w?;*oo#m_VW1%A z_cL3MYhIaI*i@I1te94^(SFH*a_~Yt?lH(||EJYq9H8!H8Jo{WcktLa%}yhp6ZD*l z=b1fD@y3vdKY+a#b)yq~oEdLQZGR5Ie0CTM3jF?4gcbFz##DY!r{7}W>vlylX&0q_p_}Zf@pQnU&!!&MdILpF>N zJI8Hl&~AtzuB!8=-EZY1L2+AfkL%HZx8c__MWyVlj}$gPGQ1qipKzpY2na}a#+5f@ z7v*Y4skUt8XdW+u8;PHm1y7dSL)*_*JN+ZSBAj%ZA%C7TTk@L#0eKyA_NLzVyq`K( z?sq))&7N7I0X54dzkR2E4@}o=kH)lv)mm=q;ox0ZP_~<^BAO6&rS23yyzNmY&l0Lo9Mw&P`p5|NaYd@xOC(X*`a zi5(suPS43G>1+TADjvG|ngiEkrgiKcqYByoWhey-r+&6Z%WR*%Y&66q%;Zl=uMARW zoWCs8s-@uUShm(6T}(z;z3o`Uc6madZ~eYpUI{5Ts_JI>z|@)bxpcA+z}*nSUEPe^ zYeIL^UKmAw7$9zf1OPZv+0E99VOn zsIKe$vK1!sZ6nA;C>sff49JNHmtGM=im=2~oKU#)r|F>`Ha)9xHyC==s7pdwU z@5kw?cZ}e#y(^z`<2lM0hie2qE`BG)CGgIz93JD+0H$T;tc$dL&7|Kqe8XgQzpQr! zKK>j;MNQiHnDyQBNwhu}3$bStnB@Bu*G;j}Celhny zw_$AvhA+ZV*cw5f3-$6>dG5Vp7E^Bo&l-*3uVHddVY!AqmZ~W4cwhaunM7S#%?9H;f@|)9B}_5{dWi2n@iv zz>b=-s3S2$q;?1?hE=1CmxIv_OpLT_1R{_YQ`;ognGMHQ=Im~7o0OE6@Oe6+iX4M-ONUGE){EkI zhy6#-lT8^>Huyy8j~~sP&48FRFu$bCz~-lgI)`}7w^#Drk{~4#(c$Z+Z5C~g_q zgcX%!{#QeEDjKfU67Q`U!DY`Sw2bPLCsxzKG~vb`S5cp2ORoLP+I8j1g;oj2ch~f3 zv{<|AMVk$uSNwb7j#U5JhyApwaCu1vg!p{Jd!u8_1g*#P@^a_1Hc#~G{67c&H31lF z)+#y*F?1cf|m{WQu{XKdwYxQ;i=k++e6KQP8O;G1!)aggA;RCJ&r>+GClPr5IjzDdQ)(#aTa})rdaE2`X6wRtEpnZ z=`5e+3bhRmXYB8-J)icnvl=R#CZU=SAZfom5{ZNjmJ*E%#@1z!P8%4W>2?*gC7QeU z0i`G`npVTsz_QFJ1+stXvmk-hvynfSrTyQ<*S%Bj~u3NW_N-@K=3P@(rc_C6@>W(Pw#n&$DFIphQ^L&h+9Bl? z#fg~Af}y*eEiG@rw&xqC<|AAKoTUXVL|ucJW@SDWit$BVe6%sLR}tTmSf9x$VK`mT zi00jUC1oTb#Anrd*mBxf!0hQYbBk;yHD|eHO!zhoABqG;ain#WN)oG*$?n@t>Z@l5 zEUF?)+N?3gv{DU(3;*hSff-E}zC!m2b^2oLPgW;~_@dy)5 z`f?i-#j%AB11wn%-_%42Vixjoz`SfDSg^&xc+p3qIY7V42S0$X-|Ks^;F6S_eIds=Ze!{zv*GMWq;)7^ic@ZO*9HD9t3QYE zSwpJu2O7M)d2cn;5_mG?80s~6z9%V?beAH6=Ic|5g)-*1vLrG?s%FIGLS4};)Hn-g zR@gZ>6x&y&D@4?o2z9VR@Y9G(<%;Dn6*DXmRENDGqIhATSS5dm61Pr)4G(IB!c2uG z+=#rgjc~S7W(EDl+T;QAeJ4_qmfq?NrGL50=$iFFX{&(vsKM>(4_f|)^ zdT84GbaOVb(Ar>wYYY1HnGl-jmo?%7}I?&&Op{m{gqZYIb zV-pyGLi_Z9`2bb~rU?v|9;{>|*?#p@$|sc6wyW=CrBdua6BcZ}?oonJ-vrB1_ka@J zS{eky{7t3^dza#Wy#QWEndlsi_Wf+s;^ZM>j6kdA;Tft@K2MKW_%63kul^zr3QLpY zr&Aeg)5B=AUthAL@KX7&CY>8(cBu+47b!!&X-2-@pLA_sQiM=X$>aV>O#n3`lUe@1 zADXwyOdSzX_Zt|7tgNGO?sO5Be-a}LUPl#Iy876Wr1x384jLiQ=-e9jVe1G+;^HCj zeuGJ1P#`J=x||1O`=#z-EU;{S`G~KUmjkVLQ3OE^^@mm_784BysGyiu9u=5jn%Gtd z>C!EjzF5F>_{&uCNU^c0fK0Ocb>ePQ{MlsX#S@Fw7opu#yRjQ4KRkR(O_kNSt=|%! z6zFhQ*HF?)e)wRaVOrg8TaY(*>f&sZ(9ooPP&b)i$sz%`sdQn8?fa)s|7VmGOb{Amhk7f{2VSVzTz|`nxJobou`jcVC zAD^pj{RR{gEf6Q+8IS9_a=1g9$ASQGU5(Hbb_A3(I3UE3S|&{5z%l+R^u5J(6{|pG z(&LZGwXMI$8Q_8N6fltFgP>37oyy%+BW~iKiFnUfdb-*@I2-LF>o2!`R$Q}@e}I@K zbK6Ih{k^^y7+nm^p*PqcluYr6*QMZ-!w8&;Fpb;Cc6w&CZ1PPG{6X~C=uY~%fQA&9 z@{!AiVp@W7@HCCR)rH$@u}!yzb-^rpC-`33*_lChMDLlGP=frI!tVzAU~AM*j(__T zK(mI2PJaeq69*=y$haH_+ui?_eO+R%ZN65{>6ENG><0Ab>+1!EW~tu*NHnlrXuJ>_?uz%vcA3n|hBqv2gD=z*_rUg}sj@+kG+e0XvL&nIXBrd#GwRd+jRQn0NO^3rEOKpOKOi*TJElG-irJ&oO54?jBZQl0*`} z_<&0X%cmhv?j4STdB6+`Y-wZt;Tk)p2hy84y~Srls;VyY@te%z@89V3{CYy{DQJ+A zlEM%fRN(@^W+ahBP~@`r2gsWI1IpPDeMb6_*w5bZ?D5GrJNa%7qBd}@w*K z2ULduMhF?$NWTUrk>!*wop&iY@1(i!B|F_;~< z7Dx=zIl09s5FwKRVHS^qX;p9c)a6GPBCi~6;IPh=$$Ar$2k#=3R>^Q=G(Q~(wEgHM zgr3t$6nPk%+St+Zf34i>+-YmGF2de>4caBkvb3=&w&l${XCr+bw)+3!f)CScH)pq# z$>9|=8-KhDjs$rV!N3q9!x3dRH&8{b=J@>C_!0`Na(sQGYv>lQhCj0NBLnrvhRWPvy%w9^!l{N5X38gjdy7L`@InkB_@N*L z{%UcXQMsp9KF6a?SSDQ0>zu(pRukzEXGFzQp8S#`4-Q9n13u{5OAjNfR|DtOpX^*X zdy-LmynL=yB!#+ev7xn9u5>-09x1YbdWNL~gW6^&MN!Z&^8fZzeZR@yJHb2cjvaTs zUF~PfBxeG32VAu$p#V9x{=rZj!-r8jFR{|)Ze6bfy6_P7*rO<;HI%XO#lX_H-ES`j zac0fyrE`Zy^?XDU#x!hvn};*!cizVjIzFd{>lAq!>%73~ae6r9HML0hP6-5UG61OF z{Xpi&`G$fhn{#k%FcAlPiiC>pRKYR20F@noszd28(^Pl=m|CWRZ%f_5q&=jfBY!3u z0;+wsquUS*5@Q%$o^us??$;_GOQh?%{2+Kgp}+JaoC;mj5R!@A6-> zrkVTuXs1f($0W1#KQ@|^%d0|tu`Q=9oS5j4 zMcOo*kHz4~SS#q#T?*mC%;*^+an9EaT96qhp4Ophk%?tsPbx5!hS4y0di97;-t z86vN^=#WAHSt8!ClC>S-YNm^!S8C`EmQvpqrE{{uOpk6YOX0d4O+ zyYCKXYqOhghmGNxW>{1ZYBu!Kj*HV!9&ppfFZy(i*Z=4$->3VmP|Eh^b-5>B>iDPL zKH%XHQLAioP!OWLwbu=lpzhx8L0>@O`uc(F5+W?0H&||=?@Tk3lhG=(MZ68?OD6Mq zFL`8=ED&|5ih1TCM%wQ~Dl#i$e{mps=nHWte$~AeK4q?ue@;iP>n4?FgX6mgZRxNz zHy8AFSmH+&t@tbv=Nt&yFmCulM%v-O>wT|zUaKGx!XO3=HDe~(4Yt4cNLT*iE$e1B z_5DY-sdu)i9n3Q}K?*$mTxQWqakIp>@y%)qDO-z086u`|_I?H|YTn`wEZLw$MrnB> z&gz+uM&I?EHTb{oBq{qS8cXuD=;!ba9DZtRx$-l&J3^UTpr>hY26xlEy{HcB7c`y4)upaJB1|`rjC;hVBi2B-4=8Nv;POtVRwy z=`EqUlRaF7C?U3azeE!bp8s2PM%xp79lLdW=6Ws+G^LM(Zuvn@Mx1S!%B|>>EQ^MT z`q~f*ef*&J!%-|!7uPbruG^&#LkuK08&Vuq`Es&#ygfY?tD@^Ukg}6I z@wS(n(>^Lod!^!+ry)~z^qMQ&(lap>aSIASxEZTh)B)GoT$>9s9O2wN5B5y;RI_!} zvIH^F%*Z5BXEdqGV|gFIvBc+Ii&xpJe5+=bKq7s*TL1D}sCQcBBOo_ewW`chTQeumw;@y(#tBT&#VrbanjjUcN{* zZNivVH#$~%j?lprQ*xF)?aTDyk?mYrZcD9Q>2Dw9ec@u)y+zZa0t*yWd%5}QOy-AH z#9lgNT88|jnaLR_tefdN1>>VB+}TyZcWA?c;*l7AJ3oM%;>6Wu-dq7P%E`RUCe%@p0}3 z%U7-|wNDcJ%oaKc*1^p<(rU(F8Ac6HbeM2}J7obH?xN5goFKieQBTKasnJbZN~8=G zksA{VCX7ZXAad(CO|2@OK~B||+&boll#OOmQb&VcFF#9M9S3@J%!R1<4?*Vdp0yXD zPXEc16K2rTXrez`>FTlS%1WLNqoNg$EKuHI{QW-A_Y86K{q27De{}@_L|5RG@4lbf zSh=waI1ebVu>D&c?C4*-^lPCoZnJ-4F(z6uI>TYRBCe zJR}33D)1fB)#7a48M%)1t{tbU5O7`5p7xYUh8D#600t}_nlR=gg!R;eTY zR4T7e-5F%U4^ziCD8)Vi=*KIR;IL^lY#?i;?UZy}-X8MzwWFx1S*M8?DVsJe0q(Qj zkWDN%M>@qX%vqVBc+3O8(_1GJ1ArZ3@CWS4YC05wilTB<7Be}p%($LL7(I$e_=Sz* zPZFndVc(0b4M)HG+&ihuc2VE6>h^2@Nwc`k@x6I`$l&`yMc!mVQYQ~g9nv$q!+0<` z>HK%l6Ov^iM}PeipEBC*^&I#1$aH!3pV8{8<(C|Jk?_-qrCtMJmp!kUF@Fs(6X`KLvbn)*U9$lW~|c259mi!E7UjZ%)m zhL=mC)!8N=0KH;;W!T&9=r>}=Mq*-3zYBqxiA55k%Z((6NGztR4(ZBkGv^FX>l@}R z-OCkQv{W>jow-29n8A}Mqk90XLKZ?QMTH9B983~HQ3V!ii0((MbCJ|*%GP;jRUcWL zBXjX3O_cPI#k@wb^_xj(XPa;99uDJ6eXIMk+x4RO0b3?36fcwV@S9#IFDKIO_kjjq zHhClq(@mmfkOHrv^fa4R4Pv_jGN{h8_WFMQ^l#C6Q73qO#)C{olz;Bm^!z75-x=H5 zGCCgY&j6%I8IL;wuoQa;GXU{58n7Mk17eQ2saO$$MmP(_w|GK|{x-T^nwHjPnBdYm zwzQ27l5}niwOL})(vy1~U4uR?k1gb_<7PiwAo&6OXmB8+bN2Um7@;4`$7g}!3Hs~5 zR6Kd*D5iB2iV!0>)uqw#XcNZbsa-nl#A)HcLwd+H5(p8g(1+B9)!qjS*@wDMf%B@N ziNV23b!`pN;K*OAo}Ygg-lV2X(*}}XKr!M$g!ez`25Cd|{V|FCvT<*!RzHmfXYl^9 zS}8zeFSH5LqfU6yECs@Y(lf8W6OcKfXe)bn>wEQ5T%3|Z45z?iA2s2*(CLCmR8*y# zrsmcD!W)O(xLG>$d))P~(d+m=R=Ad9vLvVCu^&zBNA#atKiOMCNShF97)VNVXKL5j zejsnT?j2}m2ZY(DNzEA^UM<=Ud%ceUOG;$;FD?vcW%>@W4(uGml6foTNmB4ut7_aB z#*oT!%5)v%h$J~T@_1&=y-d^oIDNFhrsYW+Aa`GnKk{oma|oOo%ODH6B_)DRcD+#_ zjR#s2N*2s3a`U03zICqEJ`^5Fws0UL!>{@MV>wo1KLy`Ws)GP_J8Ciey z6@7ZzD^ZNYm_HBxZM4J=guyHl8(%@pt69J((h2_a7iNbFvn8Op_ z+?}uWW#gLdSMG&lf4&~0U00Ttzl3WBIqB6#eQTY-v}m^!#4;lv)n?EDllu{9+S*#z zx1Abyv1mue&b?ylGRNn7fb0DnW5%4LSJ1fvTWGs3t<#cAONA;!8%99t$idAKGK$%x zX_IaAFTHU}m`eJ^n01OSw|Oca+?uuo@eFF&CQ0S*2Iwq4}})E_%HBx{~dd)vf+8#*;!>H z_IaNlr~6Lw4|e{KVmiVGQy%8AQ=v)$4{PudNKOHJd^)K%zuwI|e5Xl}o+d$AM*-;Q z_YMV5j}bm>0h2=1#TKnOcsc`%lX<-jO)D{v8M9pZ4xFKSFgoa}BA%XlbXUL4VpgLj z5rMAGkb0k1qWNGXoNk`|o?eNgAbw_E;usR~GLL+4K-@40W%L^ZK@i5Kh9TKa(Ggc78uQ=4k|BXDnVI+zUPMH6BdP z80zf2to6O~1U$vGppy#Wo25g3+ao`uFq}$j^FI!SGtsRt#|Y}y`pyuOEW6&*l1=cI zO3a0-(2h;~%JsReny929YQsxWCN}KCK{r1hl%eMxyN>;KpX1RIho1UoDG$|e(-*1~ z7ss~!)}Vw$b1=zzF^25ux_63xc#rhK(06-%#g(#LPga8~pNC`M;(@(Csh@i|gE~Sy zU4X$D^D_|;buaj6EMCu1q$!2DtYbJda#rw3mn+MhJ6gss&;T;$281vf>aQ*vRpkFk zne4bI8N*YKSLz0!>=K~~anGGaqBgjsCsxn}3HV;#Fdd8)w6|d<>P&X5(fzA?N4)ga z)vV-&;_La=0D>9c?1f-^UEb|$q@s8$Sti~(dJ567L!0&zxgc$)B5F|&OSMLvj2IURgI+v*LjC;CUz z7YT)^WGvq89ZrepP=Az#3Wq&K*BU}+)oA<&+q1aX)~=9!@WSOq_xR(mxAN(kuKa(# zy{jQ)MC9l5gt{Il6&Uf_zC%gtXe(v&O-<$a1w)jhAzxY7)=)WaHKwp3-Drh4P5~YT zyQa`tce+3&o|XC3%Qm<8?oK4?Me4Azz+UGwp+Z&@KE-LZ^#Nh5W4PZTMqQUJbr*(2 z8+IS{_Y`=CwEt8{9nLQo@7_2xpB4UBQ&ZE`8z{($0>8zR$B&3>1?tb;ms54$<{o;i zdXc4NtbAL98{LQu8&NOCy82?4 zDwO&`tY;gnzj;qNMFB%7*-u}r0>e6)-R~PGJ8fTEkQD7NYIW8}3>X+2+nG`7e##Vm zm=hJkk=260!`FY5>1VUlSTfz8>mE;1g3j z2aB-5d@IA-ceQd3Exn4ZuM)q49Yqfv?|zm;4(=Ya>sE(Yf7v8S9ZUa1t6vgU637F2 zf8{I0Ux=XnjZ-wA-y?5-OCgDOZ+;ISJcXc2I52e8zlSpq!lgER|i~HKY zUBSjQ1ri7Q*Gg*K^uPrH5TG^|v+w?5hrlCBtIkV%=zuIavyk;W_+)i(qhpi{nZm0X z^)+UW-QLWLSD$64UN6wmhn#UBTx97%i#{i4L~(n%+r{!a;F?x#(H#IKBIKPDe!eNM zs)?X##}do)8Fa4wOCEIKWRf@jARo^*ty|CD-M5Xmx!rHpIHK8?1Aou{!#Vm(QQ!<* zl5LYJ`9QH!AW=LT62(`2X;~*5Oz)(h`a#yk%=HxP2^QunFQx&P8iKHW7Fc`#E=veB z!WM)i+P!@=orVSU`DnfBu0^-5Nmj>ZK6j$IUgw|^eJU*aS@6MDv4Fm6bf(6h4TTr? zMc2GFCq!Ew>BH8VPnL)G+Mlm^Mgk2m8IZ_LD@&(EOaMd;`i2h8(gPRH!lbX0K#Q6P z+5T~rphRl%W9KTOK0)}6T6blb^OO9BzoY}lCHGx{;FyLRti?9V;*;<5YIJ^n9b>1+ zz0Zs=CSXl@8&joJ;oDi)fX8sF-MoJkIy;Cdn(`B}W2%<&;JU7l$L8` z=`v2edcLk?Ru%|6_D~{&eo&!_{3@2A6PjUu+UdmA(EPDE>?e{k`YisEXrX29+?Ph!7|dUx*oqX99@(E^p`> zY;0a#Xv|`pXvYx=#(pKmv$R^~;|fl^Rf_|d8V8_kM}Dwk*(x_m`iA$h*0f$T4G+!{ zCv_i}^^*&h*ZHWcvK(~3B+Czn^#;~*L0|uz0w=k0pc-rg5Hg))IG*&<+UXo@Lt@}j zV^qkPwvFNB7N8;2IUW{$n+v$!bXab%F!%P>DJ}m5LbcF^|D5tl9YUV@>rcaCmfxMM zsGcCuf*1tZVlI9I)Z%+3mw%K4W`!>*H(!_NZ{w;PiG6PUJkEblEV6v2j*tOGU_-2Y z67x|joG>A-%{WN_avFp{Fm&;LF=LdEMMn-osQhR!yLB~6D*r-QZsQv%99F}W+4|S% z@(6I`GS{`xwG~@^)2zj6=jyV{uw_HSpOwhB14;_)GQ18fonzUO;99ALk{%J53P9bY zNoT1W8j;Xop4y&eZA7i2dAmmQ8v#%ABP`2ecx90Z>o_*K|C`vq6MM)qIX1VnwB%%G zXF*GajZYn9Lb$A7`r69uff3X&!SDHmo!N3Kh5mwaqy!bP|3d`x`eEe=A0i8o9vriV zveVO62B=lZ0)xcxU-ZDS0Anxf@2Es2^^2Hax7OB#G;CBsg^egII2(dR(9!u-NQ-+( zGNqqpN5a^FphZII650<7%Z*lS&~EJ?Uiq~DImm(sA)HbUl#ZzfaWwCimYXeInm(76 zOxY4|y=0=p7f!(mnjf?EIpsjnl!{nQGt|IWoFZzuz|?}p<4;J{@Rp$9$j7!$7Zu@J zY*4iyn<{7_PK`2I3>b?4k}HNXQLwml3J(mA6EaM2doT|Hq)E-3-tY(fA%+k5nzmpV z=V!Dr97aMkUH+$mU<1|J+XZr>Q=TYe$hb%XDPFBg`LqN5K|HkU_U+y5TsW9|yhgBl zv-3XvX5T=o`QGy71AY|61fO;yxi|p2RXrp~O|CvaS%NIJJx^6`1@Lo^k=mtPJCSH5 z&jVHfKy7u{1I3Oz7jx&olG>u9bGYeyf7I`5Q_&9hqkV>}wL2nxY{KVpV|+r3|6uK% z|3Fz7MF%;9yDwhln9N%%@cTYFqY2h$E|d~ZbNz$KUmrLP&I=CD6za8^aia!JA^%bY zgTW2TOmnsEm9LH-BuW)8dL(e!&+D0lee}jhLpVdjEjxU`GinXG`p*5IqaS60xmkTL$=M4kF;c4=<>LM44?g-~2uQh*gRRL(^WDviF+nHu!O zSEJlz^?|_vtcEYPl%Xf`DBlf!JUV|hTri}7Jd4XgJ!Rm&?AXp@;oR)a+jW9L+`I&Z zCmTzuM=jV^XUSc_S&3L2UzPz1dN@H2t3|T!DFcC~*V%x0m?HV|@OX6QuouQ$A2lC5 z;7kH8ywHbVa=lpddh2#0CZ_9KZ9@A)5>ZnaYppc?-Lhk?G ztQP80KDIEU#-ll+I1re%n|LimTAdilhNIV}+GWunP!WSE?!pXs! zV$JfcEIF?b4Bg}WqCMqAOt`>ZWMQ|mx~@0HfHHLfUfxJ<8OWV0Lw}2QdfnLx;oy;p zS9ru(b4v^z8#L|f^lLC-C}P@ZBe_k=IA|$RcAW)v>Ba}cS{pX;L*jw5lFR_FuHfUJ zUOB~2;BFn7VbNg1$xRt@qDy#_LW7aNjUQ)zA|q|`uDrwj+69oH&cPt>4O(9(^fKF zF%)-5jN87#L^}wg4eWX!M$<&1BrVml*Lw?AtkZ5Dq5S<0>ue=vbtsC9DnOSP8XX5) zU+&K^obY|lT36Z)X?VsNUN8ba2Rm)A3;XgrRUxVxBo-Xs-kR6;FZ~!c z5~E`+8e~KM6x2@WaZ#@GdQ3)UOif3ssN4kPPcX3U%aVC9-(DCi+aB%Rp!GeS4>!ZX zZ5IDBaMWKoxw8&k7Q!y?t_3eP~WP^WF68(hI8je}ZR^NbiC{Vr#F^C=m zg%Din&e#ms?33iv2rR^yuKI-7kAOu@8MK&2pQr0EB(9C!qJc?3SuLLVLxloB&k*4j zB13Kv;X)$g8B_0l&iDBC@|18dN-n@btt5y>FkBpe1@sl6jizU-80#VrSOGB+AbzBu}eMDw9tP_pQ^g05;N?(F6!(+VR)-z z7={77?K%!Lr6Q&3fAEAmerk2tpA;@@xbChkM{11-BX9{ny)r=Mnq;phdJEU$KC3~# ziU>CGIbt+3qmrY*!h@PQB;6{R{N}!nn7vwU%9x%;B(IS8DZ&GqM)w&n=rL3}Hdjcx zQ?qp0x&X?61qzOVrsg=m2xd4YjyXaxo(adc8ME0I=hObZpaj}VWj_QZ&(Jif>(;m? zvL9BFRBS|@w#f!J1Ao5^;HBy_aM0qyfDdN6&Dcz)^DJtaq+c9u9KyzHJEAZ27a4g{ zQZxw&j*6Q!^J!s)1te&8{h}i(Nt$@25@d)J0W$MJ-+Tbm-zhUxrQ+T2|BmGKf3G9J zl=?zzrQ_DK?FQm`Py*D3C;j(}yx#DP>Qyvc3lV++cPXd+pjJntO888ZO5U z0;?5~q;4ogHXW-PRJG(oBgAtT4KPvQN|l+0Skxcg?LWm{c#MZ7=o7WScz?L<~Q`rH`?+X5m6sj!BuoM@> zkT*_Pj5=71x%4NBd9t>yL!A;q;^_(b9}31 z8mFTP3vl9za8our0#Fdm?$@8VwVu|@|9R_!=h{Qp{(R}i>%*oF7_iaF2>%Z@Q5QV& zXg!rq|B0U=WU)xa`3AInr1J*0oEuV7y9odUfU!#RFeG96oi6D=ANkL^&qW%RiyAvC zUGq+3){ao*gc2#rOEG~vMOXnnN>`D*b$p^z5m>Sb5#2_@-#;vn8c>JA;82i|g%}%u zVG@X>zd_^p~*~m{)&|7?PVB0Vnftld{^STX8ylszeXCkuk zqW9u~GRtGsR&(ox-^}$paFyF|PEmk#lSB2XxgW|Cc5>Vy7Zx+CFE4k^`-W z_FA$*x!ygsgax0ZFDrCfBk>^LzjBVu_|&4s;0Men3nVk{LCeDSRhQSHV@>ccPu^a| z9exA!??DKC2qrK!iC#HT2lQa|OKa+#SlH^1kmMG%=E<>HLRG4~2HkuNnH%)`db>?a zAD;%u1(&%l2@*|4nTzLNdF#DCq(>`HIkCz0E{u9}`svu3cqzMMtliw1eAC4*a8FjT zL+XlS+Q09vb5v;8%hRKqJ~cypF17p*OU}M{5Jg5ML`O>?1ov8h*L^I-uE+ae8ch6S zZj96ypSmxI*P0;iBPQVagE61q5w?7k{K-mllzt6>OuQ*_Ose#ag+l>Xf_i9R02Bm< ziJ`rgN6r%V!$k4wBC}GVy_~eOvd7HlriGTJFUpkxh3{MmmAj?rRx4CDgvBEz&BIq{ zVuj9RieBtQg?=*fDL4P$LfrUIA)cbDh%LE56IW+4#)Kx3t}^T%ySj0YcEg~D(;plw zW{twHClu>e&qX1g9Gi9QF2MSo3ITs`u>zPCP_|Yj%ReahUDC&q|WE-&| zXz`a;+Q`JLAq1f*3kQd=og>C}&vQ#JYy7GECHEX6EYBHF0f-5XBcVi%!S(i3e&W|8 z1#zGnrkUGpeBQ1p6G0TBT1Kn2A`&_45tam|Ovcp;BRNKFQU~rFDGf7BNRX<@i+@if z%s-Sr{2$8iYvtr9a!&B>K&mFERr!_ieO=R6ak|KB7wP(7O08CtV6ybFr-b5+=+J~d zlXBlnJu|4-C7XyzqekCgug*2JFGc+BY_)ITkBOR1E_?Kb>Ib=YR-55sLYS6=K^vz= z5hZ~;M)rgf9lO~wUTe)v?o22F1VpOfUAZxNi^=S+J~|_>XgrZCgym>un&`C3#qVyz zA&>CV&3X#3N@K;OVJ#ktYr##EY}{d{h2m7R*g|p9yE}}Je&1oM#g&11>pW(z{c+0U z;PXFESDAOMp3ja2+}=LR{uKYQ{d1O-6xvPVl_pm;xz5$UN-3C|i=$re4vs;5wNgpU zLv-Da!lbFYSaBaB6JJ=*s67o*=~4KcPx!Dh>C%38ga*DrH7(X_8@CM|5&}T8U%1mU zbN8=` zpnBZlJlt&j`ucT>Pe+#GNNhb%QgOZ(@tJ#Wfv~og`T9>Nf0wskjxhS!PA|MCBuQyQ zl^!6m#TbgonSS32HCo^%>T9z1Dy=E+nNdveI<@~6)u2!(K*tb-kfP$p_6wHQiA zzjWuawW}|3y0-12+j`A-F)s6gLEVqtC+&`|JnWMOzLg=I`3XlaE4Nri&6^7U?FL_D zlfFXy+Yn>Fz#NKt^mw@ZK}8+Fu`rTbqSw(P7mq-sG@R?_f`ez)&!1=+aJ3+QTER@2 zPurzJ1?+v+feM&q`^7X4Ypp{&eP4yz+D=`fn`eQ}RdU1_{3B))q% z1(YW#i*1!EK9*TPCypIjW!OHk_Q;h+zV*7>|MhH|H)mM{BoI_qg}6ki@G&G|3lsv_ z6OOZgWR9!3y`-B<`ug15IDe#=$Fqi2fTsSXKf``5kgL9D-NW75%!_8o1eK%x6G51j>O>WoH1>FKU zU0988?N_?wf=`U%vuFc5s&;K}s{T-RPJYNGg{2w7KmS+}!6R^-2wJAtp!O z+^=a{{qL34ZSwU}LJe|jSw^&{nT##A6lUh4P?!`O3wH( zb}t-FgvbByG8<3d)}bW&nS09@vR#M8RAh#7t;(0%fVQCanplZ%GwLODI;~D{>tEOn zM=mce$aAi|PFENoGfbFW2o${$U`$ricymhARMGD5Z#lP~UrLXc9;d?D;+4FG?tb^) z$$x=W3|v$%j0a6eE2inH#zGx}`ea6S<}p)a^$RpBcC7q5z;US_&VG2JyGdik&VKL^ zY}eXpW6e3=DK-EfxP=6t!FqoLA=cz%QX*u0z4-r_`o`!=*reOoHaoU$+qP}nwmY_y zPN!qrwvCQ$^PYF+o4NDe*F$SJkel_nXd_nPyF!KiSx?11P6DVaO(Msi`n+ z+nYS}89OnqG2lvA^N~fQ{^(9a(n!eS-0U9PmXJG#rQzJhBWXzwc_Q!gdB;wG1$Gln zEqbSy$7Im`cY%iQ^kqjM`AE1;}iLJ5<3iZwH(iM%ug|ia}2X4_5GM1p@PV2cVQNVreNi8@c6ZKf4 z#z};c_SRLH^$X}mKUq~rHDx0^p!O_aD`=jg|9K%DA%GWhEqT5Ag&6lEwF>7imp* zuybK>ama9WK+-F*${%s#j$a97Hj>mH1%lmz`Qsyv4sFN&rfT3A8~@7WxtnhB z3|`p8QXIL7u>^dnx>C|?p~RVL z{`JM8Iguz=VgH4``gph8uQQgwLrL@&s%Q*Wq zVFhcTsaV5vw+#|H`)|h;j(r!7-JX6>WGmZBM)sS~q&GaN{gq{u^sU=GzQws@gV_Y- zjPHvQ^Q$bg!u=IeC=nJNLXVU8cNrxATTR)F*dILsyD*S{>w6e6hkU`LZ#eyH4se&s zTn$2QDzs>`sUuNw4ScBCkS!nZduN~ViiD!P{%Vqrr7~6O$MdBV2Mt=w)MUDc!*QQw zHg!9$7J5fVX&0?Ng2TZ87M05qHAq8*0V6suXQ(J#kkapjhs4Y!fx2GV_aCxsE9rmI zyO4bq@FWvwezUm!$+J1*`{gA*451{wRcAt73N?`E+$N0`DoHhV#BAzv>V|#~V!2FB zYrrW{tZI5J8lV3W#gxanI-s}%vouaR<(;%tKQn~;BckTmtAn+#@Q4!<2K+8hq(H7i zhLAa&ZjCm7t39>yc-r~lfDB>;@>h1GG)qB6@v1>!d}*NSPw}e0vk&Uz(%#l8v--4uAH@o!W#W>6j9t2og5fzhd?f!_`gsK4R{wr) z+n-QV1Xx7fK;|zzha9*G1nZn4taKa3R_pr#>w4hi{*xK%Y66sCP2T7lT&|)(PAcJ~ z-2FoHT0kgNaN4BvVTzK-g=WqlzYf!9e=kPIoB<5%p#iJuL_#*iAVxJ1|DhAku&;$7 z3U>Yn0N~5|i`wyg?HF(bJHyg$g+yiM!=yUC@%nw%YW??agCip|%fhKnvSC@2T1o-n zn>jvo-|2oRiUxsJV^GHG7ebd^|G^>95q6x9B@PLD@`j!BEApw30+W#&?PfHHnt~zi z<*h>ONZtJ|s2_{Os)Y^>2yEEVpgY3iJ>nHH-JHw+irS=Oc<=XRb^7lVQaE90STggP zDHg9M!1g4uW#35|G6J7#U`WK%eyML(9K@1zs&t#ISCw?Bu92NvoO7FO*LK02CE##f zh5GN5X!K=u8qNk9Nr3uGtTU>Jb!BFHPng<7T|D47DoP4PB4TQPOd;q)s=yP;8g5=1 zw9jo>wX=cQRoF1Qv!yf}U*}L2D@Ck7s0X7Xx59M<&{br(5`q@V*$uvE7bGxmMU}HDVsJ zA9bClIG0DVxUMZ-5|6R~5+oEz%wNDthz81I0tuH zsY|KEL#b-fLnwg%pmmeH zS(R{`a-n*4U3=s3WSCSxAz|v>ItvA8l~9KJ;RvEk3A`IVafgTie1paj)*8Pon&@?I z3@=m2HsPQ67_GgS`gf2mLm8n`T{C<0qR0Pt@Rr(`^&1d_8m zc*fjCs_w3&ROe&=&WP18K@jOi*%WjnB|l(6M;7 z^WI(i_B#r_qy&@=|A(NLthh@%3O=Xb+OU^n9w!F+EwT(9zOX1Y!B6VLhQwRa1Ias? z(?7KL-Pp#8{3!^chk{l)Z_K3%-f7_=WPQut%5tQof`0OMC&!{F!$`DIV((xo?@~i6 zBQ5QLuu+i?M_sfM{ez=20IdK-(EnvO85J?$L1xPQ<>0Do<0JpGKL!^Dtft2~CB6Gj zju?L`Q1hiPff6bBoeZLc6h;^#!uw^h;rcl9`Let`v2YHqmAS3AML~COv|>WHojt@= z1*BrNj&5q^`vPnq6`?XtN*$L53oh>W?wMFZa`}8tuB+#nVDhI9XbOlOsg4A3-dis- z!{-)RH-GB>T9ChVDFk^m1uHeE4>S0-b&6(|K`8~4R+g6e(;nRY%5lY?r5oRbB)MYS zt+p_~h$j|K*2D~&rhO*Ud2Yg!KLqFMgl1r*WwQNIEly#*&wLON-fImWn8R4om1Oz> zkBlSTekelomq4C*GELaE&FaPK4k%%D96{%lzB_>Hv-{o%O22xJwO&ib{roV2YgwB_ ztL6(lTGJ`L6I@ZCpt6aU4w;2mPGFkkP=GwP8Im*b9YWE5hP9;*ElG1ygrbtiwR^ys zgwlkq?%0BL-i#s63#^J@iR%gXHCTr5zE!dK3O9ozpFsvXI9^OI{2 zgVU1XgZtjxRB|H*1w0nBTRjQa6NBY~Hc(CCP(g}SALVAUgzI#m!tRHH?Kao-Zi6ow zRl;mS>G{BbyA*8*d9p;Q#O^$4mUfY{ix||6$dtg1yig^Aq+77klCg6D1>c(K3svAY zrXtZQyu3?oAD1M%kGBG&7|uSAsS;P`bp)YW0urqf!-`_{!0rhW zs?IQ=BOpLxQrsFJl2WC0TZC#Nq+2zI0n-j&B8#HC)ecsbf|@{v@^fy^2;kh~gwk-r z7_F(TwZEBaWnPw^k)uoai?tvV3#%iV^02_01?~~^85*>G zWg`2L++v4wX8AMQA)nz#kDuB$p|LK+_~3--r2D?wF<(^(ZVOpS zHnKh+4mP-Q5;;gxGC~t0t))y4hzP}ah>b)bjR;KSKkQ&}3dx3n;|5QqdyJg~ccGT} zZvl7je+KK$^#0J$AP;Q0Y%&C>ogNr8C?6Tg1l!Mpg98j-(hb506J$^eY*i{vpfFV`n3TQnqm?Y#e-J zPumnefbpo6F>3Ysu=w;KIL76p*<4iGo?%5taWCn9cy^inbH#1IwW9DUsL&L}qU8Naus9 zT=3yq-I@mZe#Y?1^6CcOhRJvSCrOHa*5~cV4HSqHBu?Qy>L?O22oY1bb*wCl;UCH3#nh(kH#hxs^bDqEg0;lJ|~% zY#;~{v5vWd`;F;ff15r57`BsNU8NWFx-xK3+OH_g7%Nd-+8_R*1DkSU@~`U&!b@TkO1!q9BCvJE5pPyiJBXBMI_ zfvHaL=A&j9A57aC$O9Fl%|9%t1Wje5_S+JvrF@j26a`ffomZd(`0csFKeo z;o6{d`J=sO**0oh3&_wk_cmfUHrX6-oP!M`cd@avbCob zqQL%sDPIX{OH8$mK$lLVY(z50STbONJul^DoanOkMVbhVl|+sNrXq|ej+CPbG=EeOCjTSrC+N8Z zqTf-ECkEr)$=?Q_kt@J29a+$5_&>~hD_k%a=u^;_r-C}Uh=xo0hXRTWv?aCz#eAgc zS3ph)clXTT3x@Nn?y(nhH<_63UxqLU(nIM?*yHKlU+PlGu*E68N)@L_1A}V!_ z+XTr+?Cq$9f*5fWMf(knABpNX)o&{m^{ncnhT#5sVHq`t=Hb-+yYK|aS~n)r-2prM zsED1d@`PAhl7ya*oCbEVU~}JUS=>(>F~1h z%DWDNgRaqD@L)N2LhX3V-2TNU!;zC}JFQ=gZB^Gl+KA(d*N|BZ0V+gW6AsGz(idls ztM^+$c#8;Eq}GqMZ&Gf?`07|W(SZrlqCiXJHP^gm+|2s6T;IQlW3)2>G7-d;Sjr zX5?BD)o5O)eHkxEHI2db8m9vG2o!Rp!+=koJ~7KPFXB$9&`lAOFZ1^eq5Ar7sV?sh zsD%6W!?ju1r%z0zP~__7Iu_tYaF=eemc!2(3#^N4qQmx*Wcy_G5pkO42mG)~Qm>hE z?68y&@Dg39d4fx^$a(WnT>oP&?y2-{vFKcvs6WDOz|1TzOg`gePUriHj zyn5@dFXAjzq6PsGt#3gnH*&*)K}of#?yUmuSbiPsd&VcoW1R0Fk9^x%AsJcT@Ya~P z%T8Qyj%gIP$`EN#?v~E$y(WuCYf@WY8w9dSX#}AKN~?y-p9{(;&RPPfm?Z?7H{^{< z#aFm}>^jZA^c_I^;DxDVw&%OL$S8X)NMM2r7&qAvX3tLm#UtZD0&5?JY)VUvJFzt!q=N_DWc8-> z*Ck9w7UOtF!?GJSWxlkI%ZifhK!{I4JC_@8^5!)$pnB8ABqEf?XvfEn2;XqV{<3oC zcs_*vm|Mc_Y<%FJ3D{#|xBFq^pbwmZwEE0nY3yGp9$kH&?HFfkv zMq4WZ;?LN#xzoK>eH$S1F$9kHJ?X0}9q}L!rBlueQiR)4Dpcpu`{?xH=vD$L=T9h! zVTk()iESakrV_=gqM}&iRguIq%thB_SaQZlj~}L+p_xx{Ztx<2M~I4r)kC-sB^UJH zFslk$NuaP6kf9js3hTNlzPt?(7^Z6c?!W$y1aP6W83=p~XO2km!o0n$z=G$$ez;i1 z^7Qg6;l~65#*wfA^ z@w;V;SB*8-0XI8f4>OqlvYvYS%m0J7HP^Z;3T?NP&-)!xGi!xYdX^C>lUy8371s?T zjkU6rzgo_mtK-7Onpp%1NcrcvRPyzuiKA!a6i+h~Cv)t6t0dJPhBVQhHH@rs0&)V_ z89N%16s=jPl^EOQlT;))@K#ntk3Y=ZTV|3J(uy_b>~P}Q@9|&kBJoogTGilxGP$Rg zl<{n_({&R~NOO&C*rznP#WEtnl?Nf;XK$cTPg%bw+FUvxQZ-&zXFkEm(A~g-Q<*Ic z_(m?4v_e(!ybT2+5H1hbm!yu4F@7yur)bdpp{+4)B>%&P?SZE}Ze(U3u8l;@2RWiv z$GKafiFJdArvOOB@s)xVnrNrq&n2-2jxt!0!JL6^vM3i2IH80Bnuf*`Sf3(%t?_Tw zCL#9GYQT~{2;JF3Y*qX2QOuWIB6=Xe&jsiMNhEzy5-&&b{Sy9bGvfw)AM2+Sfo{S< z04lDK28gD6pu3l(dmjmcj{^s%3x@CarPr7Miyr9z^q|vx@*__&NJ_PO_O{6&B)Jj# zw=xsjsF3G#nYvk6RB{CJ_jmh50(&h*TJ&_fumRVWUv&|O!n{hdA37#XH>=rO^AxIQ zC2VSwq`a}Ui^J`u%GSr6EK24ebVj_4u!2)Kt0UrBjTSdw#}vMlk17p5yMF&4Co>WY zCLnku>T`cWDJlU`MG_uM1Sh<#F5T(;K%6QaSC<5w$J-beqhX%0 z${N|HSOE!zKF?7AEi5IHUa<&*ab#pQw?DkWC#z4bsHH|ojJHzk@k_9h%+wF@74bF!p2-kDK2yA<_^}eC3o5ji z{HKfk0M0Kv{jYZt-iOT)C?ZORDyOF=m(5njD8c&cU3>n|)8kRo`Av@dM=Z9u@u|YfkX$~p{OaAAfY9W6)+$b zmY2uhY`X^I?1!vTk}XLD=(jN(B8wA6zubu9^6r$EmovyKH_7LrGrZW4tZ4MxdHUbw z;$T4)Cz`VqBu|-U*Tx6YXaGPn4nlE6Scu%Ke+LMQ1KHyI%46pt>K|p}+PN zzLLE8GK9`|^z!(hY8*x)3$r7sAMYyHRIgG6xfMbPSCV5yV5yS9-QwmzMx0Jg84}OO zP*_0#+Un~4IjhbIvAQetH?I>1ET>D4x9Z48b(GB;a! zjkT@&2SfzqTB99JNO5s%HRcFu_~Ras-d0volVeUKaG8y1{E2FDj3|=k3S3qs=qw60 zclczBH<~MP>GFLDqiisf%9bgK7=;0|Pd2kkqDZ2m zN|Eud%+n(UB_)m8N2xXV#jUEu=`)GfRJGdL#mW_P8l&|t8(3k!;mS=ybWjzn4ha&q zwlinC1dY6Wr^#cn#j81^(0!7>K>**yFYNe1#}x&I`?wGklwj|Y~A$3urRN>2pF zy_Y1|_u(IJFFi-A2Hy=!ZLk3jJ=p&rztR_S?BlcWtwVl(Oxrd1Cka?lDct3i$Y?Ln zFFKbLEZaICJy1Ef(E^NqZ`q?FgwTQ%5nw1E9vV71Ba$E*haY+G`1}BZ$m3M0>K#VH z{*-8&>@4fGbYEA-oHDpqzZd{R?4;w(joX8d1nxNq5c6;^{uC+K@9}=h|SVELH zHyn8%Ciq;e2@`sloYu=$`3J;I76xbOK>BoQ@^=}&I5D8$=B}${@q17~fPrYz6GHtu z^1F#sy_GGu5(0G%fF&xLxlqQ8J7>xBqKna9g~RiLw?%P zFteL-e5gXJ>1Guwy)cdyg%Z0K6yUiQ=~NG5pRQKlzFx27C3_E~(njs5hJo4538%zxr?1QR ztvnC#J}vx|B7mt(fGr#?1AP^OhK9)0)1oJ*&@;0Q%zbSG3xj@uR6#e2N4JuQNC!Ei zD-?9bFYWzqm#?A zqR@gLqM_nD%AR+h0M9*}fz$nTOgnQcrQN>yrWoo=zR?5SW^AUn_hoL`uL zr7^a5_hJ-if1fL8_3c*DX}{Zl@@w_lxMBb=e7#&7Yl(UKM)*H{GtGxTf9CPiLpbtc z3Of;b5C5*Hq}m{|bzo~yOuNdd1u956TDxj`eI3Unn>|UoG*KBPJe)AvIK+quSy@px z3$oNPMWnl&VC0#}yZA7mt6FB;b)|pHJ37}?=HzL(-!eAJ@e{3jf27-8`s--t5kZ>`RT_^~bE&S{t(1!@~WE3`p`(7rZOPf>fk z%E5xwIcw2c8$LrqW*DG6GN$rq(|OOqbwu&5jj{M zNMG0+IqiPV7P9Qm12I&z#YVVp;;OwL9}7I<#OZQ|w^FTJ-nhPd&k&m|#YIb7Q{Vc) zuJmiHj8%DwCF$8)l32g2YZK9Z?IhTRs=K8v*+UU zLy}ZU(nTawKe<&NrpSX^Id+TMyu?Z_HM|5LegVrn-6@H zC_s}ZsoT55mewEj>eG3d=dh@c-nmgzB&PLNuEh1F%KSV}w&qralz?MW5iZ&80=hKx z22lQ!p&&FU|81DanZo)JU<7YT4Uci}0Fzj1?KgcKNpg2|WFy7~jaq^cvm>#Ctf;Au zn~kT!=(N}mxacig$Gt%5fjimQhyf;$V7gvTRcWNoNS{tfThN`JKc43UxA>3MtGCAa zfQdI%Ayyt43;C^Z`UrGe9i7+pq5l!PEC6DcPsZeKyab29JPMRHKG*=DYZ7pK7*L`Q zYaToI?f&}qcSo1^ed-Qhpl@$!mI{5^l>O00F*_YoJ$$^$g;NP_PP^B^1DLc= z%BRAh*8WzD6u0V}^~AgLe7b$3Xrrt3^Zapxij1lzRZCyn$jd5h$v8^7R2og}00wZw z=amiP2(w~^_4%5Pv1xI4HFctsPv!XR&%kDpan)6#jE%B>xi(39IHU*ri^tAyWhj^n zh6hDGJ3`@sTkohIz1(uFFiEnu>mX3yI|>89_TZnGW7qdQt1%+MPR5;$jfv$;9m>>+ z6dAK4%$OX0msIbrC>ukwD(SA}f;p&PE4ZrTY|%7k<`(Iho!ldPZBjTC6l2pVlw!z2 z>wkOux?*GF3-BV6l8oltSSMm=a`=2wT^tmKgRIs~3KGeZp`@w|S4fjCJbuEZkW{Q> zO-|D~9SxdQ>t~Tefw*GTTI~Qccln(#UO<7l2B=2Q^UNPa>1b+GGIKPrF0ypLCwV&^`reO7Qq~d&{cF_>&>h(lEiC`` z>osXPNUqWqbE}%%Q5Hpy0T&;Hj!$gFd;oawjhNY0iIyrGZ9HA7Rz8|?Fpquh-PS2X zGiPq{Kmj>PWm>*oHW4i2<|M?oIK*J#$muSYoW|ZgZo+lv3sc`p7`!e7d`CP{|7X5# zyVw+>g}44SN#T1&3F&jNSr4^hrYl6y@g+{h_i(~M1}ymIS-mX&dsq({3WYjVCP)V= z-b{i5!?XYrSbJhaIwBy+cm3%(;z>rINMkmwI_#Moncu27WezA6SgPlzHwoyW!ksOOpTp8$! zI-b5j{@z~7#QaZDfE%sDqP_d5g`qFw!S{!G@BODqhVZpS;9y0 zxS?0{ZodzZm1>5-<&qTA^Ns@+D&L(xWaeA*NLZacrkpw`)Ntg=A-1xz^j3ePpSTYC zqcS zac#HWUDJbUbC3AoRtdR2E%l5Ęu5wO|rpPJC%fbrJ;iWSJs99~5zW_GHykKX{e%ajxaBY7>EDHPNVEn#&Klss7&a^{eIKVB)0|Y_ajO0* zHR2@z&zumM`-u$6kv{PfrTAD(i#V%<`nh#NQ(H^bO3N|_);4!0#Qu>Pb13UaO;Riw zZs`7BY8-P{KaljcL5ZPD>~AS8w=ndAW~Z9LFPTI+qTs45A|G2Aa=Lm2K9&R=j~2oE z3jl3eM&wEwGJ3uC=~opC=-^0ik^9$t>|+uF{GsbEp)$pi0LcaujnQpTIb!IV99gHm z&V*}gc6d?FF@vXgIihbzUBYPWaivj*NnPXLN+ZvFKl~s3`M<_2_K{^bwbAajxW(Xi zxe>Bk zU1=3?1%*gyGy6$fpSx@wHwOALs7DmNEMSv z)C9AzwDkSLbF(CnAT8R1{kprBxApbp!KP7XWFx z4ehRvU0BhL1qft`LlF*WSp@P8#ORx{dLdIA;j*hOXe}5L==K_O^0}bp*K<4mxytzML z=C%F)ZLoBGEO&Dc3VPKK0Y2S|t8EB_qVFrRVuS?&#A~s7K_H*UD|_iK4CMu>m}rd1oVf@z9_NvvUCP>_N?O8>GkWec_E)C%} z(wkle_oD6~qY7UbnD`dsAfW{;?F}+_eZ9Utm=Thh@+79fDLr;pct=|Bf%=<)VyX|; zp1@OQ>{(Lldepi zQ5Ka4zjbnT3bMkPQC6r)YjQIPrSEBl6ha}+U+&gkuew7z^q ziKQiW%Nr!$_PX~|k8f371vb~^!_ymP;1z`RZ-LFbe98GaQD|i8>cbAnzJGh+1fL`j zkczWYBky)?ol7K>%gF0(=9P3?@HV`C97vB-zN}YJ@S51<6m8Rrn_X9TPOg9vI;O<( zy#*;aG!#)NlJICMo2AL&r0WzxL~5YMzTqtVfZWyu8)rW>2)O?g52c4$U{7!_K8c~w zR%hxVt@~BybnaFSR_l>FFgjYO-2gHMz%JV0k@~~&#lZX1O5hObegOtN^?Ea1lELxs zRj>#(_%It*JMiDtgzpm{gLm#v2*4lZ5h<6c^)JzRe|ot38VnI$_js^7llNVRMH0O~ z-)IgIVTb?*p&G)(9HI9LBxH1XxCIHUQKOdGks-$o=&A@2C`3>I>|#$L}+0PG=qE~_c={zhwx^J!g_A| zWH&9>j1v|kCpyX`j2DhP>9^cpK8~wlJ%a8nxvGK9Md8hNoKTJrmjvE;2x#>xZbP^& zzTB5V(4N50cZA)ON>I;}RiqzW98ri5Eru%O(DX1!x<={;wYoilKGoBG+88ee32Xy( z_gMTK!RHR^@LRH>r=^_()TOhlo1xEJx4^UvHHHTlNM#gdiF*1%rK-bib5?i)Tp%0H z8X${V(s{-w6ye`}-728^Ipr7@`ELjxiBa)ruD!5{r}W?QXj&^V>i3o;?Hcz9;l zx8VP_Hr#9x`D2(O!7jd={$~~d1{1Z`v7pntRA}ipX!G*@uWF0l;4InV9Z}n3Uc3t$>@x4mB&Zc~_HUWAz-V zf@8^(EKM_{SG

1qQln3w>nH@Ra3%H(0APD|%cHTq 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

lLnMmt0kVjS$T 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

H<)nsd(8Q-QRn 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%0AwS{0gBfx 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\+=zS|5E@jF;sBztiK(p--k_;k7~v5Vt``m^g( z5gqKbCzu89XFaBCa0KGm5q-Ni$x`>4zviMRWm7qVp$NTW3e2whJCXSNHGmN&T2M>O zZud{?-3U@lB|3?lo#03_hvC~Jx9y}mDKq2sLRT-VFHB#T`ACrbdRCC8%kaBwkAYBv zuj{0vsjO})8ZXC8DsqBn0=>2a)RPK<_X8xmwPBy`*JaMlPt#6ulmw#QEm$xxFwKU; z;5?I(Q+9i^UdaKrsSt68=O0(==6$N&y!enxgCRJxk$B++#@Y|L$RTY+^w~ZJGv)}= zuxzk_!XdN#3wF0 zrFlq#)&f3q7#EU7!L)xv6k#*zot zxN<;IR!H?Z16CjBWe`L6`B5wzM?XIX`g zp>l!N#>Ck|+&MP3!rG+oW3}cZg;LxY=GXmx-G5d^?(TnL5D4VlQnButpJI@IqhvFd z;^nx<)OdU6fyK98kx%SdZ}5SV!1E;PY&GCOIB=0+Tun&859WjHFO+pjp)mWA2A1}& zk8*B;*lXzo!IXZlg*~keE(=r+*L76!=4rSRnKL*&p;GS5b$`gMG z!WzY2jHCvQs%*rV1*%A469_n*)217Y6jBsQAm$%|iVqFCx~NCKAnE2s3AM@en>0LD z#EU3C!ei2>^%n^GCOXP{T8>ZqygaY=r10|cR$4-3oFja2vyyiAU{)8jS3exf#0u=! zyu8t?^O;3~{{{pApOLDL!;jmXtuMyqZ~uIHy<5-*6GTjh!nQ+YH08keoP=BTf(xrV zeG|z``#>4}q0H@Zh*MSRf(|R57e_{KfiH?K*hHM}*oyp`-!PC;1M_9U6;%~+Ns$Jf z^v=*|x6ezZ^W;air!KdG?~{uY7Ey3SjLzt(dX%c|!u~pKxVMt$M)9RE$K$)WGngur zIbJK7*hlJe^v7{+xkmRKGf~-7V>LU|k{{lQQ2 ztDVp{9tpR>^#2AxEI!ShI3`f8gK3#Q}wsmVW4Bu|^!}mNads{S5JO2%MS@iZg zq2;_?_5EB(jR^+cMY3m0{r=l2lxuFklhAC}JmuZ6CT~QHc_dzp;kuRg62Y3wGD^4Q z^;mt+GFiPmKg0t0B?kc0z9*K^3LjS(!|OiO-M#}v)6?N~BtcmS8dR1GQaM;I{+b(7#?Z7B5ftJArM4#0 zJd_MZ6!p>(qqYl*F2YMxRqrE$nI$_$#k7n6az{aQ_?%^c4q4J5)!`8b>7>0nk>*NH2kvZm*Jr9G4L*{+;H% z6f;+kCq!nyimNh|Fn{$2O?859R$PI-kS5Fh12S} zD9)hC1*U>%57>YAoBVL6D4K6j_+|P$NMEKHChj-hmddr0{Ag<<%kH#}+w|zOzn0yU zQN3Qrdt?baSOmqGwvHC^SAMTO876unm3i{<-DL7ZVT<+Iv_t+M;OQb1e6L2EDAnk5 zcXBUm$hSa1|1o+7 zu#!M|HEGBzKG0go$zWczc+d0yHh01{BqqWme#S%iZTsnXs}^GWsT?WqlnDCA15I2( zQCfKxeBF>Ek&nmE(%mr!eDU@2n9%YYoZLga-RJ>vO{0DR?x`oUp|AR6A}l!u)z7Ld zx-(b}#g~>OEKEwt8aQ(ci*kyo6rJZ-I$fp|838+F9i7ehcg*g8vZXfACv{qWDfl*> zW4s#tHS$lsOwntLZgo7eJDw8-;o7^O|L2@=2d)YqaCF&hHW)uB0uQ$I2?g^?&#wtq z`J?1@o1?1stAl^*^-N%JsdByia12P49*mG8`sy6DpYtDGzey1M6IBjoL{WhKwEy{2 z!L9l@V6CH)^N#X@#nvL~n6>W?ct_>Uji=tdHQJ03gY!Ux(kV=gq70O2M3EpgSy9b1 z)_!v8%;izArHf1hI?vkdR5+q1v7`3t-0f1ME1K<2r9zp^E}h~6r0^?cvpv)s`*Ul# zMc)=UKJRxuIPM=%4c++5N2Mhp$H_qp(lSRA>i*RFKn)G(fEU}uq|%;W|JIWZ==_HB zm!=FlNSrEI1l1zia(yKx`szjLz7(vXVa7m`h(wQjSne+uLziL@j~EuZJ4~UD5Xvio zB($iUgamIkrXrm?G=8oXl;AZWStRsZaznmY*AkV<59ba%&Ol`)2VD(V&a9!IM13H6 zz+$ont3>3W5Oe%x6RMQ{CM)Sd&@t;UgcR=v7#L?s0611bEqw~n3{k;ba8$)$gA$by zfJ7689ubDNwqU6?IDiNmG*g{p(mu2HZwsKdi#Hye5oK5|PgTGnT>iRPEReKVA#LvP zxr@;ynG7*7F8rdh%4D3{cI1Ik1c8OYPW8ACAmTU1mT#5u9)dY)y(#I5gTat0rC{^y z{PHPDU5g*d1P}9Wr)oo6Sk~(QxrH}qh`mlA$barBAVJ_u6ie@$9<9LF=TmQ{!jNL* zDJ5L4ZKz2cN=x^u{HyI8&F9@Ko5Kt;mcKcK)KsqM?1T^L&w4MCTIEsqwl|*d#@6Iv zHlIv}<|?0JuB|C+^T#Fj$IOR<_WH-Ys~{57$lPt2vvSEFc2f0Ibu>IGg53QZB7 z#4Rjq64OGK_@%O-93_=Vm*c;;!3LU-&sKQSCk5 zZ$H0~c1{CfpiVkpT~O#0j2{zQot{%|g9HvM8WzPI*LlzoY-jc!45?y9#CHnpTO+Q{Z93y=b6BZ z98it|-Z&?cz$3c5cJ=*7sfBnPG3O;#Ps!7%7oH)9Dedb()|kY&panDC9F(SCoFdw4UEk*-ThU;&-nFe?*B3M zPSKHuTNiGUPRF)w+ja*Xc5J6(vyzT&+v(UgD|R}zZS&OL|Ji4pG3uf&>Z-=~zTaAN z&GpO-NkVj%Ob93D{pbDZuf&$l3neV(H2)(>=aFWYjBXWDIu=&tx#_{0LPDImDy`iiym-)&wgaY{p+SXBDItWE57fr_vm3wj!T4Go>UH zt0q|l@(8k#NZ2@?lO^{%GU###qmZ4FC7>-egNbv^|2dFQFnKZenNkjk3{9e|7ZYQqB20oD)cAC*KV?XM7e&Y`C?%mIp_9=S#nN2< z4q8pjv>2GU9Q^sqb;|Rr^pvHcf&QjDb;(O8_hZ7%9RwV54L0z~p(ah_foojE5Ddh| zfr5Iyk)w=4Dy^s(aMcr-rar)n`sdM|uXcOg1vdRe<4Gyd6NL2c^be_)M@2F~9IHxU zKhcmiXsO)kvFwAy1`8(;)qIOJH`>XBLPoTmDX>ltk}@+kw%_k(l22Wm^BWU$yn`*u zvC$Rg*st^T6}>ra_s$*sB7oDG!QdoUT$WJm`eEv^mmBSv0?S$HN1A{mg`)j&Scs^B z7W}3oVN$~RdUqx@u})tRZDG2gADn0&eL4D~HkCZy5b$B`_>3^GsmiLR@_QlT72gx2 z?^|Rj@AGj>oD7xtC`&KOOa}ArZ@HSYnIj7NBU=k;=qD!6lmR5oL1kOp^^KGZ z_g$nzQ@l|`jC6tecw2I|_ahUF)g_$AhoF)}5Ug7K{Cu$luI zQA5lGNOc?n(II(@krd_b+KbhHLyZycf2tN1n^^B3ToTUCr1+Rf=rPp8G$ECL>5a`S zw`!-R{;DspDqCK(18?G!ZXygl9aa}aA_EoXp{%knp4bKT z;o^Ma31i*}Bt_BbkgT7yj#J)KhgnZqg6GzVh=>BO+r*&&+smw#|9qpxfP3y%@!X4+4P)omTVtEwV@e8p86>*`jQ;>$h^Ijio&8R+d5G3$70nyk6+xU|MM84N?+ z`_(@s@L5mH)e`k=_%?F5Q?WT#BF#hF?fO{{1JrJZ^8|fRAT(swEm4Lv-wSmGteZ3iLPTQhXeBJ4ZG zOJ@Urf14YoPZrbr5|OrXq?@o)HJT4Pcf+M@KiH}Nn?>P|i5o(|y^zIVP^kQPCjk>fbfYyL5}z8;j<37!Fht;+NfX(7lN8t*(7g7EC7Brj z7JO?X=xBG}^91)_gw#%yH>*`wy6(Dsrg=Xaj2W)cxlQt}W7>~w4c~FbsoAf4?mGZ% zD1IH6al4o#^(IB^bJYyn{-$DgBkRx*8aPgGINoSY*^AK^$v;0>++w6s%{9v79%h$QpQ|fQB#$xRv3yp8@rQLOvZ;H@Y;9ukvcYGp!qwOP zBnTw{Kn{tKX6(t&fZ&KtWYz--G2cxXR)C=P_#UFsloms<2-U~)(g&+lYSkuSRCU<7 zCh@3a+Rl8wnJI{qjrX^4NR{Hb*Vm*5W(U*jB7X8@m1QLBXvcU=Bfj+_HKS*&Ism1uq zoQ@>1J3H zNu;7Q0$un%dirNHWZRYwMWS$6joLA_5tUhQv= zx8je8pL>$$QHzrsfx-+a7?)Z$=0crW)>zX zdZMWCJTPu{C;KnZxx>sJ=cmW{CcmJkKM%Cx;-;~cWmzuraODLJ;a1@-tK?J{GDI=~ zF@U51Fxp;v4;R}@Gg1Aexvc3TP}(Z$EB^U=A}-D`>C#qgGhX30h(h||W<+#p2~#@xB6X%; z6qBljViiS|Q`+ESG)YlxWF|5c=r(J0>=Wd!B6@ssYa{AWNHcsKBwRs50>UtHXf7x@ z;(Rb-o_gpaNgaG+u!xbrN^cBUb-2I{M~lu-RJLCz(N-z15rKF%C`t_bqvk3yqy=pa zV2s}_F=a_`qZ`qx0$GTW2m(kLZr`YS;eDK51XfhSNv?11zBk*f^xvP%KQ0fq`4enx z2!hOdJ_domN=?zlcorzn76+wwgqhhM%8&s&=vy6UZ^Ca7fUY*tCLG%D)qB@<^wa6C z15IUHF7Fqs4V$%yupDhMh!f@Z1;@}f05{knfAB*>0D@nS>o-dxZDZCx5uSAe)wS{Rbe&6KUMslf0=%_d)Z_G07F zOTG8E%C=`d5eh;gw+J8GA*c*q*3mh)zr3@z(woGkS_$-XTpTcE=5KpSpG=`RIQ*k*?{Z3=}x|m-HIpgzN0V)N3=QYM=Nzi5gfXg z$w;jT`ep67K#tcd9&k%vRZvB7qR9q$LGhChhoO>7{pT2VUZ#1z9~dluZGQ;4FY;2) z%p{qus4^F14c6|2Hevaj-<1#w-2WZMS=#K6Xws?Uak15%PX8;vZ9<$P@c9gN8oc}0 z;C#E=tS6u+x3_KuHp>0X(yux*JMi!s>l#`uWkrg!gpu)qNrbIF=+{ z{d`759+I|>;>LT~>|f*SaC6DbFll0_p$QVZAA z8_;bKz@Q{sR48GZY-KfBUY!;F14;RVYA%gLgg->S8L496P8Xs$A#{%~pTm}ey(B4e zQD`xPrlmOH+bT(z0LqvXO};=JEXOLhCIZ*kFlg@=?~EPC1mm@6=J5XR3RWTJc4di zEy7^qo*JltH&n_>UJEQ}GP`Z86KHG@gwrh8<>mv zUdRB9IOfAZI$JDOU2b;ES!>NnkG`0g&-vW%FfF4=~ADG?@6xB^Uh*fbxMHl z-v+1Q)$>CxAU~V3g1GgNM_)sKKNHz8kp!5DhsL%uBPqiV6_`-a&roWMi(pI;6p8f7 zfBajnc#5H@^oAQIa&=MDXS#+1E=Xx1fqY;*BKr4^lakmk{hA@;D45A5`6g|~Vgz&v z%6P2GJ>zH~4)lq(1PP0jMx$wQ!v5RasA)Y;Fa6>1dL8agE2qE3@@TS@T42XmNJ@|0 zzG0ViJCb>M*0hd~(LyfN4>Gq9wmOuRW393S^cAGqJ|#AArx(QQMMewq8% ziQAx)B^sB}jfaymeD{w66=k$AM(j7Z82@*!2R#Bw!1ym(>AUN{NbiI{E*oM^CR*bk zyM={m?VhKq{IF8~ikXz-0SLlflh~DEZZ;2r980s!D-4$#@hRRcr{;~?jiemqRnR)PPuBecSJhwNjV+& zHP9T$<=>S45vqYysdYA?j=qS-xm(SE?foME7Xj@S=k!o0$LE{-2uJgqn&q(q+UA9{31^+Gv3(LW9p zF?$lcWR`?M6W=Ls6yEq$v{5ph{s@~i&a+!o#rgi3w;0f zJJhSQe2!pjHX;A<)mgE(jhnO&#;3E%g+cdAAuG22^LT~uQ{dX|M;n96Si6l^lK~u6 ziU8o<>PjG@Fjmh{juLRQ;Vv*ETy_yq!6o2wSMgY*<#20(bS?O0yf^X@>1M)AsgeOVo}tn2vO3KGJHIj^E2^@884?X5W! zm(`bnF_8*=AKr4hFo_v0Np^v|WTe$9Y#CC)R;&68Xy1A}jvY6-XcU#NNfZC$uYSsv z=y;ga;e~LvnOv^P?fodlJZ&W=j?FOumo?L7pV-RZzth~E>^p8~nX7BjSptJCmd|tk zUoD4ySj)nA%`6(9WAtv$6H^^`_gk8`?wTz!-_Nr3ij61Ln6CYchQsOhJA-Ndc-FmD z&`pV-+jWkw1Dv+uHToDsd~LV4c@3+rukf8Xwy$ozpsS(6c=;>&f3JJg0{w+!RtQTI zRLvp`7}^k92sJ#YfwXlbFNV_AqSeusbCGsQ^(G{`1QJPfzO_gh_JVXu|Ze^9eoqxvh02 z_@6)HT+m&R$=CIc_%dO1UAkG|x}j>I%lVZyx0NANw&$qo z{P{0C%360MP|n_H)*ti~A|Y?38udhfKP-BE{%);VU*&(WkzH9l2%^JGcRD{=oKDbc z+R|c0Bp?1^F{-R=$~W~95Eg-vX=N${1s_OLQ@0{bArYGilwdQA8WTU+KjU9k&JwWM z)8V^cNST~$tqdo+3y)R~n9nUQij=ShEm&WjFYBT0KWB-3YnrThuV*|T z_j0|z8o!>;U4=6}Z!M+_9{$z{^a{UF7)5>gS4g;cgp;DkRWVGw`H?_@BRh;^>)bT$_ljOK`rc9)nzpTpfZp+Ld0eSTnkn&)!HVn;TR=oOF&A79 zkKOa9?A|1+y^C9m#V~t=k3DQQyAQ4D&Bu#hv-P=Q(;R$#J>6^j%pA-J{)8KbmOKcux`9`-cz>_!uz2}c1isr3v+)e0*KF>;bcRuq#;l2?(59m4cts)}|UIRUBM2yx*RDM{;F z@h>K$4b{(})YyX+PRkj2XH*aZ)d zUBF>W<)$Kc)6>0rxT9!qbO#?2jFz;L9MaFr0~cASA*D*k&0#R0jKJ@Z^<3DRNp+an zbVcrLxp5~piVz+;t2Jcn^S1zUm0W}Ek-9cDg{H^h=!CsZL4F&NG;L=AG14@Qe{Hj| z=I`jTk@NwA!!nw9zgy^o7S0$f?Ab!{@3d_3AEzC_#P5rzLCL<&y#AJLB>y}~49flVR zG%q87dX1pLRYK_8x)64+?z(7R+bv`P)-FGfJZ-)yX}f9-V*btYEfsv(mt1sRkaiwY z87~R#asH%_hHi)3AlF_?(2&Q4A63@zFm_x!;S)B@mWVJhk1}7A^YmeWF3xDxxZJ+- zduJB}06dDXCpLxR#Ic~4hO3%5qAj;a3ZM3FsF%osCBB2dF{TYhU|L(@T&D}V5*%f@ zLH2yiZ?!)7AMt!_NasVq!-k^&6oQ05zdR+6mp6S3J>jDCC*TR?Cn37CuXz*lQ1GFqk@YnmgA=DoSev?sy2XI8w@7}&{E`-G~_d4 z%4!i$QA9(2TOZJfGfo4;po?ShANmfa=L~FbjKF>%v0km=W6N~gHU*VD!6dt!MkKM% z(V~UdYXtGJ&uu9EE;-=pzgNIMX^KMT*uT705*qBmaW)Av^FE>r|NI1TPJN|?=R(9= z#<*WU2&SKuV7ckW)=E(b?L_jv>59-%n}RL)gdovf4j74p^XqzG4|y2fk>1mSB@IFf zjVa_o7NLRiS6tj}3*+!bcZOeQYQZ8|sp%apIt= z@qeoUP{**u%a`pkF~rTN$#GW+&nzq_L#z2Yp4pC3x&aQ4wDEfYE*%Es^S@^QwwJPQ`o%-7kMhD>7Lk6f+KMk7d4NS#7Fp|$3 zg*Ryip&YEU$-6>|jVeWOC3w5)h9~?SNsB3RvrYOqwPcypmZ3zq+2{;+X-;2^H=#Xz z#W@CHsDFm!ki(!TUs`fhtH_+hRU-8H7ZRZ4r-l8?2+9;0iSxIE(6d?$F4Q#oCVC*J zY3;ZHsS<=ZMgl{V6j78wOK^a43`UAM>w_mHrp2%XDVkQN1%2UdsJau=kg>UGcZ!dH zvOX&c7`Jq@(^90%7K00}OCgzo)JA{CnqKO>(6gvFo0od!<4<4UJNv7l_fVJi1H~j) z^Ci_<$S!yfo>a(l6*qLHFg9Cp?w}L@U1dII*v?~^9tN6*>Ju=SRri2?s2KA846)YY zdZ$t*3BtUITSOhkU^0Wz`Y;fW#O&(S$I49$hbx<`9giQOy8fs{oVKQw@DPTEYa@Fj z<_VlNk#=}PzB(M6&Yd3oQTPmuy}N$_H)z{&&vITx?fgiStki4?f2e3?vwhWUcXpr;Glvg{%}qp_f|F!`z~HLRz!$yif=KGL~vz($W!Hl7dAbeKWWxr}f@jNPz}R z^^<5?XUmbTI6?ZTTJLd@9QhCOsdDN;L(K8 zF|~&6cbvP)X?vgV!r5TwY2w1~C*P2=9&(QW$1d7y8CqSx*+Ctp#k8yIqff2%iNg3U zxzE;ruYq+f95VX60#yTYU2)qAFbN8AjEwKdkr5hTf$+QHK=$%nBYM#&rvWnel}wWR z=O!K%Gzn}MJ=FO<`8BuubDNYTywvJBZhopT~Q-S42 zFAk}!rjA5dW36$s5}zvRPjpTw2{hEQk&px;B(c>9YS9ND8g3kfZ^3A`h14YIt}wJ^ z74|@SjN{8Q;IrsHykY;U5b3xyzRqY-RFg6}*+c`xH2hunn411QF}Mm0fpokKl?)Ab zPm=T+s?0%x%m|#dD3z`f5*3Wd8w@F{3Q5yo>2(%18ia{M5h&=)M@>s?$-jG(s7Ng; zhb360Hbu;xJ0=qhpGyc}djps}W=(XQk6!pIm{O(p_U4}xKuio^)rXph^!o(l{~yW$BDN6HOV*}cCi{H*<`JJZ)M+%Eq@Ioz4!XFEZFp0wW2*NfPj-W)5Ro;b=I zouue+%YXHr38zAsA=5p)qH!8jh9`lkt?A|AdEdCfBxH@m~B1V(6Eft@urb zV+e~_NQ)%kRBzZlJv6u{rS7{|Z?{VanA%--{Mo99w^9O z+Nx=bk`|W1#Bku5?8HBy-S3*Fq(`%^%eowz*GW1H85O4-q*Ic#whHB6W%XOBL3#Em zoNGZ_*=j_Mve;&FtNdM6;%CjJ0c~gMsk;w|t+;EI;71mf%ke=cT)VZ>ZDy<3$!$FN z>=)^nSkj{dcPRZZ#@}qGd#Br}VcZ!`YTo@&Kh4Zzxrsdm_@Z6lHr4#tr4n);;#A~_ z#dlnM_3pl7`@2I_-=VL4E9SMIm7KX~E6A5wH4Z}(uLMI6^4%FrTl7B05F*@j?z{zf zLKBBwd1LO#6^w4M6k#S07jWf(*f$l7ncS||BL>7qD{}`tWgH-lmxXZ;Ba++hDCMnQ z-e%s?;QEr>+2^89==2T0t;w4nWMuv0-t&eb+ik!~@F%Js3{QvyAd$d`ouNFIczAU>KMnsyjDAGNtU1qX*6&i_jdGGYI5 z+j4qB{v7-X>MmIP+e=a$V5E6nI%}hLMS3trud^?0nL9K31CBR9daq@A$HU5B4PwvU z0+xGtI#*q?^xv+kKh`BOB*>yOWfSG89I_x|3YEr4)5{Bu24&bDCW{&nO;0mN7Pyr) z3>5VM5}~5kV7uK44qMqW~Hrl*^=&b8*%m(8}x@s z#-g+O1@6Y6uMBCWtz}uhwLfu8W3G;9R%m4$F_|K~OyLp{YI-3dHs2l|9w^X}cz&Re zl6Pk<@x_SOX%?tW1eY06L{k*>v6Gsm{gZ4fYciTDPeLyvz=aS7O)3IeqX_uZrw9r6 zZ+QbqvYeQbeL%TAypOh5re`IHHa=E}D@AXgD-F_iKF9f?##o+Fslhpja+jMcTVAz^ zO7j*IIfJFFRZ#@I#)rVo!@91s)b)?pO+Ry;%yaZ;4Prlsfk9YXSgyBBr5~{=@!zFV z4;`*WpqURaeq>5o=Jq0MlBlfT&;5?!H75m4YDi3xHS?Hu*qT}8vd?DlUqYXKMTA%c zp0DQxx(m_m|EU)xoFC(EqZ9KW{$bQ{uPry>P9&r1b6|m5mEvsJT}j2^@3zhDh6MA? z<9!_Yz79At&M|mpILh`W%Wd7)v$VA&ob6?`*XoV+^PyH?LmB_{rB1Q=>hrt3}$jIy@=8~OX}E#E*?vysUN!f^B4Tx)8O;ATRNb>RdTkJ0Z z^pa~ol>go~50hBL=>$NsML2;yLHWZ^DNtmgas{CooTer)PJv~atXJtxl*)_2OoGVp z_^C9irY`hEd_`h8DLUNR&8P8C6~>FT-`#PYTHunwILn`mr!m2IxG@7qyE+>6K_~J5 zuh$5}rPjX*et|!FA5OpGjh{8qzSs>-iL^HW%x?kZtpQhK{M|1RkrNf4w;NmXfU|=$ zqOY?#c)YcG`%Df%KSu!Ap7;Hej#tE;<0<;{=1-TRO&YQld9BB^2)yrOtFmFb^zgVI z8PHeWkf7k>mUCf5_)4!EPb{XazR|z?C#h>ZuY(kRe&tA4!5G*CE7P60Ixizv2?Q>4 zpIHtQIxqowb0no$BJfc}>=E=ruBbgPLxenff&|NPhe2gpcv6o}2fM%S&okunH7T-3 zZ#Vt;Lx;Z}A-O+am0^5VGthX%YQ64|1}_PSb9n<}f98zwy9?@vqtwNZ99hTiGLUcy zzklcqp{7D@y_`Eoow{7)1Qs=r+NE0;VGI}10yBDKv1p6GNf`$;zj#u`=iSnl>3h#6r zCAon-@;U6i2Kt&}OT7qq1brf;c|u;&-~$B~9nVwDS7v<$xSF;OMR}~*1%f)E6%;2y z<7q&KH81EH;O*o5R=j@q`sa5^H+;iP@wLWDeO*nWAV)wj0M>rYLmCFQw zLr@u$y?`T0_Bs$=Xe4JAv;qd4wDcUkC*tsyC)=*Ix9)yuTv_I)%2feJ<+12049LYGrFf zo4RK0btG3JNlr{wPT#HrGM|@+G0wIUS5om+OR*mW(mQ++L3;%R(3FzJs7lFFct7<_ znIp)}#CN+kzzU+1IJ5smq~CNKG7RA1p1;6)bNx_)F@eTqyfTs}7?lp5lSB>nRjRi9 zO_VBbqYBW2;RI=sb;gqCI_UqKEk2|(am zXEN)04r_3Ctv*zDJax$V7pum;_x??}SpNJ6tV@(IU!aiaGMn&KJ=VH|7}7I}pIV+# z6$GVvIg~y&*S{jx+{bZfNTTrZgHXnd?T8) zBcqd%Vo|6Wl0 z-gja?>D^iSG!A=^qgwWCpca(9Ym%bGM5$0H-)RJ}V8DHwK?EsjGNq7gS>&Zr=h7!kW7BvMCjbK97n+#b=U$b!<+MzIAGVj?k_M&+ppF6*HPA$eko^6P>(H~43y z_IM7W6pfoC(f_FINHTzJJ?B5=V9@LZG@fs6ggb4}%wkPsxT6I3gSoomYOhJvIZKCL zT%4fk@i*5zyt?~+&Po$s#KzX*)VyyRN)DqrzU#%jc`IG=b>gJj$g1@;Vat znk|6uX>>V>9vIVfO|mPK<02lruj6gD)eUT9!n&4CFj3s7($6ZlAUj#>tr)Ufm zIg)KX>rjH88g#^56!WW-u+LY+EtKc|S-fLF=hb-zpuX8APGzw(Wv`licwZWxLK3cE z=`BZGBTat}Z5f|Qdp~%Z^(kCgT@hE+gEL|LE^O%S7jx+YZp#2o#FzSw$RmW4x%%*) z9eG&Ozpk0gS1)J!U%~qeL?tGF1n*VyyG&xt%LwlLq5RuM`cY2rzSW+`O>nf&i}RKN zXk&b@BPRwQvIghBwgG&yTkZ$~w|{wTwaWv^%~Cccw^2jtaQAFNnuxG`eYVmO5ImrOjMe^jGgsKGDSBNYXeXrg|o(#!eP zX%reU@}P{XUk$f?3jTe>bVdDmdY)b7zNS@@VVwUzW59PD&;IXs=*9O(wPF;`*{Q1` zi}n*bEPI_#fNPG`)yxZkpRX8*0jT$M?Bj6r+SC0CCCcc+v}BejMvae`eTdu8hqG=< z#)i;@W70pk1{VdU%x=bPGh)H1TuCsNsY6h<+~~zg%=?Am=JMdMwKvV$-j)8M3S@OW zPUC+*7~Xkj8S@*1>X`U=0moXVylBV;o1~Nrn(g$;r{D@$$J7 zRx}v>ejz;g^1u^|Wv9Kew&nw!Yr#y4Tq#+MyJGclhwdfAg( zZgmq}49PEuUPk?rLEA~j3^cshwf@>I7V;Wn6b!5&`=1v;xb2Ln%yeM=W&U|rgDLZN zG_uF-?Y#wXs|P4nkwbaLZdbP@M)~}u7iqtam5a%$&rCsiftAkWy$)+?#v-S!BRKl| zHXB3_F=42xy5Nb?VeD0YfG;f(iIb<2DM5>}thY2_HKPJqSw&G8v8l?$_*!Lm+nH2; z5ERF;B?Y+>gqn)wOVD@*pxi$q*FF|2KmzkzMGVSBc<>R&lySBO@B$Ga!_^Yx=V6=# zHz0FD_h>*kFPW5)g4yy6@{|b4+7y>&qGAlV@#^fg{xjkLT|eTVWRm$xrbjW^e=xhc zI+l6v>fXHEMFf#O|^0}RxhdRyNs1Vuc`jjF(s7tdDP(k5aNHl zj#VpiB#=(9ozN7nM!IKnHO}acL8566c~TI8p7A=Tx_q|I5VwLDCXL*`e7BRz ztqZ$(Qy|GVH7hrO@kcZ2g70N-`c@VIt15k0?Hp^N#uq-4tl49PUZsHR>u}a3Q0I$n z@4ck#5pQ&J_FaRP?-hFF1ssUy1xG3CFZCll;doy zOgbc-(t&km$RV)qYtvXB%*Y2O$v($cnFC zBvpPkm-`X735Q$mC_zc@(V$Yff_5^v25K=wUTIrVyXIXfV5Lca4U(Yzx(kZnF8c?Q zUz$OumR0;boMppa$u^UBG~V<{8Zz}Z(N6aIMs&u>S!fq;6BkVpFczI#j_CTln$uH) z+n8P8Mwt9?^-`Q9+4OKf(sX0>{~362)4X;MI)-C#(><=QxHOQERf8eR>2vp{1hPA2BHTZH6*rSTs zOPb%3-G1?wNHPoDahmMztWx0xIfa9n{ zEGy6EM$a~7yIrIwwpD?F3kGj*2OUImM_p`dTh83ZKxb-O+aWMTIDZ!cUH9p%mfam} z&ykgk5{f@ep3mJR$u15_1+EhG^CgOfn)l1~Rp?29XH+mzNFUHBGL&&DMvao`XeXw4 zE0DqOV7|1-{zFnk->JaLO!uu(4hxD^V67Q{()}1y$Zs-Rs?PS%4=*|7A}~OI7FvB8 zMMhZvmpSg|dINADM99ObdEr8+J+0aL2$OI9=>7YX_rlP-Km2Vi99^54emoGC^!NgI zdur{`T_6{M`B5$?eO2j-p%Gi6MfIY6g@x39EFtxi5Z-_D z@A)*5%9t37u^Kyn``gLsMPVaj-=cJ`Nka|K`=I24nTiqnm8%r%%>Elxf2%l*T695h z1%)p}jOSV3`ROU;3>2;8!K&J$&Wu{R3h)^;2WRfA>@GunW79-j6jN2rxJi_1*lkN4 zeClx>cjk9{?Cb&Q-qVAj7ZsiGLmeRV9PZq1(D$d+Rv$~zbtLo_WM3QWqVRqRN*@CK z!AB%gdhvIhsyc0Q0_e(K<2VUyL9p+0W2Kk2)}7x9l5xpS2y_PgY0iY{bfpW_nnd#! z^nHed@ecV{BbG!DQrK+R^W2Wu8b5_vm06Cv%%7LW{i4g*U_(5h)$l>P1?9kjg=hGn zt&(P376P51jF5f@12ve)xSS=r-3FTf8e9j%>X@@e(@)Dxq@WF+r;*tm$24W*jkf=7 zwHAot2O=RbSFQAGbbAaWv@eDr+j?Ak+lS3okMXAgYNP-XsPQvF-Aw~PxAcvIsycwObi zh|o7n(?a;M@Kjo=DN{V3^|;yayb20^I}&zaL#K{5zZ}iY(`2Z-j{E4-Y-~=3@{cw) zLVuytgcn7L`)S?}6}lI+X7v)oZ&1Qh7NK^s|7 z`0Sv1QWJ8`&Bds)7ZpWQVf)2$nmS!3QHEk>F%J+cLFT{5fqrbmW2Tqf)FcHh*QIi) z9HnXz^@H4O^-f+6<(SXlJK|jY&w}mFeeA#<9TOkx;0l6&+48NKU7cRWH{aZCqLIsS zYN*vW?OVg7}dZKJQ4p+qXfjMtDvjixW zDUjf;KT)#9SuB*X6#}+SA z957>!e-gZz%Va2VIjfT=@muyhg;WC2I2R$w5?W%a`JpDyc@uG1>piboF1n4$ZBLe0 zM>T}}K34lhZr)o(uUApHVU0V>jDmj!>UvqvB|FstY6oX#%=>3tq!t(m+2F^p1&s!Y z3Do}eWmM@Cx-d%#7f9rWON&{;u*be^?XjGsuBL&9`8BR%6r!cR z$N>)Zr6S(qReB${JkB>xY$s+!QCWv&W=ltjakH=S|C+!|h&^_Xm1BMG$NZZ1sAI4W zpum-WwBNmueSO|obG0ax@?Q;Y={4*iM)}aA%H@4aV7!1STxs_uCm)UyvnKpmi-V77 z5#;z6rGRbO7}g*`jK%TRv>jQqx6scs=>>X{d`&4-4M`=HrFS766p16$mxhaf6A>R@ z-jw|LO-xN(=^G5cO@ra>0xbs@Cx{d6E2m+BoeDT)t6xC?iuo}~d)BUG#L?#2CTl4% z{a%c<>^Cm8w;r}cXZyowZwb?Kl7F>c71O!TzV-1s-Sg1)^(xaK zhu0iIHl&z{RAPTpeO|MI1Fk&!Pkpd{8kMnx;Q~fHdI2zzmhy%p44>YH{0q!+8>cOnG=%Yeg&!#(8eBDbA$`s-FD#9 z`>r!+8ew~Ua^jfqV~;Lbfj7oguqLi{ajd<)ooLwTY~V>)fAfdF56zGVdEMovy@6v* zl8L^D+d~frr#YPhL@@>aqOI9nQ2c_$silof{Ex$0ePl#jF5qhU? zK^{4!qF|lzUzdw?Ld6dcEuWxnuK$)!a3D3-u^y$EulH3GvL>ICd<;*U^03{zl+-Y6UW-lpz(vgkxgSoBqn7AXtGHZ?p8e znlXtjXzGeS%Jsz(4}Vm)C1FT!=TOn4Qk=fc#HVJnbK%Yj+%;7wmoJvwe!5vq)53M|_Y%Gak5>Y-vF-KM@!i$u>)_k`gh|KP_NPxB?74f3W zqh}j>P|#gHlG=FzDn#gTZBNHnubYBn{rv?jdY)|8A3CHz5&xqU>2m_3aM}CO(y=s3 zXT_iA0`VYsoc|fE#R0ZGC7W$G2aj(O9ma+$ImK`3_~oh8lgpEpj}$X&^DJyH;xrhK z1PR6)G-Y#u+NIOxR`&MfFc6h>Hft;4SKnz4wu@AFW^2>c{+#W;6yJUi0yf7NscNlD zB&e03rn@k1+i$eHVv8_AD}^Da;C$7Ps(-v>S{%l9Kj)Dsm5qI@+&^(}aroA&-A^U5 z+2HY*lLOl|_u_v+F;+aq$|esebHw=lp(eIJiX%rl{NgVAX3dBgtrZbWu(~7zt}fm3 zN@Ev?SqHzw;BEf0qP=L#>F=ZU@S9ZD4cN%4DClzcYv_5#=ig!+s=AjA%z5X7mDeaQ)YYjX*`jIs?i4+S{i_ zhAq7e%2X^ETQHvm)M|+4iT^0PZ7*LVtX^`Z5Thj+?nB)%IpCSK0sO)%yB$q#_h}X4 zT{ttGmOF`yO3c9PG^~*ooVCv1`8nw%UL2YS)cMneLxH?CRVqL&{_;bv$)5xYpjq`T znBcHYP`F{81Sa&n@|?XJKUeR60(ckc#xX-0uZ0R5cO15OBP}S$6ir*54)F$oq`dgfYv@ouJ}F&oO#I{h~z8P zM`j!wDI5RwUa%M4oC9QGiMM?#c}*7_{RI-1MYJ?-->Ct}q3^1oEZD8J7A&#t7x4MN zG29(|%mmp6xcIok9@)wO?N=rMIV?7frr9#zu3uuN-QGcD~wIYK?e!Zaj= z*x_O$EZkUs{^1SB)1(hNCN6Nth{$3WtMN!^TvKJa?F75JZ+Msp35glMGY5QMe!qUo zC3qFPTN8dvMZ|B(?e6I4DJ!ds`Sd3n!`z1tfI3ljzyJ^Q21tpI<9Ilp)PTYRWFB>R zg10%@;6AzgaK=aKK%=JlsX0nT$No|3AlD|DUkVYYB$ci~lkQc3M(cxJ4HxE%XB{7< zZvFpz3^hA$({(H+^`9L{2PIfXYFqgJ8BWYJ7LQRaXW9Xh-FTC1Yg;f%ZR{q9e80yl zvign=D+Jj<;NwWlA-WQnSqc?%1~&Jg{gDg?kW#9^qRH-pHsk1uFqBy+tv5C1PjPNH zqH!MorgnaCZwHta$O_5ZsFuD^74I?iBapTA;Xu;_fcR-Cc`&asPPk zN8WFKTv;nCf3nV8b7uDJnVoNQa2PRokTXtUtL7tZ{D#e|Q`|qwnNrG3uMZbJditS) zZQQ+e8H@~f6D`PYd%)l!B+?38#YOyFG{CP0f7TU%ztrrYwj5#2Qo1j2^EB>AE}xfV z9Ec+!r-LHjq5z`Hu_6iQ(rro=d;j-!4J_sLMOFqQR==%eCA}wGT75HCcQXNC)o=zf zLJ*~QtCP{v*}}S>mPi2S61UW!db9#1 zi9TXy<#<~hh&WSP@WgRrBRtSCb$WF0obx!uNCVGwc{g1{I44nxx4?=7NN=e(QcMVr z380Gv8c9`jkFBc9DjV6uz!iNfI`VHW(`rP7g;-hmaggMSCy9Btwg_bvwIw!)rr|ERE&`f*!t&p~o9ScPwXbXkau=zX0qnmL6ag4fcd~EF0($@O$kD!8=My%?h z;b6gJI2Wd!M%q5X$E9wu((_gq_ySpGOk}>tzit*>bR=%4T~%B8-4SN6uwc!qt`c+y zS5wCF6W#$RbqWVch^+Gu1x79@6%#C{Opq9I~;MpvZ0yFc};@& zn7C;6SW8CUve5S)41O~TBJD_zi4VE3;a=in^6bYY;hv7IS=t=;98^o-AbVhaGwQ(y z@|xkV8$61LXm{Z1L5Mw-sK4*=rC>sSg93VtgZAGZFWz_LA9qe5?O5pQ32=Hd3^|!w z)S=X9AUd%Ee<`WTE6O7q+jd&IpVqMxn}0z z#Q}P?f%qf~InIdDI^usmH-zvA9`EcmF$PXs!2H!9GgZYqEgbU^6Ho!iC?Qb=lXDM= zsu&BZ;Ul~L)x^V((Y|ouC<703gOp%;*^QuT;eYZDqJwcFr2$~;^!Z=mQWWU!_3MRR z$$|f|o^^1#$6xnOpXb(vRR@^Zfm$Apb^~(1w)1mDj?4R80guVAWn@HGx?+uEO8-cc|?axF-6Fo2W{7-_)*`d=Qt|MPx>VvgG zQw^b#1;t0Mr6{{)ssVm`6k>~cjON>7xj%&VPrkoO+!q< zhIGD6H`aqC#+2Hs&`qkhiYX1~vIe1BwQ6xSUGa^Qp$`Ak6E2lM>9Z~$y$HT>VIcc# zl+a%7>OGSo%Uyv4>l>Bsg_F|OOz?BGxHnRe8M~}u4@V8z*6=-2C+}~kLW%&i#s#B3 zZmGHtu(xfXu+zMQwoqg`Gngce;HslFC7_TCC^VXE7VBl?#f3;NBBx>}eCLDloNnpn z6~ak|x?qHu6pD!OL}d#CYFJ{lW~0qWd4@VoxDg>0b>XON@QIOF?iRPZa$0QzTlJ3O zpCWu{GC36|Oo%D99Wf6JuK*L6e-6uEpT7$b?P%G8*iQ_EXwJ(_IlGOaK7IdoU9U(; ziSh6IKNjz7>H&ft{oXFrSCQ$$s?G1`PfXero(XZdp^R~gbU3k6lQX2!THeg*ByPF6 zc7o|7?s@I`2*r|QQ5-}3%4vwN>us%tZ(YmJ>Rk4I+iYnQS;J2yFv z^gq_KkcAA`&R+gNE*A`Ss@u-$Tm8Z%lF%A&=E6ilW0Vn%pQz@ROvZ9e`=>shpnqp% z{i?_)iP_otXUiT{0Wy+Djbl~RhCSaf&UxIrmeO8cTkl^Q zce$;Pwb>(+SWcTBueq+?!o*&zl^L)0z7YhCMSh`v7|;C@y=F#_d5S7cqqs@j9szR8c`MrndR&9_p6EGD>*+x z{*diYQmIt%^X0lhSfZ=&{n}6`1JlQk1tXk^AIk$XYV5Wwi3>Uf^9FFCR^q9!lx2DW z^`)Zz+%V(hLvSMxj8XVKTG0pUp(X5nb%aPFC05Mo(+<`j0BG5W1 z++{{E90AS!ELa2g-PhyTUVJW7nC)73Fxf65J%oAy9_84yBS|0jhj4qPs3Z^lxR!AL z40+Y8jM(w2TN#-t^F0ti-zR)!=@QtLT1_K4*ww+Di2dK-2B2<#qr_-1^>>U&kakj1 z@gRdJ*!ZNvk&dnAS1sm=3VTf}SMWdL$NnbzqBRr#)nvm*2F58kgWhZ-XW*L|!wZgE z;cGvS;Iog>Mw#M9NRmxy<6m0hL*oODpzXkD?thc_1(8UNoAE>Qec zGP0r5=`NzD?K0)~OvzP6O*{{%sYI{Gn2VI zj!fvLuVk~AqE7p*rziWjL=otB{QNHBfI+$Y>L4ItSPQs@K5Bhl*i!F-FgX4PiQ|h+ z*dx{A<3Ia;(M&~=+ilSe67q{DAzWE18w`mM24NyN8E&<hOLpHwH>EDyjg?IZ8JK3!rz*u%?c%x>(15^6nVI)fK zTX#jnC%;Y)v+YhF`qy=&UlLdQpJj%*tBtz3pDzo!R5Y8(qhRcXxnPPiUg@I9)ay66 zMMJSu1)5Mr^n;Rc1^iLwk}Xf8bE{j6JgUI3jT z9?;YZAKB_sExi~YoeQOxJziFFYG&p=?4b5?pXLCNKsk?woygSkt?Yyrb$R&@ zHchern6V)U#>nE-rxW2qH{(KT#Omg@R`?}@gyQ1aeW2CP)AX<0&uCun*3QnSXp4HI zF@}5Q(&=$tCkDjnWw@j)14nHG-rv6#+ZoG!mc^~ss9zI@?Y z8sM}rI2e{~I1u2vQl)3u=YwY|k)C|KRoO7{{(GEKQz=ee*VSF0%1E8J5@! z>75S(fYg0YDYwEQ)As4!*DpkwL(wvyJI1?>F2H+_<-X@D@OttU5nX_U^d|9UpO1IzLr`{Oo|T)3hoVso-EL+9qf&{c7~?$WP~*Mt=^(8E#`B;wL-3*c4&!&C4SIuz-7-kavfrJvNSnI~FO5 z56HnjhDyoVUuFVlH&unbZxkgVpIcg_xTUiF`=K$3_sqH&6-!Z%dy*&>@0_Bh+4_+u z))Q{4CDcseR-repV5!<^Za%=bGe(j+!VywhZ9bz{ro9FSaRu!AK72TH&T(qCZ7UQ4}IzOY3{#>MCypHh@lX=yW>^iufh)sLkBaZ37EP_ z%$MrrNzQQi&hwRdeaqz0iYFwv%k7JUbc&2#ISt_Zz_(5w&mhHk`b|sZT7cd*D=}YgS%GP-mHLY*F$2G^CH=9VJ)=moG2#mC5U0}* z4azuX_N}t>(^EvA-f2P*d0*PMQ51HlPTFmTj#vnO*er}OEFcVjbQsZ?ENayi>l4ei zpLQWiNXA)6AY8~%b3rny8h9pm!YFvkzVrNlxd4OTY8R_(eh!K>#ScP3oQiO2Kz4LI z@l@G9lavZDEo!f#83HVD;q)u#hFR%1oAPG5L#O1<|Ey%#75p3PA z<+ayGBFH~G8Qp-kTm0-RZ~=%tr{xDHCjkqkLnS3l+Z_oV?u?&)CBsrDTYg}BOWaZr zp1FTaFr&P(r)v1vPG2SvAl@ybRYT+G4+Cd4Ntl?H5F{%ujye*u_vMv+rDV7WaR`2$ z1p`j73PcNE%MFjLNgxQSHh%G{YpjQ?HaQ}P$d}W^<)ewq+9V4m3riAP(CV0-7fa%@ zo|Z4x8IyxxVi#<5Aa3>83U?-m+nUoE(qyB@NDz`1fv=laNH~!<)P#pH9GHwJMuqB< zRDUjZ#)WFH*9sLhI@S3OkfU3F|G+?Aci%4aB#QpU2m9W2=*ogN)GpZn?yR@ceTl>< z_x{*B&#QY^um54GR$pJZ@zm-}vg9W_!3Ze$m@E9+ljp<^PGg5qIO8l3jY|oc%Aw}>Fb`?eYueZyP%uH6% zozTB8X+C@6!EHDne^*!Ea+obLfA@->dqD>Ri|=Rt&alPd?nK}e&3TWzu^WYPsY3D9P5_!N&+=96S_${wa|g-uWVfO05e=yZ({ z;VI5O+1NL7H_2FvV^!y*p|*cPwv0;0fvInQTaRd zX9}nXszL?(ft=PVhpPOotkgCnW~c?D_;KMDKkZivGbBe7jLgvs934zHN#J%U4p!4; zty(b0S@hwk&HWI;=Oc#q0Ass(#QZYS=0&raG#^7iHuE zHAdP*j=ntAJ`)^TJUL|JMNzuiUO>-y`VbeMe&bq6tkM8`K~j{eJ2mcur;JT+V#&aN zgF_7835{k}ZPzzm=-HaAT-fn@E>tC|N;}XZnk-MWFE_)ySL_eU&ao~Kf`A<648usa zAr%k0(zTN<%kD%sawb9!CsON1?6fwab2;t8uzNSIXI@Xrq_b?r7oOc6@aW4cr0eA* zoDBh~!1KSUI4sg2@FF?{f$0Fj)}pO_U1yx^SB#kaOv4$=3yl7PF$rUtemi1sC{}OP z77crj6Zos_DmD5N!#8#{IR~tf8WJvZwk6^obR*a}%^p&#bSd3_ z0HbZZ$nfu%Zs_Nk6I%WuhO8fT^t0*(4pr5AK`}JrU-|Ar*)n|E3Oy|ahm`PSi4n=Y zPvC98@;=-*q}=*_NLaZ23vky-#4k z&$utzJfZO_P}i)h+$q0_4X>9pXL+6~G=ubGNNHIp3k1wRWOjON!E(>m>oxqjyRrDS z{-)o4ghTjWuiQnZEwLBMj1zG5WJtQ9cST1JK^^zc>VYE`1LGi6;+lw!0@YH zg}8Y~t8&=VZYqd~2kY`WSV25c5szKzsU_q_D^*i70$sPkVMQR{sKpf$R&l`eH8}`W51qB72+`PQ2f+5vm0}a0E_WHkU@PAB?@^uJWH1)V@w<_xhwSL$GNA zUaw5?QGs1K3qM)Cef7;rAq2FdS?^*M?J}tTsqiSnwcuKAR5A%JePcF|BJ&`~d6c(O zO9tWt*U}=uVKQrpPAmj(kc|X27Dts|sV6@@{aslpp=%SVu{BB6A4*CK?-@qE=7F#m@XX1J>JDH!IaiAIim1U$oEx;osME-W5dobE3$Ws z&sz{Nu|_I=4{eH~?Oo9<5{E~7sp)`PWSC6Ix##cHg_m&n0G?-MNs{sA$<^L=u%}Gc z7Io6WfbM5%eALZ_w-@&LvW=L81b|63Z4awHP`C{>gCqP}a1jbK!`IS-GwbTseb7r) z$q^bi0Ee|uRo#p+l@y?DkAAoQKr2qLySO$PdPO*nwEqA}NWwKEpldp&kKHQyHGx2@ zLV@aUBV;cEQbbuRr6P;TDHAfi8w-LP2P!hww#zm|4q<<2J(XF=(En;+f`oJD2c;@3 zz{$79j_gO{w1p28Q53Yk#<7{V6C(6S#pRnw{V(8&k=9dNE-TXDZ_|^`ZH;1#c>h$U z@bzEihPZlK3Gt*gLOq-E-6+SOH@k|_aW6ktNA#^gQuOI*uJhHYH_X$!=%n)?e|g z1YzJDjK-h2+=KdF!mlhEY(3A}M)6wWz%*#qdrL8X1I1a8551b~6J>Y}taJ!X&K;bs zO0ilpLRnp5r1LbZb0O*Jxxb5vZPoK>rxsOWq5X)G`Kl`)UCfBMezs+THQ^JCR5#5Z z4)m@YM=`&~F{^a(2ld|w4VdOW{r}uc7!fDjY6D#Z*7>v071YfBW4jiHURTs9fnxSS zB?^L1ieW+AzLYGy1Ppv2jCM@oYwz)m(P(h|y=Ctw7q{C$JgVJ=%jM;AkB97$YR}%! zKxhCA+=%0BH6F)P-=Tvn!(-q$zq}6xcZfH(QehXcm(BN@K8nu-w&hp4!^6UOU)}pG zZt^hO1v4ww*0_{k&w{;f_?KY-PJm5_&Rap!?~;nX(76>A4Sf{9E@$j>5i{XzO*&Qc z=MrKyDFTgMY$%_{0HX_=D@Fh~hnqk-rI;fAKNU^GB%OS%U?+LBi}P7zI~Hk8c91-W z6$8Fbh2wBKk{Qnsrxd?0VA~x;841M?3 zgx!ql%E>P-hIv%!L^L-%kgx1KG3~0dLE^Tx84X^@pVB6XJ7+^C5_UP8PfCJXcqC zI)3TOwM`NF9443aXM;5_uU_;U39RAaPx5<4>)755i6}pa-&rp0RvzismX9mr9EJ#1 ziG`BsPO^j-X*vP0KLM6vrBhCQC{)vrh?=(@BR}YBf`1U_aFJJQldUv-laXT&&yocS zER@ST96H@9G~Q&`Ajva}M(M!7BqTwxs8&|%U=d8U@MImR9qd&92L2;BL|uD(eRX@f z(j&thSX$u#_G+N>%{?an4s|*8)KCQ&O;Jy=pO%(>`nE`|tj8YB2hoY~qz;5yc|1le zTs$(Lw^K)%o_A365Fx`eG07|2EUv{&bn4O+$fuf6c1Wh`tu z#d+`*8{oC~9xf3+6DO!?m^tz#c`$7nA6WLIb&rd+xnaoT=35C>yr14Lk%6>FvzOD_ zvTj#yYFVpgh1;`xwsn#b6x6CfxCZrZ(4Er{Qw4P0GG*d1z|=mui?ZqI%iZ~V4WH2W zn{j!~Tf*CW#(Yln|95YQm}fgYru8u>9W%<6MgMU)JKB9)_5_`F-1T4i@u%)TIM(sn ztm{nr`y!!abb&dxw(GvpT~yJwpvTSm=!S?LQL4^m;5J$Vuhjuy)>mLvw>|iMw9u$w#eX{c_#vm|J%2suO(_CZ6*~F+1K$YX| z@N~>3@>Z*S<$NheVNp5oF8Mgb|Mx{i?$z+nEd7~eZ^92yU!Q$k^5mG`_AW@ec=^lX z=dACO!p|&Jr5U4CDBY|LYTMPkw5@jS?jL>o*R!Y>D?@oXF1FWVOS?1wjr^^A;dWWe zU@W)O{-ZllNoRFZAmlg6mjF3+nfy8yOI7EaDJUbnA|v)`gz?|s-AxzMiSdd+DLDAz zq=27q&185*QT^)u zQ0ioE0AoDIfF9#PXLL>YfR^<<;^Ea3oxhFkDu zZJx;Z0z5c#O8ffu_O@S3<6PzcjE@^zuhhuOM&T@!@zv+%ACY^BpgQmc1HEZ#Rj;$d zYw)*rMQ^9}bPD{5Y4bM00rk&*$>rvjnBou4%Om^-8&>TNy&GFNP7UVhim466vMCzl z#^iB2axU;-2!I0<7dJ!Kt|TcwkTJK<4GX@$zMpfG{yl%FP2^jHJgLTH&^)_;gtL1P z+DK2H5C*dT@;+2H^roUXI5_CYZOcQ4(4$M(IMchG*^2E{gj$GrJO)*s*+11eQ2ipI z3`%LRJ7`Hc!xf1QZKhX3sy*}$#%5QV@{^}QNlHTC@Y#d!%L^I8G?&Bo0+XC(()iXPkU61)rywQ`|_jJ7>ms`Mg6_7;Kd)OQ)u@gV`u- zw|2?b5)ZcLd}lo7egFni!Qaw<0UvgmAi@dp(5-dBAfbF}zaC-T`P^={C2=R>xjzem zj{mM;5@SCY=)Vz+3#Y$aH8d2kAJ-}pGHjK{z_a_$-4nU)v8_y1xj&M?KIQbvRWpPW zPl@iZx_~K%O+e8%cnX*x;Q!czhNPRgPI1i-F&a${jaTYS-A7j5HyLzc>CVGW_|t=e z8&fNsZ@jr4)2&Y)=eTX5goD;_T2VVFeA5w3!AXGjnJ+K=cU3!ityQRhI~op=G+{PA zuzFpV^YZC-4I{QBEBC(<(f8-YC0Mq^=PsIPUFxmugf+9vNjMg{YX? ztxism))37;B5as!H&kAfAi+hvdpGmJ+?D2W}e+`;WS|H(rC2o63Agg2BLGR#I%o~ zUg}^-kO5n(&%A`LW#2JCLcOb2a2V0V_DK}wTw7|=l>72hw!pu&2_yd;OAjS7p@%8 z42`#t8FjTxgx2YUTojo4mrJ-4H|lCS9H+g2bcO4ZO)3|ab6%e3l*Vr_rvWD(&L`msp5xC3bZqqc_DXO1@9?+*cCO3YAqEC!InqKCZ#)mV(-o zlj7bFl@55)K+CnAtC{t+0h(==q9f|F7tQvmDAGuc8LN&dIz>k=h%59(uzLB z*Y4~S+SE0u7yFF7FiV#p?aC4_slgtevc5>wo?PQKaC~6vly8m<{V#)BuC=wS&}s@W1$^q2%v&E01DONSik;Cg?jt{I|H$;9r&X<}m6sez|r5=JvMXP89g(DEhZTe$uVuj5PyEKQE0W7Fv&`!@VRbH;H#ry&jdjcCR(Z)tG1Wj7)^(KU4t99NzyXOt+ZhQB`rU*^*ur zR;cW9*6YxVv~JEw>qG2mR-I7wEIoFbR_d<2Mc0`>E#EY#;KOxN%GuQcJN`=hJA5xg z4ebRqpFw6{(U+E_K{8Vlg^-gzAQO^ikPQV`HWd)e4x%$cMFIQ62h9Rt5Lrh)(qYqB z#(V<7M0lWQ;E0>SeK>fZ!R^w#sbeJ5)UK0F8ST8$S~({9*m^ksggA#@KCdAE{JWT` zH?BMRBI&+M!Z%p{d2{q%Wgi5kAmKwWGif#l>^^#Wh1d+AODtxrR@gv(05HfHcwl+h zA6ma+l;X|t&=m20T_Lm!jq`0SxCRSRprazb=RlJ#nBzbz8Q3ElQp;>2HY|(;Of_L`%k0alXcvV#vbsGs>0mBg-32v@#%kuS% zL9`=_#%Bdw1G(pX&q@-29+xG%Bsq^-1mp~Vm{bA=*~EV>2i|le2hU<(HNQUi2W%>a z;eQBDWbX$C<8KCnGsHN-;kK=*0BnoR@f&2pCMpc}?(PUJg)|m*tiYbFMQ^S7*OG6u z&r&-Ifz{_{R;R>kDxDV3p&6TC8Wk$7oN^axT-t|m^H}c^! zIc)Vi$*0m`CWT43Ga(Bx!l_*6vUOqJ)ur?q%1X0XmQlva+^{GSN8l<$lm2Nax8Q6t zJnG9c#vH54eOXRX=?kU5!PeD--$$y_nL6>$;4XRN30%kF@rE2&llErnj*t!x!QQMc zKIViVL(A#VHcmj=z{|w6I-dpqZvB1*aBvcC2=>%e#gbT|(YRjsUOwZPfZt;4i(-?m zJ03MvX$RF){pPI5-x&-Y?*bd-0*$v1psyy?7xkyCtiw%T{wK*?6hsE;h+GZ73GW9c zPGtHmvq(~NxVT;C^buW9$fx{OF>79$oy0vpLPkQ=)Y=T|yuXWobG))QAoG0m%ldk^ zt?d3gTUso)GG=4}*2HW1E5URjF_>So?3+Euzz^zQZyP1plWhj*qyn(H2`c8IE8!4R z9sMX4v|nBA7i5pmh|*QaH;6kf6J_fBkqDpc<(>U;ZFY$S;QS! zZ9&D8rx&P-%wd!aMk2z-Q6Yn)WTh4urXz-TZN;(u%H+YhUJg* zk+f(@P^ZAp@C7Gfi-T!G{bgi|Cynpcwj;?J`-XRHEu*MFX2Gz zxm}-QZIO{XEi6Qo8Pm0Yk|eSR8ty<%>W&BV4g z^(~&X<%sWKCKIfaBXfd62*9B)1r;NB`lhm#WqN6ZKdwKu)OlBM&pA9|+ARG+?`_HR zA!K4eUp`&eY?H!kZ6tDvusY+)#Rjj6>=ZHHm9A_vZFk&`F<(%{NZ;{qCnHdTFHLcM zYJK(jhu1d2|GdeM2s*B-^_>sX4`>x_n+Y>KvJv&A4cik~LN9?IqP?+p14uXgEN^bf zTRU$Ckg`6%m)Ah{DzeU&w}vTc<&{XhiHCm6n;8ZMd?cD?;gN9@bh~Zs{z2$Vq%`D`wJaF8Ga!G&Fc%r<(I6Gry>| z2YI?q9$CDw@Z$cN_*m&{x+^+M@8bxd9|#6mz(+ekY)<`!inGq z0#r_D4Y`VF3!@-mVnT`-FPj)I`SAXcyUK|8T7t;Q#N}bQ(%vzw)baQ@+>NI{5RZc? zqAGKB@-|;K^j?5sfLcX<((&(Ggq#Q0FSB1v?hCe3xou#fncM_B7Ey3J@am|ND_$y% zwrF297pPPhV!o&YZ)}b(o@pvU9i`+u{aC$mI2ykzin{{2%#Bz3aFCM`**yjUqxufq z+b|e{f&#{bmytJ5Iy9kYl4Li+#x>DrT3<)q_3w>c$lJY-d4VC+-+(zdK zpYL69xNG@7LO9gd&U;0|XI zE@4xhr=~YTxLq=u+Ki&}NEVONvlc*OaJ4ri?Big%O^Yj%WcQHWZL(Pfx3^6xhMlr@ zAuTBD2i@ypP3!Bzk(}251cC#~&}^5T)1nNwRaTw_;6Lguq^xqb%rTx zio4EkBZ}v|BU03mok-n=iOQWA*&cPLbwcEn0q(cdA#a_5-|&@U()_8N|0;!6HyVnq8udDe!1Br9+y`X`9D`a zZOh6pUjtQs55S#A1>A3L!MpWcqsHQJAWdrEze9hg4+={>2utTE{hsU7dUk`hVw>po z69)8QY5Dj$L{8bUgHr?tf)g9fBw-EV)29)z`@bIagpgJ4t+mHjx|H1dYPg}~Vmr1b z)G)}{C{&lzXKObb(p&fcLv9ER6vvd#ejc+Q)n~uzWNZ72f6x-j!`!&JAnIrPfKh}c zU_6!gBw7LMXYFwu&>G^{{yq%s zhMYpX{n=0u=H!d}_GE8x^H+#s9^lY+c{0IHFv2-iq^!H;mnE_zM7@ zv7p@Eh$@Ra=a?cXczAMd85X)iNa~DxM(Ywwlsk=T`rD3GmowJj)18oM==5)pYGrV; z*cgy|4bB)9Xzp~vzpqE+an_8Ke-xo|j}QJVv75;6)Hi|q>fh&ow|Lxmi z{V5F~*wR8UeZz-bp@NSXO&&3?hzij}0MX0kU3nYbx5))VK8|KS*_(0 zvFiq8#wo(cJXS)4@Ep9LaUHKrM$QhZ8SZ+<0YzVfyN46hAYa9g;KiEe3dr+eqp#;k zWT%&$a268cd%1K!npX>%a33i}eB$<~gvWM5j4LA!mz_w{b52$KB()LvCy9sMYIJL6 zBI`tjlC_EaDtOfh+;O#`v#&x#P$cbS9u<<(3Wt(59C~sE;m;eOF4b^Pg|qsqXrq+= zA@MOm|BMod6Up2E5Ov z!m_kxt>VkEn@qL~2#H{!&j7+)Js97oBG`t9nOKf!sA_D#Q0X*a8+Kno{-6SlQV|n| z@Z}}wjQT*q07tjrp;0D)>wmdI0mtjL{j!eNFs~miLWv<$DO(^cO^P9OtXmL@G*pn!{u@sTs8*4vOYOt51 z`Dg(c!6~7dWq#j;)v9Tif3-~3HKW)VYNN4(NTP$Bdzv8hMkiAcqYoJ9==V6hNlZh3rd6zdxhU&_PuM+PCy~s$Mez~_@$?w$Pj)vDxj5_{C%q#>zibyRi zZ5#3*x#Dw(88~q}vJ;iK4jrw98UHe0LIM%NzPO=J=v*VH>PWjShi0EYc6yu8ch@j! z1oZUDML7i`e3r9HubO6Y$S$vv{TTeBHaLlmV$nR8UhrsXe^M3`6I10?_J8>WJWO0r zO#9yc)#t2-_Q;RI#D!*JI!{LeUjM51vrX3BKp0-ijSICQnI`p$`U!r4YN(c z=RaK|?^4Gj!HI$lv$i89r-Q(^0Q#5V!J@q5ac(D)V)55Y$iTx#4B!v-2B?2>`DNbd zMS?G4r6{z!_vSuZM&nm?F|Drpm7?c}fHKgA0)N;zNiEPQ&sU4f`e#Rw@m%s^RXq+a z$?}ogW}Y8ufW7`i)%SHAP`q1PRc@Y1s9!a=i5EzwQNZFAKdvGU9Yf&R?{0O+Xiu;?R zgp9lhiZjWJ^1-r92(SUiWW|!GJ$&$<@KKX1>u4rq(4@Eq=^|mtfB?u$e z7`OX;H&w`t+wSe0H1uW90!!3#ykpD8J4IBbG;97P=p7>Xz876EK0d~)i9umN6*2x( z?Z{L^r)74gmKoL*=NFV+BNm}z{}>a0xkCHaFGXtq3x+BGkxsx+5`#z9yxkdCk|R80 zqT&d42sNWVI1XOrvt^*u_zzp(A!>^(sp2%(%aC()oYNSYmX9_zHdbn}wf{@L-*7er z)OhV_bc()2I(Odgj&uMjl?O=ck1dC2-oCfB)*nLq?%M=a2#AE6;1zBQiBYsk5PI60@8XfNeU3_bGh}AoU(~nzsReV^$MtqLGS6?3 zEW{giCWgh7bTBF8i~eXjM5leEW-c`eJLY4+XoEZ*Kz|4M?%HT9orll(Ob`AY(grhG z1v+D5q9h`BCvevB@WMn%>dpwASU)>{BdTh1fL2XPvKehsXCi@n6HFsul+X0wpgr^*hG8( zLb)TtJxdhM*@r4aM;KqUY|TF@8*==l%WiXKJNkNL``(|!HD`)gUuSq{@!$wiV3|*3 zMKsfoBZA`Jf$(33>#=L6#?Lz;cT@s2$Oi(NZgs|sRbr{aHn_M`@aVnrx9IeE0GfAK z%`0mu17kaE81cV-8-uS2Od{dv^M-&{?sir=XI@9rKAyeo=HDrdw}5VYMwKMh!tcX5 zcz6wb);#A1Mg_!ucjiY1)}BUWD7NX>zU%KCyO;h5e0isjFnphK^ACnxNyQ?^-;xV0+)o=DbPHT;#qX9d;6xMt@VTowU z5FtsK_b28IW@MQ@|67-yd$&GQ`jV)69_oVNL@vp&X$JDU^e1X0scx?bfJ^kRs>8hn zAn~-?^jh#6E318}jL!d{g2w008zpI4>reLknJ#lZBNMdLJtYLX)%RG+Z-(qG5B>dj zuS?C97!;nb-{x4O*KF*YcDG@;%$3A^BuGDtd?S4CrCJEPoF`;WS*-DS4qV-xa$(4> z9lMK;UEU}ViC$diFZf-VeEM!maMpC3BDe9{Uuius)@k)R|CNA2MWt%2BpEP1T1ygg z%oW6Z_ybhaY+G)I-C$-(>~2sQ6Lb5iOs^UDYA+K$wj!TC9o`XB76vnLVJB!{KPU-Y zRe;{I0GHY<=NKbA{NraYQO)#>r^S+hM@xmol}9%ZW<2LYw=7dTZiwGaUK8P1KZQ9s|93T70(FJ z^w^f@@OO6VeuF;iPgM=%VtH7G17c1@t%_0EiQgCR%0ae;w!>lD-P)>94Xq{6jqi%E z$OtSpA;egnR-u++KXD~rXPwzSCFjP6X0^8-@LsGLJDFG>r+ zBBpK>8PoY2p0|+&rK%1=J9noD45F_er&(1fhzkUhCHCsr^!MX(pXF?L;&{?V<9N)N zK9c>&8J()B1pi%C&+B2rm`9`LYD^AZH>JKzobP``n%gOLsAB&DuGo`8-$Kl!UAM&Qy%aeznqh zca*c+h1Ui{0{9x2;dDdMi_9&&57COsrV+@!GMG?)=b~da;j8iJwN}k%Q@`c2GH*Yh z%1_YzV&A(VE(@hOSSrfBaY5+6KR?%neY)Zx+2?<8yi{q~tuQ#L zVn;!B^Luc;&+;oFb{wcC>5A-#HkQJF;TUe``lp}JP0^ntMwNSba98YZDxUrK@5`e@ zKMh@bJ-?{x{8%v5Rf>H*=XxVLlwV)Gzoq-~Gm_vM# z^7!6?tiJX$l+^Jg{#3pi)q>%=*x-eOBjrA?UH;?4|S@<3T3R$bHfOYA`JtZg-F>HSXpX! zl3dEh8gY6U?w>`!_}+!Nw>3s$W#0CWvqlrmq8Fn^5sRYJe@xYR98FZ1C`t2r9KJ2L zKUIl!ddp>cPb`&XU4YfKO!ZxAuzRwy(w|WhO9|Clrb#$wSlz3-PR)OAwxo=~$pPfF zZaYT{5pk_@jl{RA%r!qD`uEJik8f#rH>U?b6&geDCMuY)J;evk8vacPdFyY<{nl6> z{#TLu4;mIyn2dren||4s$g1SpsTo`TzbU~d>9Nilp&Di#f(7C$SmYXTs+RYJpl^4S z6p^8?01$HT(2MzeG7zbym<|+fcDtmxeBu9mQ@yb2cDZXY`vsFB410;|b1yrG#~}Fo zOpv zAc}ZO8VY!ato7)q%6R9)7c3G~X}4)oxE!0`zsbVSDjK#k7d1|^I8IN(B`bF6_2)qx z1z`k3T_6xJKmyJ&^b6CJ8D|?-GD6wK5I83N?Ix^fBDLwFqpEr>o?=n<; znvIIFyCEU%;8AXV*!1{tI_>oT+ins0o07;0cyf1m@F?%n@}gJ@+Ed$|U92 z^T7Mkw2os9+kp2^jJFZ4Nskzr!_c8;-N?GH&PiZCf1M z+jp_e%P+chf40`x=l6FVC1g%SVvpglBgMRWcQm%; z^WkO&xFfnq9_gF-rEpVm@zqjonUy+-)a5#>t=CEU-ZSa=FP|A$t^~7wi*gu0X$yF^ zhp2T0)B6kVT^UIYJC1RR+w$>F>Z9#{3sm_pKv;3usEX8bKHuOD{7!WhIAfUlFiK9E ze!DX7u<0$})^Tmdy{Xi)m93~MUC2nQT{a&g^t3g~kHF(mDb{ZmXl)Br?AGX`ap^pV z66`QD60*D!u;B}J=^LI~VnciIKRPeJCi`%P zB$dy4_JRsLuaWrVeB}qXOzWHBM900t8}0a#K=G9`)UJ_fi@|J9>~XmlC@RMoikUDK z)D+!_cAG47Yrd7}Bs2z|i6c~jI>i-oBz?JD{K|d##1(tCT;*jv*GmX=Cf-1h4ElHVQu(Y)CkN=BeomxCGF>agUo zh;qLhVQ?S>1pp}H+qVxa4eL!bMKoB5m`Z`eRla7-)NjeK+b+1PubTbwweh<=YW$6o zMLjP(mU@dw^#Hx~?|K+8QJ=L$aJ~qLglK#aM}xW88=pL;Xtc*7dwB_ed_a}LIkDtd z5zC@L8(5QL%qG)=t!{YKt=vw%2uemZIR~KgOC66rwZdWJ5$zk=$hroy@i+N{-GE-| zQy#bdR*S0fT1bT2>XmO$RxS@5Ws)S3)0k|QQb5X`z6D@J(iw3^5)T@?ZFM7GNOzZ^exbe+1!rul;i4 z{+@b2k?>l?Vd~>kM$6gvgq-5Lr!9}+!TrMnUXk^DR7?mhL=Xtcy=4|A7MGTad>z63 zsZTZ|Bh&Aki5?5(4XqqWZf+n@LIRVH?qKuM;POjal7qJo^7H$Pl(f0<^*isDFI7#N zF0<*j51u=mR1Wu#0>_ymZ|n!^LtuAG#Jn{m?vL{>+Z zRT*PoO+^@jLCr-%R50-l5^OT3>md`boOrBo)#y^64W9v}^6eD9(>nDpJ@Wwro1fLk zn@NB%`<(9MMQ1BsUAY;}_FRCQ)(6M3E0Rza#+pmODhnM`ZSG@Q9I%SXkpZQv!lf+<=ujG5Kwn3&_7D}tAys$wV8GoBz$A@bRW zYc_AehxQh4=fj(qIn||PR!d7^R&5?x zemG)iDDi2`vsCZ#S(qL0%pf(e_zfZUuI|Z5n<8iV)Hf?46)}3mQtNEQnC08&JFw1m z$;+;tf{d_O8w*h2IE*qTU#WdvglYNLOT!){I|qwxC!1;K)68#Mx*8+uUBTNCHGN-y zd=WsCYFgNqfhTV0v(k2PkMFWp793Ex8QJzhINcOC+_<)v`${;%c_Z7oZb3~;9VE*F zhGpKg#L3}F@xC2q*B$@D?7Dc%$DyzMZajI>+u?xVZs>1LePccqH~w7R{?H3snw|Ft zKe!evv(q__B5qr5aJs}%&1IuhWY^G1o|KbUc_8oHZ3u$>8i62tRUb&KLn9G5-|Sj_ z#3&MKfrjNDDo%nGhw=4me-f>D z>TNkKQ&gqlwLfKM?voZy_gkxHevOxtU4`Rd=pFOidpRSb){)O}Oz>$X-DbhmbmE+2 zSlDv6bt5j1C$>Bmz0yrHH2v<>O3_4_t#&49y6z^NUo$JXL~zdIPhztL_2krhIFRnS zYDX67Tey)7y!$;{MCxcq=thkLNrSh-F$>;%` z09-NzXv3XkbD)BG#Je4SzYM>O-l%$?dLWP};N~I+ZqtkuO9N)=Gp?f1(w&uwmH|$! z<>D|uL45mF9hg@B#QdO^uI;eptO;KR;XvVxDC{G&%k!G*mb;Odf?MRLp;`-gW1jo8>|!dZ0>0 zSHK(ILc^x#B$IgpcT^a>PJ4F!1bp!}SSB0A5GMSe#s#0Qe@T#PeqSUtyzh(}(Xl`S zCebs_Ijg-lK%n6-(&(q@Gw<#7{URVTEabJj7L~uxyAa`VBw2y`7f8wx-BH(btjc3N zr9bgamBA#mO(^*)VD0xH+m#2<(dvi+M&Be}pTBa-8}oTrDOR?uI8<^bo%dx@T(!#L zsDRAJ+v%k!5|8P&t6_{jm02%6)3HO7H{M_MCoxL+s6T5XO}W+W#=Lc)4yTUtlk>;y z(M=VhD1ndB4`7zKJ(ZcgjhEZiBfjCPoF+KrF$mSj1jE(lyM?Rt^g{x@-IR*g_?IJghH6 zMa(u{7(6X67iz*L@JhPN3oGCA3ux~MJPiLq z)R)TtxmTK?mCIQ)kjm{o3xnEetn1%PAeH^Xh#<($VN7`Y_g)N5^LOZ?bmWJPZ_0{%7+iuX3zU(~7gOm1a_ zu>BDO@jo5aog6r{1@&b-<8*KH<0n<>&JBiz&HU*RdBR%zA#EmbTu&}=+b@|3wTtyD z(OPuY&x=wi$l|fiFwz75+}Uxo2ge*$l4CqCp01`lAi`S|iJb-4c4 zyw9}Q?V?UA`uJ5!E=SYt{DQ1j?4#MNy*72P_HDfJ$|v)L{I<3=w5~$IK#86R@p0yg z%4kbwnu}!=a$3}dTZb;5HvtfPBS2i*%cU~W55*ffsOX=-1yAu1-M<-wJS47hGm-^>vPgLZT-2dYOv`o!BcYwqF_5#%>o?R(}d5vD~)41^PbF7y{8&k zJ|)-aE`W2rPTD1?rh6(^;tEU4$u-BX%SYc%9Dij)_RFRFgpS0W9oC;@JvE*t+aga< z-eB<&ot(ye)Vld&Nb;`kmTjWPZ|=E0k3-QP&P#7hK3BDbVB71H=JZaqGrr-5b^lF& zAht7}AP=ZOh3~l`Y`1c%Oz7C(qkev3ujvJWi%hZdNrp>~pGnXYv&yi>^)G5_Wm-kn zTmZA$>M$5&!$Fx&swmL$qeE)?YOw}Wm%Hv;1MT)&R$W#j%wg=!dRyf zOG`3|PiM0=_3O+Rs}TR=X@U2nHTgC z#1pXg8BBJHEbv-xbYnn-3BBBF50tUBrHNEp>oxQuP}CMfj1`mRs|phnyd}UFs{xPW z&*T3}HxOXO%>%Gebv*Yt*a1=MA;}ou)IC&sbSv1U9~#3)yuTKcl67QC1=v8*+8aT2 zZIO6}PN$MrVh^d2+19g*F~?_n6^X|WiavLL7hiflRX=JK57_UADzWQg^tYBfbhNO0 zYTHG^jYk$19(1I?3CkivAJL5hDu`5R%(Oouq(;09{?c)+ef}ewM_W~bgN2P>6Q_5U zmFXcm{awz24PA@&gPMSx=A*{9arH_n)bCz?wEC3{zMoOVI@wNj7)W+maKcZ0%z)~P zbz?d&_8m{NrZy3G*Pl)QF+&77MHC`O4>ao+VwbOv0c#PVwyJ)N(^d7aUmZoNx<3ZQ zJnmH<7mjufUB;r#mNPp!YOZR$wdyWaN^f-e@d;JU%KS4k8wUB?>tW4T@5W4CNl5u9_uODeiYhj4v1}ZTw4{Y)ur*EKGjoB zsufjxU7bQe_Qx{Nb+vm0RSK^5XhYYJO<}o&pCinUsyhQG==F+d4U_jc_#S=wiP=L0 zZnkZ?hfpdwS>T`vKGpHVlRnv|>H9QT|3=_Ov9C*h&fmM9CC9DYp{`(xLV{xZVAn5& zEHK969+j37LuH2OM?C-NWCK~S78V7Cf}05e2-+}E;s-}?;^0ueK`qkay0iA>XnYmB zm@e-3Dg{Y2q4(M+DG+vDic!^fy-6Zr=)>ts!@u|J23b6;=Si9$1ahQ#E7jK(sEXK4 zi~T7Rcq~@lGiY|JICz_WqZ;53#6ioft26PImL6&_&plVqdpEQU6<28%uqsUYI+D5H zWg76yCq^-m*}5eMl?44$kbTUs$d9x9jXJh5kVJPQEiI&!R88&en@>39`pk~o44k#U zwJ?AM8`=cz87iRPyMxWiasm{)hGojQ38(M+|J`(dnl&1?HQRe(<4AsDt}%egRo7f* z=KQpHXOWb)s3KF24&5_sJSbf+#lC8}+k9*I<6r`)h@f~?wmH#uQa}QdT(rq=Xx&Te z9U7{nwy;E-;u%p}^39d3h?Qn4Xu26Qaz@Fm)!{8lZ7EtV*xq8Tl?T9tK-|QaWrAY4 zw9QJ3RUtZHItbb@S9gV*CnY9OvIjTt~E{6e8mW}{Mpd9H^gVKF2)W_oR#<-zqX-1xf3_K!Gy z((tDL=8LA?4u60pEmiRHL`7Qg(&81z{kiVTPkIY-N}L6duu2{^ti>U%>dcj?AP|Vc1sT< ztF)oak(mzBeL81YYbbc8dH=Uwl0`i)iwBcl z<7U_g7m9UC$bmj1C63X;d`%7kH9Wr=zPpc?_UFZEcIQg-Dm(MT>VN;tbQ52NlFGGz zsKn9RQnKR?1u4@3c14ri2;BhIMYp*$TuMpO0hrrH(`m(%mmxc5xRlcw;rhZlzyCF= zGj;3z&z=RlEvtF9Wq<8P3_Pak;uP-4FM#7bkONht9X}E;q^NnaKgpkh+O>RMWJlD) zngW2$<^1XuzU~7x`@z-g)T?3XK$-@A>p8@pwpwC*u+|t7$1Jt?UR?Z4Azg@BXY-#S zkz;eI*}1qmafD01j(YXy{W}9*U-Iv!a{-px;@G4R)TmVrFpQRO1S2oClpUk28SYCL z876C-NT(Y1cM{InZch+_4{gB1p>t6263ci^1U{z9VEt41?prSpN`I+KVYK^;k3ums zbgzUyci)$kztxSP=8xt=L2W162Ekp0gK2z@HW9N6A+0BmMEth1_8!?kr(4$q!S8U< zSV)yA_mGk_;QI2tg>?nA))9gGrMs|a^$31>i1GaO$@Yw`;Io!Wum?>&slq@AZ7#}6 zekMR^-ivIi*~)k#);%|deh*`yXBRcQ9}BQU=MP$YsRDJA26;R8t!?jbcauyT_(n&6 zV#bv+`BA$3^`{DcBM_=seGUKrL3M}SH&IC1dIm_9Ry0wrh zo~9W^{wmY)UqU}m`&9|~rF+?wt^Pj?pWTDpAc?XV@xOl#+`}5+aEet6nT=Tr6v_9D z>jAMOegoQmh-%PT{H*|fn9_#$7i!5@S-(Jz8MHM_i%T9%@PoLW-v5}*joGhMQ`yo3 zKiS9A`C_+ZVjeS^P0WIuWav8xhIyDyk)7vZ1ySk1Dxyb^^KdO(H zmL>A0JX8yaJt$iL0!(>pbu9Q{_7{~7;u-xlAXTOk`tmpT!Q$|nqx-f(O>{K)a@MM9 z?$K9efBWGV7O)8`kD-rN!{A$7MXTRqYoQ^o)Z&l|YBE5%)3$5tDR}T7I<|j=D5320 zClHT~b>D8?RAx>dk^aJi9TjPL4yX55%t!AdfiUtmN+s^~XB9@F;Z2bE|Ce;b)x^qn?L3*2oysZyYW8}*{avBMDma+JH zLfEE)3fi~QkG@6t*pMLhLxH@Ulen-tuoFYsKUl+znIlQ%Z;+fuya!hDU`o{jO4f@Uz7CWD>-)?vE;v ztV$_SE8X3WDOmYEEs^rEp(3o$jaDoQS3>G5#2x=#~xZPKE2;fUK>jEBGA%~9w?+_xf_hlL?O@wef>h4)mh zXmW2NQai*%C9Qz#BCV)#Ab;tgDC$|diVd|#LI1rWe28f>3CZER*UXuLu3x+->IOh8 zz*w;ljH=+@q2I0Ys>_RuKinS<)cm~0GWi$Y-k5rSn~HO>rC{f{9bHwwev7Qfc2)Jm z!?iOM`Ta!sCzD3=6Pk*dXzUl}yKk2=H@r~cf=Uj2L&ZvKjk?5!ScB!=)v)pX@>Z$V zi_JRfU&+}?8ulo;`@~^t0!9UH!-CTsmrO692o!ET976fO&a5d?Q%58)|4PA9dEK0H$zr*H?&P$}cmVL39! zB~0wrMB!7a?1yg)rliy2;Wwz|aIl!R;ih&g7J_OsnRT%< z8RXRjZEj7FLOYZh5;-mDG|gO5NkKiB2X@2=t2shjZ?@h$eBs07_m|H&4f-3 zpVv``Vd7NX@|-f@qKu-husyQ$c(a-}jkm5xaJ;GvF-g#Ws6p!TK3bz%4!_G*e{T?i zoa}gL>%Erla}?wiIW|_l24;qqq&gVFTz&mkxwKT15Fw42a1#%r`w*0Dy$kp;FEHSE z7Jxa>#$lGvpq?*6u+b={mjB|z;)+uUCF^(nz?-{(cwNB@>v-Gwd$|1R(Wgb2HJ~Wiy>J_0^0)&{j43*Or{IwE)Bi zCbC?zW)6irtBF}62wrIq8`{Nyxbz~2AC|d~D<)fP+wfpTum*)fgPMXHnpzh$H&==z zAznjT-u@3fgy!iogoN7j-J5@MZ~wfkManghQnUBzmBgIn+&5S2b;myrh)dO&tttrg z{)}#0p+wR`<)MK57f=cKJ`WJ)SX)Q;b_7kffiqx5nwE&XBTbVOH6 zC-ssNB2_uH9IwvUE%Ty9$|Mv~Y%nNP?)*CZz+75Dayr#Q0SIG15S=T-O&o1tH{8^d zH_2Hc=_&~x1P01*Rn*lsB)n8A{aNRtmeGCTk1EKZg|l8mJs_|pLbo>0V~pS&Sp<*2 z`YQI}MD5|bz@@(87v0P9R@Z|)#U<)DCYxGVOh=!~)VZ6n#9D5j)irlF*Se9m%GQU4 z8jG&FPHEM)tp(N*%#KO&iGiVR9lo6hIMjg5_OJf_B)$** zCG`DaqlHFnpq0RRA_H-&G?L=eoK}@tX~85J!2>88u5luBd7%W%jD29>x4MA_m2yuE zX={t+C`D`PztQlY%v0@iIxx`hJw^Fbf!C5}`fJYSDM?_ve4g-@ajyzvn~$5!{Rc4E z7+?xjAc`lEaZ={Jy%TJSm+n0N8OA+{jf(Xs<6maaoz#`|D64>htKj3tk@SkqeG3Cz z{q-kbSw`V2-zsp1y}6KNib3l|U+89;-q+u_`1z%g-+V2p&_>Bh)xdR6&dy&Kf7>>{ zf7&e*>%(Im(!CnUSYl)#RCMO)I)nuxj?*>-k7`E+9ehgs9v{;=dYhhB?o73&%yMG+ zZ8y1(TH0RwES4Ho;gz%TR~+r0Oy%&#N;szvdVVqg=+pG2gRgo?hUM&|^Bfo*eE%{b z*79QmnQ4Gg!C0uvI%wp4cH!q?+g`?AhSyiofXJZBK7vptsOj>6?StUr9BGryMQEK^ z1KSd#o_sqe&3AP8;${3Vf=U|e<}DxEd5Cs zASd*;U3PuE>m4hlFu1?l%&_2qcrcPfpp=)9-0nVDBQl|7|J!qDCsbV?nAann&RNXa z{26UvCWY0=1dC8j$Bc3!WRU73$+}B_@AF(q&MwDgD7pV)n*(w*_>TDCq4p|N+N7udEBq|PUof2kOa5+mfb_cl2q zo(mcKkGTWoZq_KL@j*Z~l-h}2c7De(9ee^PnU1RfnO*-o>O#Nw5gl$=qE~a^qUIWR z2e$3`GtrTt?_k)NAZ9kBZ{vRTL!s5OfkG(dw~;MC(hqv^M7n^k9$FT0S~65lTuo^S z@{AwK81vPRd!`go2u-=0z9EHZb zG1og&-Y8zelOrBENeR{(-m+fTo72P1GbWiUj{S3cX*P4e^&I{9__a3~55PLvqi+cC zrPtW-wEU;EsxbE2!zHZ{C03FZanmKjxVxgff>WbOH{fs2?{S!67?wMTT zzJpj?Hi)V(FMWh`i1em=pt@+cDHO}I&N%?@`TA2|eCJ;25zeRY4k$tLFAdbk<_s%@ zTo!Mh29ecI#7&|Y6LN5%99u}PCJXyF#?!lIa*b>JeNP+Tedx=(RO(kU`^tnjXImn1 zT8qmpPe1Qj{g(wD)2Zx@xt=3D=rMYy%^i!ky!Zz4@huIJ-NHt&6Xgfj}KnWR)W)-H0`G1CYJ&Fm7fjl z<-E>?e|?}pTbWC5nCJT=^X^9B_pIti$#y=x?LG2NE@YW?-}N-DO9%}YaB=qh_NKn; zkAXPLR={@e)o=tqNs7PutpJ-Q?A*mEv!sM3ie52-j5paRK+F`>fcc=$UR;u+O&llV zI8?d9I25saEDfOg=dA@VL)7|5YHDg2yYgsS`lZR-D_Jv^xod>{!eur%)p1 zsmK3X219a5{5TmMWjwLqEH7}x2e3YJvX?y1oBEZ=-M7IO_}@@RX1>?3d^eq;Psq~9 zk|Z~V=JH6fK{9D@_Z?36!BUY`>;tWEga|Fqz9SYYMQ0@PfarU)ObYGiQ76Xi;u-QQ zyR&)*DhmU&MYsFx6qg1UqbIfa4)~S|T6tGdbu1CklXXJr$w_}X@(fvI+z4y79owo- zP+jIFlv>Ux(|wiHZECiX@2g~u5WZy#TyUCd=rid_+1oyxdwguN`&%y-E2l$KTdJw2 z^JZ;3W>eqoV#oF7+cfMjH1x~%;f|YD?mqjityDwN?OixbHr2KB!BF(HYK>x}&@skpY#;6P zKuhtxydLcN(-Ifv>vxnz?*_N1+lGdcRU7ZqWewl7*5?9E_GFA5BsnzXCnp|yTaJ7t zzUEjw77FU=g)K0J$w*%aCd%Y`H8ZY-kb6PGj62S=oWI}fs|o%6YY#JlycuOgL6U{^i_x`=cMnRyd5`JW z7BYvN65)?4s6&4DQ<6zAiUF$^u`?v}mhGbo1vR<#?>iBD!s$v(PqQ;KRfO=+4)F!{ zX9X;U8km0Xu^>QhQd+o~j;T&oVp^DCrF+k+d+VqF2g1S+7t?bVx}mbn#9Z%;m+Xkm zUEOMn-Z!LgAb~Tb93v5PMImCRendk8%h!$>$ZZOjBL<>i-9}oVp|)qv^KNWzzJoqu z$0?hiO|89Kcu6FGesPiAR)K-kc|gRfN#XH`EFm8#spk~=W{x~eeB|a=j&Atk4mMYY z@jsLf8e9}w`BR{>0)!xUMdB^iNBJAS<|iXoG0anRn1t(r+x?rEl2{snW4{_kumm9x z(=;IJB2d)x9iPCm1PehB6(kCq7DT%tFf5aGT%A_=H1nm<$@0s0pE0zo0QKY|25z}_ zVnXx&06Muq$t+X)=TA43id&*x3I7*U2Wz>v7AbE5R&6ULz0G^YN>((g?E)t3=yQK1 z=u~6i%QNXMX$L`97k+ZkM0AOG5I+ebt=cG&Nr?@ps1OOe3AXP4jBC38LE|mKq#iUg z6J6Z&vZI0tLRkKlAoMb)q5xym*MNEYTO=WBCpN_LK%t+1m%sIC$+MRnVJ!MDv4zHe z!FjGsMeeO03^#K6)6252go>cGtPad)t#^w=*F%4*XxsFokXTtmvYPeO4@0uduzeCJ zfBb$05JW_`(m31%zq93!bFW3tabGxaqUz5hB!iPwK>%y?@}g(U*wU^mI~ayixxS)K8c4G_PhPGo?65&IQ@IvU{KyRrKTg< zkgfseM9Qi_lj#!kku!^o6On^bIyjY(qO-8%NUp#6avpPzyin94Q`Cpi=Tdh_f;BF{ z&*(btTw*}DWCk)(4ePoKJWeu40+91%WCF&MM<=L%5w86f3doIwbPk1xfCvDQLzTw} z^RXC{0o*aTHKg6+pzZjlD32qbZr3}C?`!TGIOO7{@;Z^U%68B%dd#CHO*`(mBC_?D zIYUE3X+o<|ImrYC79+5qF&QMfIyOH(cj==5zxNwM*8f}ZIa1?+5bMv${bpw|12c&Y zA*ig@&(??1KdPYlnL3lp`%a<*1LMZjiUh`rN{g^8kqO&nR>SXb;c&q&xN(3H8M++! z{OYPxeuncECK4We+;$(xYaviCNeemrW08c6RO8=}>58*AnU(i`&Ncb_^`ZBlQTr&p z2{v3n(X$cw;6kW;VZqKhLCc)qM$S!kKZQa}PHcR+%B+;UayE*_L$$-%CMh5{ijv_F z@=EfVA|3KKar~=^HInk@tCu&n%sa>VjsBkxGtAnL4e)rrY{g^D+t`;Lpa^e(h;P;; zk{~I7OYX=NvCM0BhAx8-OwU5il<%@a>3g(vN z88EdDvhMMPbXw8H5^xMRF?e-+LV-f6{m_N&U;3%hGAc=4S|&Vac^j>2MU=u`Z}h!bD&|BF&+3)Hv~pQqh4+Us~7K0AJVKv`PK zAi|VUNolt_S_6T(P~duYaER7yPAUs!rL(lrLlW$BN5x56>Mp{{z+|@ zT5E%0i^PAHD3A@4Y?FbE*G!=X^^!h|h5Hjd7>o%XhkspY&+N}oNb!33RRgaZV#g2h_V?soW^-i`fFA*0R189;1LB?Qk^eh(TFR53~kI0(5 z-fwN>K#_lqZl7XM_%zo6$9D#>{8_llanWJxSbgTiv4+<(&;0uD%K)C%)EZt8An#1! zmy>Vi8x+ofZZ$Xkn+x>EQ$fpyV!upDJE8vB-X!*0+<>o_Kc3qB{Jm|23$PNI@Fj|x4AVAI3U#D>DFh5~n?y~@O3=0eK&^1|P~;hb;#Q0(xm2<( zd1Jq59Gz-fMc22FG}{SfelTe$6!pcwPWIq7eExqSKq&Cthq&kLvOa8Pl=xVZsoSi1 zzxZGIPXdzAB`7EmQ3Nc{{BZ`X)o4GQ;{hW3<%V}qr+s980@P-V#A{{R6BNmcD{98d z`Etc;zh-^)GU3wA7S{9p|s;0>_C!v7p z&)9tLgDF0iBJo%zJ?4=%8b^o@yg@<5Wxv0XiEq*${K7Zb=!g2e7xGN_1s~)3}uz0u^v=VkVMw3r}E?(&e z$6B;F$Nb8U;Nj8%zJ2hWrvb(P_GFF3gn*YshqJ1u@_E4R!q~%c076eDa`U;!&K+$X zFV-?9J#BGIg_Doho*l>lH^T*lMsxOVEpejyHH)DlImXP}C(K?y^5-iROcUPgSR~7^ z=B-2;_v&d^INMzKKRQ|~c%0?aIP>%KFLOhPnWd~2mZp=0@m^^S{_nq^6^+a{8#^cz z9$A(>Ge-lF?ceib{hA?X9GP?S zg)9ECqc@y#?*@l!ur?DDkUiQR#~}O81J6TTXkOj~4KlV@AYy+?CUuwnB(l>@qqKf@ za^w3?Or{H?tm{*vXT<O6dJWI-x-BwSz|BI{oF(OEO8c@dJ#JV0fOX7Nk25`V0wvVfyp~=-!yaj7$2>c^#ox%sRi>dnsk> zBF4(9cyhL6!1a1Y?0B_)%||d@_4gLqKj<=kG-_;Q2SAG}2{15%o0cc!9BVQL7(?Mz zD5!)$IzI-s(}KO+$m~9+2_k3u79Yhf1jFo}*md8tUh9mv@f;a*zY;+I#;-vOe^V_> zS(d7~-+-u_)?zc|4E#MNM#i4sFl+w>|_uJr0a62_Ka7QI1g9R(uF-TYTuoMmRec z4oi*i`RFwmoBV#7_qie}`U|C+p6D`QMGxoQ)-% zOyTn?5{c}0o;y!e*im2UzE;mkDB7GPPDB8zUqg7FeKg_Mc7oslU1y%weWI~hnImb? zA-)J1auHNp`2p@^60LmcQ5s7AvWFLQEjT|9!bEnfXfix^qqNhU4@p6CCPN+<*AKRj zw>oLAd$F4vSG_Lhm;9|?_xwv1Ke`MZ@QVm8H@+TVQ`mW0_&UiL$Mg8+GBLFNV#G%P zod$V>$w-a-(123Sa!NAvn+is=KmkT1f61~7ZZ!u-2Wzk}+mLZ3IZmd0KX}Y)FT?skyND^8|>CD!mLiX_;q4_SQv}Q*F6Ldj^h@**w+IcChff|DM^ToLjNU-OV{Sd~MR|akC;zbL>;#bMYZD-?uK_2aX(H{xI9qhcC9@ zxOX`Fv8`>Q{`gQg?kuhUpv`03BH{jzc4*&s%I_uKj*qP_3-{Y-?n}1bCH5O=G{-Zy z_|)2`NaR5`iZI^ZElw7lQc2BIj3L`D61a!oOO>7h55J(DNSvE9nMD!uCQ06*!qqTD;qgQ)>3B0B`?3|&IU=+^NuXUT`!mU z^gUzOA>R1e$2pg9c(_SgB6H+iq}KZYXN{7$#D@#{fjVEiSn{PHdJ#Gd$2l>PS=k*L6Pme3I)W=QS!=mVUdD8A3 z$c~LaE@GFS4mY9VE-LXn~=etQwZn{XN=f&L9M8^@G`pJ!S=O z2!Rv?5tXQWcQ{pzHV!B}sPXustLtcXgof;#nMP7b6&*+DJS?-vBbpDc@J02w9s@0` zU2hRXo>)&^y>XskGV|ZfKd$roA_O+Or-9p?(rWZ-;z{ICOnNzERKy5GVw=airu?Ah z!}7|n|89(P)Y|pQxpt_MiyuXgLQfo5mCWY2X6JC}K)F10xhPqi9!Qhy_}uoNlrtW;7+&X?cG%9?IYA^nf|F8y== z5~}m7%g&&r1sS(@F%vse>M?j9AJb@*4CNcICYyYo?wm!tGL++od=8BP_-9eq)?;(E zC$%GmjheA`-$^Cla;Q2M;p3^j@cz43*KRT;a6o-4p0D2+P{1z$Tie=B>vJu;R>;_? zAh&f~Y+M}Or;jRbAAdD}b9lP25hcR;sSE*#?8DEF-aaY@8oFLit3a8pKOy^(EQkI7 zh>lHK#XI)(0|7FMJOjJ?^CTDv}KN31@eQ}!0V)H&xn@M)b5b~Iu zt+8MtEHYU`d$5be6-TCQJFsMFflyO85XzWYgE;R|j~jkVrmXoXLgZ3hcro-tH4XAy zy8Xpg5?Sz-30uS^%2$%KhrOsqkNuh%*9$eI2_Swq`q)|=mD78u%=n!_7n*gtVvFpX zCc0X<@9J|?8sgNAAgRSuexd0N5~pAU2GAZwgjv(VA*Ij3WF5z-=;aniy@0B3oO~#U zIr;|=J``k@2LO1KX8v<^EuD3UywoeA7cZiev9})guszYq%u_~dkl5lfrp)FE3?!Wdm^(*lum)DCM{KIKH zdm$h9Hos;ri<#^F3Ph$A?>m}Je<>bOd7sPI`P#+#y(eTmMOTv=Np5BeQ{b4Z{%XcS z!}p&RF}Hx`>PyiRw!a5qsvu`wdy%%dK5<0<`1>o^bx?`XgcAqzcQtf9+*R`z5cyPN zQ8TlsK)ATtECRJ?zpEkNKgbnOfydj|Szb2^&5h2F1lidWDEtl?otq9+MmkDU39b{- zRd@d(BtH}evS>pUC79V?f1xT;yjNp;|ROmEYRqQ-6oiWfk~Ng5}^vGgjxIaK^a$GJ;_*U`M)JLR|DK6{fyKKK5*88klIW(C%I%@-XQ=35M6 zzlHeS=hs_;IrEAh{rhgT-elw-@Vc80?Tz8+gCdD(S+ywCbgWRTW1PJg$EtVOMNM(e zW=yRY*7vMsm&Ru6zx%u4oWUr?oMKc-16o>^)bDeUU*vLK$T>Lmqwl%LBpH`y|ChKZ zpECW{`N#U-X{X_~8I#q{LuI3_tqj>-BGEz6=tz~hpqHyb(sz&uY2yN$`f{`lR)Ozm zea_2&`J#(}uYN<7ok#`-29U7n*1d6LbTkZci_2LC2?S$KeJv)#V zFs0Mb!YU({Rx zni{eja+Yb&g=uVA24#c-BbmTEb+~6+lR8~adi6TuZxz_S@?#MmVTCU-38h*k3r#Ie zEKRrYL~T=OST~z@Zy-Ln-X z`G7U=1pzE=+=d=C!1%>n^4-&LVCa8gCAk1WAHf$^eUUF(f!NK5G^rdQdY+hc^vKHgVwpj|Jio`wU|`l{|8m#`Y;7TnGl z+8U3mxWix`5#vjZ_hDTb-uH193?8~Up}$L%@~FCR8~Mu&X>N14t*+BjHbvVpJu?XY zO`gZ}aERSq<+R$3Re(mNlyfs{z*zXq(>7MtdeQ3)J^#TJ`#90mFzxqAJ6|oV-@>ON zl6`u!`t)0zFXo<76na7ds+DR@uc@YeA%t0xpz+glbR`DVX{?SK>Rb)`+-MjXLW-GC zT-xoe!tViE+zL+pNa#YnAhRqTa#9m*?g7v3Z8kGIhqOG5MGmXmBT0P{KEvQMWzlmLW z^j=~6v-Bqr>AbI}g9-Zd+`C1&3!V-XEuQm#8aT{RH~8phDvX?pJZvukL3++bv-VPc z;GxIvFE#sVx8E7*EjDqEV-sc@d6`h8BzEyG*Wd52mk?!^fQjbw#Xa1;)$+ST*ZW0V z&pR!_iwzl|c=#MAT5gY~pKMR=%`}+(w|J}2L~_z&6q}n zE680rqUzDUJYHul!-avzb}>bz{(CMN{-l4lYpSZc)c!XruZD*A$UBhAL)=5LtAZz$ z9+fVQ3{D3clq2i;|JeG=u&BGP4;ZFHI)tHX01*&|?nZ|e5CLfh7&@f8yF)sp1?iM- z5P?CY8>FPWW1jK6?)yHk_kErZ^9_#UzxG~x{bKL6H#2iW7^06}s=)!tZ6Pd3=6l`S zclsf}>Ym9(MX!B(m9k&(vz9An_` z-=>Jw75v$RnDANn#5Ye~L{Azi)oew`uUADTh@?hlB>j|Xax*6)MY!VcF8r$ujkM+Y zu*+TuxU%u4j?Mti-iZQW$urp)A`q1O&d3;m)W?VHLCKT^EaH>O{6JdPl{h#(7Wv0Y z1&<0|-RL@5qE;t9TQE!Bb@sdZ_B-$Bdu}_e3Hv@9I*}c{(wI5t1s%)cpUd;{a*UyS znLIH7t>6}}E`@sdLw_NsK`gmF0j3Ccb8}gzE<3+Vh!m<0T)Gfn-f~R9UJ8{Hj# zy4)-ww2_FJJDWq(0pM>XD=|l)IUOo0_Pg1Xjjk>)jw^A;J5QL@JP0X*D@Kj(uQBqz z<{*@OMdO3G(g&Oz-v{ImHlG+z>FF5$muu8o3`D(}OuD3^n$5j2IakS)*tmf;4eA+) zKBxF|DC-VoC1#`2Anq+eAHgkbXuzGG=6~_^MezG)z8&J0R@PEVN=z80kKDz93+qhW zwm0CA3PLHgMOWiR0c!2QkdrYbhX9VE5Q@0Z?d{a3I@Gn6xFzNV?d`a7&(JxhHdgyrgVV)^nl1?2{loU1>veu5XA|e5 z-q|nb3f6u^Pxb#_hbq_OihH6r%El{>5jkDmZ=%-1wTHE1KMH=X(q=uHs_A-SyGXMI zYEU-zy*ypZ%gs*$@8%%-{@h%L$X`+vtTUCb301MC9Qdovx=PEet;t>wB6uT=ihrX3 z%ZMURV#z+jqzPYfptV!$-TO%_VwRLtLK)fpu-P4n<|G1w|ESG+5`}?QjFp2!%dRzT zL3r^sR6FNd6zQfnvh_mk!e)PmH&kn)7#VUXa{~jvKsQ=K`hjSj z(0LEo+9IB?l+-Uq6!oaR%nvT^ZVW{GLlNtJ6Xdal`A)nkzW|^TOvsR$tgSK9um^6* za~XAYY_~iS)cx7^SUJWplfEG-@U!CNNT+qj)2L{Fk4L(r&h-Vl)2;4N` zj|Nmo($WkWjvA=Le`t0C`};VvR*jIQP7_Vj)#BfR#uh5=(SBKZf8UMUH=R3CeD{7f zrp(G`_RlDP-A%u(zRP%*{GT75?n^g6{S7?F1m)bdB}3>fE7c7&1NH1Zuv9K9&jm+2 zwlWSc#ohCC+K$sf{6F=+7&`uUJEr6#MSvPgpDm5oe4V+$8yfdtYM)O;x^Sn#AFHk2X8iUjkyDd z9lLu*xoeZMO@=)z0=grK7@%wYVW0b~YkG)M+rPIZw1ZPC?8~OTwY6sNY`a#ESB`Te z{nWIYZJ8x7xb|kQUE>Tc#V#wF9lq|jta^9lRW}p(tS#rYTWu9ruj&}w$7(;tSKqsT z9r;>U+hRq`xS=DA15Prl93rF5LVuOlk;z`&9@k@>W6e`ihRPt|u@9sq>9BS)l{V zSgE7lSBEg&ah^Cj(bopCR)dgS*D>d^tO!12?d_1a&I9~{ANOvE;%J|!(~O*%bVkg0 zUP1Gc1#*kI)edsmBpxV#Y@y>o5-ejH-2td)I0n4?@haV}&&u8fR zq^gq%Ge*AE4oUeg5B@04yN;tuqN7ZeYK^p$VKg`3!Cg|to_&owL{jB{H73OL%{G*0 zTt{!!RLCp61Y6&2y1rI7{3n{o@+*Ll;~#5`LOhB4VFKq7oUR;8?iFDsV*3x}cO#My zyj>5OtG8XNVfLN3TjGn2-bnhq6ie=_;_M9+vtyB}2HgG?ZuN!W*SN zPfZTJ99tFh+vHmjEib)kIghJ{&gdBGdOMmomEG=fEUV~df#2Y@S@TtgV z=YIZv7GwSEWW7ytVB<}$$4;5IzfA$}29;WH^rt(~*83xOe{O}lBBG<)KW`*k%jskg zGr(3nH7or=-1`C&@B8$W=5xm6eyAthav@&dv2vn|NkAw=e~##o`gQ2`A_^ro zU$)B(BX$yy7@LS8Bn%+qT^G>gDpR^>Zf_rVYWdxfum8hPk1VF=Nqyet$$EIks&Byj zli2+gCy!)T7UT`V`S;-K`c9W@!!9L5GnXGRV&mZ2^;@nRx0)~}0{<|UDLz+OUJ7BG zEl$ZNF8^CZQjvGv9V|L@83+!RL9+=~9%s9tKwlie&&dCK7GQ8oe(71^>I{+kp4Dcd zyJ~7U)c@w%|5}{DZ|z8piOp$kjqx$#6@j=%%IedY<_(Lahz9+W%K_T|IWBkyXMCe{_v`AcbEc#sSXl;XO?ubZKzH)^0`}fBXl^1 z)ci8yWiQ;0hdlZ`YC(?)PaEfp2|S{0Y*X) zXLMCQ@#5(MbM-nuZwz`x`fF-xqsMn=X2!3qOz`RKk2pLpm(e5hCu5+7KSAE@=$lmg zw!3H|(c(~aMgrbVkgaD>yHadnU-Bk{+}6$xRQ9rc#1TfH zWNAtta}KVZ)P43Hs! zug~^5TgKh&Av6gKW+;gvJ;v>UNHV>;N?1g1dfQ@dTZ9D!1SxFoCQ9Gkmpm7)4vj}^YX)a$zHcQ3xd)YZQmj@SKZi8QX$MSJY9tHhH{jp+mM?cVV&O!RmP z==Qgsvt7D6uhO{lb<=dyz)uFMI}>#}I;t|YFYm-v^Td_3v^NdE^TZ>FMn7PFX%6@f zFZ!O~XSSGt`12ZhD9>l@>tT+A<@&Tn=N-%6S6(f~70lz#NHVx`k)-DH7&OtwoI?8x zlc+%MNP)3$;$!rnpoV=K5PF1EP=;S#Wlz9qQSWSE!T0$tC>KWt1_ISTQN4(wHq>2)uobA5gPPi_Ey zdgV)uEWLx(HmXSe!Jx>55}fCQLfO{|#0;-xm@c3nD{P{XW<=UYYE}|7dI!&OF6C+_ zY2f&>F?Of)%=y@XhFxk{ffL43Bvc~i;RZN3eA6LsB;gbV4HQ^k<0XG}Vy11xWLVJ4 z-SP6`HiZG8$kFnI3zK*m<7`pC=@b;l(^@}>yM9!$fNtXsGQY|CW80w?E62;nqUGGk zCep%o1~U_*eL(pvkMa-FGg&4|{e$^z#jhBHd%BBMkI%L~IXAz`5r(Mc3QsQ9+r+ip zdWtOLtJv1eprWufBKHD-=rgI~wcaMRu@p#qttLFQ$>yj92aJ4pTFYx4tMem&e6!f- z%fEWdf@1rh$yeJG%bj8rSik=w+g7`uM%J8_I(1Nz;s1&UIkAO z28eO}xll~P!T`j-L6pMLi$~jN&{@R@zSH&;w(Yi)P)xJO4p_+Io_BO?j0o87(C{3t z3DtHu31x~mF=bv!#-gd?P;!ysxy^P-Qv*`jakyXN%oU^mCs@dT2Yc*$?9IM*wdnWf zjl?%7{D_J?jl?lObe z1y6X$kWk5xfRh5iDG_qu_X|ULRkzTV(lile77`6*4`?LlcSTQI3(ebe$ zE5U6Cd;5v~vAPyvV_)Y&gZ5R4*T#5*O}eQ0kyH8k93xH4i69+IJtE=syu3HS-?0Ni zO1b39O)P*7EVkduR4Vk7Bq%dNKzUPAAahKunY{FumtnzI?*d)l&XN#gLvVFV<7*Gk zgUqL}+Q_bhfHIa}GO>fl@JuT*V(?rwi3TsDpZXjgVO&Qm&W>!?gBJ1v&}{ddx*F`) zCcTJo^QpzCPCSP{!$Y)2dZ!$8+#DBZm{ zM7fYx_3r?ri6BJOKjpo6N`5of`v}|rCQ{AE{+yR!|6n(%~Ju;q2@9LD|5 z>bmcnF5|&!WR0nYCH$m ze51FK(_^fl!Rh?Hq?^2f)+lTYM2YA5FcEHe7e;sAyZCk&NDR@Q6%k|DAw5J^InbijXcgs`n?I^p$uvWr*SQo#E9bxq>?EtlaXt#(VIYGq(+J~ zovm%jXN1$|CfMD%&pA&`*A0Ll4pflCJ|CjJ?;Y6-A3T2Qq4Qb%x{A1H#8(EI`xm-i zX}u5szgkZFM&hiJeIH6Eelo1)|4{m7<5Yz>RMpV9;^%(aw^2<&JbGhJ^9f`dB4TyM z{IaslOoMYAj-!Qv2W0{%r%?Dg?Z&~y*P*r;F=tUa8tx9@u(j}J(S6D$HV{X84etAa5Zj!mMQ1o@&sD;ltj?wqk z6@R+s&Vwy#;Rp0Mu?wV;kmiZnIQS%0o9_NL-g94hvROcDaX*GI1qrnAMGTu3X z>BMYuXi~(m)*Q%Ae#TF}M3#4?=79-czJdVJv1D9$eLWcYY)D_qGt<$O@0VD{E%&hH za9WU=`su->b)(4|C<;>=sN5MbPBZFc2HEcYFA|7VCQlBz{IG3yQia@)s8z7!h@`l6 z(2e^l{BafT+bvc4pS8fhU=RLZUc=L|^2s^lvbix4^)RTN-?*~$ zz$N|AH9dg1}iCD`Q__EQ1V22YZbVbfj5XLX&&5Mv$=wVVY5I3mpGRrYIg!!MPm??urbHf zZ_3Y;kpR^N@ir9ts%{OaCEa4Cr=Mf!=}oDqSTd?$>Esb<7LsOZ&XJX& z9}Fnw1kht|EL~h-Z_tlWGe)L|q%guhP?ISTaiotjsncVtV8!g08#FjDs*qU9MvKpg z#_%87G=>#uDhG#hnli9|{81-+B);PLF%MF~FnHwzilfSPW`d@{YHDjIa{2zGkm{Yz9igVxjzI-XN|zUO9N&ii)Qw3rQ(_zQgo)(y)E|I6F;d7@7CNI4ju z*=IiEFpXeH04B&#ZHrRI*Gi=}(mmpawN`yc(qJ5r%b}#k4o8gy*f3xNl}MNpEHf$d zc5Vvjb)`6r7Z#CGZmhNgM{q%b;C^$8CQcJ${reoJ)D+@j7TbAb+$2g<U8NGUVPuLJS0Y24B>JG}^g7Ua|C5ifT#+8< z-1{*xzngQ8R|lpR7OASuvN4IVv3LT4f&g1P6V8~|kfO5P(J>xCh5zx{*;&`bZs|XB z8~g9vGS++BAKUEBy$w4|m70|IUTBgX)X5&?S0UB7Zcj3_HNp`%1QPp5SAd)ep1o7nz#AW-LVq9}e`h9xw zBjUsyTGI(z%$H^|S}NbqsU^p#YjkQbL^%~xRTsP%7KGe56z4D9L@*_ zIo8%Ldt+h0YQs~|pM=Y!2ghyj`e#qD&%;LE+R1t!2Pc;%nH|76m%;)Hb>cmr?as-Y z%=mwgfI6OF=eXy+o)T+Z?KkLg!wX|TJf`w%$XQ*{L5gxYcC8gRO!HfII?AgN$3bHG z1VF7s-#oJC1j7i8aqWt15Ft~JecFeG-r#FtEv;m7eovxEkd&e^t^(RVwfqD_B;kH$ z6GT0jmn=^gD@?~O$y63Au)I87d9WzuOF6cR!6YAE-+I8OEpxJKYWi#R4enkYo%Gc) zOPCm*GS(ic)lHXdcVJLC_$`l zSEtD})BiBtlvZ#IX4d%P2P0PYXQl}InV<|pAA*tAn9=I0rB22SGuP=hr;yfIl(Bp{ zf)gdi%B2{^Q@FT4d3fnKgJ6^qwI)IULT1z09^GJP3<%ANa101Ad9+4uRfA#r1wn;1 zdOyU6NF@mzq?6WSRPYP!1js2y3W*;kB)t{HdqY51@_wz%bDyzIx1&t} z(8{0XU{X`AY8VntrJG@+j^ zPK(O;pw0~$(fb?dOqM8@BGt@66xlzO%VOM7>YE^~?$VE7)46EZZ3VZ#w5voSO+oosV~jy>h(C@@prmR2CT6jGmK>SefW||NyP-S@Yo?D zG9}?|=~=+FtRAV9H7!a6!KCeZ+DDvb)>V3mi6(PjbE}?6K$2McUm!p?k-VZZ$3{&` zM@{ipr#d~e2~QaXe$$t7N=OeSL8o1Kg8?&Gp=QPe1h4@CyG<(wyra)^e@-EcRpBw0 z8`D8R_O%@>s1bm=0tHf#D08@yy+lN^r&0JHKjm+9V5}0y8KM~D>^=rLq9_ig5#G$! ze7iOh!u>=5HU@?s)uy~cE;-*I5wmHMO+A_jx^bim9+@dAKJ}ce0p?&bB@=Sm7GM6L zM|gigbEm;~@*ZJHgHg3jd2$3#@!X-2FO}Wy?hiuCE{fX=k&1#FfLfvH*DH}kuumCSr9 zZ65ZE56F6(LX)|KHIvo4iA05cP+{}Z;MzC<(<}BDyz$o*I5^&Ol=!vwF_&?w^XQNg zh9UGB;j<;grrjVw4$Xm6emhXEdU0qcm*@JTm7<071m849**YJ;*SJPrQwxmi(q@35 z&s9`EloLqHsPfCLGezDC@@pBW3qA)ma3(m~=`lJiH>|&99Bjf%0?UBGinc@K{VWXw zC`A2Ox~Y%Nm?Fiy3>Y{wKXl=EJ+h~Ka1E(LpGgw^j*6Yd8t^&`WROx z`}u!p6nQvdhVx*MpfRTcajYCh9|Hy!D5)U8?#tKm!+knN1+)czS8j}qqX*33qB$}| zUuS;b;0c=%p=q~X@Fgu&9C08z(wHM`w=BRa!bvfIOuEMY&cjZq)|qUBW5w$SBNNxN zx_0r2wVYyXynJlLW|4X-0z_UXKii>Zcx_4;gf>`+y+V0b_Zb_RTL-c*%NYRdFFBt_ zYdA(HGK~O7@QsDEmL;OOYLdwK{E+D}7TR1|c1ntJ^HD7$jV-z@~Y(tN660#vg zB06K-xtK3*I#k1T5%s+~(33NzAC$A)bMrMMMzB~M5Ec>$4Yvf3rwJo5#Jv-b!_6+< zAHwOG+T6@AvF`$!c`Nwba}+CJ(MPm;5(>jyaE13hFA z<%F>mvE_pMFaIC$ zMNSOfd_ru$%*vVVh}bL&$P5Bv#%pGfXl=ShloEG@Y~1gTm7al7pi37|cJN0&aa#n# z^XRY-AHk>H+$_^X;}B9xbWb3RF#L1bR+L_o(TAd?wZV%pu8#b6x?5rZR2oTE{{F^y z{Gr@qQeZob?gsIM5U_1XNJ5b~6*nL*J!_YNampmf9iJWF)>=);I1zEX)@MkfTvSj< z7%A^x*or42!U$Hu3WN;B`zj>Thjj1ly$r5I*3wef;%_--$Y9`7#6Rr%O(KHx=`R45 z)r$O|t>+}w$&=?ef z3f5{=LP}9~t50YMHeL1Yfv4TwPALx%aroXZvz4Kr(h4QNY?ue}{*MJlDcE2d!7F4^ zt}c;_u2Q6*A#ZTxTAa|h1uHMJK1kh>-B+H_d2W*ey-9Os>^?zx1i?;jDmbFYb*Oj$wRGSEOuvV-bLU_ak z*2cJhz!%;>_0-dmN+-kV_70Co*rCwUBGR;VNMa10NGSLo8Eb5Cf3V>tmkJG0z>_i% zB=zjM!l~Gg`WeF7VG%8z8NwU(bE?QiLgh29T0#Z_!oq=k4dDd88Y+t zTWTyW41G9gpnp4^e8pq&0hr#j)v`w91_;i0Pv>@MXl!TosbI3OjK#L1dXlZ}(AUbjh8A45o4-fpeNE;O4<3nqdr$e^(`>S8e-yyJ-Jp+H#J7W%Ps5SkoS#J0;Z zNTI-rGUl&jC9@D!?#UED?eVU_GUZhNY)`3g=?LoM!^0REyd#5g@^;mv6>pip-oP$Z z&FQ^u(&3?10mQwY%Ez;8g7MB}uh|+C?@6|7m1O-D67@p+3XA|7?)2SPaJg&?nj$pwMCY>` zkjSF}$B}5i*|%Y1-wf4K`ot1+%-PqtV4yR;jkvseHoSXR48UNb07`-i4+gnbjnRU4 zj944c(FDuEY>DQ=Gk_SxW%U4Uk{<>AqG}Py5Cf`K4tlb>U1vosERpzi@IQAO zR@)CR~V%LYu6Kx%bQ z+IY=PR-hb>IZ61tiO@s=E5B-S5;YP>mA8SFssiM3{5?8*$((OGBHayQ@H%%fM-xY2 zyxS9q7J)aY(@$yJ5K%a$UqdK&^1h@pjxsx^(~}^JYF}qx$nkdi-8%OMq5(WrmIoZf z!jj4Iacxb@EJxTvgr9&~;-NJ7(y6ds?Vp)t{C8&M&CJcsalRczSFd*X!*LXj+7y<0PZ!r76seW?f(SaO>967slhJ)Inw zjW`QGap-@~0+^y=0~^qTNzpfOYs)|-cKl}T=(w)pCN(VzmgP-vP3RTml8|HG_nGA>0dQZYD(03`KHDVAAl$ zpX{Pw;wZ6F?ze7U97ppb3xj0I3M!V?GPV&Q;zB|aDPUv*_u*Yf17}S4TKm9#%(Ax) zOCO#_fh-h#FxuWN2 zKz#ERYjK3J6M)z_7IMGc=05iEJa!fYhyf_SjtL|AYnZi`*dtIhIVqrF02>uxQv*v9 zeUl4Kk(aJsEll=oSK7?z`_N~maoRt@`t5i!52B%EYp()Ov3{19sQh|jKTr-VgNuC3 zS?`QvTanAG*smrz{egpxg%LR$6%B>&7vda}PNsT?CUu-`d-3r)`xu5%gPg-}&Ux&Z=B7}S0T0O=3_ zYSuIWz!Y$fZ)Kf?B>+HBKEbZ6^*hS^s?!yQ_cen_z{ChSsJo#ze}b$fRzB_Qv4ZJVg8{CS&!18VCt1jvZ@Vnohy(b;PCdGRC?dk6lNbS8m74s79X55v zvZ+)n=|E~$lFhf33?nln;uWwfn2Vb(f4V(MS6F8bz9pkQrjBkSZ@Fr<$xyad%{Ii? z8LrEwPqgOgH?DyhBjj1Hf_&*8;~f(*%AfC;up-TH2LsS*U_o5nSUO+Iqf&@FIbPH! z0Z4XWoa(dB&)crnvcQ&<2*N~(yV3!oe*6*sv`@GC_53eI@E=zmQc_fpM%(-S#HsP` z)(0|7s4Yj*xTF+GW5J3aSmP}9*`VBkO9ujo$Kc?^@xG?%o<9g$kXo=(N4(UHqY4CP zO6XYkB?RU$_PePg1pq+X!=Y#pTy^3N5smGihi)wgYtp7zK-|*tD*E9yybw}sSJ?`x zsCL=hoqhx%XBl^HUzLyW1->Snmk>_`hTZR3dvN`3WBk>#plUE8gH^lujoYT<@^(&g zM!EM*GB`PDINRMuK9{EY%@GNm7o09{O5v}F967am!M`=j+`Qc+`5-IUvR`F-IZDy& z?X@gyjOf>ygz)+>oTP+5$}riKSE`%0IE^vOctEZ$4S@_8k95OGbgOh z-7(^#PFIs^E%y7MO!Gk0gAlqHA2pb6^#Ce5l!xcY^xVn>p!X}+M~(4u&ll~gjG;G% z9u8UN8Ofz9horDt+=;(xJ9yi+DCwLnQm?EfUvaq^in>_*LNTV%?n=6X2s>oXxN_*j zoA;X+Ud|UgWGbZx%f8p%E4N*AA}*G0zP`)kp=Pj4rDM(avm0W?W^Kzyt=HKP-K##f z-U-$@iik<SF)Gc{x^8P1#LU9OtRkK*_R1m|8ajIy_4V4TANMzA zm(FP7i%H+Rb8@IEuR3g#NCK4i#y&C83H$EkxbI1(k2iQ${406|Z4O^KSxLWII)o3D z^-UT)EwbXmj5<$BA_=KfY5lWh!>hWz$6YQ>yd3Gp2YgGlfyj_VzA?FU3EBp=7R^#5 zWku21MgsPCDvVLZtNXP!_PHJ27!?k76Ct1(s1Eg@$idY}Jkc>HjO?bu*uq|L#zJTZ z91ycVVsu_2=(_4VM8lNBU?eWM`f!$exFC*Hm4SQIcAWd1=6UfHuWkc~0*bl=4}B2z z?4$C#S%4_%tzOOFOPoZhi$D2UQ8qVrM!Ayh@Kl^ncKTsJs6E%YC;jd4$fP4cZ*PK5 zje|+3Y!F*XM6LDCh#T8f&ZE7#vc}swvUpa_uVwO1Ex{?>+jk;<>6Ldap~r&rBfyLl(P!3c!7!yrbexE|OR$H*TSk@4@ffcPOkm3rrv)nkY2 z6NGpv!`KG)}&fBPbeK&3&bEg#{^IEaz;==^C5GT&_#b#1 zg7|bG-_L^D4~#hh8z8b6E9amkmod3lU#_7U8(~!T7JMI|-x`O@G)r|1L`DYpgs@weJc#l(m3BUW(_j>dL+&-5Mv05zb8TbP?0lQowHw?11p_L z-?hv3bVKdwV*GYY)X!n(%o~1iospA+zJ?P|yR8C$fVv}Ib8zU)$;x#uRHgsxijr^0!1THQRWVlk=dk`5ma9&O?>}lcI^%h%1M!_v^US% z!!Lh5J|Q?t|J+r}XFRf8H+^Nc9LW%=%qC`@$pQTMbA&Ws!C|yhVnPrd@Z`u$17}q*7cWdu)gp%u(0s1 zaIkf}sC}a&?w-nC-IDl-$;Em+8u0vzx;~ z+vYA0yPC@?_osXRN6=$(rwihgxUa5JyVU)sZ;tub8GF5qBgJB58>i{x;x~lx5?(h7 z(U0VJ1OAWi4R1KPzHO>1>EA#rLP39r)t4#zK8_@B!Tq=~k0*7<4*rsH(g!Iqq|pM( z1;5hvj5;>=D(~)9RbQJLE~FN!A+R~%lkd)!6z?X_!S(pH8*;wtz)Cr1^{tj!Wgpva z5lzF|{k5vva}LhxlihK@xM2?&gJ~@KLKS+GO6HL>H_YPk1!&VD+w!pEcaQdA4?afr zXmp2z0vP_^nyQpMoJ#7((z&fW{_*(f+0k|U>J5{m{n4tjvt9a;E&dtV3q}-a!oVfMUgpi*?0aEesKwQaP30<`_jooh>y8vL z@n+phHTmX2hVSZqHvjqK!SN0W@6Xkt1yHa5S9XT)+G${KJf=+ z@?33lWkTV8%8EvT*l3<|d;IqMD*T+_taXPy5B{*zwyfpq0_&7yD^u|z3nJOjUNti&~5nBo;v;Yn4_!W(^8ax^TjzMGP^W*o)9a+ zwD~AVU7f!2LTS#I)-FLK0nnGpua+>fl`iNnF_`|2klXd1AwYfNGXwtADpj(l@t_4o zf-8T-JHDSHpNMlkeuLZ&=K`lcziXl_ln#i5C>Bdc9U^W|j(btAZh1&wK0SAFA(C<| zh~KMeT|(L;eSc}nX|Tt+htr$p+kyDFzSCBQVb;j0M$5hY`o#e8A3dJ?XVGxC$MSGV zBIb#PFYg)3r@6NhZLxT z@XTg%FHqpxTqq8U&*Pp=XE)v~xzK6IfOkXed_AvPa3&Guhx zN@=T{${)vGQi!*6`3)jv{-HGrvjJTJY;a%y0I4GhoS%)CpMO;T;=}@saigD77(fT6 z15Gy0$7`KuRmo_)IXF2hb=UnH^gbuX>L25N=SgCiM*nq-4&YXqz$Sy_LuX&TulD1> zv%Dak)dF#v|56(<^E$#A>QX`nRs z-d#(BYcOfPLbVZQ7kh35c`~3^9}BBM$kfp>edg+YRAnU=GX-1Psk7(na;=%lC(dBhj?o-Tdujg*2l1V@4W%&MC_ah#P4kZ-y`2(3X(%)5iy4yE`Z}J}Dd-$%& zp$r+GTb~9C4t{R*)54rPnycLisA$$GJ0Ks)6^b*Ox!vF0-8!zmwM`~;9F`~lcpByY zYns2YHumVq-p^%G?e>VXnScBKyH?)zim1O&ca_oJ^w3D%(|odbMQQ0Zv*?R|Ce~5N z@EP_FeTTE^Kwoa{!N_NadA**`4*N4&yabuo4WFnXu>+ZW4pKk7hNRw?rC9|z-8q%L zB8!-^{$j5lf@GBd=1%R`N!bC3@qL#is5I>%dczH!kp`=on+y~rdh1s|E!uW4j!;|H zG1ZmXCCp?36?D4%INRI~=&^jIOzo05b1d+t(m*qPI4DJL!3>GHijc(Oerv*K6(Fon z5>{4~^E(7t4iZ}rEw}9*r0iVe+&EuXPOf(qN*ohYvM0YeR4#A%dDFycOTKb^=sp{5 zV*MH(fnJ=fYL$Z_c4>M}+qGGFyxQn{4&@Z#BAj~J=b5n5m*XtJyS*Am$eOsa89usHB9Gd-eh^ z?F8MUg<4O*&eYL3p^yB67kZTVf{Q+~+`|u?--suPMM1l_;ci2>mC%B75?sR+mvnwU zc}8G(I?UyBSTgSaTl46Z$KeKIn%R5D?cu_~!NIY+=P>b7b-Ai~yG4Pc$E|A0$-~1# z{hEh|5>GELua@(wwwB{3t=Qg!S{(9|I2_o{g{07>yq)21q3u)F_viJZPg!k8o}X(E zykGgT4t3prTTZ3vl2jTO%R#JY!7KuU$}6IAKiBqUL!S4Q6*b78)}hOIK4j?Wy92FxUzoc3^)h+2lugH?rx4;* zrkkHzbaRK9?WFL#>1zJx->Y>zDULfmyZ zFPmKi62yT*i$|m66rW-Q_cUAZhtROtByd;4)ewn$*`%haC282Wcg62rSE166!P%&V zWm2nynyLIOfpHAw%OW8^m+q=ps!0Mi&Y-E8H71aL47t0`{_umBw^xRwzr=v4UMqTH z7(uDzEEV1_F%$+lGG*m*AXq^^dTx4gEO~z>Ae0^#8C9T>A!+_8K<-8G^cr?3?m2iD z^s_lyzcW;^Sgu$sCgGXQuP*lT6*-f!9#$^BnX7%#BfvuPd9%mqud2@p{(`xWN+w&3 z6>W5^9kU_29g6QI_h2D?>mG&YQ;_&enCQWG^4!(43!b&7;q5H{rQhdXZuYm5B5`L- zTRdB5Sih1<&yYLmkdnAZ83N>3r(QnCz`Ro^z$&6QdXYeYLkb-&O5h^Iu!0&?kW_#y z?bH<$;{tY(SU&ZRZ&_(4t>+WJraI&FTv%KLP*Wq3+R@P9riJM~&M{qFAN@WNB zr49?neEX|!eCtm-56$ZM>A~cFy6`=rNQo+mlYW*(Y{y=3-nS=>7~LzxeFitlNA@0v zzyC?&Vb+}Qq3o~4w~pKVpBuHDD#ZrbP!H)}cfrfb)_jKSR&72EAyWM|WJcU(#sQqx z_Vn8R5!R*lLCo-Ur7PQGepJctq3#hiSY=>)BTlbjv2{Zz*D?2WWTvdkZQ#eqUvz5Y zH1hX-=!};XbUkX_LH_%*Z@ty?IpWP*L#&3%GAT(3xtn(9@pa7Rry2!IKwECd=_DN` zrS;1j)b__9^JIw@uHwxNx<{(Gbjf&hoNed1r55FkUoCGIy~=D%V%FpGR)yCe)g_zq z9u9UM`k)fiz>pY8I1brp>4!?E-FwM~MK6hu)1@tU>?xs@;(07qwhPlhJSHX1DS>2+F1=RoyyJ#}fvH<#j67MY!iv?W z4E%0UZ-sSg$%;(R{GRH^7BN+xXKIe98>3jDh7|y^kYKDa!jut(t+CLc^zNC|x&j>o zFj62T3==u>r2RmLL*`l0J1pc##I8BlJ~O|}Z|Kq7-RE@jRA zn_Uq+P!sbj3jL~$w0n!#EyO~s=C$5h`Q?Dw>fQmb7kt?1E|oZg>k~M_>fC81HQ003 zaNso`^!H;5Z+uxsca*aUU9Io#+ji$$l6$^{5t^f{4xN+c9y5g&HCD!!_27!FqT9?7rq-KBztgvYD_of#{L`tUGneVw5JM5?EkvA`eOnQQoR zi@^ex-m`XsmDOz93m6#Y+Nk!7r%K0jo)(jo01vPBcZYvVmegO^J`y;dp7jZ2^}jAKup@bf z2Jt*NWxcuq2s+HSE=qKybpJnOy=72b(b5Hq1qKTmnBea2?(PibW?Z7_2y>#y9-^ac+M7GvCUOvLs-& zY>vWA0JCn*qfRP|J4Q7h5e^wJrw6@r^#k7UD%mm{b`8%Fct(EsUw_V;XNPZ6d%H-X z60>(%y$&M>e8FXaghIYvEb|i2#h#OY&**X14>5`&urg1Td7MrlCdWIZP$^L4C0xom z5cg}55=t@IY3#&dvUkY~dll4UhuZ3wRrV%}R_IHz8V^&7hE5n%&J-qZ9GyT2am5#P zTQL^AOju2_VYs9uzHyl|2|eqdW6p<+pSKeGKbE&|&D|_N&0f6h311gZtrR1Le<6vr z9sC&nr$`m5{`e94O-%uVbvSV-oXBNwJ@fN9Y1L`EG?9oC38&>~ahog3kwaFUyBp@t zxg51z5<)pTq^<4nZxj4}k?ISrGkTe+^=FU+`XnLkXTlJzeMwjuyTX&H*%cLR*~=@p zf_hVhIj!Q6bm=vu;q*mu*#|8ir^Vi4tDKFds}Ay0;ZU`7K5;tnBq<_+6S{ocud!og z)Dy^Z^7VSiNw$~OLzVaa^>aqP4r|8|b0o)#>E@N*8<8`)D*B5~a8E2Rq}*oNJO|XV*>G}Jt?J*bE*Ef{xXQ(3zrkm@ z{ceP~%G|+RyS<~SXHB;8DTR^6_^xJbVm^172587fTYb9rY+vPq0A811R)XtwH-4i{z+crIVS^s^Xre*NedSb$H`*L@Jp0`3mu)92n~rFJXZ4bFJ!y*+-fW!;y(9^&gHagxr%7*;%F?l<*Ssw6!bc;c z(*){^HMLuZQd?zpe3N?g^;Uc7|2N~AI(3uWU-eHb2)&=hYH$O-P&$2rDY)5WJVo84 zrlzfw)rM`6>=VyTx_}h;-hR0?Ea)}G@&(sgjnWLi*^@Gl6|*EC1T1gA@(3rq+@f(n zLCqe>rArb#e2z)*KqH=RuZc~rsoQDR6_`NbtD|8OJF?OUB0o!!qL1XsZ~QPqgjiFu z9+E6(NQFsiNjim6$hDj8w{za8dYfI1QE@**{L;*NVCVw%E+JTlSR1D*D^LcsRf-qV z<}~?fwD8goPe?>bZwfM^{e4O(L-kTjCUCoj!e;Rn^_EWkaty#GG1QT^RI}LN4jn=Zr>!J`rRXap^txz<5S_=tKubp5|YnMV8s>dEaMN?BzXU6 zg!1NMCs{=nHMAs!jfUUnWBL5kbH_usVEgk}&hN2h_e$bSxwUyani`#q2tmgOBh6|( zg~6PT6OGw2!&SPU&rjSr4thI4#;S9NA255VXKWmxiFN(&SA~5|jE$Y$CNX~IYWnVL zE(_lwCmoFRQFywp;tY?i)@p3$Z>_4`{0=ZVt>chw^{H=seB4p>DgNr=29m=$#s|DO z1S9l1wf;TPcwJ+{4|Ozo8^PPVoP2z?-)k+O5Iqj(+4C%>yr7oEFt{jTt3v=F|LgyX zRh1Xu4GlG$%(g9J&0EikE6<#Gm)Z93p(tvytU^($FO~7!$nqFZ_oi<}AK7lgI{{~W z4gc%7<)SNjROflcC&6fw6FxJ<^&a?pM6-!n=EkzupUG`c99mliKcpwjUxDdx@j`*TTuRZ=eKPZC9Ns*Pz|@JCwG-9MUYRm z!{QE(<(i}UZG8Cl0JAU7&!bn6fapTJ5~i5S@<7q;$4&4P;%?kGa}RQ#ddVjAP}&#r zvE7}f{HXtZ3+@BM*5fEKWO-k$2q$01Jl3XWQ*k3*p$QF7pjfGIY&)I99M6=czamRN zQNgTE+?#}ELau0BK)&CJUM)L~<{AWM_*#vqcmAesLT++YI0(jk(tx~F><^c#9LRQt zfHHBPNag=(0cJS*%mjl-$%6Vx?%qYmiH7OczAe&s5U1-Bd%+~kHc~7S=oSwjE|_PJ zP1HahyAW51>hp**KG!A**h(XEJ6*3+&5~IQpXakhO$iu767hLTYrpRMB_h%lj^6(Z z6W~~k)X(pPNFQ1-c$o~LOM9;fvR*&Pf45?XWwxtJe6~EmrEw0*!Nnz|uTQAo$g_l` z{0Y|esH9?N@hPRJ-FXu=8E@||A%a zP~iZe>`R4R*Vx#>a9nyuj84cSbdew2_w9<14XU)r%q~Kkr^D22Yyh}VzCavtp!S4>prKz)&CYhEGJgl}9rWp_WzT^)N8v!mPnOtJ~KUY_wmLQWS|l6B1fY=tZuM zV_(FiW$*K2tp5>Q|0Qdwal$AzT>yf|xkDtul4ibp&8&m0fov;43>zj_4)Z1f72d3z zT|Q<4*(jm;fsTG+k*t=9!j1`Qol;k7O-2pXI}d|XkXPujh?&{yA*$USwp{)un=WGh zHk_mZri=m&PN4{k$HDK*`6=cF9#P+6ldK7|Zew;I6?=cqXMyGAC9iAGUl{?@&biE( zjG}2R|0+eU!=|K|Z+1Bakh0r=#lp+CXAICtgt)d>kF*(acVXnxK9~&^eLU^a=(u$z zujMreFw_he%Q}-@6F&Ns9>HI0MLh1xX;kLLe~H0WX_pTt+S!FfJk2Gn4dy@oZK*#~ z5a&0g$kI_VoaMXsYr~&tb)t&)Mizjj4i zO-A5UA;=iVJDpbJyv*er64Vmb(D=dZVXB|>{tkM7Fl9yThtVzgM~@&?a#l%goehtC ziuU?oI~jRL0rdeIvqRYV<4R4twTj0ujTOT1m0?WefvB9B87(dR^lMHt$vk`CGy5I< z$khG=g|Cu^945~ZZlKa$!oqdzKr=Fv0-!m2Wg|%xcZVhQWIT;^u;{rNDJmlM2Q`BR zrQxbojo+57u{iv;$-luJghJX<)jyF?C7djmJec$z)=KM}c?~)UICrjlJ&_ghe=AZH zo+?NJA7}w)?bUQg=q*FsR<}8=oHdI$5pf1J zrNMf(tag4p+g0~OA@UuH@_arU^4IgfzqIicI;k-9eerHADe>&4I34n4Xay*eV2txK zMvoO*K`Yz6!xcrDfg4JgAcwD ztZqc_Zu{CG!jqajj!q8b_@QVR7@FlXrz!CorF}+aICboo*Y>;0vaDu9u474B3e!I+ zwZ4SYZADvWvAK>Cbyh)^JPPGyjp?VHnbU^2p%Xu}C4G`QF9-dqvAH=le9w~j0~ z=_pK1EuXKhBeXp=u`;?gj#;#B8daxe&y4-iuFQL5ZkXSiWy*4x{39KQKEa_ihBBKnMBsQYV#pf5H*{85+b3w)lAY>Op|Ncim3a)&u0m>qe(_b zn7#wkB7_Lx3k`8K3wLfK9&Tu<6-_$?p_s?*kHW7kF{6sADl2Kzzp0kC=fqzkBMy!J zc8wC(x3sfP?fcQb1~DW~k+t4K+Hpp|outnq?Y**BZ~s8PtX8dO6bpq3Y#yawr$P+< z%T7cKRZlCu=5kuCvqRXwU>Myswr&Pr@ZS~U(Bd**r=EGpuRh;*G!Mf70p&HmGuCbU zQpmRxe=Lx_o)-1q9UZX)rlsh=H$Kgw3k$rr%McDqzpTx4IM;$&x`Vz`voAUy5H_~q z#}f>qJiC+T-T&2~h#i$cMZklNatoOZRs(e=lNCyUqc!&D{_;gmq{`>Osl{S<9eK2d{P?G```GZy$*`Y7){ds>ZKI5 zdehh-i*EP6zLD-v=ity3gp7K%e4M(8&?W-{H+wXV;3S44lFniU|9>M$*fF#FIvCd9 z169ITXU!7VH6j)2zu;4cnsyG`Of57)IO}b{_Utg5ET!)5A06k7uLRAvf8~n`oF1hk zZsER@U@ST()7xc(n$7lk`Elx3M~z9SWWHS2`dq=stusyfg+ z`0rXUZd;@U_>Er#n?^F%<3?cw+>we_4=#U2BKZ&Uh+$VY?E|tZm~q@sk6#Hpra#>! zIsGW4_r2)7_X;x29}aXs$oaGh#V5ER@t^;@jIx&Oa08SX3!CiPJ|^GaEO-2*ck?>* zkF{v+8xQKffv_~~br*l$7CgBpWzq3}E*$!Mb|I)+>o2+KV+SE^tnV`xrUATCAb*~hpCqAKEgC*ny@{No6v3*y@%VmjjsP+neJ=(v6nU**uz2)Tf}RfM|58{M zmlnt6l}Zir%e4!*xQ2)KHQ5Cej;`GxZg0r7D3@p_zESbu>cbZ*NW;*-%RWyuvW2C) zvd$wx=OEO42Uo6n)~P3%NmYj%O(owgS1MIze%>UMrCE$Q_tW0Xg?rID|A)-#g=$fM zE?f$xjb_dSK!?$zr(rQD<0OI6Y&=6w-h`UoB0(27m9-9*8tPZ;>Kjl)YZ&ZkQ?jkh z3#4^H`gZYB=@?SrtzTai_D^7Gv0LHz5 z%3JHrCv$w3HAY^4WRpgVS3($&5p;X9OG-)_OU2r0?Ux!H;w6GiZ)mRovTYpnsRE~; z{q_FYv`5+}zQs*zzgbq^&CTYlK773RR-sy?VS3bj)v~Sjc=x~pS$JT3_L{5kO`3Yi z<=0SIkCJb(Lt>K2;aVOsg@OIw=J0IPx);hl`gKtLx5XF#UZ z-{35S-NJ{Trjcxj!Ft$&S^K-aF{jU7ELr(n)7Yo%3x#o92Et z!4i`d9laU{)g=cb`ByxN6s3|d+*^fW52SZlBykBks?iXBPhHp_^sH~FR{-U^LrWE4 z_dmBXG~KN9W>!Cn781P^3HutIVlqjKZs&h&YmyUnrEr=JS)PHfH>4bvoQM2+qlD|# z3VFCb!7UjREo>>dDKixG7$_I?s8c$yFKH_X@gr9)GcUZ9d*>Ccf-PoZFA?C$s#)Sz z#13ERF*~F1W|cKhnO2@iGuljO%q~VCyQGF(V1%bi=Mzn)Z+5p%^a)a(XPr99`#ijv zh0CSx9pF)@Y*XQ>>qr;{Lu>j^y6AGa)8ym^n+rlbe&A;LY5q8T$H-dn%Z}my z((0R6f>*CID>H!cB)~xP39}ap0{@-+aFM@X_U3*XsO~vSS@!7sl&`Uzyc@ir(kk@^Xhp z%ztBs0hBp_oB>e0?_GC>cYw)gA2x}2mSuslqR4_g*Qu}in>&}^P3jV`v($9^VYR=` zW@^6GTXBm2@voIgwXq;NbcuNR@yhAEk@R_-#L)b|LH2DR(n;G>pjMV*+fvRjDVOR{ z=yXMi`W`r$mCf?GS&WV6mzX908>pBWngl2`xcD$w1{@?NC)ljQX?axB-skrH>K3*u zT?l@%gy`!D)&P-4Dc32`wTtKAF8PB^J6B2%T|Y4iZ+0)Wd8(8+etD7Vzi#|Ev4z>OinQfMBznnutf z$jJMR6%>?zjl1@MTcriTcXwJrFLfXHi%v`*u8AL4bDm?mp2cMtK9~_F_sY*6l}yN( zbLrSjURg;tkb2e43(eTR`^B7{1k8ukSfeKu9mq=t|1$5S2<^V0T3%kh6^|edMQ9RY zzQeN|$?m#7Y5}2or?9H?{AfL>xj1PDQnFvi$KF>!`AWZ$>zpu#lFnsT1f#YQG?JF7 z7&xwX=kbQW1K*w8CqplzJfGw>C!Qv60wP+RUMgjUIR7el%!Us@ctkEIN8fFs|J7w-6u92VdM$JbT3jxYm*dOpUDC9uC2G z+%70)cl0^&X9I52`d|AG{B_!m$(#0vcO9guSpg(~JlqmV!%CC?%KFb&nn7>lz6>5u z0DN!4)XQ4klh30ps{!BsNq@G%|E^9Pe004Wxkof=D#Zav4nDB|5&_s%>J%eBz$G@n z2QCaA9xXAtRP6~nc<$Go6UX~vkkik`pb}A5l$&jCFb6JnQ7AwTJf+1Y*s^*suzW`(9CR6uaS0AQ+q!P{6)>f9-+FGzD$z@SZ z+j6I9$xT+%$5E8MDPSJZVmmoFDJWMc-U?sT7-M^(FOw zql+Beb}6M!#4MH0*$oPgi+dXbOv$210k*3C?D-I?Mx|XanI}rTIoOO+CSw;;jYm%9 z4^Eo4O;NP@7^Hy1%4<~9YC6_21LiRoqJdzeCoN!&H9;e3Z1)bJ$FrUME|!w@9y0;W{qZPVwC;Os z%*n%F$V0%+o*^MuJoxy3vadtSFBH1-$K|0fPE;?Rx#L9TC@nex&Gkz za(uEmZe-s=n^pao)J7r`HX0m#GSB>*FN$X_>Bsh$JmQHu!ydsE0}>WiC&mV#{DetQ zf9Xd|N|yxl&!RV8n)p-H3f|NC5!FV1l-t>9#PL!y@ zf|v()yJe6_#p?AW<)p!Nxxr2Nh*Oh%z?$-N#b1H2!ok2TtYS1Ik2Vd((GX1`M7o-;eMFri{)MLQZpvLf(|K9+w^Jy0ncLT3S4z2#2>zFWx*vGkPsGWm@L$CAj6k)da z;5PZyRlxCGY)ni{m1z&>a0ci1iVBvuBG#jY4LqBb%YbNg;*kvB0c0upq$Xb2nsp3PR)?+rL7}X*HVpxy9G#xqmec=Z)3e zO@RH{rDB#Wc_?QcB#hsE-$hV^JKREb{6Dw#tl8>5)B7coJMGWm51vsO8YiO@L)0C_^QJG^>sQoyI46t?cog9uJpaYaC*4o z$EavNsSMR(F3I%6hKE3eUb;~MQNGi9neO_*^es7cHm=gXy}7k@!tshfCY$*p8j5Lx z-m@ZsuCScAVqReN7lkGT&oP!_r3{JcqKHe42lBBSdfX^o=05Bhia(T;;9Q|hcLX_% zvG5;yc_NFnk@C_3@ER7&0eEn$J?T`wn4N4I<=C>RWcVB2rPAtvMVv&Ang3o-<){(- zLrN~hpppy2-OpF>-U=qlu7ptpf2s3S>cZ%D3kV^~(zN>At1er+6S;~#V_R3>$jPB$ z`J0Q24Kmvm??EgAkb94js=xh$;UfUl*Yd(n^jeA-2Y-n)ABj-Or$Pms)!Tl;*bF3M z|5)~G0{R1sE6Yvt3}nPFK5ZQ$stjl`miUVKdH`WAsHmbZu@+{t?jNkmsUe4m7`{-m zzi^1$TlQTnZlPVi1sBDk92cbzTGO0oI9A?me0y%MpO4_!}Uf5 z?VQNjbf?M7K3va&Ri?a?v1q*LnU_Gr{_u^l1j{flRM(uToS8pHe(#txzg(xVem?l; z?lmZqhkzQv9}J+A(#hZeo5JC`3YKoR@Lk1jHd&TocB@f)7QcQ{Gj_k1hsH@xHo1De z0wE!#Md=@y-E0~Ji1ZWk8u9NWXyqwYV>h0~NcMq0ijXvEx1yjcJ zXB)7nHW@$(qIrk8Bi%C}`Nz#<&BK1*EchA*h+1M3 zyUS>>UW`blU#d&GJ9V-lr_@GN(f_dMS8Y5;0AVGt<5I@d6z~3jo}n?F+Z8= z=vFd678WfCKgr34I#P3v)SPKI)0L$Ia;VPZ1c9Z06Lb!BW7HF3?Yw~qQJ2n8q@3HF z>`7UO4>F)3KL&D+`7i?0#u{C(y@wX+oGFC`8`*{C69vX*S)ip$;{Wj@RXWLK}&kyx;~ z+44oj_ZgQhTMJg%#d<8} z*s)!OsnQ(ic6b!rM7Y^V^%1kPaP6dlNnY9AX(CSi`&9l9^97k#vlm|1871BxPn&L@ zPLh^pe^N@P(nWUJibsSZjt%u$S*5!=bnWIqQkM3;_#h!^YxDh#jKc z^gK4Q3|W84yLiR|IdTFlM4R`b=pwU-JR&bbM@LyiE(3XF{VYu5G!iJ0r1uC-Kph|5 zu+4xhyi7z?7xeB+~XBCUz-xb|ifoqWnf(P=$8%c!qlp z?Hh{I$N~myTFGb)311=%&)WujjPKI z8ip5qQCr?&CA<3PZ{%c5AJZ@!H%fPMumWzi|FYiwy^op#&_YcYrh#29PKQAaSzIg$ ztkz+gwSMd@sBgn5YW*TM4ixUhh*en`YahrD6jTDLPP!dz=LNhUmg9SNpYi{N2}@(9 zFr%o{)TX2MOYK5pcU_e@Irw1LJ0S<4uu|XEt!{U47tXI}(ySFG>yt#22Dnp4O@geI z>++-gn~2MO-_8raLd@Rk(XvM|1yX7ux0D31V!fXEr$Pz$LJ8cNDgh`yVi+{-n*<$l zD;K34%GcPhB#U67yegV^=rIjCc32A7p-oy!Y^ii{rCR0!f&vSzHaHN7aLSkP$c+f9 z*mTGC^SAD&xW5<;jfE|4G#s58VqkgcYs;jm0wE&LJ!#vaY z{9>7jDd$lq&&ZB%RNlHN&`^QQFoTl4yG|cAo14;ogZt;g#>Sz4?=n)Z$S!}?IsSrnKd8@l%zR3;=$i{6-#6@KHkZ$whPrSXdDNZHy z^e!$j(8jfyutUl5g3jLsog|~WZ0YOqJ%{4x0u}G|3XyTwcmgGEZ0@%B#17?kb-30x zHq;7z7j1_s|K-yEbL_2gSV95+ALIj_qJx2vENO=T{M112>EEJXfb1D1LeYlnUe`0)|AAcw=w zbQQRkhvPVX>*4mn;>zFcC!24`|7fP`RI+dXL-fRXHSs3Q8V(Kqd~d=hZ6OnOM7JbN z*>|>I8D#Wj7~XCC{=$wdLkj|yhwo9r+Ep)NQnSk^MWOS^ONY8iVB4Vso~0WVu9dA< zVKR5KnJycBU!!nPxVMrt&>ubB`>Aw&xt)$)7|$Q~ol`$3A(kcBN4(IeMD0(1 zGElH>CJecW_rEM({oV4Pw+Sh@^k`}oYd_sUqY)t~wptqnQzAblUd`q{4j0=2J^NCu zC__jh_~gzjJ6wxI10=Mn`l9KNM?{ogpI57Geog+(Ofk_wB%U2_>_Sa4sxxKFZ7VVxL{_7YgK&JC(joft5ZYreOW<}1N(&@MdzJfBZ}x%Z7T**uQ_3qU<2 z?S;w)T+rz^Iu?{vA_cIyqbb>1xO5Snhou&jD1YC9k8FXzA^k6~|1V65n`76b`d(Cy z&-{&~OSPj_5ySYd*O{BSZfIxA#QZ(;@pmRB6Q!dS%_wEo)=r=pkOKnE9Hw0;zJjb4 zxGLa>zzZiI=L~3D_A`K#;ey^Tn@G0Gt?~llC9>C~P;8w%g(}VtUhf=~d_(ykUsbKj zL{-@xTn@!@>fk0mWmNiUfZx2F07MOg2ADBpyM!ygB<+1P*BOMC?GN75g{3C{S=hUY@_uejXe~vYc%_SabmE!>?)E55Z)eLx=Fx z*o9)2`BE&y$$JcUevHh_(vM_hX^JiQC}BcP2Ax<=0#WN-MmwxJozBs5+o3or)|sn7 z9mvIjvFI@8m{3o}v7?JA0hH)AxS@eZ%dTJOw|jXD&j0VkAx7IWrR~4DYAiAt+EG@@fyhxRiNR!J&$E$%CTYp~lRPj6 zn9faN=-51Jb@#jG?e!(h%ETq^op@r|3NCI%6y(e5;}Nia{Uv?{q;XHmxh zRFfB-68V5E8Z=PY9kTmo+7?S3j1@{yuGvBn+DQ1(_NaRR6ThOr!29&$iIF_7|YSjL3LST`4=%! zXY7LHbU@#g5Gm9vHw_=6g;AlJkN>R%_utF?>Z84ganMh^?CS(`;~c)tW>AZ@C#X6E z<&xvdC4M1Mg#Lu1I09SiV4-^0uST(cX!{ngwcjDZAjE2Yj5{zpKMo)INvWkf{cX@a zP87{M_`^K`jp#frHaR=otI^=YedR2ni%rr1*Mb)K|AxfUlrM3FB;ZaANjDIv-jP>IiYVifM(&mQz4A8k84NZKhWVtZ%O9xyIQJx#R&=uX3TQOruqf3p)|3Ah;n%YyLvxneu5JV`|hd-)Cno*W#PQ+D?4(|@u-wW@!tcT+Cgt+|I_7E;8s#Zi8rWZ8Wvt9AmD)hEhOpcc3<=mlQWU4S zbft8-C^~k)4?=_u2j(G%?*6W?|7v4sXusMX%a%iXs_2zX1(K9lJ^1Xo{@e#7GW|y9 zK+C=>(B3kg-VSuOG@0DpC6AK!vwu|x%LZC4fS6pYN(*{i^)+qNVyFgGF|Oj*X0No? z-3?*A>vdWG9-xmQj~#NMY`nD>CfoG=Ka~IgqWBOMheP>E+X_kM$xr4ebc0R?1%v#} ztQh9bxU&>aFk;Cyq{I34Sbikp%uySAf@!)b7#ZWczD1Z^tU4a1Eehu;JyK1g z`k|zxI-VZoz_o6ZrAFtL>mH*O^+V4=rJ2s@ zcMb+2Xxxk4>yf>au`|;Yrw4_`m%ycHd394vfD=6^K^CV%IX}zu>&c@iyU7YWI(Ux) z6G&#i4F_YEaclj;+J4Dt^Ndd`WIBO#oLp#s@T{!2EPub#T}6g601nDk??p(AmJ$l4 zfjUgf#rY*UaF9p}HRG_6xHQmYw=Ep64YHGR40Z#qrUBC z8-8l9fRy^I-aM+O9UIx953ivyZC)sUcK`74g2e% zo6gimCTtX7I5IF+zFd`h$`Ub@{fc7Blm-g6$KB>fr2xaL2y=mMrI%3@HFuFU&Z};ZJuV3GL#=BBzu>7vNYN@oyl8o!6;V>{jZz$)=->!59hzjc}18-s06{{Vu5fZsT0tJL^S zy1H=HXs;?y(c&DfU!fYrNrE&`Gaa&U`OeY(evlD(PCtBnsc!WrsCil6hVzPM zwD|@V%~9c2gW!83idNT8h%~fNIa~LnLK$18Q9-3D?^Lk@L=ekSV4!PuvWlKUN%Dlf zJDW%k6xn9BOA7CVgCg==qWwmP@Lk`dmGL)}T4co1R|Yf3R&d$7)7 z|2|MibR}54kCc1nmA4G=q%TWhyYocGOwuE^D>+ZG-cHY_2+AjVbF}lE9`F_8I_+qo|;$U^_p3o7&8(wDu_qMEabJ zao(_c-}cX-9rEJ&`!*l-ibfq*8u(&(_2G7i?a^O*UZ6~RL>Fqa&LUI= z^MQ5iLRDHurf>5c{Q}=euy0O)BuvZ>F=q)3v`6`d9p2g-P*%*HO(jRv-#v%mq9a-0 zi#u5aR*a}SB~)9<{9vyQgFE3Zf<7nv|9iFn83jt-ibot~?#!?xq+I7;EUZ*0lk&wz z(^fKlQL2fuk!aF}lR>oeD0Uz6l?*&3-YyYOg?ca z8X9IldzOlV@b&H5USYOJi{#?qULo;f7Ee}P><|i}?RSjM#QE;ebZeRY5o?f6oKtc& zDE@D*p+2~iGpOiO=oDrY4I(T%7b4=BDXFfY(t)8@%!y4KLX=CWXj$tC{IO`uk%3n+d^(_B7A72aLETi};&%Y)~9hK|z55@Q;2^74YyKnO?d2oKJ6}w0BI(NpPzh}{!x7y zf!^YI0%P8__1s4hh9AP-i~TNDoDBN$3En$f3`@#@NUl;$t(+C3@qVd*Bn9@5c0}*t zt+Da*aO0KcN8o93_!;KC1VICVpe`hhll07Q-7p!h2)p7M0!JRl2RZx_i8;yf7Kp~f zz=T>17JSU$O6dHFEH_6QR-|}7h!IP7;ItGzIldE`ZV<@(1+zv7N!-4=Lnw1zZ}8}r zD&Htt-j;iV>cl#tEWwgq_gi8yeZ5asR~LD)zC&64r_pr|)g8`nQ_K|XR96HxsjxIJ zEGAT>WspwAJ$bP|V{cBJGkUDzxEvLgQ}`0eDAH8l@Ky#iHeDP7}+`E9Sn zCD^#8M#bAuHc8VI8PNohMas4^zT#KZXQQyUp!LV#{YdF-MySrDQ61%HbN6G zS{+9C5mKYd_S<=e_U?f2#cXsmG~;A5(-&&?SYg=WpMP;B@?v`J)_>8^*j|K<4C7yS z$38-%_TSeg+^uy9j9)zPfrQQE+&{>XBWSDzdBZ0}4VNYO0>PO~!u&I=8D%j||EUP0 z|MM;@u6cr-wX!N^A2%A}iG)ZGo2!zlD&8!pL4TUnma+(QP4Y)@R1n8vF0TN2fWfh6 z1(Btbw5T(1A-26JZo38tC6$zw)`ELlVuoA(+_QM)gkR(3bz2O5pYQ%wB751O;WnFy zx(n4Q+w$=DQq@qLZ}L@jeAwhbB#>khc1B*Y;7dco^zD2Q`(_alICTCkZm7mj==yy` z*Mr!n0->t;9g>$1^EG3EohIfmlwVX9X`I=0|DAQ=)Wm4Je#`3;Fgt&w82D_~x$qZm zP>>1)jEzMVi5{qF9mu(lQAy?C79LS+QBEx?oKkLZSb|2qvl?!OY9?zE33)|$v?zZQ z0O9HDN3dhT*9VRG;FIWUQK_X+Zp{Ylo#=>MP>ZfMwpt7&*CGT9I<{D7l zZjHSx$vy;!z`iBo8%Uy#wrab%z2$p3xE8#fh1`7X?&h~DU(27%96Mn3HC(j=8g;t9 z`5te}#y|abBIR8@mxj?U;|sYk@;){lyEyC5G1)AZ{lyY`@Ny{G`iO7LV^!QWZ1;Kd zr|P+=HblY+?|*Nf%-(OLhz%j7-?*Tt!TVx{QoAB%-5Ih2T@;g+>z5J z;b}Iwo_(|^bPYA&_#NVeyuiT&CDP%YroCP#f7LQrd-t_iyHfrE;I-pDLpg2aM^Ln(Niv8 z+|M3}q$)0i63b!gZZZzdQ;IX%y`S<EcCnBA#)vq0S;gS|!Z@-zea%lcdO9FjFbz$Avl9^< z4i3^nhZC){hLvTq?F_YvPcvMUd(ljA&H{5M+B@-FTmCA{O!oW8|KN;dW_^-O0fBvnKSY+jO(q9He8Po6|^jm?4fZ-Ssg;t!mMy1 zRV8+yN$DB#Aa6F*P|{FqGeu)`o|J|=*L^W>F1pi&M7q)01^5@B#nj^h+k9`XnLGZqKAYVsVZpA=?7p0H9(%gE)iE58^~Dhj-XjFp z_?q-Zao*2%95wn^{?pT``yBe~qtVQqJ4_QF%4#p=_^*3Vg=00WD5&S#-866+UcRZ9!S=j*qpuaf(O1{Ot!9F-OHM zIB%6|d?j40IVAQ;3gsnf8JNS>4pKth8ZHYT+u$eP21=eF3Co0Ym_I5ZMm+`je2JpQ zCXljQg=C+Z|Vs(0B@d+qi_S666{7Tsl*T&|mdBoQY;?8|7vZBRDfuyjZSXG<7&7ir9GRS6HUpbGC0|Ni zZwoqdTl{1*>p2|URRU{=rn^XAhUh9Vg6H4GR!f23WBQb-{_f@lN zQ*T#fr6>X`gToC6j%o$VQwr7l=hO4@-q`z|vjhIG6L72Ez$TZAt=V#WpG)-yd+#I_ z+P?INvq*Ur$e^yhQDX*eqhnLQ!{6V~F(j;TsO@?a_T~zaWNzP>44je=b|9 z%5WXk>q2_jd&=~`w<%k#s%GUiUH&q1xL9wO`s2*CB=c`$D-d#l*!v&z4Rg*`8at)N zX3H!vi|NXY1$69&1?1`ToO<($Yy83~r2FfODM3vLMj+Ic`WI3ETjl$(H}vfxQtq;& z%jc6gzm^OO-ziFzlz?cJP!VOaVV3?&Ms(r4H%U%Jt#hmYahqo}z(_SJXzTDpos$|f z>X9yiiydjA!PMLFW2pHFJgaHJz{ys$FERlb?k;vSeOeKW&^zEw6kGQ!KQiV^m`;aIk> zHt&CHpAtaP zx+Dp;!F*mQ!XIuDQPu=-M|BCr;r*i^KmWqVt&Zcxo2z$wgt3UP37GE3d04~$0m$db z-bm3GC(?4Jq*0LrC6Qa%lU>7;=a7GQq$0PcOo=8t53#Ya`{)J#F%yTX^NP6?CWben z_*rPU%X1q&liy^Wvc|8kUs2FlZWuhmQpgZn-vset#eisz$Y`pZ#vJvMkp^2SlYX2E z^9a{JjkCglSEp9gP(U-ucM>+t)5&>icSLt$rzB2jiKr8IyE&`BU!EVn|Ib%OmI-rv z=sK8qsfzf?V+k;Yigkj`W6BXZyG+VV%E-bPNc)1nMyv_Tpdo4wpJV){I3Pp#F^AnC zTK^R~PLZ1F#Zg}BOoMR**a8a_wq|mXH!EmnhZXtbgE^lR58Ng)sEa>|uL~4W?|m({ zM?$*=7o6pYBS992(+dpl2G(!XF6SHl!dZwIwg6W*`JZ&5rhK5tvG5WK1*HK4t1eLS ziOkKBblEt%SC$2JK6lF>E?gsA$q=*Sk;3Wj3}jL&!e>pNeR(fofowfP$yALWp zKdZi6irUb2vCBxqNqgf7CGS2@QY-EltlINfc|VVR0&+0;)9HpI$U#38s?%X=zS^9z zAzi!h7%3H;mzUSRok9M`6&dE6XzqWkay}Il(d8?73M*^m(>UC4GUf_8_kqlgI)q1o zd;XUEPOm=kGs0yDw_IrPhas?xGwmH62V*{ z3iyrlfAE)ESm0pK^!zgMK$9xAzc2v&dWHUkim6OC%5?(qVJ3RyBdxr}${^+#n{<;= zu32K0y*m&#IaAcBa_KSfmHBdEJQq}{3&~v&yQpx zBT)u0Idj*8{Z6~6XSpEqw|!JWfwTv1=f^<|nLoTt#A3*!nB9yCqN%utFTgTM_@Ff`pB( z=X#Dofs3tU_1(g}wGcinb2Kq#%d*8Div6C5{khQk046pS4K3)Prdos6q1g9|#_z9d zxw@MFuzo!%cQ?9z3m_J8<&d`1blTpjP4pC?%jQE@vS&E|ghVydn(@^#Ja$IupV=9{ z>-I??sUwHA<3$hV)N7h>qD0DfXMU{k{uSMmMuUYGtAK;^>@}ZAVhldf=JKOr7)@QQ z)TMVHCQt^rD~7q&wv60i2$Y(lZPt9UACNkC(mm*b&GAsuqTubYRR98h!h3nRD2!Z@ z-V$(fx>?OQ*M)Hg1|@>q(*X8idT#KHPPs4zg=jv(Qd{yLPfW#Wpg=u6$Z8U`X!Ju zl(OJFqx$WD<^BYSpcI}n*2*b_j0iYH6`9d}p2|F;EK|=aB3Y*}{z0b6xYpSf=A2mWW@VC3CjOWD*h8y4~77_h~-d}$??L-{6inv2Up1Vs2K8x ztF+u_3+-oG9q{;Pe?u_0vosgKg>A*K5uT3EyzO&-(&am}gYKmCCLYb}@J@eN{H=%= zbY9T$5}s81cI`*@_WSyCBW8|&f;bD+)0UjBuLUUu&W?UQmc0y?=}xthz0vF1VO0_5 zc0djF>CS&<)2SlyToK^OQ)9(3Te^Ld1-fr&XmdS~F@}+#6KK20()VAziDpICPLR-{~HA7;`ia@M5`;urkr|7l|w%6#>ZI^Si2d< zIQeF;5vS5q)DmE>thFnmJ=(_w9sdT0Wd{3NC$gxgxw|=q=$Ff+IwF!-FPfc?!$Ena0QzucB*Nf!ZT&!p3H`{%|s6nnY~h5Rzd9EV(quZ%jB z+xeO;!gfnlYwN?Gwag}_wafRk;Cwt~kPK8QpY9vLYUoQ`KMBY@sR^AE31MH~4qQvS zK1rZut;Mopd_<1pc{ws+H#nZ75ldq;o9hqvgzDi}o40+aG{U99_;()mJ{d^<(Rd)w zJ1LM#`Wpy=g26yjb;s2EwaYe}2-`_EmuvRzj?*Qdz{+t^$M6-t|3neXZQNL|WZsM- zU~u<+A_l!<)7yZAkn7$`wqz<_pAL=bHPcOOugrtA6geK1>gcKr2LX~|Pv>KTuVP58 z+A$bV*@{)uNo#r^{vt@!4{K21FAp;p4)l=hDxFm(RYm}C1R#&?@X?|XMr*Rv5i-5e z^@&4JYan`T$$WNL=r`}77erYEA-znmHKf2)>Mb|xioNaUqof*IT7vVLZ+y%8&)+5M zm&mgLDF|^O+~JpkHVRr1a54kn5dVcyTu;6%mAirss;Uzqf4z}&?$RkUzC=sP?~ecB z0-R%3e#knBBAcqjYhY(hPhVK2_r~b?Qya@p6rrqTanS9O?WLeA`U1NL{R!pkEc`9X zFH%LK&!R{}FZfkfyMsICM5=0I%ucblC!Mqe`1pQ+i$><_{FEug>n9EtJN9eF`-0(q zhYJnFzL7L^2yxiS0`Aymf8bC*`6cO{D*%%|+zxbk>(`xFUXDJDWzoS(39xv4$8LN> z|MRGbSNz8Y13bU-ACp(U83A2Z!?BsL$;lsKnEHG+U=M1qLy~)tY)tRZ`>+5scH(+2 zXhVV?5Nz~B@aNZwq`2uE?s+>~G{utw?;Q{e=1V=)^6HX}mk1LZCvq_zvG|gM?6!nJf~^o--G9X^T>jX=rM$`dbWvZ54D)R1aS%n8C(^lN98-V@D@aNAT&m(IPC_BsbX5A8EJz1dWKT@s_`Ms@;aeVzp z`&&Toz+PU)#8s{JVEi8s?o7?GP(5H(0JyaJZh27pJY3(;*PupThgfsK%)AI!!6Nu+7d~b~mS;VBc6g zB*szsAriQx@0;uF^USF!p_1bC%xnt>tJn^4ue*_z4vYZUc;ExfbyB)SR&>Uz(hTsL z-T*jFp{tLF2Y795&2aI44F>-_;qev-F-#t|ygUF$*lney+G4)82u+ zaX*d6WBSQS;W1Hy%HPO1hP)fmm zip;6xgZX{K59_M0qx_Wibqs+v?Vn4S7|3Zfa>*6!?NSnU^9>T+@T}j&-VUsSKF_=V zCZ?dESWTJKHAyApJ6P(#r^87K<`SvZir)Y78~jKWyc#lCL<44Kh$c&FVQBaKIktE_MY*|-CP1CO^zuJ9WCvfi?W2e(>=%AnLq&4_KZehK_rjxA0}a< z_vcdpCh$;ezGm(MHzIx1?$Wzu2;(t_uUy@^Kw8t_>*}ynpl4TUt-KL{gbf}nNYvN@ zm{GK#*%#s1{}M;*Gt+Q?9B^8m_b^9-h`A9g{rhfnSGH^Po}w#jFa!Bxyu-!b^ErlC zLgx6dELc^hY|bnS?i$&@RVw=XRCTjI4^v@wetUk}Pwa2i6HAN6k&u5t@l6Dpo=IT` zT+YDCiocd4U!nNJnHYpQZq)_fAkGSq{|CVO^o7wgh4f_UV4}6?=#ZWvo1@=t{IL*q zVU%kV9Xp~C7jb__!s)X+L!q~Ek|G&+j)`u{@R?#gW+$JKZ$8XQZ>o^{{DS~R`&GSB zZXy~P4z9;A2OAKXM01OOI4oNJ@KJ&J8MXj$HU~*^f>z!iOEGzJFcLDRHmCB5h8NwV!aV2*ZHk*QFJ}Eyl!;jFia%`S#0Nae96Ia zWGe8@QQ=wGYTG{!J2OWH2H8*U6%f zx8`X(4=JNw-S?{8)RsyaH=K)Hdb+cBRkdN-b&&;lEFQ-{DU2H>hUVrdn3$NdefJQ$ zIc#$zP1^dK`;)=x&fJB@9B$)Wv{S9%BK0)dOA3WBPRI>jz)hMNdN%?Cr}+cqF`y4_ z*@P)3r|%X4sFlqOkxGh`r2VVLNH%Zet=hglWl`~Z-gVMZ6z&mFm|;)$64WL1N>eVj z(oD~YJ0_pkZ4MUXsy$_&=6H${iI1E;u^ib)U>Fm}2o#x=oR!aDt%nf zkTz|5P#j1%wf9>mz2!h)bQ3Ud&e|V~ZXwW|LutYH&FP!wA1L0X`3d9N@YuriwB1gJ zc$uRMOiT!jh48{e&5SEBX=7JItCdC_sAOuQ_&3$%8+ag$s>T?mO{0Ow(4x6 zLj1Cs&yv`czNO363(L60vlCVP25RrHmB^TgtSecNI_G_Qs;f*yk9o@twD)NQ0{<$b z#PWds9RE~VNGDu8@{pCC63|B8-szK*lb!8BcD={Pe0F)yK)+!b_LeV+22ThN_jem_ zCbtG}Qz4f#O*?UaHB7VsK9=FkiTlf!kL8XObzb7hCFmqdFIK)tN%$ib{F#qQz{j+J ziz@}jj*CCcg{(K~SdU3j+80*Ew{~LqIY)Df%TAw4{)J!b5Zk6KOkQv7GVAhi)Q;^b zuv)`ssv|>g%q|MIr-8m0YE$nq%AW5UvZuwkph5+67aq`n(x0cQFDBUbBW2jpkmV;? zUT@I8gyD2bAF+j5*&J!TJdE!x_J#ZcvyVNo3PWeYe$CeyMDQaV#QAaTEVx}bsPInC zvJxGjXSU=LD%O{<&9$AC3VxqihzZ8Hz{}|R2v}KB0WHak@NCbSXos6r-UrkbSl;~p zTF3UltGokauPyZeGuQu4wa<^>4sCz_<^xWjNubIH%U5p`|D7XQ2YMJIQVl?b3}?NZ zme6RKJyKBe-PTk~;{C}TdafXRnZfdL$eFCHx14sUBCmEOk&^u3Eo8hB|6k}kiXk_s zJP?DPUS~t1rv6!?@H4D=N#q=jn!MkSe6H~VOYD$rM#X>t^OJ@Q&;Hd%oPNKH_<R?|!_3Tk-a6pJ7R$F*@1Q%n&J(fdWQp`F=HsfUO`s7=0h;ycRUuJyEeA z9inuIZwVs;(WHkF#_w%`+opfLzxn3fNnqAB09g6zvp_c@DPdQyg#dwpCs+Cs8nDOR zN%Yt^kT9am4MP2KZjpu{D(7s_+O-iBNj*a&)fiC3FYNA38;fEg@(p9eove zvXPwNZzOF9ypQclY(tt0tn+FOCM9FYSQ>^zcRTPre^#P;snLWy`tu);V;q3!60Yw_ z#V^3r-rQ!m2HxA9HY6^0hh|E zqG)Pp?zZsa08*E;TgoAasW8Jso}67EJb0%hh@i0$5K7&#(QP<)UHC1-AAo)-EvGrq z>x@=BgrWczf$pyG%8@+ypM#-|yl)5*ozK0aTeLqHjoR?o_UE$#P9SfM5W!=#g0DCn zslCyt9sQAa2}S1|c!FES@3(bt)wtO0UZlEXdHUC#_k{mYV!b%ZYm#oc*<+I2PU}3s z2o1&dp`2@CYVVkTTpe&MZoXLH6$<>p7pG-0Rn5PQ;Da_>dNy0RFvlrs!#Y;K=P-|V zN6|%>m{NCg$F#h^1iyuUAL*hH>OaSOM_*imnlJw2R!;WVa3Gb9*6u2Ix&1ublj4bq z&U>nt_d)r>j`S}nhjeyOY`-P)GDer}gazRPuq`cZz;)zDQYRbxA|AR~Y;^{HloA_ofpyrD;2!zpF7TEn`f$9 zn)W??;wrwPICGLW9pra{i6WJF6BNhDIxu)W?sa6>A7efWG^-9#XvE}v{_2R||1y}B z92>J=A!waKPDa6PJjs?4s7w8xYucvbz)v5RNLtNP_b6IslYo!~%ZkeiEy{^Dh6^lA z{Tg${xkQIgLx?iol@Lk5B{?b~{D@BQYR18C4x9G0)$T>0t979*_DtAR&pJYAq`$WgPk3AExSDjMy-Wh!8o z4vlqPZ1lM~-GmOw{bA+2G=a)*x|(beDa`1z#F&-mKMdMt1QrwgESebmENs`EPMOr# z@$SzP(_@$>Srw#V{{)KcHpDV{a~LdG+GdV%MqSs2j!@;Bb5?!r5S8->qbKeUENRfb z>#m+~S1p?L{7AY^&oZw?F6aB?(m^-_nmz?Tnzkhy+CY|zaxh6Cc1`!y?GaY^m<|uY z#=hkEr-y(D=BW7&Kek8!yRWfAA4%n5DxH3u^m&d8Eq3>i8A$#$KDfO2*UMb>@E%4pq3Z^i#epx1-gfeq;? z(WoA9&i+{-62%)z+u15pYBC=GHK-z^IRQT}kDX9zP5+FNBBqt@+piU2tqlG5`@@69 zb1|bo#E^vTu4Hs6IBxNLPkQ|Lgn57l&(v%=jq7TJ0m`fIe+OA4+-76!o%WUUwph*F zx(d?J#lg>k|Ez!YkLm2#D&J~8f{Wz!dV0id&5Mo>?tj_-4169h<@TCTjH;r+bi)$x za*(#WE^+a%wkQwG>$V`N@ttq82)h`sk0{cmFT*0T zy~&jZh*mu6KG!{wBAeSbt z#uJ{NXO|*dqxH%EP<8`yYeNaV*LTf)#VUd*%)-y23ox1F2&U9ZE}Jg0X73b%_y%FM zfhQ%;67SIeG%_Z&V^umrrCG@r@873%IQ%e|b7FP% zVR=j*1FsP`f2Pg(^GE!|ppy;(-$~7%S-Pt+x^rpO=iX^CIQe#hK}OtfV0w!p?{?^U zMJ|Mt(h^>jvo((rw#z=|?LviJo&DC+u62dxF17wptCGKF#Fu?c+_N`_77P7=s|KVz z3A#g*Bwic#5rEip@hO-T^uOu5tsIzJq-pOoRo%qwu>9|ancrH?t#p*HyKw0_kUyn+ z&?UJb6}rWK(z(aXx6z1ZYak1q7=1y{9v)@|wrNn#I4OMTOXmY!Je+|r#|6Ww`1UXK z5DriP73P4nlS#9)mB$@1!?o$=*I7+!_QtbKuDcfH1&|0AN_-j-*3I*6m zqkQ_!)UEPdy*;Ym2PlgwkwTb|=KN{jA19Npc*(X8ma($28!ecf1Q@M{{{A^(5fUw5 zc{@~EA!rI3Ql*~>9@7Jz37ujIVc=0fnELdIfBD?c_WU)NNzdFO<8oBY17N%h@P9zPEJaNW~i1 zkBOchb~vG6GMJM;#%5%);0JK>zUKv;DCZX#TO&no78*511jNV1i9E52vAyI^1Kn)R z$Y+y6iwMNF`1|sNgYS$*;?T_O3tp z;e`?hMRU6aKRPRERAUfq{Xz0ips;9*BX74VuhjncV06?B{!}F*L80Gs9+1pxnopl} zsx90eZVa;Jm+!@7SIR>W{;UU=h>_*zwB@!uUz_=z(y{SRO-Rd#z$qL48 z_IK1UtH?J4@x4!=SLf5W1*>^Y81I_MWZOBjk#UhxQ}1wDf@&z}iTJGer7WDyK4{gE zkf;9=w+|=;=*a)$>%4H^EA49Lix%&B|LZ#+J1>DZom&QmKw`VPOa=V_{lF@c@q5DN zPzp+Nx=TOThX9A+yWWTU1ed%UvpAc#XbCh=%4#g!+!j?WcQ&PmY9N7dgIVPLAo%v( zS+z){Nc-YPpRRy1Kt{up$H|zefm&2DxU?wxYIajEqOZtrNe)oNhD-H!J&o zJ%(IoXDe=;)S-?4A7@gHw~I*G3M)~8Kf?=?3}U=U(1R}QvMSC98hO98?FIGq7@6#x z{2nX|+K>u>n0kS3MMdkLISSl+|Ha}1K$ytpdEuMxg;B= zkFD~*opHoG_%weT3Xl91{}of7r|INfKbBrSNs8z|(SX}`uGM!t{6(vK^8S*g& zZy2V8oPzKldU6aL-72%7;1A_dq`g0XtdkE0?2)YUcg%0G{a?`_afu(+6El^v^w^=H z=srnqI9m_LCF@%iY?_Md8uadLDSYOR-R32|&nK6b4qb-FiO=qSLL}-QOo{K3yXBay zP>^@Iq2#HuvKlM{UU`RP=OZCqzty-do3`B!mRy%~|MxmIiv!ZbP;l4ksI={h?%hq$F{Y`gCv*JY0pUjJ~H zAI_!aG4BZ7wkhiJD3W|bXW}EYW3bn;kH#82&kIwbfvP0?4kdyN=e;@GO`!y%3PJJ} z9H6P57HU#|bQ0a}N~Dc`+{JMh-j2^@()@95K<6A!?c(EIAb0vIa*SYbVmZEIU(MLW z_g~K3m@Vm+;4q8t*tLDRU%kHnUw;uWm|HKK?S`V*D7H_#trAM6M;DSSqh93YkRwc2w4XQeU9@nMByQ4 zss&V?>@#|}KRbWX*K#E?s|p{a3mk|9%DVZaegApPr`n-QQ;ko{-||xD5E2wtP%eXG zflZpfD5mrHF|BrL@t2&GweXnI>3z0(f4`O$tg~y{Y4!g%rYt~`xZPP${$q4sY~=rQ z8iNW4hs(m-`^(LBM3YII=Y9g64EkSpSkxh8yL9QK%P1Mnq@w}n4GX?=y#P^?=y3T$ z`2dn9#_OwNF+L0DFw&S$U$^OE0Ahk9DmK}ANHrMiIAT?PnpKDHs~{iW@4)VU2A@_G zg(!-l_sC2iN%?4#K>qnMiQ*KZ?N@WnS|o}%Duu=WzjZBQIJ> zM%({z0YJhP-dnNv9@PAg%s-;%2Jwa@#%Bi274-Y|jivWj9zVou7+DR1p-W8N&hJ}!Z=pzbRB%TTK;bC#fSKb~) z-S0fHK(6j9B>Tshth}9mU#G3`4j_Z5_!8ZUvkP}Iy`YRMF%y)0Hc{-y(Kix;pP%KgRx_p{!> z$f3qpy#Rl^H35VZgeabvag2zFcvv=1>w=ALzizVh%v1UKR%mN;^iogTf32(BQCdu_ zjOITOW-tos|L1b>;wfUM4Qt0g+fokJA(?*jhyd-IBn@gYTT%0p6dD16>(0nyJOY+y z9}X9Wyt-hnChsQu2~N3CW5*Q3+27c#5sBrnUihNkEe)n)qi^J(O{?M80kklhbb&N_ zZHXVwNzrEw{7KAx?r{Vyu6I+?%jfyTa`Z0=0{!iNxo*LjVRxpF3#I<)e_MVbj`tRQ_g-#PS2a zSCz8w-NZR%%ItcE%2djmIv<5u?=4Z6+Ki6#w;Ra-^*PCwEjN||SkCIW-Ay51S*MS|+)H}X19C;au55Wu{-{~zk>B7>YkAm3Mh0ZjET z3*ut9+67aS?d%X6_h`ADD7jiXX%KIDh@iGJEtxKt8VB;j zqT3B^S6Og@{r9t`Fex6;Sb2h)4#$M+1;jtK8q&}R72`7R1nCDqTvi9fK_!nv9gKrG zArEhOTCTtM((cnVE&rOeL~#R#+q|)kZD;BTm82Gy9F8lOGK}IjsBVv*HNR|S5=*4)jlK z|NhO5;)2|CNPV71xU*D_`RDvogt!{~~DnTBkjY5OmzqqjRiM6MM4kyiVa5PVoH- zjCZw9!`B6*8hx~GV!H0i%U&<;$C;DeR)b(!KmqKwfTZNud%7D6pmt>oku%qZpS`cU zyZ~w)wgGzS1i(7tgu-8yyIL(POFif8`)~mXhyVmnoo4Eb?Am@8Xl-E;1e9v0120)e zWR9uL?>$~!U#*-?!f&@*{B?A3AhnySRb6XJGyWUaCWw6fA5vGORd5XN#zwMoxz#n0 z5)K@2JQmKoTU7hao={THX$0tD(0W9I#|r0!rn;4e5qLp7dCj{Vxe;GY0S|iqig$phwxGIB;(UDFhhBG_!hyTbT^@cp zFS##rdp;&9B6tTdbdDE*(IE1QfL84*n-&Ht8mnIlo@b4*R=2GSm(7|2!=|97wg!rO zfa)#aq6T*aD`A8j9{isAIUsC|s{7-L{kw496(cOEO?Ptyr~N1i7uahW@Xc5MEA&mn zsf@Xc-iB!aubo3x4N`{iXhnpPu5w;gS|t zDhUQ{A5}XlQ!2aKkEM6h&vXv*f1!qOc%q+nz3S;A!2e=0>p9xeufsz@@BnlCu)yP$ zdm!5;^Qy1wgjo0`%=g~5`p=kaTQowp!jO~a2#~D2;EvAxEbl2lqR7n#sF=C#ZlK$$ zYJ-+Oh9k;+iP)+Fpu-M}>gIm@h{bCL&ZiH+&;ST^vGMVjwmcG3TxT@mA6^drGES7f zBIUIM3fmBd7qq&7e?|IB{qksW)*z+p4!3&yyZH^!WN!}idcU{@p*2pTsHKd?zH|X4 zz&?LA@sEQYrAP7UK+R&sLYgf=B_#4SqAtWJ5ZE@G4djp!#J-jW9WwyApYNiO!mB$T zkmiG76;Klb)C1}7cfmTA;t?FH46pkcSN-ivfL=9jez$2Z=}29&0y_j~r?0M5pe-u_ zgI)TJ0PV2?Ed-%wGI(!%6vA9V7oYrd{#jLo2?Cyph@qh&$=(?4r%Nz9G3dq!f`%PK zs7hdM{~N=;$=Ex2Q}DtssR~zjmYrd>y(GD@hV^OLO~{;#4Uxlz*whs9$4?Ke!K+xT zhlw?d*sO|}v6gFnpGdA$)p4YT8erp0X9NH4)wu5vdLU<+68cN;Xb1RI6d_W$TD zw62Eau51JC%v4`EI+iy%!yoQBw(;BEd@VD3y@`&=Y=8aDvA)b4mk?uicg@ulI6h4)D#9G5am!#XDsuH8)fm!l>k7==h&`cp?L2h$ znxI=eT9M07bfFO3`vTf_xtS5x>tss9f0w(~dhsf{-^%`vu!w7-@bexE9X&S4FfR`h z;zPvpw1 z&4ac@diiWJBkqEOP&#Fd=4~Q578{9bA{E@|YfMvFMpT|gtyVoz>BwkYKm+6Cadhz> z>!-09!z0-OFPT(=rW^*&?d=ysdOicAt*xsgjZ&z$9@KI!4=`9PgIvUmx~<9#T=H~Y z7yRa}w=c6$>twcvmteGCF27SqE`gMeRlDlS_nNWQW&|(N4V4D2UfLR8w3#hryw#g> zUxxcFLeiKwxA1;6Lk|5|L(fisHR5V$%+SSzaNO9x$5@&s7;-(zDlXMw{{lQJ%muBj zVy;gdh_2j4tOYfWulBu$Eb}(Wc{H@QlT8R<-nc^}n#Pt%Ph#D$g@uJg!u^(@s`$WL$OjDJTb$4-(SV;KUNbTWItI?|N%@_JDG#YnaXm&K+`}5Lul-sO4 zF}>d`f594WU6Zaabpqi)kJ2VXWSWjC08xxF59OM5|a#r@E`Y^=N>LgmFWJbAEUx-F5`xmNFg6dkwmeeCb_kp_na ztX-*31N&7*%NA>ii^7XG<}Y7+CfC-sF*nYECsHWWTCYZR)jjL*l%zfxNOiLf#j6Vt zbA&kge^}MK0Y$7=M(xjyJD`};8wc~4+R!+p?4F4pF21q)1yTD=uCnK57Ri>P1ufnqPEDfD64!kf6)h!uHEri=;1&OXpQ~`jw&_$rr%>#$Pe7$QzB` z%Wj$+3S#m>#Orl+d(OQMS*}eR ztT$;e)-KD|2CP;QX->iye9rxUQspFlM}#zKobFzNZRWLftpz#ej!y>PgV&OAMmQLq zsI=4=dv&_c#T!tahJ?6SSV+Nb$K7i0m_=n)ov+G(X1&_cw9F_t#SPDb2krD}JY}yh`HFgst)WhO3)k*wHI3EnZhHyji$) zQu||OJ(+Gz^7mrRyLk@M*UAf>uem;aM^8ciD|w@e<}~BQa*Tt!6tK*X#_VY{0r1R| zKJNLGW}D2%xn7;)&|Ide?W?VA?iSbkMS=U`Ogw+q#YPt6+V#eD@Oq^?jo5E?&Xqll z$8E{CS}P2^1Qzoj95RnCfx9-FWtOlczSOW7N^Rv#Fi3D^>rTG?ofUL{(+<<~*kpr> zPdfgdp7y!fHbuyK$*Y>#r<@dwO%3s%y?PN3-$>ThYUXtj%g@9KkK!IV4I${^F&)3I zbJsgg8O=)8Z}y(r;^w%QGIL2})stDRY+8|WzFOE1!Ddz^<$OAInG?H>_ji&OO?^!w zf=ABCD81mbIp;F86D4XjX8JQPrs3SV-c8i9e5?^yCKG9H#vtcfH>@I#b2JYI* zmPx^YEUJRt+s?RwRl7?Meo?|=PrTsTzN?{- zHk!qxy0_fc)Z_}0VzaO?Ol^GCRbJa4czVgAZNb(>NEf9LKbNLEn~=DH#`3(qesW|4 z_|f_G=_hb@lxNcqXz9<%A+M{$Td&3j(!_YB!iD2s11UrAyt3m5>r0!|z+|5udN^Ow z#Prv%6~&c&VeMOEChx9#-MHiz59sP?`7UpfKcbUwUy_cbmRrrA)+3SpT{sy(*yVlU zj1caS#@Iq(A3P^;oVGW`C^O6EM~aPD_4Q(-LBU)KL!dr6dRs)wr)kAvOXiM4*PXh7 zFXRHw#(DmY+J4khVCh8ey5(3mV?rzW+T<4)lrCb08eV^t2$yUheK59;uo=V+WeYg^ zs|QXin^eG$W8RdWU)lN|+p%Oy+-ptGLMJnaZK=R%<(1RVp5FUs?CtHvx7=IK;=Jlf z0lljD`ul73ee%;(?%A?w$BWeowRR&+rm8l5u;7}xgkLc;N8l;WD=uT8cl%up;=R4J z;-4Cb5ziLcZmw*&@lm|g%};KFCqbmjl7uzHoW9YMJoZ73T5mafc3JF-7)fTL^jH>2 z;A*Fzp8m^h4s)$95@oM-O9Q!Em5aJ~r{aiR^-h*_jL6)7u z_a!0U3k(r6q4Jw*dMV-6DO_A4Pfu`sR8n7ILVQ}X+mrX{>$kV55g?8Ub>dH4WHF_{ zFMyFfeiVAgh>8$H5EGSzw;R_Dy1wxcM3mi1WF=itp8%Ml+RhyaUxF;16x zFwZte;&OkfWa2k3sM*b()O=%6XdG})&4f!vC)W_RAhVbSn?4mYFR@$GyjFGg(Ol^u zd#UjokAAD|z{ZI;D>qNRf5*>u53Oo8Q74lwdp1#}*B`Bh@Mu`hw%!6h5ed$t_t36; zo$AiU-LNX%>kg>H^|yS4Y8IxHX67|Oyv)taY}g?vYamdQ+-%Ocd`6=DSFH!)J-k3y zA8_x7rv)_ifY*7KdYdG>!t4;X4)=*$#v{CD4WKy9nC0gRpyTRoP83(}TU|HFNymSV zC9`^?r%cq#(0~4W14@5DF3GBRCe*XoiN z=XtM;^sC2;-RLM0$Br-qsr62`yENd z4CtOO$b)m0W;2pFd3oDdszCT><8$y?M1cBVYxv_i@eQ1NDCKZ$f?8nn3}%yQYI6&U zZW1bg=Ca$}*#Z8twe|Hf@Wu9%*?@%=|9Oa}_y#&o?C&3nMoJ8e`>wyhsN3*21<@h4 z{7?{{XnC4H4xMC8H{ZK6M{0fYH}w(DkZ!AR-v z26D@^HK#a&kTk6eXy_F)GbI`Q$hq)>bO{qBA2)shlwP(EsP|<8E&12!T9Sk&mZ!Bq zsoFZ&xxC?7v3G^y$?KR-0jID`s;hF*8LqC~w6!x;0pi_=(Q~9AOP>*HF7c@pMGv=b z@gXb%=3jX8wKmtFQ|bXn*cHgFm$SNEE`G}sX++9RU(}Sik46*UQ|#8W5d)Jsr}13b z&VkFSCLM8fyU3Q4Q-77^_e8bhBV4u38mF6NGvB9w1rt=ruPGmaGoM=Ny`JY>#CBH0 zG9MK(P&qaxfKwtC%&jhflTmEb+JFnpZ#NC63)C4@Tig28K#NxqPpBRpGerd}1(V>l zn#phDWD6gDr1>c4)XLvW3K2F&Q7I}fJc7Cbs*jWVFI-hA4uya%&rQD}0;HV-l;EI& zc*-I`>mc-ybAW#gpm`97dpPgl%gao|cLu`ge_qP{_f`7273~=*hjScq6)lNk@O0|X5a7S!>m6rI1LT0PJ=HeMv@WHxY!V~ZvgPre$OI&mMtqPb3?;sQGQ>V8N&WA06v z;IpNO^6hOD40gT6L9as*t1hRePfSVwc4c<&g^HxV=rRT7QWx+quJE>s3+6B!y1?LK z8%we*(l=_f9X>`ui*J+(-W0C8L&F*;M8iU&R|RxEV47Fk2}1w5KU#A%bz6aL#^3gt zG$&dAXm`O{TCa9k)JxZbFQ0`~DtzmH_vV0QO24AWu-GXhAP-a-Ve~0|Rk-LtM#ePM zRG@t){q4NaixAXtMetLiK5kz6)lUq^WZ2A=Pxy$*FN~fO=MmHJXOk#T7R$fU8?ob- zxc5YThV^$5kdRhM4BOqtfg9T+_p-9^FLc$$;VEHKL#h$&as%!o9u8!$U#M58raIj) zQx@x`b)T!w8ybpLtCQQJ->Et?JCf7CZOZJv>6&-RBIf>9xq*VE|Dr5k!Iwer^u`~| zp?Dcs)@s_YaC>Qve}A7Noa$l%KQQ;X-F~D`^xpuwIqIQP_riUJad|d&b{G{YM#%BM zhy3LuIObCii=IRqr^cp}I7gTHC73;~AFzdiPBV&IZR|J`57R8uon?_!59RS!I#aBP zD!dnKR-{~WWD8ilo&_^Z2~CqY{|ZLUd+K4)RS=0c3_TkXh}EAT$ZW-T+&=w1K?6wR z-^VJ6k>O=I>Wi6a^X8obul3Zdg+UGrt|F~%YOoDQ5m1rDrgLoHOG_hmT#D11LV3(7 z&Z&N~#S{I^c8Cs>J@Hc|SDv;K{Ya@KmruhZC(fjWA8H3GSY-9ap%$(FZU#8lfZ7wg zHdMg4gwEQ<Bi+@7V=+Z{c zGw+mXL_zMldkDHi&O-_2y17S2zeB!3LB0V!)W1}YUIbf~wQ!XEu!CL92ct&QI;CjH z2TZX|C2Hhp4<$Y7vOlO=K55$b{wmVk?R>7#$!O^)mQUdv~JIX?XTNCK}s*`RM8{3 zM^dLjD%@j7WU7rUBaKDPn>KU;xHtY%H+KOy_w%Q)d%#E}{U~v8jvva~Otw!y#aPg0 zY1-r!z$uiPxtlle9^PjCJFI`M3XyCG@hiPLQ@~|u-7Dk7`nR`&>Oz(m7Oc?kqEtb~ zYHBcRHuT5Y9nK6WSDy4NGKnfmHY!R5!|tbLsN$2~jMckUev=*#rQl3qv(}@tav4@O zW*XyjIItNB;Mm$?#JefGlvHZtD`mO5T)(|C%ROxwvcYt#ot~by-@r{KiBh15?VUUR zr4-k0`C_=yWw{kFk3f?PlL4fh&xn8;__i3(KNL8BMeL?OcQsVC`Jw&7UN3^V(D}`b zK>ICf)XhU9V~<0*=IWO#cN8=iq|e+U7R{An+tf!bJc7FBpPd^*>LyOB_G#=Xz>_nm zBe35APv=u?zfON#gwGsLN;e*dO_-u#x&4}U3e1xgiS}yj$a)xgoB23g4tQ{WVgVi< z;(Ig{oJW7hA>w#&?>)<%O3tpLQo-fMc9awK&=@kH=5&_T8JpZPw2y1jxJ<_PZLy4) zji&m;Vb%&M_dLg}JvN{h)Q;r@xc8IrrRE;YCFVV;0a)QzpA~he)Y z97xiL5KN9Q7^(i+MDnO*9(GB5uk-@j8CLOSC~!o)=}>}m*C_Q$@Aly1^pQphZ3s;h{5k=D1&*bCzGRm@ zmP0M&YZYv{vo-s?f@f7XM+!)H4|E6w`zH0`E8((=3dI|a5=5P!Gp3rm${IWL%>lT2wB+p|a8yZ?!EAKY~ znt?D-x8HNSghm{2yn*1^)rkIkEtfN><>_H|!FS3`(4sUa0p?o(QhUmk`Dvy&%jySB zR~fm!53FGF>%+dbdV9BA?a3ddJ+``l6oLF)iE(`RpzG98llP^DX6AJqp5&CqgpG<> zRY1paTC4lIGx*E4f%KZGG;r(>q~Yl`)&F5EoNOfq!=9jxrUZxO+p_vU*u@*=JJDJ? z6#v5oIQou9BMx}sl5UVEuHY`Kd5=%2pGrWkOU_+}$BFutKF=$208p zcogWaRZVEkwh)S`V(@)NL`R}*Fnr-JJ>?vxOx@8398=cVG z&^81?9R0D2k>ucLLgsL)^{AXuPNW4^_zMHd*Wgiwmj9={?~H0{i`GR1QBhD)Q4sJ* zQMyW15Ks^eRjDE+3L+rA*8u9V00J7CbQK69O^_;0r5!*(YN(<2-b+Yw=LXJw_s1P? zydUq4@qXM4K}Oozd#zc%`ORTcX3QDBn&2E12#Xv6u#zyLy z$hF@(;0s{P_p{gU&PlJy6gf}1bl8*HexW@>W@kHq7#ZrN1V1K;4!O?`dpn@HQXc(0 zcQfG@h1mP&E8fxs7F0(Fqhgvw&&@j$RkO!GOnoaKj|Yo^VP<2$K~=R8VwNaf&8^IV z2f`Wb^WCCKRWNIc|A{cd6IxW)`XU7unh%I;-H}=c2(6>n=Ah2Xc|7CDwi!ndA?}%r zn%%%^Wqrynx88BHnAg2kRqkS&ep+N4e;Zym65& zS~<`Yw)dq~VebB}NyZ$K2)4m7KgwY*4KB?k^QeBFHJz8YeDh0zT(ZwOx%tBDZ>i4D z)rJ0(GFMwO5e5s_KFLzD-qQkUvdy!lthCe!yQH{|FlIelAw1sY(G}_Gq_acL0cMS@ z&)1mw&oIEhDRil05tkWtZ|tF9#RNk1kVGIQ3J7iB;eHK#WhalwBQwxEn!)I*?7;J# zZtU=4kh3mpnm#&A<9#6nLxg?+pUoYYpce&R-oe4cqPfD>9PFa&zF~rDG+OuUk=yPe zgpx+iqyc*(Y0y#K(?sO)@&)8j32yCeZAr0+3zz9H-@cFLnn(zq4BnJRcjxF~mtKPP=Ni z_aIc)W1(h?A$qb(o;=+2CsA0Nc(V0e(FulE+EBTF0izQt{_0vKr@;d~iIfLjS`hM2 z^cs%SURF9OFlooSvv%h{W!O~9MyXB-b>|taQqwBMZ!xY*VPF4H`kSc>yRR^n0ZJkH z2A4I8&N<2c*0Z+-)vaolg{G_)BE1vZ+ND(K^dG}T>6Z4!^^ehAr;c&C`9h?bnr^`E z9wmQS!egF1m@`x++JRzTnzW3*oaed{k*TtA<vt}M z9{c(>CW=a1I890UI#&(-{eq`7V@t2FiAevYD4#g`yB%SQ?0a*orFCqJH}YKTS7-K7 z@5vONwXeacmWTF3O~!mO-! zXpQZ8v%9Y#v-P#gOrp^Z?FYsL%LKHZkM!cx#_{&QPp;GFeln5vN6pkN!Q7orqQ^ayyNTTDb4JM4e zxUcgh!>im!3kiJa?<(-^7M2=KV_0`bjW|Eg=_oV&m8Z`V%`|~@v|*v-GSJdze4ni4 zoTa!m#^r<^*>R}k=Hz&62GYkKYZ8nl3Q6OIkwsbPsXsTPcHeL-P3ST{Tj*4wwWwJ&))pi z@}&n+C*3Ieq_iYE&H}+2hZ|TEp@s6Ky5W9F!NUZR0iYm}1OWbr)u5)S>E@nDia?_* zJ;B`|2btqv6^Tg-J2h8T#@=)7Yqp)U>sH69*tVM~)wGlpwcw%f;B9Oi*(cqTqn@EG zJd;T`C)}?7_~uH}trepqAApPs3lma7U2&R7B56Chek6}b)p9AbCcB<^uoi;J4Hi`3vq2LVe%RMFW2?&PI^xw6@#qx7KzZR+XT5R?C-X{m1U*5Q>N*!Y#Zt6~J z8*tDpQT1X`;et9292o+o793Rsz6_Er*A?5UqCL<01l%rg%N+?+)FeD`E#yCRSyisu z_|naDM>Ah9X4#!5gtV}6JLVTv#~uWz9OB*kJ-9iqaN_UFw09Hpezm;P4?KEkU&&eD zqGylpPHT~X^$r%OQ<_-&lW7p^FdY<|OBj=X#o!*FNt(1nHPAQ_Q8Nf6;2BnL!PRFb z8xqY!x@_)_HfJy9xP(0C2Xc5TQC8OV6G2ck#;aE~IzN$Z4tF1NUC5=g+3s~{ZWM<2 zvcxR=$x7Fo#^G>VOp7HydoceoKl8T9+%BD1nV+(go9_r??d|Oe1l>yi+MFzDx34pL zacQEeI}TE9(l_gqW|ccVnC4s78N2RE*szUWl;Ap@SDZ^_oqGTqEWxyg#*Dop+d4V# zy2kJiC$+Bv&}fy;z>V_ccHulmmn~+9K0@AunLe1pH|G~OZUIt=l`7oo`920+>Y%Gf z+4s|Efs?uh5l2bTGYFG)f4PS9frAMu-o~QUL9x7z!w6MSlcIcNKMm0J zE3&EWU!c8!&lslBYfr;85DB!;e=_vyFW$2OI&<;7R9`1xOU)++TF@YY_DAihn4MLS z)RrN+jh*ASvHqH-V|LSbAcU3LoSr5p{kUCzuCVd6*6E8(H7^h8Wn1gJ{J!{xr+iVn zdMJHOOiysFDrzVYC#?LDzVw3;^RmrMTSE0qT_XeHwK#<_IdDuTg!qRVz?0H77S_nM z5$Nu!VTc9zJT+TXnjClSdn(ZL5^BY&fKr1Ca+bIm4s1m9qBxnY zuf%Zex3?VpoE?$Oe{X{+5xHvwi4V{W@9~2ZV@tF6vPM!QM72c2gfyp*5|K7hIQD`$ zBZM@?li$rw44`EaJ$*KP5%B%hT<3ln2jD$6A%d3xU_YhN`nv$aEndV$2zYDd_bu#2 zDMh}g)TD8s9Q>KgCa3nU^-cxKUp%$kW#9dz@$dy2>OCYc0;x7$nls%H4_ynV@lt=Y z#${@T8l*JnIc%~{yHoj_y+{+%45$OnzOjmMrpS=*iBtSw$qi*|Q%u^X3}9yRA?p)05uS#pu-k zW6#PAYkPmOw4vSg#vH#@bI~uZdD^MC$3;lO3(aF;S@kH~44JE*83QntKHFO~H7Sfv zfinM5Ooh6)6v=$;kzP1~)ZJI&?K(#=ByAcZeVDlR)pu2$B@{4$E5Hp@uAl?aSqtxr-+b^>qZsGe)yUZIsJJ4ve0hc9jTI$xd%n{Vb3P!3${ncVt zD|#sMrKZV`vGjAV=OP{|KI-%oRHg`f{Bd)bBdodPm$fIMS-ihJO!=grFEkeKLvZKt zZkiQ09|_=Rbw3zO$A7?1>F@G^9MpJ%YBr!&Lk|ld_@U%rY(5SIKO-l{F`xs+$#Rz);5hrordLP01;OpAT941T%iJnlw0#rgh;qTaTU+KctBLEFdWB$cX$UXX}B zKW!hIb?T&AbuQ9TKd}x!)bh4*6*NYvV&uC$IpU|n$r||O&dYG0n4d!>M$&a1TeVA# z)~3T!!q8O-x^RZUvl7G*ykU+)`{)pHnDbI1!YoQ_ZBL$E`@yy8=)PmN2Wu}T7W`G7 zH!Q(jK3{YBeqWY;eVgFpmb&Y8M!Ll7)-8TUb75n;OlQZ3_aCDg|LW*IB6sl=m)y=0 zG=tMShvh>OR6-&0nV^d2i<&-uVEPnO_;D zWODB5w9rVWVMBoH1dA3vV~qd!Bzx~&Ox<)ad4YWL=-D4A#kad3plUd$r`V!yB~NFq zoIPmYE&8Sm#dz$@4_+wicOMPs8n3POT(2|{QH@8xw5nUxqtt)y*ZN;fy;)?0ky~ER z*XewWUgtvNea355uluz=+FiODcuxRlF4{FP1pEljO?oz#>EMeXk04V$h$5lG$7>JM zQ2Q&KBank~js_~82&la3CA~AKOnmm%WAAU%v9_h_gUN69shxO6GcHOr0Ec42Y0c z7UHh4#7K<)-QA@_%7AiF`1+1I#h2-;%S=mdxlN4IY0jsbfa$Ns0#C$(Avxc=CUj)~ z1*nA)mI;b2sA$8HK6Zs;+!rrJtd^Ff{8PEJ))dQVaZ4Z_&a7@B8by<#MF2WL7kU4B z>IcF&IB-6GLx8^jHeJ*zM#pq#9vrvhJIW=OEV8*drFGHz$*bV_OPHv3;I*SS#~NgU5xpe-6>y+P5#y>>nLUC{M3{Zr=hsmUlfGqT zx(QI304<_>ci@mAv2Eb{`e1;DjtYWmpjH+}-QO72^q5M|4~v$PgTOh-_6@X(C7WG5 zCCiKa*q9IX!1iTq)5!BXU0kXkDPW0`2U|q7!IuHZ;{#a5*mZ#4{xr$W& z%8;`Lg@TIWVHX*wo(L}0_09E=V_dHl&hf4sL9#wDW$F3=iV>0!fZq&dS+16kdTj~d z0W9oeE0BToNX=G`#R0WaGgE*Ew&^1XTf$8BJiIn)b579fr&=O)(=I`J^un%hsBu0X z@@23)zYb6p?6-MULUekCr;iQyVe~}pv8BNv|rSid(Txi ziTe6?Z`efmxVi5DVrr%;*=X)nkD`G$W6o0W-{5X)QB^(8jEN;&h622_f={Jwy(m_Hj>FxwTna0+^2 zN_Dll>%q#+Rh%I=lYBri#fYsI2Ze~Y%$)a#dYpahcgBC`PzZe63Bcc(+za#Cx`vTD z68+&@(b|9^LAMfpnb$@y9I!Q(EAYE_#nEnO-2-V}iz%UJpXxIq?^Ex>sFkjqgyl{0 zd@TEcJAgyAX2Yl8`@tDn>ZhUJN@_EILm0r}9@|O>L$7770Gct;d6Z}L9v;?W;^H2u zz>sf0V(!x%_%ngX`(|3oFcl^}&q`{5+DU*YfOx%ZfoCQ}6%_V~rR>|`;{q~W!!Bo! z+yQEtPw(q(*~k;x(AE|>sc8`z;*hK!FLQoIhR)Ew@a6Ex6QG4`%7*9&CBbYWN_!pY zoZKp(0Ux#Q5N6czwMjX}DUF4dwWP6T<=-$KqlX;I@^llafS@Izs@Z}gd`Wj4vjk-! z1RgNsrRl3EHNKBQ1)FucN)8841fRa9ROEuWfQk}dX%C5dTrH|fvT5Q3f5&TvHGVd} znY5;k4F>=nVbn!=Z4Ke1zSt};|KJC3_Lq#TU*HZwUp{`k4xJ1R$1-r3RDdB~M|ZmO zzTc>>Q}>@LpnVen?pIazM$6Iho5TbGf(qLc&NB>_z*&R~`e>La216yL>$CACgn(`l zMF>u)@n=h?JiGF3%eDns2zf&e?wfQCV83Ggz!;ywSVDCjq4ggqU}3jl=YTg?=KTW9 zWnLb?nMy7DP!-+xLlx>J09=ZHjhr$y@78 zPkk$}v0jRarLMl_>7;((83f@rO4|J?QcQ~a%-$m)ky3K-7tf#5G&GD=BwR$L>ST`4 z{~M$g6IpL0FE!U?I*k|f^z31AssEERWApv2ME#wgp<8cW1O;;)KWG8j$LO#A0O8W{ z&tsxsxHo-LjqW*Dm^}aaVYf)ytlXlF5*?WO?)4x8us>2%Ae5y4K{K~hW?<8ig#}YU zG|WhoSnQ&!FZ1sU5Uu-49|F&)Vj4h6gdT#{MQ$`Ara@}p$89XVqGZL9;pJx4AzLjA zy+UwBjWX|u&tM^-e)(>(g-0aANWwz;6p<3Q3ik@ZUuL9irPd`Hr-d?_3zBWyJ;@M?`A*$!a<#CJD$#91r4D5e4qtcZ7+B z91UbK-;w>}pywUerT3ZXanIZqwJ(H^)QYoZqpg}xdv{%p?N*Kt$Rn|Ap~ zj}>Yl4)F``V#F_Ol)^V)FeO|m5G^d$SOY3sySgR=brX6#SVV2$IrZjm!gSe!V{V3*@cpHvCWbk4%$O z?+A;wvU#^yr{Ervwe(^;h?`3C>OtncW3QovMAUk)KjZXHo1Tj5JT3nLUq=P#Fyln! zcVnfUXd2h^}aWj&f1iHM~|#K!~#@^U$BWFQ`$&hZ{~yxwL-)dLrxIoB#U4dXJxC!YfRR z^f5mt^Jkse0yodSGx0XL#uCT}&y06KBDl?Ut}a_`y_DfRJhL9xy*8z=*&o!G)zjCM zA&AP&<(Q|X+ZjsjoUFXBV<&J&+V@12pDkGNSckn(-C|K)O?BcP<3GIVG~7*3THgnAnaiQA_S}<&S3_6zfVAJ zYyRg%M4hOni9M@P*JoyNE0qZ|5Y+}kzJN?@T3ih|bbfO-j|4oe7J2wIf=@tRRx%`5 z*Bq7G2;Id`p)QbWCK1`W>|9o(9=v$F{GtITd?pr07PVcbxD^=2k@z~-TJu=LMZgMI6W@Y)8%)SJm;6;Jf$2x)3{|~4lC*wL9k!~4+-2lVPdLdt`+4Z{8 z7%2h)(P{xs1g0AK4@ux4_FXB38SmVAJR&4Uw0kfbs`=VC4mkQ4qGLBJoIVI=VJgG3mCl|Fn7H)~F5q$^ z%m|H$2w)H-?rryZ`JMv6%|vJ{cuE6u8sB?tCO~dp6ZS*~?jxfI6t{BRz)z?`} zGb?5W@2IGl^-&7fwSXl`HW;crEZoUirIr(~m&;>X6Ir94uXnKk{I8_H zkl7OuqpUg7i?}Mppa7f5VqO&4KyCCK*{W09xLfn)tprshSc>%U<5GS2zC3 z&CC1p@nI%HJd+%sAFQb^g3f;A<)4BmJw0n#332hOWmdQeL(XG z7(8up$ObO&t}8ZzzJS;~UOeyhfm-p5n!)2)tOL~`1>hU1gn5#RQZYCYf-}| z=p(t*=b@fyL+IQ58~wLs2;XjDi>YpUqFJPGYv`jxbOnx|tiL*%WyLXWSGXtakztWb z7?<>Hm&g;M>p4+%lb)4RhU;Mz`Ysy)3MWjO^-G^t9UJpL&UNTqvtt3(#_L7s_t zs~PCSjgW4h3Vz*iPksgj!hkx*PGv?+oE^H+S9%d4$0U9ZTOQ|`eUSY4dzI};>0#QV zmo3Wpb~DY7Ncp!^cbkC8QMHPrKv*x4eqkQ;Pw}Ca1sg<= zFR1YIO`kjy-qpM>*43!Hd)>xxFF=GAfI${`JI%EM{FBU&59fGm7UB&KUA=M&>!prF zD2;QmuZKPUMfyP;*Qw>2lSo9A1EI^-#wL7N#mW};?jb6m61axR%a=o?FZEgfa;KF8 zz79evuJw8cz-cbC!Cpbpt$%Dev<(dnKQVf)1Z>b>HZqxhe;1nw5exSJNtkMQLoWh| zaCworNQ@FStw_KumP?R4bPObWNd}%nb=t^_Wt4KCxIbb&3;$@1?}qjtS)9E`&YImQ z1<(c1da}wdKLwDOk;ldfL{0;lsaJ;74f`=vkzoA!t6IL-RCKjhAgKGePzZ!8C9@yi z(1>F`a}Nq`P~xHCeN%m7WR>mh2e8HS;M{r;l1Ir%{6;#s5KEDWUi0iGFMj{4awNgQ zX=J+DLux>FC)kesY#i(L={Q$;-WYPFr->v`iAbT_gh!7B4nezzROf1A%eo|F7_`A6 zOCDg%focOG4A$*g#q55VBC<{4i#w}o7XwJ+z>7X&22%V~`WSqIu|P_LN4gpEWe&M2 zEm{!5f%}*(=w_s$MzlY8acdnoIz&!_BnsfHp~7h^aFS(PkAqhyH zMYF_!B+OF8C>aDD2oZu*Y)HNX0F9`4kVGjdJQvzVe^FJ_wQuFxVGeOEWS0g+B4kSi zf)`-R5bW!))bKyap)Pyla5Ug}{2R;I8se4#Wsmrw=XWJb{+mq-RK8&}a*D~9 z<<6#*GmSx&(l#pS(}qBo-{W@)s{o)PjJ$7Z=wExmRMH+9yuRX+;@QLVtKLz8%VpA?SzO^f^Q1`#1# zx8`|~fAM4xD^#8W%!l?Nx*q5Nwn2bs!toe--9^8+@z=iHO#0)%U$=clk8AECc;AMn zQU7Q7a`)i>-vQYF8337q9gH9QD@>Q*#GbG-CvPXy7>~WjiM_9;p_067*oZgRU%mBT zM21v$F>TkMt^bs7Je}u0^5>(8qnj3N5`DPtg^qYgiUTBrJj@++=nlZWBeQ;rr{(V* zb2Y3=pr$&L`BA=l^b~GEzH+AQ;&#J`ipsiS(@9?N9WL{9HXYiv96vW^zlSQQ%^9zH z2J7rSZ>{V>KJm?ziF2n&`BNpyeAT_znd#N3P7i(TU|x7JZFKvS|MTnr(hU5d^bttaReA(ED$1y+uGqIT=ZZslw4NW)e0W@A ze`G7|cvM@C-g{})KzW0JDIHyjIe_r(!Ed@Ib(=Ci~>MbsnHagCg^hxz{G_GMv z|7A9J&&bY3m5EwtpIJl970!b(OB}@(EnA}qUioo>_pj~u_@+!q{7offR9;^Gu5RSu z4D^b59W%AHwcjb#m>`z*qmT>rqxyz;v}%sRN2a=qvsz^1c4`+oj-r-187`W3JLkNVo{aY4 z!-vBv(!AkLTK(h|lc3YrQ1K{(lpLHkEV@mFC2pFVvmx!%m5Rp{(F za8J`jUSPukV}Mz)y~P*C=h;gpCp0bGHk&52#7ah>B&uVTBVzJZJ@7eJug&5;yn0mM zRAcK#22*;~Z&8}iT!Xr0Zg&L?>>LHigUnUE^Xqo%w$eqeJ`b(no3|Q%(Ps6JMw8L; zXrA6POJjYfBw7vUl(*YLX4kR4ye4+@T3a(!WdZWnFx+DdE6bH|cIK9IuU7<9O=@&! zFGNl^jx8-D#1yWgEQ6a6pO*!X!z!~+M=PSM11uq9iF>^%{`S8 zQ~97%mm=BZz24o2%2AK=GW(rXi4mC?b<0i_xt!X(Fs&IJ(Q|8IUrn$x$rE)*u}ZeH zO%HpK*QLMmxgX7SSZ_EGWOh63`o7=m%l>X>L#h%KH$#|NUlf+B9~)6Oq71fRXqSIsR!JccWIy_Z41+RIUEwD%hptoxe zontfBp z%avF@)IRS+>{w7Jl8n4O_`ML%gFTSkhY@~UA9bS8AS2Os0awFh-DO}f`gtuEUp+%v z%`&-U)*x28wQUf4P}D;1A+f{c*58qSs}ru(abJbwhU5Mjh$D2YWCn*xzw;?g(nz@% ztEYGGv^`jY2igyb5vG25xj__>M723?^a&%q`is(naluG6i_nwI2(-G%G zs7bec?&hKGC*t3+kSde>5U-`1jqk~&qf-xS9qMcU&U=!O{lTvEq27{va1CNE*puor z-X6b8P128CD8c_!@O)JH^B=-tCSHPsu|i?X zm^H?oILZ-vGD=rBT2gn*$xA3AfGt*PXoH!d0wzzgr-k+CQQMWZ^P6H~;>VBCj5Ndx zi;3xS)sn4jdfAC_M7_?^u=uSw?c%EJbx$e{p2<7iGgshCH^hmsvo_Rmc!)&TPvdJ=hXodbx>El3er% zD-%%{#)Td=aCH8QTsagFB4B$wOq8#^wd1XMyrg~h@FoO4VJ>qX{lWdn+~cl74hwg2 znvH2iSG&Qx5sz~+~CSXfwAsj2f|M+CV)^#!pHt`xaNVDkx;guKaIO9M8Gof5FPceJt0 z?re6a)%1AJl>x;HG^NY1W;MQ#Nqwu@M-i6HN}P3uviSU7nY}W^RKy6|S(TB}=!ce= z>i&XLF;^T%f4hw_W9%m~SH5%RPAzSCS$UY(B}y=QLudn8B2#so&wyN-Md!tVj@7*M z7f~db<+=J&ItVX{P5@LmZn zX_y3;Q2XR<;=YTiM1>XTO?thtyMwzf)5KeR?+6 z5J$~QcW$BeQ@(k#^8H+9LEox%x*z6HZB1gd@-dpD9BKDER{oI65e!v zGrI{H%Hk&KX=TnhW%l9T|2gREVWC8i*BH4VnyhAqh%Sd}wjvl4W~ZHVN`!F=pEB z5CcQi!qDCqM2--BeS^xbfiGe*g)#8sq=~ literal 0 HcmV?d00001 From 0b9ff8b1e649de23e8222e0e66718a72f3f083c7 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 1 Dec 2022 01:06:59 +0100 Subject: [PATCH 08/15] Create docs navigation sidebar (#40) * crawl files and create directory tree for sidebar * dropdown * Working on dropdown links and styling * setup header nav * Styles * DocumentNav sidebar done * wrap up header sidebar * setup top level nav * update root level data and fix link bug * doc links yaml * nav links for docs * remove character * prettier * fix build error * MDX style * Update src/components/UI/docs/DocsLinks.tsx Co-authored-by: Paul Wackerow <54227730+wackerow@users.noreply.github.com> * Abstract LinksList component into its own file * change requests * AccordionButton styles * AccordionButton styled * fix broken links * prettier * prettier * fix broken default code snippet * fix accordion spacing * fix gap at top of DocsNav lg * fix but of persistent header link * remove test content * setup Notes and prettier * rehype * Note component * Note font styling * convert old notes to use component * Breadcrumb cleanup and prettier * MDXComponents -> MDComponent and documentation Co-authored-by: Paul Wackerow <54227730+wackerow@users.noreply.github.com> --- README.md | 8 + docs/developers/contributing.md | 3 - .../evm-tracing/built-in-tracers.md | 2 - docs/developers/geth-developer/dev-mode.md | 5 - docs/fundamentals/account-management.md | 2 +- docs/fundamentals/les.md | 4 +- docs/fundamentals/mining.md | 2 +- docs/fundamentals/pruning.md | 6 +- docs/getting-started/index.md | 2 +- .../javascript-console.md | 2 +- docs/interacting-with-geth/rpc/index.md | 2 +- docs/interacting-with-geth/rpc/ns-debug.md | 29 ++-- docs/interacting-with-geth/rpc/ns-eth.md | 1 - ...recation.md => ns-personal-deprecation.md} | 0 docs/interacting-with-geth/rpc/ns-personal.md | 2 +- docs/interacting-with-geth/rpc/pubsub.md | 3 - docs/monitoring/dashboards.md | 1 - docs/monitoring/ethstats.md | 6 +- docs/tools/clef/clique-signing.md | 3 + docs/tools/clef/tutorial.md | 3 +- package.json | 1 + src/components/MDXComponents.tsx | 114 ------------- src/components/UI/docs/Breadcrumbs.tsx | 33 ++++ src/components/UI/docs/Code.tsx | 8 +- src/components/UI/docs/DocsLinks.tsx | 81 ++++++++++ src/components/UI/docs/DocsNav.tsx | 59 +++++++ src/components/UI/docs/DocumentNav.tsx | 44 +++++ src/components/UI/docs/LinkList.tsx | 35 ++++ src/components/UI/docs/MDComponents.tsx | 153 ++++++++++++++++++ src/components/UI/docs/Note.tsx | 17 ++ src/components/UI/docs/index.ts | 8 + src/components/UI/docs/index.tsx | 1 - src/components/docs/Breadcrumbs.tsx | 27 ---- src/components/docs/index.ts | 1 - src/components/index.ts | 1 - src/data/documentation-links.yaml | 149 +++++++++++++++++ src/hooks/useActiveHash.ts | 42 +++++ src/pages/[...slug].tsx | 93 +++++++---- src/pages/_app.tsx | 4 +- src/theme/foundations/textStyles.ts | 46 +++++- src/types.ts | 6 + src/utils/getFileList.ts | 16 ++ src/utils/parseHeadingId.ts | 18 +++ yarn.lock | 103 ++++++++++++ 44 files changed, 916 insertions(+), 230 deletions(-) rename docs/interacting-with-geth/rpc/{ns_personal_deprecation.md => ns-personal-deprecation.md} (100%) delete mode 100644 src/components/MDXComponents.tsx create mode 100644 src/components/UI/docs/Breadcrumbs.tsx create mode 100644 src/components/UI/docs/DocsLinks.tsx create mode 100644 src/components/UI/docs/DocsNav.tsx create mode 100644 src/components/UI/docs/DocumentNav.tsx create mode 100644 src/components/UI/docs/LinkList.tsx create mode 100644 src/components/UI/docs/MDComponents.tsx create mode 100644 src/components/UI/docs/Note.tsx create mode 100644 src/components/UI/docs/index.ts delete mode 100644 src/components/UI/docs/index.tsx delete mode 100644 src/components/docs/Breadcrumbs.tsx delete mode 100644 src/components/docs/index.ts delete mode 100644 src/components/index.ts create mode 100644 src/data/documentation-links.yaml create mode 100644 src/hooks/useActiveHash.ts create mode 100644 src/utils/getFileList.ts create mode 100644 src/utils/parseHeadingId.ts diff --git a/README.md b/README.md index 3c633bc383..7043b9cc02 100644 --- a/README.md +++ b/README.md @@ -49,3 +49,11 @@ You can check out [the Next.js GitHub repository](https://github.com/vercel/next The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. + +## Adding a new documentation page + +Documentation pages are located in the `/docs` folder in the root directory of the project. + +When you want to add a new page, add the new file in the appropriate folder in the `/docs` page. `index.md` files will be the default page for a directory, and `{pagename}.md` will define subpages for a directory. + +After adding this page, you will need to add it `/src/data/documentation-links.yaml` which adds documentation structure which you will see on the left sidebar in the documentation pages. diff --git a/docs/developers/contributing.md b/docs/developers/contributing.md index 39eb58bef0..c232f2abfb 100644 --- a/docs/developers/contributing.md +++ b/docs/developers/contributing.md @@ -12,11 +12,8 @@ If you'd like to contribute to the Geth source code, please fork the [Github rep Please make sure your contributions adhere to our coding guidelines: - Code must adhere to the official Go formatting guidelines (i.e. uses gofmt). - - Code must be documented adhering to the official Go commentary guidelines. - - Pull requests need to be based on and opened against the master branch. - - Commit messages should be prefixed with the package(s) they modify. E.g. "eth, rpc: make trace configs optional" diff --git a/docs/developers/evm-tracing/built-in-tracers.md b/docs/developers/evm-tracing/built-in-tracers.md index 1dabc52667..741eafb540 100644 --- a/docs/developers/evm-tracing/built-in-tracers.md +++ b/docs/developers/evm-tracing/built-in-tracers.md @@ -176,7 +176,6 @@ Return: Things to note about the call tracer: - Calls to precompiles are also included in the result - - In case a frame reverts, the field `output` will contain the raw return data - In case the top level frame reverts, its `revertReason` field will contain the parsed reason of revert as returned by the Solidity contract @@ -186,7 +185,6 @@ Things to note about the call tracer: `callTracer` accepts two options: - `onlyTopCall: true` instructs the tracer to only process the main (top-level) call and none of the sub-calls. This avoids extra processing for each call frame if only the top-level call info are required. - - `withLog: true` instructs the tracer to also collect the logs emitted during each call. Example invokation with the `onlyTopCall` flag: diff --git a/docs/developers/geth-developer/dev-mode.md b/docs/developers/geth-developer/dev-mode.md index 29da44f882..ae0bbf44c5 100644 --- a/docs/developers/geth-developer/dev-mode.md +++ b/docs/developers/geth-developer/dev-mode.md @@ -6,15 +6,10 @@ description: Instructions for setting up Geth in developer mode It is often convenient for developers to work in an environment where changes to client or application software can be deployed and tested rapidly and without putting real-world users or assets at risk. For this purpose, Geth has a `--dev` flag that spins up Geth in "developer mode". This creates a single-node Ethereum test network with no connections to any external peers. It exists solely on the local machine. Starting Geth in developer mode does the following: - Initializes the data directory with a testing genesis block - - Sets max peers to 0 (meaning Geth does not search for peers) - - Turns off discovery by other nodes (meaning the node is invisible to other nodes) - - Sets the gas price to 0 (no cost to send transactions) - - Uses the Clique proof-of-authority consensus engine which allows blocks to be mined as-needed without excessive CPU and memory consumption - - Uses on-demand block generation, producing blocks when transactions are waiting to be mined This configuration enables developers to experiment with Geth's source code or develop new applications without having to sync to a pre-existing public network. Blocks are only mined when there are pending transactions. Developers can break things on this network without affecting other users. This page will demonstrate how to spin up a local Geth testnet and a simple smart contract will be deployed to it using the Remix online integrated development environment (IDE). diff --git a/docs/fundamentals/account-management.md b/docs/fundamentals/account-management.md index be91498500..cfb5c6ccfb 100644 --- a/docs/fundamentals/account-management.md +++ b/docs/fundamentals/account-management.md @@ -78,7 +78,7 @@ The console will hang because Clef is waiting for manual approval. Switch to the It is critical to backup the account password safely and securely as it cannot be retrieved or reset. -{% include note.html content=" If the password provided on account creation is lost or forgotten, there is no way to retrive it and the account will simply stay locked forever. The password MUST be backed up safely and securely! **IT IS CRITICAL TO BACKUP THE KEYSTORE AND REMEMBER PASSWORDS**" %} +If the password provided on account creation is lost or forgotten, there is no way to retrive it and the account will simply stay locked forever. The password MUST be backed up safely and securely! **IT IS CRITICAL TO BACKUP THE KEYSTORE AND REMEMBER PASSWORDS** The newly generated key files can be viewed in `/keystore/`. The file naming format is `UTC----

` where `date` is the date and time of key creation formatted according to [UTC 8601](https://www.iso.org/iso-8601-date-and-time-format.html) with zero time offset and seconds precise to eight decimal places. `address` is the 40 hexadecimal characters that make up the account address without a leading `0x`, for example: diff --git a/docs/fundamentals/les.md b/docs/fundamentals/les.md index 81890b183f..c1d607f0bb 100644 --- a/docs/fundamentals/les.md +++ b/docs/fundamentals/les.md @@ -3,13 +3,13 @@ title: Light client description: Introduction to Geth's light sync mode --- -{% include note.html content="Light nodes do not currently work on proof-of-stake Ethereum, but new proof-of-stake light clients are expected to ship soon!" %} +Light nodes do not currently work on proof-of-stake Ethereum, but new proof-of-stake light clients are expected to ship soon! Running a full node is the most trustless, private, decentralized and censorship resistant way to interact with Ethereum. It is also the best choice for the health of the network, because a decentralized network relies on having many individual nodes that independently verify the head of the chain. In a full node a copy of the blockchain is stored locally enabling users to verify incoming data against a local source of truth. However, running a full node requires a lot of disk space and non-negligible CPU allocation and takes hours (for snap sync) or days (for full sync) to sync the blockchain from genesis. Geth also offers a light mode that overcomes these issues and provides some of the benefits of running a node but requires only a fraction of the resources. Read more about the reasons to run nodes on [ethereum.org](https://ethereum.org/en/run-a-node/). -{% include note.html content=" Geth light clients **do not currently work** on proof-of-stake Ethereum. New light clients that work with the proof-of-stake consensus engine are expected to ship soon!" %} +Geth light clients **do not currently work** on proof-of-stake Ethereum. New light clients that work with the proof-of-stake consensus engine are expected to ship soon! ## Light node vs full node {#light-node-vs-full-node} diff --git a/docs/fundamentals/mining.md b/docs/fundamentals/mining.md index c9b03abfa7..31201b3baf 100644 --- a/docs/fundamentals/mining.md +++ b/docs/fundamentals/mining.md @@ -3,7 +3,7 @@ title: Proof-of-work mining with Ethash description: Introduction to proof-of-work mining with Geth --- -{% include note.html content=" Proof-of-work mining is no longer used to secure Ethereum Mainnet. The information below is included because the Ethash code is still part of Geth and it could be used to create a private proof-of-work network or testnet." %} +Proof-of-work mining is no longer used to secure Ethereum Mainnet. The information below is included because the Ethash code is still part of Geth and it could be used to create a private proof-of-work network or testnet. Blockchains grow when individual nodes create valid blocks and distribute them to their peers who check the blocks and add them to their own local databases. Nodes that add blocks are rewarded with ether payouts. On Ethereum Mainnet, the proof-of-stake consensus engine randomly selects a node to produce each block. diff --git a/docs/fundamentals/pruning.md b/docs/fundamentals/pruning.md index ed53205e34..1b286faf4d 100644 --- a/docs/fundamentals/pruning.md +++ b/docs/fundamentals/pruning.md @@ -3,7 +3,7 @@ title: Pruning description: Instructions for pruning a Geth node --- -{% include note.html content="Offline pruning is only for the hash-based state scheme. Soon, we will have a path-based state scheme which enables the pruning by default. Once the hash-based state scheme is no longer supported, offline pruning will be deprecated." %} +Offline pruning is only for the hash-based state scheme. Soon, we will have a path-based state scheme which enables the pruning by default. Once the hash-based state scheme is no longer supported, offline pruning will be deprecated. A snap-sync'd Geth node currently requires more than 650 GB of disk space to store the historic blockchain data. With default cache size the database grows by about 14 GB/week. This means that Geth users will rapidly run out of space on 1TB hard drives. To solve this problem without needing to purchase additional hardware, Geth can be pruned. Pruning is the process of erasing older data to save disk space. Since Geth `v1.10`, users have been able to trigger a snapshot offline prune to bring the total storage back down to the original ~650 GB in about 4-5 hours. This has to be done periodically to keep the total disk storage within the bounds of the local hardware (e.g. every month or so for a 1TB disk). @@ -13,13 +13,9 @@ To prune a Geth node at least 40 GB of free disk space is recommended. This mean ## Pruning rules {#pruning-rules} 1. Do not try to prune an archive node. Archive nodes need to maintain ALL historic data by definition. - 2. Ensure there is at least 40 GB of storage space still available on the disk that will be pruned. Failures have been reported with ~25GB of free space. - 3. Geth is at least `v1.10` ideally > `v1.10.3` - 4. Geth is fully sync'd - 5. Geth has finished creating a snapshot that is at least 128 blocks old. This is true when "state snapshot generation" is no longer reported in the logs. With these rules satisfied, Geth's database can be pruned. diff --git a/docs/getting-started/index.md b/docs/getting-started/index.md index d899607b44..74a0d1c04b 100644 --- a/docs/getting-started/index.md +++ b/docs/getting-started/index.md @@ -21,7 +21,7 @@ In order to get the most value from the tutorials on this page, the following sk Users that need to revisit these fundamentals can find helpful resources relating to the command line [here](https://developer.mozilla.org/en-US/docs/Learn/Tools_and_testing/Understanding_client-side_tools/Command_line), Ethereum and its testnets [here](https://ethereum.org/en/developers/tutorials/), http [here](https://developer.mozilla.org/en-US/docs/Web/HTTP) and Javascript [here](https://www.javascript.com/learn). Information on node architecture can be found [here](/docs/fundamentals/node-architecture) and our guide for configuring Geth to connect to a consensus client is [here](/docs/getting_started/consensus-clients). -{% include note.html content="If Geth was installed from source on Linux, `make` saves the binaries for Geth and the associated tools in `/build/bin`. To run these programs it is convenient to move them to the top level project directory (e.g. running `mv ./build/bin/* ./`) from `/go-ethereum`. Then `./` must be prepended to the commands in the code snippets in order to execute a particular program, e.g. `./geth` instead of simply `geth`. If the executables are not moved then either navigate to the `bin` directory to run them (e.g. `cd ./build/bin` and `./geth`) or provide their path (e.g. `./build/bin/geth`). These instructions can be ignored for other installations." %} +If Geth was installed from source on Linux, `make` saves the binaries for Geth and the associated tools in `/build/bin`. To run these programs it is convenient to move them to the top level project directory (e.g. running `mv ./build/bin/* ./`) from `/go-ethereum`. Then `./` must be prepended to the commands in the code snippets in order to execute a particular program, e.g. `./geth` instead of simply `geth`. If the executables are not moved then either navigate to the `bin` directory to run them (e.g. `cd ./build/bin` and `./geth`) or provide their path (e.g. `./build/bin/geth`). These instructions can be ignored for other installations. ## Background {#background} diff --git a/docs/interacting-with-geth/javascript-console.md b/docs/interacting-with-geth/javascript-console.md index e81e5a0074..192799bc40 100644 --- a/docs/interacting-with-geth/javascript-console.md +++ b/docs/interacting-with-geth/javascript-console.md @@ -18,7 +18,7 @@ This returns a result which is also a JSON object, with values expressed as hexa This is a low level and rather error-prone way to interact with Geth. Most developers prefer to use convenience libraries that abstract away some of the more tedious and awkward tasks such as converting values from hexadecimal strings into numbers, or converting between denominations of ether (Wei, Gwei, etc). One such library is [Web3.js](https://web3js.readthedocs.io/en/v1.7.3/). The purpose of Geth's Javascript console is to provide a built-in environment to use a subset of the Web3.js libraries to interact with a Geth node. -{% include note.html content="The web3.js version that comes bundled with Geth is not up to date with the official Web3.js documentation. There are several Web3.js libraries that are not available in the Geth Javascript Console. There are also administrative APIs included in the Geth console that are not documented in the Web3.js documentation. The full list of libraries available in the Geth console is available on the [JSON-RPC API page](/docs/interacting-with-geth/rpc/server)." %} +The web3.js version that comes bundled with Geth is not up to date with the official Web3.js documentation. There are several Web3.js libraries that are not available in the Geth Javascript Console. There are also administrative APIs included in the Geth console that are not documented in the Web3.js documentation. The full list of libraries available in the Geth console is available on the [JSON-RPC API page](/docs/interacting-with-geth/rpc/server). ## Starting the console {#starting-the-console} diff --git a/docs/interacting-with-geth/rpc/index.md b/docs/interacting-with-geth/rpc/index.md index 47cea2bd4f..0639935c30 100644 --- a/docs/interacting-with-geth/rpc/index.md +++ b/docs/interacting-with-geth/rpc/index.md @@ -78,7 +78,7 @@ geth --ws --ws.origins http://myapp.example.com As with `--http.corsdomain`, using the wildcard `--ws.origins '*'` allows access from any origin. -{% include note.html content=" By default, **account unlocking is forbidden when HTTP or Websocket access is enabled** (i.e. by passing `--http` or `ws` flag). This is because an attacker that manages to access the node via the externally-exposed HTTP/WS port can then control the unlocked account. It is possible to force account unlock by including the `--allow-insecure-unlock` flag but this is unsafe and **not recommended** except for expert users that completely understand how it can be used safely. This is not a hypothetical risk: **there are bots that continually scan for http-enabled Ethereum nodes to attack**" %} +By default, **account unlocking is forbidden when HTTP or Websocket access is enabled** (i.e. by passing `--http` or `ws` flag). This is because an attacker that manages to access the node via the externally-exposed HTTP/WS port can then control the unlocked account. It is possible to force account unlock by including the `--allow-insecure-unlock` flag but this is unsafe and **not recommended** except for expert users that completely understand how it can be used safely. This is not a hypothetical risk: **there are bots that continually scan for http-enabled Ethereum nodes to attack** ### IPC Server {#ipc-server} diff --git a/docs/interacting-with-geth/rpc/ns-debug.md b/docs/interacting-with-geth/rpc/ns-debug.md index 8ce151439f..1ab4376bc6 100644 --- a/docs/interacting-with-geth/rpc/ns-debug.md +++ b/docs/interacting-with-geth/rpc/ns-debug.md @@ -29,7 +29,7 @@ The location is specified as `:`. Example: -``` js +```js > debug.backtraceAt("server.go:443") ``` @@ -579,13 +579,16 @@ No specific call options: Tracing a call with a destination and specific sender, disabling the storage and memory output (less data returned over RPC) ```js -debug.traceCall({ - "from": "0xdeadbeef29292929192939494959594933929292", - "to": "0xde929f939d939d393f939393f93939f393929023", - "gas": "0x7a120", - "data": "0xf00d4b5d00000000000000000000000001291230982139282304923482304912923823920000000000000000000000001293123098123928310239129839291010293810" - }, - "latest", {"disableStorage": true, "disableMemory": true}) +debug.traceCall( + { + from: '0xdeadbeef29292929192939494959594933929292', + to: '0xde929f939d939d393f939393f93939f393929023', + gas: '0x7a120', + data: '0xf00d4b5d00000000000000000000000001291230982139282304923482304912923823920000000000000000000000001293123098123928310239129839291010293810' + }, + 'latest', + { disableStorage: true, disableMemory: true } +); ``` It is possible to supply 'overrides' for both state-data (accounts/storage) and block data (number, timestamp etc). In the example below, a call which executes `NUMBER` is performed, and the overridden number is placed on the stack: @@ -731,26 +734,26 @@ Sets the logging verbosity pattern. If you want to see messages from a particular Go package (directory) and all subdirectories, use: -``` js +```js > debug.vmodule("eth/*=6") ``` If you want to restrict messages to a particular package (e.g. p2p) but exclude subdirectories, use: -``` js +```js > debug.vmodule("p2p=6") ``` If you want to see log messages from a particular source file, use -``` js +```js > debug.vmodule("server.go=6") ``` You can compose these basic patterns. If you want to see all output from peer.go in a package below eth (eth/peer.go, eth/downloader/peer.go) as well as output from package p2p at level <= 5, use: -``` js -debug.vmodule("eth/*/peer.go=6,p2p=5") +```js +debug.vmodule('eth/*/peer.go=6,p2p=5'); ``` ### debug_writeBlockProfile diff --git a/docs/interacting-with-geth/rpc/ns-eth.md b/docs/interacting-with-geth/rpc/ns-eth.md index 8f9bf247bd..37d5901c8e 100644 --- a/docs/interacting-with-geth/rpc/ns-eth.md +++ b/docs/interacting-with-geth/rpc/ns-eth.md @@ -40,7 +40,6 @@ The _state override set_ is an optional address-to-state mapping, where each ent The goal of the _state override set_ is manyfold: - It can be used by DApps to reduce the amount of contract code needed to be deployed on chain. Code that simply returns internal state or does pre-defined validations can be kept off chain and fed to the node on-demand. - - It can be used for smart contract analysis by extending the code deployed on chain with custom methods and invoking them. This avoids having to download and reconstruct the entire state in a sandbox to run custom code against. - It can be used to debug smart contracts in an already deployed large suite of contracts by selectively overriding some code or state and seeing how execution changes. Specialized tooling will probably be necessary. diff --git a/docs/interacting-with-geth/rpc/ns_personal_deprecation.md b/docs/interacting-with-geth/rpc/ns-personal-deprecation.md similarity index 100% rename from docs/interacting-with-geth/rpc/ns_personal_deprecation.md rename to docs/interacting-with-geth/rpc/ns-personal-deprecation.md diff --git a/docs/interacting-with-geth/rpc/ns-personal.md b/docs/interacting-with-geth/rpc/ns-personal.md index 24ec453aed..ed1ad88a68 100644 --- a/docs/interacting-with-geth/rpc/ns-personal.md +++ b/docs/interacting-with-geth/rpc/ns-personal.md @@ -3,7 +3,7 @@ title: personal Namespace description: Documentation for the JSON-RPC API "personal" namespace --- -{% include note.html content="The personal namespace will be deprecated in the very near future." %} +The personal namespace will be deprecated in the very near future. The personal API managed private keys in the key store. It is deprecated in favour of using [Clef](/docs/tools/clef/Introduction) for interacting with accounts Please refer to the [ns_personal deprecation page](/docs/interacting-with-geth/rpc/ns_personal_deprecation) to see the equivalent methods. The following documentation should be treated as archive information and users should migrate tousing Clef for account interactions. diff --git a/docs/interacting-with-geth/rpc/pubsub.md b/docs/interacting-with-geth/rpc/pubsub.md index e27b3e45bf..7eee1a038b 100644 --- a/docs/interacting-with-geth/rpc/pubsub.md +++ b/docs/interacting-with-geth/rpc/pubsub.md @@ -34,11 +34,8 @@ to cancel the subscription: ## Considerations {#considerations} 1. Notifications are sent for current events and not for past events. For use cases that depend on not to miss any notifications subscriptions are probably not the best option. - 2. Subscriptions require a full duplex connection. Geth offers such connections in the form of WebSocket and IPC (enabled by default). - 3. Subscriptions are coupled to a connection. If the connection is closed all subscriptions that are created over this connection are removed. - 4. Notifications are stored in an internal buffer and sent from this buffer to the client. If the client is unable to keep up and the number of buffered notifications reaches a limit (currently 10k) the connection is closed. Keep in mind that subscribing to some events can cause a flood of notifications, e.g. listening for all logs/blocks when the node starts to synchronize. ## Create subscription {#create-subscriptions} diff --git a/docs/monitoring/dashboards.md b/docs/monitoring/dashboards.md index 7a73e72d8c..fa2153c484 100644 --- a/docs/monitoring/dashboards.md +++ b/docs/monitoring/dashboards.md @@ -10,7 +10,6 @@ There are several ways to monitor the performance of a Geth node. Insights into To follow along with the instructions on this page it will be useful to have: - a running Geth instance. - - basic working knowlegde of bash/terminal. [This video](https://www.youtube.com/watch?v=cOBab8IJMYI) provides an excellent introduction to Geth monitoring. diff --git a/docs/monitoring/ethstats.md b/docs/monitoring/ethstats.md index 22bb2d66c9..0c613f7326 100644 --- a/docs/monitoring/ethstats.md +++ b/docs/monitoring/ethstats.md @@ -50,11 +50,11 @@ each with detailed installation instructions. They all share the common trait th started with a specific URL that can be passed to Geth. [EthNetStats "Classic"](https://github.com/ethereum/eth-netstats) - + [EthNet Intelligence API](https://github.com/ethereum/eth-net-intelligence-api) - + [Goerli Ethstats client](https://github.com/goerli/ethstats-client) - + [Goerli Ethstats server](https://github.com/goerli/ethstats-server) If enabled, Geth spins up a minimal Ethstats reporting daemon that pushes statistics about the diff --git a/docs/tools/clef/clique-signing.md b/docs/tools/clef/clique-signing.md index 0ce79becf3..b47334634d 100644 --- a/docs/tools/clef/clique-signing.md +++ b/docs/tools/clef/clique-signing.md @@ -69,6 +69,7 @@ Initiate Geth: ```sh $ geth --datadir ./ddir init genesis.json ``` + ```terminal ... INFO [06-16|11:14:54.123] Writing custom genesis block @@ -90,6 +91,7 @@ These two things are independent of each other. First of all, however, `clef` mu ```sh $ clef --keystore ./ddir/keystore --configdir ./clef --chainid 15 --suppress-bootwarn init ``` + ```terminal The master seed of clef will be locked with a password. Please specify a password. Do not forget this password! @@ -117,6 +119,7 @@ With that done, `clef` can be made aware of the password. To do this `setpw { - return ( - - {children} - - ); - }, - // links - a: ({ children, href }: any) => { - return ( - - - {children} - - - ); - }, - // headings - h1: ({ children }: any) => { - return ( - - {children} - - ); - }, - h2: ({ children }: any) => { - return ( - - {children} - - ); - }, - h3: ({ children }: any) => { - return ( - - {children} - - ); - }, - h4: ({ children }: any) => { - return ( - - {children} - - ); - }, - // tables - table: ({ children }: any) => ( - - - {children} -
-
- ), - // pre - pre: ({ children }: any) => ( - -
{children}
-
- ), - // code - code: ({ children, ...props }: any) => {children}, - // list - ul: ({ children }: any) => { - return ( - - {children} - - ); - }, - ol: ({ children }: any) => { - return ( - - {children} - - ); - }, - li: ({ children }: any) => { - return {children}; - } -}; - -export default MDXComponents; diff --git a/src/components/UI/docs/Breadcrumbs.tsx b/src/components/UI/docs/Breadcrumbs.tsx new file mode 100644 index 0000000000..e1b6f71304 --- /dev/null +++ b/src/components/UI/docs/Breadcrumbs.tsx @@ -0,0 +1,33 @@ +import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, Stack } from '@chakra-ui/react'; +import NextLink from 'next/link'; +import { useRouter } from 'next/router'; +import { FC } from 'react'; + +export const Breadcrumbs: FC = () => { + const router = useRouter(); + + let pathSplit = router.asPath.split('/'); + pathSplit = pathSplit.splice(1, pathSplit.length); + + return ( + <> + {router.asPath !== '/docs' ? ( + + {pathSplit.map((path: string, idx: number) => { + return ( + + + + {path} + + + + ); + })} + + ) : ( + + )} + + ); +}; diff --git a/src/components/UI/docs/Code.tsx b/src/components/UI/docs/Code.tsx index 67768ab44a..a58c5e1e6d 100644 --- a/src/components/UI/docs/Code.tsx +++ b/src/components/UI/docs/Code.tsx @@ -73,5 +73,11 @@ export const Code: React.FC = ({ className, children, inline }) => { {content} ); - return {content}; + return ( + + + {content} + + + ); }; diff --git a/src/components/UI/docs/DocsLinks.tsx b/src/components/UI/docs/DocsLinks.tsx new file mode 100644 index 0000000000..14beb534ed --- /dev/null +++ b/src/components/UI/docs/DocsLinks.tsx @@ -0,0 +1,81 @@ +import { FC } from 'react'; +import { + Accordion, + AccordionButton, + AccordionItem, + AccordionPanel, + Center, + Link, + Stack, + Text +} from '@chakra-ui/react'; +import { AddIcon, MinusIcon } from '@chakra-ui/icons'; +import NextLink from 'next/link'; + +import { LinksList } from './'; + +import { NavLink } from '../../../types'; + +interface Props { + navLinks: NavLink[]; +} + +export const DocsLinks: FC = ({ navLinks }) => ( + + {navLinks.map(({ id, to, items }, idx) => { + return ( + + + {({ isExpanded }) => ( + <> + + + {to ? ( + + + {id} + + + ) : ( + {id} + )} + + + {items && ( + +
+ {isExpanded ? ( + + ) : ( + + )} +
+
+ )} +
+ {items && ( + + + + )} + + )} +
+
+ ); + })} +
+); diff --git a/src/components/UI/docs/DocsNav.tsx b/src/components/UI/docs/DocsNav.tsx new file mode 100644 index 0000000000..3dcb661d4e --- /dev/null +++ b/src/components/UI/docs/DocsNav.tsx @@ -0,0 +1,59 @@ +import { FC } from 'react'; +import { + Accordion, + AccordionButton, + AccordionIcon, + AccordionItem, + AccordionPanel, + Stack, + Text +} from '@chakra-ui/react'; +import { DocsLinks } from './DocsLinks'; + +import { NavLink } from '../../../types'; + +interface Props { + navLinks: NavLink[]; +} + +export const DocsNav: FC = ({ navLinks }) => { + return ( + + + + + + + + + + + Documentation + + + + + + + + + + + ); +}; diff --git a/src/components/UI/docs/DocumentNav.tsx b/src/components/UI/docs/DocumentNav.tsx new file mode 100644 index 0000000000..25663a720b --- /dev/null +++ b/src/components/UI/docs/DocumentNav.tsx @@ -0,0 +1,44 @@ +import { FC } from 'react'; +import { Divider, Link, Stack, Text } from '@chakra-ui/react'; +import NextLink from 'next/link'; + +import { parseHeadingId } from '../../../utils/parseHeadingId'; +import { useActiveHash } from '../../../hooks/useActiveHash'; + +interface Props { + content: string; +} + +export const DocumentNav: FC = ({ content }) => { + const parsedHeadings = content + .split('\n\n') + .map(item => item.replace(/[\n\r]/g, '')) + .filter(item => item.startsWith('#')) + .map(item => parseHeadingId([item])) + .filter(item => item); + + const activeHash = useActiveHash(parsedHeadings.map(heading => heading!.headingId)); + + return ( + + + on this page + + + {parsedHeadings.map((heading, idx) => { + return ( + + + + {heading?.title} + + + + ); + })} + + ); +}; diff --git a/src/components/UI/docs/LinkList.tsx b/src/components/UI/docs/LinkList.tsx new file mode 100644 index 0000000000..d8c84c72d5 --- /dev/null +++ b/src/components/UI/docs/LinkList.tsx @@ -0,0 +1,35 @@ +import { FC } from 'react'; +import { Link, Stack, Text } from '@chakra-ui/react'; +import NextLink from 'next/link'; + +import { NavLink } from '../../../types'; + +interface LinksListProps { + links: NavLink[]; +} + +export const LinksList: FC = ({ links }) => ( + + {links.map(({ id, to, items }) => { + return to ? ( + + + + + {id} + + + + {items && } + + ) : ( + + + {id} + + {items && } + + ); + })} + +); diff --git a/src/components/UI/docs/MDComponents.tsx b/src/components/UI/docs/MDComponents.tsx new file mode 100644 index 0000000000..09f8b2b71f --- /dev/null +++ b/src/components/UI/docs/MDComponents.tsx @@ -0,0 +1,153 @@ +import { + Flex, + Heading, + Link, + ListItem, + OrderedList, + Stack, + Table, + Text, + UnorderedList +} from '@chakra-ui/react'; +import NextLink from 'next/link'; + +import { Code, Note } from '.'; +import { textStyles } from '../../../theme/foundations'; +import { parseHeadingId } from '../../../utils/parseHeadingId'; + +const { header1, header2, header3, header4 } = textStyles; + +const MDComponents = { + // paragraphs + p: ({ children }: any) => { + return ( + + {children} + + ); + }, + // links + a: ({ children, href }: any) => { + return ( + + + {children} + + + ); + }, + // headings + h1: ({ children }: any) => { + const heading = parseHeadingId(children); + + return heading ? ( + + {heading.children} + + ) : ( + + {children} + + ); + }, + h2: ({ children }: any) => { + const heading = parseHeadingId(children); + + return heading ? ( + + {heading.children} + + ) : ( + + {children} + + ); + }, + h3: ({ children }: any) => { + const heading = parseHeadingId(children); + + return heading ? ( + + {heading.children} + + ) : ( + + {children} + + ); + }, + h4: ({ children }: any) => { + const heading = parseHeadingId(children); + + return heading ? ( + + {heading.children} + + ) : ( + + {children} + + ); + }, + // tables + table: ({ children }: any) => ( + + + {children} +
+
+ ), + // pre + pre: ({ children }: any) => ( + +
{children}
+
+ ), + // code + code: ({ children, ...props }: any) => {children}, + // list + ul: ({ children }: any) => { + return ( + + + {children} + + + ); + }, + ol: ({ children }: any) => { + return ( + + + {children} + + + ); + }, + li: ({ children }: any) => { + return {children}; + }, + note: ({ children }: any) => { + return {children}; + } +}; + +export default MDComponents; diff --git a/src/components/UI/docs/Note.tsx b/src/components/UI/docs/Note.tsx new file mode 100644 index 0000000000..5278fc12ba --- /dev/null +++ b/src/components/UI/docs/Note.tsx @@ -0,0 +1,17 @@ +import { FC } from 'react'; +import { Stack, Text } from '@chakra-ui/react'; + +interface Props { + children: string[]; +} + +export const Note: FC = ({ children }) => { + return ( + + + Note + + {children} + + ); +}; diff --git a/src/components/UI/docs/index.ts b/src/components/UI/docs/index.ts new file mode 100644 index 0000000000..9214774f4c --- /dev/null +++ b/src/components/UI/docs/index.ts @@ -0,0 +1,8 @@ +export * from './Breadcrumbs'; +export * from './Code'; +export * from './DocsLinks'; +export * from './DocsNav'; +export * from './DocumentNav'; +export * from './LinkList'; +export * from './Note'; +export { default } from './MDComponents'; diff --git a/src/components/UI/docs/index.tsx b/src/components/UI/docs/index.tsx deleted file mode 100644 index c3aa9443d1..0000000000 --- a/src/components/UI/docs/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export * from './Code'; diff --git a/src/components/docs/Breadcrumbs.tsx b/src/components/docs/Breadcrumbs.tsx deleted file mode 100644 index 22dd57527d..0000000000 --- a/src/components/docs/Breadcrumbs.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { Breadcrumb, BreadcrumbItem, BreadcrumbLink } from '@chakra-ui/react'; -import NextLink from 'next/link'; -import { useRouter } from 'next/router'; -import { FC } from 'react'; - -export const Breadcrumbs: FC = () => { - const router = useRouter(); - - let pathSplit = router.asPath.split('/'); - pathSplit = pathSplit.splice(1, pathSplit.length); - - return ( - - {pathSplit.map((path: string, idx: number) => { - return ( - - - - {path} - - - - ); - })} - - ); -}; diff --git a/src/components/docs/index.ts b/src/components/docs/index.ts deleted file mode 100644 index ce977548b1..0000000000 --- a/src/components/docs/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './Breadcrumbs'; diff --git a/src/components/index.ts b/src/components/index.ts deleted file mode 100644 index b7f39642bb..0000000000 --- a/src/components/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from './MDXComponents'; diff --git a/src/data/documentation-links.yaml b/src/data/documentation-links.yaml new file mode 100644 index 0000000000..137b4574d2 --- /dev/null +++ b/src/data/documentation-links.yaml @@ -0,0 +1,149 @@ +- id: Getting started + to: /docs/getting-started + items: + - id: Hardware requirements + to: /docs/getting-started/hardware-requirements + - id: Installing Geth + to: /docs/getting-started/installing-geth + - id: Consensus clients + to: /docs/getting-started/consensus-clients +- id: Fundamentals + to: /docs/fundamentals + items: + - id: Node architecture + to: /docs/fundamentals/node-architecture + - id: Command-line options + to: /docs/fundamentals/command-line-options + - id: Security + to: /docs/fundamentals/security + - id: Sync-modes + to: /docs/fundamentals/sync-modes + - id: Account management + to: /docs/fundamentals/account-management + - id: Backup restore + to: /docs/fundamentals/backup-restore + - id: Logs + to: /docs/fundamentals/logs + - id: Peer-to-peer + to: /docs/fundamentals/peer-to-peer + - id: Pruning + to: /docs/fundamentals/pruning + - id: Light client + to: /docs/fundamentals/les + - id: Mining + to: /docs/fundamentals/mining +- id: Interacting with Geth + items: + - id: JSON-RPC Server + to: /docs/interacting-with-geth/rpc + items: + - id: Batch requests + to: /docs/interacting-with-geth/rpc/batch + - id: GraphQL server + to: /docs/interacting-with-geth/rpc/graphql + - id: admin Namespace + to: /docs/interacting-with-geth/rpc/ns-admin + - id: clique Namespace + to: /docs/interacting-with-geth/rpc/ns-clique + - id: debug Namespace + to: /docs/interacting-with-geth/rpc/ns-debug + - id: eth Namespace + to: /docs/interacting-with-geth/rpc/ns-eth + - id: les Namespace + to: /docs/interacting-with-geth/rpc/ns-les + - id: miner Namespace + to: /docs/interacting-with-geth/rpc/ns-miner + - id: net Namespace + to: /docs/interacting-with-geth/rpc/ns-net + - id: Personal namespace deprecation notes + to: /docs/interacting-with-geth/rpc/ns-personal-deprecation + - id: Personal Namespace + to: /docs/interacting-with-geth/rpc/ns-personal + - id: txpool Namespace + to: /docs/interacting-with-geth/rpc/ns-txpool + - id: Objects + to: /docs/interacting-with-geth/rpc/objects + - id: Real-time Events + to: /docs/interacting-with-geth/rpc/pubsub + - id: JavaScript Console + to: /docs/interacting-with-geth/javascript-console + - id: 'JavaScript Console 2: Contracts' + to: /docs/interacting-with-geth/javascript-console-contracts +- id: Developers + to: /docs/developers + items: + - id: Dapp developers + items: + - id: Go API + to: /docs/developers/dapp-developer/native + - id: Go Account Management + to: /docs/developers/dapp-developer/native-accounts + - id: Go Contract Bindings + to: /docs/developers/dapp-developer/native-bindings + - id: Geth for Mobile + to: /docs/developers/dapp-developer/mobile + - id: EVM tracing + to: /docs/developers/evm-tracing + items: + - id: Basic traces + to: /docs/developers/evm-tracing/basic-traces + - id: Built-in tracers + to: /docs/developers/evm-tracing/built-in-tracers + - id: Custom EVM tracer + to: /docs/developers/evm-tracing/custom-tracer + - id: Tutorial for Javascript tracing + to: /docs/developers/evm-tracing/javascript-tutorial + - id: Geth developer + items: + - id: Developer guide + to: /docs/developers/geth-developer/dev-guide + - id: Developer mode + to: /docs/developers/geth-developer/dev-mode + - id: Disclosures + to: /docs/developers/geth-developer/disclosures + - id: Issue handling workflow + to: /docs/developers/geth-developer/issue-handling-workflow + - id: DNS discovery setup guide + to: /docs/developers/geth-developer/dns-discovery-setup + - id: Code review guidelines + to: /docs/developers/geth-developer/code-review-guidelines + - id: Private networks + to: /docs/developers/geth-developer/private-network + - id: Contributing + to: /docs/developers/contributing +- id: Monitoring + items: + - id: Dashboards + to: /docs/monitoring/dashboards + - id: Ethstats + to: /docs/monitoring/ethstats + - id: Metrics + to: /docs/monitoring/metrics +- id: Tools + items: + - id: Clef + items: + - id: Introduction + to: /docs/tools/clef/introduction + - id: APIs + to: /docs/tools/clef/apis + - id: Rules + to: /docs/tools/clef/rules + - id: Setup + to: /docs/tools/clef/setup + - id: Datatypes + to: /docs/tools/clef/datatypes + - id: Tutorial + to: /docs/tools/clef/tutorial + - id: Clique-signing + to: /docs/tools/clef/clique-signing + - id: puppeth + to: /docs/tools/puppeth + - id: Abigen + to: /docs/tools/abigen + - id: devp2p + to: /docs/tools/devp2p +- id: FAQs + to: /docs/faq +- id: Resources + to: /docs/resources diff --git a/src/hooks/useActiveHash.ts b/src/hooks/useActiveHash.ts new file mode 100644 index 0000000000..70d3944307 --- /dev/null +++ b/src/hooks/useActiveHash.ts @@ -0,0 +1,42 @@ +import { useState, useEffect } from 'react'; + +/** + * A hook to determine which section of the page is currently in the viewport. + * @param {*} itemIds Array of document ids to observe + * @param {*} rootMargin + * @returns id of the element currently in viewport + */ +export const useActiveHash = (itemIds: Array, rootMargin = `0% 0% -80% 0%`): string => { + const [activeHash, setActiveHash] = useState(``); + + useEffect(() => { + const observer = new IntersectionObserver( + entries => { + entries.forEach(entry => { + if (entry.isIntersecting) { + setActiveHash(`${entry.target.id}`); + } + }); + }, + { rootMargin } + ); + + itemIds?.forEach(id => { + const element = document.getElementById(id); + if (element !== null) { + observer.observe(element); + } + }); + + return () => { + itemIds?.forEach(id => { + const element = document.getElementById(id); + if (element !== null) { + observer.unobserve(element); + } + }); + }; + }, [itemIds, rootMargin]); + + return activeHash; +}; diff --git a/src/pages/[...slug].tsx b/src/pages/[...slug].tsx index cb0d69cefc..f16e3fa1dc 100644 --- a/src/pages/[...slug].tsx +++ b/src/pages/[...slug].tsx @@ -1,16 +1,24 @@ import fs from 'fs'; import matter from 'gray-matter'; import yaml from 'js-yaml'; -import { Stack, Heading, Text } from '@chakra-ui/react'; +import { Flex, Stack, Heading, Text } from '@chakra-ui/react'; import ChakraUIRenderer from 'chakra-ui-markdown-renderer'; import ReactMarkdown from 'react-markdown'; +import { useRouter } from 'next/router'; +import { useEffect } from 'react'; import gfm from 'remark-gfm'; +import rehypeRaw from 'rehype-raw'; import { ParsedUrlQuery } from 'querystring'; import type { GetStaticPaths, GetStaticProps, NextPage } from 'next'; -import MDXComponents from '../components/'; -import { Breadcrumbs } from '../components/docs'; +import MDComponents from '../components/UI/docs'; +import { Breadcrumbs, DocsNav, DocumentNav } from '../components/UI/docs'; import { PageMetadata } from '../components/UI'; + +import { NavLink } from '../types'; + +import { getFileList } from '../utils/getFileList'; + import { textStyles } from '../theme/foundations'; import { getParsedDate } from '../utils'; @@ -22,21 +30,6 @@ const MATTER_OPTIONS = { // This method crawls for all valid docs paths export const getStaticPaths: GetStaticPaths = () => { - const getFileList = (dirName: string) => { - let files: string[] = []; - const items = fs.readdirSync(dirName, { withFileTypes: true }); - - for (const item of items) { - if (item.isDirectory()) { - files = [...files, ...getFileList(`${dirName}/${item.name}`)]; - } else { - files.push(`/${dirName}/${item.name}`); - } - } - - return files.map(file => file.replace('.md', '')).map(file => file.replace('/index', '')); - }; - const paths: string[] = getFileList('docs'); // This is folder that get crawled for valid docs paths. Change if this path changes. return { @@ -52,6 +45,8 @@ export const getStaticProps: GetStaticProps = async context => { let file; let lastModified; + const navLinks = yaml.load(fs.readFileSync('src/data/documentation-links.yaml', 'utf8')); + try { file = fs.readFileSync(`${filePath}.md`, 'utf-8'); lastModified = fs.statSync(`${filePath}.md`); @@ -66,6 +61,7 @@ export const getStaticProps: GetStaticProps = async context => { props: { frontmatter, content, + navLinks, lastModified: getParsedDate(lastModified.mtime, { month: 'numeric', day: 'numeric', @@ -80,27 +76,62 @@ interface Props { [key: string]: string; }; content: string; + navLinks: NavLink[]; lastModified: string; } -const DocPage: NextPage = ({ frontmatter, content, lastModified }) => { +const DocPage: NextPage = ({ frontmatter, content, navLinks, lastModified }) => { + const router = useRouter(); + + useEffect(() => { + const id = router.asPath.split('#')[1]; + const element = document.getElementById(id); + + if (!element) { + return; + } + + element.scrollIntoView({ behavior: 'smooth', block: 'start' }); + }, [router.asPath]); + return ( <>
- - - - {frontmatter.title} - - - last edited {lastModified} - - - - {content} - + + + + + + + + + + {frontmatter.title} + + + last edited {lastModified} + + + + + + + {content} + + + + + + + + +
); diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index d1f76091e6..c2e8daec60 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -4,7 +4,7 @@ import { MDXProvider } from '@mdx-js/react'; import { Layout } from '../components/layouts'; -import MDXComponents from '../components/'; +import MDComponents from '../components/UI/docs'; import 'focus-visible/dist/focus-visible'; import theme from '../theme'; @@ -12,7 +12,7 @@ import theme from '../theme'; export default function App({ Component, pageProps }: AppProps) { return ( - + diff --git a/src/theme/foundations/textStyles.ts b/src/theme/foundations/textStyles.ts index 2c55908249..df2c9e9d70 100644 --- a/src/theme/foundations/textStyles.ts +++ b/src/theme/foundations/textStyles.ts @@ -107,7 +107,7 @@ export const textStyles = { color: 'body' }, 'footer-link-label': { - fontFamily: '"JetBrains Mono", monospace', + fontFamily: 'heading', fontWeight: 700, textTransform: 'uppercase', lineHeight: '21.12px', @@ -139,13 +139,28 @@ export const textStyles = { textAlign: 'center', fontSize: 'sm' }, + 'docs-nav-dropdown': { + fontFamily: 'heading', + fontWeight: 400, + fontSize: '18px', + lineHeight: 6, + letterSpacing: '4%', + textAlign: 'left' + }, + 'docs-nav-links': { + fontFamily: 'heading', + weight: 400, + fontSize: 'md', + lineHeight: 8, + letterSpacing: '0.01em' + }, 'header-button': { - fontFamily: '"JetBrains Mono", monospace', + fontFamily: 'heading', fontWeight: 700, fontSize: { base: '0.86rem', sm: '1rem' } }, 'header-mobile-button': { - fontFamily: '"JetBrains Mono", monospace', + fontFamily: 'heading', textTransform: 'uppercase', fontSize: '2xl' }, @@ -163,8 +178,25 @@ export const textStyles = { lineHeight: '21.12px', letterSpacing: '0.01rem' }, - // TODO: refactor w/ semantic tokens for light/dark mode - 'link-light': {}, - // TODO: refactor w/ semantic tokens for light/dark mode - 'text-light': {} + 'document-nav-title': { + fontFamily: 'heading', + fontWeight: 400, + fontSize: 'md', + lineHeight: '21.12px', + letterSpacing: '2%' + }, + 'document-nav-link': { + fontFamily: 'body', + fontWeight: 400, + fontSize: '13px', + lineHeight: 5, + letterSpacing: '1%', + mb: 4 + }, + 'note-text': { + fontFamily: 'body', + fontWeight: 400, + fontSize: 'md', + lineHeight: '26px' + } }; diff --git a/src/types.ts b/src/types.ts index 320edd7cb4..5104fe71fd 100644 --- a/src/types.ts +++ b/src/types.ts @@ -35,6 +35,12 @@ export interface ReleaseParams { isStableRelease: boolean; } +export interface NavLink { + id: string; + to?: string; + items?: NavLink[]; +} + export interface OpenPGPSignaturesData { 'build server': string; 'unique id': string; diff --git a/src/utils/getFileList.ts b/src/utils/getFileList.ts new file mode 100644 index 0000000000..4d22edbee6 --- /dev/null +++ b/src/utils/getFileList.ts @@ -0,0 +1,16 @@ +import fs from 'fs'; + +export const getFileList = (dirName: string) => { + let files: string[] = []; + const items = fs.readdirSync(dirName, { withFileTypes: true }); + + for (const item of items) { + if (item.isDirectory()) { + files = [...files, ...getFileList(`${dirName}/${item.name}`)]; + } else { + files.push(`/${dirName}/${item.name}`); + } + } + + return files.map(file => file.replace('.md', '')).map(file => file.replace('/index', '')); +}; diff --git a/src/utils/parseHeadingId.ts b/src/utils/parseHeadingId.ts new file mode 100644 index 0000000000..75d56bf5de --- /dev/null +++ b/src/utils/parseHeadingId.ts @@ -0,0 +1,18 @@ +const check = '{#'; + +export const parseHeadingId = (children: string[]) => { + if (children[children.length - 1].includes(check)) { + const temp = children[children.length - 1].split(check); + const headingId = temp[temp.length - 1].split('}')[0]; + + children[children.length - 1] = temp[0]; + + return { + children, + title: temp[0].replaceAll('#', ''), + headingId + }; + } + + return null; +}; diff --git a/yarn.lock b/yarn.lock index 9cee803ca5..743c2805cf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1269,6 +1269,11 @@ resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== +"@types/parse5@^6.0.0": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-6.0.3.tgz#705bb349e789efa06f43f128cef51240753424cb" + integrity sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g== + "@types/prop-types@*", "@types/prop-types@^15.0.0": version "15.7.5" resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz" @@ -2427,11 +2432,62 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" +hast-to-hyperscript@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/hast-to-hyperscript/-/hast-to-hyperscript-10.0.1.tgz#3decd7cb4654bca8883f6fcbd4fb3695628c4296" + integrity sha512-dhIVGoKCQVewFi+vz3Vt567E4ejMppS1haBRL6TEmeLeJVB1i/FJIIg/e6s1Bwn0g5qtYojHEKvyGA+OZuyifw== + dependencies: + "@types/unist" "^2.0.0" + comma-separated-tokens "^2.0.0" + property-information "^6.0.0" + space-separated-tokens "^2.0.0" + style-to-object "^0.3.0" + unist-util-is "^5.0.0" + web-namespaces "^2.0.0" + +hast-util-from-parse5@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-7.1.0.tgz#c129dd3a24dd8a867ab8a029ca47e27aa54864b7" + integrity sha512-m8yhANIAccpU4K6+121KpPP55sSl9/samzQSQGpb0mTExcNh2WlvjtMwSWFhg6uqD4Rr6Nfa8N6TMypQM51rzQ== + dependencies: + "@types/hast" "^2.0.0" + "@types/parse5" "^6.0.0" + "@types/unist" "^2.0.0" + hastscript "^7.0.0" + property-information "^6.0.0" + vfile "^5.0.0" + vfile-location "^4.0.0" + web-namespaces "^2.0.0" + hast-util-parse-selector@^2.0.0: version "2.2.5" resolved "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz" integrity sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ== +hast-util-parse-selector@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-3.1.0.tgz#a519e27e8b61bd5a98fad494ed06131ce68d9c3f" + integrity sha512-AyjlI2pTAZEOeu7GeBPZhROx0RHBnydkQIXlhnFzDi0qfXTmGUWoCYZtomHbrdrheV4VFUlPcfJ6LMF5T6sQzg== + dependencies: + "@types/hast" "^2.0.0" + +hast-util-raw@^7.2.0: + version "7.2.2" + resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-7.2.2.tgz#1974360b2d7f15b5ce26c2a4bac892d5d8185a18" + integrity sha512-0x3BhhdlBcqRIKyc095lBSDvmQNMY3Eulj2PLsT5XCyKYrxssI5yr3P4Kv/PBo1s/DMkZy2voGkMXECnFCZRLQ== + dependencies: + "@types/hast" "^2.0.0" + "@types/parse5" "^6.0.0" + hast-util-from-parse5 "^7.0.0" + hast-util-to-parse5 "^7.0.0" + html-void-elements "^2.0.0" + parse5 "^6.0.0" + unist-util-position "^4.0.0" + unist-util-visit "^4.0.0" + vfile "^5.0.0" + web-namespaces "^2.0.0" + zwitch "^2.0.0" + hast-util-to-estree@^2.0.0: version "2.1.0" resolved "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-2.1.0.tgz" @@ -2453,6 +2509,18 @@ hast-util-to-estree@^2.0.0: unist-util-position "^4.0.0" zwitch "^2.0.0" +hast-util-to-parse5@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-7.0.0.tgz#a39808e69005d10afeed1866029a1fb137df3f7c" + integrity sha512-YHiS6aTaZ3N0Q3nxaY/Tj98D6kM8QX5Q8xqgg8G45zR7PvWnPGPP0vcKCgb/moIydEJ/QWczVrX0JODCVeoV7A== + dependencies: + "@types/hast" "^2.0.0" + "@types/parse5" "^6.0.0" + hast-to-hyperscript "^10.0.0" + property-information "^6.0.0" + web-namespaces "^2.0.0" + zwitch "^2.0.0" + hast-util-whitespace@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.0.tgz" @@ -2469,6 +2537,17 @@ hastscript@^6.0.0: property-information "^5.0.0" space-separated-tokens "^1.0.0" +hastscript@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-7.1.0.tgz#e402ed48f46161cf2f093badbff30583a5c3c315" + integrity sha512-uBjaTTLN0MkCZxY/R2fWUOcu7FRtUVzKRO5P/RAfgsu3yFiMB1JWCO4AjeVkgHxAira1f2UecHK5WfS9QurlWA== + dependencies: + "@types/hast" "^2.0.0" + comma-separated-tokens "^2.0.0" + hast-util-parse-selector "^3.0.0" + property-information "^6.0.0" + space-separated-tokens "^2.0.0" + hey-listen@^1.0.8: version "1.0.8" resolved "https://registry.npmjs.org/hey-listen/-/hey-listen-1.0.8.tgz" @@ -2486,6 +2565,11 @@ hoist-non-react-statics@^3.3.1: dependencies: react-is "^16.7.0" +html-void-elements@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-2.0.1.tgz#29459b8b05c200b6c5ee98743c41b979d577549f" + integrity sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A== + ignore@^5.2.0: version "5.2.0" resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz" @@ -3617,6 +3701,11 @@ parse-json@^5.0.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" +parse5@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + path-exists@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" @@ -3867,6 +3956,15 @@ regexpp@^3.2.0: resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== +rehype-raw@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/rehype-raw/-/rehype-raw-6.1.1.tgz#81bbef3793bd7abacc6bf8335879d1b6c868c9d4" + integrity sha512-d6AKtisSRtDRX4aSPsJGTfnzrX2ZkHQLE5kiUuGOeEoLpbEulFF4hj0mLPbsa+7vmguDKOVVEQdHKDSwoaIDsQ== + dependencies: + "@types/hast" "^2.0.0" + hast-util-raw "^7.2.0" + unified "^10.0.0" + remark-gfm@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/remark-gfm/-/remark-gfm-3.0.1.tgz#0b180f095e3036545e9dddac0e8df3fa5cfee54f" @@ -4389,6 +4487,11 @@ vfile@^5.0.0: unist-util-stringify-position "^3.0.0" vfile-message "^3.0.0" +web-namespaces@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-2.0.1.tgz#1010ff7c650eccb2592cebeeaf9a1b253fd40692" + integrity sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ== + which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" From 27769604a3afc0332376039b6a71f4fc434b718f Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Thu, 1 Dec 2022 11:20:38 +0000 Subject: [PATCH 09/15] Fix Ethereum and GitHub typos --- docs/developers/contributing.md | 4 ++-- docs/developers/dapp-developer/mobile.md | 2 +- docs/developers/dapp-developer/native.md | 4 ++-- docs/developers/geth-developer/dev-mode.md | 2 +- docs/developers/geth-developer/disclosures.md | 6 +++--- docs/developers/geth-developer/issue-handling-workflow.md | 2 +- docs/faq.md | 2 +- docs/fundamentals/account-management.md | 2 +- docs/fundamentals/index.md | 2 +- docs/fundamentals/logs.md | 6 +++--- docs/fundamentals/mining.md | 2 +- docs/fundamentals/peer-to-peer.md | 2 +- docs/getting-started/hardware-requirements.md | 2 +- docs/getting-started/installing-geth.md | 4 ++-- docs/tools/abigen.md | 2 +- docs/tools/clef/rules.md | 2 +- docs/tools/clef/tutorial.md | 4 ++-- docs/tools/puppeth.md | 2 +- public/docs/vulnerabilities/vulnerabilities.json | 4 ++-- src/pages/index.tsx | 4 ++-- 20 files changed, 30 insertions(+), 30 deletions(-) diff --git a/docs/developers/contributing.md b/docs/developers/contributing.md index c232f2abfb..72884fc585 100644 --- a/docs/developers/contributing.md +++ b/docs/developers/contributing.md @@ -7,7 +7,7 @@ We welcome contributions from anyone on the internet, and are grateful for even ## Contributing to the Geth source code {#contributing-to-source-code} -If you'd like to contribute to the Geth source code, please fork the [Github repository](https://github.com/ethereum/go-ethereum), fix, commit and send a pull request for the maintainers to review and merge into the main code base. If you wish to submit more complex changes though, please check up with the core devs first on our Discord Server to ensure those changes are in line with the general philosophy of the project and/or get some early feedback which can make both your efforts much lighter as well as our review and merge procedures quick and simple. +If you'd like to contribute to the Geth source code, please fork the [GitHub repository](https://github.com/ethereum/go-ethereum), fix, commit and send a pull request for the maintainers to review and merge into the main code base. If you wish to submit more complex changes though, please check up with the core devs first on our Discord Server to ensure those changes are in line with the general philosophy of the project and/or get some early feedback which can make both your efforts much lighter as well as our review and merge procedures quick and simple. Please make sure your contributions adhere to our coding guidelines: @@ -25,7 +25,7 @@ We encourage an early pull request approach, meaning pull requests are created a ## Contributing to the Geth website {#contributing-to-website} -The Geth website is hosted separately from Geth itself. The contribution guidelines are the same. Please for the Geth website Github repository and raise pull requests for the maintainers to review and merge. +The Geth website is hosted separately from Geth itself. The contribution guidelines are the same. Please for the Geth website GitHub repository and raise pull requests for the maintainers to review and merge. ## License {#license} diff --git a/docs/developers/dapp-developer/mobile.md b/docs/developers/dapp-developer/mobile.md index 985cdf1a7e..539d56feeb 100644 --- a/docs/developers/dapp-developer/mobile.md +++ b/docs/developers/dapp-developer/mobile.md @@ -54,7 +54,7 @@ Similarly to the reusable [Go libraries](/docs/developers/dapp-developer/native- - Contract interactions through auto-generated bindings The Geth mobile API is broadly equivalent to the [Go API](/docs/developers/dapp-developer/native-accounts). The source code can be found in the `mobile` section of Geth's -[Github](https://github.com/ethereum/go-ethereum/tree/master/mobile). +[GitHub](https://github.com/ethereum/go-ethereum/tree/master/mobile). ## Mobile Account Management {#mobile-account-management} diff --git a/docs/developers/dapp-developer/native.md b/docs/developers/dapp-developer/native.md index cb70499657..fde03d39b4 100644 --- a/docs/developers/dapp-developer/native.md +++ b/docs/developers/dapp-developer/native.md @@ -21,7 +21,7 @@ Geth's reusable Go libraries focus on three main usage areas: - Remote node interfacing via different transports - Contract interactions through auto-generated bindings -The libraries are updated synchronously with the Geth Github repository. The Go libraries can be viewed in full at [Go Packages](https://pkg.go.dev/github.com/ethereum/go-ethereum#section-directories). +The libraries are updated synchronously with the Geth GitHub repository. The Go libraries can be viewed in full at [Go Packages](https://pkg.go.dev/github.com/ethereum/go-ethereum#section-directories). Péter Szilágyi (@karalabe) gave a high level overview of the Go libraries in a talk at DevCon2 in Shanghai in 2016. The slides are still a useful resource ([available here](https://ethereum.karalabe.com/talks/2016-devcon.html)) and the talk itself can be viewed by clicking the image below (it is also archived on [IPFS](https://ipfs.io/ipfs/QmQRuKPKWWJAamrMqAp9rytX6Q4NvcXUKkhvu3kuREKqXR)). @@ -189,7 +189,7 @@ SubscribePendingTransactions() _Note that both `ethclient` and `gethclient` have a `CallContract()` function - the difference is that the `gethclient` version includes an `overrides` argument._ -Details relating to these endpoints can be found at [pkg.go.dev](https://pkg.go.dev/github.com/ethereum/go-ethereum@v1.10.19/ethclient/gethclient) or the Geth [Github](https://github.com/ethereum/go-ethereum/tree/master/ethclient). The code snippets in this tutorial were adapted from a more more in-depth set of examples available on [Github](https://github.com/MariusVanDerWijden/web3go). +Details relating to these endpoints can be found at [pkg.go.dev](https://pkg.go.dev/github.com/ethereum/go-ethereum@v1.10.19/ethclient/gethclient) or the Geth [GitHub](https://github.com/ethereum/go-ethereum/tree/master/ethclient). The code snippets in this tutorial were adapted from a more more in-depth set of examples available on [GitHub](https://github.com/MariusVanDerWijden/web3go). ## Summary {#summary} diff --git a/docs/developers/geth-developer/dev-mode.md b/docs/developers/geth-developer/dev-mode.md index ae0bbf44c5..d37a0ff0b1 100644 --- a/docs/developers/geth-developer/dev-mode.md +++ b/docs/developers/geth-developer/dev-mode.md @@ -220,7 +220,7 @@ INFO [05-09|12:27:09.681] 🔨 mined potential block number=2 h ## Interact with contract using Remix {#interact-with-contract} -The contract is now deployed on a local testnet version of the Etheruem blockchain. This means there is a contract address that contains executable bytecode that can be invoked by sending transactions with instructions, also in bytecode, to that address. Again, this can all be achieved by constructing transactions directly in the Geth console or even by making external http requests using tools such as Curl. Here, Remix is used to retrieve the value, then the same action is taken using the Javascript console. +The contract is now deployed on a local testnet version of the Ethereum blockchain. This means there is a contract address that contains executable bytecode that can be invoked by sending transactions with instructions, also in bytecode, to that address. Again, this can all be achieved by constructing transactions directly in the Geth console or even by making external http requests using tools such as Curl. Here, Remix is used to retrieve the value, then the same action is taken using the Javascript console. After deploying the contract in Remix, the `Deployed Contracts` tab in the sidebar automatically populates with the public functions exposed by `Storage.sol`. To send a value to the contract storage, type a number in the field adjacent to the `store` button, then click the button. diff --git a/docs/developers/geth-developer/disclosures.md b/docs/developers/geth-developer/disclosures.md index a9395c7e38..ed49a676d1 100644 --- a/docs/developers/geth-developer/disclosures.md +++ b/docs/developers/geth-developer/disclosures.md @@ -74,11 +74,11 @@ The JSON file of known vulnerabilities below is a list of objects, one for each - `CVE` - The assigned `CVE` identifier, if available (optional) -### What about Github security advisories {#github-security-advisories} +### What about GitHub security advisories {#github-security-advisories} -We prefer to not rely on Github as the only/primary publishing protocol for security advisories, but we plan to use the Github-advisory process as a second channel for disseminating vulnerability-information. +We prefer to not rely on GitHub as the only/primary publishing protocol for security advisories, but we plan to use the GitHub-advisory process as a second channel for disseminating vulnerability-information. -Advisories published via Github can be accessed [here](https://github.com/ethereum/go-ethereum/security/advisories?state=published). +Advisories published via GitHub can be accessed [here](https://github.com/ethereum/go-ethereum/security/advisories?state=published). ## Bug Bounties {#bug-bounties} diff --git a/docs/developers/geth-developer/issue-handling-workflow.md b/docs/developers/geth-developer/issue-handling-workflow.md index 175d501562..5c5f8cf908 100644 --- a/docs/developers/geth-developer/issue-handling-workflow.md +++ b/docs/developers/geth-developer/issue-handling-workflow.md @@ -1,6 +1,6 @@ --- title: Issue Handling Workflow -description: Instructions for managing Github issues +description: Instructions for managing GitHub issues --- ## Draft proposal {#draft-proposal} diff --git a/docs/faq.md b/docs/faq.md index 80fe501036..d8c2d7a1d0 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -5,7 +5,7 @@ description: Frequently asked questions related to Geth ## Where can I get more information? {#where-can-i-get-more-information} -This page contains answers to common questions about Geth. Source code and README documentation can be found on the Geth [Github](https://github.com/ethereum/go-ethereum). You can also ask questions on Geth's [Discord channel](https://discord.gg/WHNkYDsAKU) or keep up to date with Geth on [Twitter](https://twitter.com/go_ethereum). Information about Ethereum in general can be found at [ethereum.org](https://ethereum.org). +This page contains answers to common questions about Geth. Source code and README documentation can be found on the Geth [GitHub](https://github.com/ethereum/go-ethereum). You can also ask questions on Geth's [Discord channel](https://discord.gg/WHNkYDsAKU) or keep up to date with Geth on [Twitter](https://twitter.com/go_ethereum). Information about Ethereum in general can be found at [ethereum.org](https://ethereum.org). The Geth team have also recently started to run AMA's on Reddit: diff --git a/docs/fundamentals/account-management.md b/docs/fundamentals/account-management.md index cfb5c6ccfb..f411d24934 100644 --- a/docs/fundamentals/account-management.md +++ b/docs/fundamentals/account-management.md @@ -145,7 +145,7 @@ which returns: ### Import a keyfile {#importing-a-keyfile} -It is also possible to create an account by importing an existing private key. For example, a user might already have some ether at an address they created using a browser wallet and now wish to use a new Geth node to interact with their funds. In this case, the private key can be exported from the browser wallet and imported into Geth. It is possible to do this using Clef, but currently the method is not externally exposed and requires implementing a UI. There is a Python UI on the Geth Github that could be used as an example or it can be done using the default console UI. However, for now the most straightforward way to import an accoutn from a private key is to use Geth's `account import`. +It is also possible to create an account by importing an existing private key. For example, a user might already have some ether at an address they created using a browser wallet and now wish to use a new Geth node to interact with their funds. In this case, the private key can be exported from the browser wallet and imported into Geth. It is possible to do this using Clef, but currently the method is not externally exposed and requires implementing a UI. There is a Python UI on the Geth GitHub that could be used as an example or it can be done using the default console UI. However, for now the most straightforward way to import an accoutn from a private key is to use Geth's `account import`. Geth requires the private key to be stored as a file which contains the private key as unencrypted canonical elliptic curve bytes encoded into hex (i.e. plain text key without leading 0x). The new account is then saved in encrypted format, protected by a passphrase the user provides on request. As always, this passphrase must be securely and safely backed up - there is no way to retrieve or reset it if it is forgotten! diff --git a/docs/fundamentals/index.md b/docs/fundamentals/index.md index 329a90509b..2468dc0d71 100644 --- a/docs/fundamentals/index.md +++ b/docs/fundamentals/index.md @@ -11,4 +11,4 @@ This is where you will find information about how to manage a Geth node and unde For example, the pages here will help you to understand the underlying architecture of your Geth node, how to start it in different configurations using command line options, how to sync the blockchain and how to manage accounts. There is a page on security practices that will help you to keep your Geth node safe from adversaries. -Note also that there is a page explaining common log messages that are often queried on the Geth discord and Github - this will help users to interpret the messages displayed to the console and know what actions to take. +Note also that there is a page explaining common log messages that are often queried on the Geth discord and GitHub - this will help users to interpret the messages displayed to the console and know what actions to take. diff --git a/docs/fundamentals/logs.md b/docs/fundamentals/logs.md index f1757eaf67..b3f4fe6abe 100644 --- a/docs/fundamentals/logs.md +++ b/docs/fundamentals/logs.md @@ -5,7 +5,7 @@ description: Geth's log messages explained A Geth node continually reports messages to the console allowing users to monitor Geth's current status in real-time. The logs indicate when Geth is running normally and indicates when some attention is required. However, reading these logs can be difficult for new users. This page will help to interpret the log messages to better understand what Geth is doing. -Note that there are a large number of log messages covering a wide range of possible scenarios for a Geth node. This page will only address a subset of commonly seen messages. For more, see the [Geth Github](https://github.com/ethereum/go-ethereum), [Discord](https://discord.gg/WHNkYDsAKU) or search on [ethereum.stackexchange](https://ethereum.stackexchange.com/). Log messages are usually sufficiently self-descrining that they do not require additional explanation. +Note that there are a large number of log messages covering a wide range of possible scenarios for a Geth node. This page will only address a subset of commonly seen messages. For more, see the [Geth GitHub](https://github.com/ethereum/go-ethereum), [Discord](https://discord.gg/WHNkYDsAKU) or search on [ethereum.stackexchange](https://ethereum.stackexchange.com/). Log messages are usually sufficiently self-descrining that they do not require additional explanation. ## Configuring log messages {#configuring-log-messages} @@ -186,7 +186,7 @@ Other user actions have similar log messages that are displayed to the console. ## Common warnings {#common-warnings} -There are many warnings that can be emitted by Geth as part of its normal operation. However, some are asked about especially frequently on the [Geth Github](https://github.com/ethereum/go-ethereum) and [Discord](https://discord.gg/WHNkYDsAKU) channel. +There are many warnings that can be emitted by Geth as part of its normal operation. However, some are asked about especially frequently on the [Geth GitHub](https://github.com/ethereum/go-ethereum) and [Discord](https://discord.gg/WHNkYDsAKU) channel. ```sh WARN [10-03|18:00:40.413] Unexpected trienode heal packet peer=9f0e8fbf reqid=6,915,308,639,612,522,441 @@ -214,4 +214,4 @@ This message indicates that a peer is being dropped because it is not fully sync ## Summary {#summary} -There are a wide range of log messages that are emitted while Geth is running. The level of detail in the logs can be configured using the `verbosity` flag at startup. This page has outlined some of the common messages users can expect to see when Geth is run with default verbosity, without attempting to be comprehensive. For more, please see the [Geth Github](https://github.com/ethereum/go-ethereum) and [Discord](https://discord.gg/WHNkYDsAKU). +There are a wide range of log messages that are emitted while Geth is running. The level of detail in the logs can be configured using the `verbosity` flag at startup. This page has outlined some of the common messages users can expect to see when Geth is run with default verbosity, without attempting to be comprehensive. For more, please see the [Geth GitHub](https://github.com/ethereum/go-ethereum) and [Discord](https://discord.gg/WHNkYDsAKU). diff --git a/docs/fundamentals/mining.md b/docs/fundamentals/mining.md index 31201b3baf..53f40a1058 100644 --- a/docs/fundamentals/mining.md +++ b/docs/fundamentals/mining.md @@ -23,7 +23,7 @@ Regardless of the mining method, the blockchain must be fully synced before mini ### Installing Ethminer {#installing-ethminer} -The Ethminer software can be installed from a downloaded binary or built from source. The relevant downloads and installation instructions are available from the [Ethminer Github](https://github.com/ethereum-mining/ethminer/#build). Standalone executables are available for Linux, macOS and Windows. +The Ethminer software can be installed from a downloaded binary or built from source. The relevant downloads and installation instructions are available from the [Ethminer GitHub](https://github.com/ethereum-mining/ethminer/#build). Standalone executables are available for Linux, macOS and Windows. ### Using Ethminer with Geth {#using-ethminer} diff --git a/docs/fundamentals/peer-to-peer.md b/docs/fundamentals/peer-to-peer.md index 5fee721b68..7784007454 100644 --- a/docs/fundamentals/peer-to-peer.md +++ b/docs/fundamentals/peer-to-peer.md @@ -106,7 +106,7 @@ The `admin` module also includes functions for gathering information about the l ## Custom Networks {#custom-networks} -It is often useful for developers to connect to private test networks rather than public testnets or Etheruem mainnet. These sandbox environments allow block creation without competing against other miners, easy minting of test ether and give freedom to break things without real-world consequences. A private network is started by providing a value to `--networkid` that is not used by any other existing public network ([Chainlist](https://chainlist.org)) and creating a custom `genesis.json` file. Detailed instructions for this are available on the [Private Networks page](/docs/developers/geth-developer/private-network). +It is often useful for developers to connect to private test networks rather than public testnets or Ethereum mainnet. These sandbox environments allow block creation without competing against other miners, easy minting of test ether and give freedom to break things without real-world consequences. A private network is started by providing a value to `--networkid` that is not used by any other existing public network ([Chainlist](https://chainlist.org)) and creating a custom `genesis.json` file. Detailed instructions for this are available on the [Private Networks page](/docs/developers/geth-developer/private-network). ## Static nodes {#static-nodes} diff --git a/docs/getting-started/hardware-requirements.md b/docs/getting-started/hardware-requirements.md index abc463d777..f3419b1c2e 100644 --- a/docs/getting-started/hardware-requirements.md +++ b/docs/getting-started/hardware-requirements.md @@ -18,7 +18,7 @@ It is recommended to use at least 16GB RAM. Disk space is usually the primary bottleneck for node operators. At the time of writing (September 2022) a 2TB SSD is recommended for a full node running Geth and a consensus client. Geth itself requires >650GB of disk space for a snap-synced full node and, with the default cache size, grows about 14GB/week. Pruning brings the total storage back down to the original 650GB. Archive nodes require additional space. A "full" archive node that keeps all state back to genesis requires more than 12TB of space. Partial archive nodes can also be created by turning off the garbage collector after some initial sync - the storage requirement depends how much state is saved. -As well as storage capacity, Geth nodes rely on fast read and write operations. This means HDDs and cheaper HDDS can sometimes struggle to sync the blockchain. A list of SSD models that users report being able and unable to sync Geth is available in this [Github Gist](https://gist.github.com/yorickdowne/f3a3e79a573bf35767cd002cc977b038). Please note that the list has _not_ been verified by the Geth team. +As well as storage capacity, Geth nodes rely on fast read and write operations. This means HDDs and cheaper HDDS can sometimes struggle to sync the blockchain. A list of SSD models that users report being able and unable to sync Geth is available in this [GitHub Gist](https://gist.github.com/yorickdowne/f3a3e79a573bf35767cd002cc977b038). Please note that the list has _not_ been verified by the Geth team. ## Bandwidth {#bandwidth} diff --git a/docs/getting-started/installing-geth.md b/docs/getting-started/installing-geth.md index 2c6e2d4a3f..ee1763ff25 100644 --- a/docs/getting-started/installing-geth.md +++ b/docs/getting-started/installing-geth.md @@ -258,7 +258,7 @@ C:\Users\xxx\src\github.com\ethereum\go-ethereum> go install -v ./cmd/... ### FreeBSD {#freeBSD} -To build Geth from source code on FreeBSD, the Geth Github repository can be cloned into a local directory. +To build Geth from source code on FreeBSD, the Geth GitHub repository can be cloned into a local directory. ```sh git clone https://github.com/ethereum/go-ethereum @@ -303,7 +303,7 @@ make geth These commands create a Geth executable file in the `go-ethereum/build/bin` folder that can be moved and run from another directory if required. The binary is standalone and doesn't require any additional files. -To update an existing Geth installation simply stop the node, navigate to the project root directory and pull the latest version from the Geth Github repository. then rebuild and restart the node. +To update an existing Geth installation simply stop the node, navigate to the project root directory and pull the latest version from the Geth GitHub repository. then rebuild and restart the node. ```sh cd go-ethereum diff --git a/docs/tools/abigen.md b/docs/tools/abigen.md index fe29303851..851226374d 100644 --- a/docs/tools/abigen.md +++ b/docs/tools/abigen.md @@ -137,4 +137,4 @@ type Storage struct { `Storage.go` contains all the bindings required to interact with `Storage.sol` from a Go application. -For instructions on how to deploy this contract to Ethereum from a Go native application read our [Go bindings page](/docs/developers/dapp-developer/native). To browse the Abigen source code visit the Geth [Github repository](https://github.com/ethereum/go-ethereum/tree/master/cmd/abigen). +For instructions on how to deploy this contract to Ethereum from a Go native application read our [Go bindings page](/docs/developers/dapp-developer/native). To browse the Abigen source code visit the Geth [GitHub repository](https://github.com/ethereum/go-ethereum/tree/master/cmd/abigen). diff --git a/docs/tools/clef/rules.md b/docs/tools/clef/rules.md index 29768078be..b4f4eda363 100644 --- a/docs/tools/clef/rules.md +++ b/docs/tools/clef/rules.md @@ -238,4 +238,4 @@ function OnApprovedTx(resp) { ## Summary {#summary} -Rules are sets of conditions encoded in Javascript files that enable certain actions to be auto-approved by Clef. This page outlined the implementation details and security considerations that will help to build suitrable ruleset files. See the [Clef Github](https://github.com/ethereum/go-ethereum/tree/master/cmd/clef) for further reading. +Rules are sets of conditions encoded in Javascript files that enable certain actions to be auto-approved by Clef. This page outlined the implementation details and security considerations that will help to build suitrable ruleset files. See the [Clef GitHub](https://github.com/ethereum/go-ethereum/tree/master/cmd/clef) for further reading. diff --git a/docs/tools/clef/tutorial.md b/docs/tools/clef/tutorial.md index 86d3caf2ee..fed28f966f 100644 --- a/docs/tools/clef/tutorial.md +++ b/docs/tools/clef/tutorial.md @@ -504,7 +504,7 @@ t=2022-07-01T15:52:23+0300 lvl=info msg=SignData api=signer type=request meta t=2022-07-01T15:52:23+0300 lvl=info msg=SignData api=signer type=response data= error="Request denied" ``` -More examples, including a ruleset for a rate-limited window, are available on the [Clef Github](https://github.com/ethereum/go-ethereum/blob/master/cmd/clef/rules.md#example-1-ruleset-for-a-rate-limited-window) and on the [Rules page](/docs/tools/clef/rules). +More examples, including a ruleset for a rate-limited window, are available on the [Clef GitHub](https://github.com/ethereum/go-ethereum/blob/master/cmd/clef/rules.md#example-1-ruleset-for-a-rate-limited-window) and on the [Rules page](/docs/tools/clef/rules). ## Under the hood {#under-the-hood} @@ -574,4 +574,4 @@ Ultimately, the goal is to deprecate Geth's account management tools completely ## Summary {#summary} This page includes step-by-step instructions for basic and intermediate uses of Clef, including using it as a standalone app and a backend signer for Geth. Further information is available on our other Clef pages, including [Introduction](/docs/clef/introduction), [Setup](/docs/tools/clef/setup), -[Rules](/docs/tools/clef/rules), [Communication Datatypes](/docs/clef/datatypes) and [Communication APIs](/docs/tools/clef/apis). Also see the [Clef Github](https://github.com/ethereum/go-ethereum/tree/master/cmd/clef) for further reading. +[Rules](/docs/tools/clef/rules), [Communication Datatypes](/docs/clef/datatypes) and [Communication APIs](/docs/tools/clef/apis). Also see the [Clef GitHub](https://github.com/ethereum/go-ethereum/tree/master/cmd/clef) for further reading. diff --git a/docs/tools/puppeth.md b/docs/tools/puppeth.md index dff125f26a..6c91e6df9b 100644 --- a/docs/tools/puppeth.md +++ b/docs/tools/puppeth.md @@ -172,4 +172,4 @@ geth --datadir Node1 --port 30301 --bootnodes --networkid Puppeth is a command line wizard that guides a user through the various stages of setting up a private network using proof-of-authority or proof-of-work consensus engine. Various network components can be added that optimize the network or enable network monitoring. -[Github repository](https://github.com/ethereum/go-ethereum/tree/master/cmd/puppeth) +[GitHub repository](https://github.com/ethereum/go-ethereum/tree/master/cmd/puppeth) diff --git a/public/docs/vulnerabilities/vulnerabilities.json b/public/docs/vulnerabilities/vulnerabilities.json index b1168cacae..d6a46ddd1c 100644 --- a/public/docs/vulnerabilities/vulnerabilities.json +++ b/public/docs/vulnerabilities/vulnerabilities.json @@ -135,7 +135,7 @@ "name": "DoS via malicious `snap/1` request", "uid": "GETH-2021-03", "summary": "A vulnerable node is susceptible to crash when processing a maliciously crafted message from a peer, via the snap/1 protocol. The crash can be triggered by sending a malicious snap/1 GetTrieNodes package.", - "description": "The `snap/1` protocol handler contains two vulnerabilities related to the `GetTrieNodes` packet, which can be exploited to crash the node. Full details are available at the Github security [advisory](https://github.com/ethereum/go-ethereum/security/advisories/GHSA-59hh-656j-3p7v)", + "description": "The `snap/1` protocol handler contains two vulnerabilities related to the `GetTrieNodes` packet, which can be exploited to crash the node. Full details are available at the GitHub security [advisory](https://github.com/ethereum/go-ethereum/security/advisories/GHSA-59hh-656j-3p7v)", "links": [ "https://github.com/ethereum/go-ethereum/security/advisories/GHSA-59hh-656j-3p7v", "https://geth.ethereum.org/docs/vulnerabilities/vulnerabilities", @@ -152,7 +152,7 @@ "name": "DoS via malicious p2p message", "uid": "GETH-2022-01", "summary": "A vulnerable node can crash via p2p messages sent from an attacker node, if running with non-default log options.", - "description": "A vulnerable node, if configured to use high verbosity logging, can be made to crash when handling specially crafted p2p messages sent from an attacker node. Full details are available at the Github security [advisory](https://github.com/ethereum/go-ethereum/security/advisories/GHSA-wjxw-gh3m-7pm5)", + "description": "A vulnerable node, if configured to use high verbosity logging, can be made to crash when handling specially crafted p2p messages sent from an attacker node. Full details are available at the GitHub security [advisory](https://github.com/ethereum/go-ethereum/security/advisories/GHSA-wjxw-gh3m-7pm5)", "links": [ "https://github.com/ethereum/go-ethereum/security/advisories/GHSA-wjxw-gh3m-7pm5", "https://geth.ethereum.org/docs/vulnerabilities/vulnerabilities", diff --git a/src/pages/index.tsx b/src/pages/index.tsx index d49a3bb476..a4abf0516f 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -55,7 +55,7 @@ const HomePage: NextPage = ({}) => { - Geth has been a core part of Etheruem since the very beginning. Geth was one of + Geth has been a core part of Ethereum since the very beginning. Geth was one of the original Ethereum implementations making it the most battle-hardened and tested client. @@ -119,7 +119,7 @@ const HomePage: NextPage = ({}) => { the smallest of fixes! If you'd like to contribute to the Geth source code, please fork the{' '} - Github repository + GitHub repository , fix, commit and send a pull request for the maintainers to review and merge into the main code base. From 5a2a3eeacc8cd478a3ee48b04f3e029a7eaf5e2e Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Thu, 1 Dec 2022 18:30:56 +0000 Subject: [PATCH 10/15] Fix typo (#101) --- docs/faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/faq.md b/docs/faq.md index d8c2d7a1d0..af2a98e339 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -5,7 +5,7 @@ description: Frequently asked questions related to Geth ## Where can I get more information? {#where-can-i-get-more-information} -This page contains answers to common questions about Geth. Source code and README documentation can be found on the Geth [GitHub](https://github.com/ethereum/go-ethereum). You can also ask questions on Geth's [Discord channel](https://discord.gg/WHNkYDsAKU) or keep up to date with Geth on [Twitter](https://twitter.com/go_ethereum). Information about Ethereum in general can be found at [ethereum.org](https://ethereum.org). +This page contains answers to common questions about Geth. Source code and README documentation can be found on the Geth [GitHub](https://github.com/ethereum/go-ethereum). You can also ask questions on Geth's [Discord server](https://discord.gg/WHNkYDsAKU) or keep up to date with Geth on [Twitter](https://twitter.com/go_ethereum). Information about Ethereum in general can be found at [ethereum.org](https://ethereum.org). The Geth team have also recently started to run AMA's on Reddit: From f2ae1511e5999718583ed1b4fde797f526cca44c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Quiroz?= Date: Thu, 1 Dec 2022 16:46:42 -0300 Subject: [PATCH 11/15] fix: downloads page borders & margins --- src/components/UI/downloads/DownloadsHero.tsx | 4 ++-- src/pages/downloads.tsx | 10 +++++++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/components/UI/downloads/DownloadsHero.tsx b/src/components/UI/downloads/DownloadsHero.tsx index 8a00452cc2..3792864f71 100644 --- a/src/components/UI/downloads/DownloadsHero.tsx +++ b/src/components/UI/downloads/DownloadsHero.tsx @@ -1,4 +1,4 @@ -import { Box, Button, Center, Grid, HStack, Image, Link, Stack, Text } from '@chakra-ui/react'; +import { Box, Button, Center, Grid, HStack, Link, Stack, Text } from '@chakra-ui/react'; import { FC } from 'react'; import NextLink from 'next/link'; @@ -32,7 +32,7 @@ export const DownloadsHero: FC = ({ return ( = ({ data }) => { borderColor='primary' gap={4} flexDirection={{ base: 'column', md: 'row' }} + alignItems='center' > @@ -512,7 +513,7 @@ const DownloadsPage: NextPage = ({ data }) => { - + gpg --recv-keys F9585DE6 C2FF8BBF 9BA28146 7B9E2481 D2A67EAC @@ -525,6 +526,8 @@ const DownloadsPage: NextPage = ({ data }) => { borderColor='primary' gap={4} flexDirection={{ base: 'column', md: 'row' }} + alignItems='center' + sx={{ mt: '0 !important' }} > @@ -533,7 +536,7 @@ const DownloadsPage: NextPage = ({ data }) => { - + gpg --recv-keys E058A81C 05A5DDF0 1CCB7DD2 @@ -542,10 +545,11 @@ const DownloadsPage: NextPage = ({ data }) => { From 123b299345e3274fdcd7696d7e54b06f7b14a2bf Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Fri, 2 Dec 2022 15:32:30 +0100 Subject: [PATCH 12/15] prevent Header title from wrapping [Fixes #79] (#111) --- src/components/UI/Header.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/UI/Header.tsx b/src/components/UI/Header.tsx index 7ad993fd0e..18cac9ca19 100644 --- a/src/components/UI/Header.tsx +++ b/src/components/UI/Header.tsx @@ -29,7 +29,7 @@ export const Header: FC = () => { > - go-ethereum + go-ethereum From 367e7c6e03c216e5912d140a707cc3fcef87e5dc Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Fri, 2 Dec 2022 17:56:44 +0100 Subject: [PATCH 13/15] remove any margin on first MD item (#109) [Fixes #75, issue when articles start with an H2 had extra margin between the H1 section and the starting H2. --- src/pages/[...slug].tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/[...slug].tsx b/src/pages/[...slug].tsx index f16e3fa1dc..9119adae5a 100644 --- a/src/pages/[...slug].tsx +++ b/src/pages/[...slug].tsx @@ -116,7 +116,7 @@ const DocPage: NextPage = ({ frontmatter, content, navLinks, lastModified - + Date: Fri, 2 Dec 2022 18:58:46 +0100 Subject: [PATCH 14/15] fix broken links (#103) --- docs/fundamentals/peer-to-peer.md | 2 +- docs/getting-started/index.md | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/fundamentals/peer-to-peer.md b/docs/fundamentals/peer-to-peer.md index 7784007454..28c71225eb 100644 --- a/docs/fundamentals/peer-to-peer.md +++ b/docs/fundamentals/peer-to-peer.md @@ -3,7 +3,7 @@ title: Connecting To The Network description: Guide to connecting Geth to a peer-to-peer network --- -The default behaviour for Geth is to connect to Ethereum Mainnet. However, Geth can also connect to public testnets, [private networks](/docs/developers/geth-developer/private-network.md) and [local testnets](/docs/developers/geth-developer/dev-mode). For convenience, the two public testnets with long term support, Goerli and Sepolia, have their own command line flag. Geth can connect to these testnets simpyl by passing: +The default behaviour for Geth is to connect to Ethereum Mainnet. However, Geth can also connect to public testnets, [private networks](/docs/developers/geth-developer/private-network) and [local testnets](/docs/developers/geth-developer/dev-mode). For convenience, the two public testnets with long term support, Goerli and Sepolia, have their own command line flag. Geth can connect to these testnets simpyl by passing: - `--goerli`, Goerli proof-of-authority test network - `--sepolia` Sepolia proof-of-work test network diff --git a/docs/getting-started/index.md b/docs/getting-started/index.md index 74a0d1c04b..a046f5f16b 100644 --- a/docs/getting-started/index.md +++ b/docs/getting-started/index.md @@ -5,7 +5,7 @@ description: Guide to getting up and running with Geth using Clef. This page explains how to set up Geth and execute some basic tasks using the command line tools. In order to use Geth, the software must first be installed. There are several ways Geth can be installed depending on the operating system and the user's choice of installation method, for example using a package manager, container or building from source. Instructions for installing Geth can be found on the ["Install and Build"](/docs/getting_started/Installing-Geth) pages. -Geth also needs to be connected to a [consensus client](docs/getting-started/consensus-clients.md) in order to function as an Ethereum node. The tutorial on this page assumes Geth and a consensus client have been installed successfully and that a firewall has been configured to block external traffic to the JSON-RPC port `8545` see [Security](/docs/fundamentals/security). +Geth also needs to be connected to a [consensus client](docs/getting-started/consensus-clients) in order to function as an Ethereum node. The tutorial on this page assumes Geth and a consensus client have been installed successfully and that a firewall has been configured to block external traffic to the JSON-RPC port `8545` see [Security](/docs/fundamentals/security). This page provides step-by-step instructions covering the fundamentals of using Geth. This includes generating accounts, joining an Ethereum network, syncing the blockchain and sending ether between accounts. This tutorial uses [Clef](/docs/tools/Clef/Tutorial). Clef is an account management tool external to Geth itself that allows users to sign transactions. It is developed and maintained by the Geth team. @@ -33,7 +33,7 @@ Read more about Ethereum accounts [here](https://ethereum.org/en/developers/docs ## Step 1: Generating accounts {#generating-accounts} -There are several methods for generating accounts in Geth. This tutorial demonstrates how to generate accounts using Clef, as this is considered best practice, largely because it decouples the users' key management from Geth, making it more modular and flexible. It can also be run from secure USB sticks or virtual machines, offering security benefits. For convenience, this tutorial will execute Clef on the same computer that will also run Geth, although more secure options are available (see [here](https://github.com/ethereum/go-ethereum/blob/master/cmd/clef/docs/setup.md)). +There are several methods for generating accounts in Geth. This tutorial demonstrates how to generate accounts using Clef, as this is considered best practice, largely because it decouples the users' key management from Geth, making it more modular and flexible. It can also be run from secure USB sticks or virtual machines, offering security benefits. For convenience, this tutorial will execute Clef on the same computer that will also run Geth, although more secure options are available (see [here](/docs/tools/clef/setup)). An account is a pair of keys (public and private). Clef needs to know where to save these keys to so that they can be retrieved later. This information is passed to Clef as an argument. This is achieved using the following command: @@ -121,7 +121,7 @@ geth --sepolia --datadir geth-tutorial --authrpc.addr localhost --authrpc.port 8 Running the above command starts Geth. Geth will not sync the blockchain correctly unless there is also a consensus client that can pass Geth a valid head to sync up to. In a separate terminal, start a consensus client. Once the consensus client gets in sync, Geth will start to sync too. -The terminal should rapidly fill with status updates that look similar to those below. To check the meaning of the logs, refer to the [logs page](docs/fundamentals/logs.md). +The terminal should rapidly fill with status updates that look similar to those below. To check the meaning of the logs, refer to the [logs page](/docs/fundamentals/logs). ```terminal INFO [02-10|13:59:06.649] Starting Geth on sepolia testnet... From 3a2a4b1cbf71f35a1a1213251158fe44da13ab9f Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Fri, 2 Dec 2022 19:07:58 +0100 Subject: [PATCH 15/15] patch responsive width [Fixes #53] (#104) --- src/components/layouts/Layout.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/layouts/Layout.tsx b/src/components/layouts/Layout.tsx index 46e8bed8ab..16a3534084 100644 --- a/src/components/layouts/Layout.tsx +++ b/src/components/layouts/Layout.tsx @@ -12,7 +12,7 @@ interface Props { export const Layout: FC = ({ children }) => { return ( - +
{children}