@gitpagedocs/cli 0.0.9 → 0.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,6 +2,7 @@
2
2
 
3
3
  import { LAYOUTS, FALLBACK_LAYOUTS } from "../data/layouts.mjs";
4
4
  import { DOCS } from "../content/docs.mjs";
5
+ import { HTML_DOOM } from "../content/html-doom.mjs";
5
6
  import { DOC_VERSIONS } from "../data/version-constants.mjs";
6
7
  import { buildRootConfig } from "./root-config-builder.mjs";
7
8
  import { buildVersionConfig } from "./version-config-builder.mjs";
@@ -29,7 +30,7 @@ export function buildConfigArtifacts(options = {}) {
29
30
  layoutsConfig,
30
31
  fallbackLayoutsConfig,
31
32
  docs: DOCS,
32
- docsHtml: {},
33
+ docsHtml: { doom: HTML_DOOM },
33
34
  versionConfigs,
34
35
  };
35
36
  }
@@ -6,6 +6,7 @@ import {
6
6
  AUDIO_IDS,
7
7
  PAGE2_AUDIO,
8
8
  PDF_GUIDE_FILENAME,
9
+ HTML_DOOM_FILENAME,
9
10
  } from "../data/path-mappings.mjs";
10
11
  import {
11
12
  ROUTE_META_ID1,
@@ -21,12 +22,16 @@ import {
21
22
  VIDEO_META_ID4,
22
23
  AUDIO_META_ID12,
23
24
  PDF_GUIDE_META,
25
+ HTML_DOOM_META,
24
26
  SOURCE_VIEWER_META,
25
27
  DEFAULT_HIERARCHY,
26
28
  VIDEO_FIRST_HIERARCHY,
27
29
  } from "../data/route-metas.mjs";
28
30
  import { buildAudioRoute, buildMdRoute, buildPdfRoute, buildSourceViewerRoute, buildVideoRoute } from "./route-builders.mjs";
29
31
  import { resolveSourceViewerPath } from "./project-links.mjs";
32
+ import { MARKDOWN_MENU_SECTIONS } from "../data/menu-sections.mjs";
33
+ import { SUPPORTED_LANGUAGES } from "../contracts/languages.mjs";
34
+ import { COMPOSED_PAGES } from "../data/composed-pages.mjs";
30
35
 
31
36
  /** Demo route protections showcasing the "Authorized Routes" feature. They are
32
37
  * applied only to the official (non-parameterized) scaffold — user sites
@@ -144,14 +149,52 @@ function buildVersionSourceViewerRoutes(options = {}) {
144
149
  ];
145
150
  }
146
151
 
152
+ function buildMarkdownMenus(entries, base) {
153
+ return entries.map((entry) => {
154
+ if (typeof entry === "number") {
155
+ return {
156
+ id: entry,
157
+ pt: { title: ROUTE_METAS[entry].titles.pt, "path-click": `${base}/pt/${ROUTE_PATHS[entry].pt}` },
158
+ en: { title: ROUTE_METAS[entry].titles.en, "path-click": `${base}/en/${ROUTE_PATHS[entry].en}` },
159
+ es: { title: ROUTE_METAS[entry].titles.es, "path-click": `${base}/es/${ROUTE_PATHS[entry].es}` },
160
+ };
161
+ }
162
+ const parentPaths = ROUTE_PATHS[entry.routeId];
163
+ const parentLabels = Object.fromEntries(SUPPORTED_LANGUAGES.map((language) => [language, {
164
+ title: entry.titles[language],
165
+ ...(parentPaths ? { "path-click": `${base}/${language}/${parentPaths[language]}` } : {}),
166
+ ...(entry.pathClick ? { "path-click": entry.pathClick } : {}),
167
+ }]));
168
+ return {
169
+ id: entry.id,
170
+ ...parentLabels,
171
+ ...(entry.submenus ? { submenus: buildMarkdownMenus(entry.submenus, base) } : {}),
172
+ };
173
+ });
174
+ }
175
+
176
+ function htmlExamplePaths(versionId) {
177
+ return Object.fromEntries(SUPPORTED_LANGUAGES.map((language) => [
178
+ language, `gitpagedocs/docs/versions/${versionId}/${language}/${HTML_DOOM_FILENAME}`,
179
+ ]));
180
+ }
181
+
182
+ function buildVersionHtmlRoutes(versionId) {
183
+ return [{
184
+ id: HTML_DOOM_META.id,
185
+ title: HTML_DOOM_META.titles,
186
+ description: HTML_DOOM_META.descriptions,
187
+ titleIsVisible: true,
188
+ descriptionIsVisible: true,
189
+ path: htmlExamplePaths(versionId),
190
+ fullscreenEnabled: true,
191
+ blockLink: true,
192
+ }];
193
+ }
194
+
147
195
  function buildVersionMenus(versionId) {
148
196
  const base = `gitpagedocs/docs/versions/${versionId}`;
149
- const menuMd = MARKDOWN_ROUTE_IDS.map((id) => ({
150
- id,
151
- pt: { title: ROUTE_METAS[id].titles.pt, "path-click": `${base}/pt/${ROUTE_PATHS[id].pt}` },
152
- en: { title: ROUTE_METAS[id].titles.en, "path-click": `${base}/en/${ROUTE_PATHS[id].en}` },
153
- es: { title: ROUTE_METAS[id].titles.es, "path-click": `${base}/es/${ROUTE_PATHS[id].es}` },
154
- }));
197
+ const menuMd = buildMarkdownMenus(MARKDOWN_MENU_SECTIONS, base);
155
198
  const menuVideo = [1, 2, 3, 4].map((id) => {
156
199
  const routeId = id + VIDEO_ROUTE_ID_OFFSET;
157
200
  return {
@@ -183,7 +226,14 @@ function buildVersionMenus(versionId) {
183
226
  en: { title: PDF_GUIDE_META.titles.en, "path-click": `page:${PDF_GUIDE_META.id}` },
184
227
  es: { title: PDF_GUIDE_META.titles.es, "path-click": `page:${PDF_GUIDE_META.id}` },
185
228
  }];
186
- return { md: menuMd, sourceViewer: menuSourceViewer, html: [], video: menuVideo, audio: menuAudio, pdf: menuPdf };
229
+ const htmlPaths = htmlExamplePaths(versionId);
230
+ const menuHtml = [{
231
+ id: HTML_DOOM_META.id,
232
+ ...Object.fromEntries(SUPPORTED_LANGUAGES.map((language) => [language, {
233
+ title: HTML_DOOM_META.titles[language], "path-click": htmlPaths[language],
234
+ }])),
235
+ }];
236
+ return { md: menuMd, sourceViewer: menuSourceViewer, html: menuHtml, video: menuVideo, audio: menuAudio, pdf: menuPdf };
187
237
  }
188
238
 
189
239
  /**
@@ -211,10 +261,11 @@ export function buildVersionConfig(versionId, options = {}) {
211
261
  },
212
262
  "routes-md": buildVersionMdRoutes(versionId, includeDemoAuthorization),
213
263
  "routes-source-viewer": buildVersionSourceViewerRoutes(options),
214
- "routes-html": [],
264
+ "routes-html": buildVersionHtmlRoutes(versionId),
215
265
  "routes-video": buildVersionVideoRoutes(versionId, includeDemoAuthorization),
216
266
  "routes-audio": buildVersionAudioRoutes(versionId),
217
267
  "routes-pdf": [buildPdfRoute(PDF_GUIDE_META, `gitpagedocs/docs/versions/${versionId}/en/${PDF_GUIDE_FILENAME}`)],
268
+ pages: structuredClone(COMPOSED_PAGES),
218
269
  "menus-header-md": menus.md,
219
270
  "menus-header-source-viewer": menus.sourceViewer,
220
271
  "menus-header-html": menus.html,
@@ -107,7 +107,7 @@ endobj
107
107
  14 0 obj
108
108
  <<
109
109
  /A <<
110
- /S /URI /Type /Action /URI (https://github.com/Vidigal-code/git-page-docs/tree/main/gitpagedocs/docs/versions/0.0.9/en)
110
+ /S /URI /Type /Action /URI (https://github.com/Vidigal-code/git-page-docs/tree/main/gitpagedocs/docs/versions/0.0.10/en)
111
111
  >> /Border [ 0 0 0 ] /Rect [ 64 161.7898 226.83 173.7898 ] /Subtype /Link /Type /Annot
112
112
  >>
113
113
  endobj
@@ -135,8 +135,8 @@ endobj
135
135
  endobj
136
136
  18 0 obj
137
137
  <<
138
- /Author (GitPageDocs) /CreationDate (D:20261017071740-03'00') /Creator (GitPageDocs) /Keywords () /ModDate (D:20261017071740-03'00') /Producer (ReportLab PDF Library - \(opensource\))
139
- /Subject (English project guide and PDF container example, version 0.0.9) /Title (GitPageDocs Project Guide) /Trapped /False
138
+ /Author (GitPageDocs) /CreationDate (D:20261017095257-03'00') /Creator (GitPageDocs) /Keywords () /ModDate (D:20261017095257-03'00') /Producer (ReportLab PDF Library - \(opensource\))
139
+ /Subject (English project guide and PDF container example, version 0.0.10) /Title (GitPageDocs Project Guide) /Trapped /False
140
140
  >>
141
141
  endobj
142
142
  19 0 obj
@@ -146,59 +146,59 @@ endobj
146
146
  endobj
147
147
  20 0 obj
148
148
  <<
149
- /Filter [ /ASCII85Decode /FlateDecode ] /Length 2001
149
+ /Filter [ /ASCII85Decode /FlateDecode ] /Length 2002
150
150
  >>
151
151
  stream
152
- Gatm<939k;']/F3maB3sKI#m:Y#5<H3KOg3VOMDAdb#>V)L!Gmkin/sGP/78N@9eEJ4?<%qtTT#`Zc)2<qS]2&H+Mbj"lTES*!AL*5eKG"eEr"r]Dr0ch8BG%*K#4,/\SOdg\mPN\YD\XO%6)0H`;r%GQ(iZ>J$QQEQ?C17U$PB-A.q2=k[ohW"aP9b'2.C*R\gd'Un#RQY)mkP?0FgjgB"2WW0]RL.hKqKgYI*O+%eiAEq@1YZq5ODmGjiY[]2+.q4rK@Qn1RPU/i)k*9E`KaQIG:Lalr[.IgFe1!pB:).jc(&CH1s+@QBRW>?f?C!cBP&37m<^EFX1.F'&8]sD%f*hA.irQsi?1BK_C!&!_;d>@_TFJe<cE)%rV>L<adgY+s7#H@Nlg'hpkYa_#!J9!e7ThdT34jQRFiR%H.q2'86%d?l/YI;)]9B4?7)os'ZG-#UqPMtD`O*Z@AQ/TQQ)>-U0noTCJdp%`LT\D\ke2@4fD8rVm\'N$Dei'6&B2S:Em]FnIIH7rP7CT+htj#:^`#&1$a(`"FEdG/YXGG6qSuLJdOr/b*L/Le4I*;67NRW5U),#>;"R)piTN47?V+Z@V<?O?DUL0ohM!uI%B>?p$Re.&8A:tKVWskDjd?t+ZA'hEM[b7T7P^eXHl5H66quKP[oJKE>ck86b;SFr@ho^4b=ROW!ipa[Z11BGmD^e+kEf+rXX?9hEcM]_`jDkTg^-r8,1-!&@Br%6V3Eh>pAa62J<T*:G+h-"G?9:f#[M*[P"<`,/8<`@SK)/+,+\:F)AB8]VJ`4AJPCD$Aj2^WIc@k%o^=^U:r8s`8]oYfi5"m[B=\PjYDZ*O`mgL^>B7pQL_H10Qa!&iaaR6>EGSlghrB0C@8/7MpC?U(!Dh:=G\+'+i"I#WKb+m/l/Xa^Zmf?;T!>USRiT'79IVPK%pub81G[PG]gT,@_"BWIRnBh6!$GK[l.pGJ9G"c>#tCuDg7s_Zu4:;Y1JKW-P`qK(G4Bh@Ckq=n[TA12HKS*Phs_>0;c\%YGNSf35Hh0&rS"e[(=T<N3O243QJ5D\pQTmG94]2e4UCqVi:es6?`RJ5)Hm^KeO>H/[3:2m".SKq$VW[:!9%?C/cBo+giJ`j@\Z)@WoS52U^]!JX9U:YY[[,aFTVH9n`KR[l+9LK8@);#`,%9H(d.C@h:E&3+G3#:_+/s9k8/ZT.6e%71siDj\Zpf!FT@[Vdl.(DDXc_M+VTEpatC@XXP]ecun%]KFKsAk@)!&/*7sfh?]L^5mcT_pG?SF_)Dfo.6MN%c4I1Do.\lod>KbOj(S[C>?Nr#:0ZDrML(hPGnJISA_TqKQk0&O8,V0O[E4.rpN7C^\6%f\as6><Gnpj(4c)HdLHJee@F3;fc'2AUHo[;:rE]AOr5k@dcl.;Qnu@&r%VPH>;e^ON$OVj]ecge>H$Os\?g(f$h&+-nVQY^#`Gh4_Kc-O7cp]e:b,'M4;*Eiu0eJSgG);pE0pBu33[rF>Q$Trh=?&C$!6D5C7$eY+@8KF%Gg2'T#qqKfZ)]1aWmS7oF]5b7,L*3.\2%1K.*gcO$SM'G#="0e-nJ.44e$uflCe1dPpgc\?q;+`_RH4;Q,RqK@j'_3M<k#R1u)8n_<n>(EuVL";eeD#[d6_47BSp":'B?>Bup!qm2IEeGX1<\[Yij+1e-HD7fbeG/lT-L;i9Zp<=cK9nB&'u4mYqJKDLXm,CJ\c:X+ud#5''l)jfSq5BEj97?Ve'?=sP2A!?!"2iXRl5QCd:dJ@q]5@t:FOP;_$fl=&RiZBU'?Ro-`7hI>>&gu;pd@'YTgD7884a>Jb,8O<;ZP[hkB"-@HXnCGFrbc:;Zq%GIfq\=YgLIe#VqN38%f8E1J%C)>I1<Xh5N#u)G>(clK]2j*\W!NU)k&:u.:(oN?EQnBl'3^3DFK<U?.R_cX;$''YO>ETRfs,-62*FZf@kphc\Tdfl0_h(mA1Hch*>!='[B0qQ*=U3X+]-TWQ1=&UON9QR\RI~>endstream
152
+ Gatm<939k;']/F3maB3sKI#m:Y#5<H3KOg3VOMDAdb#>V)L!Gmkin/sGP/78N@9eEJ4?<%qtTT#`Zc)2<qS]2&H+Mbj"lTES*!AL*5eKG"eEr"r]Dr0ch8BG%*K#4,/\SOdg\mPN\YD\XO%6)0H`;r%GQ(iZ>J$QQEQ?C17U$PB-A.q2=k[ohW"aP9b'2.C*R\gd'Un#RQY)mkP?0FgjgB"2WW0]RL.hKqKgYI*O+%eiAEq@1YZq5ODmGjiY[]2+.q4rK@Qn1RPU/i)k*9E`KaQIG:Lalr[.IgFe1!pB:+Eb<`>pL.S]L,/"5ABr&$:p;juB/@/F8'cg!+Z!XRP'SjU51es])JHoQpYO0Aq45k+QmVQ_i"N&@,1?%;iuH8;Dih`nb8V.2:T)*VNoKgCd]*qbrAjC]6,AL=k+>b8D!*`NkMAidKNl:+5HSX2o!#=\1<(MW?Hg07=KITWQ[k2f'EKdbSE`EEsTBQ5EKSF2SM9b48RE2p%_P="L=@o/nfeW\(YB)Daj9g<UlH,t!p(Y"$[@*CZ>.`'ui<f<nI,*C<2Z(OE\Up=R;.WpoVVN=Eg(m)gJg6N+i.=U*;Bp#2.Q.QuCWE3f`6bUr\11)Ch?+i<E4@GVg+<fuUl!(#5Iu)?-7:7QMc"E\m-`c>?W";NI2'lD!<Er!K`fTV7?69Z0B%eJsnW1h3ODWa^&"[tF/K\Hh3p-IHQfB*n=$Q+o\J89^14Ot,/.+[9XYuCX3Sc"P?>>,T&GtPJ"%=mlmqIbdmpYN;arp7jB.hd-PPe8p2_`j,S&.gu`EHk.OKXbuB:UM3;Yi'nN$7K`E^;6o:6eP].TbqNQWc#*-kU16C?PJb^i(Z/$OoH>8g-s<,.[q,b000Ql([=c$F/eW^/V@2l%G>s;%NfA:m"B7qrI>/lMIWB;_Br_B$a[m_-VeKlljG%TnfH'iJCX6X!X-JPN.GjAeoJWKR[cip'bVYor2MV&+G;iqF0]crTnii(k#:*$[L.*bnm5brt(eqTl4F`T2"SKr:4;hm/(NiU5TaJE[7n\dR(#3]Zh:?d@54$WiXCQPC;U[CeMGUOaPkB5V."I!:5oZ93)=N6-o[[%*U=`,a,q#a3_3;3MAngdM>_"_F^np:*aEfS7a'PDAIK-Pn+6KFGq2Aak9)G^Mms%?p9C6l]6SK8XUB0"$Hi36]X#-A-2E8&`,qLL@M6p)He>:2cUoqOV@dB(32I%H0[pu'Tf93k(qpc4kuKhOpPEl]g:;4o7%giX1DaMK'&&Cfc-/@rbtYsVA4L-J<[qBp>QMN8i[EWr=lpnP;Jk3TXU2?oBWcKh5mR,ad<kfX\uU`[#+UO%t;ISbtt$K\9))U;2^oT:8C#37[[o:T[o;DZua<poc+2'SCpT(e]a?^.G`n3s2Ub%fa+^rLFfX?-gkqScS^uRB>:+TphjAF=I,9i)#&aPFjQ+V]OUeA#[Ik*R8K=PaoYj:j/cM><ta$crYX*>8S+5*H6"dJ*NbM,4^"b>l\C2#_[(e:.R8)Y0cUC/'Sb50k`G9hR2<J=d]4:'$Wf90$T-;%.YfO,AWGai%^=kXhfSA*BT0h!UsZLT\?6k[^efkcf*-n^OWo/l3`T=1.51r=/s*TG%nsmC`>ICUW]IUTgH27?1Mb1jFB@NA']MNr4d:\;ce#mNP(j2u5&[LC*COBODL</VUZ=1!q`1KTDH$4)3sD6]S(#:C"?WR^3'"j2rp\DG=_U_4;7LU+:A-KAW`p`O2s,7;J2oMZrd<0SM?<t]i"E.V\,TsH5R4iJ6^o+*W[%M*!qWft7=,`rE[c!KN?4WnJ$Np2gX_!ID*)38<ATP12f!SPc.uR<?0^lZG!p[64-DaacaH!&4+"!pZ0\^PKD_YE8(Q:2>OV_9[XH3W1enn5?^`LdqSJr:K:L@)NpPl-7%7N9ip0WUR,=aBNQ=`.Vu6BXV7p,pn/Ja<;gb]q8G9.+%$L&<A^]Eb&RQ#Ij\OiS`-2ObKsAdV9qclLH91m-b<r'5~>endstream
153
153
  endobj
154
154
  21 0 obj
155
155
  <<
156
- /Filter [ /ASCII85Decode /FlateDecode ] /Length 2056
156
+ /Filter [ /ASCII85Decode /FlateDecode ] /Length 2057
157
157
  >>
158
158
  stream
159
- Gatm;mrRNt&cM.4@_[$)bubZOOWo)LdPU.!?KP-IZCI>1lG+YjiJo*a!jp7@rpbCErfH3IPtN?9,Z,\8[s7cc],QimGMp4,/^ZeK1jp0:&CPSf60(JAr(,G_MuR%,r]ElKR(QguiekB&9)LZDApmNbEZ/IpRV""f=mUi64Jsm/7agS6$_P'[9Dr!_?6%1P0^e'kl+s0OUAej[NMF].a\2Lk=Z:!`*cp>*U565lc]Sb@s%9l7kfllUlHGal7XMHqM!%ka_EorsMro71%$(]\^NHV<o4bb3bP009MR@i4F$oS,U0hG@PfE,RhojfrFgWieg&.,$T4n$@@iR*X$b\Ajk/25u_.,]^_;VqM6qQB^)pc"'nKL7($i;%O$VoT5PW?M&G_;?lMjkflIot.rq[[VKBhJ@Zi,csn4+KHPbp2.k!"S1N4:</"HYLT(d9'PAJt/a\+_3:e(SL[ONVN5oDr?h&Qr'L6WR,)1)bL(XL%IPH$@U>3<H9H+O$6MsV(B`+,lR6&"0'FK2R:n'=ku3fDPJqsd!<6gPnfU5qP7?LM9;"3PW)KBkn3hhap^ACXJ@CXJ_@?'>]7*o>#h[B\S`Kk#5IpOT(LA&TgL`f)U*GN,10T-`M*O@U'qoRgY+_\<h+JE:Y&lj)nFB+(;L9dU(Q;L08/])UMn^P6P+L5>,llVC-&@A'-eR[Ul^Z0pU.:a9E[FhR[7d(qt^[@gr#XS:K1n:,BBh+,mO"EOq%A9F2.MErS@,J,><DBYdhE\\biVD=oA,B'[6Mhh"%r?@hueWO!T1fQ7tkFkHo#h"mt<;f1dku.pWoeNQ!J3;/&,?,1t._.4pc2^K=O*W9[@Ch.1>.Za<2Z&-6Q7_Hppt/``[i4"%g1X]?]J+:M'<Q9d6,,Y]k3"i.$2>:daq_!:\khARe4r<DB],b!$_3$.UoY?Y-Z[;Hprd7HL?8UNekmiO8oUbeWN2&f\(WDYLUA^@!#S7T#oIqFWAa_#U-FcKi,NQ-V`i1Q$lN$`@6T-sEiflc60E(iP"'Q+%no#F]C%AGjD6&".-\tK,_Fs`TbJO8G`8GIe:s#eY*/3B[n_n%nB`Np]E+l)jS@tgC&>2__`iDm3_2W%&a.+j/kWX94?AIoSQpg]Xuc0I].CA`/Ji/jC*^rYbS<mCdC;<OZqZ0VtGQ,l7JD4%(W,V/&J/#o_`E9'RMY"o[nT#4u(D=akb5oK@9Z?YpQl?u[j3'?heq\jQ1Fd:PM%5k`)X;[Va/Uko5Y[#s3'lkVSddH]`o>\fa:3e*t!1[R1($#,B@jSP8$?8t[fLZEI4Iq$i5*;[?9eVk7Ri\A&Kljlgn]8>&*DS6KW5g'jN)X)s_^SrL/_4\_B;;0Oja'O.]r,kV-g@1o031_sb\2JR:sX]:;fai3-$>$a8bQnt._$0lG(V9BH`W9u(TdKGT22@'))%jmQNZ=Kh$g2I^>_o-NM>(n7r^DHqW"p]rn7+K+2l,P#*<^2(W2Wt&,C,(k80;*\hD'phho`W9"]k88mQZ;<*[&-W[5M5oTDFE%S*K7^K_79A!E=kP-hL&2K,HkN,72Q%jg0+(KIEA-mq%O%3D.G*%-,5H2'=Q9O?)nc2A*2RS`(;&ZF]_g_YqBE=op"oP_%(+=]TsNHP.9MY#FMkAZ`Im$snm53S;I(eD?:`4NhYIM*C0d;8?Zr;k+XZ9u16G5[ObNnfB6_0Y.EN"f"#nVA-p@>Ac3aCf/7SP7@eodtB7FGC5#p1CQLqDqbBW^^&"eWnI(Dpk4Ch/Fl73mZPaal6j-*;\=hRK'J'^W5J5"Q`n_S3dUXj8eRLXfcg4]].Ld?@(G>F9r+jhCH/nEpq[SDFBJZB'<d>YA7<\!c>*eV4`uql!sNgbIbDa[Cnop>`3?q<]%9La>/b#V(nKu=lt'DU+>6>SLVtfm41A*_(j(^fbJj^k(YBjaMO_/c=(XXkW$>c*MAJ7A7eY<\(''c]s*IG\hq_Ll9isq4u6=3ltkjp1J]Dh[gqG#J>HSQr+iNR?@Qgur5'b/8,3-2C@Rrh8&i8Ugn9O-DbpWR8jAXg?2P5R.k*a~>endstream
159
+ Gatm;mrRNt&cM.4@_[$)bubZOOWo)LdPU.!?KP-IZCI>1lG+YjiJo*a!jp7@rpbCErfH3IPtN?9,Z,\8[s7cc],QimGMp4,/^ZeK1jp0:&CPSf60(JAr(,G_MuR%,r]ElKR(QguiekB&9)LZDApmNbEZ/IpRV""f=mUi64Jsm/7agS6$_P'[9Dr!_?6%1P0^e'kl+s0OUAej[NMF].a\2Lk=Z:!`*cp>*U565lc]Sb@s%9l7kfllUlHGal7XMHqM!%ka_EorsMro71%$(]\^NHV<o4bb3bP009MR@i4F$oS,U0hG@PfE,Rh[=fjFBu"AAN#%7jX45\`up-fbsF&mPPMFhGjsA3TQ#-n*`8*qh9PUDDS4';_88Cg_1L-[+_AqR1Z%*PmGd9KlQ;Gbrr0giCRUE9%/:etbRPak\FTtc*e;-g,L6FHr*EP^<]!hmV]b/:EX3Q,p]W'18L+4_aW:/P*@>=\G;=9-pI<TGF<S=nL-hMS6^?HK`hO%Z9IWW?)bE8Ar'79&Q]8)S;-#VO[+f7f/p,rfAS$R,V`s@2G+u9Q2<Bf3<dFlLO>=_6/h8@Y=^\\>.+d4UZ;st@7]tJNQ3%!`N@4\2IHZb%[0AE.Sk-4hDm<tA/1EqUg:$]MOqjm$fTYupgIA>fK*AKrX_>X3q[5,?n*$6`i=H,uVj=@>Jsq_"ai'!*3@X#6rI(ea%26R<RHC@"n%Scf#PTpMdM#V`fneF`7u78[X(4T4hV9d`I=HIS^^-.\%4nZ#Dsfe?D\g+%*X-UL)RoY3qNusil=1-mY9aSin2]kSAO3qQk&llGeOl/3<+BnU:K6&.Zj:hr>tPL$aY/sF-L/0AGrHV1f.=%d,"03bOg%oU7go-kjN\(9:ob=f'aV\j]k($a'hM?I>QO>ndhYSr/$M&uPd^k>;85CW5DeND!KKZ4lmp]<9!-jf=`dP;E=s@Tqtin-)!T6l=Ns<9=/qJnCt\EX+D9Bod%;395dK&_>+O[iJ"n`."?7g),bk\#dO,BNGBP":2]Qnc!/2@XSGY+l7"]05:/G@XYAPaR\=Er'D4hI93YK0"l9>f$'['6#d'0ZJDt,C"G6g,kjB1C'MH2]5>Bn]bPg)-",7=,eS>q0n5oE&o'`Q`r=S'+cR2Z)F4uf@8'JOQRR[(40IaknV>qEU?F!Yj'@N4In%EZaQkDF$?/fZn"\Ef?3Uuu^L:u$H!9Me7XYq2KZKR-u?3"?IIiP#L:9Y42<qM#pE>*]VXmM8$!,?QU:PR=r6D/&a$RYg(r$-,061D!=0LRRa\oWaWam"IF"@-f.oW1M;M+WnhSaei.`J5$R&W'\)Vo6B>&`suaKEYRSr>Xk_Ghr0s+`"qYrP1.fTluGB<Z/3s>fou'RcPN[Z5\d[@'<101];[f]MNU$=j",O7PSIF2._A!7dll9;c3r5%LsMttXc+(FY02E:J:<7E+CB+Aj$lm_pS55:8,_s\J,ek_edpbL(^!;fL5TKamtZ9Lo(*7B45EtJcYpecW$U:e7A[.KI4?l+:DFOO(4+)pY(re%MdNWBTeX\_>tNaP>FRS#.7Q5_K81@aqMQiQ>*P3j%0qqi=H4%YX$$;!6RFJMkiVl!7StT)cNmM?;!ojRqR?l>2>T779b<S^\]?g\%+Y1>V/nUh7s<0U3Zk_%2%6;;;W:tiHU!>ohrqNDg&:t`$e_4Y?FpE`*Ck"bk$YlB=%8&ohg!)1gp"[T1?>dJkt\*gebYTd4h=";I=&;&%ZR$\*`\scL[+/;]/OHMTPh9+,G""7X^lFW<"AlnJB\$phVVgaW.K%BHqp@=;0%21XB*rbF^B(R4"n;8?+P]@3:@U<)7fM.-$Q*';)>R7hq'_;3.WthBN%aM]C`@UWo[OCW7kQ$GHO@lPUi2L+(Ud/kL(3m`@UVo1XR!.i(b$NJbCB3Y2C..Q0bNa5'+W,/S*g;Ds+@69=13rgCDS#A25s>W`s6)mTs#8C0d:k$h^4W;P+gXH$6W;gmKP>UK`Ln/AP/e<W4l.2Qsm(=ao<J^S?1,'")s\V'BL-1i?./X>d'[$`0K=OtQ_=s#_`m~>endstream
160
160
  endobj
161
161
  22 0 obj
162
162
  <<
163
- /Filter [ /ASCII85Decode /FlateDecode ] /Length 1826
163
+ /Filter [ /ASCII85Decode /FlateDecode ] /Length 1981
164
164
  >>
165
165
  stream
166
- Gatm:D/\/e&H88.EA0'hh&KS$[aYchRO/NU-#4F2qm,Vl/^Y289%6DS=gn"<mmpTem%nU/ecu%=h(.s)kKX/Ghk'd?97ZU[9]dC@4tP=DKh_osCUdW@r-mY8;h#QPi-<]fIt?X81H.okjsLlna'RcDE=tX'7#jKiVVq=o.BL9IEPVsFfF8I4+to>Z;6(AM"/QRGXgAa3@H..A`*8e.e[`:YSLB4HKG("eeiLWs*#9pVY[\>hi_6gI4+Zih;`#)\+UlBtVtc\upSd"e;b*=.$d0/XYF*$M3P?!'!r*_m(Fg.5R%<7uM*8DNEm@YS"IALaq5s0A1_f^[m*DQ"\R6QR)K2jDRt`Vd\S^>?M%:Z@TRgMf0*_q]jut'!/qHU`o_._'O-_McE:rAT`?e3nh04,-dSC'"O&U2HER[#BVoEf9=jII-RoD=K0N)IY9<)[%M8m.g(;Y).$mY6Co0Udk/.Tr!A&WF2nCnKcP\pk$)o?[;7,!lr?eB11<=f=kejL-F6&J.@0qr%XWSj;D7U3c58>%4[n?C>S"nY/VT0es*]+e#*BOj`]2N6Kk3JKkeHjgs[;)&:'A5'A`B57`lTd?Jt\KI&83=r,$8FZ0O;GpX6P-%D/A]$C+3UPVqc;n2Gn!*tYUQW^*GVD[AN+sh8<hX55:p<8/A4G[eS`GdPm6K+^Rq)G?/++B/9GmaV2"mRr[D7YF[N[%,e`TS-"f7;t,jLck./!o&pL-9DT%](j&Fa]#_!)e,5rC1Y'F?(&&/?/,+$^4HLn%H2:V;%m7P8Mn9Ed5P1oi0dYQ3"]`t((pJntjIJ<mTlkc7\s?(@a]V=,G7(+J3UFpg(:KgKtiRVBM'P@!Jk1`3-i'>ZRN*-cC3bu!+b>(i'qish.>1N?b2UNPMg@_RP?`^gJ]"CY6\6>?nEVq/ZJp[&d?g@$*nEaBLq/&`3%_Sj-"3VIXIql[#>I[8A"j5R.NqC%rPl)pc<ge*HlPXK;Uh-sT;2YD=_(2#qVl^m:H]Jm.H4Y%pH@%W_;kUHH+=!'!/Lm]L6ou=m:>2eF:%*ra,n9B'*?sB\Z(e2+]RIegN?_N,'U!%k"$`]]m5SXc'k=h?H+cE=VrR`lmRb2U9U"(Edg>9Hi7,mSoR-L9f&&/SQIcu:MNrM7e6Jqeb*:1Y*E\QV^MJ;>mJC)LQ^h#r8*-$r9[O)tkDIErh:A!D9E8YB7@<kN&#/VW[WPZ(m..SK'i&L2:AB2ceUke?+@:O"e!MSC.++!BZWi*b0O:@B2.o>076qjJ`.9FSA.tPpl[I$iK@J'6TU92J,+TdR9]Fe)'Fsq#q(l-WD?K%@2+>RKZbtZ)u(pK5oM.o6;Z?1-7MQ26PB91G<4)4MkkQ5P6+hXLfc]C,0(+eM(GYj3gR\joGdK/h/3`t:rO]B\do!pTr7^=5M6*K!;Z!]AUU+jVj#\)Uk!"<5-N&lt$Du(2fYbZd4G3TI<E:1L^Xr83bimH.Nk_F`LIPGh3\EJ?o3LP`^J-STJ)l0982k%c@OsXWO0`K%.O!6GrOrNDLZNW45`s=lq&aVBSncftK6-YQ=jJVBMENu6nAe5jABA5CIMl)pf<?,21j)V)96q0CPi?k$QS?#Ue*"YIMrA]RYERIqQMu315PLQrHi`WA>@FEM%37_8>"iIQmloRt]+-O(eKk]iRg)P?;Rj-ieTof2lB'0p"!dh^ZA=oDU]k2P`ET*QQ6f)[E(1kOQ"t+8O^<i$mpCf0f\5B&]L:='6ap\e7S<B\O(2ogQ-maV"rO>.>0l-sd"g*kSeA.]9c4IS?\[M4(>KUSJUI&S5-b+l_+X&d(mLD8]:At:"`$?f~>endstream
166
+ Gau0CD/\/e&H88.EA0'hh&JkHAQs&,!DOO=fod[VgjN?"JX0u+%4,a7jj`&]hfkmQCc?LBTlYb*VN9'ZnXb)fp;"X3ci/t\JC?LucTL]EQnQ8`S,h\QE'?M]j1oY)r\taHj,HBQ#EBmbh;JKIEff>Dd$m"'3!j"Q)*7bA3!.tB8R_GnJI>4,$/NE#S=qkYqnm/E&8l:k+K2E5E#;8R+.TRl1TC*'?/V;_#XJG.$jYh8$%ClQIo(n@R]%UZW".N!ptftC&-2i@3)20Ef@[UR%:5Sd@LcY1B5i+3oIWYu<(%)ODh)2o<(p\CNpCqm>rp:Fc;aWIjr\%2]lC?72"7'_+-.>Q_1pW)4Mo*U'Ynt[<gcGqIduJ*D#h1m3XBsmo3l)91GB[fhVR)dI"!u/Mt`ReF#XAJgYo;.J$S$R:H>m(%i`RgaESbNf(6S@AY_u#(s-89,ZQ\Q7,q_CMdS@_Ce!=lbR6SGj"N15VlJdo^op'i<k9"rD$Y&&(/^JWIUQ4m.jYN:/Vk[@JeY&a@RS*H,/H:!N4FP:O?cC%iaT&&"n]C!Y9Ai$9aZYJPVSt'.n1V[lpId/hM2i(WTXF5@j\5Bj/%C@d#q8uS.`s7":,^_,e0@26uqT[ZA",]/%K6qViBH^fn,.G5rk#^.Z',4[@ne_<)]3i*2.LI_&@ld0pO,WjgE3Ia3s+>@/`T+md)N!&H"%:[\PUb^ktg%78+Puc'PXS1*N\he3<?=d,4?,:&C(C<)pS@^t4tVL[Pr]<A(@O<0X=L<id]VK,/\C$-CkmGkT4<7+d*Z$H?%ZQ<P89!T#Y?YAGm@=W%DEbmM.%X&T_%*^uSf%h;j$LiA$L8OdJF1l%`lk&m<'RnfWp3),qL[LqK6>DsjqCL_&r8m7;-6pAQK1#Ir@J_TFjVK^6T7<^"c=VO2;9>T3qi:+eP_;abUdn\3[P[^JVJm=\QQRou0Na(DO2,90@>$tU*APDRS;_[JdqVA9LQq9cSVXZ7HjbotUF).?V.Ui'6Vp`8MXmT%Y#nm+`MgMYd\%gX)!IDs@H*5cV>bjA4DOTOQXUQoW/kTqqea#T+/!='(osZk:eCo&UNHS*?=mTsY?0HrU;]o$oF_q*.$DriaH#l[Nj+M/on4F@Na6-j5>G.U<htZuWIGZW+3I(\`rsp=?KhmR[-45WEl559&fIF[^:)4h+N"*6A*,0;9$qj@fetd9C/Qo?S;K'H]&k,c.hkUs?&<Ln%2f6u71<J`t^W+o/g*.[6S*iZ49i&0C\<jOSal"+Oi2K+B7^C5R-nPgXda@^S?JiTggC6VVO#s*>QIL.'VB48ed#p'mM_uR7P2IT@C=`kh,Bap.P\(TXJC8$%A6PD$%Et$6FK(_:>:;POR]cuM.6K@bNXilt%aG<5r$c<tQ7U`$SotXq[rl4?-YDtL1rVql,2K%r<Mrs)R7u"qj"LV@Cb#KT0[N;VkCGSg#!A:%:V%JAJh%g'E//WH%@=T3G8>Lgnc,VZbQP/FK=uIT8lF9"k%j0P'<m<05N6O@U,6VJ(u^pgHYVsh4nuZ9YZE)G8lW0EC+`XU5*'d$`IdNp+>L/<A"9Rr17t7<m%V_nEi?-09V4\^Nb9[$.ZtJN`"'k*]UU0c\01>5ag@@@K%q%s^WbT`a#R9b%s7dWDfRks="JjR"e4(e?DPSu#s3p65s%a(8rEP(0(mi3hBH*0%!9OQe0&nOk3K@ng]#=b6=$WEI:)3l/LQ[C'^U1Opk\9e1<92tbo\/XMKU"Qk(`!oQIm)"8SCkY@`5\25Xs>'Fa*prh.=5^#?XT\<CfjoUJ?d#Qn'?'@tm2Qbl+Zud#L8:UJgUf)Get9S&2NJ=t6%5IIg*"a=.HpldA=m?+huuN7U>;@iU6"dNUJ7XGR&([,aIL!ZqouZ5B4t0I+uirJ+Gn,F"nY6]RAYgjh2nK6C!jW;gHLi6AN=OPQ6B\S?RhFf.bUD,o9U1,Hb&X.@+gAA'LhE:=B?\uW(~>endstream
167
167
  endobj
