From 5945f7b9c37b8475cdf73db4fe799a1e03088096 Mon Sep 17 00:00:00 2001 From: Bruno Santos Date: Mon, 20 Jul 2026 17:49:04 +0000 Subject: [PATCH] docs: add all untracked content --- Explicação.md | 317 +++++++++++++++++++++++++++++++++++++++++++++ Plano.md | 219 +++++++++++++++++++++++++++++++ home.md | 46 +++++++ logo.png | Bin 0 -> 16242 bytes screenshot_545.png | Bin 0 -> 8688 bytes 5 files changed, 582 insertions(+) create mode 100644 Explicação.md create mode 100644 Plano.md create mode 100644 home.md create mode 100644 logo.png create mode 100644 screenshot_545.png diff --git a/Explicação.md b/Explicação.md new file mode 100644 index 0000000..44ae7a9 --- /dev/null +++ b/Explicação.md @@ -0,0 +1,317 @@ +--- +title: Explicação +description: +published: true +date: 2026-06-22T19:40:48.978Z +tags: +editor: markdown +dateCreated: 2026-06-22T19:40:46.381Z +--- + +# Explicacao Didatica do Trecho `chartData` + +## Trecho analisado + +```javascript +const chartData = this._dashboardDataset + .filter(item => item.Type === 'MATERIAL_STATUS') + .map((item) => ({ + ...item, + DisplayStatus: ColorMaterialFormatter.colorMaterialSubtitle(item.Key2) + })); +``` + +## Objetivo geral do codigo + +Esse trecho pega uma lista maior de dados chamada `this._dashboardDataset`, seleciona apenas os itens que representam status de material e cria uma nova lista com esses itens, adicionando um campo novo chamado `DisplayStatus`. + +Em outras palavras: + +1. Filtra somente os itens importantes para esse caso. +2. Monta um novo array com os mesmos dados do item original. +3. Acrescenta uma informacao formatada para exibicao. + +## Explicacao linha por linha + +### 1. Declaracao da constante + +```javascript +const chartData = ... +``` + +- `const` cria uma constante. +- `chartData` sera a variavel que vai guardar o resultado final. +- Esse resultado sera um novo array. + +## 2. Uso de `this._dashboardDataset` + +```javascript +this._dashboardDataset +``` + +- `this` normalmente representa o objeto atual, por exemplo um controller ou classe. +- `_dashboardDataset` parece ser uma propriedade desse objeto. +- O nome indica que ela armazena os dados usados no dashboard. + +Entao o codigo esta comecando a trabalhar sobre esse array principal. + +## 3. A funcao `filter` + +```javascript +.filter(item => item.Type === 'MATERIAL_STATUS') +``` + +### O que `filter` faz + +A funcao `filter()` percorre todos os itens de um array e retorna um novo array contendo apenas os itens que passam em uma condicao. + +### Como funciona aqui + +Para cada `item` do array: + +```javascript +item.Type === 'MATERIAL_STATUS' +``` + +Essa expressao verifica se a propriedade `Type` do item e exatamente igual a `'MATERIAL_STATUS'`. + +### Resultado do `filter` + +- Se for verdadeiro, o item permanece no array novo. +- Se for falso, o item e descartado. + +### Exemplo + +Se o array original for: + +```javascript +[ + { Type: 'MATERIAL_STATUS', Key2: 'A' }, + { Type: 'OTHER', Key2: 'B' }, + { Type: 'MATERIAL_STATUS', Key2: 'C' } +] +``` + +Depois do `filter`, o resultado sera: + +```javascript +[ + { Type: 'MATERIAL_STATUS', Key2: 'A' }, + { Type: 'MATERIAL_STATUS', Key2: 'C' } +] +``` + +## 4. A arrow function usada no `filter` + +```javascript +item => item.Type === 'MATERIAL_STATUS' +``` + +Essa e uma **arrow function**, que e uma forma curta de escrever funcao em JavaScript. + +Ela equivale a algo assim: + +```javascript +function(item) { + return item.Type === 'MATERIAL_STATUS'; +} +``` + +Ou seja, para cada item, ela retorna `true` ou `false`. + +## 5. A funcao `map` + +```javascript +.map((item) => ({ + ...item, + DisplayStatus: ColorMaterialFormatter.colorMaterialSubtitle(item.Key2) +})); +``` + +### O que `map` faz + +A funcao `map()` percorre um array e transforma cada item em outro valor. + +No final, ela devolve um novo array com a mesma quantidade de itens, mas cada item pode ter sido modificado ou recriado. + +### Como funciona aqui + +Depois do `filter`, o `map()` pega cada item que sobrou e cria um novo objeto com: + +- todos os campos do item original +- mais um campo novo chamado `DisplayStatus` + +## 6. O que significa `...item` + +```javascript +...item +``` + +Isso e o **spread operator**. + +Nesse contexto, ele copia as propriedades do objeto `item` para dentro do novo objeto. + +Exemplo: + +Se `item` for: + +```javascript +{ + Type: 'MATERIAL_STATUS', + Key1: 'MAT1', + Key2: 'RED' +} +``` + +Entao: + +```javascript +{ + ...item +} +``` + +vira algo equivalente a: + +```javascript +{ + Type: 'MATERIAL_STATUS', + Key1: 'MAT1', + Key2: 'RED' +} +``` + +Isso e muito util para reaproveitar os dados existentes sem precisar escrever propriedade por propriedade. + +## 7. Criacao do campo `DisplayStatus` + +```javascript +DisplayStatus: ColorMaterialFormatter.colorMaterialSubtitle(item.Key2) +``` + +Aqui o codigo cria uma nova propriedade chamada `DisplayStatus`. + +O valor dela vem da chamada: + +```javascript +ColorMaterialFormatter.colorMaterialSubtitle(item.Key2) +``` + +### O que isso faz + +- `ColorMaterialFormatter` parece ser um objeto utilitario de formatacao. +- `colorMaterialSubtitle(...)` parece ser uma funcao desse objeto. +- `item.Key2` e o valor enviado para essa funcao. + +Provavelmente essa funcao pega um codigo interno e devolve um texto melhor para exibicao. + +### Exemplo possivel + +Se: + +```javascript +item.Key2 = 'RED' +``` + +e a funcao retornar: + +```javascript +'Vermelho' +``` + +o novo objeto passara a ter: + +```javascript +DisplayStatus: 'Vermelho' +``` + +## 8. Por que ha parenteses em volta do objeto no `map` + +```javascript +(item) => ({ + ...item, + DisplayStatus: ... +}) +``` + +Esses parenteses extras existem porque a arrow function esta retornando um objeto diretamente. + +Sem esses parenteses, o JavaScript poderia interpretar as chaves como bloco de codigo, e nao como objeto. + +## 9. Resultado final de `chartData` + +No final, `chartData` sera um novo array contendo: + +- apenas itens com `Type === 'MATERIAL_STATUS'` +- todos os campos originais desses itens +- mais o campo `DisplayStatus` + +## Exemplo completo + +### Array original + +```javascript +this._dashboardDataset = [ + { Type: 'MATERIAL_STATUS', Key1: 'MAT1', Key2: 'RED' }, + { Type: 'OTHER', Key1: 'X', Key2: 'Y' }, + { Type: 'MATERIAL_STATUS', Key1: 'MAT2', Key2: 'GREEN' } +]; +``` + +### Supondo que: + +```javascript +ColorMaterialFormatter.colorMaterialSubtitle('RED') // 'Vermelho' +ColorMaterialFormatter.colorMaterialSubtitle('GREEN') // 'Verde' +``` + +### Resultado em `chartData` + +```javascript +[ + { + Type: 'MATERIAL_STATUS', + Key1: 'MAT1', + Key2: 'RED', + DisplayStatus: 'Vermelho' + }, + { + Type: 'MATERIAL_STATUS', + Key1: 'MAT2', + Key2: 'GREEN', + DisplayStatus: 'Verde' + } +] +``` + +## Diferenca importante em relacao ao `forEach` + +Nesse caso, o codigo usa `map()`, que cria um novo array com novos objetos. + +Isso e diferente de um `forEach()` alterando diretamente os objetos originais. + +### Vantagem disso + +- o codigo fica mais declarativo +- evita alterar a lista original sem necessidade +- facilita manutencao e leitura + +## Resumo simples + +Esse trecho: + +1. pega os dados do dashboard +2. filtra apenas os itens do tipo `MATERIAL_STATUS` +3. cria uma nova versao de cada item +4. adiciona o campo `DisplayStatus` com um valor formatado para exibicao + +## Conclusao + +Para um dev junior, a ideia principal e lembrar: + +- `filter()` serve para **selecionar** +- `map()` serve para **transformar** +- `...item` serve para **copiar as propriedades do objeto** +- `ColorMaterialFormatter.colorMaterialSubtitle(item.Key2)` serve para **formatar um valor para exibicao** + +Esse e um padrao muito comum em JavaScript moderno quando trabalhamos com listas de dados. diff --git a/Plano.md b/Plano.md new file mode 100644 index 0000000..9f88e0f --- /dev/null +++ b/Plano.md @@ -0,0 +1,219 @@ +--- +title: Plano +description: +published: true +date: 2026-06-22T19:37:58.369Z +tags: +editor: markdown +dateCreated: 2026-06-22T19:36:05.776Z +--- + +# Correção da persistência do campo `WoNotInterface` + +## Contexto + +Hoje a persistência do campo `Interface para ordens/notas` depende de `getSelectedIndex()` no `Select` `editorOption`. + +O problema é que os itens desse `Select` são montados dinamicamente em `fillWorkOrderNotificationInterface()`. Como a lista muda conforme a existência de `WebGuiLink` e `FioriLink`, o índice visual não é confiável para representar o valor técnico salvo em `WoNotInterface`. + +Em outras palavras: + +- `0` nem sempre deve significar apenas a primeira opção visível +- `1` nem sempre corresponde a `G` +- `2` nem sempre corresponde a `F` + +O campo precisa persistir o valor técnico real da opção selecionada: + +- `''` para padrão SIGGA P&S +- `G` para SAP WebGUI +- `F` para SAP Fiori + +## Problema atual + +Trecho atual: + +```js +oParam.WoNotInterface = this.getWoNotInterfaceFieldMap(this._control.editorOption.getSelectedIndex().toString()); +``` + +### O que faz + +Lê o índice selecionado de `editorOption`, converte para string e envia esse valor para `getWoNotInterfaceFieldMap(...)`. + +### Por que existe + +A implementação atual tenta mapear posição visual do `Select` para o valor persistido em `WoNotInterface`. + +### Qual problema evita + +Na prática, não evita o problema principal. Como `editorOption` é montado dinamicamente, `getSelectedIndex()` não representa de forma estável `OrdNotInterface.Default`, `OrdNotInterface.WebGui` ou `OrdNotInterface.Fiori`. + +## Objetivo da correção + +A correção deve fazer `editorOption` trabalhar com `key` explícita por item, usando os valores técnicos definidos em `OrdNotInterface`. + +Isso permite que a persistência use `getSelectedKey()` em vez de `getSelectedIndex()`, removendo a dependência da posição visual. + +Valores esperados para `WoNotInterface`: + +- `OrdNotInterface.Default` -> `''` +- `OrdNotInterface.WebGui` -> `'G'` +- `OrdNotInterface.Fiori` -> `'F'` + +## Bloco 1: montagem do `Select` + +```js +fillWorkOrderNotificationInterface() { + const aItems = [{ + key: OrdNotInterface.Default, + text: this.getResourceText("WorkOrderNotificationInterfacePSOption") + }]; + + if (this._control.DataSourceForm.getModel(GENERAL_MODEL).oData.WebGuiLink) { + aItems.push({ + key: OrdNotInterface.WebGui, + text: this.getResourceText("WorkOrderNotificationInterfaceWebGuiOption") + }); + } + + if (this._control.DataSourceForm.getModel(GENERAL_MODEL).oData.FioriLink) { + aItems.push({ + key: OrdNotInterface.Fiori, + text: this.getResourceText("WorkOrderNotificationInterfaceFioriOption") + }); + } + + this._control.editorOption.destroyItems(); + + aItems.forEach((item) => { + this._control.editorOption.addItem(new sap.ui.core.Item({ + key: item.key, + text: item.text + })); + }); + + const sInterface = this.getWoNotInterfaceFieldMap( + this._control.DataSourceForm.getModel(GENERAL_MODEL).oData.WoNotInterface + ); + + this._control.editorOption.setSelectedKey(sInterface); +} +``` + +### O que faz + +Esse bloco monta o `editorOption` com `key` explícita para cada item e depois seleciona o valor salvo usando `setSelectedKey(...)`. + +### Por que existe + +Ele garante que cada opção visível no `Select` represente diretamente um valor técnico de `WoNotInterface`, usando `OrdNotInterface` como fonte de verdade. + +### Qual problema evita + +Evita que `editorOption` dependa da posição do item na lista. Com `getSelectedKey()`, o código deixa de assumir que a segunda opção sempre é `G` ou que a terceira sempre é `F`. + +## Bloco 2: normalização do valor + +```js +getWoNotInterfaceFieldMap(value) { + if (value === '1') { + return OrdNotInterface.WebGui; + } + + if (value === '2') { + return OrdNotInterface.Fiori; + } + + if (value === '0' || value === '' || value == null) { + return OrdNotInterface.Default; + } + + if (value === OrdNotInterface.WebGui) { + return OrdNotInterface.WebGui; + } + + if (value === OrdNotInterface.Fiori) { + return OrdNotInterface.Fiori; + } + + return OrdNotInterface.Default; +} +``` + +### O que faz + +Esse bloco normaliza o valor de `WoNotInterface`, aceitando tanto o formato legado por índice (`0`, `1`, `2`) quanto o formato correto por valor técnico (`''`, `G`, `F`). + +### Por que existe + +Ele preserva compatibilidade durante a transição. Se ainda houver dado legado ou algum fluxo antigo passando índice, o método converte isso para o valor real esperado por `OrdNotInterface`. + +### Qual problema evita + +Evita inconsistência entre leitura e gravação de `WoNotInterface`. Também impede que `editorOption` quebre ao carregar registros antigos ainda dependentes de `getSelectedIndex()`. + +## Bloco 3: persistência + +```js +oParam.WoNotInterface = this.getWoNotInterfaceFieldMap(this._control.editorOption.getSelectedKey()); +``` + +### O que faz + +Esse bloco persiste `WoNotInterface` a partir do `key` selecionado em `editorOption`. + +### Por que existe + +A persistência precisa usar `getSelectedKey()` porque o valor técnico correto está no `key` do item, não na sua posição visual. + +### Qual problema evita + +Evita que `WoNotInterface` grave `G` ou `F` incorretamente quando a ordem do `Select` mudar. Também elimina a fragilidade do uso de `getSelectedIndex()`. + +## Referências de código + +Arquivos relevantes: + +- `webapp/controller/Config/auxiliary/ConfigGeneralAuxiliary.js` +- `webapp/resources/js/constant/OData/OrdNotInterface.js` + +Pontos principais em `ConfigGeneralAuxiliary.js`: + +- montagem do `editorOption` +- normalização de `WoNotInterface` +- persistência de `oParam.WoNotInterface` + +Fonte de verdade dos valores técnicos: + +- `OrdNotInterface.Default` +- `OrdNotInterface.WebGui` +- `OrdNotInterface.Fiori` + +## Resultado esperado + +Após a correção: + +- `WoNotInterface` passa a ser persistido como `''`, `G` ou `F` +- `editorOption` deixa de depender da posição visual dos itens +- `getSelectedKey()` substitui `getSelectedIndex()` no fluxo correto +- a exibição dinâmica das opções não influencia mais o valor salvo + +## Cenários de validação + +- Somente opção padrão disponível: + - `editorOption` exibe apenas SIGGA P&S + - `WoNotInterface` salva `''` + +- WebGUI disponível: + - `editorOption` exibe SIGGA P&S e SAP WebGUI + - ao selecionar SAP WebGUI, `WoNotInterface` salva `G` + +- Fiori disponível: + - `editorOption` exibe SIGGA P&S e SAP Fiori + - ao selecionar SAP Fiori, `WoNotInterface` salva `F` + +- Combinações diferentes de opções visíveis: + - mesmo com ordem visual variável, `WoNotInterface` continua persistindo o valor correto + +- Reabertura da tela: + - o valor salvo volta corretamente selecionado via `setSelectedKey(...)` no `editorOption` diff --git a/home.md b/home.md new file mode 100644 index 0000000..f12e158 --- /dev/null +++ b/home.md @@ -0,0 +1,46 @@ +--- +title: Abap Wiki +description: Wiki para Abaps +published: true +date: 2026-07-13T13:29:01.441Z +tags: +editor: markdown +dateCreated: 2024-11-26T21:44:49.076Z +--- + +# Abap Wiki +Teste de pagina!! + +![screenshot_545.png](/screenshot_545.png) + + +```python +import pyautogui +import time + +# Tempo entre movimentos (em segundos) +intervalo = 10 + +# Distância do movimento do mouse +movimento = 50 + +print("Programa iniciado. Pressione CTRL + C para parar.") + +try: + while True: + # Pega posição atual do mouse + x, y = pyautogui.position() + + # Move o mouse levemente + pyautogui.moveTo(x + movimento, y, duration=1.2) + pyautogui.moveTo(x, y, duration=1.2) + + print(f"Mouse movido às {time.strftime('%H:%M:%S')}") + + # Aguarda próximo ciclo + time.sleep(intervalo) + +except KeyboardInterrupt: + print("Programa encerrado pelo usuário.") + +``` \ No newline at end of file diff --git a/logo.png b/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..c527996a2c961b020247a3466e971a98e793c186 GIT binary patch literal 16242 zcmeIZi9eL@_dkA1s3a{!*-}c`i>!?)LM8i_orLVWv5&MUYa7a%Y}v-X8>55}vW%S( z$ugM47>t?wdwIQHpa0?adpzDAj~VxzIrlZ^I`?&*<$2EaLRVXZ?a=8%5CpN^zI9U{ zg7$&Seb51B@NXkva0mR`@1t_t@BsJ=Iq={)_@bGp_S-o}|g3dsd}m>l2CwxNV+(^w z+9*Y8(@W^!?dJ!T4(uye{di^H((X-1!)8AVPYw-7UO)BseO_-*@yT)AuxBj{7b|Ce z^76^cm)R94#mTfOO2H1T@AhF+#Ysz4@p>2{Ug!QTg5vE0BDHQlouptao5Be}Qkvh0 z3_wcCG4LjJbnlY!f0zH$!~fS8f$pzq_yl%m^Lci~TcbKlNt>rdakt8CBD0GuhxbEJ zOL@(Dbyqd-E-P5(Ml+9537aT?M8fKdl9g%jlJCXidX*P*bcMW^35Ovlb@N#^RVcIq z+_7o)a}Ftx(EUKxerJbuCFrTHSV6$;GRq`J2-*z1-mfMo%CUn~ipB}GM!8~nA*i(X z>1$=4&W${ss`Y}*TQ`lLS3QNGtq~>F_w+FH`K4mdk)AHFtEgHBMynP`P}kJnr}3-O zChSmnVAEZ&-%%-hbaEr~WtkE!Ru*<3RfG52eNbF*OhU%k)QS z{9mT#UfzG1Ae?v6zf8N|`u=0$Y5$K&$KwB(JpUVMw;BH*Q!?>iF{jV#{5#QR(e!_X z3+K8f{*M4qO`z4kGjRW__ODuMTjl<{joJD??tu`Kf0?xZ+OH*LKObiFG`F`kw9}j| zxD=OPFJGXS|4BsuSi;FCMyby~UF6rl;(Up}>}}62OWG;FO$Yqc8)Fw8vu;bLm6c@! z)nMFaCB+G4p0Q*WG&qr9>}cIaMDjz;$Pn}0oNH{5pr)dq^NXJMrXNqV3mF-3=nZy? z6vn*e>*OqFgjqG!^lmdHGSds_JHwo@>Kw7^oYAe|9sj0ma13$u$Yv#ZDb{kutf9iv zW7&ClXEJR`^TZLT`Am}pT|a$)_-NJ}MY#5gIB!P(*ZxnhUlo;)J{Ao%8x`cFx0oj8 z+!FeDPprOVntk`7>CkwXwS~Ud4a3>aSDJK7;dV=L#5ta~ zH=<^2H8A5zJx9b@j~I9;O3zS|xy}k|GU-t=_A9PYG7<*4N^$64;sh@A?Q-8mcw}eg zxb|00QIX2^*O3Z7>iHPueEk6tJCPUW`a@FaC1~MH3$1arU7JM3xq6f#@mbCs z2IuZazNnU^H(rv`eTNV0Riw$I+Vz-p-b(lcA0 zw?O6;zTe5-OtE;mxrCfk5fnCHg{ZIALtBi0hz(Zc6Nt19wOPBUf#Hd7=c7_An@TU} zGMpjYOElzWFO=dp_B%4XxY+y9#V*O2r@?UiM~*l(tf?;3AZ63{lB#0!E2i8nO@;%| zaH>U4A(!DNMW>aNp&E)i@?`Xi=nm7NNUTTH^Jn5|vRI2eEy>|wi8M?%o8`{z7&8#! zMz5Q*u?Oyy%fZ)Wr56&PBvb|ZYrH;m=yrtiJFz7%-b6#kOsCkRKg&aAp{y#lz@?jTb-w@- z+xBWkQh^5&(=@9tRVRe{R@jv=c;w93ioZ82IB%fIzH6pwg0q?&Di9vJy3|+27F0Mj z@m@)l3A3fCY{q!BJX7AU{A`%kb_E7|<64JwQIi(+;aIS9M zg-#v99`CYLSf*IY?%g#qN~pG`*ziz%ofmP}<`-N>&J%{9t=8YqBoOuJ-|lwOme;q% zU$$ER?Ks@5q0Lu}L)59*+CQLhz+oK^9z{h*bH0$TD41Yvj~DM>vy0y7@DVP|&(fik z6b$RYjg~H`>R?1=>i16~p4nTP`d1bwCgCsxjq_DD_g`2|9k195-vrvIK0CBLsINI0NivUTD`?VUSO>pSkMuR9I& zEE^saVJxp0_j))F>7jq4My4RpmD!@l)Gu2(oGpVbH~Ev`rjAvTMvIC zA)C~CJ?(&M}%G(r8q z9svd_>U$bQn7Lg4XGHar{bUZQmp+OHiOPx z_OQr28IPJT`}X+|tHGhjbw`A@#08TJe%-Ij6fwEF9?MI*b{ZMOs$cr%wAPX=k{N30 zZ~JyustgQI`(UPpj(Zsyy+;(wbNIAzED;iW`(3ORjA|?tEoZxEClZ;1;Iu$Z^(?(% zuJCl}27UWWQ}Nu%s0`g4VPwrcI0%0?hj(lrk3vV`jAY$Wi0(7W5&FREy&YomwV{PY zc4uc)GlRQ`*{3Gun=tS2{(6U{H zVVdvE6643dPXz_)mtIK)XA*9aHyt|Rd zoFhve`4%|^XPH(%tjsHkw@FbH$)|eU`(%*2cB|Pw&~o>D3S;w=sC|>PvJ;yt3-d7# zWj;nldAG+cT>ZQ{#6P*yZdMYxCL7(RAg4wOgzib12~L%Ky8(2H3VD!@F}wcG_x2PQ zx}yz}!hF0=K?l7$dt_=mvPJMDb#ywz#MMwkXN+je>$!NahfLQvdrU2BYBd0nE0dWs zu#011+!a54WRV3et&wpJRX(iRfl}u{cjQ94@18Hvb;Nxux6BiBIy(;qMfz+2Lpxd4 zZ#|Dkd#+t<$E>t2!RKr*pIQF9&6>O5Gq1B2#J%15ZbovH16rm3I@_w!<1S*Lr>7l{ zV{@ms1X-tHAC6rC!9#0GfZL>oV$h^$SPW&>Pma+&!Oss2SPqNWZ zvee(FUai)hm!U>@a4l%wbv~#j=aE*J{v{UbLAE}8%FysCMQ5B4#-+GLU+V(4uZwGq z8`^yFM2yz!*Y2`l?a#_sRV z^Fi==k_nha<)VGTCEE+Eo0noD$?NQCA5^N3@L#fv#=TXAwie0jLM%0uDlyIT=X-i2 z-raZfscC|@PL@P^y-VrwT|MO>&uc99JAM(SsU+rzI?YCOwRkRMD_*;gG~vFR+(vk#3E3X@4@jNSv_R-;s?= zhe>iizITK@H({`>k1qByk1k&y&kzW;@yf9q z=6^?zSMaAz}Qk{_f z;L0K~fBek$lz@v7VTeeUiu=|v1?yhS4w!&Rg8Yolmq?~E>a(5inB)(%!WY54%6^|^ zp7LIs^Z2k5->T<7(m#>|hj|wcx5%Fz*pt}ON5n{fdPPv}n-2J0p7%^6@iWNhf-K<_ zG5^iDy_IqUDO)$!R5LhE!u_APg)lp3^b_C3M(2{qN7u+rZ(K%vqh`=|RqL5fnWyWD zEG-|rV&zT&QJ@wdw!me@NYjL13nLzwid=gBNsQAd@JhkGuekPO@OClQtgK)PY-juz zFQ(V3D`>_6`1AG;^QKSgNVI$8aLaZ6sAsD6-k%>@yF0;DH^QsNW8rRf)VbBx~<&@n{O4Vr=5E^C_5^bn>Q5VXkh4%b}}< z7jm{w-0}S~a#jIb^|{1qB)>{&JT3GUuLY{SBKp?jzyH{F{DL{V8!*t1{*3U%?yPiL zs?upMZr$n#xR-zLUOspaxM|<a|G7Zh%&~MPd9C)W>vmhxg2D_c(g}kh)5FepW)wZN zbEd93z6G1hfok_;Xf-T!{RVvUwPDBy3L&4Orwgo^^XQkpoz0e%U(+=vQzIajLBXv} zmf{+mtunN&3q1mQrw%hWv^z1R} zn=Nb!p2&&|Heg$!KYTil@6XCWG^iqj{Ui0)N_&z`Gf~~egLM_6Mv0xYAIYR^ji#~6 z+ZFsB!rG{63i8#h{oa&s!157 zNGD&b)Kb)Th}}M@6}>;sG*BmfX1NFb;t8#{3-^aAM}Fg2JsxJ+;JcCS2NwiQ;tH&O zzRYyO_$x76XSWcd*Kg8Z8T>3}>JqC@##o71$YE(8(o5^@=7q;~FLYfxNA4A8@<0tD^ zoX~`W?720_ECOaCXPr({v)s*)B&M671lAwVuldCW`MN#UJjeS!rH7ZeKxRD@p+Lh~ zd!7BbJ|71bqI^W#rq!f3f!UHaYl0t}B#}MUAC$FJ)bfAant%8MlFAhm?D~v_&%JuC zA{e|H(*NGo3PB9=@~ObU+s@)UI~jgNyDH};`4Dsj{jM<_(96uOE_aQ!O(7V?{}m5M znl(KyeneaDAZykC8A=#C-kjLo`eywKq`T`T^^k0-*fPqf`B9I05=P+iO+E0aF@FSZ zWOO16ZB?eX?jER~(KyRitnjIul!ughymi6kQ+pGw+ws(fvgKDk6`lY!D*GRsoay zgD5!iXvU-B1~N^QH(j>ehuP-y*ZbobreOI=s)wnu6;pVfU9^l6Qu)*RRDAkafurm) zIfz?Tw&~g*f-nb~7!`!?#4nkm)Ue0-x%=BTa!RCj~4|fg5 zaA|=l;TX~W(2RSZ%IqHnRm>-J%`1#kCFh2hU{%Y25F;zzn|2XnZJ6d|R;jk1)$Tlc zyOvi1pama)My|Z?ylMT6auS0RWomI)=D1bH=+qTjk~b?9M*69JQ?-8Us|fIHf@4F2 zD?n-?&KT9$i*$+8GLSDhmoNBdOiQFoj6|GED;q1hPx`{ew~nH%G%-$gm&O(>{Nkqj z09>PNOs(eQq&;^JpB@=K9s|96zM~A*xTWku-a@+Zd{0vEgH#-=Citzn{>6Iu8B?-e zn)fdG%%o=s10}vBEbpQ1=%C`>;)2*>uaad2;6u+zczn&GG^z0GBhOFy{(#lWWFgtpJ zyFx=a!Mm1%9LB@!jmo-PCIGGIaX{-#N@VezIqF}dAZOq#oY4d3h>%%Oy02kSlNC*# z2srHd2}Df-%At)`yZ!p16hy_LoK@%wq@`f_J{rKqih29M7j{=s`Chf7d?3)(i z+{E3YI}!{wI_4$DLv(UQ8!4Va$Z7km1H-Pn?`JVRj`!nn`^oDlnm(ca;|3djC+QMi|%nk0nGW@5abtU2HIZY=v}! zQ!>S*_~A&BLCuKpMTQRppD`HQk6YBQmyxFFmW1VzXh%K??iO3q{y-lQKT7+_g;q&% z{JiA5kNH_6#sQx&N~7CT@PjK9Jj_DWbR>_AwWVSfEBhZ9&Ubs!Nhij%8?GF>Bt#_*QK>WpP2~2vFoz5M z$^A+1MPEc2Mh}H48c;2yd}^O>=&0+6oq{d$V7RvWM(AP-+`Wf4H2Jm-4=m4r#~7N5 z6kz#6t=O3&pFa`n#vE+h$&BOIL3&)GE6Zf-V8vs5HtIGv_Gg8vpWaeOQflwew#Mqr z)~g0KuoV70X@|E|H``d@-6^UhpEB@2<|tgc!k6#i88=%JG4HHb$WosB9ecz~OhuN+ zQqQt0hAUD|M&WeWE$$=$qmCcLl75}0ZDy@kEfwZ1rI_>#D&@Yb z3-}|?6$EyXKTKTgU0CzeKo7w$d&e2hS2J%GcIh1InSC$oak5c=H`MhO!!(8qby1vJ zXby@F*4CwYS4COvcBU`Q`u4VSEhI>06qo~uFYrVv?%ZZHkL3a_UOg-7rn)i>{*|Kj zSRybN5O;^D3NUOtd0KXcVINE(;Cy+)}ML~e!nKb9Wf$Fg|2 zxh&>VEHTUR?vEDm5TmWl3M8%MuS)f@XmkRdgPlLjzC%D&Z7fu|^|%GQCD|_@oE9Z1 z3(B|4f^fG1`|Qb#0Hk^ZfoABuB8Pc{qmTzCp{|oLzaMC3T+~z}Cq(B3B4Px`C#IJsk*&xxAZMtS z@hzzCpznXLBMoUtXDR0NrXkgO!)#yBw}5e3s}TO(dfQ{T{s$E)MMHmgNXQDZHK<5_ z<~hIqA!!6<2XsmZ`0b@TbdAo`&%^l0pioE^|PxT#;92yCey$;mv z;ZZuwaJYRB*qe*ab(-tWTi9gp9WbpB*;f}(Dg|NT{=U7)d=lf2m#wGA_>SB=ynqG4 z=1|Uh1U^BJ*mD?aMcObSY!WS zOZYPRCmLVfyU*9RRu(a*3GmvT&2rNqvVcxsH7*R#l?Rg-VOIy zCQn?@06{#GJ*M`ftIP6WalCtlkC?NIO9eS-`{Tu9dzv4pu)g=P>)O-_dgnHsL`#ap zZuj=>E_Pq=qin+;gzFiW?M)e3(4q8*OF_HR(f?RuK7+qmbAJP=j=-w~p3TFHA%k2i z3Zm?S2pyYZca|0xjdXNMX1vf^fz;O8@+V=w-4>SUoq)*@N)WcZl{QJlnE&e8S7~7a zv!ehgislFu2~3n^^cU-<{IV5 zxEbpEw4Gc`9px+#>BRM>)hsDhWljwpfuhj-9f1l&B<-gb=hrXwu2yw?vwGlZ&3FZ4 z5=u_q73-scP{#w=Xj(%rGd`6hTP_(Dc@^``yOAczdqngk&-Mn4N#w^Sw+uD0W2R=Q z&>6Px``&RtC$%Jive-f?*qcJx0DCkHA;9--6LLN#UlCbMX?N0Y01>Z}q{dpWboE9> z$XZ<0ownagjkDevSBR^t#yUFjGhQbZ*e>vvZva^AVaK38jV3w#DRXk0j}!S*pM=H~ z!U7?PnwC(0(}53nWr84 zx^+4wtjtUYYu`J0%fO)G$|)EbNq!7G197c4wJ2wxlNT*62S6zb*#8BYSQAkf8mwTV z$GvA98u^(+mRiRg+^XjHUynkkm;3QAXTj8DWA`pBK_*SRFyEIs^`?)tkG_Akm?Z-%S< zd;5B=1PWGH`8S!lp8+TvnTk}~!zj;DnfK>V;8#^_)puX8*qU6wt%%mnxpOF@Mw%}b zKY=f4fXkJJyL5NgQ_qRoVzyg@5cOrE^Wu-q&CKxQDR3Us*y6^ixq9lXaQ?Ncf7N_7 zX4FZzUy~qmb(^rGE;(s@J)7Cgcb9Q~a&yqQ%8xSdeJ~2gz-xYpx*hE7H-J!j+p~85 zG!Lbm-{xJeNzMk5IDd(=X8y;!LW?CDd!(vDRk%Mnm;AL}eY|b`gO=?VC(_T$(2@S3 z$&&H(PN#U_N(FgWo(3)zpG@1P`Hc-;`#bYWJFf~=lEq^BD<^O^nq0x2X45q_H(WnR z&A9c;p8{{ytDDQM9qd#LfBNQ*jJ;t$(Y9HbPIPhBR5)Gw#WpM>e6SoynY0f#9h&Ar%0;a2fx2u^vKiBY&$@HHPzeH#D_ERdV+4Nof4qIe7 zR&T~Ud}L!{A}46GA7gsO*t*ek>3P#;MEC|B+2G|NF_5mo`PL7b?K)w0rF9#7X4)D( zI#w{A&fiyoj>2VH5ZI;PB)B)aypf<0YAQ1?NiU!IF*%uq2tIAfEq_<8$>%jdBLWIr z=ZCW2`estB%WcW9h~pu$0ncVZmN2E-SWayAa(LNJzv-lJJI@_<98=L?lL~UF{$AaNww!d2M9o$!R|hVJ+#keq1!(vRjn?L5C|oc4U|t=Spz@&=Hgl7 z1+Het+9h@i%-sR&90xK>07BT=9GNg}dWm4TTi#HmF-#-5ENQY6gA-=hZz~^ysEE?s z+j(&N=}^j|desI$6(g0>?M#|-xGE!a3DM}W&n|Rr(tz_I8yywgeHInhQY9uj|3)C~ z2-KYx3gQu|G2PyGdg)2?W3!$>L!r}og_VW&_bRM8(7e+PP$@yux?p&eU|mQI!x|M* zvUBW~1;G<6o@^lE@d;Gho7?XCYL75xo*PVd?wfQjj$g7goV!Vb?21JyA zVwMWuaN>X4g-HRbC9Y07!KmUPSqk>ob?b57Jj&bpsT_Hf>X5t=%>RXm>A! z9Y;@K3_L8ecu1r9-Q5}O~3R|uDwkNdN|7F*@>MJbs~P{}M|M-wv6Ywv%2e>*pQtFHi~0H;G_=4$!GnW? zMZSvMJoUA6Z=LK5B*LhCwdPn@f3*Rw^8=8;%YDt9!m-9%+^mRWyrV@Mbqzyos0?%z zl9_V>@+{Q?1^4d)vc$Kf;y!AaX`!%71KvlMdtrIm(9#lXW@a{e{b9ySd%jKX=He-I zSGnr}h%6iH@Nloj-t*f=>`Jjn)Z+K|b5`t(vJZ)?!vy-WA8mP*uVwoRkp7a#zUI$E z!>C0A9HA(OV4g)GfI6$|ik^pTwySJmb+tbpk1s4PPLpO5vh@0~+1#b=T>`Mm=kqc& z!pKx1muww8x@mJg?m*(b!|&LqM(~*RChBYBqSMABIa_wO&RVfIJ9!NHEwwc;pZv~? zypTgoGIse{yU!jth^eW}FJIp3=Vz;AHhx!W_noP|pK$W#AaE-#T=fJ0WX$l-t8ASC zN2mGCuo~##CHY}%l#qmc*jtbdRrytzI~<){>z4>!#rQ3)+Px8wKSyG0{%l1U&D2?D zW%Owm@}u?lnaM~L4h_kkf5WubMsPYd=-M5WX`*lc*W=jAI#au7F%t*1h)MwB^tw$H z0)UuPco!}{0qV3JjUu$A?KF`2wfq1wnXgWM7`Nu$#PPHWw9LRdmm`a&M)P@&d_OEi z{+WX}lgDVPz4#Orb;u`7nNKMCLc+tv>};3#n=@+x+R_p$2q#2cQwLZ^mez`e?L)Fh zs1MXi#H{bBLI<9^8t;&!mB?gH9{k9Z(gg4eb|W!t5KC~VW1f4h%ZIApU(0TX2HdVX z8KdK5n13ps<)pSq-$Fo%P)!`YTigP%?T{5j#hQQHo?b#cItWDzCpoJGKB|`W3q)`n zo+0zO?L;uiLf1rp)VYoX%@o6GL_}H*Ib2{Pd)U>984r(nFI! zY`!NLuT$i~R)KSEhnvr=TH-$in_P7^)Vn(@&Q}Pc>#nZH#{HqIEAQUj+A~aqqGXls zf=h#hG=&?Jp{EcHUM1=GhCc~Ux%NMstc!dfAe624M$>m}!y9z1+!c?sCOldO9&0b>-K=(pbnbTY54KsuV?geGT!L?z*(MGx4d% zpl6wqX?-Ls%)s8O{Am_hC#gr*RAj`G5qQTX5~@V&du(e$PRFM^Z}hr(0ghG`aew>c z>3!iE;9)QJB>3&2x((Wx?5&oQ`@@gb``D)eG-I!nZfTOrF)?d0*+}j6BO}#U`vdVi z{Q^V5^#T1tz>(CGs)8o#%C#kjWV_m!d7_Z6s?fI^cEKg|)g+fn2gin{kUp7`NNLwm zS7S@dRW~;meU}`7=?s-(p6NAj;tEWT3yoBeQ1D~va#_DYgUErei2)6kzUHl z(9BFgheQK}pS)r(&Dm+|*DzjRUvG)vdIU`u&#}53fMmZts2J-XDVFoE0)|``^sJbI za;H3^L1is+1$@0dx2|MpaD3Qt>MCevIc(~fmoflf9&5Vhzqx$Kh@(xtyd&mvxoLh? zgSEJ2sPpPBG2X8j5oBl5FtqAAoZ`o~wCqQIpcjSYy#bZ>p_Q!)Dd`qjUiNg{fL7kX z(yD(6t@i~U=1vD0Bj`_O8ou;bms z5i{)VM@V z8g~Geh6u3DuibdKjC%kM^O~tW+x;mQaRuaRp1cgr4h?2OA?RIahncmNs=Zga9+xKZN)zO zX#ya80L1yVcH_>CJ@q*abb*xOh{jrEAulT=poCS=KxFBoo1Eej(;jFaeJ7oJ>#_hz zkmOH7U+I{{39NB9qkvFpb_q*kPZ?P%gj7z2(!bxKEk09F^zf$>{I+N>&&UPC=hI;- z{%L!>zDUpa7#-c+p9eMeH4FD}XFZ>4(o@$H%0k!KRPxiQvm0@@=@PH&?#btWB?|H; zjALO?2=z_g(YtbTNKM!<5OEmXEC_Cx}Y4%4AGO)WS&byY`c2JFWN=e(fxd&i73xR&8q~PFMR9 zgB?XrZ<3arjp11v&AbF>@4!De%D$)>_Fix^Cb0cS9%sd9QEtN1jYxJaybkP8-}aW7 z(z1|?(jEf%`Twc&=GiFq_jF1HNa<4->7l*9FGnFmJ`d?E^jgY<-a^5VoemX>nTj8& zuzx{vusEW$S`8WEkfa!7f$+5Z+LLaS$wSyHdLQmwX+RspEUH(Qtuzh@>FxeJSIrcz zd#m2TDOM%|Dzyfv(QTPRO4_~b!g)>?$6#Yr(@?f`Q?0p^K$x~^;y(Z>Xmwg9#u|Zk zpFleMo+7Nv#Gw%S%&9}>n?{Skg(tuDZRz)(^t_WJD??s{twypUhj#2rXnJaw_b_U| zRj&jq_PKXpfJvpFt~NW!r7dVDB}yVzot&XUmmFv#>CK^|R6U);TH zW=SX{?An(MExQi;C)G?^%H-b^Q1nZcP%gXESBjR~Rp7?L;dvM7f6kllYvz(n%P%!( zg^vo_gU7E{|0nz4>+D2K*q$lAsx-c5UWS$*4%F8lA#aRJrzgLz{jGIzX!l@i(ERcp z5X?R7@|&FTC*i&>p{LJqptp>B7|w9Ko(lG^;%%TJBR+n_o&5Pa;(6j-as2E29F{Qg zv<~OlbZs}MWqn|hEJL0ADE7=@Q=oQjtv*Q&D=w5PZn|rHp6OV^g)9*rb))2%f{#)K zvuzyCzFwY6Cxj@$FevHXznlv*fT!Z4z!ENLEo&gi6^%Z74EcL~4rItNOC0m*(Resq z1I!Vd%70%&B{5Ol8#UkX@$61wWarA%-u?`~NI&pAbzgH*i6>!+m5ZzN$adNyd^FzCMkETk&*>(^bfTzZM`t~XB5)+K zu7UR%2y)Z;QNi$ugY-}vA;9A@!f@vF!NvaVRd=+xq2a}@_TUw2>^KU3{r2wf&43HU z)qz9%U$PUGm%uCppJU&Omtx`jdrrk*|EE)za}3{z>{6ct zKZ)-gJ4svYR;M|IzA<)lF>oNfRR=IghJr^_0P8$w6!Pzv(tXWxi4DON57Wd$tfSo? z@{RB4y?&u>qUN9Zw&= zc^Z=*D*c(=TcG@N%P%I25oUEcYQT}#UelKcxkcmUUy$xmR?yQliKXh~ygu|a!fPg7 zAfRs#IL;Vff~i)8$loNV#iii^o@C%0a~W~QZ=XK|NOoJ2uuPL!=D|5?n3dIszShe* zGsn(EG|8j20I{=le!vYUVWGCBF?C8Gx(K=t=o8*1jMs16 zc=Y9GsY^)`dqnLHj4v)8YpS7+;JluIPEDXK{Lsp3{qx6eZcF`3d~V4~i9TY$#Kt$u zWN-I*G*RS%h+o@~EpuulAgV$M9fx{?f^SsJkP%kw4ChqAuPHh}pw6R6sl6iC<_&&M zrSD;nFeguIN-KIw3uft#GIH2eSO*?2aOE9Ccmr(X*#N4zp=7vV#cgct7rhqy$H6jk zssM$|w*7jM{w?@1bNI)bH|M|mgFVO}@0GnQMc$|-fU<8NFr`zW?=Mh4^FpKTsIg*RI;m=ebjbYQ_Kc`Oo7&{KPDV#ZkL;!jUaaI zMm1#y${~xDOk^*uJt32I zMKSxNN>_O;6?xOq!wea4KRWEsS7SeNZv0j--9aybD4wjpS_lu5R)0L3f5+Am?d}J?&S2a6hoF4P(f_>c- zJ?Yk0pCc}mGU2A|M=g&IK$xs8MiwvoBjr^}#pqDq20B^KNk7m+E>$n<{E0Ur;xg24 z1kl8ekIxv(rCN;_gGRFGZ8pa^FYK0PT?w6_OUU$V7;`(VRf=fB=z&!0{KxNMbx&s4 zdB2b&Ush=$b_NBU&)>GwJP|}WnB}_@<1Lnoq6U7W`H9F>9Id@d`3fdx57=)08uum#o7-|H@fxI7@ z*V}!R^`~1LC971b5<*)&LYt}Mdz}qJp0sOqhS3zJ2+(Z8!A8YdmgW>%OL{oU3yz}rJk)`2%4EN}@b+QfujAsW_dc%89mK!= z3gQjLzd@?6dLC5OWonAnR4(LniwEUbn-Wo|U%pA~XB;`u)7<+wp|}gj*z$9QFv+i< zINzD2hVi4vON=;MIru*_%OYr}fb((zEpQ<7%dgJV1g9vB#z%6%0S(a1akYpk1me|L zV|msr7Y}*&ffVKUGt7eMiDgTPkmW+2E)&!%-0V5;Wd@hn3J!~pTIj3DE;y;b`T9Qlffn_-WE7@+Gf zf!dFOLtO_z4Dyn39~6G(;})aB9^rHp(&isR<`$!@ARrt9gmZfw9{}MT1pQHpLQe0U zU`2vudjxRonYigQdjv4Xkv$HOlTPp3BY-g^_BdDp;p`p(j3Ked0fMPNK#uSvutzn3 zV2vtkEZ4wMv}s@urY{4|8ogZxfin=~c>-`A+#~1$0vOAa5fDxRLf#(7SwJ`r2$%K< zdmLbJ&wYTP00<3Wk`Nf96pV4;z#aiSbqI`63dT6V4d!IA#{tIp#smnTUfP?Qmas6K zd3lk3J^X2rXYDBQ26TWo3VGC1P?UFUntTS@54^!QM!~K_2;$x+X7K5R;L{?~y-eLP z;v?t}0;p3%CA7vGdyY3gv}2ES6_6Z@T>U>BJX5~Q<?X{;5?u+mLKdu(7yl<;_ZI1y$(U#duNZsfld0~<^S~X|A$3DM{e&# V6tN3Gl>*X2x7D<7VpMD*{vS{d0p$Py literal 0 HcmV?d00001 diff --git a/screenshot_545.png b/screenshot_545.png new file mode 100644 index 0000000000000000000000000000000000000000..bf2c635f5ff337bcb88c275dfb67619337b3dc5b GIT binary patch literal 8688 zcma)>cUV*1wyy&c4Io`aKty_#A{~?fp_dQ=1*HTLP1C$NiTqm7SJXbYPB@IZRK7R@%om0ANKlTCuXge-G zWZiBUTL6ITFCBGN6MrjgcK^$pjj7%Hz!l&Mnf?5%@S>c$7SzM<;aGMzu;L4$RbU1>D}r!YdiGJ{ z`p7xf4W-A}cZGD*`Z`Hyu^e3ngq!-oK1=o7bosn86Wvebi#m9*3*7sgHl=+I8p&AB zGT0^jg2y_F!*>!Q3)mBigIQ{;G@{Q=!W5;|Xt4F2*xb%Jtp#0+^I$%taU1wEt1{ zNT2gQUZaI-N>rNnyviyI!RM^!qcC&lf-?czx9AY)xA;XRb#&B*rGZ zPTweuwSHuz2r1`zY|oWCL2#$tB8?8p-?J)k)vdPh!L@i+ly%!j6@Wn zqAtv>4{1dk)d&HT)RPv2lWijdO7AGWeg#k^8MT7?DpAk@z+07vm(-Rpj@Tn3jW@nq zj2;J&lm2SWK6M5fyAt;2P&MM>VkQ6vVNwGlQ^$}R6(D^cIjLn<`M1tcHC2N<5(C2z zGN?ZEpWJLg+XM&!0F$~eDP(Hf8#H&|EyUXD;F%TfQ7&pw8`HN_i|-swOfSljR?!no zcTNv7Qqwci>Yg>HR}oKa*V=~I-e&JBv9N&KoJJI7+vdH>=;Zpl*oo7>0$81wnKEkT z2Co1np_(+Ok=JjaG?>;#lrwOCiwqk*zz7Eif$i_fOuj(t=@fzvy{%GM-JER`p&&|_ z@m}2^xQ(9%+{SwXy#@VxI8=yBudpd~i0}ILU_w|=z=gM>Ulw5P#43gf1%B1BW@n%Q zZ5%LcGyo$GUqj~*)2DxNUyE6l*5b+}!opc(PqOd4Hn zo=99am+AO?su@LgtFnIvVS+aKyqA|88Uf#4=AJj z%eX~^_*?hi$<~A&w=90|b&w-Zc_7z@u(8sB6)D{0*7>Q7YSy!5W3}y+o-WPRUmYzHIq}u55Dna?f-bU^OW?;A}(H8h&~Ty_;Fwo@DqH|rsTH3bRn0=Z;o6cf$O0M zc|ZM{?3z)s&omwtzz`Q@1Ct11o+yGRJ-B!B@AHpFZW>SLz zaGQ`CGl}zOr z9O^;p<~UMT0@z(;G7-wk1AbNVXK*S7r7-C(T0auDm1ui$i86G; zTO`dEC-iZIu3_%k9H{>ln+46~KhwXsf{r6sH4vA8atht|pV2HVFT@krxJQ2=Nsnj! zW{J9lh#dV}OrlIFf}fVM3Jrx$`I`OZmAe&$g&m5bGI=J{_I z<$tkaau#hxDKGRDQ5qRZTk&Wl^S2Rjmoxu0t)ltPy>mkkPa&5ylr)aHdww)HUv@|L zz1Nm#HgvyPo^o66WLa{Q*5aq_6iB_4xL0|sVN5P$yO8KgF*0ZOb znz3|tZ9kAgPpX1beu5^`r%{Gk*_rsS;}a9AuG%UFR*%Pf-w9yS5-f42)Twfhh;iqD zkZjuq^swzI!F@aE$@Hsn-P(>%+vJN^nDQ=Dh^gzs-j$D008_Ysg5&6sDFcm4&a`%M91%%fSsGZ{4l9|vG<&^^}# zwS}Gf7|s#rdWQGc+)kUdVN!b+lh~-fx+76WF=h@sAN%&)=4t+Dcnl1(qjc#cOqcsb zb_vtd%V@v+C!(zS)&T_OnDRLL{ru{?XTXOuCPA0gi#m^}glUw%?TODw=T+f=GU8x> zb-f_{=mGhnaKG^ro-t&DIvmKkV%o}^8h`sItZ-d3>0OvEq-9!l6Enu~ehkt+9*R44 z$fPc_M?hNH@IO7Yy>)*FOVNbXY3KkA(GenE^V0wc;L7 z#wpZ8x0_J20-Micd$fA@Zp~1^wPq=$En%LoP;ZCZMJ1i$)|vf<)4up8INq(-=&*iCY2nL& zkUV{1Ow{$fuzobr`KxB+(I)`_;3Lcb6-HqWd32u62R90Fx9Ws5m6ZY3ZvT^pq9xDJ z&O>Py^;csLF98aLu8p3MFG^$4b+t82%bZUl*dANAc!#>9GCn8Y56zG)PPgl|{#ICZ zX770Sa4WaBH@Vl|%Lr?C=u$MXd1N?p`MIp%C4&$0{`r?PmND6wHvSsj@BUm{?T`(_fTn82W#gRr>~|&n&u}{uW^m#TyG9tvr3U{hRe^ZnJylCTmw`%h ziqZy`XDqE}q4_(5>rU%4ZaPyzl3~l`k2(Z?9IukEFcG}i4Tjxj)b%>2&R}dsrMx8r zy9Xpa@S`Jg-}>)&6Wwl`reA)niKDjXJ+8(>v03e0Ga0N(Ob-K)>!VIe2Q)`;T4PI8 zK=LuscMQcwl61ZT-F~~kBWrFGPeOLgTC;RMPgh4SDA()*x-YsSU4MR5?p`BuaL?ni z7$ysYzU#3fZ+99d{7WszQ0{Dm;k71ZdODq%DzsqL?cv-}O+c_@&Hlly>_D&6D(O3O zXF}Y|Of57te6()1_(O|cXG+B?7K_;4^J3snY#7i0kNFs!1U;TFm4CK8Vso_xFAF}L z8y2%IKZ_nHB9v~5A5SS{2XKD9{&uj5zHD#j79*vegrKvLv{443$Tm=@6V?5A6W#g9)T6E66 zaw?uJdnMgo&3#ChfU(pt19G!jzrc?j#P3b^J1X~)ttxH#Blnvd>zb)sMvf@W3DD)V z_{K)gvfS8MlBQ-cUDz&|CHV7+T_5bqHYndaIED*^Jvw}IXyTan8Wz?NS~n? zuVuHnkp(*%kN8qjqEVb(u;#@Zl$k(0$$6VU3Z9$vN@Y0#rM$PaL{8%p&R|a_0 z6lz}Epx_%t^6BvC30-Y)%mlU2N6(-D?7PiP@HD3xSB!dBvDfb`UH?X2$M>Q|DBBEK zwE|EBEb;E%@wm7~74h(Bdb2J38nvTy=oyshtvZt4*rM(zNPMt_@M)bGWO zgo4Chp__0WVH@vvS-COBG^a-~e|35MO?IWpRn=fDA^QDp_ADTB9K}viE2VFx3nvZ{ zYN>?pYxh=-e^Nof@kUDr#A~D{r=pN~9_j%Zbl>4ZEbG~<%A-i99EXjxpDk}^P0Fes zZfad+G@)EBP@GiOMkT8w#_uD+cgYRZQR9+PSxTRem8c`6dKe%zrQ;yk(W6OH_Vk-_1s{Ct=` zv2wogBiLL}dE58%PltN1*NDX%ZQ)DQj-;6NdbC^j*(9?nUl?`Vo3}C#ika1gt_O3% zZ_h$3y?JHH*ps{-_{Q&y>WshXES*}BP~9B;%>1l*zT8cuWD{SVj-i(nw45hj!&67- zMLj!KdZ7xl%Rn^Y55)A`W)!ScPug%>=m|WY=m4AHtN@Zj5 zHGR6G9QhhjTAF9If4-Ps`xw4eQ0Puv4@#KA+#B&5b*qC5aqKLfQIB?Sr0L`nC(Ma+ zb|+dom*fjU%+8GKSMi`{A105^$N-TN7s==UlX2oG5WkkRn z!2ew?`idmdMwnUyPrpy*-rRPS;`t>-qwx0B?U4KzRyH@LXCQL8(BZ^5OWv4L(_WbB zduJ#1)1i|+a@d&KcgtQ_)v3CgUtw8hga*m{TpCf}5cR}$Ak&cn0H}-MzDRV--rtP- zei#dq;bdg>6SG#%Yq9z`o6SCv+nx4aYRPNfF?1n}B~x$WzH&^tNXU^K)=i^D#6R2j z2Bvi&>=zX09AwtY{)F`+&z`g*xxBM5)@kIA7@KYn|F9B);hpzG`^1d^RY?9abqTbn zbC5}#nxz|>o*ZTP$nEa{wN8qZ6;ao|C7+FAPLha}>Hx|#w9C^_>MFAj2Ofk8Z`u(3)RV_90RX;# zk<>|jyFAv9dz7S1q^eCxnLi|kp0b=h#?hN%Ci?CthztbN7{=DODfI|enphSH9COn8 z{fi`IWeqFQU$5UNqI-Rl3?V*J#RXT#oF2Tix4;ki%#889ks<{l}{ak&O^3=H-7gq_-@^`YnDa%4GijdCk}7196dCwG`| z-oYs+-#QlNZ3clIc7%QeGX;z(iwl1>Z3Tq5@WWx%*KbVZJGl^Y`+q36-j9ILoA6l$ zzpYlKw#5lZYDx&@S3AV5HKJsh81uh_Gab~SsK>L;`_fdVEh+6vzA?q@^)fbk%aW=O zyPqA#(kNX5w987I7ZlQX2wv>DkU1M8RgDYgVGaMEVmc`u_)lm;1-#%OIfJG%hx$5Z zF80-;hR+w)&ShVG=%)6#n;A2;yBOk9|5%GyIlZev-msO4E36(DEGi9`tqz|%I-_5 zbB~q`%>6rZIKW%kPX6;;5AJxiF5@>}_krtz)2bI8D0~WL?_Jm0WAkNshk>{fhkTNc zRYGxIR2OVTpnKIpFdtt#r5T~fl_X$>r}*wH>T+bfMKg!4yUBQEC-PJ9*7P8}qGgz2 zYEjZ6w2}Gw);dv}pxpOyX6{t&`}6(VEUUR;0gAjlA-@iJlF>QU$luwfB`D*H-5Osqx4@8cbQzvN z!4*mENTMJDYItrdozPE2-U`MW=A}C4SXjHcSK8A)YUNv^!g2gVE;X z?wlMZ1)aC}In3~QleLG$o z|9#pR9&OC0CUbB+|ND%=q-=z<#n9_aPE#25=yY+Kr70&%R-ingW$~C=*B*XIe;=IM z>ZOJ=_++_tNPvp2?geiBz847g-LO6K*+?;-uq8rZQ7}2f*mV4x9Z+6U)mfjH+Dbh#-^WIh+2rve+Hj{AV<-x1%4od;I)sAcC=bX2af zw+Sjfgel*W^oQtftfUN;SC)UrWo*;T+)BH-k`x@aYPc5M6CZj0QoW54ftRa8a$H%F z|Ex~r*ZGGL2#I`_mxTLxgTDUL0+6@C#J(2egYwVH3#;Aq0iZlWA=hT&ov0T?$uC$q z5l{Jr6c-1`7k6f)>0V$akXUmDkR$D0q-SJ?=r49pS#?ZY`0(=UeaUWVxl-YYn`z2D zW+g7B4JmJ=9nKTP*49rVvQ!cfp9*nq`gs3&K>>c;XIHra$)PqKqf@3MN$d#c7L0m3xY`?L*^wZ5N#uVA3>@OzEvyapIW^vuJ146SC7b`i&>v~b)EOG za|C~v7WMn&Yni{NQ6gM>pPerfnVq1U7SW=Rw?6k19` z($=OoWR^CmOERwJ4$kZC6I-2u4VSNQVR)5Wq@}A#i_8&rLzjt%rrdk>4UXP@B?mtANWzE=&ORp=w}Ca{Ywt z>0*GWj;f49WGWp1(5!Y*q!Y0&_+-Eq9!C>9Vf3Ej9!Z9*HXt-tv20_V= zOrEl|F{)$iKCTtqVz<90&ptK4vZamt$tf=&XmB_ zn%m#GB@Vvqtkh?SVwQ4zv($WwbI+i80EZp_J}0XnBb5~z+Z(#zFIu?iM_n`&m(`-q zJKzLi!mY_R1B?EhQUh329qK;A1~LZ>cyBwJ=vIv8R?B{Uys#s1oFN#SpRhypG(4|3 z6F$yF$e!5@nfWGHabI!%)+o?Q?Dgsa5AD815a?2mwRW@b-&(}w#@$Z=e?AQ6TB#05 zBxax}SJruWF$FmBX(am{!dMObWvVFrogDd5?oPz{F?b=Wamvlv+cmtKy0UAPF2vF< z1brkf@iPSEvzYi6Nn~Oo_e2j@J}#PJpz@p+XoMzYm3wc$x+J%NjqVNd=(>3?CUMc7 zZxJJy&o8^X^N<`Ds8uXLr^ID4`dIcW}A+kdf zv5Am@)_Jbg+_S2LK_LGIHapbu(*6JY!ghI=O(CPzzC=}{D5_cOf_`sxTT$nng< zTjR7)%4N?V64|HlZLNQj6dG#EAg&2|kj(jh{m!&>6qPpUjKasC=&*n_q}*VO3Kmd8 z!8@g7Jbzo9*H?3f%oU2N8Hkb)*Z3rx8p9ST`ZsD{(Sr_OZS3zk-SsQE>^VICl!f68 zqrsu2WcRR4K~{m#_QA!}zf92RuEXdRx!Ket6yj~2_Zrps--I_2GlTI4%dgRW^Sm2% zh8duTf6$Pv$iVy^3g#{5#mHc4u234RI9V7KZFVac9MEo`ZUS>6x$>xZLN)7CZitjV zHDFSn#BwJk1=aY}WC86fr1}`ipEKgDM759ab6e~GKs`|HB3bDfiGN#nlX}~ItJ3~t zGZHdEtbb~1#^L`C%>N2wgIk~1qmc9o-*u&rbMG-Fj7#K-Q(RDTS<(s@1HWcBA{{c+ zYUft8{vl0SWtL`|+Z#eD-cmc#km@C*j3tRIETghr{%NZ3BIL^-+)OGZ@r+KAFaEPI zxp!>(FHkMB#QwzkJVW`(UaC*^A5dRWevR@1q;pj6i3jb{UQC?_yPkKU^j@SLAa)l=Wy4YMpFM-C+m3CU6MKE6zKMS_Edc%J>6 zVA@IF1cMslp$(T6>go&tqmhJufBlBx6v=RWKZUMT2JeemZ{C$YQ&K_-riS8cS#M_l zBuU|__)UM9wukRM3s}tFxsgeoKCIh<^GzM`tnn=|%dZ?D5lJdS2z@@lMlt4X6s<=M zll^$p;H{WO*OfFiA&+MFq_>^8nXN2#J+gUIq|)LZOL;jMh-C|G^3%}L0-7<7Lx>kk5UCjmq5`7$;X$hf-x0ct^Q{tl~1s zX^~`V(AJfG+7zWgPZLc{PmGW%HsFitmk)in1#V|Qjf#GDJ4)ero+;_gx>sO*pTpFi z8pNGMoDyC%uiG4s9Hf++RinRdaBh@Cb3jAqd99w)x?xOC#{vQPw@$wn1(@^tm+RQy zJz&MwYC%?Ch47Ud8eqBR1F_FBxO_w+z&e}cPNV96Wa4eZih zke3iw zsT7acDtnbBD8F|CM+Sd3IoCS}=jhGzb-erg RKI!EH=x9LI%hasH{tuuPK|KHf literal 0 HcmV?d00001