From cc6528bbeb62e8ff0af319d9dc75ab4bbff71f95 Mon Sep 17 00:00:00 2001 From: "Bart Jablonski (yabwon)" Date: Thu, 17 Feb 2022 14:20:12 +0100 Subject: [PATCH] Package macroArray, version 1.0 Package **macroArray**, version 1.0: - Update in `%mcHashTable()` macro. - New macro `%mcDictionary()` emulating dictionaries in macro language. - Doc. updated. --- README.md | 4 +- packages/README.md | 4 +- packages/SHA256_for_packages.txt | 3 + packages/macroarray.md | 273 +++++++++++++++++++++++++++++-- packages/macroarray.zip | Bin 45685 -> 50316 bytes 5 files changed, 268 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index a029883..ccde8e5 100644 --- a/README.md +++ b/README.md @@ -122,7 +122,7 @@ SHA256 digest for DFA: 5F89AC6AE628EB27D87FF6A9D72A515FFA3FF6694D04DE0D9811BFFB8 [Documentation for DFA](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/dfa.md "Documentation for DFA") -- **macroArray**\[0.9\], implementation of an array concept in a macrolanguage, e.g. +- **macroArray**\[1.0\], implementation of an array concept in a macrolanguage, e.g. ```sas %array(ABC[17] (111:127), macarray=Y); @@ -141,7 +141,7 @@ SHA256 digest for DFA: 5F89AC6AE628EB27D87FF6A9D72A515FFA3FF6694D04DE0D9811BFFB8 which = 1:H:2 ); ``` -SHA256 digest for macroArray: 833D747526F4CE83FFD73F9EB3A2A9065401B498DFEC79045A28A42E0E57A8CA +SHA256 digest for macroArray: DAEB87654D99965BF2B7A6AB14626B3E617D0ABF526E77725DF89A1AB4C812C2 [Documentation for macroArray](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/macroarray.md "Documentation for macroArray") diff --git a/packages/README.md b/packages/README.md index 95c101a..3979684 100644 --- a/packages/README.md +++ b/packages/README.md @@ -65,7 +65,7 @@ SHA256 digest for DFA: 5F89AC6AE628EB27D87FF6A9D72A515FFA3FF6694D04DE0D9811BFFB8 --- -- **macroArray**\[0.9\], implementation of an array concept in a macro language, e.g. +- **macroArray**\[1.0\], implementation of an array concept in a macro language, e.g. ```sas %array(ABC[17] (111:127), macarray=Y); @@ -84,7 +84,7 @@ SHA256 digest for DFA: 5F89AC6AE628EB27D87FF6A9D72A515FFA3FF6694D04DE0D9811BFFB8 which = 1:H:2 ); ``` -SHA256 digest for macroArray: 833D747526F4CE83FFD73F9EB3A2A9065401B498DFEC79045A28A42E0E57A8CA +SHA256 digest for macroArray: DAEB87654D99965BF2B7A6AB14626B3E617D0ABF526E77725DF89A1AB4C812C2 [Documentation for macroArray](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/macroarray.md "Documentation for macroArray") diff --git a/packages/SHA256_for_packages.txt b/packages/SHA256_for_packages.txt index 25f2fe9..0b139a9 100644 --- a/packages/SHA256_for_packages.txt +++ b/packages/SHA256_for_packages.txt @@ -1,3 +1,6 @@ +/* 20220217 */ +macroArray: DAEB87654D99965BF2B7A6AB14626B3E617D0ABF526E77725DF89A1AB4C812C2 + /* 20220113 */ BasePlus: A60A300E083628C65DD6899E7EF95588916F8F66B6A25B32B3228987B6F74857 DFA: 5F89AC6AE628EB27D87FF6A9D72A515FFA3FF6694D04DE0D9811BFFB81444ABB diff --git a/packages/macroarray.md b/packages/macroarray.md index a91cc99..a26f489 100644 --- a/packages/macroarray.md +++ b/packages/macroarray.md @@ -10,6 +10,7 @@ * [`%do_over3()` macro](#do-over3-macro) * [`%make_do_over()` macro](#make-do-over-macro) * [`%mcHashTable()` macro](#mchashtable-macro) + * [`%mcDictionary()` macro](#mcdictionary-macro) * [`%QzipArrays()` macro](#qziparrays-macro) * [`%zipArrays()` macro](#ziparrays-macro) * [`%sortMacroArray()` macro](#sortmacroarray-macro) @@ -18,7 +19,7 @@ --- -# The macroArray package [ver. 0.9] ############################################### +# The macroArray package [ver. 1.0] ############################################### The **macroArray** package implements a macro array facility: - `%array()`, @@ -30,6 +31,7 @@ The **macroArray** package implements a macro array facility: - `%mcHashTable()`, - `%zipArrays()`, - `%sortMacroArray()`, +- `%mcDictionary()`, - etc. The set of macros, which emulates classic @@ -64,10 +66,11 @@ Package contains: 7. macro do_over2 8. macro do_over3 9. macro make_do_over - 10. macro mchashtable - 11. macro sortmacroarray - 12. macro qziparrays - 13. macro ziparrays + 10. macro mcdictionary + 11. macro mchashtable + 12. macro qziparrays + 13. macro sortmacroarray + 14. macro ziparrays Required SAS Components: *Base SAS Software* @@ -75,7 +78,7 @@ Required SAS Components: *SAS package generated by generatePackage, version 20220113.* The SHA256 hash digest for package macroArray: -`833D747526F4CE83FFD73F9EB3A2A9065401B498DFEC79045A28A42E0E57A8CA` +`DAEB87654D99965BF2B7A6AB14626B3E617D0ABF526E77725DF89A1AB4C812C2` --- # Content description ############################################################################################ @@ -1210,7 +1213,7 @@ The basic syntax is the following, the `<...>` means optional parameters: macrovariables named like "`&H._`" are deleted. * `HASH=` - *Optional*, indicates which hashing algorithms should be used, - available values are `CRC32` or `MD5`, the `CRC32` is the default. + available values are `CRC32` or `MD5`, the `CRC32` is the default. --- @@ -1391,7 +1394,7 @@ See examples below to see use cases. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -**EXAMPLE 2.** Populate macro hash table from a dataset. +**EXAMPLE 3.** Populate macro hash table from a dataset. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas %mcHashTable(CLASS) @@ -1419,7 +1422,7 @@ run; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -**EXAMPLE 3.** Data portion may require quoting and un-quoting.. +**EXAMPLE 4.** Data portion may require quoting and un-quoting.. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas %mcHashTable(CODE) @@ -1436,7 +1439,7 @@ run; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -**EXAMPLE 4.** Longer lists. +**EXAMPLE 5.** Longer lists. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas %let size = 1000; @@ -1509,7 +1512,7 @@ run; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -**EXAMPLE 5.** Forbidden names. +**EXAMPLE 6.** Forbidden names. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas %mcHashTable() @@ -1519,7 +1522,7 @@ run; %mcHashTable(ABCDEFGHIJKLMNOP) %* good; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -**EXAMPLE 5.** Hashing algorithms. +**EXAMPLE 7.** Hashing algorithms. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas %mcHashTable(H1,DCL,HASH=MD5) @@ -1528,6 +1531,252 @@ run; --- +## >>> `%mcDictionary()` macro: <<< ####################### + +The `%mcDictionary()` macro provided in the package +is designed to facilitate the idea of a "macro dictionary" +concept, i.e. *a list of macrovariables with common prefix +and suffixes generated as a hash digest* which allows +to use values other than integers as indexes. + +The `%mcDictionary()` macro allows to generate other macros +which behaves like a dictionary. See examples below. + +The `%mcDictionary()` macro executes like a pure macro code. + +### SYNTAX: ################################################################### + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~sas +%mcDictionary( + H + <,METHOD> +) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `H` - *Required*, a dictionary macro name and a declaration/definition, + e.g. `mcDictionary(HT)`. It names a macro which is generated by + the `%mcDictionary()` macro. Provided name cannot be empty + or an underscore (`_`). No longer than *16* characters. + +2. `METHOD` - *Optional*, if empty (or DECLARE or DCL) then the code of + a macro dictionary is compiled. + If `DELETE` then the macro dictionary named by `H` and all + macrovariables named like "`&H._`" are deleted. + +--- + +### THE CREATED MACRO `%&H.()`: #################################################### + +The created macro imitates behaviour of a dictionary. + +The basic syntax is the following, the `<...>` means optional parameters: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%&H.( + METHOD + <,KEY=> + <,DATA=> +) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments description**: + +1. `METHOD` - *Required*, indicate what behaviour should be executed. + Allowed values are: + - `ADD`, adds key and data portion to the macro dictionary, + *multiple data portions* are NOT available for one key. + - `FIND`, tests if given key exists in the macro dictionary + and, if yes, returns data value associated with the key. + For multiple data portions see the `data=` parameter. + - `CHECK`, returns indicator if the key exists in dictionary. + - `DEL`, removes key and data portion from the macro dictionary. + - `LIST`, prints out a dictionary to the log. + - `CLEAR` removes all data and keys values. + +* `KEY=` - *Optional*, provides key value for `ADD`, `FIND`, `CHECK` + and `DEL` methods. + Leading and trimming spaces are removed from the value. + The `MD5(...)` function is used to generate the hash. + Default value is `_`. + +* `DATA=` - *Optional*, provides data value for the `ADD` method. + Default value is blank. + + +When macro is executed and when data are added the following types of +*global* macrovariables are created: +- `&H._########_K`, +- `&H._########_V`, +- `&H._KEYSNUM`. + +The `#` represents value generated by the `MD5(...)` function for the given key. + +The first type keeps information about the key. + +The second type keeps information about the value of a given key + +The third type keeps the number of unique values of the key. + +See examples below to see use cases. + +--- + +### EXAMPLES AND USECASES: #################################################### + + +**EXAMPLE 1.** Basic use-case. + Creating macro dictionary, macro `Dict` is generated. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%mcDictionary(Dict) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Add elements to the `Dict`. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%Dict(ADD,key=x,data=17) +%Dict(ADD,key=y y,data=42) +%Dict(ADD,key=z z z,data=303) + +%put _user_; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Add some duplicates for the key x. + See macrovariables created. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%Dict(ADD,key=x,data=18) + +%put _user_; + +%Dict(ADD,key=x,data=19) + +%put _user_; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Check for the key `x` and non existing key `t`. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put ##%Dict(CHECK,key=x)##; +%put ##%Dict(CHECK,key=t)##; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Prints data values for various keys. + Key `t` does not exist in the macrodictionary. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put #%Dict(FIND,key=x)#; +%put #%Dict(FIND,key=y y)#; +%put #%Dict(FIND,key=z z z)#; +%put #%Dict(FIND,key=t)#; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + List dictionary content to the log. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%Dict(LIST); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Delete keys. + Key `t` does not exist in the macrodictionary. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%put #%Dict(DEL,key=z z z)#; +%put _user_; +%put #%Dict(DEL,key=t)#; +%put _user_; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Clear and delete macro dictionary `Dict`. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%Dict(CLEAR) +%put _user_; + +%mcDictionary(Dict,DELETE) +%put _user_; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 2.** Populate macro dictionary from a dataset. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%mcDictionary(CLASS) +%let t = %sysfunc(datetime()); +data _null_; + set sashelp.class; + call execute('%CLASS(ADD,key=' !! name !! ',data=' !! age !! ')'); +run; +%put t = %sysevalf(%sysfunc(datetime()) - &t.); +%put _user_; +%CLASS(CLEAR) + + +%mcDictionary(CARS) +%let t = %sysfunc(datetime()); +data _null_; + set sashelp.cars; + call execute('%CARS(ADD,key=' !! catx("|",make,model,type) !! ',data=' !! MPG_CITY !! ')'); +run; +%put t = %sysevalf(%sysfunc(datetime()) - &t.); +%put &=CARS_KEYSNUM.; +%CARS(LIST); +%CARS(CLEAR) +%put &=CARS_KEYSNUM.; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 3.** Data portion may require quoting and un-quoting.. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%mcDictionary(CODE) +%CODE(CLEAR) +%CODE(ADD,key=data, data=%str(data test; x = 42; run;)) +%CODE(ADD,key=proc, data=%str(proc print; run;)) +%CODE(ADD,key=macro,data=%nrstr(%put *****;)) + +%CODE(FIND,key=data) +%CODE(FIND,key=proc) +%unquote(%CODE(FIND,key=macro)) + +%CODE(LIST); + +%mcDictionary(CODE,DELETE) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 4.** Longer lists. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%let size = 1000; + +%mcDictionary(AAA) + +%let t = %sysfunc(datetime()); +data _null_; + do i = 1 to &size.; + call execute(cats('%AAA(ADD,key=A', i, ',data=', i, ')')); + end; +run; +%put t = %sysevalf(%sysfunc(datetime()) - &t.); +%put &=AAA_KEYSNUM; +%AAA(CLEAR) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +**EXAMPLE 5.** Forbidden names. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas +%mcDictionary() +%mcDictionary(_) + +%mcDictionary(ABCDEFGHIJKLMNOPQ) %* bad; +%mcDictionary(ABCDEFGHIJKLMNOP) %* good; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +--- + ## >>> `%QzipArrays()` macro: <<< ####################### The zipArrays() and QzipArrays() macros diff --git a/packages/macroarray.zip b/packages/macroarray.zip index fae73f3df3631cd169508c8498362f98a7046d34..837bca5ad70249e9e3a72c74c26fb7913f12c02d 100644 GIT binary patch delta 18175 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

eyw) znQol7UHLQvi;NOaBIjp%(GM#m!q!wWh{5QK93Kyw6ST>z1bi(eX(Ti!7Y}$1?9&;A zfs*(ItxKzB#W;z?>)nIM0#ai@cew(toVl35gq<;1!-S9HUUwDrY<`He!yr>;{QRN) zb}3a>#K~j&21JhlZ)zbae)*Nmy@I~Xv>!gqvekK>ihJ2O=+#qgLH_!7w{Pl1xRMH=OQ%UnOtCPE zu~iBiR!2)Y1%y9_iYFra)Au@@n(2Zy0hf#9+YG#zRVc)>G-!{d%>iDQ?2IOkt)9oR z5#exzxKG2C>^<1(8g~%p_5Y@#SYnXY5S%1ZeBfccwv&dgQ3uu9vntF>mp!#TnvhUt zGQcf3oPDS)m9?X$6216LjYM2v7kM{`?H4;EDNIN-|eI<1PvX%PF?Px z{W*oTr_8gDL}B+$(`~7>%8JZ&H?+=*X^Sk^w@W;vhn^AVQ74b(k$`ob_SP?bJR8Qw z#MeD~X(u+!p)66oiDqB9-wa#e#Z&!NkznZm@2Vv0<}38=tLwVH~(d?!vbw-V;snQEq>=Up>^ZG~Ez zQOvne){1Q@^#Ngxd1pTK7K;U*UesT=!Cz!l?x%1P$9wn)i6@JxyJ6=NJZw1Fy`?Xf2FkSZ!TsDGXZZ}^dIOzM6Q1xY0gxKlv1** zLFVW;?PxHc+$mNOpGI1hzi5F6VTg!*szE8ofxg#HETN{mx7?TzC7$0Rz#t+$(*|9@q=my z{8oXA$f}DXCBg}h_z=anMC@4z{s7PhDgjnSLU5odkf#m*B8x%N zKTxKt+5-gAFX!|){YMC6f(iV& zdb=B98HM}j0xd$U>s@dgcf^8BkWv;{?`Ppm^3DlmE6wmHWR8mpQ3+5uz$Lt6SGqzL zfF^)PHZ6^O62+%jX*_c2e>VNz7TqIdhqbU>p6<0Aj(Zw< zk=R0Z&JI3|gks|Xk`ue^SA=mBjWvwP)54L^iD;5+rE_?Hu~7am$@)H-0(`xSZEC)< zY14!#HL?pM=5+o53*9QRJId=O)RE%nb5vwCiu3aH!8%A4T!0mAztto1__Co}M58`P ztm|$YSgdsbk>{USyDI(wu#Vpf`(8aX?$U{6WoIafq9};*RnYpdmlqb(N~2g}L`%#* zA7>+45Xr>*G6m?A0+c|Gk>6}sEMO%_(kvNOY| z8$w)>WYuTL~LXilZHTnpvw zn>oHZp^JYg2J6e~R)j^itXJ22`_}6Y1V-OeA^yawty^N=yXSus6c@xcuLT@1USuJV zkXb9~wCF66AN&nWWyDy_MO+KyT(J&*HaP0?tx= zpPBBAeKS(;I>U5{ij3w_X&LGWa=Xy~U(5juXIwM<+sC^l)!;J$=2o%jBk(M|#~f8G z22yCiLK&UEj+t6Oa@SL>X(Sf*Ms}ndjJY@&Nc(O36Pssh)aS2B%25Oe6Ht)b-W<#{ zC4%U|{Kns(w7MZ6?~?mZ-|b#`9+!*|d*TU0q2&nOHgBdu17;mjyfR6rFOj}Uq|O(h zCe=@n=5&yY!D{FM*XWFyQ{+01Okq*QAo6|wGJJ{mH@=kGcN`It`;7ZfKm-qiZ?}`@ zztv|hpJRFWDmz!dUB>Y(|CEX&PG<+tJz{(wY(lb1_kQHhWPea#`+7m)30SnVvZDX3 z#T77mjk7_VW5Dpt8*wjfb^qhOIR*)Ah*ZQ5YrIXt84%{L zE~!obhc(8h$cQp?XByJUJKWF2 z#EjcJi@hZe3nI!cLMlK&N)PyX$@<6{V{|FVI$Sd8;G5bDz4GBh4`y01INUK-NHAj| z_~6BYFZRJS(4}S<<@LcQE=);u*wp)~Q)@sjcDK^lPu=SCI& zP%=4fcIjz@=#xY09&o%4Z=HnXDB>&pHi0eImHyj}Xr6Q+6cdBfmFPO05>2w5-%yKcIeomv$iFCAm#&^AMi2(DhTGe=0bm z4g@)MDS<7fVs!n1^n{JoK9_U_306t6Q0UK~my(lGOu7UhIeRhTT|SIl{2aNO5Y@s( zW_?Pq{Ie#Q8K0HU2gfewwvLHSDzP2`(D1ynk7a?4tD3TcvP|D3f2%231aJ1BG)Fj@ zCVm-KLMsAYiYs5RwL`hB=DTp0(3J_|?5y9*?WOTzR~)$=2vVJi8>4}oWWxY4Odoj~ zwtEzCYjh~*jEje)YX!_(IZ{bx6vCuCp@F2(q>4!GQ!*X$V5Hh#6w#_pQXf_UTmyC0 z>a?NU(qJlRHJ~cdpz_hvf+!a?0x8jOMX73lG9LEejP=lw9_E#U1Bqe%|AgO*8J2rw zu)u~pp$#O{qzb3ND_v1$&5cNyE%FhBSLr@xAu~=gatm-|EHH`;>*0Hlh5g3p4X&Ac zT1(HvLLCUalTKatKh|gbLpoP#$2mL*b-qgvIB=6cN373&4IE)fmW<=TjZM4S_&nwwq&6dk zh;8e4!iWjKckJ{UqR-O=z(F&wC*7#p4=8p%Lf0n*Z$rP+BWTYb}Z`2sQJnX zP&*sI!kDFC%6mIzB9Z5HE&v5RS&{9+&e{~H_PQ^ue`5lL8Ck2N-fKIx@xLVW6mT!g)L>-pqF{8koi&$ z_so*T_Nybs@S@wzs>DTRDUrw6TV@OkYlI-~SkUzfrI&d%B-u;VI``0ZMR(=K#cq48QDicaqh{zuXewpkKd+rDNRVe7mXGNWJ3A z*L9n9>U|LWPb+P_CnE&|{pZFTv8df4{~MB+8gc#`q~w?&{u_K%sQ)iiXl6qHcSgc^ z0sOxK&vN_!!nYkMB+Y*uJ5WNs5b`e|AX{A^Ae?_rM4yq7N#EAc*vX#W*4V_-*u~P` z&d|y8|FpY~r}Mfb`p=HqHv*mxdwBmn)5!F2e>0e5HuNz5feA&*8VFIdkZA!qw-HOq z`b^JFcWN*_V_IVpmURXB@?5Xq%@a@7_4YP5W!l7L)mn#1&c*r?ThK;O(ET&|#`gM} zVQFb;RV&XtPRVt~z;d>f)LDH(3C}*4_uW3YH=uw?8|Ti-un1?4$*RvX2}HHbtWi|o>$1=Wp2s-)UaEwq;3+&#_+=-L<9&edScCBLpsrpWDp2s#3778-z z;;%jhvCYfB8ykgGV(ZYSMu05q50g#=4ouuVd~I^$%fHAk;-2a`5ztePsk*$Eedle< zDlY$ldy9XGCb{5i55w_{hu<|H(qGOO4WPd8vCv=f^X9i+OlucTe9yE#pUhd!b(=A` zbxgJglkRVVMC-WfR#baJwK&Rz2f;^qLqClM?KlhY&$GAx;`ni5bN8khW2F=@Hh=xW zNO?GZS`#~P@s`Pm@OMd_U^Cy1Yr9HtI**lNO`e#!yGj`MGUpRt;iu8RQ|LK!02Jy- zMavM%vr>d+Lfo|30mHt2_W|KG$$d5sg!irfT>^fL-`%^^IxD}7k#H!>L)NJX#ah|^ zCWSwlS_Vzg4Rw=pInT6(MRWS{Hgd zEoEK^>#K|{6kB(Jqm?>)QMAD52jmCNPG;q|BKL7*KB-?-MDVel(}72%A%HF+!}G`~ zQ%0um3gH`^8!zmKW`2K8!C$atRv)`Ia{Qep%x6?gW}RmBNKHB8Ix;fBX($!8zmdIq zhLHvRg|!Ki!zKy!@$pe$s+-5A`BkCWX~(|mS?%WvYz$UyV4>dFGTY@621vq}%$@wz zuB_34sPY=?QsVe>=L*L%BAuX%TA>PSnQxy(P*E!Ty;Y{WQsHdt3O*QfW-#f{ubsvH zzTH`H{5SXrA;ccb1ZmzF+e#eKijp|q0}0V!GOtuXNMNp#4V%y5SLj}YHa}4_Gb^G` ztwX#x9I)s3@3FvsHT<_!b3ovTf4%;HQ zMX(}>WllzcAVb2K&+Q`fH?u?;%sMf0zCF7TuFVI$S=2uXhoA*>XdP12(n44P4^%-H zXz{r-l+Nw4NM5gP>sjXp{Bci>W?#1U(n^fG{)kNwtV63YYZCOhZ2%+?9O&q=_Ce2s zaHX2n`(N7j+$%s_ZnBHId){LP$dqAZ5Srl0a4nh5m3pGc+_c1yXCUvJf_!7}DVm5^ zRTNpnzK-!FQmKdj1@B-TI9AexQ_(b`HImG`1YHG;o3!P0HCVfHrz$f{5+q%YL|Dn8 zDDn2PArh=6q~hgMo`8c9~oS?-1V1;zvSf-9SSo0R9qSm>!{Q*J>p zEI#ctBYYWG-~i7GC!lAdVM_JA?7r6BN;h2sd>`r@s;co08;m4O)fQcmY{}vcJkXt= z8r|ldCVc^O{b!A~o@3;R?lqmaOy1JW^}drh=ncs))f+xA9oN^&(y~8R2JYc+-~O z_Ztc!Y=Zh|YD*FV<>d~oHE<^~GsxVBO(bzU-j`L&Tq1)(sQexv;;k3*I*%4)w-cKz z5?w{Ap`ZAts%Bm9nraKh25l?A8<2Hm^I`H0bSbFZ6F=3dc>wE68&6TvUlx)L!pSOhr9`8OD@ zk?Tl4x*{}r%AbK*!AE~pZTPKNxt1bcG^t|o#0_Q%xROj*)S;PW1a z`8_Wgp@CWQdkdyemH2E7_Usd$!6J6RV8Ng)h6u1To8Q;FU=avaI6fPU+9wa;5&oBB z(~%M@-qNTdnas8{S;jv_$jriPGQAH6<%S%yF5s4NsuY?K9k$MroA6OPz8)L}Lx=`d zGGt!9;G*ZiK|Adiib^>C(tJWV%&SCw*l&_6^%4uiEooPN;7-N%Ol~>)bdt#~&Slp* zFk*l^<+2Ee=!zhVBSbyHkWb*5GoEg|J!nfnBFudQ4fBWMZ^}#3IE0aMVFxJHmNdkC zwO_no9ZS5O#7W~g^O_hifrP~@dL?Hd@d5fevqXLwYrY6Ys?(HDaPvMHnW0bQ!HK4X z1VPee4@6kz1lB(pB=tvxacZG|5kFq75RL&(@jI2#=akR&{5Z~BqXeo@pmfjm^<2XM zRjkyKOJi%}Xc690D_4XV8DTs1h`=fXdQU_>N1TyGBfciq!;%^(=25TdLqr1ItR110 z1yh=Myr7{;h)?738-_S3ASCR({=bajSsY$e4nzL1V@XK7|c4bMdN%HiWRfEj8!Q#$QVUUOT z?9>4#bkxZC=v{Vtf2_|Fk4V>y8CL-RSUE(65eN#?odh)=Gx!4hiLV3t{o5FG{0A+4 zpxCHB2s732+OB7V&O$-ylN0D2ktH9KJ!;)6zaaR~gOy6%5yOg>PmM-}^Lx2*9%m z{k-*pA>e5+eiiNg_1_oSy*8f_$Lu|LfQ-!WRedk)<1z4=z|W7i-RUsrroLc1it%sI zoWC!yB1#S>e+hq`{K?)6yRI0}JTYR36Gg(q5 zsFaLrXN$e&R!V|1U~*!DY0-4onHXBWS_7-3agzpZ|9qWHt-x`Rz^>E2Kd~|ANKjZ+ zAL;(&CPLWnZlupD8C|p@`%6N&eRtK%bZAW1~d*f|#4IzG-z|-uW`gh$-QlmyF88mRD*l$6L$KcbVjvuk&Qe z?Eq{AvnSVT=y`dm^ZD_Z<|fWxX?1&j1J;ex#y(^mmpAe^v^2P{bY z!}*1K?vWD+;NqP4$D!3MeYc6hBygbz3OV~(EPl5y$t4hlJvU`swl#2iT;`7$2uqSc zwsgk+P-4Q_;HQhxJO3zrB92NaQT?p}XIiDZ`#}N|Gk(y6im#GBL0F+W95qTtI1Q5#Kv^vjCK&fPU`htAf)#Pj)YCX$4VVZE@ zrO#>h%6UKnh~%U3K-ZUtOw}!-`de7cYKX0z@JOBN5lCkzNNm>J5=q%gwjJZJy7^ z*WQb?iJWeHXAq9EhWQHGt_vK%X0D#fuBn~?V2*ZkY4R) zC%{1-_8x!H3O()pa^FU%y?W31YthV0sG<&gLh@`n)+AItNy;rbCnqVxp6|_#t%v>y zi*$j7{_u965hgDd!tsnTrZtht3@Q`$o^&E&!3eoDw~7pCjHremVND?84u;m~S%x_R zuvW`w>RR6%|Mq$eF!XLSWOH+Y^=nBzK2T^JA4g?3N&W#K5Ds;AIfm0R-DoqMbS{A@ zwzeIQ7J3y?GE)F-hiw<&8WRr^n3+n6QT!)cD{nCn8%8iq82+xdHu18T|DGKkBI41F z*a`znFhD~tke7gt1-V5=`|Y9#a_&kCh%2E*QZe_(ak8#DPd)ByFHjD7+^tB?QpPv6$-DBbNL*51bLHGzBdS@cSvJ#lzHf&(C0#&@ zxRD8A2!XMysEr0Y^#E6BQTnZgdXiS#`NXk8z)l+1O^uAAu15_GQ4ZUk(j|il5NjDb zeq^wP-6^DF-8XlRX@Yh>JhO+J$hwuJ-q}X9TdFlc!GLe@{&c6t?SKtKlc*9_*D8*T zd<2`Z-qf z8OdkJ%}$4#bW@(ksaHnoxu4+$7@3L@)#C9Jys{Wupt*be?GAquXLg+l*kv7<+uJil z&}i0@yYDHIU*)GgBwNNaHZLZy-+-d-iHU z>=yIR-6L|tw|eL>ejtgRqS<>qDyMLHJu9K+C;Q5;JcL`B@G5*ee_G1|=x?`7Z(yYL zQromnzGF+`eq94M)!T0Jh5wZ(UN9d0kV2VlK1Vgv&ZG6>yyyAM=OYdH25i z{Q}k%RtofV>Kys&)N*cE_n^G)T z!r))$*lxvZC=RP6lgjz41MllNMmp;w+t;#n_xvL>c;weM;-%0PDrJcNL6D+@5`CER zAWjEZe19|O31;v`aKn9n1siv?S|O;J?;}K{mU@8r_q(DLVc-hN1WQ0dcb*zbaqg;a z?RG)tw4Hd12u+GNNLK>U$TfZE)cvqwT9yf%gqDPeYmab=p1x&*XuH{ z-{~<8>Wbh%YZ}Jess*5P;oVI>Gp2B$+HwLt@@5RiE5)6{@>p2OY$k^}TTG_8f zT^hTayPtSXI@hf&x?al$;Y>DVAg0N&eW~L(=8rw5_wzZM3`*@7a%9?RmDIjv*97rn zJKLoXOM^f~7>TMub6><(Ka}em|3|4TrJH*3>nULDSk^>ncwKHkj>x)`ql`c(zs9@) z0dm+j47M*J{QA&H?3^*g+0u{uEm)%sW7|$N*1lF3M`RmmPqu^n1dk>UF6A4|X6JyJ zb@SC44ej^|99Kl37T7s=E8=d&0zpg!{lSVBI5RPQMn~51qRlc|c?Uo-x51fRcU)}J zX`@GKIL$wWvSjZr<3T@-S%GriClUMD0PH#KI=SA!#Eu9}>;`0RVp1UjZF?LfcPo%-Vst(wnb%~0$3A1x*QjghlGnR)tL_%M=k$q*w(s2vyyFSM{A17_49#Q!e2=&&PK8mGtq4g+qu)TyDbo9s#`R0HbS zvV6)+!^17#I;WECWF(=?E4!9T1d$hAMYse4Wn`nXD;t{-*sK%kT)5D2hk(6A1z`r| zlB$%IG1n|lKnaz2B>GDYKd##>K*enwI2ewLHb7(vRVH%C z->9#TWCT2k{Vtuu%`7z_3Y2}UtQga=Gy`3UVG0d_-$J)V4<9i;CureW0kqtrL9K#F z@(+8XPYO{4BqU@2THCeT?~8_ouIr{X%SKmE1Z6N3(6hBkX0Q@LcP^<4gHA3Yf?eoA zb8Z$5kAP99{8c)e9b9N|IRMakC1JH%zW(hrP|$t@vh;qyS&YmfF|Ybu=ro@BQ(++q zgtZWNHRB8zAdnni7uCJsM07AUf?Wb#0dGVtZ^X?MllhRjrdAQtu+{Iv$F9qC|Hkd1 zqkS{f)?k)+9gE2#z#ve^%FiSQeV#HWvY>>uD1tW7R1@m(;*hKi5)fq837=Sw6*^+~ zmW?_+>*Jsh8^!u(W>R?}8D>@~$DcN97sVJ;FXhp&fRvItcFM6YIf3wx-HcdMSP4D+5+p`0S2?*}o|J~^4TsZgH0c5ha_t~)|<)kgF&=J${-UQ-4kufb(FIm z|62EhP>jUP zZRL;=qmK$MwnP-z%VOLs9b&OQP<22?QkCI|60#7WZ#~F9@^Rm;KK}7gB8?NNv8D|} zW+~*PA}uB_%;+x-xD4x647R(IPOzDuEo!$g9%TBeKjUXM$pzoo>X#BNTTKqdfufmx zq6^R8Wd$&&4}CL-2Tx#~qiQB)vF;k-vuu2FYn!}qoTV@l%zp)Si0IuoU`GT3~VO` zB>?S^E~?MpOj&=}L1Bf60;1wsp;`y~Iw_?c;ik+>jkO;n_eCmxJH4#`4(+QvI zNoqM{@8)_o=!fo2>u~WJZX*y2P(?P(g%Sz<0=70Dj`6+RCjHy&NwCs?Qy@;onsyt2lLx|MpA_0o(DZbLnovFG3ri@hN!jcG;0{nLYD8zd0 z+}Qp8Se-nf2UDTy;FcD=D*;2{fsv5h;94Pn*++sbgiZvrZq((IxA5Q&HGeLRYghDH zTQa-xJKuf0?(W`IidE4k)B=&501Bv0&ufSRb;zmOMLQ-Y36>*Vx55(HUD1{-&`Sj0;>*Bz)`4ePYtL=u!yX0bIhI%yjn;bx3o_=?c1hf2^t zs|1A0qMc~%s)`eZ_q4#?{Gu`3OMu`hXfr-lN7x$(F=<=L6-kymw^^h`s;Ya0_E>R% z**~$h8J|)tGk@!^IePhus~h{`EBI2ruEiIu_hA4xn_xYG z9}?87jHR}c8+@OqN^T{h0Q}7o@Uwl%2mZ=H4NI*P5+sn4JyCXiXIF`*G#DbJtkfoT zyB~+7GwhpP8-!*lrD=K4?!ThCiOE8)LB$?Cfs!)UAQ${m&9eA-8 zJnJEjpi@b3f#yQmVEEUL%maf7i}a#G+K2iWszP@26zDBH13){n;e*1=;cy+)gncdQ z-cy7A_6M*%ojQ3xK&OUR!-yC8w(ALbb&`9`RY_%##S=|9mcR+C05mqOI!0DMVi)K- zaLgh4AAqyum|g~P^3%t{rZNo~cd55{f{|Fj5t@RYEbBx>F zpmzP%RHu>@mEOrK#@%*XnQk|rUay9C6V|aYAtL*ZX5uCMdjcm--ZTD~kdH+CvhE?A z`jl^^PH+`-`x!l_0j#x}?*7u{Tel$h+$Dhos~-{S@g{u2VW!GD0S`g4B%@|zmkNTE zX|I-&4Z^@t`71}?%BzR@=$xgq-`-wtQ493V3LAMY(#qcoF%4#}f*O|Ds-wFE3r@J+Vldx$2);xE^}^u2T}cX|(;9G(h0V$JbOptZF_gCq9!x zw(_6Xsq>MNI@B)xZ)60)IvN&Iluzg+d#%}U%K$MpHLc01stIHV6Yf5M)Ija@%hB%8 zqgYwE>zk|cnCiMR!al8NwY>`1ckAnHnN%EPq0ohNy+utHEPh3Vv7MBsgXqC$l3)^g zTxE5U{F@E*10YG9cBU^N@ZWuEBdQq`-U#gRr$|}kcj&FnmkL8<-qv&xvhS&?J{EN6 z@5QIo8?pr6TLE{e;NW|?0gguUbCoJ^dZ|Sj;)gLcK#`xl86by?-@?Z8&YYDq9KMKB z>LOXflj!-*Q-)XwJRfR3uW|eSkSt+8drN<1YEQ-d3IOZ);%rKhAoS+Wkp}y{HFXpu z(4FNyspM}RZ$_-&=qzXVOM?DLA`Yd6|21zl7vnF=vqsAa{F~2=xaS1RPSCUubAIQX zGq9xtOQa2_Mx$Y^GT2e{5x=7qPg1${I)BR~g~$kYKk_Jryasq)N9=T0ExG|z)yR9T z2v-uKDPWvJ>IUyc{Yu|mo&f~1!gIraLPF!T{nIuMm9rZk({n-lI;I}nPo@WBaYsjNxH#PmSUi z+tr5TxYKPdi?fWB4v75IZVz8$l^?LN$!~qcNq~^nG6xnlXf}Rt>WzZ>^GpAsESz1v zuUAVHDNG*nhIv^2+zYlx&6h8k_a#^xkN2jBjVxCNR{c-#F2EQEfsf$mg14oG{8gVG zDSl?(4jG!)-bkZBE5U<2K2mi5txwEV5`9@?>^hgLURyEFwItr>o#+f>O^>Tf&0j@j z3h=1YkO()a&zN4I@f({KrJO;WCjjM9!Yr7!ub+mFt7GMh`7> z>8kLl-xy2Qu{q}kt$d^}NV^#h)c+f#1Q7?u8aIV_d zkI6RRrpbAkzkkJcn}K{l|#6e3LkHrmvewmc=@Im zg81_930Pdhm#}~xeMWmNDBlqx&{y;y)4CTGMK@j^4AYTDXU%^h%~ZldDiweiH0^2n z_wTT>XG;HViIiQ2x?vlOp+5>02t9UVlzY^}*t<5B9stFD{cnZC9A15cl~vS3M25JG zrjWKcI5jsBK-VuA6Ii-S5_LJ;i0n_DFse(ORgQlIs=5(umiDM-)M_@9p=OyDWIJcZFqOYw$xuR)H&)IyZrNn~JRoJNlNLxpqm+jLc%SXnTb zeE;Z;#mYj)2%@6YUwk;aCW0mzK_>?JHRe-2M5B*i3+(EZHp-dX;B0{UpSyQPVYaN$ zU)LYlHuwQ1c0!sj9rHG=)<}7*_*P9zW?vX&+x!?;wXrByfbi!u35M3p_!EC2CNmY8 zYX_kNaedWqEo5xo|5y zpDimf_i%XGkt`szWGd(@=`VZJoUc38S^<35Q4nkp-;`@Jm!CrbeW*=c+y;W6h>+v2 z5Dcz4$=u56hsD6$Eu;$#2O|%(>CTai@6v*}+@%h$iZlP31*Wyv# zr_bNOgqwy)Z@;9Jss0Xhq0SC(W>$0*d*U~fGs}S>VzA{pM5^Vpf5ITL3r)9!kMnUz z8219@J0e3R&i8$T;SRiP*imbC89`S4zr9&~%G2n;l*R09imHigpFO?ydcn?{rx`AM z%yiEA7ob_IeYK!||DIb%7$1g3OyXZI{{Ht`{_FF(AGl0ao!O|ux<|ur-{f82xJuW` z-tCmMU;MCZy@!F0A4~Po^KY1c2G>^2wa#Ds^8Vp^ak-{C*3~Vm1C*67C@gk4-8a9+ zB9Z^VkMQH_5n7gkL9!c_gx`9IN@?wS`c;8jWm;^MPtG?ymavjQxfu?ep_Je|M*Cp84h1 z`+Ix6&9+9ZO$pw8S4=1BGT({xKd&P^G?X(}t?53R1MH@-voWsVp1yx)d~%v@NX+fgZPyF-(&-h$_(Mk}mvE-zr*jsgmjR;mUo{R_A?x{g2R}6>JbUCD`K6vpJun za|#ds+QWR4=lQ)TM>mO!+av_lo(CI$T=emaN~-Sh$1b@$614T$Bi}6j?2`Si=={ca zNtb!nrq#^*+Hv6A^;eZLFJGRinUS9u#J$*UsaR))+F!P0NiLV)FL@+*gy$+OmA0t= zq9mSq`RbKzi9VCRgxN3N{_ARCds1`SuU&DDs;`%ve!0B1=yUAqyFb6yem{J_{`K5> zbL0OwCkhA0(gpEQsCZq*j~f{Z$>5&;7UB$(IdbO zqFcil85ni|_sH{r^}uw^p3J*WIviv&>dr=pB8bWQz|m&JK1X!3Q8yqV>$^3%ew|bp z$ZYuPeMOLqkkwq1V_?Wg%_#uwphP$M%A;9qx0x9j#DPAOLeXWfHu?QJ4RG*Ct(Rs@ zn{2io!b=459!#!XuPhI;RyCCW%yU)-1_NM7NTV1qZSwy0T44Qe)=M*=3TBwx8!R_j zauW|&UqDBxSSTk0!y|bH1~C+U-zNueP=!Rx25H7Alc#S`1M?05d0CV1Y*14K+3UIM z%(7c-3=I6@==OT&Gfd{omziw8ktY+R5_Rb$a=;XoG2mKAi5^xcvjP?9VRf;6a`r|I zMUbMhFWN>z!1xc-V_=X(@mK9!hRJ8Tr6!--2u`_^?{1W4y0vohuZ`LYAdMx*y>}V& hF)+-tWMGg$(a5%8vg;-#K5+(dhR?u|Zr%ry1ptV8P?i7y delta 13507 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 HY5e~HYXoF3