168
168
  23 0 obj
169
169
  <<
170
- /Filter [ /ASCII85Decode /FlateDecode ] /Length 1859
170
+ /Filter [ /ASCII85Decode /FlateDecode ] /Length 1839
171
171
  >>
172
172
  stream
173
- GatU3;01G\&:XAWfO:X5Ugjm+80F(n-H<#H8OI@CQb!]_FPog1SU,L3\7tqhG>Aj-e7RJ=Ns/($]6iH0mHtQQJ:F9-AfH8e$Q*3)&4Wm+5o?pF(2mTh3;`$#"lj8/-c!T=MP#DfnK^Z&@+Jrt(T65VV<KgjA=B`9P)LQA^^+'@GSU:;VeIiR!_^DX,YI>ZES=P06ekeM1l8+r">"E@9^=RfYAm:"66*lIP0p'8K&6pF3G[&<.I/E%2bC>Q'II=3&YgRELW*bN9di+V#b.rkcVX\#%J4"#2s4srTed)G&&@YN=K-:a/7;D+B;X76[!0i(nGsCi;N.cR;8gmr12bpe*OFW7_:EKD_djD0)p^G;i'DlSNWTCh*=a_IR!N(.[))b>qV<g2<ss9Orp!qs6O8\SIN:24G!_d.o-eS+#*-\;Gng+rn#ZS6-S<Oq/qI6b@!(MKWUSqidL@:Yk_3Gt8K-(T6d4J<>/s-%#.5Y'r5G3,nVM2,![T)];TPuU1`WTn/!7[g.3/3-[cYpH4c)P"L)lIDC%MXm\\Yk?\R9!_@R.XZhs<9X^kM;<RUY=uoG[i+NFuM4P%(JQ,);H2)rO/9^_e4[.OWGtBDA!tFbKk`$Rg,:$i)_bj*D(PISUGi<L/?WRoYd/E$pNiej^/ul@X=.l2OZ.Sk+GEJXh$/Dkn&!*UXqgZ/SdBlmWF.1grZ`o7sjg.r@3"3K_WBmAESaF]^"IWXC]n=Y8hY'$tt8TA(@^!'R%NZ4K%QG,>o8h++:R>:Fa%a";>F;haB0#npSOFesO%]*2O_S*d>l4C6'"HpHb><K0<QUUV&m]Q0qrJVBso7fnE;jhcO:`_]o16I3#BaYis'[Armml<FY`.Vu(hjWL+2ABD13)94*6Zq"$[0CN*o0Xt#kgrd:hL%jeHgj7Xh/1X)n_%`U%_+.[0c=+c#_E"UHQCX7=3:;=kXV,N@F:CQjog@W*mVjZR#TI7Fh.dEIdA(`b!?9Ogro6Q#P#N3VNhkm7.g5+/<0-L]H/5%,G:0of,71j*HLU%+$N<s[FHa>Kq#_/#FoB"%Z?PC'.&3\>k*'QOC"8'f&!d"S@=<&=<+Q;YJn*IrR0/Mqk5uN]E,],N4NIktI3^U8l?P5O*@:<%hnZSA?@,K:)l)W5C%t_r[:l!tVMdbt23&nPqZ>RpQ,j?S2(7k]]N#_(TIOM@JR^'G.\+=NH/=rh*fG(^4SP>?=sjHWM)Z_op0(9Zj<Cchcrqi+][(aro>2UbpR"r]<&q*p7d2qW[;ja.U@cRp:!$DuN7C-ddO*PeV@pl.%^P!G<9CT=c_4@<cg4D2l>!66LM?Yq`5^gBM/BQ6<ph_Rf5jO(STEF-2*%RP9WakSZ^#<KB_Wm_Q:UP,?5@hnN>0_DO%QW5H=q5dOF(D<pT,$_$(^a.'O8"l2kmTA]LIdEpPt7hn$"Q]%OoWJnKh#.eer3If2CSOG^o[H_+Tb3kt[$tU*Q)cfom:jm@[brV(`j&]l%ccYMNRBgchdb=Q1"ZJc+O48D+D``b8j:bmh^I>A<3)W,_<2(:sTY=H>YMNo/TDNji7/e5mJl84t&uaWb1R#n\En5OshR(7\"A+#tk5A-%%9n1a3u!>`IBIDfPq+&D`a&n&=Z8ZRr;5-Ff:1m/,=H;(5"*d%:j+7cpIr(?'R<_H*t8/\@oSO?cq*biDk5H05Ag=#s`Z<558hXdF]M#aVHPn.YC_`a$%.&d'I!qOusncG3Gl-bj=d+tS)cJ/?2=NjVorr!%ddV'9R,O.UX/TFmr_^oY]>tmT?d16qokqJjE!/[MT,tMbA<i.P8Ib7Uq?C+,SGcibF29&moY8g@iADP1RHhDOdm_0BBo*]42!qmC$Q2~>endstream
173
+ GatU3gN)%,&:O:SltE7P9#cI-Q)NcCM4NCsM/"PhWVZ[XOGni:(]^r&VYTuS!i/5\[`2&&Yq@<+]@_2ulnX4os$HIODZH@\@/M4%0S77N_Ls5>GRN\mPKtU-QpfCK"Vsigr!"]EVEm6F]frE7Eu*&'QH_0UB.8b9kld^d["-]eP5n]?bCXsC/.LWRPkmO7f%ZESd]R1bR`p?h=Ouo.q)oNIEDN#hP/%:MGj:jXY7`H`g9<AjHH%:Kcn(3oFFkhP1kahlA:h!6\]5.fHZZV4#I)jrn>3L5^(t?22ZWjXr#rG0$;\\D('a3TH*o9$\UF[>O0Ek&:AU:9Lh4tUdb.9>bC7JGG3^I]9W*G+H+q*6G@mdd35FmR_=<EhAe(2q:,nbN]RP#%HiYlb]KSE40a*7A^NUR?H7k8oH/L[L*(L\5*/Di2#:%#j9*=dl(VgK!d&OA1R/9H5mCNm=HD0)$RO.TO(GtoZH2gFW^f/\W?X*sM?hgKNOY[X-8pMX8$k$ibCW*GB%*.f'`e.sE*lYC_`k=7)>-!].\"e'j$c2+;`INmd^=f&hKKGAh1dfl!(q'il-dR&A96+?e&d>ADg&Nd!b`!;=A7^I$nJq#hC>GOMo+Xf^o2>RIX)Yn*%DO1kVQ&lZi^G),Y.5;//aL%SjRpfOVV2!DcjiXi+_GcW13k=N(iAg0:l#j)8o'H<Qt@cT>+`RR[9+lkiRWlqNaY/B;b0:u9^GD1%%1c#!!*p!JZi>f6\'`dpp(S;?FIEWVu9i-(,o--cgP4<W,5Na?6!+BC/M[IhMLWO0+XE:<dhTpOOIa4Oe8I-&hT'*NbJ%(,*N.1R]7qo(n.H9)@RgEj>p[pY,[alZ]@RUT"i4hQ/K):;<:dYd[HJf4SQiThJ#o85dfSA[\EnVf2Wu4AC9np=`d)M*:4KlPpY3mLsY/>4=qLf;)=39<`X"RNm]AHoTJsD'^fMc-_\BQTjOoa*-33s,"=fAk&;6p94sm$O_=?Z#IKf8Z7%o0U6W/$`.)5ZILbLHS\V3<>R_9uX%*9eG$"qJW>W:gmIgC;)pk#PBqZLdfKBN)+f5"-id=jRUA')8rjCWJfSHO^UMI]NDB94<9@)3Q)#&Q"l>o)19:::(AX'/A;*6fDk'l:)nRY5)LC6Tlh:W<g'7)66[E)?NMRLU2#:W`J2[;52'FG#/Z8cmT-$?/`d\=[o;m[jri7F^e2(P#O;kSO+%S+K5)*eqA>#P)P:^L!T_Fr6Z<'i[9?)Qh]7OW./Wk<-TgsPiD;j](PRrq*WPM+-J=1p%u\8S4GYG8*1-'MYIIoKG1T"q8NZ.)3cXUN>*1&#+BquEtCjA'+;-rA*(Np&MTC#D"*)hb*H,fc_JUs;H4X1dNEg_^+3h0N,%-+$Xe2)m/';QHq9G!b>FhBd8gej&SL/3`>V'o$,l')Brm0DV/c'`;02R,-]LFVl;)jB<EW;Hg6N9J,m+)C"1dh:;#jqhrXu7t,as?P)E.]+%5!P\"g:[F,7"D`AZFO[c&H0K>8NUgVf"n8-aan2N$tL_*J<aqAlq;0qErqa9<Zl\ZO9HPG(<\+om:B+$9C),!&%1]"\'%p&lc[:k6!lg&sbG2:hRqFP6u2bOPj#Z8Nd/$\:L"0'+:/YPaiBIFfPEEIeT]1f4okNHI*(^l/V/e,!"M`IX<kjstR4.csSFY:`\VjTAcc#eoukrJCpiiP40RlG.eSmS68=Rc1P`WFR&m%RU\]QLk?T0;CUTFS:bG4UGe)6,1o"s:Zf2+sU_0]Q`?j!iP"1(<j!C/s[nn**Im8+]68[o?=2W)_['L;Iq`ojcGXW1OVcG`2NE_[f4X#8,nT?dKlX\c~>endstream
174
174
  endobj
