From 406b5083c01bd83191984bf57a1afc28a351dc40 Mon Sep 17 00:00:00 2001 From: Christopher James Hayward Date: Wed, 28 Apr 2021 11:45:51 -0400 Subject: [PATCH] Cleanup dotfiles --- README.org | 205 +++++++++++++++++++++------------------- bin/.git-keep | 0 bin/cleanup.el | 17 ---- bin/options.el | 63 ------------ bin/packages.el | 31 ------ docs/images/modules.png | Bin 30085 -> 0 bytes docs/tasks.org.gpg | Bin 1003 -> 1008 bytes early-init.el | 67 +++++++++++++ init.el | 133 ++++++++++++++++++++++++-- 9 files changed, 300 insertions(+), 216 deletions(-) create mode 100644 bin/.git-keep delete mode 100644 bin/cleanup.el delete mode 100644 bin/options.el delete mode 100644 bin/packages.el delete mode 100644 docs/images/modules.png diff --git a/README.org b/README.org index 64f0bc1..5430b5f 100644 --- a/README.org +++ b/README.org @@ -19,35 +19,110 @@ Portable [[https://gnu.org/software/emacs][GNU/Emacs]][fn:1] dotfiles. Built for + 100% Immutable + 100% Reproducible -* Init +* Options + +All of the options available for configuration are defined here. They may be overriden in a host configuration, and are read by the definitions in the modules. All of the variables are prefixed with ~dotfiles/~ to avoid name collision with other functions and packages. -This project makes heavy use of modern features and libraries. Since [[https://orgmode.org/worg/org-contrib/babel/intro.html][Org-babel]][fn:2]'s used during the initialization, [[https://orgmode.org][Org-mode]][fn:3] must load prior to importing any custom modules. My solution includes the introduction of some early intitialization code written in [[https://gnu.org/software/emacs/manual/html_node/elisp/index.html][Emacs Lisp]][fn:4]. +** Modules definitions + +All of the available modules are defined in ~dotfiles/modules-p~. The variable is constant, meaning it cannot be modified. Each time a new module is added, it must be included in this list. #+begin_src emacs-lisp -(load-file "~/.emacs.d/bin/options.el") -(load-file "~/.emacs.d/bin/cleanup.el") -(load-file "~/.emacs.d/bin/packages.el") +(defconst dotfiles/modules-p + '(core + editor + shell + email + terminal + encryption + desktop + writing + presentations + website + capture + projects + development + interface + dashboard) + "All of the available modules.") #+end_src -** Load host definition +After the host configuration has loaded, the modules defined in ~dotfiles/modules~ are loaded sequentially. By default, the value of ~dotfiles/modules~ is equal to ~dotfiles/modules-p~. This means that all of the modules will load by default. Remove symbols from this list in a host configuration, or override it entirely to modify this behaviour. -Begin the process by loading any host specific option overrides. The host configuration tangles, and loads (if it exist) using the systems name. If a host definition doesn't exist the default values remain. +#+begin_src emacs-lisp +(defvar dotfiles/modules dotfiles/modules-p + "All of the enable modules, default value equal to `dotfiles/modules-p'.") +#+end_src + +** Environment variables + +Some of the behaviour in Emacs depends on the values of mutable environment variables. To reduce confusion in my own configuration, the values are read when Emacs starts, and then written to once the configuration has loaded. This allows the values to be overriden in a host configuration, without modifying the environment variable prior to starting. #+begin_src emacs-lisp -(let ((host-file (concat dotfiles/home "/hosts/" system-name ".org"))) - (when (file-exists-p host-file) - (org-babel-load-file host-file))) +(defvar dotfiles/browser (getenv "BROWSER") + "Default system web browser.") + +(defvar dotfiles/language (getenv "LANG") + "Default system dictionary language.") #+end_src -** Load enabled modules +** Look and feel -All of the modules in ~dotfiles/modules~ load after the host overrides. By default, all of the packages defined in ~dotfiles/modules-p~ load. Override this behaviour in a host configuration file. +Define the options for the unified system font. The default is =Fira Code= due to its readability and support for ligatures. All font faces will be set with this value. Any variations to the font sizes are based on the value defined here as well, reducing the number of places to make modifications to when changing fonts. #+begin_src emacs-lisp -(dolist (m dotfiles/modules) - (let ((mod-file (concat dotfiles/home "/modules/" (symbol-name m) ".org"))) - (when (file-exists-p mod-file) - (org-babel-load-file mod-file)))) +(defvar dotfiles/font "Fira Code" + "Unified system font family.") + +(defvar dotfiles/font-size 96 + "Unified system font size.") +#+end_src + +Certain actions like code completions, or binding suggestions, can be configured to wait for a specific delay before offering their respective choices. I prefer to keep this value low, so that suggestions are shown immediately. This can have an affect on the performance of Emacs on older hardware. Adjust accordingly. + +#+begin_src emacs-lisp +(defvar dotfiles/idle 0.0 + "Delay time before offering suggestions and completions.") +#+end_src + +Prefix all of the custom keybinding actions with =SPC=, a tehcnique that comes from Doom / Spacemacs. In some situations, namely when using the [[file:modules/desktop.org][Desktop]] module, the leader key may not always be available. The global prefix should be used in these circumstances. + +#+begin_src emacs-lisp +(defvar dotfiles/leader-key "SPC" + "The all-powerful leader key.") + +(defvar dotfiles/leader-key-global + (concat "C-" dotfiles/leader-key) + "Global prefix for the all-powerful leader key.") +#+end_src + +** Productivity + +The location of source code projects for indexing in the [[file:modules/projects.org][Projects]] module are defined here. These projects will integrate their TODOs with the local Agenda. Override this setting in a host configuration, with the =DOTFILES_PROJECTS= environment variable, or use the default value of =~/.local/source/= in compliance with the XDG Base Directory specification. + +#+begin_src emacs-lisp +(defvar dotfiles/projects + (or (getenv "DOTFILES_PROJECTS") + (expand-file-name "~/.local/source")) + "Location of source code projects.") +#+end_src + +** Security + +The local password store should be cloned prior to initialization. Override this setting in a host configuration, with the =DOTFILES_PASSWORDS= environment variable, or use the default value of =~/.password-store=, which is what GNU pass will assume. + +#+begin_src emacs-lisp +(defvar dotfiles/passwords + (or (getenv "DOTFILES_PASSWORDS") + (expand-file-name "~/.password-store")) + "Location of the local password store.") +#+end_src + +Since I keep all of my writing in this repository, I encrypt *most* of my Org files with GPG. Define the key to encrypt them for / to. Override this in a host configuration file. + +#+begin_src emacs-lisp +(defvar dotfiles/public-key "37AB1CB72B741E478CA026D43025DCBD46F81C0F" + "GPG kley to encrpy org files for/to.") #+end_src * Hosts @@ -60,56 +135,17 @@ Each host machines configuration loaded immediately after declaring the options, + [[file:hosts/raspberry.org][Raspberry]] + [[file:hosts/virtualbox.org][VirtualBox]] -* Modules - -Breaking down the project into logical units or chapters to keep the code more maintainable and organized. This is also a fundamental requirement to achieve the goal of modularity. Below are details of the modules, and their respective dependencies. +Begin the process by loading any host specific option overrides. The host configuration tangles, and loads (if it exist) using the systems name. If a host definition doesn't exist the default values remain. -#+begin_src plantuml :file docs/images/modules.png :exports none -left to right direction -allowmixing - -package Core -package Editor -package Shell -package Email -package Terminal -package Encryption -package Desktop -package Writing -package Presentations -package Website -package Capture -package Projects -package Development -package Interface -package Dashboard - -Editor --> Core - -Shell --> Editor -Email --> Editor -Projects --> Editor -Terminal --> Editor -Interface --> Editor -Encryption --> Editor - -Desktop --> Shell - -Writing --> Encryption - -Capture --> Writing -Website --> Writing -Presentations --> Writing - -Development --> Projects - -Dashboard --> Interface +#+begin_src emacs-lisp +(let ((host-file (concat dotfiles/home "/hosts/" system-name ".org"))) + (when (file-exists-p host-file) + (org-babel-load-file host-file))) #+end_src -#+ATTR_ORG: :width 420px -#+ATTR_HTML: :width 420px -#+ATTR_LATEX: :width 420px -[[./docs/images/modules.png]] +* Modules + +Breaking down the project into logical units or chapters to keep the code more maintainable and organized. This is also a fundamental requirement to achieve the goal of modularity. Below are details of the modules, and their respective dependencies. + [[file:modules/capture.org][Capture]] + [[file:modules/core.org][Core]] @@ -127,42 +163,15 @@ Dashboard --> Interface + [[file:modules/website.org][Website]] + [[file:modules/writing.org][Writing]] -* Options -Here's a complete list of all of the options configurable for each host, and their default values. - -+ All variables prefixed with ~dotfiles/~ -+ Initialized prior to loading of packages or hosts - -** Constants - -| Symbol | Default | Description | -|----------------------+------------------+---------------------------------------------| -| ~dotfiles/home~ | =~/.emacs.d= | Origininal value of ~user-emacs-directory~. | -| ~dotfiles/cache~ | =~/.cache/emacs= | Redirection target of ~user-emacs-dictory~. | -| ~dotfiles/modules-p~ | [[file:modules/][Modules]] | All of the available system modules. | - -** Variables - -| Symbol | Default | Description | -|------------------------------+-------------------------+-----------------------------------| -| ~dotfiles/browser~ | =$BROWSER= | Default system web browser. | -| ~dotfiles/language~ | =$LANG= | Default system language. | -|------------------------------+-------------------------+-----------------------------------| -| ~dotfiles/modules~ | ~dotfiles/modules-p~ | All of the enabled modules. | -|------------------------------+-------------------------+-----------------------------------| -| ~dotfiles/font~ | Fira Code | Unified system font family. | -| ~dotfiles/font-size~ | 96 | Unified system font size. | -|------------------------------+-------------------------+-----------------------------------| -| ~dotfiles/idle~ | 0.0 | Completion delay time. | -|------------------------------+-------------------------+-----------------------------------| -| ~dotfiles/leader-key~ | SPC | All powerful leader key. | -| ~dotfiles/leader-key-global~ | C-(dotfiles/leader-key) | Global prefix for the leader key. | -|------------------------------+-------------------------+-----------------------------------| -| ~dotfiles/projects~ | =~/.local/source= | Location of source code projects. | -| ~dotfiles/passwords~ | =~/.password-store= | Location of local password store. | -|------------------------------+-------------------------+-----------------------------------| -| ~dotfiles/public-key~ | =5EAG356GFAE...= | GPG key to encrypt org files for. | +All of the modules in ~dotfiles/modules~ load after the host overrides. By default, all of the packages defined in ~dotfiles/modules-p~ load. Override this behaviour in a host configuration file. + +#+begin_src emacs-lisp +(dolist (m dotfiles/modules) + (let ((mod-file (concat dotfiles/home "/modules/" (symbol-name m) ".org"))) + (when (file-exists-p mod-file) + (org-babel-load-file mod-file)))) +#+end_src * Footnotes diff --git a/bin/.git-keep b/bin/.git-keep new file mode 100644 index 0000000..e69de29 diff --git a/bin/cleanup.el b/bin/cleanup.el deleted file mode 100644 index 0d5ee2e..0000000 --- a/bin/cleanup.el +++ /dev/null @@ -1,17 +0,0 @@ -;; Emacs creates a lot of files relative to `user-emacs-directory'. -;; These files are not part of this immutable configuration and do not belong in the emacs directory. - -;; How can we solve this issue? - -;; Shortly after initialization, before most packages load, we change the value to `dotfiles/cache'. -;; I elaborate more on the technique in my post https://chrishayward.xyz/immutable-emacs/. - -(setq user-emacs-directory dotfiles/cache) - -;; Because this project uses version-control, we can disable more unwanted features: - -;; + Lock files -;; + Backup files - -(setq create-lockfiles nil - make-backup-files nil) diff --git a/bin/options.el b/bin/options.el deleted file mode 100644 index 5fa01b0..0000000 --- a/bin/options.el +++ /dev/null @@ -1,63 +0,0 @@ -;; All of the options available in the framework. -;; Please see README.org for more information. - -(defvar dotfiles/home user-emacs-directory - "Original value of `user-emacs-directory'.") - -(defvar dotfiles/cache (expand-file-name "~/.cache/emacs") - "Redirection target of `user-emacs-directory'.") - -(defvar dotfiles/browser (getenv "BROWSER") - "Default system web browser.") - -(defvar dotfiles/language (getenv "LANG") - "Default system dictionary language.") - -(defconst dotfiles/modules-p - '(core - editor - shell - email - terminal - encryption - desktop - writing - presentations - website - capture - projects - development - interface - dashboard) - "All of the available modules.") - -(defvar dotfiles/modules dotfiles/modules-p - "All of the enabled modules.") - -(defvar dotfiles/font "Fira Code" - "Unified system font family.") - -(defvar dotfiles/font-size 96 - "Unified system font size.") - -(defvar dotfiles/idle 0.0 - "Delay time before offering suggestions and completions.") - -(defvar dotfiles/leader-key "SPC" - "All powerful leader key.") - -(defvar dotfiles/leader-key-global - (concat "C-" dotfiles/leader-key) - "Global prefix for the leader key.") - -(defvar dotfiles/projects - (expand-file-name "~/.local/source/") - "Location of source code projects.") - -(defvar dotfiles/passwords - (expand-file-name "~/.password-store/") - "Location of local password store.") - -(defvar dotfiles/public-key - "37AB1CB72B741E478CA026D43025DCBD46F81C0F" - "GPG key to encrypt org files for.") diff --git a/bin/packages.el b/bin/packages.el deleted file mode 100644 index fb8d587..0000000 --- a/bin/packages.el +++ /dev/null @@ -1,31 +0,0 @@ -;; Download and instll packages using https://github.com/raxod502/straight.el -;; It's a functional package manager that integrates with https://github.com/jwiegley/use-package - -;; + Use the development branch -;; + Integrate with use-package - -;; Apply the configurations prior to bootstrapping the package manager. - -(setq straight-repository-branch "develop" - straight-use-package-by-default t) - -;; Bootstrap the package manager. -;; Download, Install, or Configuring depending on the state of the configuration. -;; All packages build from source, pinned to specific git commit hashes. - -(defvar bootstrap-version) -(let ((bootstrap-file - (expand-file-name "straight/repos/straight.el/bootstrap.el" user-emacs-directory)) - (bootstrap-version 5)) - (unless (file-exists-p bootstrap-file) - (with-current-buffer - (url-retrieve-synchronously - "https://raw.githubusercontent.com/raxod502/straight.el/develop/install.el" - 'silent 'inhibit-cookies) - (goto-char (point-max)) - (eval-print-last-sexp))) - (load bootstrap-file nil 'nomessage)) - -;; Integrate with use-package by installing it with straight. - -(straight-use-package 'use-package) diff --git a/docs/images/modules.png b/docs/images/modules.png deleted file mode 100644 index fa88adceef71da02a59766ff732b8b2e29875de5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30085 zcmcG$bzGHQ(>A z*o&y!8`yksu{1Kahlm+j8`-|MH!>vDcOf*jxBtLNNB6<HcP*xKsY_kCybRz)v?b^|iR4nm)#io>q^Lmr}bD%yk(q zZ+O|sU838FX^ULDh1>D zRjL-4ZsQhJGr>|;V*1h7$a72)|AQ3NaP*dBQC=;HCNi10P@Z;3Yk;wGm$ABM5UE|D*2)vg7#p!7Iym81JU0 zn;1<7a9zW^4?n)$+1*VbmVof1J`?`Uv92s5`a=wN7MEjclZTXzjg9S9tT?G{U1MhE=LIo6)2hMxnM_1CO%HsNw!mhZca{8+5C{%T zCLX!*K9@@C`TCI8ESp1Vr=0}INQm>99EFe5R$dfk^vW-7)kWR}sT8PQUR{Zbh-77E z{(g}DbTi7~&71B5wL!0)BBbhSR>ap+?Ci`3!z(G<3p1;a@82|t57avZ+s~F=zG~S( zMtghCK=N@srvsWsGS@k3f5bQCeW8UG~arG;9vDNI%?95E#p+89;9qOwyQ(jxe5go1u zwXW@Yhv#vQET=*uqSkwpB^DW?h_6{I_hxITG*p}zNY3{(=bNs%3|kXzs(C*AR&yw+ z#$wDAyFN2q^=WNw{rvfn7C$qbM|rU}mmA~yaE5a~?f9_)9?G9iZ@76~w<5C&W5?p+ zht>-(RFH=vLUzCE)9pMV&)E+R4HbU{krx84m@}C7?zH^aR6m{EY-@an$2gi>u*r2| z)zag(o}KG@>SQaU==-?2^g*i+LF9O9YKWg7`RItCxJF*HR<7r2TpV5q4qIh)@%8y) zi|KVnCT^i-jdcnyLD!nt$mp-`2O27qfql-|Y$PPU-@*)8SRKi)UosmUucs7JN{u+w zdYdv{8EPM|I~w-69XMQ_x0pOaa9dq_Q|=aTFrU?{xiN4VUOZl~5v3AoEM2m1X;?k3 zHSyBxuCDEw!~+O5%pXrUR0?z)@jXs*ZGVY|yrwT$HI!DR)B0ngda%eRsk-P|@UTLX zlCL}=yi_cY`+7u-4BZ>JbC9<;UoP#LUiP|_+5?}2NRNt zqV@7nn7hNn6aPu#%`qSE9mselvgV(8WS}aM1)i#?F77>vd>v{=^sC;{!|jJ}p3}Z? z89|-rt?Oz_CfU%f7!GUY8=A{Yi9SjtjBwF2=lmKMJFYX5MrPMj*8>8mGb$#EjObt? z6-~6Lm<{yCE|yH@H4}nUU)-HEX2m>?{^90@cV z?n8781{Mn&bH}wRGwyf#*X1_y-W_vq@6H8O?oL-kYTz+%k`$Qez8;#3!3!fGcXfkW zx4Z5r+;+{@(2p47Fm+j~bpDx#XlC#kJ(OiMg@^ol8{KuyGOwbE?#!{3)X(i51O z4lk=1t0c2->(y)yh@Oe}cMfBKm+Ia7Ie4iDJ`F9e!&%|^YBx!tPGi4}etJ%b%q`o( z2X2=megU7=qqWpzE;aX);Rb0N;KLVJ#Vrn0g_)$6T@fu^)xZ2t)A8fm7QLW?Uw*0< zB_wmK$f(X%nn~0vDm@(c^1FO$d2c4Y$zx;u~?eUrU~sFuISokSmurGtb`%3*;tDW z^e1yxB{KYC;kYCmeG{>p!e~S~Jv1?qt<7~!*MjSGp!4E7VjOuH1luupnFMBDS9@}e z>KYqaL_KRep*w8Sq@;Rb;h~zk=>{j2SX!G19YuoNmfCklh3bdVRaK`kG@3x~g!uSe zIAiX$hDU=gv1|4zo*H7dd3GCYIv!OLw^yg)q7iE<1PP$z$ft1B-E{?F_nokz{?RkIXyaq>xm9 z;J%?5Ioq+KR?mcA;c-@OEi~Z(wW8#`L}tU^R4WNRHb*dEMP?>+q9iA*a7vnk-oOJpWgxz;-nGc<>lp@xA5a_6;3D;k<1on?@DxlYo@_m6Z7?J zN!juJ{ot+9?L`?6oWH#aw(c~;lWo3et#&8}Y%=Tul{)WTN@iEO zU%{Va9Ds)J1b~LgE0wB#Jlwc@jq>hZGYGKQJS02*7&+C~?S2UY%M1eNgH?v|Qtany!Kvi~6Z!iX z1;qwM@8~p-P=S@O zB5r9}2+U-%b1N@nm=mEb=9nr?*4xvQeok#lo>W*M9VygIwBpG=XM1s3)O->Ofye^Q zKOl~l?4Eu{jd3l+5|J$Gh&Sy6+~t{{??Odt@`rNSWYTi)z|wPGDXh9w`W5^pE{HdY zJfW|5__8Qjlmuy{dM;V{C`>?lDk>^Ey0E`L3r!{stFWVmR?CfzTy~uCyM{p^n6N!5 zyhU3bdlTC`nwrohOVSX!%ddzR^X=P^8%8Cn?1UMa#DbBF^a0(B) zArL)k%B-X94x#jzfl1cONTYfj2sQdMVF-l2n0(Tv^9;)A*gE&K@7kUKqE34M19!^t zXheihnjDKrUve5Ctw-SH0C9H5WcxR9EcLPNP<{C$p$Z8G;R*tg&f#wPv$_Eda<=JN z`IZP<<;DFf=0_gy!8_TU;79Qwdf32<5O3^N-Cp*ivo@y1LbYhMArFY2H4Ip^a!cAB ztpxOi;nCNuzDJrzfEfG1*6tHk(IHB{wNTG_Dp$OieGO@Kzh5R^WdW}9y>c~k^gaZ_ z1PlRztUHO>Q`bfx-%gF%BS7LF!Zuj?_Tten;yQ^qGlo!unqI~F{|AYGDjKpp* zXBgOl9j0$@18am1KlV`C+Gr85VW0b#?AMi%Y%l zpUtH*cG`U#+0V(^qa1eYL*PMW^qv(146;Ej87Bz;-u;V6v-wH=VkI3yQ5lSSu-x3- zvJ@rwP(yRyQipEcuC=Gs0O94I!-RhkWCx!Pu*(th!hhkuigL@WFnj_Rx8>6!IGBiN z_aZK9`NXB97+P4YEH4vd1WSa(MMkE}zuh!3I()Y3)Na)|hx8SwFjW+$LafL)Xn}od za?G(+?SU^nG%HP)_V#4Vg@c5NV|%3}B{#{94{ePmDZLCu5+s52r!X_plX^T8&Nj_3 zMJo7MN+6$tuvlU82D`$1oKjbJF*i5&+c&fUZ6jktKQe!y^u9(p@I#irKfHY|-0x`c znb%7yEwHA#+R?$`^yuhSa68B;!D{i?YHavlb~%e~o?3@Kk*B)feqIbb@#xxG)maME zeRN`C{q~&8&(BJyVttm?>K&{3SgLMIF$G1y_$M}NE#b$LMVga8(k_!YP{Fb+1iGDz z`TNH|GnuRQ=stOIhP8)JlN5^ zyw%tL`I#sTzunCZDjRcsa>>s#)o(?chZ+1uc5h)%w7&V)F>-ySBG#cT#fz5c*F=$K z=V?LT=kh{s&o1}rbQxfeO+?_3-b7ovgo;zzv2+L#Yd?QR?T(k1k2-9Rm6hd{Tzapq znRJz&?cq%!r`HvdFfx&JeUeLJk3dk14;o3jA+eEbtfPtpC*}69)7)#%0W%MNx*#h{ zu^-W9{#hdX$J$Rq$Mp_7jC+Oxc35s2PWD?Pbq1ZGH?=*|+;yH@Q}4(AMu|3*;aXp&0#ge?5SmBJU2svyooSJ3_ehhB>g1@r;Jy`VRj z$1aZ1@d}rI(PhDZ{LsBA|7rmI9v$5zfyJ#ztwaX_86Pc3_*D=o6;-fjWRePa7|!nS z--k1YhU66q>l^5ZS%}39?rXzYzvr0sb#-+O4N;N|oSd9G$lxC*`=#7{n5z5u90E=d z$n*QH9D(9-pPGa}Q#8{lKtwUA7R8dU9Asi(i@|$IGD}P86)9busYAmS+lK>#rUmY9 z)6x=|7q!MP47mfI2`_`p$A=L}4?)>=PVcP9(m;zazAGvo|oE;u^_w*>fMFV}O z7%#h|%tNUGPpFqY6@(j9fsoel&sv1m)8!&$QCV485sbq}Hla#q7ZOv6sEoH^BX|(d zYk{&Up#(LKX@W$4 zsWu8SX4+p1zeTB2Cw#>Q#Sn2wET*Oa+3?ZRd)=h*ubTRZCtcWY)xqOzsX_$)eO{9= zW^Fy7nU|J|Ibt7zf)C5Q{+}O2G{7$_t(zp^iJ}{Q{7n`L5rw7x)^K@3+j@Rd#mU_u z0!G~|WuPlT-~aqa6M!f0=TcqrEYAP?`!D<4FC4K>#cg5lxGzNf+t30*+fkywZ6z>d zYCz}BV5}TG@kjDiXZ6m*wM##+Tl)W`pj9@_f_lxudf8HQrNw-thGf{2S38S;P~8dD z@1rjT8ynjl2OC?BQEyB{d3T7D=k3StVy8}gXR9Ho%%$jjt<@|mFM1$Il45s<-FvCd zz<`i@0|u*8pPij8bm}6++-#3_Tn-_m?CZ7!nGp@fa$DTzm#z690%5XQkGQ^4HlGLX zLw<9?l+^JG2Z!oaka&M(N+Uz8 zDNnm{S2w?sR$xz6%-hW2sFkVM6-+T0IQ>R#h4-Nb94$a66dmgTp3udv_TFMf3 zuPWBIkIWRMo4mym34ccYj5L93F5FjJ*?%^bC6&*&K7MNHZXnLNuFbd*kS+a{dtXC& z>%uJO9h6J?&CKgE_#LONdVN)T?&tmWKxt^kQZhM(lq5J5`1dQ3skrlLG8&11!@W-s zJ>r4;QGaA`1KJc1_Vn_8Pmi5QNYhHfxK7)9M#RFlc!Sl_yAaLxj_$qn_w)N_@PX%) z`*}U)`YOqXC3~*XI4f`{ws7^W0ka3r9^h$E>VC6ZmsGCV>J)X?{XiAGUtvj}bLacK zzg6vizkSMU=xTR=URBx4&hDNoXQemLs00z$9O3lm(19R77XVHXg!*R`PL08}7ap6b zj?WG4yh$EoV+Ju_Ts}2b4i|(S=02c~kKUdkTLd|etr}rOJ7)VL&X1zNX|xD}`*#hg zHO-)h>-ac_9`DyZ>IaX|7CZ@oZ^XI=1K(i0-;IlMer3NWk(Cxm5MT*d!~zIKMe+?W zkH)>Yf;@FDkfcNQHDllek=?yC$CybKS$V)QB`c1BzZT!yRx6#Fs^ugl z85IBfkH~?Pzvqx~vMRi?G~sIRh4>&>&CJqxoT)TA-(!2c#alr+NQYKKa81923${uD z+p2dI-52hxf$F(5_Hf!-yMba$z&0_Gye{a0Up>emmt zM|RLjXw(G*A3}m@wAISU1wJRc0ncS;6y~CX(jelYRoM@;B!K+<;SntD{r)7~f~6Rh zRXCSLS(19)M`Tr@JNMgWQxy^ltLz}$3eML8H{q8cudU@6jd+mdZI+5XdEKYT95vg+#(<>f2h-#Y?XY;w}8k&Y~Ixa%LbE~}LAlU95} zkJEH^X7|v8w06;7Gt@FdS9NOf4;Q|zWI(~ONZe;C8nyG{yPhYor}AzukoXTO_^k1B zpm-~Z!*288LjaSe=|U}z!^$&H=EC*?w&{1{+XH1Ez(O1*B_Ptr6p_Ib$CD}N+dZjh z`$l1~ySEoD`NqQ%(i%s9oma~NoeP#l`iSe{x_@BY_;diIGO)!w_Nqk?fNiO7ZYH9H zO5gwT2ZM!pX|mYf0&#=eskvaMZR5VWL>E*?b0>ti9}%y|C!!RNTE zo~HbL9M^1N$b@o?LA|2gu*_so@+e2G=-t}R4h}lHh)$c`G9@x3N5$#PU=-Kv4}BNG z$c8{IFBAl|Jd3lycbq0y?L!`-s^4|7mf2@)J$K;w*$mJF`^vRE4L66r8=iu$t$8T3 z%_bB2gk@=&(Ek7`#B|G9iWC9GN01NScq>vksm(iv_)acOjt%ZWw*Vjbs1lQEM0&_R zQ})THC6EIW)?TymJ7CxFlSV|^#uYm5-#l)ZoOJR4?PzA}IeDI=|21ZkmDT?FleK_g z>1?kHn@MXHj6AEVTviY}^OVHiknSp+Z%>6^YQn*Jy}%l}t(r_=wJ_e;=KQ_hFYgeW z;2ITzgBdXnfB+{ua|)A*ppH&@^^aYnR}m4K*QYx(xeA~B5v{Jz_9RtLFHLguT^(nB zcIP!@WUTl+M0oJkn>yjJeFm8lDRXwI-?44Q1jgAQlbw$DZ5q6o=n7Vl~xA==Q)XTo-v&~kXve*cg?VjP5FOXl+q(qc&@etM*5OGhj1+U*YKeNvR#RvA z^9^);zF}Vcpk`5agf(tnut$J#Jkm^?mM`)J0&)uASVGMmw1PbaFWAeO2DW0yXknLK45Qc4f@OQ-#;bi^6q@MKG9SElQ$ z#Owc>W%V@1$%;>9TndQJ<1l*dtad-_Gxzj-rSYcZ=XBH9!~9RuLzy)mZU|PNrfEE` z9pCgyNVvt1w+YLYOX|#3i2bt_VkV|^*{eYGAbed!uW;jP>j^QR|XI3cMybBheq30T#nl)eQ_1BfY8$^?q zdH$LQ>R2lnfm>TkV-4MGjzVrMSVtf3v1!l*ET!oOaWHPT{d!~B)aM!*w zfn_lQ^KgHEpS!l_q249ztfXCfHRWF&M;m8^s#x_V(2OT+R>IS5q*$7ngGOFX%U%DY zmO9&G8--o(I*<+CFsSo^LawFm3ijpi-}V}n9d z-}nOP7Z_@g9gp+G%}Z(PlRZ~`9UE6=Re;oQlEYQ3gC6l?G+Sn+6Bzt?4shPk*gHO* z`Af+Ph0gqHqkarL)Z}&l8Q+p)ITz2RJnVv>Tyj0p+8Ng`B(s!79a5~XH1{BzgT&9; zfH&bJUfDD*IUlY1_&(@f>lNT~D!$mvaEf2x_2B(;s_nI-sxBdM6hYz@(I0@glQrm{ z;1xVSk}V@uo|N!9cYkmG+5-&zut@0+1CS4j+~^x(|1&>hVkGYJU5`~B!%?K+{H`56 zoHx3Y%;mJ+55$(rzCUx&9hLEv5@sBSLUYXt%VCCLGwWOuXKtvWvse(QL685WalP1H z`lw+VP=+qTJ#E&?hoL|i87|qxd*}QCHf?^eHaLDO&gY?lkd9gokcNF1^ zAzMsbKi0%D?%2N@9vyvCX#jbwSMTD%%lGB5W(02NbcM=W=ugG|mfQ(1N}QG`QRas*LF>+?(?`h2+|Fo*q- zYw|gt711g2yvdW;xw{x?4FPam!DwtQ)a96Lc4}&Os_auNI7-wA#(e!KT{lYUT|B(T z??F!!zNUP$`CY+VYK$6!0&z~zpo;^94r?*NpZK=I>w_tSlOQ5uJg7)9eqw%CSKX~P zHp20X>&t#_)r*wPT;vw#`%Vq$T1U((D16M;sF-v;-Toibu@}(Sm=OAFGykFW6s_s1 zKTc$C2H$Dx$P1s34}e6!dL1@Y1Tj`=dceTU{7pInHZ7wLDhMa9sN7XKif_ z4w+##;5LL#3RzpzdU(U}KkxITLrm-E%VhpGaCh1@i;C!$(I%Fo*k;v<)wusCH)Ic@wC_*Q0l!er_74nFUUS37XerUbo1Y{k%elv>A=%tqXi1SF!t4H zaI^v=9%afmcFbWmvT%ARaknqfZxX$}>{BiWc;c{KB&Jhe1-*?NP}@P8WpfH>LrTig zq3NZ1VmcHyj;zP|7R3*%?@^O}`?Cmf;dRp^&hLwCIgnhQK2QH=Is<%^S&XM@gP>4# z3QN+fF_BU#DdcOl9uDD_ZM#<5|BP#*YGe8QPu2G2G71D$z~^n79@%D=RIIC;TX4Jn zU+n)05kd_Uiu=14n#4x?US|)6m10aZ6HQO#2!8_+a#*s*$KSy^jUs3BPb4n5qTpJ#GP(HfY^7$tAoVn#o6M z*&tYVx@5f7?`dJP&XcCc*% zydkd*+f~^x*O|J<=Ctb+(FTVn^d0IRPFwFK`Nr-z3G`wW6iB12*AYE~EzL@1vgo=K z11Eg0wM!7im;R2p1fzDU;yVh4*#D93nXvcv&%dH|JL!+f&gX0DdQbMQ7>E{k}YTf(XVq0**pmzrFo$& zu_=Q&VqGdfn*QeZR5*TAV?H5~s`Zpk3O1X4q=qzhg);ebM+88te5hO4v6}qZv3&gbd~LCU z4*RGyKiK$58e;xox37!3GnWiLJ)l$n$cz1F-^;3G>tU|0mzDXaj}Qsp!W^+9&g)A# zS`Bh%_ubmdQHu$%l?=B&?(+<{Z0PXMS>(;M@l0wOkO{IiQ&t32r>0qwnM{yw+a7rf zbq;93Rws_bb3v>h&7W;4x8Dn z#MyGA-Y)2>wH{JIEbTcKm)qbD2{OxWL&i1vj){9qB)*~_7=~k;`9A(l0HTpm`Q=9U z>Fm+NrJRkT;N7E3u)&qb{SBp-7BLsjX0p6I%E7)TZka>h4xVRlv8x!GKIdyWU8S&` zDkUN!5+IA}UOQ@Rq_p1bN59O3t-wx*=oIf`5c1EBpd}who^T@(I)?%Bz4+ zJz*Tb`Paq;EB5BBi|=C6+TC}AO}N2u1F=v-j!-}f$adj)(25*)Yd$!#p7Kg$Kl%6P zW2w6@dr*fp9{YM(uIoL2fRN>^=ZqiEg@gybdqK{!yhQeCJT~!^f-#OWES=*kkNSD} z4}-z)(W^iHMfcH>k@^W#aqC%wWd_8Q=Chxl3e8lSX|#AYsp*)Vbl`*nek5}MHcOxF zS92Z0NN7Pf6`x{vhp!0dYjnIa#{$zX+?I}qzE^!ubeBFdb4T)c|D!;C>m#b-rdgS72iN5*x6Ejbk~@KcIyYoa3?%cl zWySh0bN{U{h5qNlzmq_Z5;T)LPvY?``Hptaq359eiw{`VuPL7eN0}63)Zmer^CsQS z_B112Ih4DKI7JAkIP3<7F38r4t3&|Q?n_;YV4-R3i$?6QGw~)mK+E&9r4$UxbH4BJ zx_G}~x8dH?J7{`mMtOH*_Y}LudY)5B=La*L$Fnw_rUep%SExKJ4RN_Y6bQY_ba-~) z9@gu&&<+gnvU*&ZGWsj0Cm_rEZH2uAWdLPubac6^6G&z6@j7+E_ozIRJC zIjk1R-4?n+Sca$};|n(^=f}pzN`jkBjt|DhKU;gvl4Euy_AC$&)-KyekAH z5h#P&5fhy3)JpGa!r>vm3jm|$OXe|pdlrldiH0o=pE_MU@)o80fm>;{5n1lY=jj+U zf|(9AY>NqZwH#SICnu*UZJ3clwFkeeXz3UKP|$nUhJdWkLQvF0f5-sFCeRFOng-M) z!uUq+A#3sF+IH;b;q04fHweUfIH$|mEV{J~(3szCIR(XkgCF}OkI5Eql^2}2d#KVe zUO-&l4d|rOj_{+6CmfC{o)TGLKbKkp{H+8DVX8)P7g%ZhpJU&8DUvRFWgc}t*1>b# z4vs!2mYdjRlZJyhOQ#U8WT`wr1>Livlj}&yL{^$^TXS-0JADjTBz3!8V-)~9D zTxX`nyg+v^iX0gYO`KL2X{OGuU5ucq;4(+|bvC!?TNHs&C;Q=D52#1&%IYbneYJe3|dnA^Wwvm#8$$$fiy-8~MR@`_)T%PaI9m`*bto2Iq_R{eUvs#A&ZKi8O91iy@S(D6=;b}{bD|%%$fvQu0376#iv7LCR9*4eVK9`XkfLmH zXqz`MDK`M~5A)6UKkGpE9od|h8w^@-W*<7Zk3EEV$JS~Zng;)ijDI}>i)A0ZJ1!7< zV437z{+4^%n`d@y3ET*7)`JV8dj2RuBx%HrKeIH&Qt{jjlN*Ya^ zhgl(rDzPVy`~dR%!>la{_$~b-nzxIjdb#*sz(*xZjf&PG$@7LGAKHHsu zv4+kQM8r2D{tef}iY9-^{E?l?tE#kXKcpolCN?y1)5p zUJ(9(VTUF={aUy<9QwceYKpor;X+#5e*UDSQ*!;wCrE_x3BD_sZj$x06<5Mz>&`F# zdSt(d5HZ?0zznl;TOVBO_ouA5llG({oxn5r+ZW5_i`Ll^>??_QL$SOHKrQ>%G53L zK=F#{8-R&{N?f9**()* zOK>-k`E9(R;JV#J(R4%x0%37r6MS{Helax3cUCmImYNvP7lgA7MlSMFO zI^5*tgGrhGxIJJxjlb{+W=$k{mA6nJMg!4P63i~-&#{=whwU3tpp!=OfFDsAEtWS@ zt8sfjnRzJ(u)u#HWq{#e-IbRP1CPn&?8#}xKHgjphf7C3m>j14XYGGYM4NZBTp@Sz zaZ)5x@tb=!x0JiqEFCXq<|1kp)<@7d2CS+f`8XH8QRpTZryIETbIv*IjRoi?UB4%Z zw*pMLcsMY=4!}Wt;_mSF>18v0_Pq&n1rFak3UWEJu!H#Q69tB**1Kr!NJ(m!!Gp&W z6t4zHNxt*SXf$=UG>_hH!uX3%7N84cH>)`)ox@0^3E5@vzF zx&SW!wHO~4>nb%*3v=SJ)C+p9G`xn_umjs_72R@ibKM+xp8eSo%k6N(YPT-2Z_9Ax zykg&uPVwi=1IVKhdN;_tnUZpYU32C>uU;NM#Gpd{M;RBJWAa{c$(_R|taYLe1`_wiT6y@XkVn zb>c;`r+CG?SG$i?66rlAhHX&Kk{m#JF5MFM^Q+s5yg|M|b(^R)-|I?=3T;i{gA198 z;St|mpKS~RW3^8Pom;s-7#KBuu*l=ewegg)zXB+#Mj3sA4<{r)=?C&>S+F4GjpcQ- z#rWsWtpMhNH$PdDd_5--_Foo!OvHU`5fWn7=pLF&w{fD+mQl zpZ$uf+~{Z;(4@duEpdr}eh{t#b{jpOI+U)0<-1Wo7}d0m&2lO{Je)A98_-;Ibnu&; zTDzQ6V7prO@W&$g`pto^QRbrOxaR3?7>4mePC&xbYt#bJvjvSy5^}xrQrkG5^-L@cksA4&LdhrNyzGm; zNH&J*vJd0Id(CgMe8`r&g?gS$*H|0*owt~BeptjG^iVmP+qqpbX`X=2$Lv?>86t<@ z5=Mx31wV2{(4b$R8kY0VIpGt%p+kwUQDK=a`1;x=m*gKre6~bEF?_E2Tn{B%f^WV% zqoL-^2YA(}Vc^!UqY7CKReXT5L5FydX3F$R4s}B3o@1Y1`11UKue9^{cRrMh-QzG# zpu$}T@1#+E*Wpjj;+fi7>%cs(Rnj=$m9#JZ`@AkYayRc?gm~$g=xC7x!si{ljyI}B z28KcK%bqeQ-qc;y^aH&J$jz#;SYJds%y@D{p=K&l za2!NlP3c;-#Ogxhn~_M|_a3WxLatI$?nG~VnPMt>cilV^It zNb`DCK>RJ*;l#v5adEMZj?OB3#3$vomk)k1e!R+i5zBpr07O0MMj0g--S*#t`gL*I zc0_j@0`BBld~PzrLtHWVuuIzA29`US$Cnd39?Ya)w?@cr_`I&B&x#74XokIT-#~>L z3&lT(z&H6vw*lY=@9RcxdXnv_L-nfA2tSNKU3UimuS9eb-L|5lkC>)k)>!-HeQ!~I zV=%T7_J0Al^}*907MsWC8(K!eP@Qej((QL^$@ao*4T(wL2dmkM1;A1cVZ#L=CmK|T zO=+$IGAVrdBw*ge#mR}!{(+F5o}P#(?J=f)D(j2yp3<=;2UlRsW;$0(6h$PR;VKZ) z^wf=m@OKzMsx4>lMveP-wX_lD8nN^5I&rx#s3hJ+)|2{3ysoGje<@z^dX!wq9@mc& zd9ywEE{Z(t!v|B@^(17zUFuhL6>Ns&BLGoI-R*4D=rmb5Uto+J{Xl@qhk0%Fb=c>X z;fy1rW7kyy3bo;{|F8qbwfn^JUV#f|}>J7Z}lIt`(GYM6H40ecX@LwC(Wu{#qzpR6)kOVNS?X!j5hwDE+dZkwKT~1Zv9b*%zLeX~u=0a1(HKgFKmMM@HvcIneQ|_)ziQsj`RT$h;1>5)gCRP&jhb&EY@Au0lS&fqAZ#Y<31BVYiD1lK9UwIR zJFKW|co_+JWLeYDdF@VrFDH-LrSirHP!nB8mygumLF%SHUG7MQ;BH>mQBDdHNtBwo zd1{rz{8Lo_@EE7XJ#kkFqmCD3Dz7z~KKw}0X!3&QqVM<;GEKjEvuC8*?K@s^%u~_R zs3-@B2g=`#pby7z%xRg@u7Sq-`T{u}wxyHU6-qJn`+9$Gb*^@7jRs7GwaQ|hl^Z{= za6ejwGmb_>G#sCp@YgVUHVTHv#?hqt>lsbV;l?c4a{lyUK0o(I9Qgszl~5f&cx}#0 z#uf49i!6(Uu^MR9iG?k9Q^sfD;%P=$HhOR=^61R=b)1;<@>cXIM{Qe4_(qI--qwSQ zl5Wp9A86!=a}vzFF9dv`(*TO-H(5T8LIAv8FSlamDetlehdJnwr$Hm}xk_&NpF+PoAejCg_MbtG3!3CjqUn);?3qRr`Sx#sb4o z1J&;5`sFi?b$At$>%ztmm+)fkMV(T;?PM;6T|}1H)60zd45`=wJT6DHT|ca2M&~Pr zfaXf&o`obc;AocbWByVe9+kRDc<5zCG;Qn5gUo>K!6@9RpjTgsCvUvaHNcx~B}5s4 zL3iiNY(0Bcu|3@oW*Gl1ZWrb!X9VMxW>cj{qWxplnGrmSvr0pFzWtohit$$kCV-sT zASPQn3s`z;69nKgtSCPD@-2mvAf*@k_u4WV2mn^WYZ!rj8?7;PDKd8rj(bj-YhiqM zA~9-(7hi79j|a8KNa8tSlX_VQgtHhz7)$)eM@>aV+X^)dW~(Yp{58xPzfNcw3!W2< z1TF%wQvC zZcbu@kUqkIQc27j`XlDe&TRyGyj~iV_(30V^FHq8d?X7pVtbk&NX=&TZo1rVbmZ;*65FBtCW4gcP==|MGA8I_SRe~N}TO6QD zge8;HS&d2KJC>}k?_#XKs<_fmxr>cc5wA!XfrU``ep<)gaH41gX7(we6vTKemV7#i zG|ify3vMN-6uY2CICHjQO588Zpk-j1Z9b_gtH!V*YAtN|KSNm~D=)Ls8wmw*oY*8L zwW*LG1I#itIOz^s5cKTyggZk+w>xSUJ(JByN5ktG7=}kXvhQ$g*dvck@2@Kp+TPv4 zNEbTB-0>*j>hUPpkCU^lW1o@(*P|Lq$;dF=%V2v%oQdEjqKdiy@Gmw9iWoT^ zT$}7R1|Bq`7+AWft%930lnSdOc!Sv7w^J@hBclDQ@6XMx2dv*WXEJ{H9YE?(aQX(F zEZjKZMI;etsIM_*gP$}e_)84-n?nh>)8ulpU53pmo}AKlSX^z(GJvMTD00W;a`a^T zeO13@eMKnXcerWx)8&;y5ff-Q1=%%nsHtLUW=O61&Xzu6&#RGO#@g_)7@&{GdD17D z!_gxGyQ&P@h@G#5DUH+gk=x?pCMc0)DVBus;m?7yM=`_cV9sXXZ((~RkR2R9bGENN z4*q1o>M0w=*3=?PjQE*cJY(byk)~!Mh`=p3wsTEx47-T&MskDEXJ`F+8j77j3o+D} zBQrCw0lIHJiot6zMMgB|y;=Q+e&6VNITF_MtRJXixcX)UW1W?a)Is7w6ef|XtJj!{ zAM>bhH%j+vibWDpA47U+12Y2n6BQ}v;D(Jexc=LfGz!}1V^-F=e8TDJ%P-=q;ueO6 zWX67(Cr;a&ByV3@S$FyWd(&E>q`6W=>`k*=C@1mCl%j!@F)bo6mh~= z+ylf`<>%gJ>h?ZeD}Wa=n}4M3GySs;#XvIi0T{y%PUf3PmuQ@)M@?%d$+iSz-gfid z?bYZ`?z);0_E+Zhh5JXhsJ$HbxSH=$+NFKo7hYx2LITZ1KV%m$YQ;bZRsr-zdH+ls0c%_)O6%YlW%t-YRK1niibU_00aF??H<S4gvf?`nRST>sWX` z%%eVrfdFB)W)FIj*XX2pcRU=RIVsJ3@qRyXs(j7jIi{>Zi$`wx?t_RD4Y4mj|58${ z{z&fUj;bBqiUGE8g`kgVwO(@s=lzxNKn18TSNe=XPL6KIosDJ_angxUf(qB`6I5jY zfy|Q}Vs>Z9bQPpFUL3rw&zN9zPtV}J@vYZp^#=V7W=&<~B(sU#DxD@*JZ@)s(pTX6 zYhfYuju{o}5#NG9p%G!fed&!83dd{i-g+<}J7jpC;WnTMb^Q*ff`$=18>T{<44CPC z{V(A4O-dMo_5#W^k{KDk|Fh>GymdTveQ(?>2mmhlf`ZFsD_-wgvI89wdB5 ze;aO0m$kDt~RiXx>F(kMtOEg%A$?(R?NSAb%ba&S`Tkre1pZ7lA_vgnCe(dAAX4b5kS+mxf^IX^Hb-}Si=eA{M zI2J&n-J|CNxa5T7X%? ztc(*%fJfRs2n?_C4v>R<+kc&%X&?lH@*(e`pL{F^U9aWajfxHdB@y)&Jk%VJl8S5Cz_k9mU!!KVPd=bi6MC z1aii(gT6%ph;d-XjgSWjQ&sUI34K)A&9>5rev~Cq;l*LbRCwm(Oitnxr zf>8jfe!J&4KBYY6=TAO&FpFxM*k0T`&hY)Gd)!jVba_q9N+_W4!Z|bj4*(@$FJ9IdU7@xUt z@8oVxKU-hVoYlz`DwtYt9-sl~{^ZNk-P6-kio(+0q$iZg=hsIMpJ(DS{!rJ6%ma5T ze*sq`WJOMKg$lM*fv+(b=L%r%%}Lx#%F+60%TLo1xt=cpl}FQv$Jv9-H@Iehw8?fe zkPX22j`BIF*DKT0SmFRQ4j4`ZkDm4?U;USwsY+?#kQYlS@r3Fcj>eFGfYDnsq8^jn zKuY>$f-W&(s2gvGu@4G^QZ)Idu=NN1>yH3j1W*eDZi0gT10Z!a(Mj&w@+1ixj%*ia z@;!L=k0!`FYQXK2wbu$E{*8uAq=;owO9(iK;;(6DkhQaazd-MMfd9`6ZGAO>&I0m@ z1=s7BfH89UWp_UvACQIvFIwCnJ^{8cB%L55hSwNV1AHV{q*m22Km$NcwjJwaRb8uz9_p%RH7ueSL11Wkz14P!WAOPhUfuSvbtD`vx z=&tnr@C+Z2D7qVW;XDAm(&kWVsDsfA1)$L3`Wy`<(!(c1v%IG!rPlw`*GIaS?iwMm z;2oy73f_!4mq&lN>p0OMC;0TQdI%TdS1u>mxo5MfrbJva#IVP|*eWbyCUKouPug>xsKVe&i5)RDn}Mr9{$b0>{Mq0kBI7Ht9~g zQ9fGYi|d>h+%Dnjc zgV#QUQ}6_T!et5T13dMoc20TfItgx^c_*v*Potg8!z}l`s9_=VOU#wN?R|s!bi5bq zxUo?ll$7 zIyq!M!2g#laC`v4^V^NkI@cqs9pAvgiAG?y)d7R`m0u386Wzg5XaDU}kj?vH9l&%~ z7lfVQVh5vWYbhMu`UeH8D7)@Ho-w>r@)vC?w~7r-`y759(h;E%_WBBxm1C%HtZR6a zbTpvnj0kxUTT-^wT#^s&%x9(vc~4dDD>wS8TWsKO*(OqqBw2N}c?VS0FoO!%P*H2ERR^w7p^?)ht=)ZTely3RbK#{ zV(&{%-3$HY0sx%^Xh1iB&z-?u1i&aT(0i3f^$w&S-T*t9A$R_`B}#dTj0kih^?Ht4%p)bPG>*2A#s45D*pVm*?xuA2XKqhua~t_I?};q zVNu9fSd{yekfwNOj@Y3?=&Rnq_>|~bE!CUGr`+z87)^cvX-oSILu5-R2HkZsxpyE5 zT$gVp4ssZQYiH_yVY7@{4VZHod9xCg2v!8(ErN)R8<};0ZU;L~^_;J>VF0W3%p=J$4gb-y;*X<2qTTd|n%fO>~ss!GL zK+FJ1l*Zi=AkS^r0{K$-zv6GvQ(qqGgT-|zO~TuYHP_#;vhZ}ot)?n|(>q;l|1kk1 z>m!KwK>7v>Ca7mfC$IrngY10D6aNK2R$RFdQxf!y`7Nn zx)C^-o!B?HpoeR1wi&~H3#3+JKqK-`c>=n_0o}df@Po!)Eyn! z?l)=QUmm8Flzjp8OhQb*W`&dviK!ERdqO7Z13SbI?0U|r7B#oJggvHtnY*Z;p+gcnaS%r`AE}tuC$|W4)JMB}= z;Rv2ukM0lL)&SBZV8cr#b7O`8>nPf&ia%@yw?iFyaQHhwaAXl4cphGiddw^KMT~_L zLz8RYZnm9#2Nwql%UD1+;MJwZe~!cRreUxc7f5{|+GL=-%U6xeR@9pn>n@3!;O>J$ zeL!bh)sg^_!r7yHFD$X39RRE!Rkwr+?C;H7?D;+}38Y9|zyS+TC_hhC8^D=w1i*Rl z+j+ZrQPBdrD+Jxeg5`FM{xUJ9cmsyAqx%3NmAP1O|z;tOF0YrkNYYp>O??aVei+03X;W(It=j{}gUcW$`aR-DczwZ-; z_4R$~Dou1&u7QIP;Akld_#j}FuO3M$t@9Nb>k0bwDidKiJ}Eg&PAO8JhM57J{M8NT zFW{p8RSf{e03ee1^5r~URrgzRi zFCx6m2aZ*j2zLN#N8e;?fcvlzjQgc6R1P8+ql zygX2Qzw9Zz^N`}0PjR0-yL^Y=xcu_%X-945o|h(xp#)GcP?^%++8Wf2dhY|kNitXN zE~^NN3K1v!e3VIwK{33V+9;*NU26U@s#OBS#*D zWiNy~qCP}wvfcBvBjXMBe4%gR)4Bg7n-Ggf26N$3Q^U!imc_92ZQRu4<*mz2aKGlJ zhRgQM4YJ%*;xR&J$GWoeo9C2$B%cc@-R7LrJ+pG=BKQnOuz!2xRUx7pCC2%3fQ zT4}xJjd!FyM#GeQpDBoff)mvgBIqo$W%Fp9+~VbLC4n^CFzb_#>jCGg5WCM(6n;aQ zQc018^(-rwyF&#UQ!ZQ4`-lB=_#9PHb^73q&x3C#%v4bE&V&R73$z*&ESe4v4$3aR zv=L?%2VQrDs-Y2#)9W)%0Q%z&q6waMH^LsOh*2f$7hF?){7&~pG!aslYbC9h zD1>;{b8Zqljg2Cp?&i=?l(0*dO!$nC&tPXBSY4fceWOcEc&y27EC-uxHt*eYM1-Ra z3$5)&Y8>3dRV}8^KGy5o99+utVav`ItA3c?o{Bo&oeTUjmL)SUCuN`dVyr~aa58ms zjBac2B?mqI{C@kppE9$~rmCBxud^ABoz{LfZU>rj5?@&2vK0xH8k~Y+f6RrgL3y!W~EdN=0t@#eL1Kli#j8%Z&(=q;boMMVbNfVK=y0jC_>IAB*;&i zhFB6oeh$H28=EIf&uevcGkz|)9B<4@K?9T9hBB@rM@mIPRD12-(xU`%E$FTWC6`o7mI{Z> z22up@V1kR}!{dT5{Z6PnpQf&Wckao6P^q!Y(b}C8H=#g0?l)plvlsJ1Izl^DWq=R) z=y3M)Q#E5R|C82)a`_J{U?rPXyb>i*wg!7*wcqe1c|-SyykqE(S*fuC!p>s5u`=x@ zd1|g}JE`-D(H!@iLy5ZtE=X_4^CAQ3C8XukdZh4{SDwD9(3$Fr;$n3mT#nkFyk}_8 z78SAG)i0G+CN=x;sfwowDAA;@*^pUe#WW*yyfGp$$xWNzryZeGV6l0iC6Fub3V{$V z);@gEn>qZ&fZIu!HpVd9+Q{euO-Z)ZSb;*GFupti^IDYQ(81?W|C^grt2ZYsW-fCL z{b{I1o*7-14I&1urG|}3y6r(agDf^+MgtiK*4B*jxl*l(P0UCeOTtxg$xKU|6>1$B z-ceF|M9wl9GG+_k4zlEz%NN#>I;ck;PSm$E4&PkYil|Y)JM8!>Q6^zpQRcYV#$_YP z&CNF|+j|ZQn?_<$$t3A&YkM$vRhVKC&EK{rz<#X2-WLUTR!MJ7D;9^%|>M2E#d?_hSiFp?lD&ww9dRcl26BSN4_I8_|Kt=wF zD>b!^%GXGDMbcfNz?u)+M?d+{n~HBU`#z001n+@0QoT!3Ldlw#Rg5~N*l>hAL~crz zpNtr;FsM0G!^!A&@rl^ICuFxn#D!@bokq42%D{8z{uaZd=2z`Q-QC%84qYPpq<3$W z!Acz~*iN5NWWO#pzclOS;*pWW*zSD!Sy9o+a`0rtf&7>4YLB{GzVqqK*g7@`s0E}4 z#utb;)ln$_;Y2j&IbCtefdW&klJpULud`f>O{u6PW=+UAt6QWS&Mp$s<=AEL%3Pm! zm@dia*B_52F8towbGSP9&p+0Im)tAeMU@uMa{r9vRTtOE3K?{#Gi*xJ>1B>atu{8J zFjuL3NSi@X08&s!IiBXpwFno)V`qN`v3N8}e*Ez3!2xHPhI9y7{LOepDv}d(?SvZR zJw)cT7#gKlc~uU(s_>zt874RlTAjW_rM5pZ%2^l{l6(5*+hsKm2TCW-}d z?fzX#fsuQAdlkdlt^U2eXmHV{ANkwq#*trjn?-fX#o^bnj_bl#Y@wG&0VTtrtr2{ly;iM+B}99%xyE6xmUoWBc! zXh~v-6gG0rTCEydfT;$HO->dY9d|HR;PS|6+Uhbws^%LJOJ1-Yn*J2?Y64sF$PG2O zfdNNAg~d#$zb|^`IQox<(Ne30#Pzo8%|fUlU71b2^=f2T7`L(h<%#*pmWtT7<*%f% zl(~)voqg)1cq7%ej#0Gn0G85OreS`0| z;jm9jeuvWjfy)&42Iu+I{h&CiZK3L{8`q^bHn(FrXoRqtY&i-}wu+;7n**(h3ge<@ z-_3`ki)u3V3*Y3lv6!iy56bCFOLHradl?-1cSku4#UBRHq3J(Ax8I#Q{hXF|YNVMy zVc#7YOv!F%gy^9AMwE$ZyZ~pm=e8SqrV8qbxU%!)HE>!s>@_DL5xaWSGhpE1F@hrr zJLMZVYzu%JB42GbL9kBHRiTt0GgodZG#NlHw|?3B@Zq7SmzwYtG1S8U3&D7u(@=)Q zZaUY*ZmdSntRu>Be3vJWobrjaNmKa=}Jw9?rE;k#aJsVL#s~J; z3SUbKBR(vZYFwzy-92Stlp?jzcpf*feb2+3gM`>2gLJ*O7;3mJWid|I`O{^U$(^H= zbWC#>>uE_L|CE;U{ypRG=#@9~HhX>tVTNabnt&#ZQJ-2=G|K60H};(gFL>e3lp}Y; zuDFoN411M}1L4~f#h_<<@}XM%UDsaX3v`$-qjRVWTxLH-L|n3(DZiIKz3`)Wd4vM4 z{qE@*4NIwgI0V&Y5Xt;z2k$kaSzl{ znlWPHIdUsb)B+{vbE^7{I8e+MHQsJ3M`|1M!yZ5MNx&7mIV_i%=`w~o#$OrluJZR@ zHEx)20W>o{T(sWUOSN*7*-WV)fG{8{C-)j#%-Wg(D$9)k+WD#%%W8@JIGMElqM5>v zi-yOrCW^$3|50_oV}^)zDqW|STr7%y^|m+;2<$RjD~J1&#K5AfI4Hpo#6 zD*U~|3J)K?!Y7!#U$I}~gSv_HEDNW7^o)={TAF&npy-j4?~p1g-F06V5&-!wcq1~< z(gwLbeZ+>;TXYq@0T~xm|74q&S{bdw8#RvwEy9t5OSm=AqGDqAE{s1rBTV^GE)Z;nHl`uG4XwPg+H4J9HC$-Lglr%_ z;s5$0V+`2)}lv7ngw%)h|1agc{8!n#A7;2x~k zz!sz_dy7)8%J{E8n)8RZfm?`CxrEb}eyx?vd%={KH)LQ;!}tHRUTwRYk&!WoBIdBb zdsX&H%;P_A5S_Fv>tzn{CcHD9Z3h~o=Juov9Y11sIoSdg5>f|@ik0&eX`l^w_bMLC z;Mu+sSC(=bL?5GzGDf!#C-z=IQJ$iJ$KSEg)=rfQDnbCXSk%dDpc7`K28~Nc_nhqzW5Q%t%w1SCpfR5^Qpb z3zXd%D+t}#^(o+s;~r4t(&+j~`#;LwIczyTjH=*x;$}7>2zG!KHe3&GL%F+m!E6V< z#U{_ooL=&cT^?h+taIM8?1sxj1eeDmM$;SepP^T`ppUTTHsEoRo-W^m%LA>8Bx!5y zP3c6)2{Zbs&QE46oZjCqf$cSd7v@zDN z#MhpvFZ&YzVl{U+0(@7u2AlUI9-JSz84FC@9%4p{9b*T? zV?I7=sgA$2ysi$P<^y_~m#vE<8ARk^{R*leqWsmJ5bGQ$!uV&SzhYijj{a%9vFLjk z=@m|R6X)iE4uPl#Mm^=PaZ7vKY*LPm@KiBIjF%6e5m3D=A89Yh%@z0Z41zcyR!62fxJ8n-r$AEly`6DbLb$6F- ziops8H20uOf$KhGkNQtDA4_(nEVemzHdTlfl@#_FARd)}q#IIJ%FL`F&@3D50Q;iE6E^m)!dvmc|Q6TeTf4YX{6ALi04uP4=3T~Oz=6h8u@-`hQFWa7IJKgjR43YM;B z`KD?mdWgVDyMzk{jsebTFjML+fnrgIne~m;#~opxae=%fn7=hr-$QqEC+j0CtLQKj2_>ORWTQKosg6W(bWcTS5Y;F2% zZG4Cw0=yCB#`vMt#73dTlbg$3LqkIxOibnc(ZNAknAIJW50(G@oSe!;fnXqlP!NGJ zGoEoV)NU=L*I*F|=exGUql!D+6kx>7i!;ZuZsuB=h2$F+BhE)zS(#p5YUJePgSwXR zlgCux-Ym=fenAsvcqBFs(d$(=mEF|P|d%5`NHRmwqTtc$BrwmNf&hy*@cXXnhXPF zjZ-<66ya*P16RXF4NR-H;`IAR)TiVeLakJCFj7ku3M#sjE*Xd1(bTE`%2Ul6F|UBn z3xFnT@bVP1Ewf)K9m^^Gr=>W}MxmfBsW-rl-g*;&)6YD86V5=E*1FWGCnjdAe7!z2 zMIqsDHpRk5PoLy=$r7$^08g~kS}!8qMLIDW-MU%njTIC`K2&r| z0C=1lv>k77Q@OpFp&b4zWt76avF55=DI&6aynV?J*vVVB8m6Ol0=`MJYgTsBqvDgv z>Rw2v$f)V1s zfi967oh_U$A4DYr6>N=!Jk23LIpE8Wtr*6%yhJ7~!T&?=BqlnV$`|eWa$}@E5r)T? zY&-<(-bjSiP+$RI<6jw)!9S%1uG7YL=hQb?^*~tc!8@sC}+|H;7v)@1>5B()gs6$UeN{Gk^Fi^rd?` zO91xk=0#p1HXZtk{4M15hG8eK`#0edMDGmhtQNYXH1YJS+_avX_iOCnU0T17o}RY1 zLmDj5ure@k1?%?eiod2)=HEk$hq{}#w*`7F1sdaKNdHdR1e=$XDk&-~+rCz*bUDe> z7wEd5_3YU*lE9tGa(^t4eDb<~tSb=NGLia9XM3&@-@(sh;=IV>bo)|#a^;(0LR!~M zty1ZWcag~zi2K9Y<}es+U|_&eeeD4SN?XNtK~h`~iLJMtR#$)4N~~q5%Kp{_UDkN9 zUUV6!L$&EvJ8d65pU+W7%8?vjZ8-Y2a1kmb2I=7o3?hnAOY+$5(V+0FVqF;-XS<`K zkPz&xa_N?BA^TVSBKWzROha6EC@snJb*89^8A`J_kLB5j*DEx(0z&QGeu%R>Ge^Wo z#IZdNeq{RNp;xDnrYfHk7LL9a`gqm;U1R;gOX^{oX9j!onq~2k*c7|`=Rc9*dxQnP zM~3aM8$Os@!T<{1x*u=n=36Y68&PJ=@g`2fJHy{;3b*Y)QN6$aAefa(vva=NVlZ@B#_TQ9MUytV76625bbGORa5ql~ z$6Zl}X5nsSc5YLZxswD)92;NmEnvDZQ&2o7Nz(a~+;Ca;Uj`{a8pR$rklr|OBRp2g zH+r_gLP<&TYKy1Tsdc%#mded_zctweE&o;g)P0CKI1(R7#gAG-p^d=A8>hQ2+`I8D zF>cx!D>T*C<~B0wDABh~+syqFeV5?~OqD-^9gnQ`$90B(pn-5B?SpZ?@C&!S-`ARLxqs$S{4u5WCFe@MmtvTARY z?ociUwbxCbXZnau}r_J^+xWg#|a-w4(AHr%Z``%)Q{k$RQ zB2SSSWgR4Vf`f=ga};b%ex|mk4&o?cf>Dj%hoHg-72I`VZP%k>fv;KEb-=h6{ z@_{q-aZmgD!{=E?Jzk(ASJ%2eVjS6^Duyig-@*Ds$e&>S6a?$qMR@n7AV~@#BnS&U zo@-BviLXIOZlXbqQ=%@~T|@Dr=_iw($ZL0X{zRKe76^p+_ns&7qy4`^@KJV1BFU%- zFb}Ht;N~H$lmDTv*_OC!bMl1|$e{D^d}K1{@%#Mwb6{ZlOLqWERiUP&%05TZ{gm3a zOVX^}1z*5q@G<;oZJoK{L7#tPRJ>Z~@4@CAfP3He>Ez!{CmbEwsha)zWuUL`hA<-Z z?b|-{7x4i-#bV9`Xpssv=Nm0_w@8^Zst|pEkC89ppWiON1B3=u>aBT??9vQxPgKHACG|Y`SH=wM$CAC zTs&g3To^L{U7I$F2)G_=aM#7_cq*Wz@W^yDPef9ZCAQbw+xrUZ3Bj|T(EDup#zu44nCbt7uy2sI_bVm>a?6-6%7Da_!H7*B~H3;1Xx)AQ_yfC zMd$y&4US(B;;;rN5_Ytt=!{*7qI*@VJA;`_f$s%$wZ@M)11InwADV+*|6A0|v^26! zGzJC++m)VVZ;JblAH`=PTai7(IB_ zQ@-|t1>*PM34an*kAba;33WcZsRvT>olG$Obd;2ow6rUQ{yrW}>V7bwXFs6lm>1xq zIivWg1JNiP4^Y`q-=V^EbdrH1`S0gE6=OU-5kRT6`$V7a$ANwutE#HX%EB9|@euCY hKEEhNg}gYp9sXXKZa~q-4BT^wh=3%20k5{_{{u`Po3#J{ diff --git a/docs/tasks.org.gpg b/docs/tasks.org.gpg index a8f487b209c930186af4715cce7f57a2bc90d81c..87712d76de7a36aa43f9cc41527910d335f531e3 100644 GIT binary patch literal 1008 zcmV9JMNFPA5765C4C{S(W^;Fr!H~JC2%%M3(08Hn1s%|I%RUjo~PM zWq#tb1};`wb6JF5!P6GQ2BGQF-hCP)r%4{{<}FKS%-4n9fR(?-2HDWB{dbllT0xzP z{v3)hH*>L&x%L0S_2x8y0#cJ6hws#~I?*1%x@$WNef!qIc#t$6%JZ-ky(Wto)eP0W z#5k(9XQFP&_)(CO#??SpKVa?2(*%@ekGUZXB@6|HYc-5HG<_O5?PI8kLz=n@Cxy(#K*Z zC$teu1==m3j-ko0YAO>DucjRcfwhYVd)IZyi7Zbt;JdCVN(BNw+KnmJ2u~my* zQr&9z$VA^Cyhv@LCi61MdEgeOe-p|XJsE4+46p-COCN&llj*piLyzib)4pdkqgzQg zaJ?qV8HJ|BDNM!WyhQ=q*@@Hj>!+iBIjL=_0Y$t*B$>)0oT90_W@jgQa#^W%=6nbU zmNM)q{~fLby+KTwtyZp@dXf6R>5bO)2V=b7{5dj)XsXxdOOH4r|c9J0~d)(5&9sxMVq_0NfV648wtvBWKz;ZoM(yigVUNF|NU~6{R-iv%C8r3=#cqw!~ut%f)=U)89ZLb ziIUDqs8nWMCxIVN5eE&sE;o= z>L46;*~0@a?37)#q(m|kMQ2Y^EqXTK4Jv!d-BY9yZPrii)}TYwn=8|ao)XhqHyO6w z1kFXNNDWVp;IBCANjtZNEAgN%j`k`HD_Eej8kSNailsY)rz@@!bb4Q*J2oOhGCQU`T~4pZ46;Y7 zw_#9oIJ{Tvr#Ei2d&v9+`+IU`huiqDDbEX&pckzk-ger&v;%sQUmEhrv_rbz#x-aj e@*ywMuHrsdVXj@FSCE`8Mu9fNWaMd|lZuwQ-|TGw literal 1003 zcmV9JMNFPA5765CDpIh7FhszZMiZr3ya67EHk|0rOHLGFbS4PIAVd z?aJ`^i9ISy>&~$59{iU8*o5bDSAyvEFD+R<^!iZloMjbzoW^Za@w8u0aFB7z##AJf zG_u}WEXWfKIekOB3;Z(nYFk6r_N9>dS9S!&+{J`MCBI2|Z`_5d^Zog&PNbX8-(_)y zq;Hn{OC6o=s7$G@SW^(x2v(HKV2upJ$EUo%4~R@ZUWdkb4fvANx7TfhFf2_6zTtl9 z*k(Z1i94sXn4To3d-hb%^oUzc(tJ~ zA=^OmAZ@Js$Sq1f(JjRIP^L7skhVizDtHPcIF$gO32Vu;07x)xTV&oI`j;7zHi(ko zlpcrzoaSQ(sFd3J4dl|n83BY^?Vi>8+44aq6ddC^WZey8WnTk4k}v3D)Szw7E;Uvq zlxtzQ<2QOlXhV%_jQQJ{r_qq5x&+4A2LTM%7(Jo%55lH4yj|?lWzYx>^)lPc3>4z! zs%(T9f4sJe`MEm@QZ(1@;ez<$rfGKg#IjKscLt=vH;3Hec~MdgUfDCYeO09_@w1c;S+B?0N#@j>ft`iw(*)G~nr!#^(GGU$Z6{O1@Hq&U8k<`Cun# z$n*Dy%