175
175
  24 0 obj
176
176
  <<
177
- /Filter [ /ASCII85Decode /FlateDecode ] /Length 1772
177
+ /Filter [ /ASCII85Decode /FlateDecode ] /Length 1892
178
178
  >>
179
179
  stream
180
- Gatm;gN)%,&:O:Sm!,B`DF[0@^U-dSChM0SM&WM[1JEBEC6Ds*:pQtC^NZ$?-sEn+1oWU78-4-&B,>U)_*>EDAi7Ab96bIDK'U7Y!&n9d/:W5OjiO,Bb_`tl#_BN`Jp5#C+EkU9o]i5<iP\GnP,&D;BumqHN55$M$Ri_NEI\4,iqOt,d.Lm%*+XY3-58^!mUf$-UlG[2).h5^k5?fp#nmRGW$1fn_$E5)E-j@OSWMGPMajV4n$uk[.KWS&m][hN:JBnJ^`>d4S\>3L)U;Y\Hc&qE;Ip'jDh&?b)lYMPk-24BF4I?AC!(@&q$/Ic,9(\m^;gj>Ncs^)fsY6BK=cP/!-.?6JS-hm4IMk1@L&*L$=@%bOS3he.DW9Zp[<RBHF\]1^V.@oJf!?-2L&o`94oT4<:c72E+dg]aKk:.Q7nn-=_C-_2<25`<ZiGeTquEXEQj1dNW)l/PBAhJj%ase57>k6L,Ys1"Oq0\&%9uf>F"t8+@crXd9(:kKL_R?P'LMAT0AVR-Vaa>IL7k@ptjpJElAp+dee2^GsQXpF?l;'i`cM'\A$;>V?,?MT,c0'YLJHG&q)Y4U(ZWl.FoF-QDql=<KWl\J3.0u68VLKK"Fk)N6!D(1T8ApGPA0GX88'f>-+Pes-/7-4BUNW/h;s&HQRHG6Y@c>ptVQ:0(]3'd[$o>OB'F3.2Po2(T;J_f5N*<Z8'-lQShT1D(LW@ZXX.F,EKfR6,'nWU/8G`er'B[C]<#.NEtZV-1Zi*i4<a_c"UO\2cuj(n%n9a/>bs6MqQNcdqaK_9XWWUL2rQ/,)+4)]1VVkaHeRQ[sTc/4XcAk)fk`/k%X;)kBfma##cF)+4igN'X#ce"U6]XHb$u4;t3OXjUFOX=Go-mco$Ui7'[O9?=L3j2`Y-'B`V8tJ.89/9;_!_&lp-N,U.nC'D`Ieeqirm.44OE]u@]:?qRgmn2Af404Md2/3DZ!(<76<9N_Ht'VcLJhNY%oG6Wfi%<k`3B9MC`[K^[_gR=O<hjMN,5t[>MNeW[/'lR+n:67Y_/PM'4)8MhSBhKe3R4KLYZ[6bX#=0'L$M^IRnh'<9CUhsqg'[d4@Eqq10D/KG%.f3!a?*Nr]02sWGb,G0pBNHDV2.X9i*BpOF%_10T3hJh.RX<>c^$f`.5krP[D6*mooN1E_5&7c[WajG59T'c<:j($b3RYWnVk%B%2!+i126g_SOSFqMq_9gXG#>F6gU$A/oFuOGh4.=0'9,T!BNmuS.8]$'XEq?>01TH`2l?p,L]J+hTN"t>V4#F;T*Tm(XR3p@mP@[-(6F*WYVMK1gG@'#',9Dj@J+;bEFC'Y4*"=D,98qZ(bk"G#ro./SjW)A.iNIB,)UhB"Y.P$j`k"e*-t$n/,k3]]R](,]aD\\XKV-4-gZZJNXu!qE[]R>1B))=09%<.<(NO?KBB=r2!A@LJ<bP\YP`5eS/j*3'93'=W]e-\S:p?_<Z=3FRV-4@H?-O-j/"6,3FE-!KH))RXUNR;1sb5b_6sFRM'mh]@4V9Kl[#DGf#TrRijNrm<J^!:22h/nB.\*Kl4lD^QWlAmJTHW"U^&oSnr^8b8T+9DZlVng0N(H,)H;58;^IWhI&:ga,"mUTok)laEO'e1Jf13F;.0r=6F`(XC!XU+0oieab4Piro`%g.J<op"LjpCHH5AKC@NF&%(a+>n'8$r2a\6%G0k%(\8c1C7k+if$+>93IF_;4%N%p`Uh"tVZpn$6&,jB+_qrN*gktt@93>Q>P1;Nt-O1.q#UfWPJ+u5=~>endstream
180
+ GatU3gN)%,&:O:Sm!,B`DFQp:Q)NieM="!j-?3NQI>19`6;.D2!D:qMq=bq\'M[K7>jS^H&UWDVG+k!!r.b2.?PC,Ad>NpE_MDe3$58`PlutL_*W:E)JoNV=;I\TE_`M=)1'uAXe]T0@jXcq-/=U79:/_p&dP40&eUeR_NWN\31^i:lYr%Ce;;1:\fg%![Um#CnRS8?i=Ou_1>FggnTT`uP,daF*T!V8^WMHSi0'peN4_<Y+BGO*H3eiIoL(Fhf`qYr]pJ;.-e6t-CBXXe%2pu%'V)Zr7+o7PhPGjJjaGpET%/clA[4J.WrCjQD1jeAT$n]F1bG*+'D_E,erIGULji.U$-:+,H^;e!a'cIo!:`UC#E=pUJ2^W\cSm6aBnE]o9)85k;mFaM5T\uujq_"Z.^u^,jhJo(R*CjW&3=`ac;d/Ct0qpq^GTkV#`(_Om.9%o0`A!mD^FAR,H^OT@Vr%;h6<(YYm7N[rep?@?fN#&CjU2"k'o6f\PiWZD4;_%f$k!`gmKWn%-<]@-56`$JADG0/Z32a^Hu'V%/dS@?!7Fgmh\ga\lg$lU'hLj,&%n":e4W9oEk/J4DlhL3:fS_R-nf+Jlj+]P7dA!P8;S9Y>SU4YA,#5X.)(g:T-66ndp1WB)3MN9`_5d$?l31c.nZ)1`27^uW0s=SDD2#&ZH`:ZJ_o):(8FsB;$F.IIFt0]F[]@._Ag[698H'Q^L!#[q21JO9Z:]-)WMKT@]59hKGsYW3E"Wrn3qE'PV*bFd[ITqqhWq!Y,4e1-=']&\uZ(XZf]hrif_pkX5Q8L=kNF.DPp,EZBfmY^=2Ptki6$ker:O>YobV'8,r4BM2lX_mEQG:Q&>lN3-HDn2(oGqFK*%DqgQms>Jm@lHeC&J&#pl_qD/$u3M'`B-50JKfbW&;jLK5[0n>4e(?dRX=G`K*["?\@'[%`]X=F[`F[;BU*bDlg=/E,&5a+G=070.I88Nsr?k>Kg"7OXHL!3/-JNHm"n0300dB'=4j(7t8#1V(Z7Ao91DcaN_*A7i[[I5.]V7DnW!>-kpUS4fs/)==gi7`-_/i^`gNkr5gX(?oHjE%MYW=Y.7nAdSP>Stq:!`ei-F-$Vu)@d\\]d*87pRs$BfDdp.j!8'L%l8,BZcNm)CPs=uZBTNVT46eo54m7[dlFAgGU+';.IBWC*MLBk:I"(V-ue@%j"IkU)iTQ[^^*';aih\sW8PL0cL^@KUjP_PBH6\frH]rRK1G[#)oQV-JSedo$g`-JLuZ<O,m6^2eP8,J8jfMCD]*u=Uo)ULkrXF(lO:Zq?YKsmEnY2p%uQaXJ7pVGAdbfKn[08qVlF#=fQ8*QN#^\ojL0iK\m$#O"eW72HC!KAY"*"p/BZ\M\\0LeQnT$00_KhVq`S'Nb.7Qn!;)RN?43I2&Pk>jQC`uj[\6#eIVGcCol)'a:H@dOq62YUX;S^dc\6P`-k)`Z9a[I2X+>\eo<R.+Eb#`h]-Q>@f3P`"COm45[g:(P</rLUWmU?dEI4<kD`SHp$gXX(Z0'JQlUHG9#DYSZ`rcTqmkFNeZ,rJ%]##?@eE@7j1FF^)#B,)8[ct7'pkap[?^R\^30U:No;HMYCKaO4(2#5U`Jl_Re0Uk1k1nK[G<,>M4Ls0Mi<o<0#Dg"64/A<L(ChAN!bc;QfBTOr]JTJYdZq>u+>,]\q06=U!<pkgXK?,o>[u]2-#bT7C7d>-.KKP2[!9^V*VMqLA[KL6>FKNo@X#G_pW(gtS.;8A9S-[p^Zo#=r_f'M4.3Xg$i`)jRmjdq=pT#8\t)TK]<fKT(CW@:nF)rQrS4bib-AlJk''<//9H+#_Hh2;I,7E!(%i^F_B1iaI?/@#']n>N5NlUe%5QO;l+2O1Y_;uW9=DjQkl\S*5W\`P'!QP<~>endstream
181
181
  endobj
182
182
  25 0 obj
183
183
  <<
184
- /Filter [ /ASCII85Decode /FlateDecode ] /Length 2071
184
+ /Filter [ /ASCII85Decode /FlateDecode ] /Length 2072
185
185
  >>
186
186
  stream
187
- Gatm<>BALX'RnB33%m@Wm1eSBG2IJ,1n.6a6PIn954&V#N"Xn98hu'frUG5Ffu?kJ9iE/8,>7mYq9Du`^rEi^IjR1kmkYf1FMMm)[KOX[I$f>:X4c/jB9jRL'0cK?#p[(abOm6+&;*O"$="Q2Yn]]I"@4#0mN`(SF[8i+^,r[;o&Igb@^#pSS%+#Pj%$dO55<B=.gl4,G/9')26g;*GE$Bi#^d_7#eYup_-\)8T/C(J>3a`I)kek0Fb116n8TZea7;TF9f+sbE#R8H:X=bu%d2G;9h@r1Gp3:g"o(]DA/r"`Cb)YYY)5&GEqLs,*b"b;A+V_N>UshB@CogtS+["'D!-L99I@2F4N[-5;1a*5gIMfl3<&,.>hd6H$D(&^DEhE4bi&?Vk4/l!@.+1=6Fq.IEkn,j^d/@pL)S`dC?1<!2aE6(Pgs$f_2<=?3K1it;RXJbr*%k-@.HEM>9rutcuKC'rMQi6XAMgE3(+cSr5P@XkI@[SoM/j4Bh94meSc[4*=R*CL>.DK$\^O0aD"Hj:VVu^HP6/Nqj=R0Q?;gOH!uq`;'uT#FW.&i,t]fSb=MDZ@J04W.8qP4dK3om=KRd[>mO%:"gt)g+N9M?Por\SY4bbXTuq)Cb_Ss6ElkYA29:>m$F5!u^hC*L=ZK0p8O.2$=jf^g>f`or\PRCqKhY:_1*`b<f&&Zr&"rn>g%%`Qo*k50'(B[?:sh<-0=C1=#"FDs-Q-IS,Z3/@idW34,_uum6L0Xif=2&/+D?X>_]Ed^,QN*fJlG.:601lDH`pjm]Dm.2"\H\%$K1bJWWhFej8oT4)+-jt8N:u2ckkmI[*8;gOGB#B?Sl(a@9V^B-(>6@5HibVI`I]B`;%<+Ml1.+2hRWjg+Q&B,m"Sn^Q[0'NX`,fIRK8CTi+470lp%a:\arLe<sJ@D!GoTR0;06l@)',l.33_%IA6PYI[T?S*Te1g>-"\2n.PM[qiHeDpN=EhN$t[1[E5HIOT<KId-?f\(<LOP(1ep%FF`B^.Cq[@NFAG9['mtN^eVd*#/AaO\ujuH:Tg1`R]XQC=hsk;XbZnOru_c(<ga#mR-MVKo*LNB9uiKRtW(m%b[!k9bEKUTbMn!(+@,q]u$qIKfNG$2<+bWTPI"UO>[gWX6GKU(f27&S751>hVskH89=(o=S%$T+9&9/,#/"/=;sU#-K,oFksS%DWLHq#CpmiN+5+6KU;C#i0@9h0mA-0"b``)`:):l,!+L,jopC\aLPp5Z=9sl7%tcnIOVK]6r\>5B1-&2[gQW!7l>r#!Gt)Mo*%DuL10J.a<%1%ja65c>-.s^*$YlBdX(lN,5/sXc-=EVe(k9/G\GQ0^rp%d6h-E`nmr)gIGMgCn*t:AWd`MN4n$oGl$t-DoQ#BUb<<#HGDs@>Nr:1-o7<%;.MLV']a4CRd@iV?r+I--("/N$^N*DOmn5?CTdRM8jRlh1:I@40gpH,4#3g7fh9QoM1;p_r\!EcXd@ZF%(M'T'QUaa!B>h-s!c>kqc>#WJ]/p_t>l3u3?dNS+j,-6n!dO'Q6<@F0^pDRMd$D\#]EJ'9R:MLO-6'Xe\kd*GbTKp(+;_2Xf7^cmKcGW6O2K8X3I9+ponJ!3YRjq:X3Pdga&k'kmWDIr,X:A-P%7Q.+,WGnTp;%?BRd9'@P-d+/;+G_[T$?+1$WE7TCCr;o5O-]p8WkIL9B!q<S\TT)a8"UjO1?^nQE,AN[%lqMRNk<)O62$.8>bnk_:"PT@s%RkUs`8B..a"iD-#/&gSiR]cFS:AKjIr%"^A"\i^=Ruh!BKXh%f)jqQ0+N[Gc41D$^8EkSU,7JelHDYYddFX/$L7=*B*Wdn>S4h\9afD`W/<0^lQWUa=F6T4,:64#H:uk8\oN>D*m/b"N*.$:0uc&ji?D:09"%=Q"diU5KN4@)mEe[XH\Y6J][b6#5:I?ac#Lc7aH;ZjHK\8;]XZrFQ.A#=AKLTL9]<S?6pgGbSDVJSpH\Z"AS(3_j'W"=*N>C"g=3=4["eFI5n-UK(Ar/IB9DmHAD8c*jk9;C<?QTHL/RdMCt)MM2IuWKS#?="&d>f'@iJ3;X52J^$4~>endstream
187
+ Gatm<>BALX'RnB33%m@Wm1eSBG2IJ,1n.6a6PIn954&V#N"Xn98hu'frUG5Ffu?kJ9iE/8,>7mYq9Du`^rEi^IjR1kmkYf1FMMm)[KOX[I$f>:X4c/jB9jRL'0cK?#p[(abOm6+&;*O"$="Q2Yn]]I"@4#0mN`(SF[8i+^,r[;o&Igb@^#pSS%+#Pj%$dO55<B=.gl4,G/9')26g;*GE$Bi#^d_7#eYup_-\)8T/C(J>3a`I)kek0Fb116n8TZea7;TF9f+sbE#R8H:X=bu%d2G;9h@r1Gp3:g"o(]DA/r"`Cs0*LTrTB^QsBRsZU^CrdieU[4P,JG8_EGIp837($JTj"&!Mie1f&/)EKm0R`\t,T)id.o&D)[,["dbm]A$+_(GiRM\@K8(1"cARLQHE/K,cT.*cTI-]:h^fS/V4_o*pdj!G+.?FKcr064W&FLQq0[*P^/`2OHVQd231=+g`3j6jN"X)J^$d2%EL(&ARb5hg)A?,JB9X7Tttp@J/AG<C_[IMrAiacpH\#-ZU+>a3u[ed[ik@r]]I\SL'gi93rI3?I[(_9:Z9$>)AD8qD&\4?sNXm:s)ao_6h!c)HQ/LBGZ7577"%(3_6MdBdJS`Z)bPPAZ0WQ-o3%\Z<Zs:@1@88SV$2L#;@'uBN>UAE>$Wf6C'H*2&EPJ9.goaFCA)]ZHPihL\8,PliX297^fs-`]V.$S-8bY(0%Y9_+SWlP(=3Shan$?3(_WmM>5ta3!nS3\^7p_br+oT#RHmYf<>LM3XJ'CPTU\QC/F_i^trjog?sGs9L2R]V?4:,OD;Tk/@b`^8]HjS5nZqa"nVu0!%g"@*TZ0)a;9i&;jc.GFigK^e^&#SYi.;_4>D;iiSnR>n]`1(VtQ%38;Y."`U>'0U16RV^)mq48Z7l8@a#fjrY,8q%^i07!1UQhE$bVZVn/MI=1U>m7g$@D`N*n+mH2!n\TTp`hTbGrmHrVEg=rsgZF==*c-6$)UgK"LY$X6&jm@2MYN4S^>6?^qPAcVIUf[ls"qu(FMkcE-,mT-R7&8=cX<*NuENuq0Y1ba\YS92)VBcGmPm&t6X8>`+=^bcXmFgUPo4HrPQUA2l8Q,cQHRK&)ZNU^+IBTm@BOOY;ABhVL1$G(R%AZ]e_.pP*"U7p225_9i[(#hl#h#5(5M#`Smt\YmO[p/#4k>@L]h.u'CHBj?C[.d^)4U#\ksr2MZD]ICi_-WY6T]!/2=mVoN0D48%=jgOEBPYDhVmIa//A<IoY[>^6"C.YNk\8A[S0F1au1Pt]_^FD=e8LE1T*jcYtPp9.94M$j"WS+91_$6pju\Jor=HbN0!LDU^7lP#0,P<+7B,W\A,U2=*I`pg\[JnmG58Ab==qGSTOG;h)d7T&d-eQ@--,W3n=7-c'pbE1r"D>5S;d2ZJqLRd.-d#r"t4R$:q!okQ!%^3o_";1V?[;]<os?g*Vj_@UJ9Jp&.XbT?^uR'pDq6`"]TG63*<&UR5O(F!=3@+DFGd-!,5pX0Z'VZ.@F0Z&>42OubsQP]R1YXp?Og]sNV=;&+uMoY$!HZN@,C@,.D"eruPUH;N^"#l:Vu"=T@L`Y;'LXH@AQYqtoI^C?_57A#k<BKX6>fqqB+E_\<LQNWHA8h/=s-*)[J>sj``$OP+o[!clrX6+_RQR$F-H.3FsTP(U?`kp6$j]Y&GrK$es<0H=!oMYH=F=6S7i%]\*e73BR[cQeG1%"1NO64O2^n\F_"d3R^7BeVF_AJh-1T>Ir.a!/%GafF*gG\>=NjEUE?(mT#>eu`+[Q)Zg"ZO&#Ap;4>L-DZMASjD4<a10+'flP5Z(OOk"`2]8pF<.2_3H$Kch*Bpml(F(jI8nN'?kf@/87\_o4M1nlOFANdlBqUl5!gJY;-bX]0_TjXb>'bMA):J2\rnGUZeG)2:up)^276MUepf*<mY#/d[0?2U%:o`'5bV"2Nm&qFMHMEfYJ-7+t/RC*+s&X+eImu>+f(E>-+.MKoQgK'>_aPCRXtcfTe>-*??JklY+h6<D.qJ8iq?'?aD>c\C=)>-Rd%bZF#<GNaa/!A*P=na;%=@Yk:'8%aP%U!>`ph~>endstream
188
188
  endobj
189
189
  26 0 obj
190
190
  <<
191
- /Filter [ /ASCII85Decode /FlateDecode ] /Length 1934
191
+ /Filter [ /ASCII85Decode /FlateDecode ] /Length 1932
192
192
  >>
193
193
  stream
194
- Gatm<>Ar7S'RnB33!_Db.pQ5?,tmN0etm*3U.*P\lcUt!N'uDo,Z1D:>h8S_n"Xc$*67Ba2Jc<IjS9;3ST`)ogSqsJN9L!RNF+a-\27EOj&mGJhU'C2i7!6g:YihXa`=7%7V'&9@/CP8j["pOTbCR;(kq$@^?#RuP['OhVo=i%Rk-3"m7B^3mn<f7Dt\G7@$=)e]@mU?0="lh_KJ`)lo@;L*^:prUQ#+Bd"(%'V%3g5fV+EgZDObNf#2_/.9Lh&"E>u2MH=3DZ,(.8%\=?'Af2V[$@Tp[r.U)&U48"`E`EI'doj*oeWc8FR>Q%X$dC;<p;C>I),4?dFG";J/f6-d%h3^JVB,nlh&JQ&0X4VD"3*6`",>j&/k*0R-K]hKBBS_iT,c2@oZpSl:2!>pIDAQJ2]=sLYi\)V^B8YW#'o4XaN$'^H)sT@35%I=UQVZnY'-L7_dJ;g9[!mCFqAu^GFN%1#oe+KUtn#+JU\#RfV&DHB/aohK+&2Qn_6Br]Hl)U/S/)ub7aqY?HPmZR*[?0X6#42SHrrW.np)'-sh`eTgD>P.7l/gF2b-:\K9.Xcmr8`mXTHib]<Pi2ER[#.SWgg"cKRMi"+%bnP&'Fa@je+<925kjmegA,k<psP$4/XDBl%*-)iBG,3.6L7Jbt%Gtr9CUH<-CWXX2nbH`>Rm/\Z%q*HV_`AH@u(V4P^<n*lDI&?[*Wf1Z:P;B)g=$)['#n]t@>a$LH*QMoBqK%F@7!.([V`]>r6S^!S65KpW"G-DW'%?][i1M1CAj.2O:<,-5TQ7@_QO//OJ>oC(qpu#m1I$<%Om8qt=Nk-p1u[`CfW^`U19"/XNdi!=2MQ7m,#A!9Q!K[d:r"Z@Mo1YhP::pi1&^i6Z#=B>+,Y#el^,H:HMlmp>i\W22Z;%M6o6*^GjAX8g%tNb%s/4;2)-u\2/4,PU?;h5RXB.N=A^1h[%od:D<IW?7]n^(baSN17M@,Y&ttDIUq.f%0L76sRKTI_"S3Ka2'Ho(q*Mkh26V2BZgh.;Q=QL<N&1'34N!JQ<S%:5hAML5A3*QFpP.b1c<(m,<)h#9Z!E0'&.M>L)&S$41e#&OnV]o@YKW$qO;C=We;2NgAFj]W)HbARCOHHLQrnLGbqZlV08?=gV:#18-ZY;)p4K\0nq`61lS7t>&t6;iOu!iVk,nS(QO.#BYQp<9=r.7EY);$rfF))h""*0$mm7a0$#,9pGj_)l&(cesPuf*p;G"A/,GDlP1)&,0T(Du]3CYUai4^d#"kujX0Kr99p_nBF4e3>)b`r9._DJl4-#`!qg?Idie1p"bf7L'Bg?@+(g8.L8Y!9)5k;c3(9$nnA`D[7dG=NQt\36dS);K`:]P4M10g#gRe.NKd"qr=,YA%jhD:)h*@el1bE]Hs,H]iY,ord?-1u3coh_L=0T!LP.4R:RY\-K*NQAVJ\6b$<",S,9CM[ZfZ\_M<bZ@'5tZ99-!XNpQPAF;oEeTNu'7NHV4Bo*[K1pCb/(j%UH-.t0;rO.#_p[r3@b&d8Q*7+KthRIj%c;CfIlrqK$f+'0sHq/+-;RER83CgFeqM%nKWXe[KJCmtHrS1r;dCj^5*?1JBa>u<31JEc)9YSob@&h?4(7k/u[(Z;a<#^MrIZ"Eo?(Tm^MdR(%[1Lh9gDmP"HsL*/Xo#2aTsJL"RYqm6C=E(^I#6rHRjQ1bLR.b9Rl\2<Yl)d)Tc&#jbIYp;MC/s;0IQsm5/^GVlYgn$-'.6@6HS"&mFU;s/<MmtOq+`h96@$T`r5:b;@1fVfOQU\h,Wm3<N5BsBeIAa/d^o\-;*m]6&GJF]tW`?/c("1(?<,>9!C32&=L-e^M%iWFWH[AmlfoI`UcBt1a9.Vl\dqe*\%)f6DM^;K>Iq]Mt-Vbo+u=@X=Q)S2K9]J*O8l"(.BSRm_fnLdjQ0!V]le#dqEjm*tN\Fa8~>endstream
194
+ Gatm<=``=U&:XAWf^Z=)DFT2%+3@/Sa**V;-AnS\V:3i-,XfHq#mLMaX(hQ[(VE/Z17LYZ8-0UCIZ(l_'+B8XollW$r%Wuk\I#,:o-Kb6EFAb]cK7WhO,2at^>f8L]`:Pf/B9^)&7fgGj6",c8J$OU\=lPHht=dj5VcG*3AQ+E@:7_2&D+:;bAHr4_-iH/::lqtXqM]hOJ(DC2L@&0E/trgj$3gOm5H0_PetJ9<pW(E*>5OjRb3qjHH<rh7OSad4FHrC*]KJRd?1>D^c[75$a+(u@4t&K!rNGqM91ng4<6/4C"/rb4@sh/q@2T=0Rof_L7E(<"IAM!r;=C:&#d?_S`bOl)pQL"$n(a`BY`7cm3'=2\HQDY(gEX%A9ReJc.V>$0)g7sndMC'g]uVg[))k)LcOo)],e-;Bk5u"O\\E;ZUfXN0mIn'K9F>\-HFKH^`T;?[XKC"i<PDBh.IW'":[J>UsXF_L4>'b0`i#bT!.*`N\WHd_!VP,Z4\\jPRqO81lh[JZ;OXW_?mW5U.SH_WgF.qY8)"]"OW+)0bdODRM*QE5?F(iQE(=n\QXh^FU'a<@%,!6q0WC#O:$Yo.iR4ha<*-Hatf)(5[Gq/VE@XhQD\Y."4*aLMJH@@\[@f0Pp!,4nViT-7Cp<ZGtr9CXZP$?=<$brNb1`&g&jYeng.']8JV+!(qOLm,](kXSOp7(18@IHGXa"XAu@EOJ:rneFq_6[8K+6#d\395*&m.3O.X7MN"ZM!"\*6cOnrGuVq%YP83a9%Hp$)QN^T2,b4UWs`9cFa.ML)$Y8o[Lr:4DNj@re(Ln0G\B(G7eZWL`^Y#8:qIih3>7HI9i*j[qk?'c'uOBWJ8`tL$OQ0NU,qX92KYA97BMK"(2f>5pZr:TSbjEOmurbQ7W1h&kXf"7rfp%(s$i=shl`73/cTQ)(U04J*Aq.)'k;.*3K!?2I%c:)l7gb;dm2>sM]-?O4G>[f`,EW`[WK!B^*'9j14REo$8!;!X&/3-n5k1-VZ2P!H0j,Cg>G%T<`VqFt]lB\3*7mk_0]n$671aM7,`k'kh;+[=u`Xj^d*1AG.0Gnu,L[jNc00VFFBf961*']+S>*QH>lZXT)^k,ToloQUoa/\f\No>)/0e?>f>47NDaMaTg(n@^j-_Tj1O"l,WY#mb<)3rTadG"V?RIJDh%j9<%FWglg<ACY/K)jI`TR>/_/ukWj@@CXS5'KcIL?g0Ob8V^cW?aHVOg)[%1*+gMbLupF*3BumiP$s&q>3um0XcdAp_nAY4e3?nc]nT19GP78-#;^mg?Idie1p$8Y(a"o.BQgfBhXrI]`,Q!?fX'"Pe9S&P,/T+*KN&Di=;MUWcA&IMl*mc7-Ie;5V5hgb[=['j=RJC\34#S<]!TS.[#?,gQO1/TuN+&J9Lu6^8!el/>mdcGh/u;nGl\#2!&`CL?NAP&O5d,4Yj[dch5rHLq'[,Z9:,2=e5$S87.BlWaU'M*-G6,DM^@:BZR?MiLlq`/]jq?+8450UT[2";iZ-Rics.cnCl.QFH-NO7;o^R]lod:r<'_BQD/f@bp>jVTPl6DXQi'C%#BmC\'IdGS_S!>[^!*lKPZ9N4%&hNcf@0Y$ViPsS\R[d9&$D-`+gOeJ_a`:oKH&0_]maNln&>tb!*j^'joSEkB3D^;XCKRV>;BiD7+81&NmnkUJ6s:)FM\qdo@F%djK$GRm7Lr[UiZT,KXC/Qr?rcG5<Vi'Nop\lRmH6^ZAASqIn31=0Ylc5qqO'Xd$WHPXftJgH[78oE7,;MdCUm];8N-qEsO@EMH1Bp,1m,rpQMuqd-tMl!asH`4QlEI7]c5V/%2cmSa'o]3DK)R)FFA$0r>L#IRHf5eF,DqrDuGg#i\]>o%2i#'d\G?CniTq<j2PZ0nrLi;p2NQ:Ypjm"CH^YiSbAb1bo*ca_[d)BA\\pAr\2~>endstream
195
195
  endobj
196
196
  27 0 obj
197
197
  <<
198
- /Filter [ /ASCII85Decode /FlateDecode ] /Length 2140
198
+ /Filter [ /ASCII85Decode /FlateDecode ] /Length 2191
199
199
  >>
200
200
  stream
201
- Gau0D?#SK;&q0MX(uV,R>0&Nb75DZ,BPf-K5ocq_deg[$<t]#+b:]-%?1c23bYk6J<u.62>oU5NiGrSnbh$!DjPndts0IUHVZgA=o>pN;Yp(iC6<\c4lc%P\B9#(Hj"M[tRjPWh`t)Z=8kH54C-8#2WKSTA6;\X]IN2)(pIS"]rG^n^';gU*UuXpM&Go?)9UP00'N2GFm3GPr\ir-rm[:G3B)Wjt6j\Pj<>5UVY6<`TqL#_-4(50gB=]nQ$%+Cp@Z(d:_&Ohmi[8@2Gei(EN]dK2()=N.?^R6`b:Ajc7"5dH,'@*<GiuS3C*hL)\h)R[pU']fM]Z'Ar^MJ-,^qir[S-=[r<rgaFjlH3f^0^*.bluhd,)bp^qkaAmsI`E>QT*<c"qk'iVIR\n%[X_?./tfcP=/nl)/kXO$rT-ib20T:K_bs=j=FMW"&_se2\DK\n*>FNDeo+!Rl/e9g4W<^!Jg2>1JOjUoc&'>SmrFWDmq<Bb9]Zm03CiDr!AZq=@EL!:FR))hm5DKj]%QBdFY\f<S7j@?c5:NR5(L>73h$(lF7PNRTJ@ad.m[9PpWGs*@\H4)KtK^hSuV[jI2<NN-Q,qAm.JlG8rKX&;*f%fNmm]YR(el_7]a/m"btc1;rIC&2j;V-(kQ]5"mB[D]3(gbohHPq$jUU4',LNE12l]=g4>>BY-qb+.O2U2!;7f.KKBb6%Z'KUV*Sf\*<@:aN=_"Zn-TBr+fu=]o"F14ti.3QgPjekYnGSW%<bYV@]9.f)RcIs6pl0a\RAhSo#sR?fA".q,)p-FER&fc5@!f1.a_H\LWCI4[=!;j$K_167F=2DVld9ce3R$M.LPJ!1ae$R8ln/,oB9>H)uF<g;]QD_8SqbX_3<kd**&]:1JQ*I+`F,dO+Z[)tAAAA'Q+1l_Pffm-.^NV#JJYjs1.p)JY]Xn:`@9doSl&_$cR+SX$N'@_Vh-@)s7pgLP-g.>Eh_O""0[jaN22&o*oMNkt;V=PfI-OTnIp?bkZ57X_['lG-/^9RHgg>DA,[mf&WGF\K43p%Rhr?2"rF^BGdh^,&M2]L;@Nc2)1CLh++^N6LlW6e#$%>oSG)cA)1J3J&lA4hV`d39i:1?JfXS]GVF[F0$4NYEPPkGBVWn%VEMF`15rNERD-d7^C8"0q6ZXLR^XN2XfkZ'FJu3bjFhP$3=")/=s[\Yn_-`/79Sq(4gY?&L#<`r\t@GOd.m?L44:j,31PHAB=o^2^_)#-7J0B`rZuTG,SP_)Nr=q)HSF&cf7PPidEZkCpi)>@%X[eY7@Vk07.K$i*%>:RW<rQ,MH-Ps1d[E8q)rI8[:>n)iY2'hJ/\0`(5%Ec,R941MBl7GSkU!^NY%Ss]lPH2EC+X*3VcoS`[D8cWn6OebcaCKZ0.$(S:p+HD)A7OPujG4gkN;:iru'%q4FKeW&sD[9+>n$_\5R=DSg?J`pk4#H9j6Jh^q'cQ"5E_*G4M/rqI**Rlph)2M#d9>Q2,F1h#N(u)c(r0B>e/U,FU4M4Fr$[6W$)^:o3h=Au[kF%9=d[5mjSkpi>"2I5$FB!M,3TI,a^)SQ^"q_EAg<D],r=$+^;hc"'XQinE^hQVPa5(>K_4TSJe:-(jS5Nkl%$HN>aXi"`qDrp]G#TfqVEuJUg7RC",nfK0U&lpJDb3u5;Bo-2F[t7UPpXV3'dK4q<l`-I!0c@`=Mb@HL*WX7.eh>,X9,5QmiYTnTgLu?L$sSHo4M@IurZ)P^;:2otjR`UMMU%`?5Nm<Palr5u4]Gk6#fZR#Z:WjXp3@,kPB?&L5QL.mHKUT[8$T4V&P0qSV/'XZU,-.U+E8%Jsd(%fcJ'a/ds1X8hi$,e!**D>=UnDNGq:0-e!EmAfXtm<Yc,9S^49]t^4EU$oNF@FWet.0'+g>b!d58M07%^?*pr.TL%U[ZKd_"hd*E3?G?<Ih_Z^YAB<kYnIS#S+,N)s8*T84XUGk]mhW&ITCX&I!H91F`k]*Ql2c_W:Y5YM>KI]o?#?Im5Vrl#g`c43pD;M5Mf'>!'HfiCU#JB_q$e%A&Ds8G=$JI.f8eT^&YC5LmR@BK>sCK:<Ns"HW-q7HeNiBL'9J;U>#02!:EK)XVe/W:';(H9KOuUI.XBQimdZ,FgD+4Q$L3S^2,uTp*Tn^8=]~>endstream
201
+ Gatm<D0)1;')q<+d8a7LQ.qHV+:sX8qlj]p=f:8tX!i=e7kg)Q#)4-`?>\MZ^Sci'a^/,Xfoo^McnJ.;5Mc9[2]fO)p$D^c+SthaY24Hbq6X7d(H;FI518iXin"RYSbZ+oP2jer>`n%OOW,WXee]VRNkNAfj!:KU#ou5;BB8r#,cuO*E6/ELfUXAMK\eQV_sWp85'SKKT\o.T@?@u_3H>'mdQKC9O(Z=sJq+18VbnfEhfAR6dAn:oeql3KQ$0%=(X?tfJ:jMT'?oqZZ$8ChoqpcnWCr/$hRlq7K36;9S^p4/-2L'!>%q+%\;ob+V;$$]X*X@J>(!*a%kQf2UoEh$IP`"hM\!8p$j_W:Z[edkm4;$@gc12<_8.bN_1>\VHqLJMVJP4\L\^*D\(;"6s7PgBQEJ;W0(>].5<0:#_O]!ULP&ua`fd6kQ$b5ag#.oZR8II9]?Fj"dCM?7^atn%Qd):=0<dnn<qKiGBe+4hM2$GBCL*JF3XlS$p87`iCY^BKq"%TU!:Eu;)k#W-R:'TUXX,idDe,\[eS):aNA.31CC<N6(fX+X7[fT5APJ/]<,\VLs)OseXg(JoTXDiP>SF1TPqHY$F=4H'1kRZ(<k3[Z*Vsd+n,XJ*Y#W$09WgdQ2pY8FD<U:+j^KZ[S8.+gQ4gYfFmE#.<]\R.LjE.")l$(!]=g3s>IJ+/bDbM#U8W*HpF\ldEs;F\6;k/oo^'Lr8/#ZqN#`%4Znf4c1fmc*XMN2_%!cqD9;hPc:I['^Z"eO2MWctKr7sBpa"W=?W;#?0+,jH=;htWu++t5U3gq;>nN+uk40n?<Votp:X9p_"8^4E$kshP2UWVUK5g_]$Q+tG*[]5I4_`Rkm86tFLq,ZSP+)``8Q"T.Jhrou7ki),\nZSqT\d0MG]#s6$_b6;""fJU1BZ\7e=rN&!,(kU<YraWBlYiUQ?RMPoMagD?O+]VdIh#9_*_>iI(\g:@+PKCh*o*++i3sRfnMM/!$^-a+.&"gu4I-]\mIWK];LbcKK.,M?."#[u&%R22[J-](ffG/k<t4a4K)RV%5&jnN9\qY%fTD/2OiMZ)bShpdms!&7Kab(OZU(m8q^R;q#Nu9-+AuB^71GU9PqbH^ksT9=Wg4*@lpThfHu<s/q#5p(?$Ao+<iPa`&A;Ut4qR%'aauUg@73Q<W3*_V_5Js@8UC2,VT9plAkk5&L_Zs?Z[7/r[M2B37g2dLXZQoX(O9YP30ipFG9!^R40.+UYW<.(7Y'Y31-odmb*d#8h,'S3!6hIkLA?;D)i8di]G6?(MIMXjS%7<(q*[)ARND;lU2K)HS.7QHE<c>)C$9('qRG&_+b(D"h`Y>j%HQ<^AaNQ1h4PA\3aHaMKQAg4*?qTKeT9pjqalJAjMi<5pM"ET!*^'qA@[7N%:TsA!Q0\^GEduje.!miFlu=%A,lH4Z3iaP'5PAE^9@-h(=VTqo.LU0Jcg3TXXt(_g+!1=D3m3`aQG*u.#S%8pe/m`6&f!0aD8J=W7"[M&c>RHqW[Pr`o/p-$S.P-Vik=X95sg(bYFlPS?]lZ\i$JR$\DQ^>W'+q@"6U<CdudD<3tg-8p!2NEqY_?c1[fID)MIcSoaMWT6iWPcV\$:Y9.F(<,Od8A=7_Vq-X?O=Bn&S9KHj+/M>fg[Z.+\0$Y,VdcSq8m>.moc3oR_RUkjHl39%pEVL1n*gL;i&:qoiU<Wl%%pqMM\stui+%,Q#rk=pAR@TG2\fT"T0fO.i`E,/Xo;\.er@206X._bZibD`kJmm1;``5^Eh'+J+[HSfK\sG7pl(n6)Ua)DT`fBQM/b^65lFYW_7tqCVG,kRm5jqj"H=Setk.uK/Gt]Sr[aEl4*0,sDrqYrB2tsd^rp(.eXP58GnsEQu&0?T[/=;t)/Gr/=?>CVZOOsF]%_<J=Oa.8`W,+p%f2(Pi`5!^Z/5uA1W<$/%o<'0&W*9UT]f*2]>lSbHpf"A=&Ftqs%Z).rjY.j"mh!(=)(9\%eYpf.hIc??XM/FB>?F]r)C:O1l`P*mGXc;/JOF@o_@8&H"q6l@6J!=J-3O>B")o]tC-<PrTc+/"A)E-FGW\>$9\uXVQ@e3*PAWXuC"!t\6#U,lHH--HjMe_2:lVLMJO6Jc,PL3r@T]sY"Be2G>Ma(@i0rOV0V@_oQ=7jZg;q]?IKr09<q'n\c2Prlc*>JlF/3X#`W#p[\S/&~>endstream
202
202
  endobj
203
203
  xref
204
204
  0 28
@@ -217,23 +217,23 @@ xref
217
217
  0000001873 00000 n
218
218
  0000002063 00000 n
219
219
  0000002253 00000 n
220
- 0000002488 00000 n
221
- 0000002702 00000 n
222
- 0000002948 00000 n
223
- 0000003018 00000 n
224
- 0000003352 00000 n
225
- 0000003457 00000 n
226
- 0000005550 00000 n
227
- 0000007698 00000 n
228
- 0000009616 00000 n
229
- 0000011567 00000 n
230
- 0000013431 00000 n
231
- 0000015594 00000 n
232
- 0000017620 00000 n
220
+ 0000002489 00000 n
221
+ 0000002703 00000 n
222
+ 0000002949 00000 n
223
+ 0000003019 00000 n
224
+ 0000003354 00000 n
225
+ 0000003459 00000 n
226
+ 0000005553 00000 n
227
+ 0000007702 00000 n
228
+ 0000009775 00000 n
229
+ 0000011706 00000 n
230
+ 0000013690 00000 n
231
+ 0000015854 00000 n
232
+ 0000017878 00000 n
233
233
  trailer
234
234
  <<
235
235
  /ID
236
- [<e2fbf8aaba54187166a9ba816fb1dc58><e2fbf8aaba54187166a9ba816fb1dc58>]
236
+ [<a8ed54167784a3b505d33033840a1191><a8ed54167784a3b505d33033840a1191>]
237
237
  % ReportLab generated PDF document -- digest (opensource)
238
238
 
239
239
  /Info 18 0 R
@@ -241,5 +241,5 @@ trailer
241
241
  /Size 28
242
242
  >>
243
243
  startxref
244
- 19852
244
+ 20161
245
245
  %%EOF
@@ -0,0 +1,76 @@
1
+ import { PACKAGE_VERSION } from "../contracts/doc-versions.mjs";
2
+
3
+ const docsDirectory = `gitpagedocs/docs/versions/${PACKAGE_VERSION}`;
4
+ const localizedPath = (file) => Object.fromEntries(["en", "pt", "es"].map((language) => [language, `${docsDirectory}/${language}/${file}`]));
5
+
6
+ const menuLabels = (titles, file) => Object.fromEntries(["en", "pt", "es"].map((language) => [language, {
7
+ title: titles[language], "path-click": `${docsDirectory}/${language}/${file}`,
8
+ }]));
9
+
10
+ export const PARENT_MENU_JSON = JSON.stringify({
11
+ id: 1000,
12
+ ...menuLabels({ en: "Guides", pt: "Guias", es: "Guías" }, "guides.md"),
13
+ submenus: [{
14
+ id: 1001,
15
+ ...menuLabels({ en: "Configure your site", pt: "Configure seu site", es: "Configura tu sitio" }, "configure-your-site.md"),
16
+ submenus: [{ id: 13, ...menuLabels({ en: "Configuration", pt: "Configuração", es: "Configuración" }, "configuration.md") }],
17
+ }],
18
+ }, null, 2);
19
+
20
+ export const HTML_ROUTE_JSON = JSON.stringify({
21
+ id: 29,
22
+ title: { en: "DOOM: HTML example", pt: "DOOM: exemplo HTML", es: "DOOM: ejemplo HTML" },
23
+ description: { en: "An interactive HTML container", pt: "Um container HTML interativo", es: "Un contenedor HTML interactivo" },
24
+ titleIsVisible: true,
25
+ descriptionIsVisible: true,
26
+ path: localizedPath("doom.html"),
27
+ container: "full",
28
+ fullscreenEnabled: true,
29
+ blockLink: true,
30
+ }, null, 2);
31
+
32
+ export const RECIPE_ROOT_JSON = JSON.stringify({
33
+ site: {
34
+ name: "Documentação • Guía • Documentation",
35
+ docsVersion: PACKAGE_VERSION,
36
+ languages: { en: true, pt: true, es: true },
37
+ nestedMenusEnabled: true,
38
+ ActiveNavigation: true,
39
+ RouteGuide: true,
40
+ FocusMode: true,
41
+ focusMode: { copyEnabled: true, downloadEnabled: true, sectionNavigationEnabled: true, documentNavigationEnabled: true },
42
+ icons: {
43
+ defaults: { reactIcon: true, size: "22px", colorDark: "currentColor", colorLight: "currentColor" },
44
+ LanguageSelector: { tag: "SiGoogletranslate" },
45
+ ThemeSelector: { tag: "LuPencil" },
46
+ FocusMode: { tag: "LuBookOpen" },
47
+ QuickNavigation: { tag: "LuSearch" },
48
+ PdfDownload: { tag: "LuDownload" },
49
+ PdfOpenInNewTab: { tag: "LuExternalLink" },
50
+ DocumentPrevious: { tag: "LuChevronLeft" },
51
+ DocumentNext: { tag: "LuChevronRight" },
52
+ },
53
+ pdf: { enabled: true, previewEnabled: true, downloadEnabled: true, openInNewTabEnabled: true },
54
+ },
55
+ VersionControl: { versions: [{ id: PACKAGE_VERSION, path: `${docsDirectory}/config.json` }] },
56
+ }, null, 2);
57
+
58
+ export const RECIPE_VERSION_JSON = JSON.stringify({
59
+ routeDefaults: { RouteGuide: true },
60
+ "routes-md": [
61
+ { id: 101, title: { en: "Start", pt: "Início", es: "Inicio" }, path: localizedPath("start.md") },
62
+ { id: 102, title: { en: "Next steps", pt: "Próximos passos", es: "Próximos pasos" }, path: localizedPath("next-steps.md") },
63
+ ],
64
+ "menus-header-md": [{
65
+ id: 3100,
66
+ en: { title: "Guides" }, pt: { title: "Guias" }, es: { title: "Guías" },
67
+ submenus: [{
68
+ id: 3101,
69
+ en: { title: "Getting started" }, pt: { title: "Primeiros passos" }, es: { title: "Primeros pasos" },
70
+ submenus: [
71
+ { id: 101, en: { title: "Start", "path-click": `${docsDirectory}/en/start.md` }, pt: { title: "Início", "path-click": `${docsDirectory}/pt/start.md` }, es: { title: "Inicio", "path-click": `${docsDirectory}/es/start.md` } },
72
+ { id: 102, en: { title: "Next steps", "path-click": `${docsDirectory}/en/next-steps.md` }, pt: { title: "Próximos passos", "path-click": `${docsDirectory}/pt/next-steps.md` }, es: { title: "Próximos pasos", "path-click": `${docsDirectory}/es/next-steps.md` } },
73
+ ],
74
+ }],
75
+ }],
76
+ }, null, 2);
@@ -0,0 +1,142 @@
1
+ import { COMPOSED_PAGES } from "../data/composed-pages.mjs";
2
+
3
+ const blocksExample = JSON.stringify({ pages: COMPOSED_PAGES }, null, 2);
4
+ const layoutExample = JSON.stringify({
5
+ id: 23,
6
+ layout: {
7
+ title: { placement: "outside", position: "before" },
8
+ description: { placement: "inside", position: "after" },
9
+ },
10
+ }, null, 2);
11
+
12
+ export const CONTENT_BLOCKS_DOCS = {
13
+ en: `# Ordered content blocks
14
+
15
+ A page can contain several Markdown documents, HTML players, videos, audio tracks and PDFs in any order. Add a top-level \`pages\` array to the version configuration. Each block references a route already defined in the corresponding \`routes-md\`, \`routes-html\`, \`routes-video\`, \`routes-audio\` or \`routes-pdf\` list. The page has one URL; blocks do not create separate navigation destinations.
16
+
17
+ ## Complete repeated-block example
18
+
19
+ The scaffold's page 39 combines three Markdown blocks, two HTML blocks, two videos, two audio tracks and three PDFs. It references the included routes 1, 2, 30, 29, 11, 12 and 23. Merge the following object into \`gitpagedocs/docs/versions/0.0.10/config.json\` or the current version's config; retain those route definitions and their files. The same example is included in the new scaffold.
20
+
21
+ \`\`\`json
22
+ ${blocksExample}
23
+ \`\`\`
24
+
25
+ Add a menu destination with \`"path-click": "page:39"\` in each language. The bundled entry is under Guides → Read and explore → Multiple content blocks. Its label is independent of the labels of the individual blocks.
26
+
27
+ ## Ordering, repetition and individual settings
28
+
29
+ - \`pages[].id\` is an integer page identity. Use a new ID that does not collide with an existing route ID.
30
+ - \`blocks[].id\` is a nonempty string, unique within its page. Two instances may use the same \`routeId\`, but need different block IDs.
31
+ - \`type\` is exactly \`md\`, \`html\`, \`video\`, \`audio\` or \`pdf\`; \`routeId\` selects a route from that type's list.
32
+ - Array order is display order. Move a block object to reorder it, remove it to hide that instance, or copy it with a new block ID to repeat it. \`hierarchyPage\` still applies to legacy pages and does not reorder this array.
33
+
34
+ Each reference uses its route's source, translation, visibility, sizing, PDF actions, media controls and authorization. To give two occurrences of the same file different options, define two routes with distinct IDs and the same source path, then reference those IDs. Do not put a second copy of route parameters inside a block.
35
+
36
+ A Markdown block renders only that Markdown document; inline legacy audio attached to its route does not become an extra block. Refer to an audio route explicitly when it belongs in the sequence. Blocks select fixed routes and do not share a \`browseAll\` index. Media exclusivity and browser restrictions still apply; repeating a player does not start playback automatically.
37
+
38
+ Focus mode and narration read the authorized Markdown blocks available in the selected language, in array order, including repetitions. Focus copy/download joins their original sources with two newline characters and uses \`page-39.md\` for this example. Each visible Markdown container keeps its individual copy/download actions and original filename. Rendered heading IDs are namespaced per block to avoid duplicate anchors; the downloaded source is unchanged. Denied pages or blocks are excluded from rendering, copy, focus and narration. This client-side gate does not protect public assets or prevent the document loader from reading their sources.
39
+
40
+ ## Position titles and descriptions
41
+
42
+ Every content route accepts \`layout.title\` and \`layout.description\` independently. \`placement\` is \`outside\` or \`inside\` the content container; \`position\` is \`before\` or \`after\` the content. Merge this presentation fragment into an existing route, preserving its content fields:
43
+
44
+ \`\`\`json
45
+ ${layoutExample}
46
+ \`\`\`
47
+
48
+ For Markdown, configured title and description always remain outside the rendered document; before/after positioning is honored. Headings authored inside the Markdown remain part of that document. HTML, video, audio and PDF accept both placements. These fields change presentation, not the source file or media contents. Existing \`titleIsVisible\`, \`descriptionIsVisible\`, alignment and styling options continue to apply. Omit \`layout\` to preserve the existing presentation. Shared values may live in \`routeDefaults\`; an explicit route-level \`layout\` replaces that defaults object.
49
+
50
+ ## Compatibility and access
51
+
52
+ Configs without \`pages\` keep their existing single-container or mixed-route behavior. A version-level \`pages\` array overrides the root array; \`[]\` clears it. Invalid definitions or unresolved references are ignored without preventing other pages from loading. Duplicate page or block identities keep the first valid entry, and a page ID colliding with a route is ignored so the existing route remains available. Review these mistakes in your configuration rather than relying on omission.
53
+
54
+ Page-level \`authorization\` protects the composed destination, and each referenced route retains its own access requirements. Hiding a block does not protect publicly hosted files. Markdown and PDF do not invent a translation when their selected-language file is absent; other types retain their existing route fallback behavior, including English fallback for video/audio and external HTML URLs. Test every block and language, direct page navigation, restricted routes, repeated media, download errors and browser resource limits before publishing. Large numbers of active embeds or PDFs consume memory and network bandwidth; include only what readers need.
55
+ `,
56
+ pt: `# Blocos de conteúdo ordenados
57
+
58
+ Uma página pode conter vários documentos Markdown, players HTML, vídeos, faixas de áudio e PDFs em qualquer ordem. Adicione um array \`pages\` no nível principal do config da versão. Cada bloco referencia uma rota já definida em \`routes-md\`, \`routes-html\`, \`routes-video\`, \`routes-audio\` ou \`routes-pdf\`. A página possui uma única URL; os blocos não criam destinos de navegação separados.
59
+
60
+ ## Exemplo completo com repetições
61
+
62
+ A página 39 do scaffold reúne três blocos Markdown, dois HTML, dois vídeos, dois áudios e três PDFs. Ela referencia as rotas incluídas 1, 2, 30, 29, 11, 12 e 23. Combine o objeto abaixo com \`gitpagedocs/docs/versions/0.0.10/config.json\` ou com o config da versão atual; preserve as definições dessas rotas e seus arquivos. O mesmo exemplo acompanha o novo scaffold.
63
+
64
+ \`\`\`json
65
+ ${blocksExample}
66
+ \`\`\`
67
+
68
+ Adicione um destino de menu com \`"path-click": "page:39"\` em cada idioma. A entrada incluída fica em Guias → Leia e explore → Múltiplos blocos de conteúdo. Seu rótulo é independente dos rótulos de cada bloco.
69
+
70
+ ## Ordem, repetição e opções individuais
71
+
72
+ - \`pages[].id\` é um identificador inteiro da página. Use um ID novo que não coincida com um ID de rota existente.
73
+ - \`blocks[].id\` é uma string não vazia, única dentro da página. Duas instâncias podem usar o mesmo \`routeId\`, mas precisam de IDs de bloco diferentes.
74
+ - \`type\` aceita exatamente \`md\`, \`html\`, \`video\`, \`audio\` ou \`pdf\`; \`routeId\` seleciona uma rota da lista desse tipo.
75
+ - A ordem do array é a ordem de exibição. Mova um objeto para reordená-lo, remova-o para ocultar aquela instância ou copie-o com um ID novo para repetir. \`hierarchyPage\` continua valendo para páginas legadas e não reordena esse array.
76
+
77
+ Cada referência usa a origem, tradução, visibilidade, dimensões, ações PDF, controles de mídia e autorização da sua rota. Para dar opções diferentes a duas ocorrências do mesmo arquivo, defina duas rotas com IDs distintos e o mesmo caminho de origem; depois referencie esses IDs. Não duplique parâmetros de rota dentro do bloco.
78
+
79
+ Um bloco Markdown renderiza apenas seu documento; um áudio inline legado da rota não se transforma em bloco extra. Referencie uma rota de áudio explicitamente quando ela fizer parte da sequência. Os blocos selecionam rotas fixas e não compartilham um índice de \`browseAll\`. A exclusividade de mídia e as restrições do navegador continuam valendo; repetir um player não inicia reprodução automaticamente.
80
+
81
+ Modo foco e narração leem os blocos Markdown autorizados e disponíveis no idioma selecionado, na ordem do array, incluindo repetições. Copiar/baixar no foco reúne as fontes originais com duas quebras de linha e usa \`page-39.md\` neste exemplo. Cada container Markdown visível mantém suas ações individuais de cópia/download e o nome original do arquivo. IDs de títulos renderizados recebem um prefixo por bloco para evitar âncoras duplicadas; a fonte baixada não muda. Páginas ou blocos negados são excluídos da renderização, cópia, foco e narração. Esse controle no cliente não protege arquivos públicos nem impede o carregador de documentos de ler suas fontes.
82
+
83
+ ## Posicionar títulos e descrições
84
+
85
+ Toda rota de conteúdo aceita \`layout.title\` e \`layout.description\` independentemente. \`placement\` vale \`outside\` ou \`inside\` do container; \`position\` vale \`before\` ou \`after\` do conteúdo. Combine este fragmento de apresentação com uma rota existente, preservando os campos do conteúdo:
86
+
87
+ \`\`\`json
88
+ ${layoutExample}
89
+ \`\`\`
90
+
91
+ No Markdown, título e descrição configurados sempre ficam fora do documento renderizado; a posição antes/depois é respeitada. Títulos escritos dentro do Markdown continuam pertencendo ao documento. HTML, vídeo, áudio e PDF aceitam as duas posições de container. Esses campos mudam a apresentação, não o arquivo de origem nem o conteúdo da mídia. \`titleIsVisible\`, \`descriptionIsVisible\`, alinhamento e estilos existentes continuam valendo. Omita \`layout\` para manter a apresentação atual. Valores compartilhados podem ficar em \`routeDefaults\`; um \`layout\` explícito da rota substitui esse objeto dos defaults.
92
+
93
+ ## Compatibilidade e acesso
94
+
95
+ Configs sem \`pages\` mantêm o comportamento existente de containers únicos ou rotas mistas. O array \`pages\` da versão sobrescreve o array raiz; \`[]\` limpa a lista. Definições inválidas ou referências inexistentes são ignoradas sem impedir o carregamento das outras páginas. IDs duplicados de página ou bloco preservam a primeira entrada válida; um ID de página que coincide com uma rota é ignorado para preservar a rota existente. Corrija esses erros na configuração em vez de depender da omissão.
96
+
97
+ O campo \`authorization\` da página protege o destino composto, e cada rota referenciada mantém suas próprias exigências de acesso. Ocultar um bloco não protege arquivos públicos. Markdown e PDF não inventam uma tradução quando falta o arquivo do idioma selecionado; os outros tipos preservam o fallback existente da rota, incluindo inglês para vídeo/áudio e URLs HTML externas. Teste todos os blocos e idiomas, navegação direta, rotas protegidas, mídias repetidas, erros de download e limites do navegador antes de publicar. Muitos embeds ou PDFs ativos consomem memória e rede; inclua apenas o que o leitor precisa.
98
+ `,
99
+ es: `# Bloques de contenido ordenados
100
+
101
+ Una página puede contener varios documentos Markdown, reproductores HTML, vídeos, pistas de audio y PDFs en cualquier orden. Añade un array \`pages\` en el nivel principal del config de la versión. Cada bloque referencia una ruta ya definida en \`routes-md\`, \`routes-html\`, \`routes-video\`, \`routes-audio\` o \`routes-pdf\`. La página tiene una sola URL; los bloques no crean destinos de navegación separados.
102
+
103
+ ## Ejemplo completo con repeticiones
104
+
105
+ La página 39 del scaffold combina tres bloques Markdown, dos HTML, dos vídeos, dos audios y tres PDFs. Referencia las rutas incluidas 1, 2, 30, 29, 11, 12 y 23. Combina el siguiente objeto con \`gitpagedocs/docs/versions/0.0.10/config.json\` o con el config de la versión actual; conserva las definiciones de esas rutas y sus archivos. El mismo ejemplo se incluye en el nuevo scaffold.
106
+
107
+ \`\`\`json
108
+ ${blocksExample}
109
+ \`\`\`
110
+
111
+ Añade un destino de menú con \`"path-click": "page:39"\` en cada idioma. La entrada incluida está en Guías → Lee y explora → Múltiples bloques de contenido. Su etiqueta es independiente de las etiquetas de cada bloque.
112
+
113
+ ## Orden, repetición y opciones individuales
114
+
115
+ - \`pages[].id\` es un identificador entero de página. Usa un ID nuevo que no coincida con una ruta existente.
116
+ - \`blocks[].id\` es una cadena no vacía, única dentro de su página. Dos instancias pueden usar el mismo \`routeId\`, pero necesitan IDs de bloque distintos.
117
+ - \`type\` acepta exactamente \`md\`, \`html\`, \`video\`, \`audio\` o \`pdf\`; \`routeId\` selecciona una ruta de la lista correspondiente.
118
+ - El orden del array determina el orden de presentación. Mueve un objeto para reordenarlo, elimínalo para ocultar esa instancia o cópialo con un ID nuevo para repetirlo. \`hierarchyPage\` sigue aplicándose a las páginas anteriores y no reordena este array.
119
+
120
+ Cada referencia utiliza el origen, traducción, visibilidad, dimensiones, acciones PDF, controles multimedia y autorización de su ruta. Para asignar opciones diferentes a dos apariciones del mismo archivo, define dos rutas con IDs distintos y la misma ruta de origen; después referencia esos IDs. No dupliques parámetros de ruta dentro del bloque.
121
+
122
+ Un bloque Markdown renderiza solo su documento; el audio inline antiguo de su ruta no se convierte en un bloque adicional. Referencia explícitamente una ruta de audio cuando forme parte de la secuencia. Los bloques seleccionan rutas fijas y no comparten un índice de \`browseAll\`. La exclusividad multimedia y las restricciones del navegador siguen aplicándose; repetir un reproductor no inicia la reproducción automáticamente.
123
+
124
+ El modo foco y la narración leen los bloques Markdown autorizados y disponibles en el idioma seleccionado, en el orden del array, incluidas las repeticiones. Copiar/descargar desde foco une sus fuentes originales con dos saltos de línea y utiliza \`page-39.md\` en este ejemplo. Cada contenedor Markdown visible conserva sus acciones individuales de copia/descarga y el nombre original. Los IDs de encabezados renderizados reciben un prefijo por bloque para evitar anclas duplicadas; la fuente descargada no cambia. Las páginas o bloques denegados se excluyen de renderización, copia, foco y narración. Este control del cliente no protege archivos públicos ni impide que el cargador de documentos lea sus fuentes.
125
+
126
+ ## Posicionar títulos y descripciones
127
+
128
+ Cada ruta de contenido acepta \`layout.title\` y \`layout.description\` independientemente. \`placement\` admite \`outside\` o \`inside\` del contenedor; \`position\` admite \`before\` o \`after\` del contenido. Combina este fragmento de presentación con una ruta existente, conservando sus campos de contenido:
129
+
130
+ \`\`\`json
131
+ ${layoutExample}
132
+ \`\`\`
133
+
134
+ En Markdown, el título y la descripción configurados siempre permanecen fuera del documento renderizado; se respeta su posición anterior/posterior. Los encabezados escritos en Markdown siguen perteneciendo al documento. HTML, vídeo, audio y PDF admiten ambas ubicaciones. Estos campos cambian la presentación, no el archivo de origen ni el contenido multimedia. \`titleIsVisible\`, \`descriptionIsVisible\`, alineación y estilos existentes siguen aplicándose. Omite \`layout\` para conservar la presentación actual. Los valores compartidos pueden estar en \`routeDefaults\`; un \`layout\` explícito de la ruta sustituye ese objeto de defaults.
135
+
136
+ ## Compatibilidad y acceso
137
+
138
+ Los configs sin \`pages\` mantienen su comportamiento de contenedor único o rutas mixtas. El array \`pages\` de la versión sustituye al array raíz; \`[]\` lo vacía. Las definiciones inválidas o referencias inexistentes se ignoran sin impedir que carguen las otras páginas. Las identidades duplicadas de página o bloque conservan la primera entrada válida; un ID de página que coincide con una ruta se ignora para conservar la ruta existente. Corrige esos errores en la configuración en lugar de depender de su omisión.
139
+
140
+ El campo \`authorization\` de la página protege el destino compuesto, y cada ruta referenciada mantiene sus propios requisitos de acceso. Ocultar un bloque no protege archivos públicos. Markdown y PDF no inventan traducciones cuando falta el archivo del idioma seleccionado; los demás tipos conservan el fallback de la ruta, incluido inglés para vídeo/audio y URLs HTML externas. Prueba todos los bloques e idiomas, navegación directa, rutas protegidas, medios repetidos, errores de descarga y límites del navegador antes de publicar. Muchos embeds o PDFs activos consumen memoria y red; incluye solo lo que necesita el lector.
141
+ `,
142
+ };