mirror of
git://f0xx.org/ac/ac-docs
synced 2026-07-29 04:18:19 +03:00
new DR and spec for cluster monitoring, docs updated
This commit is contained in:
15
.cursorignore
Normal file
15
.cursorignore
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
# Binary outputs — not useful for AI context
|
||||||
|
*.pdf
|
||||||
|
|
||||||
|
# Python bytecode
|
||||||
|
__pycache__/
|
||||||
|
*.pyc
|
||||||
|
*.pyo
|
||||||
|
|
||||||
|
# macOS artifacts
|
||||||
|
.DS_Store
|
||||||
|
|
||||||
|
# Editor temp files
|
||||||
|
*.swp
|
||||||
|
*.swo
|
||||||
|
*~
|
||||||
26
.gitignore
vendored
Normal file
26
.gitignore
vendored
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
# Python bytecode (generated by PDF build scripts)
|
||||||
|
__pycache__/
|
||||||
|
*.pyc
|
||||||
|
*.pyo
|
||||||
|
*.pyd
|
||||||
|
|
||||||
|
# macOS filesystem artifacts
|
||||||
|
.DS_Store
|
||||||
|
.AppleDouble
|
||||||
|
.LSOverride
|
||||||
|
._*
|
||||||
|
|
||||||
|
# Editor swap / temp files
|
||||||
|
*.swp
|
||||||
|
*.swo
|
||||||
|
*~
|
||||||
|
\#*\#
|
||||||
|
|
||||||
|
# JetBrains / VSCode local state
|
||||||
|
.idea/
|
||||||
|
.vscode/
|
||||||
|
|
||||||
|
# Windows
|
||||||
|
Thumbs.db
|
||||||
|
ehthumbs.db
|
||||||
|
Desktop.ini
|
||||||
@@ -483,7 +483,7 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
81 0 obj
|
81 0 obj
|
||||||
<<
|
<<
|
||||||
/Author (Android Cast project) /CreationDate (D:20260623115602+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115602+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
/Author (Android Cast project) /CreationDate (D:20260626184400+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260626184400+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
/Subject (\(unspecified\)) /Title (Android Cast \204 On-Demand Remote Access \(Reverse Tunnel\) Proposals) /Trapped /False
|
/Subject (\(unspecified\)) /Title (Android Cast \204 On-Demand Remote Access \(Reverse Tunnel\) Proposals) /Trapped /False
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
@@ -789,10 +789,10 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
140 0 obj
|
140 0 obj
|
||||||
<<
|
<<
|
||||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 932
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 912
|
||||||
>>
|
>>
|
||||||
stream
|
stream
|
||||||
Gat=*92jS!&AI=/lk/GLkUl+f6=Hb/9M=l^(G;:]Tr,)bg("Pk^64-/#K2HT:81k=p[(>[g*M:*6`T$4$Lfp+b8UM96F[08&Voic^4hc#'Crl$$R>h*3@H$^AstfO>=LTF9JA_*9<81[8l3b=jA-H08TnRAL+ma*-kP?K;!K?'N<1T.F;r(6c=Su[ZQt:+W$pVe;?];Oo\-+'NF?_QX>DV8/5/pVj4W5#R(P*aDQG^ra7F?XT-:iI&dT1Bn]pnccdl52XbqFM8r5>lA%(4O9Y>SqB4`oY6t<+06q[U[Z#:sV@V[=l<Oib>M*!]/2:ghcBjt3,=UJl-s,F?d]<sCQ0*mC2.iE_cBY?;^:7RmEq\De&PaC\uM`6PLa_Yh7OQ$>h5ZN]N2orcTRrc<^Gdfk]Ib)E(E6K4tiXT\fd(+_hL#_f$]nbUnp7R;)6[u17pb9$<KifAXQ)F-B_n>=]7h"uiR7SR#U5==m9/ju$7u=:G%uFBN>nrF3$HARRXQ$pU6j,dq'6srVY@t<u4m"ZV-cUZc3&j5IBa^GJb!0$XKInQJgG6)h>=LM#hTTS]k(,_9:E==sHR6X-3q!bIJX[(HW^aVZ.Q<L)Gp%:^f3s*J$_Wm0.<ZdkTXPp.L-&a1dO\.Za^U20j!>^W!$C\)C`6=$D2u\;U&+LH#<(;!#@CGoo'NZon_C+#P>+*r+Yqb=&*6Y93hEi2_"Pkdk/=nBkWIQ,f@aVs)I#Q([Q[%NnbhuS8ADe*o>J%?M@8%JoZ$^/CN&-R=7=V8*r4D&4B+t`]mr2n\@&TLAIjpl(YVNh+nJDoHO2VZh#ZaEUH/t:+Ck^#)[,UPG_9BE"Dd8P<NAS#Y-uC3EP%Rkf)'k9Ra<$G&s,.aOlD$B$2q,11,Y6`27"#$Jl1T4eGuO5K"0spa2AjH9;c>K&n(8PD7>q?~>endstream
|
Gat=*gMZ")&:N^lk)i]]p"f-_gX9B0.d\iVIB%rE@_/O0_BtrkJ%n`laJBF\'SmLMS21tBm3.#I6]1Uf"Sh,rh'2qe_-I0%LkGR-1O&J06p<K=5gg73K+\5oVRaZK0u=E3JcT=a@c[SfJne%'Go^$_E\p-@\=p;rJV`(cV7?c0O[B;;<l+H;4H97a%Xbe\dL9G1<U_N-4IFKRI$gBWc4!BJ/!Hk"17jtZPGAE<>ni^ObKUL+DrBIRE<L<Xpgj;n`7m9E2JFV3:gsOSQlQlWLk"c4.SQ_%W5979BM"j[[_lWH*9&6:MH&S_iX*Vc8K7fN<+:^KE^"iAbnm_J@e!s=/R;VY].il?4UV/9gFi4'U5g_YX"-`]/riZ2`:tbL>brj(0k$J-U;S\'`1dnIlW_Q#5G\k/VfYa$aItb_."%Fc?ULnIo?(inq.3lU<?f#"Mu?/^.;FTdh0aC/*L7<S;dZt7\\!a!dta(obiX:!&O?uK6sde/ltppC`EYprjkgXWG'XuNFbA.Kp,>`m`,Z$(Pf45.f3[O7Ha>fKo0E&l;hNhr;*c,=d:LA%i$KJIWkiDZ:Q1WC=2FX:p<oQ%GIW5%m$hD[@i^$A_.e/:YDP%-K6=C:'#8HZ]`R-0'-C#_U:O'[]dd"Y]]['78$^4>c61kK[Ps^<1k)Y:4#02.B5!G#>1)<I>8-fuoP2_3pV;/upcLMD&+OBNROEf)^[:"VE;oY>d\$752R3dWikfjeX`=?r2DO]@]^Nc'50?)KYUDoL0#3H\>Z7`'S0?&PKt<(@A9h*M(Z>^t)^&Ep<!/jEKPVcAL#<CCY7Rdd?o>]fDNtLEeR=kdh!q.up!:/Y9k]P4ECdWMOlD$B$15!?ASNJTn'"rM#Y'qn80+?)$"@,o]I(W$m];b78q><=+srDh~>endstream
|
||||||
endobj
|
endobj
|
||||||
141 0 obj
|
141 0 obj
|
||||||
<<
|
<<
|
||||||
@@ -1035,24 +1035,24 @@ xref
|
|||||||
0000022050 00000 n
|
0000022050 00000 n
|
||||||
0000022148 00000 n
|
0000022148 00000 n
|
||||||
0000022312 00000 n
|
0000022312 00000 n
|
||||||
0000023336 00000 n
|
0000023316 00000 n
|
||||||
0000025694 00000 n
|
0000025674 00000 n
|
||||||
0000025926 00000 n
|
0000025906 00000 n
|
||||||
0000026158 00000 n
|
0000026138 00000 n
|
||||||
0000030353 00000 n
|
0000030333 00000 n
|
||||||
0000033686 00000 n
|
0000033666 00000 n
|
||||||
0000037784 00000 n
|
0000037764 00000 n
|
||||||
0000042412 00000 n
|
0000042392 00000 n
|
||||||
0000046871 00000 n
|
0000046851 00000 n
|
||||||
0000050668 00000 n
|
0000050648 00000 n
|
||||||
0000054457 00000 n
|
0000054437 00000 n
|
||||||
0000058450 00000 n
|
0000058430 00000 n
|
||||||
0000063380 00000 n
|
0000063360 00000 n
|
||||||
0000067735 00000 n
|
0000067715 00000 n
|
||||||
trailer
|
trailer
|
||||||
<<
|
<<
|
||||||
/ID
|
/ID
|
||||||
[<11e0c9648d0e34b6b5fc15e51a46b34d><11e0c9648d0e34b6b5fc15e51a46b34d>]
|
[<79eb61262be26c6db7d665a52ee71ec0><79eb61262be26c6db7d665a52ee71ec0>]
|
||||||
% ReportLab generated PDF document -- digest (opensource)
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
/Info 81 0 R
|
/Info 81 0 R
|
||||||
@@ -1060,5 +1060,5 @@ trailer
|
|||||||
/Size 155
|
/Size 155
|
||||||
>>
|
>>
|
||||||
startxref
|
startxref
|
||||||
71040
|
71020
|
||||||
%%EOF
|
%%EOF
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
11 0 obj
|
11 0 obj
|
||||||
<<
|
<<
|
||||||
/Border [ 0 0 0 ] /Contents () /Dest [ 31 0 R /Fit ] /Rect [ 59.68504 698.6019 298.635 708.6019 ] /Subtype /Link /Type /Annot
|
/Border [ 0 0 0 ] /Contents () /Dest [ 31 0 R /Fit ] /Rect [ 59.68504 698.6019 280.71 708.6019 ] /Subtype /Link /Type /Annot
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
12 0 obj
|
12 0 obj
|
||||||
@@ -265,7 +265,7 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
42 0 obj
|
42 0 obj
|
||||||
<<
|
<<
|
||||||
/Author (Android Cast project) /CreationDate (D:20260623115602+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115602+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
/Author (Android Cast project) /CreationDate (D:20260626184400+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260626184400+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
/Subject (\(unspecified\)) /Title (Android Cast \204 Email agent config & 2FA / mobile auth flow) /Trapped /False
|
/Subject (\(unspecified\)) /Title (Android Cast \204 Email agent config & 2FA / mobile auth flow) /Trapped /False
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
@@ -307,7 +307,7 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
50 0 obj
|
50 0 obj
|
||||||
<<
|
<<
|
||||||
/Dest [ 31 0 R /Fit ] /Next 51 0 R /Parent 47 0 R /Prev 49 0 R /Title (\376\377\000\247\0009\000.\0003\000 \000F\000o\000r\000w\000a\000r\000d\000 \000/\000 \000d\000u\000p\000l\000i\000c\000a\000t\000e\000 \000t\000o\000 \000G\000m\000a\000i\000l\000 \000\(\000i\000n\000f\000o\000@\000 !\222\000 \000f\000o\000x\000x\000s\000p\000a\000m\000b\000o\000x\0000\000@\000g\000m\000a\000i\000l\000.\000c\000o\000m\000\))
|
/Dest [ 31 0 R /Fit ] /Next 51 0 R /Parent 47 0 R /Prev 49 0 R /Title (\376\377\000\247\0009\000.\0003\000 \000F\000o\000r\000w\000a\000r\000d\000 \000/\000 \000d\000u\000p\000l\000i\000c\000a\000t\000e\000 \000t\000o\000 \000G\000m\000a\000i\000l\000 \000\(\000i\000n\000f\000o\000@\000 !\222\000 \000b\000e\000s\000t\000c\000a\000s\000t\000r\000@\000g\000m\000a\000i\000l\000.\000c\000o\000m\000\))
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
51 0 obj
|
51 0 obj
|
||||||
@@ -388,17 +388,17 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
66 0 obj
|
66 0 obj
|
||||||
<<
|
<<
|
||||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 906
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 887
|
||||||
>>
|
>>
|
||||||
stream
|
stream
|
||||||
Gat=*9lldX&A@sBm&?2G@p,j.34`hZR8,A+R%/Jr7`K!68-(*%IpWN&2UE9[%lP=O]r-:Z?"jnLIB[uM1P"opbSCK*+BSXO+s=CJgL0SrJfce&,g)<MJC^/cmL+rZ_\S&T/e()N>SGDN<q\V2J2,)$>;/>,\-_gFQQ-;*("F?:/X\7'ar%;DGuPPN"?0ah_f*OOgh'uX65Z3)L1QLNOr1n5>KgL[=n*k2%>:3s%BHj\q[1.q"P5?pY&?2QgZL@5$AmR(+HiJ&&Gg5]G9q8RSOhoph=ul=N]Xc)R^suk\$1gS4GIcNRQ.;319?Z`T/iqk9k!n(%O'S+olM4gR[r7:L.Y1-V]/"X'9m/(_0T*9[NDtFN]MEJ3uF<Mfd@2rJuM2*#$0?Adlk<'N.*[?1kYr,m1)Q\1]*LMldNN3&mfRHQXAg0@GW?](jJdIYlF==G4P$$d\a&eJSZ9TC`@kQ'7>_VUs[R\6A\*,<0o:'L$>HVUM[A2KE3OO4(CQm00$EI?'Ju8\UZ`EM]Cl[0Ft4.ZT4V&i1K&-%ekU$9e)XqV[^Ck)[B'eUYTlfRc[.m.'/IO5C7at0>Ju7;egg=JDFtI)t)LhO;1Wu8sWriN*kg#!Fi_%MeUg3[lG[7V='uM!r-FTO64uW8c=*a^%'mGM3:Rki#s*-Tu[#2*?@qGjR?%_EG;Ff^u3Tmpe`S$R4D%tpQm]&*mJ&]jZ9luSpnQTbPn+]`+)tA>Hd\QLS)#NJ[bTKT,m>FpR/m.1ITt"[*q`R'3eCq&@n7'4i@h@XtXN"d0%P[JG]L=G9Ha4:`Y3M+@HGX%LCoWn<R?cZZZTgHFmAk\,Y)p]g#Po.9&^/LV'W6=s2NK[,:S[9qSAFHa=FqOu&iCmfAV?,'lu*H%i]l7G<S$R/@%L#*#J~>endstream
|
Gat=*bAQ&g&A7ljp/Igg`,PO:Nc#aO-uqm'o[Je6d>e8k;HZbV^Fq%Vet]Z))+mSYj:#[V95tQBIB`]VAcU^T\60psK5^uBLk+t9m_[Z7)1KjFOsj[8!Es8*Gp"Z`%U1%s\28jVE(r<)>1rX(#0%Y3c%5sga%`MY\E#o"TW%R8BZU=,:p/blT#YE)`,HZ4.eq8UL:]!/;M`mNY@(MoX(2ZHJ1]o&"'P.A8I\)Bl5<W:nbs9?(C74\l`P/9Gd,N!3#!!NLkA6UJO8S0jglBT-di1_bgNn#e90QaeY4TM@$E*Tj799@cT(IO:8d8sH;5j0ik<hBD,M&0lWRM>K(?&:ek!d4@GGT^l00aC0J4qu5Su6[SjetM<nEYd4o76u*h,N3637%.O.tg*K1h$nH!YV"Y;jkO0/@"([m"(+r&S9=s$t7Uo%d?p\uVHFCmT0YQZBnph\)-Ec6SWF"@[G>o<0RuRN?Mhm;d\!'^C`]&DIT<mF`o1&[>S+SQA5io2V#FRh)hgII\Ktj&:a1dC^cpUr^ji^OR7.V!?&[gm0:eXAk"NWkYr3oM/c/IJ>p>s82oRC9e<CmO$#43*@QN.03+LBiG(A](&5fjY'4^iiGc.s5".AP9Y?.Dl-4.O7V[3kKZbkCpO.tE3_i,eYjLZ:7UD7=r-GPCc2BI-X6)R=DforO&R4),BQ`DYKZPt\(R>oiVmQk?Y75h>"Dklo\.>-[YfY1_k!DWGER;IiMdlmm/br*VQG]W.49pVc-RM@%@J^Tg-`55"W^Fd?uuXJ)hdK!<.b`&KP1q0KA\=e?!2LW$GG1GLHE08@sp=:V(#A3To](L9=-skKkJ0f?(1jlTD)qJ)'ii_o=tSXM+%"%.e=!aTo6:A#r)5]RB;7o~>endstream
|
||||||
endobj
|
endobj
|
||||||
67 0 obj
|
67 0 obj
|
||||||
<<
|
<<
|
||||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1204
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1202
|
||||||
>>
|
>>
|
||||||
stream
|
stream
|
||||||
Gau0C9lldp&A@sBoP$t?)U&Tu+#tX-V6-lBY-YB<Q%L[p"uHoGGQq^Ches#RMUqKe-Rl$n&e^j_YIi])D?tK3OPr!r!NtU)2'Y@7bR5PE)o2@b9]m3&(M*PV^t^VU?3!h:\XoDrpclFYH85)\&$DOX?5/#20q&4J<-a%1Ool-_?sY&^h.'8r&17!j=`KN,A?tHEe*/eFrs&)(#5]K)?G[5d?blD+GQRCH+W8XFACf@g$7hf3WHK'86#nIEl'>t1-T2rd?e;7l\f[OOrF<$qM-P7=a'g]"]TnC6()5tPoq19'b9,+1T-I#F1l)cH:`@0W:.5>#Sh$s$fC0`TV.#.Z-q%dcMYt+68H@7OhfBI!YJhX5:O?h/J^93(rm2$)3c60:mi4/4I,Q@YPcLPf/LH22I*CHlhfkF6aNj_SQi.Cf2OAI-2-pQ)WZ!5I+R[-@WlJ*#E!:OE<['>'lQlB_P^>+s9d/E35jrIM5?iboqccj_LI,mf\kQrKdX,>ie_EjL<ftDbLbum[+T_4uSEJ6KR7!8-AD\P/"Wc<T\bM.sSHZo<nCQ801:Z_`V<j\!:^7\,eo3dk,&Fb%Kdi"C%<-Ae>9u$5:ZY$"+d*kQ4A&lgCbC:a5$UE+QNEXEg35%T=tG'ST73SLbf`kX?8F%iTbSO\6[u+H.2q6<V2[3__9XLp[@/9i$F_U**%cN&EEMq/b!f7GZBEmE&#OdeV,^+cZ`s)\??;t%jr.u3mPDA?Zq>/_D!)L!l->/-4U\q'DAsrniT&MQOf6qTAemt-bV[<rYHcHhKB?1mi9cNF\.r4g(:MGO*-6qEP-&u;Y#(A(&quaUNQ79\5?RIIcGD5f^P;.@'M>%fWZBlE7=M*q>u)Ko<')%>/3+*K#X25T.Kr\Y'fUd&W5Z2;)[fCq4-ed\s*9<$8LmXr_t^d0n1E5=ls6-+[&gc;$!@t4C)4G!=]C5qLX(X?JZX5p5??%Kh,rm5.Po)ji1]>f'ZL?Gd8N?gN@nCkArW[*!KE]=7ijD300eAN2r6cLgmCTpOMK?:1N))-N8rut?ut;Bmi>5cinj>P#FhJEoP8++OH/Re:/T,'\'E$3Wc@#P$9(7bGa)qPBP*lTB!;mFd?ns`9(=4#Dd02%0YXHR'IWDt>=k[IB3B2KJ<214Vrodl6V8$aJaip7-oU3d2tE.L.!$7LnIXl:ic%H$rrBmS^NQDu\c~>endstream
|
Gau0C9lo&I&A@sBm&?be-;B!n5C,q,9:aA(FW/FZ4m54p+GGUsA,qjrJ):F/.&uZpOc2,e&LEUWHb91EG"EglK++A@$ZJ7aWu1q)@9rtkr!;F,@62/J\01Yr,Nd#q$R/-)`"0^9_Z/S35=fM06L_lD%[%P(K[D=pT]uniP8mt$!:ps\kT5@SM_LR^bD(YNTTG`'S^Hn6rWVFK>O9,pGRZkIIK2SPi<c;IKOd?_O[\.O.]e:];XGI>U[1t<djJJo7Vk*K^27p=oIrECqJX&F2KEYT_dP8sHm9Hr*%91olG(7TQTq/A5=_(lBU!&3TJV46Ru7LAZ;b(EY2LbLCWd2f;2O"X(&<;QOpJ#4^?-cI?`QJi+8=94!hU0.r1Op1)"&Tmi#FR%I-*9nPcLPf/LHbBI*CHl?[%j`8Rm7(bC0[SRnNRq2-u)DWZ#O5+<JBnWlJA0E!9gfBgcC;AgI:<P^>+s>p\CG5jrG'^0$$,qchC5LF(QLaL+n6CV,g<aOVfaoGh:/=<Af=7T/di2G0:^j?)$6W2'KIhI8-eiIu8Zp]K[T2F@\X]iiLl.gKcRV.9tc;lmd#.oG!2#h]6f2mlR.j7lSCA/QTE6-,hHe\L;[kj625ZuRV"6fbp`3RD7*lfRgk7:TYa'(qPXOT9gfQl)8j,AY\0l`=As+ca9$=`;h)=])]bnBTLg<s=@j0:Gd\2(T\LXS(N8#>mOI1cu/h&FMDW)K)^O(%jbCMoeGFD-lSA8gnPHkg?``Mr;&88eaI,N?3r1rF#qn]IRf"bf^b0r<m;q<$'oQMLmpp-"gZ0CrnDeBIh&Z([D8oM(DMk`S,W3D4?.k^Yg[@@eb#sY$Rq-$Er.!rBJBL[\iAi-bF!R6B5Vi+d^!"B!]WG[$ug)WGg;GVTCn):+88iiSFNRKiuM:;0TqE\X;k6XJ=U`3::J5E2O>S,WaHuG)(^K&nZpEL6dC=H;Hh,c,JL@*1eW9f$E9Ja52i1EIh`o<7#iaM`.;6UT$=?USil=5V2Qn%tr/&pCAB*(6C'onGN39gK+jE/3,34?9%HO'kfjPmfnW(c-[L,[5W8"cZVj_C?2/IQ=Dl(3,r&SgRpAc9!nj[ZVNM9fF%Uk:"cUgHirRk)lX6Jhc!g@@sD(VUsf7#/GMe)8.ri3o,,FiV&B-Fq"AqH)[iX;KNSYHq2CDWLiYn&1*j\cJDfEok4Ntb~>endstream
|
||||||
endobj
|
endobj
|
||||||
68 0 obj
|
68 0 obj
|
||||||
<<
|
<<
|
||||||
@@ -423,31 +423,31 @@ GatU6>Ar7W&q801+L&Yu3D!bD]!j?Y[V8P31i7!>kZP\d5teSe'3S9\3L>616cloC<sNH78/_rZRGl@K
|
|||||||
endobj
|
endobj
|
||||||
71 0 obj
|
71 0 obj
|
||||||
<<
|
<<
|
||||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3642
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3779
|
||||||
>>
|
>>
|
||||||
stream
|
stream
|
||||||
Gb!#^HZ.Z[&c^a\@Z\$2jUtL>PB&:2fT)MDY>0JR;5C.A_jXh%Rugm0&)/RkIeM&>+/1/]U4a64(j@m[jm;=rIksG$<;b/)s1K!%oFAkW)JD1e9gLQM'CPi(kB@0g%^^8Qm4,-0=l;7Lr\6.t2>L5L,dW+/([3uJejRnCh1d/e817/]4A[=)>Z1"Ka=[%l%1LUjJnX`bX_&:)#aYZ@ir,#<'(3KLh2d09DtpZ7VHL@%3pL5m;8#Qn6V(;Z5#!gKOc8h/G8!?7.%7+q84N$P65hdPg6-!kFi=KBW%q::&ftE4`P^)f5<l&##p8rKqJIXi:coebMb4=$\CYj.7I*hE8CNGRHoH<pM,/PE"fH!Gi:32^<9[fhYP@"A"3&e2e'aofqrYeI@_n8XV[?k+eGsLW7]fm7^V6WgX/l!FqDPM?>-D'uTcrr0I8N3e<4e6oG[+U?O+1po_R($3[8[gAdo7:l(SX+)(YGUZQOA,!![U[3Ke&-_'fXJphU;IYSra0mY\X=`Mcc@%E'GP-SG=:L#?)]=1qA*]ghSc??;.chjY,3l73.+.bG]nb'%4[ek#BRX@#I7IJk+nhpA+gjmQTOE3tfT510's='oo-qnD`tT)G`4uOVd(B4oVE9QK3iL7qn@07rcBf);b-+r^2:q7;Z)oJ%`KEW8<T82)#]0#8%:,plP\>]mmRtIs#dQ-J/:cLEuDS(,*ad>b\o_phdqoq?E+Q]G7lHnRLRR86=JoYp.1?+W;2b0Hg%(>XspA$bga5]$dd$13_8CD_mPenAMVXgK=pXCZgrNNSZq?B(LsN5c,Dk.c_2bGf$1XQRB3Z<K013h3(XE?rMhPU&$(1pU]U^LVXFjYuGO6Hp=<=MMete9bU-W\FKRYm;%N&-E`;_*,QN=O7@t%Gf*c9ZCad:U=Snl-;M6+:9eTRU"Bq='U-I>_%t%mg+:VuJhjbdAR"XEkD;,F.7t:P9!Z_JfB*nRZaTu5$3.i>=JPsW.:cQO<??%"(@^+O"p>HW/i1NWcS9Lb>3r"&0PL&3UlgJ]Caot?;F&)l&q`#K:BkTBm6$icfF<4kc6#$g]K2;)MKnm,AZm/NIaj[94FI%Qhhc0A9_TZ*,OuCB@;B_@?AUbGSVEN"jmI&!\cO7nh`cAhK2hj*,CtCWU,GHa@ViW+!pTn>qMJnKU%JjTVs3VfIKl6JJppAE]I6Q3*\O3gMraume2DX44CZS&N8890dhX9gVYo6sX4YJlargp,0;Lhj@$n_j"hs`I3qDVZF#)#>c72IHci3)46iY!dOWsdeM$cc\;PJeq2^6qg]uO@ahWQI=>^Zg>UZZ$Hn.<,^h?`2WBR:PI_mUQI/BV@hT[2.[@"@iQ'5RUjB.4*^@eBZ&khE#=Ij)rIflFoMGTt4MQ]q-VHp:5;N*mRaNMIe="lSMLobjXem"e0J@Sk^`>\eiEF2l\q\BWg$e^`Fc&uNVKM2&6eL!FlC25d"<jt[Was6B3e5Qtmg%?bCU652sC+it;5\$5@*b&9r3eTO5H/[oO35otrtR:Ipt(9+E&[i(s_0kR_Q@Jp<S?j)\70Z@5/Y^:?Gp<`nDZjWPZ-Out0'E4##W)=/MdBEbjcfT<Ml'ss=I3r8Iq?&kM#7A7'^.1LCA_uO@CIl/i+)P4-6MpM0QTG5F+[S$XL)')hhI^1bU4b18F;Z5P/J$N@fD!m*1E;p-L4`\K9TOk/<PGj^(I$1oiuB\s7<gs%@YWk8oR'JGd'Wa?G?JG\&tfj5(m=FqY*%$ZHPXHjid:`F1`Q,Hco-i#osA/I2"S_,_85o/-!<upRYMA@$2AFk%>pK5d+\2[eq)3ASbcM@VW0)9@I(TY(=TST"mmq@Z,QM+k&`1o$MfB$L+ZoO%s%4(#=oYEO.hmD)!qB"Hmi()SJOT4[iD`&g:$;>oG2L97A@8Q8P>*8LOaYhH&_&`OAE/?$/K?[5WeW#ZG].q36c-m4WZ`hh"us=KQ`3r0HV<iOl-[rqGl>IjmQ8>T4s1a4s?/S?tE.72t8Q!>Q!6Laa5X`m!pH<o=hYoHQo!W[(S5U&65RT&*\.o&n>(K.)6bDOiLE&YhQ4jlbY$)*(ecYN\n*ZB#$ilgW/78Jh=f-"2dcE>c*UG9L6.U6M/j(*\Z4YlDiNo@Ao/a.B9EfQ2ujtYuSgJ`Nf&l=\ht$[kUTC2_([R.g$U.l5I/\P+2jGhrRM@j74K`l_<,saJkNI6&rZfOQ1.pYBS2qY%T`VIfD5pEtfEZ\-M-=#h:2YU0d+Gk&.9Dp>Pn77fF"NIht[,N38+r9LghfM7F/k=!uF16mOE_Ao!k_Xj,l`bM"kNdb@^#b(E*IZo3\SG!<rhPcI'm#'[#RBq%0or/O`F7H_Z0:GDX#k\U^3+tN1?J,"U!h=uOG$pZAXdXk<7$iPCT,h(".+emQK&I[9"E?sl5,+]K7YSMl3UFD\o=D)M1Mk.g@qD^[<k(&ing8A66$019!;c(lG(H*o/"@2%4@(T_MmFFJJG5'M2Xph4G)RH#t#g4RUT@BkYeDDcnS5!SK>&"fFR:;>sZ?NoaGF(XI_9"#mmQSo3dpS>`F7r/6CMkB?SW6O#LfZ9C5%9tTs+G)E`=b#-Xad_26>IV1rXFDIKC-h6SaHs,22![rV1,<U&"fV,->s=.nS67_]U6=_lal9I%5J1k)@u>;H@W!/nGoc$NT;t'0EX=uY:f+2FF@%88Na./lGnWn(:'5>qs'o'gcMc"FB:3ecedZu:n;pKY/LP_-X>Fl"UOSY!)f\PN$H'%Y[/Z8WZOe1@Ld_>7_Wjb)E_RY\.*s+`e902Zais\"4;r;I7?,)kg&Sdk)QWrm5`1+R_4b"g;B:8AUt]Xb(?9/.B7sl&=2kHX]()XE*JseL_AO'Bs@?4Lam/)N#&K*W4R3(XZ%9uq*Rs2N?X(ZijqVR/#sWI^-r8L+:g:g(7()%k'JAuNp7D2L)O3=D8f@P\(?R]#A`C@_9O'iNuS98*++3,2DD?^O(]J[[sfRUBN!?r^2,E5F1cR61W27(]oVcY[?ue.pi?(f!7=:sUTJ0%<q*!%Dqism6oUiNB;jM9II.qM*TS%?mRK^JhtV'oD5":A;[V)Y,nrf(#.5@(em@WeCKkufTX-*>s1qlOlfepj9h^++aChdk7!j9GOkI$&O^*CYZcWhScf+_elW$:`jkVY]'JTX60IX_JRc[_&r"SZhPQIljrjhQ:;(6SlW5^TD1QN\P8<aaj%&aFsa?gBABUQc><a!u;+/UeJ%';H$Bf;jNEl$%`kWSZ\FQ3eB3CdHdog`HVj,_BE(H3^6\<\_c8apj8c"On*o"tP@hpi/A7@L4LYs'uY=]"Fq86;O=6_0S$7#3IXk^uh(0HJTU7Kc`7HY7>U[Qe6_QK3q_;5);]N!$)uo6@t+cGUs$M1XW0:/X.:X$]gkX7#W1Tk!`5cU/kQ6[8Jar3KhT!/K!a7E8@k4;8kT*kmC!(rTeNDcr;^.tZb4To@ub*IR8DodUQak4afNK[u]s]jC9<IK]I?bWM1=W&90(V+!hUY0Umo:<-i_H-&C)V1N4nUg6r?9^q'%b$n624sWjpGiDdTKNr6`#\-_R,rA6u#c#?DF#0,i,)5*E=RXqirk7YA8L$TI?T+#bVBEl`N\PP8!(>:@Bb_j3GLk9/D;a?eHh)Jd~>endstream
|
Gb!#^HZRr]&cZ41@OH#&g5\G25tZ-3=gf;-Pq>Xt9KM9/EWV9^,p3];6PB:mm+o8U5S+&hOQ0)N9d0Ttm-X33\%==Z`ud\Jhd6Ar\V&jp!JUo);_W%4L:b4;]=Xia7n0c3*GN)r38f''r\:kO2>L5L,dX6O(RZW&c<)k3dtM;E817/=*9iUd/h-M`j;-mt"r8&1,$KK6W#3K4(+TGrnc$=P%X5\)h$ZO5'E5)3)31c^Sj)R4e>s=3^E>(\J>O3B8B,o(\V[/D28_=7,U<%c,E3WeD+V%m\mtjH<1@SE#nJ[ool+l2>P]ViP1MM+K')YnZ(cJk!#*iR:p)un%l>m6)GGGI8<SK-n.OTJT7bI"7T6FCn%[e1^E.)6e$C%sR_Ndt+))3I8nI:l:auq5(2m00(&+belES'P?a"A-MRN24@k%),f;aboZ),')Yi9YF;*=j-d":Xum`<dm1eh3G4C!]bBOB]ORTV3*Zj;m]@1sl"WOfTjB(;1A..i2JZ]J`k=KmT5nc_\kjFOW;d[2Rnb/8`VPNO<a-F;^Negk)+FIc7XiIYSX%B`8h3d<HnOuX=`n`Nm@LqMPM?N@mt:Nu;s`,VeOoqs0sUR_F5p$aGjVZsBH&+b=CHs7L^Em0a-FHOP_EP`e7hY7T[6c/>nb,jJ!E-\:Y:'TeuQjLrgLb.cZJV6%S4C>5*3kID=l[KB[,k88H0?B#U@[od_.cM%'Kd8%LKWSnbKEN^OFnWRR'4[LC/W<:=NOgubU<&2qT3E%9l;osuB\c0s1Ql;<aKg*?;\f1pF3=4]Vi\1:4JNLMBnhdSn;(X<@F;1$':XsG<YqO+K$f]idtFu(rJK!ZBm]&PE'n7h'jHkE88+HdU*bM,6E,h]Da3$+!tiktQ$&^o%AW"Qq%HKmL:pJq2j`r7YN3AiS7Y]i@b6c1Yp%=?Ar'N?/W<o!=e\WD7;Q2M<q.3nM*E@:8eb/qZIT<5j;8&AYQ=Y&s1u`Xj8_/<1+`2M%Q??XGofXHJd6QKe&DjC0l>,Qm%YIQB_02p7NtI2WB<"1!=>r#o[87Om]D&"o,(YJ2[Dr8^ZR$:nk`@3i_<+e>sCmQW$qsspu\9b&D8\(*^H;dj?BBVes[Yn(3^ZYoeA78FL[a,)OpssoB\=7;YkHi"T%&3app.[Z0;l8a9c#A)qpsGVUt!mp?6JMZdACYFBZ976@#$i`@>CU=RM;D?)o3k,KefdfYm9lVBf;$jfc.]`$*-%6o`8tP(&IE@J4FNpq[2N8[?+WaUInOX"<3lqk"r=r<G\[MVq!:.3L'1M=uh^#\+D=*d]JZUT^J4ob3E,4U33bO0EJH.U`:^l!9)RRrXn&."c5c5$)<G*mX55S\l\BUEMOPdJMZbDjS3;JIkJMasGBmOW_te:>5C3A<>4VOYk&s8On@>^s*N20[.Mh0os1_YH[2KSARY=3DZuF-?F[df+UA>N#%0olGF*43F;p:]P0ekQO<ieYC>1>W.6Ft5nYbHL]YRB,jAh6%TZjcq<b,lRP'DXjd+.8aCDJ6PKYVM6u"6GD8p70JsgGkY]p3^14i)nT44?dbhY?p#O$[hg':=l&r0AR$%KuL<2p2cBNP>mB61Y;FNttZ4qU!mblOC=4U#4t?Qu0[12ld1%2dugO*3)fU&E/CbPl1SNs%&@AjUju[]N4o'^nJ50#M1ui]c+dk2?ZKa+Ep6=E$pNl*2qLd]k]__L!24SAW<-&R3SuQsm(Eo<).s0T<n<GH'!l$./eVN(8-rf?!->4c.7+nZE+3Ztkq8hZf&(F>RB[2"QL-iaDPsOt7th`Bt$'"T6k_JDuP(S@7I;:&M>-O05(3m<P.7\RoJM`HL$O6*o`gmBF.53Sat,6>R#B6^nMCCUn]Z25El%_hF_:(u[eV![q)-I27CRk8Z:*g,.s:PSS=.6DBm08HY"EqiLVmH&X7JOAE//$.EUO5kFU1ZDL$#36c-e.j!K$h#@i^#0daJ@0-32,N1)!r'B-7rl6P>=ILG7NsOVg5j9#jD>_Rm(]SA4ns51S>9HM]r83s`4VL$XVR\IC&4r_HrTI1=&n>(S;udBhaC?\cfBq,E[;s5M7l$(,,P>o&=`@5GocXIK?qYH9_sPkW=)"EPUZg:XL=ph$k!E:h><+%8/A63P9codh@tA6O?/6HNjuMSVXp-8K;/L9(5,8B1CU4c%Bq)5<P+3!+ho/6uj6@r6BVX<GZ`083R>nagB&d`HVRMLcY%T`V620<Wn?`dbn,UUtd62uB<DY&c'D"'s@YaH$9;CD^$bhOp&OY.s6FNfFqUdubql;O;0d;>gYd1N.S_!L+RcE`Q8=@_R<9ZT@/D?IPebblS.`@T;AW&WLg2u^FB7%\1VP@eaNCOi`9m!ZE5`qmeRc".&(#8;MA*QSR^".8O`=(LJ0.#)mLD!HoaG?*s\3-&\ZO/$/!`ie"Gr0*=*"0sGB!Jf^"s8S4jjXg)?LtOn4(0g+Cu?bro>8N/;uh`E$1-5YYMGWPg?kK/h3QpiD%kH@&n.>ar0'`1]c)3NNO,V.=Y$VK5#][E=Qf*Qli'dY\=7;5jSk?Y1&E8R5A(LK\)t-)h!,/VLj05I(*K8I%4BB).Ft"dAc78K(0]sIs)GgCKAF]&TC*0.28h0\V*V-qpRdma-EiE@nS6*h>YWnPFmW-$)B"2/[0LqV5/:-)H[o20#4RALbWlZrbDU*_di9kaM9".8p"6Qe-#5N50/&4'Sb%-M*,.>1fi_H[\lUK9\$A9ZKSpctdGREQ)eHV%3.b@kl".^[)h9bA;pUXSm#=B[d4&86:%ZU_-:Btgc*\`5Lt7Jt/@$-\GAbtiGC0L,cS:I/jAZ1o+(NldKjnRCWrYXePQI<t/E8*>`tCP>[Q/LC-'#F2_9QsAb,A;oW`\^eCR_(r[;#)j*BHf0'IgC(e.o>t>?sVi%6=J4\YnDCY`+7A5[aNMWb8`95W2-8k3;`@du7!3$fkd5hHcN[*!?lo?@TVr0X)l7BH)?6"s_i8U5Iko2O(L-hRU/\@iUN^`Hg?-bf0^32<dS\(ndDHf!?)AGZ3P0h<Z!H\72A>fm$PQh2(>=`um&RW'\8mPn)M7CQ#&$XLCqQMV8MS4^r6?eFD,@V@Gk,,O#/XYL[mGn&:W\p4u8cA-%Kup+dl!<E15Grg7>prnkA@lgM%/oe3>V'0&pa!7$]j>c)4qFiUs':IGAjIbO7*n#?G_4YG9N$$^^s=[JjIpdH/kgd.6H=@J.tjjZJm!r,Vfl\>c]'*'bh:GH10O(=ZqM\j.PZRejIL;VPb_hk?S^V"e7$AE:kJ]]r(o%kh0^nOZtB0Y51Jd4b+8<B2J+,o1AAGFJ-b\-t,ib0Z0:'NQGH%7*TS<kXI<8'Z"Ing[We`R(e9qJD3-/rnBiB<jK&q>r#+;<R?PqqI!E\_hq9#oL"JGI?nN6Z)e^@\dj"a`bo\(o:UDuQ8:nGq*PDOWGQb7>CJBA-es&I>f'lQhqHOO*">'Hk+(lk++EKYeb2pC4SA</.MQZ7&Z!^l&^d6lShlpSAn+IG47H0rj<J[lD>d"7(MmjA^]3d3l5U6`S,sG]Sn\`$:r^`G[jd.IHdKV(KqZhs3?r\#YMg9ShpN]_W-;??8G`B@:Qa93=B*-9doHp'hFc+T?tBahkAjor,?Q1=Q\Y"I<]XX:p_3Ia5GIZl*;@lQpJ=8!)'8/8'*W8g>0>)cYn`lFbE`CO(ld+B_<%W(:N/g.!AY&0j@T<Jsm.$A[4q)bX'FR_Mp@/nlP4JJ<O8RO6#Gc*PD73L<%LPtE(,0LQjcgBN];$\kd`h>~>endstream
|
||||||
endobj
|
endobj
|
||||||
72 0 obj
|
72 0 obj
|
||||||
<<
|
<<
|
||||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2956
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2915
|
||||||
>>
|
>>
|
||||||
stream
|
stream
|
||||||
Gatm>>BcQ-&q9SYW0c<b:Ei1c=2cgCHgE"6a]brk2Y5iiH]Vo4N.E;bZD2oaeK>Diihi,'M*Tlr<EE1%I:$Ic.fPP%s()1L4,;2c!CC5/!hq2+beLslr9D<;g!A.W`O$(S#Kt[4<?(9!gsnWdJuuNgS0VP2e.KukRSF[b/!NR3-"FoEH%7A<0]hC'CoLeBpufE\Y@7DXb^Y2[i=].?40Mmh/;mV.q=t>_WmL]t+#VWrg_qZe_"F_u$T.$40K/LtgMk9p"D2$(;rCO4nM'r]A6<!@BqmVC!>_q5MA=[=R\>;,ND7s/6*UhZeql40`5`:D(692&W!PhcJRG_Y"\$S+r=j*rDMjU7e"QWKIgG5Gai/1fVPK&6_+OYm:U0sB-B51Q*LdBQVd>o$rp%$fe@L`V<&%DE'&!<I$&^<cb>6<WY$VRE46Ro#I3/R3o<ZYc#EpQfW>!<j>e'0Zl`][FGJMH,R#pg[rGB>fi'Hi4!bV`]@kKlBWm+Z0JeR1@%Z^"[_gmG4XYh#)WqJ:0<j5X8,ES?X$I=D@DA,RR/eQ@9SLR3B(RfA[:`I;U,1;1CiapA*V[PmE=QJrMj[;tIXONk,'e\)73I<K5:+i2f4n+.Y*?V.\'NX'di$$n4GDLHM/Iu(CLF!HE_>P;Y[TJ-UmDAVW%Et[[WCLjpJZT*6A,&/LA&3*Yn'<N'VNu*2W.$pY]YZ`(Q5?4P:^?J"P<'^\bMT?j?`Ss-V&AI8@.buYi*ANsGGP?<Rh&mU.Lk<A2F-LdF/RMeh!?nHX8)\@"c0.VfVIfeKPDpTIR5nRZgNo6"W8T_3(9a;VVle/iJ?<F4A#:LA2)aA.j"-:/(TRU"t:f+i-FhboDJDfDHmQJ<A;JL@E='$F34kV$>.q;G&bBN=K0QMdP<N0bct3\:(uAj5,#8W6KBmNbn`n"qsl5/WGW;*1\HU,]f6Uam"OnZ5"sg#^_aLIE43lch+gm-lccU-m^@0u`Yh%?)PW<</)[%%(Y@lW3-!Ls/`<-*R\l2<-?P'Ri";$Ti`;f@psI*\#'hL&p@D\RZ_-(U?'KXhiTmnt@Mrb4i[\sGHsMd^%RssF>GcNEG:ZIn<7Mn>VB[-;1c&@$Y$6d#l00I.NtmrD3Q/NJ4WmMsK.dq53ND&r:0UisdP_lA-.UX7Vb>K\?$0_qYIr.#9gb=<f#VSQR(.W_>+Lb-,YGFQ]G2\(g'h!03LHLq3LJ$]@$5B!Hg"#)BjMo`f3@?7g,PoDIM(#)Y8guHRG8sn\OHuYQ'OJF7.OEFCj8,8dF>FQ)/*;$3\<#&Q1,?-pq)G-hK[gWZRds@L&2SKV0c55)_=#:0'oD#W98Z!c_iR8-K,?FH-$8"6n_YS')oc5obDorX%iGr!aefl/IN_$?HTYGkVG*?@mlT1%sJrqSdb#uPTTss4,Y'I*O/'NkX5T&9B8$+^rpJiATbi9@/bt4HN`5tg1-61k`.WBItXsLga_1A8L1q&LXE%-1;>sqq@B*8Ml?-!<Km#JTZfmlIl:-0V%[H$nW@m/*ABc`&D)5$-UB";Jr/iK2h9N%/h6Sh^]`7nHV&WU7.eu_!h>!2L[T%&XU%dNKY43sks[]q.6C`/e9;ONW/tJH_ht^oHJt<L89eS6I,444h5j%.iuDl7;IL3LJg81Td_-RmGHfdJ>HHItqk,VAj0:Q4<e]ic-Y!VI&DL]%a58mSZJ7g+7Q48ZGD8i+bjR_i1/.Nc@cjkK)l,I;7=^9p7\%H%1'M!9N5sh,;s`i`ltHmD"ZCc=?bKR9VU:WXc]D)Ho,St+h./!P/du`&K^F>EbD&/.(%q4q'8#^T-9>[]@p_=0_HU[KZAl)n\;1@HmE_-'Nl7k0RCoJs*\^a$]<p5IgJ%#[7flX2Z=2a$Gu'F25tHu/)`CI(3Le:L=f+T+APu%+DERMEnN>2M$^(e"4@B[r&E]6In1Ge:O%?3p+JB)!8cs<>d+0GU9QQq$$n]X)BgZl]0MbWl/3Isc\B2d,kps`!4#U'5(2"9`p\BJWJ^]Xi%'=Q<-]U=M6^>$3=N]&)+B"BA"JUupbX;jl><,nP5tk0nOKVdd:-%aSiX$m=Ob6mu@)2mjD7g.4%?dGF_*SW-\!+GeCBa-Sp6nji;[na+G[X%WW%pk^SlBP<En>t5%kJ;N.<$^$=lkbUA=JrUS^TZa=:1*kZ%b!jMC!nof(323MhTKD0/7cCDZ:i@29fuOEB0RFWAI.)]$Vs,D5C1>FhscXV74T)aTZ^-]2c"G>]NC7(Fba-Ro2@b_dtWV+@t9BU_h,OOrZruT1<33HHF%6SiUVtV<I2H^HhEu41D]C^<KEEfXH4B^YCe1mMc=bj1`MUo[eWOX??R^`Qj/N`Xs!n3"(#/esr?NQsHBNZ%g:O0(1G0XU\Z\6Qb\:+[t-Rm9]7bUm'F-Mg]o]_kO9d2j-MAH4I0<E/]7%T`e^sUofdFT2V&^[Ita8Qi4o>6V5TnGTf;hU$jSe"4:IQVa0kj43ct>JmEZaDCadR'5d&UCiLY*^(j=-FM%Q7.58pPU:l0Y8HmFm#-:Yrrdn.CCR.Kpg&o]/p143o"#4C$@rA0*k6/7Lk1o5"76A5J4QKs7at>cg"RN7d;o88F4$1f9OOX-OF.:M@q@h$/^16'GN\9WnT*k>eQTr[=7^6sD4@#A*l0ID*^/+Rt[_mIUhV.&D6\dr!k5Y!2Asbj?n,1hD]sfc:?0m3[ha+s+@p5t6*N=6;Z%dRk"<gtto4tBDY`<D(FeI.'"3SQO*/O>$<S%a\*>*br7C(=`aGHMM=3AVURtK8Sh^9Mc2-nNPRkj^8-6KF&m&#XV(kl/5DQ!oa-a^R94JD,*=*Z4Y`7RhhV]62[dbb@%&*$F[HmEq^4I.*I85G8rdGmmZUs(cG5q0q<j6olXE<<O4gmlV1Od;UbT47&pG>5#b*q4KU)'-9nm%lQX\.($,C]cO/K+L+Mn%ceT6.@,JE:n]i:tL$~>endstream
|
Gatm>>Bei3&UsJXR$T_Rg7h.-*hW.*p=`)]j$p:rRQd[JLCtbeCQ`'jb)ZIL#GcSV/`*joj%(H2RDI*Tk52qB+QJNGrjrL;DWWX`=$Ro_?\>(E)U,t3h>H9QKlWQ[l&oK>Z3I2*9<r;JptWhqAt6"A&"Fo=m`aY8Kq(p$RgYIZ'M9'<dU=2i%Kd.0FUaY`0S737GEEQZYDg*^i,=+#GOM\B1'&<-^]\,Xi\ZL#mJ6A]6C,F,9A[Sa&"*B[$2DhHEER`Zj1h-CT1GiYR)8dM'+?(I_h9*@lQQ(ELfan.9GTR+4nkJpM9fMK.i'N%oIum<M\;))nV8@,WgXA)rMf!gU6JQ\,[3[e<KL27OA-*.;^]#N#ZF';9IFMY/J3[R0NM02'\:$l8F^bgU=uNB8?"QXlCWieE,M"I]\>=j9dKjQl50"<O76SSe[;qt;ZV(,eJW!QSkF@($].J$6T35PrD/a+\0e`^[+H/=CEZ^hI7dMsa2%6C/2Jne)FZ>AA:F:4L+E/t45ff89LsD:r[skqE6hYeJ[:,n;AU+%W)#6l_27]_#*/.h_LRA4UGXN/WX^lGL=6rn>?PY9a?:?j\4n+9qF!0lp/Xa7]?ldHKA%_S,G$MM'ebG>3b9!\:*Y8g%k!6DBeBA_.5AOsbW1Isol:'Nl@CU)jnLOIU9O??!XmuLY"--[C:W6t5-.kRE9:LpYeq(fm?YI&DrGDRT6fS\%d8Yr3/5bc',LM#^OKKZ(,7[PJbnQi`s\tiYB^-UauY&SR+1AN>eMd4h3Q60Po6L=@.gN.i)Msk=-WgaRh&mUWXRfc2F*(h\Pm/k/e4>aeU1_I!?%pn[^jC9@G'5]%MS-\R<=:t.>T*La!j(H1]uW>Eej*Jj@OZ2-)7AdY\)i8*jABZ2Fo!""H1[FkP=,NfXN9*.]8<=a,gN,k*-[6&59A'm,Na'Z.,.NQ"=Wl@G#>d3jB^f'5Hi4'X:=uZ:0rK]"6#fdBKN[VEWFf(FRuM^$lBMrU^Eu[_ro4ZV._ilr:)61TZ5@XkXCJ6Psr5,j!)Spaaq7%JhVNSB[N=E68<X9?Lr^H:4:0LrEJ9CXI>'B^=0#]G:Zt0j=JHVmf&1V&i=_B&h?B6lEK/g=n182e.`&d>DHQjr:g?WfegSV@>"U)cKgtCfQp98sZHQPDEdCZD-G'nR?O"8FPGP.4M8AlON?iV5^RJICWYrPqFr"1(;d"f*;/qR`nW/7?[>FOe&(//DRuUWDCT$&s;ir]FuP>U`HJ2F"fu)3LJ%(@$5)lHK[o(@@SKBdlQS'dQ43<IORm]^2emhT#;+QbV_gJ,h\FLF!NusABUF8O"/lsAtXF8kd8!]fA&aCiU>*IGd]b7ZR@[DJ\)W\V0c2r,V1t30'oG$W98Z!cY$&+9YtFeoo^oFLgI=0,j^pWlRVmJbAI*]!aeln/IN_$?HUd_k^r$<0quhY_sJ4j-\Yb-,mZd!cLMm$LMm_.3`/3#&ojfYGa[s+X=4u9beG@[T"qhUmMP"GqBJbj+//">[uNCM&rH&M@5=g7b\rPurW=P'+Y%l:p#J4I.&.OST+'5uapGDEprF;\%[`tBLhj\hP9:L.^f5EnCV]D\4t?:#a8jgZMV[&"&O#f\!,ocJ_0<I)<eRDW0`JMW(\-^cltGK:hatbk7#ES='k9c,_@>T=pVLJ2^>%n@d>3,8*,O,&@2c_I+iDFM]cQl?=RVCn<c#$hckl`QkUUoD_Y&MEd?\g/rH"ptDk/:Z*?[hPRu'$__kpf'\"BN8-G>"uqWmYe.1UJ4TVB15B2Pa(JX7M>nb:t+a#571Baqiq2LQ'B]NCi(ac(YoOAj6k*Pgq,F=(fV$up!7m=C"mQ9?W1%J9KAK('T!HXq>9?TYg8)e\iVMm0IrL^#LCk=\oI@ap6.T%?r&W$p;H>3t0a-MEQH!%JB@3:X5cVaar:Udh3j>:8:!bi\mU;]rS"W?Z.BSlnfN9f/o&"9PY7.A\_OH'JuSap3kM&o*XV'EMHM!3Za`HGl.A:374Vc14-P:gB7IWNqY?7uS6#q04-4,r1U!?.Ks7[UL])KR/2JO1>[uF.#OQ4QJl#["MQ(dLs>oP!qC*OBkP*$nbgI4$Q#);K%XM=T@5ugrn[`,drhf>WACm&g_D.#`B.TU,]tU%Z`QtgVnLGmX4ko;7a4T*&mB(RY"+J%VI>lgVCe2$&]j,+`'L'=Oa\2,<a,VU74kPmnI6tI)Ut#NnKGr-nKS6mg<DQIC=H^d5th7#D&gfDG,o2l'/=WK/C7`SW`)03b=^l*'0QmVd)SL6`t$Db#S+U%a"_r"g\D3MYg\hC1e(b&pFcK)7%"f#>s=?OlqO,d4fI8NiH\`RVZbPM#MJYp80ROfngC>DXS+&)e[3>PFt&+CCS."%1(7j"#+!HS3(.!0qNp%'PD1Jq5Jtn#J(slptEdM_r[WC_=N-BUYQTZB\TK?lbf"[o(m=1O8$+k&Cn?-'_94aJ7aIEnq2u,phD$jX^(mjZCJ%>#@Y./=1T@ZH8`Smi\MSOhQf3S_\MhO`,MufN4pLg'kcs#Ug1@U[Q__IDo@RCJglNDp4"_!7TDbR_Yq59_.(oG'aiijYmPTt$E6:7!/A[g*aX:<`b]//m1f,Ui(h:^4+4VP`tsoZN,L&rf,cRG#:o&(nAE4/Q1Q+#[=7f(p9V?hK^uV@fXJ2^bN@9O_YqC65@nK&fXP0%+O0]R0YJ4i;guFEnK*"\2KAH;,7oM'^\C#PPU#X@IdH:7>8cHRp;,tm6+uAi=tIi[WHU)%JU1B#+^:o9CU4j3O(bn'dV.\B<T:-F`;>@jCF)tNKO9.iXEQF?7Eb6PA`WYUC%^`balU%4Bj"tF`h$Puj,K"'a#k#4a;MU#C7+5ie3?TJS'k&2It5"n`6lOc4k6ukk`W(s<_=r6-LNHS50=2Ap`K8DYCc~>endstream
|
||||||
endobj
|
endobj
|
||||||
73 0 obj
|
73 0 obj
|
||||||
<<
|
<<
|
||||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 4186
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 4269
|
||||||
>>
|
>>
|
||||||
stream
|
stream
|
||||||
Gau`WlZ:f='*"Q<!]-C:aGipa:!0#%:[t3"c]0#M^>9+>BODIY(fLP>;KdG;r@LS1+c7HE3UMg(<@EA*@%Y3iKf#UBT9fH5>9`]ZJqiG,dW@=6,L'1]1q?"ePBYp@C$V1aV:_rIR`KJS`A0n0]Ec>h2U!6"!<oSNW[ejR/:jUWgl.uM^UQ[aETAnop^"npRL\<\:'f8[SKf,k"2_*\0g.K[5a/Bbnh]1=(\k$h@CqD3BGPVrMq&j_e^Y,P5`.;%<Q@OcA*G4:j1C3,291BpNtbmKD02QkL_2KD)+a>5ob:VGS"aHS9[ruF^LXphF:E!r]"23p#p(",1K!DXanVlSaiQfVd4(MN0H#F=-C&Y(dhO)hfrc:*@]T2dUrRK!./"Dcg3!I%nTLPE;?`B9l:YI(,XTh1"nPe0#16BLZ&1EI8S8`mkB9V8fE3%^XHJf#-hnjqLf+k^fc&s9#&*sOeFtiN/UMPFrd?MH]uXTDVK$W=*.j.qb$=oE?(pV)W$oeB5Le!M(s$Z,R5MOHh"3BnT'g`k"uO1?$DJb_m(ak>$7>d#GsEO$$mLq;k4?@r?i\G#b8nCjT]:!;\'&L=`!oJ)-aK4Mjn[t/T.Cgb&k!u*PNT_+^LX@!YijCKS;<euUhLB'-7He]@3+OZ1tfiD$&Jgc>Aqo*=Kk0#EUKPaS>9Br_'?/Vm^JEEOm(DoWma;_;dFTD6rS&,hc9b&4ppGk"p^bIPFFZ+6J5;cZKXU3^T[)?=*I>26d<s3hqp`pGU]0YZ>u#q'V`3U5coO>DLAQeo4g)8aZq,M%DYms!8bFJ!)LQ6q"WPC4;@tV\n_E;PRm!S-l3?M6M[kB_O#usX/N)`MXG/G*O\_I+Y4EC)Y/(CBWSbT`-!or?drXNeP-9X["7WY_@gte&M8W*L:L];QtF/jp0NgB!DCiN'<UufR#9A,QSgNH!!1[rGB5F0a\-LDL2U$kGK*X'7[?">BDNSuag\KR8N0_mklApkobP)1K)5j]\YWV@(19*@6mNkG4bA8s*0MVX+Q@U]Np:#\\VnR6#Lf.I48TMM_Jc#Z`At[3DZ._N*roH=;/IO@!6B%H+WE\cde<_k`i,4V2\g&<0X$CP0*&:G]_Mb(3MGDH)=?LrB%`(,W1uL(:L<);\B7W<MIqGSjlq5k.;=*+EDU5(KH.V<?>aZnAP4!Is!<+YYCtKZ#]'G]hk#36hbFEfAPNc_kPNFqFT;0rbPbR.#N]%!Ub@CH49<RLece1krOA,Hc%,RFSG'9^BTZ$QG&_YJ2]5uYA=VptOo,QS"9?^M@?,6<0^tYpA.Me^P%@XV6LN6U#o`^RU:dc.Zd8AIrELf8MIV-,073bC%30KBFR7XQK4iUk/#4I]4(e:SJfhj)cKhcpB>gR<Ts$7tdhZ)eca!`HFmkhFJYPN,`P0Yhni"-pDkK2H'#U4#]QUqj,@bS@6qa^kj_+`sN[e.FDnnuW*.UR_)h=i65dQDSC4$EN6b*@f[<$N_iUUD?]G$</,=bU2f[VT6C:Uc^XX?Y@M)YW3\\]]oj`!V_f-O]KBS[E`=[6<`Z64Z(@[\PC9G0[0Q<EV<+#f/&\[n\hqee+*48*;(`<JV=3FpDXo\ep]X&R?pSm]RZA!!KH@SMk+,7I.9&=u8G<tli$_jsInV(X:A_+RT/mr0+'$iEAV!an:KF\N,0;jt_p&)Y-`#<k/"Im.9/BberVlBCtkK0ug+N2/8PB(5$eO:?.g,E^#Q@lW3djIQl-4@Ck/8SC6uPrm'M3nQ^1@_g?2l$V6rDh)uHNaS7lnnCYRI/"o/iFbg](jO_'1,:X<T0l#\a,p9HYhC6b=6m/^pWGOMKnFXK)J;?hQXp%c=/cERG(&rfe01QBi>6TU_fP/QaTlm?T-7^`R4`<Z[.8kA(hJYtQ#,U>R7;sF8Q%\JRdbfE1FZ8#<b6k>^p*Lfg(14DX=$PSs%T)&+gqFS&5d<#.!N!0`rPu/Vd!*EER5`qL7h!OOrIU]\"YVV[N`8p\U!%[)B\40c#k-QTJ`-ZZ;E6IduTC%!?ejoI`)830l(V=8b4d8;'=(5'M7"@fQ7Z/%gho]eZp'AF-7(+HfLYaoL*$]0cT^-qTOR^-!nO777d&54V2%YWkVQ29fQ%[3b</Mc0bIe5$a.D+FPRF6j`iENX7cM'8<*MjjM7#N[Y(uK!Q[%$C=&9?@m8"`X5C6E=d[c"QL1UU,gZY.eQ$J_jEMT<&m0^-qR^499E3A1"aq=&'`etl2dRGXJd/jeNXCd)&#h^jC@<[$.F"(G%$8m6ghZn#/FuG4<L>0^_d3;`*7b!DUH'p$rIZnRc@n^bnVIIfu3"b_Vb`@T'm5q\?'R4N_c[$9-SBrbLq"XiC];jY+m3`2?tpqqd]hLL)88mYKB,SpQoj1%q*T>r.lk5i/s&:;c+8a/@2dkSuRUDWkIL%f@cpHn[J.[[eiDk[rRD]%J&5A6<WgFcSOW2s1+g$M1n(Fq[3O`)K+69Gg444HP0&TR:qV/+#'n-^sQXD39R/FA8aWMMis@ElJgJ20*V+AZM.=&l18i>!I=K`h'e[WBO.kcXo,8!7,s*9FLHgTHBB-o\g9il@PeL7TJ5F5,)U_n6mW*"f+[2;4P`(!ahJNq('qmtj%Zl^S:fSGcc7&bPOGI,P%Oc:"flklQKKEIk90o7)u15f==6n2ZgNVB:JX</)4H0e!j^%5U1'W&6;/oV<^24qerE(`'er=M9kVOTkVC0*lPB-Qd8[bB.+'QhD4,r5]Vtq'+TOu=jPBr'C?4aEfXB$$GXW)"BEH*6>:Yu.?.Z^pQg]+=S(8X[X=h\X`QOWeP]RSBL,e90NL?H<jU\!"`#e2je-/-d1?kJ`91PsX/<_`0(+^0!2bHTGZH06j_\g5h&Pj9J,FNckP%3$gD,40NlB'Q7p-N;\&7F>J#Wrh(4'V.D^%*7D]<$23?G%i/G?-@+9*5Uh>!)%/L8cWaH@gOa7ZrG6Y!#CL!q%3s]cga19q#,+Dtj`Vf.CShUL/l0;OL&kR,=gW*hu:.fe0JP,f>C;&GiV)PgGL;6E-oW3P,bJS@_qf3[Tq@67*'8V=tZj["CN=$nq^ca?B*g]>ui16T%Ij895X[!_O7pOr'"<%k&'rfs7;Ygg0D_r/+C0;VnrVRmj$C7c;@;daSKA7BRb"&mXh;-e6_kf">fTFYi;sR%XiC'i_du$YHj/WblhRZ9l`OgWq3Xh:[RhC@tK]aIu$/[pNUs]TCfmAYG1,rR-%.%Lq,:S!3iY4&CNk]:bts:n?N4jAq[2iTli/$dtO&Qdh/.&*6_.2)2dh<j(c:T]Ji\i4Ng5Gr;u[h*6fQ:NdB!Ps5eqiM/3#gS7t<ZUMWs"5N,@4R^6%4RMajJ#3GjL_aJXb[8+I.NhQ52I+;7':VUadWC9-:48D+"o@ZfoHWTN+D6#8,W3(*$K[R!cRF4WD!S*&&C'H(H`mltN86RR,ML/5>lJ33e*ihrUJ`W9@&]5gaOAsP.r:>WhkjEk!a9#VQ6()>B\"5BcHul=qQGf-rc'g04lN4Va;mp6%Dq,E8@M^^cQjhQBtF2"`K[O4SF+Va/$\:_Bt$/I$,<\B5Za(tN"US.1NU/Wh=dk:"`M$(\tNTQ5_t[r786LJ+_!3lVRsT:2<c%NR3`tS[IXO'VKS+[?rmn+5G"R\X3")e9*3547H9_mB$TV'B4d44kh71'q;\$/B)r<1e(n4p4[7Y83Peetla4,$3c4;bkVmCK=O.HFF_TsTp59s9cVD$n1IXj9dU`*<WdFnW/:`)K2?;J@HZ"bYpP7bZ;^OlMb@Hl*S.<h.%r^pGJPR79?BR,jh,-\(qc0)t"Js6./OB3Ub@:R3,#:(3Mlg2o+4`[*neO1n8b=E]9B6m'P(PUE^#^Ad6[C9`9&ut;pKH.RJ;g\Ag=l9W\LOA<?<'N5dU`*-'@K%$Ym?e[Vg:?`q)%6K+"A1U_osk=&;,@g8I.#kP25":Uj6MZR"I4mSe3%h05L4qh*(7'H-;!K(BJ=HCQ.5U(5-pfLmOLpXVK<&[">;rg06kf2d1N"]L6%T__A)6Fn<Y6C3>Z0Q_3TW*Od66CWuGpX6LDhdW0b,YPM,/I_=(GZMId*J&=-jc-5iBCK2)['j'.>p0!@oVO8r7f#fH`MXdF+V)Te=P)Yp&<N.e??i]kBXg=mfQGKcXNa/AaMPY$)emTH+BSb4KO@&]g]DhmJ<&dY~>endstream
|
Gau`WD/\/g')p`p6(g3efd=#]AS4m,\V[rCD:55:F1i(g$q?t$26s/QEnoHR^EI1%=I(8]g"f$"lcQ#XS6%m16Yf5H5E5^#>pAo\K)2)rV!2PJ8"-EEBQAsLP;b__BUbEeV:YlC23B[3.$cSEiB8$4(U\j\Y#oAC7%27^07fjX#)o4ts5HPu)a.-W6T@@>*.,aO&ICT5\h@_l@t]JJJPV?Rj?)6-J$k'+Qq">V;B3HEd4/G#rTg?qT?o9B[fX-9d'S#q#GXkce>FH"d!V+]@Y4%9Y,=bsV`4F*EUsqERQ,<lMHXt`Dmke9Ju,!XhC/#*c;PFn7Y$&C+<AjT`XTehj6=tUhG)X=C!Au)C0(&$Vutk[%&=_->BL-@E@cNOC2?rp]]PTcq4XNu\rBHA!s,Us?[sF!gJ"l[VC;j"B;57cjs>)q8_:0VTW@CDQf+Q,QQ)QW*%k<@a79XL)m--^'uL=d\Q1m+bY2EJfQBP_Ct1_&oI'd!`9s?h]1RTVms].*<FAD#]&Y`Y$$mr'5CYtM+$OhRQ*7GcHC/uTS^B)Ro5'\fF?./Ja[MS[0J2),akUk,CfL-deLc,p?M8e2H*^%[Oeturg@'ZT,g'Bjq,=!W@p`)tI`BlDILKaHZGN&8:N!`I,Z".qO"Pm+_OMWW";,A%qaMW'5Tfq9-*-jsGC:;V_qF[\KfQh0j>:]4"t.M+fe9R]5C([iMjQ+'U*53OBAY#ME`5?XFm05m@f2?Fou"fQ"ZRfJ$X]>L]D+B0Oe?FS%@.G2[[8tu6F;Z7PSkW4jGi!oQI7,nI]/`^EK3_8h*E2Y+^k7Nq(_E$5L2:@q`L;%gn?TbT9=q'rsSi'r^IdhNbN4+rd"D<)`U%4Gq`Tki=VX_FN4X9lM'Spf4m=L18C6GS-5)XGfg76g/eL:.3F'W?Q"BlHiQKWAH8=-!F6dZWaT*[*]@6t](a]S28sPlmY?c8Cr[tOeFYoV!0'8S1PY7SWm7NRl+e0RT_jD\#s/*BQMtBQR:=i(*W+18I6!_mEK[c?BXnr6<:o=dm!p.Z%XPjNF_15LCfJs$N1&ac/?p;@oJos8+$gnM9mbglWOp5F'#G00+/!b1@ikekE$BSslk8A4UOXm=";.gHG*Iqg`]bPiUUfnj3%;L$7k5qVc$,XYHJJSB!a&TCU]UVMN@8<FW*&ls5fFR`dUfR*9c)s"dHq'%Q:Nji67HP(==qG(;V*I(;&se(!9M<qZl`?el;5l%d%WYY0/P!J81G+L9T^R?Y-+,e>=dd#%fH>>Y?P$oCMY#,ruU!fI3.3>Hb*c`O3j6jb=csWjl5V)\6FRUX'O.2M-ZEtE8K<!a5AXcnRL#qh@-=<iY#F*)nK<[NUJ3hWuE[jD@t!o^bl+2`XahHis*6pe=q<*17##?Oq_qt-;77"NtCETh2f>+?Zf!fV^mf+=V_L_Y(hRhl[^(gWW,Z'Ad,Q'BZhsQ:[g`u.X><#n1eo3=Qmq%hR,f'lLJ`lHTa@O8:WQWBsHj?,^CEe[("DQD2I5r@U:kIXH9]q5bb*AY]@5W.u,FP['sG>>n"M?=W)afCd8*H_R7Cl:coFr0N:+I2]F@j2T'n#W&:do98-[=K;4_7[^);D>pWqk0P(I7W`;$SiQICe'%BDZS1Ged=>'qfJqtb1&!M[.Rq7i]q8Z3'k02UZ^jS.$`d@Dl)#4A%AJo%@&A!(+_CJWm9dH+FjO$cO%'_.WO:_[B,m_g?n&l(NOPrq]L!^\Njq&hP%.>ke3:jgnPQG5X/9FU5mo#TDmuH;-aTJ"P_ET-Hqm;5m0(m;tl-V5loU)F1)UI?j"!Hpi?q*IAIYiTaA&peT88sMq&<bE*5ud3$-ZuYEBGH.bMl!asB<_Kg"[@TM,06Z*L%F41T#8m?psF<]7Q?eRe'B`m59i`!&m4Ogn^Y-#PPm7/@:;CS]Z*>Ni[*8?dT,R!MI#%#!cnVrMX_Tjgoqcf,C+d!0IrAsD@=',XZSg279n3G6HguAe*n2+8W%0<'DBaX+`VR<1aY`q$sVV-rOS]dRgINoJ!6^5-shH,LmYWJ(VA?]`rPsYVd!*EER5`IL7h]cOuZ`0\"XK6Yp,UMR=!e=*hDM\c"nLJ?o;1NI$?)Dr1cMGfi%L#ZsLQK.qWX',,oW^3!I1#6BS'd`hpGbIn6O$YEnkA2^A,`J(EI:7Si*!Z!!P,VpF.J<2)f\?\F*Y6:H'=W4c60FZ<:l3b@>np$I/mT<C^sO?SjF<!i(HMF`+'/dd@lc_Zh*'[[bn$c.i'-sZTt>5ROcS/$^G@R#Nj#gOm9i]qjmf"[=Pf&I$5)>kVM,ZS>,<)SH@J&eGDf4RUS#CsCl]QRC7J(@/Y1=R4g3;1:Tl);kL'IegmID,8=e/im!78#k*i?1_I"iTL,]0"&PC-kC2H4%BsMTHm2=D&fHT-3=m#q$M;ea:E)=]oZ77+a6]II%5@RS7fDSp7J"J8$P],<0=<+W[nh%%R.M'"E9!^)Y?mQneFiBdl1+<>!,*.QcspMJ0$D=hY_4#F$n@Q@@;#?g.MjDAfg6]V_P;5CC*7%!g"Q(:60.O=,C)JKRh-%D*CZ\N"b&U8cZVc&q/ik&hJ"I&n=5RB,N(>=\4X&7rSeGW*N5_;2E`jD$&jrpAAdlOTISaUF3\<U?VpS9=DO3$dh@G*#NREf6\sE^IX1#!iG-qCFp#;+H\GOJ)Mt@M4p'HNt\hf=]9.7ko!d'.jIP&2s2WUDC\fG>rM&1B>!k<%JX)ndrb1&:rPpr/+sXPGcSlpS[^\cN8].1^>**ABC%0I[1G[R?jVMD?1W7*JHC)MCGYdSKWWZb6WkV44'%ZVW.87M-aWQb;!,:WuBn9!Q9(3pD*a,,83;Z[RK&n.V\rR',WW7>H-EG\n4C@Cq"iD[!#%*FZ`#,04V^odri;Ai074uAqI%KB:d#Z%dF;K"i5Srp(5Qu;(?[Rad5&0&W5'WV,+CkaKU#G`<:PcmT&:=-=2C:=LD>e;cU(`A3$p*&6U:^=LU$e:\hf_QFhOJr6M?JQFh#e?KU9pX-\R?.44t6DuI[0;uk$m7UPQ.fLV10f!S08PKtEUQoF)a01ju8faXR&jgrD^MWo?E2H2#d"_RKXYT)%:JS^ZQAs3/2aq$U:-;8)<&tr9ha_22p_RZ.iXs4#4,%RF0?b0#6S9D-W1^6Xh.WUTOkUpmM5T^nu)Pj2<#Q^b05KO8Oa9*+_fkf'_cgNKr1jVG:74IP-V=gS0gE?^j\!gKa\B#CQe#D]I,Lt;g`k6+LFYg%3R%XiC'i`p@$Zb,CW(h?EZ9i?R[%D3X\oS-ge`rsCPs^HBDSF&nI3Greb!MGV]=%Ce*#bnK2CEpbs.Ij]AH52G#h95V6uJ:3'>@e.D31@"P<(N2TmTVQ3i3_>b&pu.[#?jCafCC[^=BZ6IiS#MFr&Gi2\.%hUG9sZd4M$E]\gp5m^*4]pL4GkpA*u<dj#&bo<AYbY?i7b:oM#DY+trP9rUm%])>E"Fd903qX4IW6g6*DA%c*1g7\$Ejc1ZPd<NoRm+9O05Fg2PG$Z+q(qXi)6aX6mRJt0'Vr(^:7YOh^+AsA`OJdH8<S/M7^29o)"K]IX/NmY,;6N.<Hp[;Lq&^DSm,Mi&HcAZ:O?43jlNR*DO`n.Ro-C1KBtB)#`K[O4N;$uVV-<MbFP*.GK\b7/TW?F$71$T#ahr!gGG?Y^i8)a`F]9@$TYsa)U95gr&2B_Jdlgs6RWOO7C^K<)D<7G<e]rCAQMmiJiu$TX9l>2/#rJ.6NF/QOGtaPU1OH3nXt:QTBCD?Q$YW)"m_Kh,psE+E#9s8Ne(b"<osq-9hmhu]*B1ViV3Uee0=E]%>P0I!'HskVP<E$KndU87!:I+\!,Oa`\]kN>n+0aZ>_e-#ai],nm>\mQDsqn$:D>6qP12>E;FciG<LUQ)V9'd[62A^I,6<`I:R/E.2D)6/S"FE*$QK9pHka@Bnd>fh6(7/VHB>lb4V@`@nl1No/K7t\`g:%LmJ<5URF+U0.\mJeZA6=(koRf7"AQs9]ptU@*jOT5jc-r;pC%)@+Q$W@!XuAF&,-<C=kNlE+AJ)3`2C]<XhMH[#Os6Y)6q(J^`37kBDAMB+l4AO-0ArX`O'E_T^nT7<`&aSL7T#.;-2X/N,hJFrir5%?=[^1kA"pJ:_I:rk3A%.G)BC9\N6OQr?t]2hWeNPh6!]liL7GlB(jJR<V]!2e`NKPQK*^6Ak'aD=ntEKT!u!>`rno<;>mgPFn-"H:uBb`.jesJm%3]cJ94Gh1i:#i/A2)LUJ1h9[lsBGJ&Gc9Er~>endstream
|
||||||
endobj
|
endobj
|
||||||
74 0 obj
|
74 0 obj
|
||||||
<<
|
<<
|
||||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3952
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3949
|
||||||
>>
|
>>
|
||||||
stream
|
stream
|
||||||
Gb!;fqet4Y')p^:`;g,_eAeB\Ib8j]PrM@a9,#(glN%3A't'4g:gAaN/F3<3S)m9e`Q(kOJ1HSsVRW(cSXH&I^6qtd`ZHN*hd$8q]S#_n"V_^>k+Lq$%X7C#p"daA'."`7g6/Nd#$?V2IlKK</UbflU;]]SK6/,U_i[ne2;q5/+eg[jnO.Ckfs5b!s3AB4iu5WWVmGBE>VRbZ90LWo"&6rqg&He)Xq&4Og'M`npI>n_#Io,2]-"S^C])kB;\Vm1ELEKb>uDE661"&VlM2-'7_YDQ.Mc?\cj3_RiK=AOQu_h6)6jo>Kh!&,oBe"%CuGQ"$E9IDRBh+^19W(-;Dm9nF;]Kd=R,[@[6I0YG]cR;K\U**h.-o'Bs<pVRCceQ+G#ok&PZa(!dOIuc-6AtPV-uZ0_Z=qI3P`=Vc(#5qu&<uI@'T2ha)n6%X-3;q![00Z;jOV'WD&GH$^_QYXs&=%'+3.qf%H8Pe362?9XUWjm)#Lq([nC*fle?mfbmd0,.)MWO'.JntGuQW]HOQq!7LEI')XZAkE!5I)oZ%f?CB:P%bl@N_*!2/5*7XnXBc^FueJreL<Bp%,IZ1R6+Aep]kjg>R7*O<OWZF1*K:.BCj3>_9CfRVa'-h'X.^H^-6%X^V0Z@2+!1BCb"_A,*HcCR\>;.V+DFJ>_o/A$!L35]k!$3=gG.TECH1_`q3e]gZfMiksrfPQ!V#4I=tkMk`snM0U5#RK1YGiQk[(e46:fjh;>=no]t4h.*kZj)/$JWG<DL;kp5e$rQl-@Ec#H&Y5?,3Rug&?X"%X%MTjOR/pFdo-@SA)C^YNc1UHhNNAjLrs.%J,c_Y:=6T#U=Gil2Xa!Y*":-''&#*q8kolk6>/g2Cc!Y:fM',2+9S)EBh8QZN?bL-#2^K4.3i=Hi7%Les^0WN_ZXkQ-66-5NfU05`SV[#Se8PhA4*"bqo*!o!SNS@O<JN4S+G`")'S-lgdk'[,l?p:`sJ-OFhbRPCMY)eLl]5c(G2<:G]ID$hr&&&j-&W!(<ibuM<J^?95]G6:30MTFkmT!86`M$,8!m27n%s7fM"Ta73CuEdeHf4'da'(?9W&!Y-$!c?n+QB99\'qN>1_+MpG`N(1s,ZetjK03N+$\;hbTaRqj6]9I','4V'd9AGJtGu:7.cTS5DBmZf#5n>AVX9sks](b6kP=[S6nf&\&p:**@:dGdl^k')'L73;ORSVgr!<UK)<A8@bqMI;$a7D0^c]P8V0grQ6QjF0h68.?Ua=4\d8r"Aa:I1rB3[W$Rt6#=6hi^[!5*<OK_(((aET4GtGQ!7e`[>`Q9"f_^0kqq-L^eO8iqtK&XkBj1[Zibo_9tHA;*:".R.+^*&FTpKu$(@0dA;hV_?&_Q$E5CI\O>p?fQ/Vij0p(%Pb!0+cLt]tgNe<maS[M?UC#!u#[d+_sh'0edFM*,mG`Y[EX*hlFOM#^t.8jU+2E46k]#4ab'08(Z<Hkh>Anf7nS[C3TMO]6T(b*a7&$okfg)[t;Q%Q6`?0c;Y3NOtG?I6L_+8l)$TubDrC^a;0O=IN9el%[+D>ERnNT+G$PTj:#m9kf4(n&a;6Bcnn?PEU/nmQQL,("jC,V6.CgB+VC)NMOqZOmrqipd(&*u0<@3^DTjH;6qhPUZGhHj$Qg<3R%\7Z-*uK';2fmb<uq1?-o>(<-!(A?nUO&s1\Ku]E0ntN.!)94ob:XD-LS1qM5;AN:TndpC>=bR2Uk0'8_&Q1B#D6A(^8`oV_k!l/6-d.7*PB;p7dJl5e^$H"m*/P*h66_C\Whq\!Pf]0@_+[0.jN^A@=gRSM938b:a;O1egF;)sT0eX_gO$0X?'u,.*[5"nuk]$=l<k"?,W9M:8$L"al<G(<\_g^ZfjG:6ktO,rA,7F-8N^6IAtNS;l!rK)<1s1!ZJ:8%#TYf^Pm7!Y#e_#;Si30[2okEP#[uYT]"MOEi&TM+!eU"N#*@ReEsJU,.bFOEj,^BkJ6#8":)A!@Np,SI1a-'J\r]NbaCKHXa&`-F\/cgoOn(F,.ks$77^]*K#%j.,NXNGdE"]boQ2M17NlV.#+&`2Jj?H&#I^CCh=/K])or=rjijBl]*NqR]3`IJ),4h!B'A-R\=rOA4^rD)i*9eJ5_;V$J>$?-HH.k[g::3I#^:R?tQqKiOn6<G/hT*\q,!_-bE$'_k(@`qW:@)g\pA6QM)>E"a&cN92OM>/qB`8RgZ5AdgI.\!MN\V!:^p'V61B%W!HFl06.b(i\"pRDtto_Fc5U&B\8KuCdU'-:o3!4]%oQ(1PD]L9dfD5I[s$1=^>/?r8;F+>p+o\]_OOtr-`V9nE#V&:Pnt&f*ZMSmM@/7$#Gna!(:.56D>_@>-K/1Z=:74Q)^)Ol;<h43`NKm,Q:rQa1Ll>5>bDhUpTB35GCrP,faUO$Y&8I\0L>.1r0$c2f$e/P=npn2%OcbiMp)qdq?U2CDYHC)UpRcK-0))#4tMS"H--+hFi;Tc.LLOL\s()UFKf[dX;bAd.%'-;MFE%Pll.A`uS1(K*(q#PFCRgQt(C%&`rCjMh0a"O9.j0CpCWtC=\<@iHjd9m[.rd`FCiea8:jV^"R1X9Ua]e+^*1K2G8BeVH?nqp%D5CC7W`NrXKtO../YY0[W>8V$[sH]MH.V&21$OpH,:7hceYrnBI^u2t=E/e#U)++HNG)>Yfp?(6eG-+lhRmq#6(%<?YFkH.C8gLrXlel/<cU?GLKg+$\][&qWF!anCJ@m"rJO4?&!@A*lOn?FCYW@l_B/Pg%G!,<T^TF?dpoXSr,l!;mB5^6`:kjpJ!UbeeX@J[uLU>MW@k7-`Rb$j\fD\ZMJ#0:Jb0MUkYeel6ajVKH5KaIkhEaqkn'oDoKtFE=1OGYpPqZNAm)_@TF=9<B[@K]b`f%_5ZBK++9HL]TP[2Z@o(aNEAf^RZ,X<r\\!FYQTi8,4e2aI?,#Mrp7s2R`Nhm#l2;k;dMq(4@f.@tGV%EjL0^@-b"@-=CZ8Eibe(#/"cW_O*Kr23Ntlcgb-.!k34&A,mG!7D*/HIg5NWJbU/8Z%[q%(Fc=M#SB^Nq<:I[dGf\#`:`TgJ4\Ao2b]:A'`)I4K][Ia*iT,g;,'\]*N,In,-ig+$m[..H!%o?dBK[upIKhE+%\a'7bc1gb*(:3YBZ;F7N4iMXg=1H1Ip>,GtD7"-/4RJr5*>CXWna*reJEa>"E%[O[G2e?,;]Ba='IcNS<gefT\pN$TlS.l$D22;(ij15j#]\n,_[ar]]Ad*dH:c'diGSX925_1&$hn)L*-[ds_<d'utU&iJ!XAY=jNSC,RW3`E^6do'S8DKHaURc?%8+&h3c?b[rtm"V#,`)2aA]5gL']7C.390_8a9^:*gI92?-]18JGZ2qj!Xl@1OB/c3(jI=$6^F2j=m"`u$pn:/o9nbK?C>/,uL8Ek1-'m9CD1r0=6qooXfaq*]Y[%Qn%3-&3?'ae]p16B06m3N31f?+*rZcC)tF4o/&NOb):$)>-TRqcDgh2`R[&eLo-Pq/ki=%WEY-%Wf;1ggOr^!=;?csRkFqi]7Hg.riM=NFrL-^rr!lu9'4oN;Dlc0kq)m@ml>V+?p:ea]78R]LN?*E29G/5=)\VEhh8E3[ljbWAo&2n^)RXZj4ZfQ]8iiqmPU+7N-NeV7/P,;oXB[A#Gfdm'Qa<`VErV*0,2't&,O7E#?jV`CnF*-J9N<p]EQqF)'.55\$kr/Ni^8(9Au[I;M>bcd_Sc*)Iffi&sI50'oRVQkZZHOD8-(Ei`Fj)gjmUYl.-ce6cG*0M$d,QG&?\J^"MRXr(3Vo,PbfBp2IhQe,?bEIZ+C?UW[#[0QEqb'(_\3Z!&0EP8s]LZr4i[SqfkpE'F7V<NVHhF9'>4GsmFOPP)n_<[i9,3nBR!k5?;j0l[s(mC$VC^Dt=qX'AdM9_VU&KC_A>ZlaOj*aIh"/1PWKO)<2Q2@@.#ORifoZAHKX;KO_TDfXoiZi&~>endstream
|
Gb!;fqet4K')k%D`;g,_]\>j*qiT\$Y1p>>mWI9s]!hnI-to$WQ-,gNa`2]Xr=/G*-0miW/T?W@[:N6'Eb7</^)8CCj.DM6n#cXshSJuH!f@>/F&6sMLV*<MqX3G1M3@TiD+W:m""_@*092'rV60YK>+>`J8_66e*(a.0'@'Pl+q!o`:F*uF/R+#,BDrP;CNrEG8&[+V`2n&elG9PYd'RU9qemnElL9e`:4U7>+&/gYi9gX6IcR6+nS]dM;(Ti/AV-q+8QCuZZ+mWEk>R0Sq/VLr=EngP,@CP*9,>l`aO.&"`)cLE*bj][\#8/jKbq*k8C^\]Pg*^(Gs,l,Wp,hFb@nf0;TE^Wr@tU7=1^:!aAk.J9X]J>#$^>T\a't>&r<M+d3JoLJ9N*lge?WpBd/lIF)N5L-aF)-.YZ'Mh`es0G=`nR%5_2R?j$@^ruOo\>IAQ?JbnQSgCq\Z9tF87=CmuWLKj\MgpR(SntBlcX1uj>ce,#'5ApJ6#(4Q3'F[L2Z+7O<TmTX9S]h/J\U5fp2-nNbad^J/]_T.9G286RgQ6OdEiNYQMT(k<gd/?k%UZ8+Yu+qC(<+SCTn:13QpY:K(u;7(V9"f+=i`Rl7ii+OrY@]r$2:3F-1LKu)%6B0r=?"O;M8OY;>2C]agS2e)G"$MA3n(d3-lI8'h-jb[ePpfgI`#YA@\[8:DC:??GVqVKNqI?Q)iY0aOQ5U\]k@Xfd/eKe;f/QOZT=:^3A-+h0MH'Y.]Y^p`pDjL<G(eiu+1Y&s(QR*UtB+G)"#J5<QL`=X:5O6M@+o4M9crGIqSK8!M6+O@M>fCEIE+=gItgN';P?4\HlsTl@ppJ*e8KCtUl6%/:`Ck0VZ9Z*h2sKL?21E;ER2$m;^)Qg5o*6!Ps2gE6?"2780+@"^6gI(DSH?H9FU#:Tg&B.f$Q25QibFIaaE?*SH=3;%_G$mdiM?bH[+@"dPh[K(=tjGL#0oi$J4\@r"_8.RF:=R<QS03[i@26YMkLT^:BMKh>[?LUD!Itilron!?6f.cbr,hg*lFXO\#<UCNV6I?,gT)ek`o3X'T(dqm:T5NKf5GpQnW`_\:UV</3oo/qqDE</,m<V.[&@[MjGi8)k8=rE/C6<r?WGZ8__<i=_0/B)[!'aG9O=gig:6cI>7nW[r<[:c\5KB'1>3Vn#N?/X"/.sXc+^&&#[q'Uu!/OGBBYC<sO<dA2![)InCH2ai#IB531Vc7!Yfaels-=u<H?i_R1sErVaj#5KYm9P@5[9YXK-[l!+<`;3(n4m7irm9Z*LT72$=RH:P]c%5jUN3bO$XU0B>b=I"@D6tnIe%bWt>Vp,Bo1Fp7O9mliH>gf&(Ud#5e:L3,[MiP'=bS*:C5m;peuQW.;:N!XS\s)Xs^O%sEXhfOY-d]"J;ql<tFP[%USu.kr^i[i;X8Zk<JY2TlTN&d&LgWVO47>_CBNm9?aO"1k8qNShVYS:5Qs*J:N>IWTG*a.RUR+17S.aR,Zi]hmT%3H6Q?r+\f4g1j=#0I>D8SKe9p\eo>="1.>bMN2Lm\DYtYK'4>Vb8+_"V?dg5.S7q47YZB)?lkGZPmInp<!0UI3H4fQ(1+eH72nY.p^N(q'LVL$DL]F5JqV,akBWcOiF?@S_'NQ@Ruo9D'OCLd&A\cTr@+06DMhucM`g=XY=5/$.P&%raG^?Td[[:4:P#!o7R`b%Ks%?3Ot^mBm7&WA3IH(:X&7nlm*_R[!_]OS<&5QOI7,aP7QmU=KLVr8]-(RsO0BEpKF79u)D!;_*V\Kn6=7W#<4KZl5(0F(@!uaW^*^0$o':r`^Kl;f0VMo)e%_S/6eC%(_ur6HV^+TG\R0=5`hu)Q1J_Dr%Nd[dWEm<k(p(!4;uN1\-gP:li*Sf\<&Z1]j"D+SQ29/nod[JtCD#SHH?Wm=98*fsHI'tm^i:KL":;ssU_(#YpBE.ra:t$Y@ZX-V@7S-3L9>5$b9K&80+=6bFJO)'rcZ6Ud,K$(khi@iBh&cQraiiVkeALbWaKj_LWRdJ-9$.9go+V$6f"G\Vh3p!*Jud+.,Nb,N[h@apkWBmR;LEI61IcH>*I4T+DFiKGfZ@Y_8#EZP,apb/,7^jVsI4^s#;gAm[5WJNbW(U]+&^/;,@;*T$ucq5P>l/)4SrlV\4pspHP17r6ik-GsF<mNq$Y(8T7dQ/5P.c87oIu4j)3a,L:mX]OV?6S&khq1h(MlQ!eoh]eU^0b7Pj<A&$M@`!7c^<T]2Z7?k;T)T,e9,dhNPSIQ*5ZC5p7joh^6Ro7kmVf7A%[6E']ql='OdV;gT/-gXn[aZpk_aWF0S6Z%W\S?@LA*?kNIc7h(>b_*!aa+#X,n0j:=.G@#M1l^]8<0d=m9ZW(AV[iuV5Xr)/_l.H=7l$#r97"I.QUI2oXl9n-_)I&BeBd&k0pgblL/>8nOmel6,-,H=eX@#c$>#DY"]=s&Y#n.%,7a[cR=!dLpuTp.gZe=HMMh>q:.<3Dk9,Q\%*P[+d82VPN[^Ts&Y@5P[CU6W094/aC629fE[qr,d53-_]t45D^Sb2o_sOY.(WiFjiLH-SidJ6;r;Z:KPN%Y]5]si06HRB:/b]O>\4;aK(bL5g++qt\pCZkLE]gcK_F#An/+E1B;(*3/p]-MW0l[p>&An:8U\A23/.:]`:eb!*^.)ka0h@Bh'<#H4GDmC$='tU['p;Y(XL(p7oZGp\`1f5]&#e:jo\0c#G1YkI_5RR!S<YLFJ;O=2`t_Kr,(H(0e=2X#MSjX^%`Mh!IgkUG((Lk;+m\];1<-Ef4P0CLH+e:']UoL0TB]lc<Ct3S^?'T^*4ebkPf'Y\2hlPp"Y&E1eglTN\n5BU.I5Eq]\90%E_V`^^-\GGeg5H'+MpEg&[`ZfX;HJBSp!=Wo?Hl:A!S.Hc8%%^fcIAJ9,A^Il@a<fj"<^Rmi(^5GqUhCaQ0WHl%4l`Mq0PECt1.[esG'P&/e63H5]JI4eH.Jhs^nB)RP$emIr@5i8*n=?428n?g.AIJ2UM8D5RWa(*4!gra&h!F0.OnWL$Q):1kVibMf>()h'sUne>@6nHUEV^I<iMZ_fJfAGNsPHY.,Ql^/poZoK'c0l3+;?9[iR[0a1:-6upA6j?q84mc@[t;Ai@TT8lOT9AcP(F1&[Mr;5-*(`bEA)Zu3f[HKB-e.&NkW!nP.7Ye[NjE"L#%nq7l9B+%uHRYOMD\XLE=4BJgH89;2Qb?B=lW&;]smJlnFU"lZnOZ]dP92RI^j&#FP,\qi!=Xi)TYSR)BfF%QLH.fLp7'i+Y/GqZS=H36lR[0>n!=?6Vd6ZXM64jqCEEmk-ss-o+HMH*028,,JY%fnegqTE.bM6]ob*kZQoIB\%>61G?c.CQ#s>oG"PT6V97ZUMZBop(s4&ANs7uD_J;3c8]j@J>P^>rbksn52W2@lZ]TF.=Eh]U9=NP-5`D#^%m4Rq#S0h()23!7o"-86;FXb#*N'$4f+k9>1m=lo_984/Gm#U0qVs&^aSZlVDBsFm`,f3$&DLRaq`IEX/(6=Pec/Z$F#/:?K]lR.'O2II7`U4m3`H7/7^K7'@$!6G.:QUlE#W7k')L%Em_%U;?Y28lM/[,796sSNi@.^QA4BIRm9,XE3Ym0)0`7UDgF5/>((9;Z12S]`:qq35N&='WX[:I7r/CdC.2bVL4;U,XNZ,98pg1C.]V[gMi%ac:1IO[39jI%c.M3EoSY';I/$=Pr/Ni^8)uM0[I6thbcd_Sc*)Iffi.=o50'oRVQkZ[HP7h5(Ei`Fj)gdk^#/nG:GF]:"<HNh77tc8Z.?;:<Akkh;Rp]&1A,tTJ1I3J,Z-p;,XB9\qV,BBrkc'?gj]o4q;=\^N>M>FM]4SUV)(0EJD7+`D0Lm;!dU9dqha4-J6>X@\U`A"ehK&(FRX&r/i.(\2V!u`8X?M-Q3m61h0GE?7Ro6*"*;fZL8IS/k1H=FP+a:I$=u^;N"OB:C^VWj"3e-&&-~>endstream
|
||||||
endobj
|
endobj
|
||||||
75 0 obj
|
75 0 obj
|
||||||
<<
|
<<
|
||||||
@@ -470,74 +470,74 @@ xref
|
|||||||
0000001115 00000 n
|
0000001115 00000 n
|
||||||
0000001263 00000 n
|
0000001263 00000 n
|
||||||
0000001341 00000 n
|
0000001341 00000 n
|
||||||
0000001489 00000 n
|
0000001488 00000 n
|
||||||
0000001638 00000 n
|
0000001637 00000 n
|
||||||
0000001787 00000 n
|
0000001786 00000 n
|
||||||
0000001935 00000 n
|
0000001934 00000 n
|
||||||
0000002082 00000 n
|
0000002081 00000 n
|
||||||
0000002231 00000 n
|
0000002230 00000 n
|
||||||
0000002380 00000 n
|
0000002379 00000 n
|
||||||
0000002529 00000 n
|
0000002528 00000 n
|
||||||
0000002678 00000 n
|
0000002677 00000 n
|
||||||
0000002827 00000 n
|
0000002826 00000 n
|
||||||
0000002976 00000 n
|
0000002975 00000 n
|
||||||
0000003124 00000 n
|
0000003123 00000 n
|
||||||
0000003272 00000 n
|
0000003271 00000 n
|
||||||
0000003420 00000 n
|
0000003419 00000 n
|
||||||
0000003569 00000 n
|
0000003568 00000 n
|
||||||
0000003685 00000 n
|
0000003684 00000 n
|
||||||
0000003805 00000 n
|
0000003804 00000 n
|
||||||
0000003911 00000 n
|
0000003910 00000 n
|
||||||
0000003995 00000 n
|
0000003994 00000 n
|
||||||
0000190500 00000 n
|
0000190499 00000 n
|
||||||
0000190706 00000 n
|
0000190705 00000 n
|
||||||
0000191071 00000 n
|
0000191070 00000 n
|
||||||
0000191277 00000 n
|
0000191276 00000 n
|
||||||
0000191483 00000 n
|
0000191482 00000 n
|
||||||
0000191689 00000 n
|
0000191688 00000 n
|
||||||
0000191895 00000 n
|
0000191894 00000 n
|
||||||
0000192165 00000 n
|
0000192164 00000 n
|
||||||
0000192371 00000 n
|
0000192370 00000 n
|
||||||
0000192577 00000 n
|
0000192576 00000 n
|
||||||
0000192783 00000 n
|
0000192782 00000 n
|
||||||
0000192870 00000 n
|
0000192869 00000 n
|
||||||
0000193206 00000 n
|
0000193205 00000 n
|
||||||
0000193281 00000 n
|
0000193280 00000 n
|
||||||
0000193379 00000 n
|
0000193378 00000 n
|
||||||
0000193491 00000 n
|
0000193490 00000 n
|
||||||
0000193608 00000 n
|
0000193607 00000 n
|
||||||
0000193783 00000 n
|
0000193782 00000 n
|
||||||
0000193886 00000 n
|
0000193885 00000 n
|
||||||
0000194052 00000 n
|
0000194051 00000 n
|
||||||
0000194490 00000 n
|
0000194474 00000 n
|
||||||
0000194633 00000 n
|
0000194617 00000 n
|
||||||
0000194768 00000 n
|
0000194752 00000 n
|
||||||
0000194944 00000 n
|
0000194928 00000 n
|
||||||
0000195062 00000 n
|
0000195046 00000 n
|
||||||
0000195209 00000 n
|
0000195193 00000 n
|
||||||
0000195349 00000 n
|
0000195333 00000 n
|
||||||
0000195504 00000 n
|
0000195488 00000 n
|
||||||
0000195645 00000 n
|
0000195629 00000 n
|
||||||
0000195783 00000 n
|
0000195767 00000 n
|
||||||
0000195899 00000 n
|
0000195883 00000 n
|
||||||
0000196031 00000 n
|
0000196015 00000 n
|
||||||
0000196153 00000 n
|
0000196137 00000 n
|
||||||
0000196262 00000 n
|
0000196246 00000 n
|
||||||
0000196358 00000 n
|
0000196342 00000 n
|
||||||
0000196483 00000 n
|
0000196467 00000 n
|
||||||
0000197480 00000 n
|
0000197445 00000 n
|
||||||
0000198776 00000 n
|
0000198739 00000 n
|
||||||
0000199007 00000 n
|
0000198970 00000 n
|
||||||
0000199238 00000 n
|
0000199201 00000 n
|
||||||
0000203066 00000 n
|
0000203029 00000 n
|
||||||
0000206800 00000 n
|
0000206900 00000 n
|
||||||
0000209848 00000 n
|
0000209907 00000 n
|
||||||
0000214126 00000 n
|
0000214268 00000 n
|
||||||
0000218170 00000 n
|
0000218309 00000 n
|
||||||
trailer
|
trailer
|
||||||
<<
|
<<
|
||||||
/ID
|
/ID
|
||||||
[<9ce023989e289f6819633476a5f8acf9><9ce023989e289f6819633476a5f8acf9>]
|
[<404b22811ad613ffdf97db81a4f6f62b><404b22811ad613ffdf97db81a4f6f62b>]
|
||||||
% ReportLab generated PDF document -- digest (opensource)
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
/Info 42 0 R
|
/Info 42 0 R
|
||||||
@@ -545,5 +545,5 @@ trailer
|
|||||||
/Size 76
|
/Size 76
|
||||||
>>
|
>>
|
||||||
startxref
|
startxref
|
||||||
218986
|
219125
|
||||||
%%EOF
|
%%EOF
|
||||||
|
|||||||
@@ -208,7 +208,7 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
33 0 obj
|
33 0 obj
|
||||||
<<
|
<<
|
||||||
/Author (Android Cast project) /CreationDate (D:20260623115603+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115603+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
/Author (Android Cast project) /CreationDate (D:20260626184401+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260626184401+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
/Subject (\(unspecified\)) /Title (Android Cast \204 alpha priorities \(2026-06-08 renumber\)) /Trapped /False
|
/Subject (\(unspecified\)) /Title (Android Cast \204 alpha priorities \(2026-06-08 renumber\)) /Trapped /False
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
@@ -300,10 +300,10 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
51 0 obj
|
51 0 obj
|
||||||
<<
|
<<
|
||||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 869
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 882
|
||||||
>>
|
>>
|
||||||
stream
|
stream
|
||||||
Gat=*9lldX&A@sBm*Wq6's5gf*7M:Z9IDtK@=$(M#!!i:^ql+-rd@kXR#ftRGd,R<l+MMWg6I?,l,!5pS-"'EiT_0Z"b]N6aWuO`n1C0Dcg]gcWL3AoQXGb\g^>CdBUEdHGfg-N"e$APQr,&h#fXuG3,rTN5a[]@!N;Lp+e/REQm]Dj1`jXj^Wtg_:L^hj2C1Hl@3AaU?R&Yh8R<ZR@Q3d5GOlW@IQeH(X4#n6Ge1D8n.!6-=S*KQJU;_:3MDS7ed9;Mcj7O4k_."+edZa#:nY>a\:aTQ;J_9*geV%UU29/9*mou.&WPk1n4g$i4$i`XIgVqd@Q-K^&=J/rMO4JmOFje]FCAU'8Y#3_jp8\>%]]m^%,2!*O#%%(&=_^mqA`geSC]hQ&ECEGM$`\;`"E%$(Nk&YV;udN0_n+86$;GrFl(q$Fql+C,ZMi17stm=Y@pqh!HT(EC1+sp9(_-JZ"rj?.UVeb<RLY`#'Eu/)-ehi/D>L*l>YiNE(ZXHg^j*'fd(id>kf2l3$QmH%`;"LUQVE>*0nF<h4o2*JTdA!dB+dOiQ`GKBc\YFjEZUbdk.-OJ=I\UHkFo^D,7*1AVU)q"E1RnO7pK&1[)?^l.i7tP:@T0&5J84@sQL[:+&dl3f`fu_JV7VJgZ?3C]7S82CkL!>b@[91B4qiMo*20['c,6b']8,+7t&P0jbcskf,Ak+264##6*tLrj4hWguf"clQP+*i4X$bRFmpJJB2":\jN2<F8(=T&8tE3%huAfdt=#'TmI($,%M3->D1TqGTC(<=UbG/fe/`2m62Fqmgi^T1hro8a/4*LObcKEYT97*!Rq(/cV@4`cS5!*rtUD?7)-HXc4R4P^G!Fi00r-e\c~>endstream
|
Gat=*>Aoub'RnB330.dM\3@nKGg*aBlP+&KK(`0C@`<&\!i,r[p#"(B-!Zat&<UAZF2%*JHu'l-C*"q`:GKX$+0KJnOFb.LjFi.MK,]=42Sr6a/r4TQje.h^eFC&b))7g;F+aY6nK_*e&1*^a&[LS^iP_9)"b(8]0L0&@0P1b"73"db1ibg6nMCQY1^`2&f];P;R"A_RIL0DQ7;3P!Ol!mkf]l82q72UOUko'7m,?q*r)`A@@FAaE!Sj/W?P!j,W.PWq4c.N+]0SDECr8LWO%C%n'/LK_An_\)/sXq7SBcS3T0E7Chu0)&q0+b*&r2a)4WYKmRB&r@RL7J#feuEcN:#]>Bhp;(&Ves`$r&2u#+]I1?5cT9<'$!+dig"\L[J9<k](5'*+F&\=.[=QO7PDF-).$@ge\F7Z:rpN]?*`-gSL_-<4C@Z[9q'Co<qX7l.+`b6@jegPijb#%T\;O0K7Cfid4!HHh"U3C`8fZq+I0I&Bbs@8Y.7_>m<m)q9[+>SHn"#H"q?Fom='&dc@puB5h@AX(lSlXtq*Z``3:s]XtOtr#K[J5)=R`Q@mX?Z\O%#L=%c&)A9i)9.'nYLF59V"D)`A'DAG&h=I4j1H:POIb3_6r&AS43-VIAW/,dUKS)(faA6!eiP\T&HA1uOe!j'm_h1nW216r`S`Gl^XAA>40`O2_P>&_+k%MjojQR^!5Ks.M6sQV!0`=RUS:<=H%/eperGd6Cg!:Ba8eGnIBPX%p'H8M,LhuD('X=+Np'4;(X\iC4jOG*tJuBS2>6n@VGRM?'K[W7I%DUV7<=%Z#]4_thql!u;5Lcc+PXM7(e`J08,:X#UZ#b8<7"/I7NLCE=,3YKeQO+iIh6P!>,@!P3>_:?f%>TUp~>endstream
|
||||||
endobj
|
endobj
|
||||||
52 0 obj
|
52 0 obj
|
||||||
<<
|
<<
|
||||||
@@ -408,17 +408,17 @@ xref
|
|||||||
0000210167 00000 n
|
0000210167 00000 n
|
||||||
0000210263 00000 n
|
0000210263 00000 n
|
||||||
0000210373 00000 n
|
0000210373 00000 n
|
||||||
0000211333 00000 n
|
0000211346 00000 n
|
||||||
0000212289 00000 n
|
0000212302 00000 n
|
||||||
0000212519 00000 n
|
0000212532 00000 n
|
||||||
0000212747 00000 n
|
0000212760 00000 n
|
||||||
0000216613 00000 n
|
0000216626 00000 n
|
||||||
0000220302 00000 n
|
0000220315 00000 n
|
||||||
0000222986 00000 n
|
0000222999 00000 n
|
||||||
trailer
|
trailer
|
||||||
<<
|
<<
|
||||||
/ID
|
/ID
|
||||||
[<c9bbbceb6da4cf0561df83389636ce40><c9bbbceb6da4cf0561df83389636ce40>]
|
[<b4a5459a21f343b61a7b0263c08d166f><b4a5459a21f343b61a7b0263c08d166f>]
|
||||||
% ReportLab generated PDF document -- digest (opensource)
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
/Info 33 0 R
|
/Info 33 0 R
|
||||||
@@ -426,5 +426,5 @@ trailer
|
|||||||
/Size 59
|
/Size 59
|
||||||
>>
|
>>
|
||||||
startxref
|
startxref
|
||||||
224840
|
224853
|
||||||
%%EOF
|
%%EOF
|
||||||
|
|||||||
@@ -203,7 +203,7 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
31 0 obj
|
31 0 obj
|
||||||
<<
|
<<
|
||||||
/Author (Android Cast project) /CreationDate (D:20260623115603+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115603+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
/Author (Android Cast project) /CreationDate (D:20260626184401+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260626184401+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
/Subject (\(unspecified\)) /Title (BE services & infrastructure \204 validation map) /Trapped /False
|
/Subject (\(unspecified\)) /Title (BE services & infrastructure \204 validation map) /Trapped /False
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
@@ -385,7 +385,7 @@ xref
|
|||||||
trailer
|
trailer
|
||||||
<<
|
<<
|
||||||
/ID
|
/ID
|
||||||
[<8dbfa9f2eeb85b942477caa11fa4018a><8dbfa9f2eeb85b942477caa11fa4018a>]
|
[<c8888297d0e8b40c8bbd955e044ea1a1><c8888297d0e8b40c8bbd955e044ea1a1>]
|
||||||
% ReportLab generated PDF document -- digest (opensource)
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
/Info 31 0 R
|
/Info 31 0 R
|
||||||
|
|||||||
@@ -137,7 +137,7 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
22 0 obj
|
22 0 obj
|
||||||
<<
|
<<
|
||||||
/Author (Android Cast project) /CreationDate (D:20260623115603+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115603+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
/Author (Android Cast project) /CreationDate (D:20260626184401+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260626184401+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
/Subject (\(unspecified\)) /Title (Stream dump \204 developer debug recording \(FR 0.1\)) /Trapped /False
|
/Subject (\(unspecified\)) /Title (Stream dump \204 developer debug recording \(FR 0.1\)) /Trapped /False
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
@@ -193,10 +193,10 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
33 0 obj
|
33 0 obj
|
||||||
<<
|
<<
|
||||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 856
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 877
|
||||||
>>
|
>>
|
||||||
stream
|
stream
|
||||||
Gat=*a`=.1&A@rkqO")$MHX\E@qNh^:$%P*b/kI>a9a9t*XkX%n#+"</7W1/@9Z4'p\K$5[30F7YkhYE!8i16]gk<grYeTg$2t&)oOiYdpbbr!VHq.e(h4D,4@qLf1[YT?3PZV1F5m<X8pCslH^PHn*o%V%@r`^m<Tui+dXfsPk<bBg&)h8cB/YPh/E/64KeO(lGIpGU2PYbOMAOA#.a>gYH%G)-r=a.)bNis5hn[!XH'aJs5LOUH^IG(=rJIAJ&c-?O^VePb!\?^4*:^>p!PWZkY,2*W2;2/7"hU;#f(oRR.DpgS.REG&g8-o1]!N"Rqd@:)'':TOp6\+f`152BL%PmpQ;9Y5n7,s174=keegQ!=ft2piSEJFhnB1@8c:*R,k,jr4!4Ss@nc(YE:1leV]^"c`R]':[<G11&a<J5&:KA)XA<N_%K_[X\'Xl';7[F9C&.3VO35i8C]-;`!ZOsHI5b6tM!dErQ$$MrL35+mu)j@00pQL#dG#=]u(OcBD%S/I@e*roOU7A#G)!(Xp4ed/3"$sQcSC>M!d&e[niINm\Lsn%]8#n'>9_U@n!'*44krboEgQ#C:b4PFT$-qU&(3DlT;>tjthfS;=L/ANnA-aPqBT\@EdHSU(FI-ppA0CE,h5R27dT$n6,_u;=4$rUNrnOY_'<:`M&anQKI@Drm(oc_"dVGJ(dDZ8Q%OZ_\S4Mc-"r<J\[gg"!c!(9S6V\2X2hnb41h>^UTP`Ztb3OSj#%K\*di``;Tc8[O+Cp+D3XDX[X"15?TJZQ!.WL613nD>MG;P;JBlpUdZcks.US6T=%S`#KY>_c-%*C:5?.sIU@LCMb/s]QE\"Gg:!4..b=+Tf~>endstream
|
Gat=*gMWc?&:Ml+b[Xg*Y/g;=O6uWbX]fG.cotI0fK`W?!*MY"lJM%q9"8\(+<lYpa61[7nb@^Ol+uA'*W]NVE,ged!o*sPA.m[E\8b#g7ef,E.].(%,oC,/[i@t!1,EeU93K%]7rr/B1J0V>+ak:A-gob,E$KBH!*/GRLtmR4"Qr+8h=Y2=bL41a^u%O1GS.fC+++:9A/1p4n+YrRdU8ZBIMfi9bP65fSDhZE)7UdHT#7?q7bSsKfr&1%;jDgNdEr6e[]SFrC)[39ThpbohJj(dgGFaPOC,0$rAo"t2jY&Yf1upl?E\:MT'f_AQO5f".DpgU$;'mkg87PB_R'k9HY:L]*+gX/G*kP;`IuTP!/kpXbb&p7i;:NuJl"eG/Q)F*ZZ?JY3R4[$iK_H/XcjCFc!)_G!Hq<fir>93S^qs6H-t0F2,UNAU=,QKR>&KJE$_2E-9:?iR%M(R->5-cd<WiXKYm*t%^GHkEg+0aBoc@kTT6?(L<G8eHg@kCF*QetdjIp#mV2/.Y/;MK0)Piim#YrdVr7mJUDZW,hoj_P]1;=/#Pig-iUjB:FR-bW\G+Pl7#<!<_YK8nL3r2#J/k0UAE"?S*V<I7b-^ni$.e$*AopM>@J4j!hf/!3nA@uMOWb^7Tior^7Y_Y\P'+3*if:rUG))5e-hC%H`#3)mWue8Go4Po;4f2Cimc".:hiAAUKoq8\-*;?:7opN%]0#PXl9rd%QS9p`]PcYeDI+8a)fgHW^G454U*@da"a(K^:eh,R<#F)7QjTN+#[JTa"!K1JeNd4o>tnHJ!i=Sq<fYqJPd*Cn\t`uh9V[U/RUnr4)@c)BF_Eg0J"N1;@SiA!B[aC?'N9g2EO?c2>_$]+!f[*Z'>T.+~>endstream
|
||||||
endobj
|
endobj
|
||||||
34 0 obj
|
34 0 obj
|
||||||
<<
|
<<
|
||||||
@@ -269,15 +269,15 @@ xref
|
|||||||
0000004408 00000 n
|
0000004408 00000 n
|
||||||
0000004495 00000 n
|
0000004495 00000 n
|
||||||
0000004591 00000 n
|
0000004591 00000 n
|
||||||
0000005538 00000 n
|
0000005559 00000 n
|
||||||
0000006205 00000 n
|
0000006226 00000 n
|
||||||
0000006433 00000 n
|
0000006454 00000 n
|
||||||
0000006661 00000 n
|
0000006682 00000 n
|
||||||
0000009980 00000 n
|
0000010001 00000 n
|
||||||
trailer
|
trailer
|
||||||
<<
|
<<
|
||||||
/ID
|
/ID
|
||||||
[<cc05b2c62200d6b1af79eff88bcbad38><cc05b2c62200d6b1af79eff88bcbad38>]
|
[<a125ae6b7447084fca4feeb4ba295cad><a125ae6b7447084fca4feeb4ba295cad>]
|
||||||
% ReportLab generated PDF document -- digest (opensource)
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
/Info 22 0 R
|
/Info 22 0 R
|
||||||
@@ -285,5 +285,5 @@ trailer
|
|||||||
/Size 39
|
/Size 39
|
||||||
>>
|
>>
|
||||||
startxref
|
startxref
|
||||||
11278
|
11299
|
||||||
%%EOF
|
%%EOF
|
||||||
|
|||||||
@@ -275,7 +275,7 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
47 0 obj
|
47 0 obj
|
||||||
<<
|
<<
|
||||||
/Author (Android Cast project) /CreationDate (D:20260623115603+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115603+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
/Author (Android Cast project) /CreationDate (D:20260626184401+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260626184401+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
/Subject (\(unspecified\)) /Title (Android Cast \204 exposed services catalog) /Trapped /False
|
/Subject (\(unspecified\)) /Title (Android Cast \204 exposed services catalog) /Trapped /False
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
@@ -443,10 +443,10 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
79 0 obj
|
79 0 obj
|
||||||
<<
|
<<
|
||||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 862
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 855
|
||||||
>>
|
>>
|
||||||
stream
|
stream
|
||||||
Gat=*9lldX&A@sBlnQaAMH6?gFOR&7NXq+DHg6;>E^Ic2$J94pI0BcF;&b.C!=`5G[nj&18I3g0=FSj6^aBY1*tXNb[fI12J@C&UDt\O4mj!N3b)oYRes]G'$B)6&664&l#Jsb8[0&fijpHe6BkBBqi'r>8=VhKC(+pFS*$AgG1WliU$fGb@#AFeTE9Cjor*i?Pq>6Uk-@j=9qf$C-=SoYD9qFP!pB'2/giOF8i(*Ya'<RA;7^SuT.YN9*(X7f<A7M=j#)3m6$b3c4TrV)iA%BZE_Yj:4qq_/(0_"ZfM(9O?9\iNVL"CA_&1obJN\3c0#:RVFJ;p=5lsLo?M7A(UBpi8DO=;,-$)rL#[H/s2H46Rh`fQ?[5ejEuoK9I,$*c\?X"N?GkBZklJJdN$CQ*gCAeP!U^hbC%QBIP>rG6"e$'i'bQAPAJRVd"!P>EG8'\+MR5Q0upoU+CsU*p5C6Ce\uZ0cMEbFau?`*=pfNcSESo8OjhfpgZcXup[D`2UYf2#Au5jaCJ1"l)'[<DO+B?#$C1aDOQIV*1Ps\q;`,)lUke=;9paPQ]ql>Ygd'FAJYY+JoB-\adl02Bus:lMc5cJ5;cYb3Vh@k&9G]:$7O1&FQ9D#iXhMXn#=>3h86hiAF?$;NkYoJgZ?3F0aXk-I*caHQAf,14O2mc`tagm1Jc)p3i>@LM7q!h5/^U^Y%i]r&L;C;0+'!^KXg*-JCB):,d#!C^iBj<88AF-J"7n(PB/Q2CQ$:EZ9u*5]hWT*JA/=U4X!dJp.d=V5l,I7\J,YC)+7r:Hd=M;n"T;MC<SNY$.P'U/oWZHcN!VeGHf08d<Bp6-!lU9G33GPh453KNiCVM#al3G>="D~>endstream
|
Gat=*a_oie&A@rkk*Q>Y_r3'c;qEI%jH<Wd.6o%YFJ?R6;FsWQ^Fq$+el#_<%)O@0RJ5i`3*[#nD-6b?&qI.d>i-_JK4#-:Lk+Cn(;]A3$pQn/,g)<MJC^/cmL+rZAjSZ#,mV;87C<@g9BHV8r-;m7E?@Y;OOt*Q:q@3s\H#/<iJ_em%jJNn8Y\D+,FF6T#u?Lo0Rquc_F.4fr&nAS!`i_IDR/FY&A1>K$!1C:/,7u06_Y;.fnbq.I>-&:qk?*545&iigVcoIE!I2gH'SH*9MpN9f5gENpg_$?OsI&]%4I@-0MbbBg()93=gc@KN:$"bktN1W9?ZZ8L.p928B;7A0.j);[1B$fHq6[ST\n?LHCEMOLKL22<Tik/e%GU[6k&Zf)i&uGPm@29f@WC'>=r'.oh17oqk>PoIofp\fc71@PXkpGFUn"Q\Cm;lEuXKrI:+PS)\EY9!H5F.99tX+b8JfDRAFl/%b%ZW0\bVL&,\/-l>StTpUH$coX+*D\8ad6St(O\DSjgoKd\ML97&qmoDn<H];!Fh[0+"jj>>Z&6U&VdGTEub9ON1B;%jMi';&Qa<HXcCHWBA1GqX\DT#oEnRli;f:</jLSX:h^-3G.&aVe9JUK2ItELamMSiu86-jBfM:;ODU[7s=u6M^.06MG$id]?bQ>O@m^gct2pF[eKjKsVAR?N9NN^00C?rm"<.43;ng?s/n2gH[j<[,oq\3C;f`$uHYnaP=\+D5%K^mst<?UH9%C+B/T>)MI;s7"aD<"E3Pib,Q%%oPV&VDZ<S[p&<So9q`a<4fiiZd/m/qkkDc+djOGPhJ<pZjI2`S%pgT>7.dK<jTWLYGb%0OffpCGHaE~>endstream
|
||||||
endobj
|
endobj
|
||||||
80 0 obj
|
80 0 obj
|
||||||
<<
|
<<
|
||||||
@@ -579,17 +579,17 @@ xref
|
|||||||
0000010727 00000 n
|
0000010727 00000 n
|
||||||
0000010827 00000 n
|
0000010827 00000 n
|
||||||
0000010937 00000 n
|
0000010937 00000 n
|
||||||
0000011890 00000 n
|
0000011883 00000 n
|
||||||
0000012947 00000 n
|
0000012940 00000 n
|
||||||
0000013177 00000 n
|
0000013170 00000 n
|
||||||
0000013405 00000 n
|
0000013398 00000 n
|
||||||
0000016973 00000 n
|
0000016966 00000 n
|
||||||
0000020036 00000 n
|
0000020029 00000 n
|
||||||
0000022964 00000 n
|
0000022957 00000 n
|
||||||
trailer
|
trailer
|
||||||
<<
|
<<
|
||||||
/ID
|
/ID
|
||||||
[<82e09bcb7eb13164861aeba124022201><82e09bcb7eb13164861aeba124022201>]
|
[<843860012c1ff53a10f0f6db06b7b5ba><843860012c1ff53a10f0f6db06b7b5ba>]
|
||||||
% ReportLab generated PDF document -- digest (opensource)
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
/Info 47 0 R
|
/Info 47 0 R
|
||||||
@@ -597,5 +597,5 @@ trailer
|
|||||||
/Size 87
|
/Size 87
|
||||||
>>
|
>>
|
||||||
startxref
|
startxref
|
||||||
26415
|
26408
|
||||||
%%EOF
|
%%EOF
|
||||||
|
|||||||
@@ -203,7 +203,7 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
35 0 obj
|
35 0 obj
|
||||||
<<
|
<<
|
||||||
/Author (Android Cast project) /CreationDate (D:20260623115603+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115603+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
/Author (Android Cast project) /CreationDate (D:20260626184401+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260626184401+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
/Subject (\(unspecified\)) /Title (PostgreSQL, TimescaleDB, and platform DB adapters \204 comparison) /Trapped /False
|
/Subject (\(unspecified\)) /Title (PostgreSQL, TimescaleDB, and platform DB adapters \204 comparison) /Trapped /False
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
@@ -432,7 +432,7 @@ xref
|
|||||||
trailer
|
trailer
|
||||||
<<
|
<<
|
||||||
/ID
|
/ID
|
||||||
[<b40b5ca66a7183c90ac1aea1bb523033><b40b5ca66a7183c90ac1aea1bb523033>]
|
[<2b4ea795a3eafae8f0a1687ff9addffc><2b4ea795a3eafae8f0a1687ff9addffc>]
|
||||||
% ReportLab generated PDF document -- digest (opensource)
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
/Info 35 0 R
|
/Info 35 0 R
|
||||||
|
|||||||
@@ -183,7 +183,7 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
30 0 obj
|
30 0 obj
|
||||||
<<
|
<<
|
||||||
/Author (Android Cast project) /CreationDate (D:20260623115603+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115603+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
/Author (Android Cast project) /CreationDate (D:20260626184401+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260626184401+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
/Subject (\(unspecified\)) /Title (Android Cast \204 alpha release & QA) /Trapped /False
|
/Subject (\(unspecified\)) /Title (Android Cast \204 alpha release & QA) /Trapped /False
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
@@ -377,7 +377,7 @@ xref
|
|||||||
trailer
|
trailer
|
||||||
<<
|
<<
|
||||||
/ID
|
/ID
|
||||||
[<b351513c4424db373b9ab2ba803fc31a><b351513c4424db373b9ab2ba803fc31a>]
|
[<a1bb3528715575395984a9e56cac3d09><a1bb3528715575395984a9e56cac3d09>]
|
||||||
% ReportLab generated PDF document -- digest (opensource)
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
/Info 30 0 R
|
/Info 30 0 R
|
||||||
|
|||||||
@@ -122,7 +122,7 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
20 0 obj
|
20 0 obj
|
||||||
<<
|
<<
|
||||||
/Author (Android Cast project) /CreationDate (D:20260623115603+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115603+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
/Author (Android Cast project) /CreationDate (D:20260626184401+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260626184401+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
/Subject (\(unspecified\)) /Title (Alpha soak checklist \(LAN demo\)) /Trapped /False
|
/Subject (\(unspecified\)) /Title (Alpha soak checklist \(LAN demo\)) /Trapped /False
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
@@ -240,7 +240,7 @@ xref
|
|||||||
trailer
|
trailer
|
||||||
<<
|
<<
|
||||||
/ID
|
/ID
|
||||||
[<62ff1d8c69f4e2aa7b4e34c69a669dbd><62ff1d8c69f4e2aa7b4e34c69a669dbd>]
|
[<56ba28bc6bce8a5575ae2af5af849659><56ba28bc6bce8a5575ae2af5af849659>]
|
||||||
% ReportLab generated PDF document -- digest (opensource)
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
/Info 20 0 R
|
/Info 20 0 R
|
||||||
|
|||||||
@@ -244,7 +244,7 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
40 0 obj
|
40 0 obj
|
||||||
<<
|
<<
|
||||||
/Author (Android Cast project) /CreationDate (D:20260623115603+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115603+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
/Author (Android Cast project) /CreationDate (D:20260626184401+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260626184401+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
/Subject (\(unspecified\)) /Title (AV quality enhancement \204 Q&A session notes) /Trapped /False
|
/Subject (\(unspecified\)) /Title (AV quality enhancement \204 Q&A session notes) /Trapped /False
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
@@ -512,7 +512,7 @@ xref
|
|||||||
trailer
|
trailer
|
||||||
<<
|
<<
|
||||||
/ID
|
/ID
|
||||||
[<8790530eb11d5413e4389657b86cbd98><8790530eb11d5413e4389657b86cbd98>]
|
[<807be605cd332c3cba4a4fb32bee7229><807be605cd332c3cba4a4fb32bee7229>]
|
||||||
% ReportLab generated PDF document -- digest (opensource)
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
/Info 40 0 R
|
/Info 40 0 R
|
||||||
|
|||||||
@@ -137,7 +137,7 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
22 0 obj
|
22 0 obj
|
||||||
<<
|
<<
|
||||||
/Author (Android Cast project) /CreationDate (D:20260623115603+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115603+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
/Author (Android Cast project) /CreationDate (D:20260626184401+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260626184401+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
/Subject (\(unspecified\)) /Title (Android Cast build ecosystem) /Trapped /False
|
/Subject (\(unspecified\)) /Title (Android Cast build ecosystem) /Trapped /False
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
@@ -278,7 +278,7 @@ xref
|
|||||||
trailer
|
trailer
|
||||||
<<
|
<<
|
||||||
/ID
|
/ID
|
||||||
[<bea06f961b571b40c7cf4c938ad3324f><bea06f961b571b40c7cf4c938ad3324f>]
|
[<782b8b6b2e2de5a5c890646ee688b252><782b8b6b2e2de5a5c890646ee688b252>]
|
||||||
% ReportLab generated PDF document -- digest (opensource)
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
/Info 22 0 R
|
/Info 22 0 R
|
||||||
|
|||||||
@@ -97,7 +97,7 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
15 0 obj
|
15 0 obj
|
||||||
<<
|
<<
|
||||||
/Author (Android Cast project) /CreationDate (D:20260623115604+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115604+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
/Author (Android Cast project) /CreationDate (D:20260626184402+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260626184402+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
/Subject (\(unspecified\)) /Title (Commercial features \(developer-gated\)) /Trapped /False
|
/Subject (\(unspecified\)) /Title (Commercial features \(developer-gated\)) /Trapped /False
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
@@ -192,7 +192,7 @@ xref
|
|||||||
trailer
|
trailer
|
||||||
<<
|
<<
|
||||||
/ID
|
/ID
|
||||||
[<d086ae4cb3335d3ad3b7f0baa24fd954><d086ae4cb3335d3ad3b7f0baa24fd954>]
|
[<b8a503515f47fea35addb78e473ea3db><b8a503515f47fea35addb78e473ea3db>]
|
||||||
% ReportLab generated PDF document -- digest (opensource)
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
/Info 15 0 R
|
/Info 15 0 R
|
||||||
|
|||||||
@@ -102,7 +102,7 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
16 0 obj
|
16 0 obj
|
||||||
<<
|
<<
|
||||||
/Author (Android Cast project) /CreationDate (D:20260623115604+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115604+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
/Author (Android Cast project) /CreationDate (D:20260626184402+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260626184402+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
/Subject (\(unspecified\)) /Title (Anonymous crash reporter) /Trapped /False
|
/Subject (\(unspecified\)) /Title (Anonymous crash reporter) /Trapped /False
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
@@ -198,7 +198,7 @@ xref
|
|||||||
trailer
|
trailer
|
||||||
<<
|
<<
|
||||||
/ID
|
/ID
|
||||||
[<8fa35525e151cb86fcb8749d7347816b><8fa35525e151cb86fcb8749d7347816b>]
|
[<9e6c7b1c8fc2af2d3a466413305bf053><9e6c7b1c8fc2af2d3a466413305bf053>]
|
||||||
% ReportLab generated PDF document -- digest (opensource)
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
/Info 16 0 R
|
/Info 16 0 R
|
||||||
|
|||||||
196
DEVELOPER_SETUP.pdf
Normal file
196
DEVELOPER_SETUP.pdf
Normal file
@@ -0,0 +1,196 @@
|
|||||||
|
%PDF-1.4
|
||||||
|
%“Œ‹ž ReportLab Generated PDF document (opensource)
|
||||||
|
1 0 obj
|
||||||
|
<<
|
||||||
|
/F1 2 0 R /F2 3 0 R /F3 4 0 R /F4 10 0 R /F5 11 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
2 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
3 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
4 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
5 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 12 0 R /Fit ] /Rect [ 45.68504 762.0394 116.821 773.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
6 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 12 0 R /Fit ] /Rect [ 45.68504 751.0394 119.045 762.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
7 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 12 0 R /Fit ] /Rect [ 45.68504 740.0394 129.277 751.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
8 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 12 0 R /Fit ] /Rect [ 45.68504 729.0394 99.48504 740.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
9 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 12 0 R /Fit ] /Rect [ 45.68504 718.0394 65.24504 729.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
10 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
11 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Symbol /Name /F5 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
12 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 24 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 23 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
13 0 obj
|
||||||
|
<<
|
||||||
|
/Annots [ 5 0 R 6 0 R 7 0 R 8 0 R 9 0 R ] /Contents 25 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 23 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0
|
||||||
|
/Trans <<
|
||||||
|
|
||||||
|
>> /Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
14 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 26 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 23 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
15 0 obj
|
||||||
|
<<
|
||||||
|
/Outlines 17 0 R /PageMode /UseNone /Pages 23 0 R /Type /Catalog
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
16 0 obj
|
||||||
|
<<
|
||||||
|
/Author (Android Cast project) /CreationDate (D:20260626184402+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260626184402+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
|
/Subject (\(unspecified\)) /Title (Developer setup \204 org `ac`) /Trapped /False
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
17 0 obj
|
||||||
|
<<
|
||||||
|
/Count 5 /First 18 0 R /Last 22 0 R /Type /Outlines
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
18 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 12 0 R /Fit ] /Next 19 0 R /Parent 17 0 R /Title (Which repo for what)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
19 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 12 0 R /Fit ] /Next 20 0 R /Parent 17 0 R /Prev 18 0 R /Title (Local PHP \(optional\))
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
20 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 12 0 R /Fit ] /Next 21 0 R /Parent 17 0 R /Prev 19 0 R /Title (Lab cluster \(cast01\20503\))
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
21 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 12 0 R /Fit ] /Next 22 0 R /Parent 17 0 R /Prev 20 0 R /Title (Mobile defaults)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
22 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 12 0 R /Fit ] /Parent 17 0 R /Prev 21 0 R /Title (Tests)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
23 0 obj
|
||||||
|
<<
|
||||||
|
/Count 3 /Kids [ 12 0 R 13 0 R 14 0 R ] /Type /Pages
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
24 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 337
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gas2E>>)mg&;B$9=.I;\36gMBl)SXt<,gCOP9@0c>nBZ\HMRLdF^=>X&kL)KcM8eqW3gg'f0+'j;)Sj6Lg.)0MqFbaMq8+S.]jp;S?`\<;Ppb!0;VSl+126V#CAh`4-T)P"0Jn-fk@V5g8'<Y.7pE-8chPRXt4)<TicK1h93%k7_Em4++$+`/JqCJ%.Q>lQu&uqn[+khnJi?dZNPZHemHdqaW7(s.BYenoGi)HH'3?B.)4!ebUNj$'[8W0=P!4hHaTkl*cL@h\"\?CKCob1'@K/nNa+hYRDn4Yr$KP*+WFMD%j1A#cP[l9kmb$F`uHGWJl0D/5d:"bPhTr-~>endstream
|
||||||
|
endobj
|
||||||
|
25 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 504
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gatn#6#W5H(l%MT(%3m5_=_GN)g\#H[6pgre_Mj?.RK\[Q/E(7jmUNWW7orF:_d-M')qClI.f&r4:W:%eJ@pnEIC>"!P8O^/:h(L\$OsJ3`RMaku@0U`Yc^,QGi7O1?5?q8qP/YF-D1n-*i3NrLChikljEoFrM=Y`"6B#b\an**;g_?DgU+0i<o8pm"^/j23)a*c/6@(7m%q84/A#<@oHGJFDg9Hp)OX4ZCep.Z:j^(^+('9T*d.4Ib32c/XtkP"9k3"9VG^bCA+?F?'M;1cuW@tTt-[=,2SN;ZQc%?WfBr$EpIc'9ZdD#9<kT,dtjMc_eC6b/^RY?dSiG2;OfL:GWif=@d5?V$)81V?::oB^[EXrKA6<N^A(Ueh]D6-qbXNa'B0`E"BQuY8=!=.LFUM`rahVh8t%^$3'A"jS/]:JEe\/$_X-4FHiD1!/PRuWn.LlB@>q.T\HC)PKuhnq[,-tsNpn`5C5MC9KlRL<@frl;kA09]QD$3~>endstream
|
||||||
|
endobj
|
||||||
|
26 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3264
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gb!"sgMYcep"`tpY\86GeDaIB,o>4NG2sp&f5W?Q(I_UH,B>%a+Z\<qd^&bsDsnS#6rBaJBiC[D*-j@skC+e$d-sP$s*"NpWu7ip3p6dl(8)2&!R,Fi1->C39[?KE/7gfHZiSgSO^aa=!T(_2]Vq1$%)mg$!4jLAD\8]E,7.1>J+sY&f01K("N4Gg+oU.7R!h^!VPe_oN<tYSmDUSpR3U4NLWT2+e)]rKVsE)5G7u9AiN\_V1;Q^=rC>s+@R;A9%GKh]-2hHL<\j4`J!ub0L*\X*^?9USGX18U](^lAZ\%T`QWD,'UgY\O>Y'g_cjRRu*f#1I)k,^*+2Mrj7O4/H>C&"`4prh3qf>M!B*BH,M/aiSE9Yj290@ElWXJ4U7:CS#&Fa%Vc1j40&VktD"]-K9J@UM4+c0G:9A!S78YDS7#oDGS/^I@.`S`,[&rp@KpsW^[JCE\17(A=;`JUep0oLGU9`<!j'(;@aUL`e>:7heXA!)41`(H`^o++(%cT`YPMYr&f>I&13r'2uQh3O4B5%#5hJNp6)NO8H'Z]kqLXmu9&d#'mA=;%M=4&u9^E\TC>e')g4>__Hl`IXKXl+1E^0FI!,l`0^X[dqe>UaZ@;'@nZH\%9WlZ'`*+QEF67.GDis/JAh>4Oi^0.(3]G#J*l&.'M;+,]p+)\hSlPDB^]8]LA4YV`6K^S'EE2^]DqLMd(g2jVG/S"<"[DJ;a^Dd]@.WfFL6U7gB&*XV3+kN.Z(H?cU'$(>lPCp<+p[,=WH:F^leSR&GBg1Sbfdc($_J0MYpJP#KeDV1r\46Z%&\i!8n,a.@O';hJD1+OeFRDChml;LOImd,iKhi"AI!R-Fh3XMW#N'sP6(q1E4F>-T2pdls)qO$Y*kJ-le,-k?dq"iG"ts5CZo2o_dRArX-YQ*[cQ=HX]PpJS)(Ia8Z,3RfO0/3e8@)u1bF3Mdh"UAFD3RH=lm3o;;b%%>3T7=l88$HC=:I/2D\O9LAE^jG-uZ6>%%K4Ldr>oL^hr47qbbrD$8pRFW%d=K+8oMH#@fujhVK8-\e:Q,UTnZi#:4QdYa7Ha/ZFa8BF/q*F5MG$\HL;a.4E7KO<O`mIk`#8Pl.d$=pah7@Yc:960OapAJq\="L(pJaY`W*5H.<"tE@sE+&qXSS5=N0iuL6NdGH\(*WX%Tt[haXq\(`Sc8;<W^1<g5[[Vol"s30r)*aW)PH4Rmg.$`d<<qfXrNXHIifmlEiCee.b`4Ph['n-*\VlI?#*kXA?Wl[)bdn/TD^)=+96Uq8+YZ+Qa8M-*RXoAQEm>#sAG0q'kPV!li[OWV2.jP:OVlp_&.\dpo^BX*=1q63OR@B.ooV+f[Xl0mj&G>%'8.O1S!+uA#4\g[6I%%&1uW(l4SWoGHNVHd&8Vt]NGB_=*XMm?+)Q.l`Cn+ceQ9Gn`A^s\qUq=+@lHffJ(aT\/;?S6boVH[5H6ehH@WuS2\B`TJ@_<Mdgb:RQ)W`uta[r>X/_V]AA4-JkE0$>h`Rga.$\@mU=hI+4_XKmDX@KRRRap,#+%;`X+)n7@U[V;n-]M3B3Y[NJHj\)Vs73T=iD<!0?ZPD47)Qgo0_:VeIr4o#bSR*Dph9mTh?6N]"oAtq6ju;tT9%JJS3CLgY6(]N^bP?gq\)?W11rN"C\:#.hYOriqL1,_X+Cm3M*C8W&&?dL[*G0\OU".0STn1<;F,2K])iPC\P/3FYHU>LPV59H'B_C.i<0d&W#em2eE1N#h2H)d`JBZ\f-Z7=6lkXK`!t$pt1Q,QY13s]seZI3^PBgM3l3\7Va_s"X<LNj!AcACM(D9,"<N?!tY0D?2eMr%8XPrm#EiVsa2Q?rqBRV(;%+EP3*nK28KRKiDEa8>Hi?!8geO?5/piN,_'t@m_(^%nL_t/`l>fCi?ZFQu=B4KcUBQGB];a`+KgpU=CF"3$@_@<=X5"1uiV,",CHK;r^HDo):NUg+%P[@U5Z4*tK&Y6r/k,:08*-=WN&ouGg8gQQfN^7*PR9^f\[#NNTnm-#.e:j9bJ67UnaJInUi98[l7,rope)j6[f'oeemWW';f/sApJpZ5(oFF[u41.%Po=Fh9i]D9@h;M\H&3IAt,eSGQrtM\9,I:CCWR$6ulh+FFI40`\qEJ_+[\$u-$K&U7*`q\IK,ic!<8#/o*AKk91.QG):0P3XlWdn2j?@k.@)RZQ7$/,/Qe<jd5nWL-e?OR=jgPM]*V_b2;\CUtWD%(o?n$[jhh!R#%p.8A.,V)D@mugifX`ai9MNtsG:_RT]uLg]@*[G/;#'TY<a0s^.1qJ;Znm#a'&UaLQZL/jkP3(T4KZU%hKGeZfA,ck+7ot%$*>e3WEI@Ds(lNi0M,^:+#Pt3#Kr`Rf$IcG/1L2iJ#<WGX+-^o1AU'u8]2*4Dl3eE8FO(#R=]YmSIY=L0cH:n3;VHc.<RV0jhh[**>t#H0Br\:D`(39f+4(uo]br7h:':&qU;X3LOZ,'2Fo/>+p:AO=.DY%0Nd;sD]YhF'>iRHGaM5jFCE'F:KNr8[.6Jgn1Z`dkUtJQMVP()$&C7!pncj-mE>`lCEaFUJcT#g2R$D>2F[/iV4tFYjcp?dBV)Beqm8s#,Qm+Hq6?9SfZaQ3:rL;mmVk\\2-*at*!pGGM;rBoVH_n]WjcW)%9o.G=m%k_Ab#N"LO=Mg#*rRHo4"Ibf)Yhl.EQfYDW$6Kg)1c]3sO5CJ,;Yk0KNuua":-,=gQcqbI1S"F[=Q=GLP7,m4GpBpMYI[)EV[^BAlQ`k8Xp8b(-0WEe\>Bs!43qq]>.UV&>*#78AWLZsV6ocf!4T8c1`(g_,r;[S@?5pDg587uh0=@5=C)ClESf;jqJ9M=9YHqT(_RR!*)ec&_8,X4^`h`U>'o,<:hsb/`c=b@LHkFZH#Z`_j7.',(dqT.eMV-8Y)#nuX72&N:/Ik`7,Z3F[iYE%0ju-%4nX$_KO;hSIG.@;E/332sJ__f#:kj1IQN`!Cqt8L7_<!3&c[jgBloi]IP4Z_G3$&p!89ZlU$NHu&tS1,=jm"P?r&.Ah6%,'[`!.Rg,,c/`#sphTFM$3A6GjWp?tR`^U.b'1i`pq+ViC^j[*>]N;&-V)\RAk0e2[t@!4[LL3f/P50F4)V!qW%6JtCUcX;>f91`4$$0'?gt9FZ!/5fcqfOCo/[%9?*g#sg7@EmHmFD(jt0o#X`LgQ:M<EtkX\9uSLO4.RmCV>0sqM&hp9+ZZmNa5TQZ)es4e#Ad[SlCjO9*G,V7DFoT;:/?`hg4kXhK?9I.[6_?4HN"i$/5QN~>endstream
|
||||||
|
endobj
|
||||||
|
xref
|
||||||
|
0 27
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000061 00000 n
|
||||||
|
0000000134 00000 n
|
||||||
|
0000000241 00000 n
|
||||||
|
0000000353 00000 n
|
||||||
|
0000000458 00000 n
|
||||||
|
0000000605 00000 n
|
||||||
|
0000000752 00000 n
|
||||||
|
0000000899 00000 n
|
||||||
|
0000001047 00000 n
|
||||||
|
0000001195 00000 n
|
||||||
|
0000001311 00000 n
|
||||||
|
0000001389 00000 n
|
||||||
|
0000001595 00000 n
|
||||||
|
0000001843 00000 n
|
||||||
|
0000002049 00000 n
|
||||||
|
0000002136 00000 n
|
||||||
|
0000002440 00000 n
|
||||||
|
0000002514 00000 n
|
||||||
|
0000002615 00000 n
|
||||||
|
0000002732 00000 n
|
||||||
|
0000002855 00000 n
|
||||||
|
0000002965 00000 n
|
||||||
|
0000003052 00000 n
|
||||||
|
0000003127 00000 n
|
||||||
|
0000003555 00000 n
|
||||||
|
0000004150 00000 n
|
||||||
|
trailer
|
||||||
|
<<
|
||||||
|
/ID
|
||||||
|
[<d72e024de97560ae08ffb08d13dcbc2f><d72e024de97560ae08ffb08d13dcbc2f>]
|
||||||
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
|
/Info 16 0 R
|
||||||
|
/Root 15 0 R
|
||||||
|
/Size 27
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
7506
|
||||||
|
%%EOF
|
||||||
@@ -279,7 +279,7 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
46 0 obj
|
46 0 obj
|
||||||
<<
|
<<
|
||||||
/Author (Android Cast project) /CreationDate (D:20260623115604+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115604+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
/Author (Android Cast project) /CreationDate (D:20260626184402+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260626184402+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
/Subject (\(unspecified\)) /Title (URL shortener service \204 design review \(DR\)) /Trapped /False
|
/Subject (\(unspecified\)) /Title (URL shortener service \204 design review \(DR\)) /Trapped /False
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
@@ -553,7 +553,7 @@ xref
|
|||||||
trailer
|
trailer
|
||||||
<<
|
<<
|
||||||
/ID
|
/ID
|
||||||
[<875c6f1c7edbf45055101437d8ba9dff><875c6f1c7edbf45055101437d8ba9dff>]
|
[<b881146e81a0400dc0faf4d7b18a637b><b881146e81a0400dc0faf4d7b18a637b>]
|
||||||
% ReportLab generated PDF document -- digest (opensource)
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
/Info 46 0 R
|
/Info 46 0 R
|
||||||
|
|||||||
@@ -498,7 +498,7 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
79 0 obj
|
79 0 obj
|
||||||
<<
|
<<
|
||||||
/Author (Android Cast project) /CreationDate (D:20260623115604+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115604+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
/Author (Android Cast project) /CreationDate (D:20260626184402+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260626184402+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
/Subject (\(unspecified\)) /Title (Platform scaling and multi-environment architecture \204 design review \(DR\)) /Trapped /False
|
/Subject (\(unspecified\)) /Title (Platform scaling and multi-environment architecture \204 design review \(DR\)) /Trapped /False
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
@@ -933,7 +933,7 @@ xref
|
|||||||
trailer
|
trailer
|
||||||
<<
|
<<
|
||||||
/ID
|
/ID
|
||||||
[<b9840886073ac09ffa3aaf04613fddc4><b9840886073ac09ffa3aaf04613fddc4>]
|
[<e8d77b162988235e9282c6a48d0eb653><e8d77b162988235e9282c6a48d0eb653>]
|
||||||
% ReportLab generated PDF document -- digest (opensource)
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
/Info 79 0 R
|
/Info 79 0 R
|
||||||
|
|||||||
@@ -324,7 +324,7 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
51 0 obj
|
51 0 obj
|
||||||
<<
|
<<
|
||||||
/Author (Android Cast project) /CreationDate (D:20260623115604+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115604+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
/Author (Android Cast project) /CreationDate (D:20260626184402+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260626184402+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
/Subject (\(unspecified\)) /Title (RSSH routed egress \(dev-only\) \204 design review \(DR\)) /Trapped /False
|
/Subject (\(unspecified\)) /Title (RSSH routed egress \(dev-only\) \204 design review \(DR\)) /Trapped /False
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
@@ -663,7 +663,7 @@ xref
|
|||||||
trailer
|
trailer
|
||||||
<<
|
<<
|
||||||
/ID
|
/ID
|
||||||
[<8bb82ad74cbc70e21b326c36bdc6d400><8bb82ad74cbc70e21b326c36bdc6d400>]
|
[<519e375ae3d00c8c0855ddd359ee5e1c><519e375ae3d00c8c0855ddd359ee5e1c>]
|
||||||
% ReportLab generated PDF document -- digest (opensource)
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
/Info 51 0 R
|
/Info 51 0 R
|
||||||
|
|||||||
@@ -319,7 +319,7 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
51 0 obj
|
51 0 obj
|
||||||
<<
|
<<
|
||||||
/Author (Android Cast project) /CreationDate (D:20260623115605+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115605+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
/Author (Android Cast project) /CreationDate (D:20260626184403+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260626184403+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
/Subject (\(unspecified\)) /Title (Codec2 / ultra-low-bandwidth voice \204 design review \(DR\)) /Trapped /False
|
/Subject (\(unspecified\)) /Title (Codec2 / ultra-low-bandwidth voice \204 design review \(DR\)) /Trapped /False
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
@@ -657,7 +657,7 @@ xref
|
|||||||
trailer
|
trailer
|
||||||
<<
|
<<
|
||||||
/ID
|
/ID
|
||||||
[<46cf1dfdb90851c909d86a9cdac2e0a3><46cf1dfdb90851c909d86a9cdac2e0a3>]
|
[<067f365549c6352e4507032702d5c987><067f365549c6352e4507032702d5c987>]
|
||||||
% ReportLab generated PDF document -- digest (opensource)
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
/Info 51 0 R
|
/Info 51 0 R
|
||||||
|
|||||||
@@ -520,7 +520,7 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
85 0 obj
|
85 0 obj
|
||||||
<<
|
<<
|
||||||
/Author (Android Cast project) /CreationDate (D:20260623115605+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115605+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
/Author (Android Cast project) /CreationDate (D:20260626184403+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260626184403+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
/Subject (\(unspecified\)) /Title (Repository and microservice reorganization \204 design review \(DR\)) /Trapped /False
|
/Subject (\(unspecified\)) /Title (Repository and microservice reorganization \204 design review \(DR\)) /Trapped /False
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
@@ -1072,7 +1072,7 @@ xref
|
|||||||
trailer
|
trailer
|
||||||
<<
|
<<
|
||||||
/ID
|
/ID
|
||||||
[<d2f7142333d712b3c1c2561068c30494><d2f7142333d712b3c1c2561068c30494>]
|
[<e9227d6d82ddd0becfc6cb9795cfdb6c><e9227d6d82ddd0becfc6cb9795cfdb6c>]
|
||||||
% ReportLab generated PDF document -- digest (opensource)
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
/Info 85 0 R
|
/Info 85 0 R
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
14 0 obj
|
14 0 obj
|
||||||
<<
|
<<
|
||||||
/Author (Android Cast project) /CreationDate (D:20260623115606+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115606+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
/Author (Android Cast project) /CreationDate (D:20260626184404+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260626184404+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
/Subject (\(unspecified\)) /Title (Live Cast Control Plane \(P0-P2 kickoff\)) /Trapped /False
|
/Subject (\(unspecified\)) /Title (Live Cast Control Plane \(P0-P2 kickoff\)) /Trapped /False
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
@@ -166,7 +166,7 @@ xref
|
|||||||
trailer
|
trailer
|
||||||
<<
|
<<
|
||||||
/ID
|
/ID
|
||||||
[<c4fec4b99072874c8420e5c9ea80366d><c4fec4b99072874c8420e5c9ea80366d>]
|
[<33f3e1c0301273f67e72a0a82caefd37><33f3e1c0301273f67e72a0a82caefd37>]
|
||||||
% ReportLab generated PDF document -- digest (opensource)
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
/Info 14 0 R
|
/Info 14 0 R
|
||||||
|
|||||||
332
DRs/20260626_cluster_monitoring.md
Normal file
332
DRs/20260626_cluster_monitoring.md
Normal file
@@ -0,0 +1,332 @@
|
|||||||
|
# Infrastructure health monitoring — design review (DR)
|
||||||
|
|
||||||
|
<!-- doc-meta:start -->
|
||||||
|
| Field | Value |
|
||||||
|
|---|---|
|
||||||
|
| Author | Anton Afanasyeu |
|
||||||
|
| Revision | R0 |
|
||||||
|
| Creation date | 2026-06-26 |
|
||||||
|
| Last modification date | 2026-06-26 |
|
||||||
|
| Co-authored | Cursor Agent (project assistant) |
|
||||||
|
| Severity | high |
|
||||||
|
| State | accepted |
|
||||||
|
| Document type | DR |
|
||||||
|
| Superseded by | — |
|
||||||
|
| Specification | [docs/specs/20260626_cluster_monitoring.md](../specs/20260626_cluster_monitoring.md) |
|
||||||
|
<!-- doc-meta:end -->
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Document type:** DR (Design Review)
|
||||||
|
**Source draft:** [docs/drafts/20260626_cluster_monitoring.txt](../drafts/20260626_cluster_monitoring.txt)
|
||||||
|
**Specification:** [docs/specs/20260626_cluster_monitoring.md](../specs/20260626_cluster_monitoring.md) (normative implementation doc)
|
||||||
|
**PDF:** [20260626_cluster_monitoring.pdf](20260626_cluster_monitoring.pdf) · Regenerate: `bash ac-docs/build-pdf.sh`
|
||||||
|
**Status:** Accepted R0 — implement per SPEC
|
||||||
|
**Scope:** Passive infrastructure monitoring and alerting for the XEN-based VM cluster (cast01–cast04); Track A only — automated remediation is Track B ([drafts/20260626_cluster_orchestration.txt](../drafts/20260626_cluster_orchestration.txt))
|
||||||
|
|
||||||
|
**Related:** [INFRA.md](../INFRA.md) · [specs/20100612_1_scaling.md](../specs/20100612_1_scaling.md) · [specs/20260618_repos_reorganizing.md](../specs/20260618_repos_reorganizing.md) · [orchestration/sim/cluster0/ARCHITECTURE.md](../../orchestration/sim/cluster0/ARCHITECTURE.md) · [20260620_postgres_timescale_db_platform.md](../20260620_postgres_timescale_db_platform.md)
|
||||||
|
|
||||||
|
**Documentation index:** [README.md](../README.md)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Table of contents
|
||||||
|
|
||||||
|
<!-- toc -->
|
||||||
|
- [1. Executive summary](#1-executive-summary)
|
||||||
|
- [2. Problem statement](#2-problem-statement)
|
||||||
|
- [3. Track A / Track B scope split](#3-track-a--track-b-scope-split)
|
||||||
|
- [4. Responsibility domains](#4-responsibility-domains)
|
||||||
|
- [5. Monitoring topology — cast04](#5-monitoring-topology--cast04)
|
||||||
|
- [6. Tool selection](#6-tool-selection)
|
||||||
|
- [7. Alert channels](#7-alert-channels)
|
||||||
|
- [8. Infrastructure constraints](#8-infrastructure-constraints)
|
||||||
|
- [9. Relationship to TimescaleDB / business metrics](#9-relationship-to-timescaledb--business-metrics)
|
||||||
|
- [10. Risks and mitigations](#10-risks-and-mitigations)
|
||||||
|
- [11. Non-goals (Track B reference)](#11-non-goals-track-b-reference)
|
||||||
|
- [12. Related documents](#12-related-documents)
|
||||||
|
- [13. Changelog](#13-changelog)
|
||||||
|
<!-- /toc -->
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. Executive summary
|
||||||
|
|
||||||
|
**Question:** How should the VM cluster (cast01–cast03) and its microservices be continuously monitored, and what tooling should be deployed?
|
||||||
|
|
||||||
|
**Short answer:** Deploy a dedicated monitoring VM (cast04, Alpine LTS) running Prometheus + node_exporter (per-node) + blackbox_exporter + mysqld_exporter + Alertmanager + Grafana. Alerts route to email (SMTP relay) and Telegram. External availability is covered by UptimeRobot (free tier, no install). Automated remediation is out of scope for R0 — it becomes Track B.
|
||||||
|
|
||||||
|
**DR decisions (R0):**
|
||||||
|
|
||||||
|
| Item | Decision |
|
||||||
|
|------|----------|
|
||||||
|
| **Scope** | Track A: passive monitoring + alerting only; no auto-remediation |
|
||||||
|
| **Monitoring node** | **cast04** — dedicated 4th Alpine LTS VM; paravirt XEN guest |
|
||||||
|
| **Metrics stack** | **Prometheus** + **node_exporter** + **blackbox_exporter** + **mysqld_exporter** |
|
||||||
|
| **Dashboards** | **Grafana** (community dashboards; self-hosted on cast04) |
|
||||||
|
| **Alerting** | **Alertmanager** → email SMTP relay + Telegram bot API |
|
||||||
|
| **External uptime** | **UptimeRobot** free tier — no install; HTTP probe to `apps.f0xx.org` from internet |
|
||||||
|
| **Status page** | **Uptime Kuma** on cast04 (Docker) — internal, access via SSH tunnel |
|
||||||
|
| **Log aggregation** | Out of scope R0; Grafana Loki planned for R1 (Track B) |
|
||||||
|
| **VictoriaMetrics** | Not used at R0 — not in Alpine apk; standard Prometheus sufficient at 3-node scale |
|
||||||
|
| **Zabbix** | Not chosen — batteries-included but inflexible for future business metrics integration |
|
||||||
|
| **Nagios** | Not chosen — legacy, superseded by Prometheus+Alertmanager |
|
||||||
|
| **Kibana / ELK** | Excluded — log-centric, heavy, wrong tool for infra metrics |
|
||||||
|
| **FE / router changes** | None at R0 — monitoring is internal; FE nginx config change only if external Grafana access added later |
|
||||||
|
| **DNS changes** | None at R0 |
|
||||||
|
| **Data residency** | All metric data stays self-hosted (no external aggregator) |
|
||||||
|
| **Track B** | Placeholder draft created: [drafts/20260626_cluster_orchestration.txt](../drafts/20260626_cluster_orchestration.txt) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Problem statement
|
||||||
|
|
||||||
|
The project runs a cluster of XEN-based VMs (cast01–cast03) hosting microservices at various complexity levels — from a single service per node to multi-node DB master/replica chains. As the microservice split progresses (per [specs/20260618_repos_reorganizing.md](../specs/20260618_repos_reorganizing.md)), manual observation of each service and node becomes impractical.
|
||||||
|
|
||||||
|
Key failure modes that must be detected and alerted:
|
||||||
|
|
||||||
|
| Category | Example failure |
|
||||||
|
|----------|----------------|
|
||||||
|
| Hardware | CPU steal time spiking (Xen overcommit), disk SMART pre-failure, RAM exhaustion |
|
||||||
|
| Software | nginx 5xx surge, php-fpm worker saturation, MariaDB replication lag, process crash |
|
||||||
|
| Network | Egress/ingress saturation, NIC packet drops |
|
||||||
|
| Provider | Uplink outage, XEN host failure, VM unavailability |
|
||||||
|
|
||||||
|
None of these are currently monitored in a structured way.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Track A / Track B scope split
|
||||||
|
|
||||||
|
This DR and its SPEC cover **Track A only**.
|
||||||
|
|
||||||
|
| Track | Scope | Milestone |
|
||||||
|
|-------|-------|-----------|
|
||||||
|
| **Track A** (this SPEC) | Passive monitoring: observe, record, alert | R0 |
|
||||||
|
| **Track B** (future) | Active remediation: orchestration reacts to alert signals — auto-scale, auto-failover, DDoS response | R1+ |
|
||||||
|
|
||||||
|
Track B details and prerequisites are captured in [drafts/20260626_cluster_orchestration.txt](../drafts/20260626_cluster_orchestration.txt). Track B MUST NOT be designed until Track A alerting is stable and at least 4 weeks of baseline metric data has been collected.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Responsibility domains
|
||||||
|
|
||||||
|
The infrastructure has two clearly bounded ownership layers:
|
||||||
|
|
||||||
|
```text
|
||||||
|
┌──────────────────────────────────────────────────────┐
|
||||||
|
│ Anton's layer (SaaS — contact owner for issues) │
|
||||||
|
│ • Internet provider / uplink │
|
||||||
|
│ • Router (Debian; config-only from project side) │
|
||||||
|
│ • XEN hypervisor hosts + VM provisioning │
|
||||||
|
│ • Internal network (10.7.0.0/8), git server │
|
||||||
|
│ • FE VM (Gentoo HVM; nginx TLS; config-only) │
|
||||||
|
└──────────────────────────────────────────────────────┘
|
||||||
|
delegated cluster boundary ↓
|
||||||
|
┌──────────────────────────────────────────────────────┐
|
||||||
|
│ Project owner's layer (full control) │
|
||||||
|
│ • cast01 / cast02 / cast03 — workload VMs │
|
||||||
|
│ • cast04 — monitoring VM (this SPEC) │
|
||||||
|
│ • All software installed on these VMs │
|
||||||
|
│ • MariaDB, nginx, PHP-FPM, microservices │
|
||||||
|
└──────────────────────────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
**Monitoring responsibility boundary:** The project owner monitors everything within the delegated cluster. When monitoring detects that the cause is in Anton's layer (hardware fault, uplink, XEN host instability), the action is to notify Anton — not to auto-remediate.
|
||||||
|
|
||||||
|
**Hardware guarantee baseline** (from Anton's SLA commitment per draft):
|
||||||
|
|
||||||
|
| Resource | Guaranteed value |
|
||||||
|
|----------|-----------------|
|
||||||
|
| CPU | Intel Xeon Gold 5218, 8 real cores @ 2.30 GHz per node |
|
||||||
|
| RAM | 8 GB per node |
|
||||||
|
| Disk | 32 GB non-shared per node |
|
||||||
|
| Network | 200 Mbit/s in/out |
|
||||||
|
| Cluster size | 3 workload nodes (cast01–cast03) |
|
||||||
|
|
||||||
|
Monitoring MUST alert when measured values diverge significantly from this baseline (e.g. CPU steal > 10% for > 5 min = Xen overcommit alarm → notify Anton).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Monitoring topology — cast04
|
||||||
|
|
||||||
|
```text
|
||||||
|
[ Internet ]
|
||||||
|
│
|
||||||
|
UptimeRobot (external)
|
||||||
|
HTTP probe → apps.f0xx.org
|
||||||
|
│
|
||||||
|
┌──────────────┴──────────────┐
|
||||||
|
│ FE (Gentoo HVM) │ ← no new software
|
||||||
|
│ TLS nginx, 134.17.26.161 │
|
||||||
|
└──────────────┬──────────────┘
|
||||||
|
│ 10.7.0.0/8 internal
|
||||||
|
┌────────────────────┼────────────────────────────┐
|
||||||
|
│ │ cluster │
|
||||||
|
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
|
||||||
|
│ │ cast01 │ │ cast02 │ │ cast03 │ │
|
||||||
|
│ │workload │ │workload │ │workload │ │
|
||||||
|
│ │node_exp │ │node_exp │ │node_exp │ │
|
||||||
|
│ └────┬────┘ └────┬────┘ └────┬────┘ │
|
||||||
|
│ │ │ │ │
|
||||||
|
│ ┌────┴─────────────┴─────────────┴────┐ │
|
||||||
|
│ │ cast04 (monitoring VM) │ │
|
||||||
|
│ │ Prometheus Alertmanager Grafana │ │
|
||||||
|
│ │ blackbox_exporter mysqld_exporter │ │
|
||||||
|
│ │ Uptime Kuma (Docker) node_exporter │ │
|
||||||
|
│ └──────────────────────────────────────┘ │
|
||||||
|
└───────────────────────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
- Prometheus scrapes node_exporter on cast01/cast02/cast03/cast04 via internal IPs
|
||||||
|
- blackbox_exporter on cast04 probes service HTTP/TCP endpoints from inside cluster
|
||||||
|
- mysqld_exporter runs on the MariaDB primary node (cast01 or cast02 per deployment)
|
||||||
|
- cast04 has no workload services — monitoring-only
|
||||||
|
- Access to Grafana/Uptime Kuma UI: SSH tunnel from dev machine at R0
|
||||||
|
|
||||||
|
**cast04 minimum spec (request from Anton):**
|
||||||
|
|
||||||
|
| Resource | Minimum |
|
||||||
|
|----------|---------|
|
||||||
|
| CPU | 2 vCPU |
|
||||||
|
| RAM | 2 GB (Prometheus + Grafana + Alertmanager) |
|
||||||
|
| Disk | 32 GB (90 days metric retention at 15s scrape) |
|
||||||
|
| OS | Alpine latest LTS, paravirt XEN |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. Tool selection
|
||||||
|
|
||||||
|
### 6.1 Decided stack
|
||||||
|
|
||||||
|
| Component | Package / source | Role |
|
||||||
|
|-----------|-----------------|------|
|
||||||
|
| Prometheus | `prometheus` (apk) | Time-series scraper + TSDB |
|
||||||
|
| node_exporter | `prometheus-node-exporter` (apk) | Hardware + OS metrics per VM |
|
||||||
|
| blackbox_exporter | `prometheus-blackbox-exporter` (apk) | HTTP/TCP service health probes |
|
||||||
|
| mysqld_exporter | `prometheus-mysqld-exporter` (apk) | MariaDB metrics |
|
||||||
|
| Alertmanager | `alertmanager` (apk) | Alert routing (email + Telegram) |
|
||||||
|
| Grafana | `grafana` (apk) | Dashboards |
|
||||||
|
| Uptime Kuma | Docker image `louislam/uptime-kuma` | Service status page |
|
||||||
|
| UptimeRobot | SaaS free tier (web account) | External HTTP probe |
|
||||||
|
|
||||||
|
All apk packages are available in Alpine community/edge repos. Docker (`docker` apk) is available for Uptime Kuma.
|
||||||
|
|
||||||
|
### 6.2 Options rejected
|
||||||
|
|
||||||
|
| Tool | Reason not chosen |
|
||||||
|
|------|------------------|
|
||||||
|
| Kibana / ELK | Log-centric, heavy (Elasticsearch needs 4+ GB), wrong tool for infra metrics |
|
||||||
|
| Zabbix | Batteries-included but less composable; harder to extend to business metrics later |
|
||||||
|
| Nagios Core | Legacy; status-only; no time-series; superseded by Prometheus+Alertmanager |
|
||||||
|
| VictoriaMetrics | Not in Alpine apk repos; standard Prometheus sufficient at 3-node scale |
|
||||||
|
| Grafana Cloud | Data must remain self-hosted (PO preference) |
|
||||||
|
| Netdata | Good for quick bootstrap but adds another agent daemon; Prometheus covers the same ground |
|
||||||
|
|
||||||
|
### 6.3 Future additions (R1 / Track B)
|
||||||
|
|
||||||
|
| Component | Role |
|
||||||
|
|-----------|------|
|
||||||
|
| Grafana Loki + Promtail | Centralized log aggregation (replaces manual syslog review) |
|
||||||
|
| Alertmanager webhook handlers | Trigger ac-deploy scripts on alert (foundation for Track B remediation) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. Alert channels
|
||||||
|
|
||||||
|
| Channel | Tool | Requirement |
|
||||||
|
|---------|------|-------------|
|
||||||
|
| Email | Alertmanager SMTP | **Required** — primary alert channel |
|
||||||
|
| Telegram | Alertmanager Telegram receiver | **Recommended** — fast ops notifications |
|
||||||
|
| Status page | Uptime Kuma | **Recommended** — visual per-service uptime |
|
||||||
|
| External uptime | UptimeRobot | **Required** — provider-fault detection |
|
||||||
|
|
||||||
|
**Email SMTP relay:** Alertmanager needs an outbound SMTP relay (NOT an inbound routing service). Options: Gmail account + app password, or Mailgun free tier (10k emails/month). **Note:** ImprovMX and addy.io are inbound email routing services — they are not SMTP relay providers and cannot be used for Alertmanager outbound alerts.
|
||||||
|
|
||||||
|
**Telegram:** Purely API-based — no software installation. Register a bot via @BotFather, obtain `TOKEN` and `CHAT_ID` (add bot to ops group or DM). Alertmanager calls Telegram HTTP API from cast04.
|
||||||
|
|
||||||
|
**Accounts to create before deploy (PO action):**
|
||||||
|
|
||||||
|
| Account | Purpose | Notes |
|
||||||
|
|---------|---------|-------|
|
||||||
|
| Gmail app password OR Mailgun free | Alertmanager SMTP relay | Gmail: Settings → Security → App passwords |
|
||||||
|
| Telegram bot via @BotFather | Alertmanager Telegram receiver | Note TOKEN + CHAT_ID |
|
||||||
|
| UptimeRobot free account | External HTTP probe | uptimerobot.com; add monitor for `apps.f0xx.org` |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. Infrastructure constraints
|
||||||
|
|
||||||
|
Constraints discovered during DR review — all accounted for in SPEC:
|
||||||
|
|
||||||
|
| Constraint | Impact |
|
||||||
|
|------------|--------|
|
||||||
|
| Paravirt XEN guest (no HVM) | node_exporter works fine on paravirt; Xen steal time metric available |
|
||||||
|
| Alpine LTS + apk only | All stack components available as apk packages; Uptime Kuma via Docker (apk-installable) |
|
||||||
|
| FE / router: no new software | Monitoring is entirely internal; no FE changes at R0 |
|
||||||
|
| Data self-hosted | No Grafana Cloud or external aggregator |
|
||||||
|
| 8 GB RAM per workload node | Standard Prometheus on cast04 is sufficient (Prometheus ~200–500 MB for this scale) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 9. Relationship to TimescaleDB / business metrics
|
||||||
|
|
||||||
|
The project has a separate PostgreSQL + TimescaleDB platform plan ([20260620_postgres_timescale_db_platform.md](../20260620_postgres_timescale_db_platform.md)). These two stores serve different purposes and coexist:
|
||||||
|
|
||||||
|
| Layer | Store | Metrics type | Retention |
|
||||||
|
|-------|-------|-------------|-----------|
|
||||||
|
| Infrastructure | Prometheus TSDB (cast04) | CPU, RAM, disk, latency, process health | 90 days |
|
||||||
|
| Business / app | TimescaleDB (PostgreSQL) | Crash rates, session counts, graph analytics | Long-term |
|
||||||
|
|
||||||
|
Grafana on cast04 can query **both** data sources. No ETL between them is required.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 10. Risks and mitigations
|
||||||
|
|
||||||
|
| Risk | Mitigation |
|
||||||
|
|------|------------|
|
||||||
|
| cast04 itself fails — monitoring goes dark | cast04 is monitored by UptimeRobot externally; Alertmanager persistence via local disk |
|
||||||
|
| Xen host failure takes cast04 offline | UptimeRobot external probe survives; operator is alerted from outside |
|
||||||
|
| SMTP relay rate limit hit during incident storm | Alertmanager grouping + repeat_interval configured; Telegram as parallel channel |
|
||||||
|
| apk package version lag | Use Alpine edge repo for monitoring components if LTS versions are too old |
|
||||||
|
| Prometheus disk fill (90 day retention + 3 nodes) | Estimated < 5 GB for 3 nodes at 15s scrape; 32 GB disk leaves comfortable margin |
|
||||||
|
| cast04 RAM insufficient | 2 GB minimum; Prometheus + Grafana + Alertmanager combined ~500 MB–1 GB typical |
|
||||||
|
| External UptimeRobot free tier limits | Free tier: 50 monitors, 5-min check interval — sufficient for R0 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 11. Non-goals (Track B reference)
|
||||||
|
|
||||||
|
The following are explicitly **out of scope** for this DR and SPEC:
|
||||||
|
|
||||||
|
- Automatic horizontal scaling (add node under CPU load)
|
||||||
|
- Automatic scale-in (remove idle node)
|
||||||
|
- DDoS automated response
|
||||||
|
- Automatic storage failover
|
||||||
|
- Any orchestration that modifies cluster topology without human approval
|
||||||
|
|
||||||
|
These scenarios are documented as future work in **[drafts/20260626_cluster_orchestration.txt](../drafts/20260626_cluster_orchestration.txt)** (Track B). Track B DR and SPEC will be authored once Track A is operational and baseline metrics are available.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 12. Related documents
|
||||||
|
|
||||||
|
| Document | Role |
|
||||||
|
|----------|------|
|
||||||
|
| [specs/20260626_cluster_monitoring.md](../specs/20260626_cluster_monitoring.md) | Normative implementation SPEC (this DR's output) |
|
||||||
|
| [drafts/20260626_cluster_orchestration.txt](../drafts/20260626_cluster_orchestration.txt) | Track B placeholder (auto-remediation, future) |
|
||||||
|
| [INFRA.md](../INFRA.md) | FE/BE topology, hosts, ports |
|
||||||
|
| [specs/20100612_1_scaling.md](../specs/20100612_1_scaling.md) | VM roles and cluster layout |
|
||||||
|
| [specs/20260618_repos_reorganizing.md](../specs/20260618_repos_reorganizing.md) | Microservice split (monitoring must track each MS) |
|
||||||
|
| [20260620_postgres_timescale_db_platform.md](../20260620_postgres_timescale_db_platform.md) | TimescaleDB for business metrics (complements Prometheus) |
|
||||||
|
| [orchestration/sim/cluster0/ARCHITECTURE.md](../../orchestration/sim/cluster0/ARCHITECTURE.md) | Lab cluster node layout |
|
||||||
|
| [GRAFANA_vs_others_graphvis_pivot.md](../GRAFANA_vs_others_graphvis_pivot.md) | Earlier Grafana evaluation for app analytics |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 13. Changelog
|
||||||
|
|
||||||
|
| Rev | Date | Change |
|
||||||
|
|-----|------|--------|
|
||||||
|
| R0 | 2026-06-26 | Initial DR — accepted; decisions locked; SPEC generated |
|
||||||
393
DRs/20260626_cluster_monitoring.pdf
Normal file
393
DRs/20260626_cluster_monitoring.pdf
Normal file
@@ -0,0 +1,393 @@
|
|||||||
|
%PDF-1.4
|
||||||
|
%“Œ‹ž ReportLab Generated PDF document (opensource)
|
||||||
|
1 0 obj
|
||||||
|
<<
|
||||||
|
/F1 2 0 R /F2 3 0 R /F3 20 0 R /F4 21 0 R /F5 22 0 R /F6 23 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
2 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
3 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
4 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 24 0 R /Fit ] /Rect [ 45.68504 762.0394 124.373 773.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
5 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 24 0 R /Fit ] /Rect [ 45.68504 751.0394 121.717 762.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
6 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 24 0 R /Fit ] /Rect [ 45.68504 740.0394 156.389 751.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
7 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 24 0 R /Fit ] /Rect [ 45.68504 729.0394 136.381 740.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
8 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 24 0 R /Fit ] /Rect [ 45.68504 718.0394 160.405 729.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
9 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 24 0 R /Fit ] /Rect [ 45.68504 707.0394 103.933 718.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
10 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 24 0 R /Fit ] /Rect [ 59.68504 696.6019 119.295 706.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
11 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 24 0 R /Fit ] /Rect [ 59.68504 686.6019 126.8025 696.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
12 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 24 0 R /Fit ] /Rect [ 59.68504 676.6019 174.7275 686.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
13 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 24 0 R /Fit ] /Rect [ 45.68504 666.0394 105.269 677.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
14 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 24 0 R /Fit ] /Rect [ 45.68504 655.0394 142.613 666.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
15 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 24 0 R /Fit ] /Rect [ 45.68504 644.0394 223.517 655.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
16 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 24 0 R /Fit ] /Rect [ 45.68504 633.0394 134.605 644.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
17 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 24 0 R /Fit ] /Rect [ 45.68504 622.0394 166.613 633.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
18 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 24 0 R /Fit ] /Rect [ 45.68504 611.0394 127.949 622.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
19 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 24 0 R /Fit ] /Rect [ 45.68504 600.0394 97.71704 611.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
20 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
21 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
22 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Symbol /Name /F5 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
23 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /ZapfDingbats /Name /F6 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
24 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 50 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 49 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
25 0 obj
|
||||||
|
<<
|
||||||
|
/Annots [ 4 0 R 5 0 R 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R
|
||||||
|
14 0 R 15 0 R 16 0 R 17 0 R 18 0 R 19 0 R ] /Contents 51 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 49 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0
|
||||||
|
/Trans <<
|
||||||
|
|
||||||
|
>> /Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
26 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 52 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 49 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
27 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 53 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 49 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
28 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 54 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 49 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
29 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 55 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 49 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
30 0 obj
|
||||||
|
<<
|
||||||
|
/Outlines 32 0 R /PageMode /UseNone /Pages 49 0 R /Type /Catalog
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
31 0 obj
|
||||||
|
<<
|
||||||
|
/Author (Android Cast project) /CreationDate (D:20260626184404+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260626184404+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
|
/Subject (\(unspecified\)) /Title (Infrastructure health monitoring \204 design review \(DR\)) /Trapped /False
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
32 0 obj
|
||||||
|
<<
|
||||||
|
/Count 17 /First 33 0 R /Last 48 0 R /Type /Outlines
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
33 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 24 0 R /Fit ] /Next 34 0 R /Parent 32 0 R /Title (1. Executive summary)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
34 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 24 0 R /Fit ] /Next 35 0 R /Parent 32 0 R /Prev 33 0 R /Title (2. Problem statement)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
35 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 24 0 R /Fit ] /Next 36 0 R /Parent 32 0 R /Prev 34 0 R /Title (3. Track A / Track B scope split)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
36 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 24 0 R /Fit ] /Next 37 0 R /Parent 32 0 R /Prev 35 0 R /Title (4. Responsibility domains)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
37 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 24 0 R /Fit ] /Next 38 0 R /Parent 32 0 R /Prev 36 0 R /Title (5. Monitoring topology \204 cast04)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
38 0 obj
|
||||||
|
<<
|
||||||
|
/Count 3 /Dest [ 24 0 R /Fit ] /First 39 0 R /Last 41 0 R /Next 42 0 R /Parent 32 0 R
|
||||||
|
/Prev 37 0 R /Title (6. Tool selection)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
39 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 24 0 R /Fit ] /Next 40 0 R /Parent 38 0 R /Title (6.1 Decided stack)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
40 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 24 0 R /Fit ] /Next 41 0 R /Parent 38 0 R /Prev 39 0 R /Title (6.2 Options rejected)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
41 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 24 0 R /Fit ] /Parent 38 0 R /Prev 40 0 R /Title (6.3 Future additions \(R1 / Track B\))
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
42 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 24 0 R /Fit ] /Next 43 0 R /Parent 32 0 R /Prev 38 0 R /Title (7. Alert channels)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
43 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 24 0 R /Fit ] /Next 44 0 R /Parent 32 0 R /Prev 42 0 R /Title (8. Infrastructure constraints)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
44 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 24 0 R /Fit ] /Next 45 0 R /Parent 32 0 R /Prev 43 0 R /Title (9. Relationship to TimescaleDB / business metrics)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
45 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 24 0 R /Fit ] /Next 46 0 R /Parent 32 0 R /Prev 44 0 R /Title (10. Risks and mitigations)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
46 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 24 0 R /Fit ] /Next 47 0 R /Parent 32 0 R /Prev 45 0 R /Title (11. Non-goals \(Track B reference\))
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
47 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 24 0 R /Fit ] /Next 48 0 R /Parent 32 0 R /Prev 46 0 R /Title (12. Related documents)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
48 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 24 0 R /Fit ] /Parent 32 0 R /Prev 47 0 R /Title (13. Changelog)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
49 0 obj
|
||||||
|
<<
|
||||||
|
/Count 6 /Kids [ 24 0 R 25 0 R 26 0 R 27 0 R 28 0 R 29 0 R ] /Type /Pages
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
50 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 985
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gat=+>Aoub'RnB330.pQ34A>\*kQQc2YEmqg/Fi*JWinVO;ZNIqt2bP$'uqP,Eu;<J)@g3SE")\fKQ,1O*:S26<N"U+;D[-&;D$TGOR2SrL&e/Q&HsHF3HmAM6IdMMmLk<qpaXI+>4:.qLBih!@+8h1Wr@M@O-Ug.tRi]PmBu4!Sg3#QVuK30S,-(fh+bgd:I,dX^IouXkCKBcVftm1g@jBV%OD@V!AGrH:cX;4C6eo+"o8jI"q+tk$:Gl^qG.k)'K:FN=d.o5S3.?I3Ukmhp!:/4k<K?qJ\Aoo9IW$WXNd2Yf$d+#?9as;.%m([MK5,]&.gr#P9u?\.;^G'AP>JL_;1FDUDM.eWo6tT#2J,:TZo?+bTc=5^=TAkp0m=3HHm.=FSOGVXUn;H+ce0)!7rAQ\&R7,lKrI/`(gb&mTqO7l<H*Af]>d*RM9pg*UHBP]23k-=R>RY@q.?*ci9+-.dYrSj,OaBa_R+bpM$eCmdPZR66,f<KoqkRjubIZo)HSUH7I/>MtAqcUMS3JUF*jfu.t*`)j&bA!M`n1B$#lV6RW8MQ)tQ0rJJGo>'#kGID>B6CjpQ1j6.>?.(,'Uq>g]GuR;D)Nh3:kY#4B)Qq[A1\S'/lhjo)#,7h_$PR*K3I=P(,Fk=sTO*jXc.hEY\8uT:ok$Hlk3SQB1FcAZM5*%2HS_n"$p81oDt:En<P)r$p*6r9+CI3/;r#&jmZfD(U([5a+s,MC<'AorLRf1:X8#dd7QB%c5KVqp;-5!\U8fMA;"56<bJG\+e?kZXG:IEXg>DK1q,B+eqqKu;r,,_HGWg5-];FJa?FTE#:Z;!MmX3$VKrlY6LoO4V4iJAGWh!s%GqB`tU1apg]-uI-Jds2B0X:eC%75.JU-Z!nJi*h;KCE&jFk&Mq#a=^3:uREf#7oX_]+K!h+@1Bq\.Kk*#dJTErn)"^![KrjWE+gp:EnfQo71l"$1[>>blrY%FH7f:r<%J,)7'~>endstream
|
||||||
|
endobj
|
||||||
|
51 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 849
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gatn%>u03/'Sc)R/']G7R^&F%8Tk=@Ue1Go\O8d#EEgo1c>3a*^Y_U\fEOn<:_Y?#XkWU?q0Kr/ik_Luli9d13'(]f3)j[$.7p60#\V]Qa,97cVATt77T7D"SC"'*nTXacT`n5t"@uDtRMS6[N0bsq[oq[>Z:>d%U$>I,mkm'H'b78?\lE.i+KYsm"Fg^-%9.78m;I6^UbCp^oTNFL5r%bg:$R\QfhWoLTPkS?U$HH;*s%Ih9*&u5?_,.IFPoM,</2WQ!(`!D!"o?uX5shOiFm^b!aaS%j3b=s#)9mi*+":i$!\n9>N>Ca7e(h=CfbBc;\VnV7?J2WA;q)MBsW@uHe[9!4^<$!K<0KoB`npjQGO6$+_t<OW`:ffC]:Fgb5YOU.<(G5!9E2-H>;.?J\e=K\l$^SVK*K(:b7UAiCcCQhh+id(^\_\:uk8J,]Gr#_'u=P7aF&\#8c`No3<>+@#9!)lGs8O\&nl9gY*Lp7^S&oP,6Y9![#Y?@8j[%:1:snNXsdK0p>k<Hmt5!*$&lZARqigCg3i[VnB*8FaAZ(\K8CAb'W>OE*C9.-#><.TnoWFc9lFekcf"a1MR$r?dA&cmQOkHG%9i]/DGr"n'kN$AYb3`?+QF!0tpF%Ng7W,To8OBXBa!J(u!koCn-L%&Kddl8Wm"1._iWh@&2F.5dZKU;D<?AI>7GLDA(%R@5E@_Gi.oHUj<99E^9jF=0`io;!t?1oI&'EZSVF1*2(gdbO!Nc*G>O^:XA!#X#oE*KP_b!-)^2`NXKZ"j\4K>6-?<PSikaja]$3"!DfmTrF7*G,5/3tJ*\UWEl&1-#1#i[=>B43J7BOU^N<lV$_IE;cN~>endstream
|
||||||
|
endobj
|
||||||
|
52 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3955
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gau`VD,]IS')p1[d)WA@Z2C%!+0Lu^fpSC^@mXdCl\[/aZ'@_8hc@$+gonJYr";)2*'8LK<tkd-EiZgKmXD`O)!UOBeR'stki3(WI`;X4BXU1YdO[6PNc&JWJ">M,VIaPgf[_Y8:)qO*/Jm8*q9_63ChmoCiNEofN2so+bso#N@9n>2LF!BdQ7M7cLG.'=-MFa,7O^se'DgZ%c2L\$WECHf1IY*7)_0Jq6<!a'khFRcRPXh0Er0>W6`s^74IDh_39)&K4su81LEAbS`2+@bQ\KB;\mm_G?BC#.o&h]e=;l5r/[]\kp0c@SNn<#q69Vbb*_BKS[IYhT8iN65&*f-`*WhU.MHH5K<,RF7.Z*fG[V[%gm>%1W43VngSG3KaA2l33L*_g--Ro"E$3J##+ttBRKnsrHPVCEci*X98RTT6E`A7J5Q@RgIYp7Q%kKtQO5+:cP]&@PVN"X:\j2:8^*fLuV5/sgPLbCE!0s([)K\H'3_21^.k+rrnBVT?2+s2qtnl.e(@ZJkO7=X+L?\!_oSDWd3YsE>b4<U>-&C45R=\kqsBZ>o'K!%rj"n0"_,YMW,C[a(a"o(c^ZVpQ1'?)IDJ`&^:Mn-<k^ohu`g0(U(WoKk^2l2)dGXm6jmlsUOPm,:i=P=\EFU&l3pfVhe-r$d,6&L<8c^Z>eJA3gGP)0(K2R?:O6deWD_TP7NqW7DBe!I8EgJ>/Je(\Vk6<3k<:em@IMW^4X<:W>IrV:L9@_a=F0`SAoSB4kPK@]bmHj>7TDVE\@$/jU]$/6rM;WWX1.U50h23'P9];Ao3I$2RfORVuc/6`e4DI9V%h$[N;*=&(<JT"gUrZ_NQ[s?LWnJ`+A3"(+F$=*jD5+O2#@AuL8o6;f7Iq9Z9BMO[+7po7uS-^m._VhABY$Q?W&Vu-\/.YOe(qekW,`(?Ws,U%i\eLl+)gK"krJ#UMPHA;c!^#D$o%f\7=@!(7nn%_"CT]Z,:eIDilPs18$&^5.5'mETn19IXN!CDZ'_I^uFG?OBVpBIU^j8V4i"7X'G;0%*bldG>o6=P8W,1K&L%"$)^u)eN#)e&5$;!XOlL@qp+Rl&ch[@B_/>]"B6pnfm=R,Eop&KOi+Rd9Uc"KA/S:pJ.!Qg-#LqLT011pV\h\#W207Kb%<G5\ZaO/=%Rb9Nha!hR*E!hLWb0N@1n?!l\61At'>dV%*8J9ZBnH'$]Um7:K_F+_Mmt%Vk\#Au(!o9t]6+Nbmk"tGlGn<Gq[X:=T!]Ui9b>`sPrNLK;7ij@#,LaN;'fCDUR'qi.ErrG%OlkB;`57[m81s9h_!=BEYi25_n@]BQ(;BiDq,>Rif3@BNMP,[35KgMer@hg0l=LMcTRN,Jq]KH40ok00]9>.%RZq[`(s8.eQtI'STae(Fk';=_bO/f!SRWKp-\p#:l_-G:Lt5L.d8^L=OX!b?lss0E*-8a@84sUr'ILsd^SWjCCQF3aBFt3),(*<kr>+oa!>tkuKX$K0CFW<;6^h>GELh-$4$TC6J@N#VFLFKB&sciq0.g&c7116o@1'M!-:?n-gFOrZ>7ZS620MPeb'<;3j)lD]X$E5R6$X0t"DKAleH.K/l75[B-a*qF4eR,.Pd%&YG3fX'SYhp&!^ROm?@#/F[j#qL-2Ig?Cl<dDk(Uc9UB]:/34g2YeDDYXg:X`q8ii2n-f#rWbt'"[S]?E\iija[o)6m2JX:Nid0LjcQphVfq%X-98C1aaZ%>XO:)3ht1@+6=H&RN9HsPB>%tRC5r<9@a`GMT4B=lI5P@6PtH271<T\R=S3(kQ^6kU5@5CDirM_cESQ3s3q$@DKnNnrhq\db]pCU^]MJ_]&"Ck1pgqD&.),WqYKW4c2u+\<lbKt^l/OS1Sh.O_t1>6[u'383JNYVk&Hjg>tFGfr;9.d?[l9Y%UY[k-=>TZT<+.5U[(.#30p8,,rqO-'0_O;\Juap<<@r.7g;Q"\O@!Ri$gJa`+AOl_bTATs6jBVF#r%9*%74dVT%=(N#!^;hl8,ln%Or&i*;TT(.tl1Q$M5#ftfR3r(h.ABTK8TCY@b3`_4e9`n99U<L;>q\"B#ejeG).Z>0E[;r;jFbLSB>#Kn/==Ig!K^:$Ht97i(TD^TLH[&;]u@b-I*U;u[4q$%2LC_I5nK\dY(/N(iC#IO/m.0<R4gAX9^6.#co%9tH%NZL<2FT+#uHhap1G'TBL/*+Oro9bmU.,U:R3R"E?':%maM=uJ)\/6_bMSD_]_klKA$nsgPJ)\1-1&ir#;+uHb2\ThnL1tZkn/G$pDSDk&SJb$P1N;CtgsR;=Y&L^[W/6Y,l$1buWq;'HSqs'A8#_r:;LrWN&!!PY\#"mBO.O0pXGOH"5sDCk@MdLL24_-X*fh/^&JK[Oc[GX5@_jST7m<n'X-1^7Y0uXg6O5FWud\k'qIPfO$eTaR@MOQP1I4Ockq/RM*iBOgi+%>=1A;)8?Z5i`H8bKuLi+^P`;tQ)uc?D-%T:A)8*,#3Wfk&F?Y\6R@,1%#1qE^]ss=m1eW$Wd5P]GB]m;Xl&(2cP(/3\<`-%p?2)"'?s!b<OFL8<(Z-qi++^@f*Crff6V:CD9<ndZ<C?PK#_WIC;+7rekpTq)j7q:*7F5o&3Q7GZH?5fP)n.T4)#,>@l7dUerl*EOC^;(i3=1UEFT7qX!,0eQG-L;gfS=(=ikM3jDNOg)Tt+0<QrH,k%5'4CK#""2`WJp$tGGB@(@6,6b.t:p/SCm'*pVdrbDb9l"HAsmdF#@\lDHAfRbk8)6EqDK[MNLW`sh[phi'$D,Msqa&($dqMr%bn$<aoRF@eX94b:0,!sgd!_cng]8H<2PB:"a.Q.)ti1"'[B5o91(UEYFQDo6s?YLYRJ>UaIE.IF1+LL,sfpf-RQ9qI1c\5M`Z5fe!Hpf-?b[#7X"O&)Ga?UZBTkg@5@s'DcJ17I^:A,t;'mZ^T=&\bUoGgnh1/d4$UNeEUjrG.4%40l2@Tta2'SBucKS9_WfG$:RHLsuAHX&WgHa[nN%Xt2ABL,a^pX+C='`mS1@2&5R?4)$0;hhT_?FH-2qCC4+CE+AYYDg)Od`N6e7hj@Qn\Lt"s.tP>%M#t?^m^U07mhQc"q7AW]-btAatn!Y2;R\!A8[(s09BYWOe!e&V!>tQXT8.F_b]cR'JPWKEJT:]82p,sq?-:/fasD`6C(52opL%jO*B4))&PHK-kpZ]VUp#L!5'MD30;samSFW\`f%3r$G&N@WsWlTDm.cSdd\UhPcU%+71u?(R(l0^7NeO-%d=thJ[Zr`*Xf`]]Mq.^kEQ+a%4]<bERJhSknm*@:K,B^rrOh1.aNML)_XDp!oJM+KG"9i1^.,%-XBm3E"'qM=3(F9VaSSCj.EP=d>RA+'=jmD"X50>WXeFbG:8C72ZWgm(`kW_dFddjKr]Ld8@V./D%*on6K#Ik"7Ys?"`abSHZ:$K9as0)2heI<46Z=LZEP?i<Vd"=!"ap9i",@qb;]a6<khc^MfLSh/+0qCk`*7L^]G?00K/V&#S\4q2.7WC1puUpggtWo/[(WnXOMkaChdSZi]C3Vnb*-Yfnp)]\[K/F,VL>'QWl@bYl)(.r=\#=9q_G7/?t-#-l2\gQhH=I%?/\`X5VD/JGQAKGSl;mL,U'9cLr^mK3!(q?DA@o`TZZVS,,Oj(3Y`]I)c:Zqn\SY`[k]-TRY.\3*Ej&a&F*TGp5<W/X6s(2^oekD?YDQGt%fuT0q2Fj]+DLcOXf;q!+DmZEi(:</D]@Q'`B@qe32qE9_;:1J_<$XBh4o%G!%"0E`hkO==[,OX#.6T9OW!\p'kE*U!7u1@e$ZFH16VilC=1!$"QMM&lo:=0JR5*Veu>7J180VcMO9N9\s+p8D:Bdju'\l9ihe:fSOQ[[HTa,Zm3/"AR^o2'n$YLLPLH#e)B[GDsY>%"t'b@I-$gqfCdF<.Ft!:cO?d2V=n-iA#S,_q&X_a!suH9Se9q@jB@BIfOmWERO~>endstream
|
||||||
|
endobj
|
||||||
|
53 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3020
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gb!l"lZ:f='*%C7@_["[DB+N:+-P&dkF@m0]/WeBV<uLk-3I,,`0_ea!4&a+os`jP&!N/)4-$M,CeH%h`F=%rq!B\MJVe:qq<LNN0Dj+DCOnpI56f:c*9b.m2uTL)7on3iE=K,=RLZ].D8W_B%R,ZmB$r4W7nCHGLfu_/UP*)<+_Vds-J7Mil<hA#(bnI3:]cVH0G@-a0CqF5MW#Sl^o&tG(Mj4?$mS'Y8iDMt4OYP3-U4+o`Pa,Vr$dh%:_iKP:q+StSG:(D?6;B/g4pihJRgHkOjlKo6'udT4birKkl1nt)D\"<GQNF!WTZ$H#tn5`aJ`(r^^XdT')3;u<3e36)+7/T^kWM%'W+jh-nGRpLEZ7()]:YQ']*d'/et$p&CY?-!L@qKm%VCa%Dc4OY_6\(2W'\YH47=sT]$`,alJE$1)L4(TGB6@&Ii3[#@"!@[#.`(oh)S49,0O"W3*<iTo$=`[?ns(h/Mj\PTjAJOO)r!C4b?]9ZUp%K9._TgPamhH)=`Kp-Voc0c(F%..&W%[)rN.Pr"=$o[gA1=c:O/]5GOl^(S.=WT-,/%T(lc!H8r-*reU)Jq-.^7qiJ<K]#7DXJi=#@0+Xi/QC#`*#sT[AH_`GV\Vc)X4;fG0s7aJ.9r>>3Z'"B9pj8Rpog@Mol^)@jE$U-k;=1_2#^'>B,jU:o,,_e/9ms.rJ\o1,]]B3kj*9]kF2u9?-J\G%OC=Ob,(9j%">r^74-D0Bs7)@&kY#N6U7d0E,gT;_PPp@9Z(\T#KJ2G#uEV&/rK1=3-tHk94Q=.@qamBc@<V($0"MfhdWM?RKbR3IL(rTGTf!Q=cHP)-57I1AG]0fc)=b*9Y9Vl%#E[7Apj'NWc#7_&i[/VLrT$?9RMr[iDMn$@lZa@+f9rG-i$+"06ZUt[<77pNmPAuj0IaA$q.V4'c21A-O-`NL`Lft2m49,:8b$7aiE[96RLUI'h&C[gM73)OV-=Zd+@IDJr5)mIX.)/o+U>ZGFuY;?CX7ppk!;E'DP6b-pJ6TD@uqI!^GI8gMlLo]]QY+H2Apn95nj1Ou-Q^YN*$KV)=*Pgm1$h(E'\"ibF!u>-lb%S"$2VLAlUP#)UiI!r])miNDc-i/]<reeLhI4HAJ6Y>#W*i\La'p?<Pk#q[-2D5*:E'r/_B`cN9%P7/Y*UmiUsLoF7Ke'WN(jomIKmZ![.iXg/GN#*r!FE-7[h*C.\58Pk[UB(,H"&cb&B66a'O<N1,.QGbP0ps8T`/Tur=FX9AkSQ22a9Bt<Iu6uVM?4OO/dDXedVrc:>`EG\*B[IW3:6F&A&E*rgU4l%4.b,?K@+^2a0@IuNU\I1j1$+^=N#jTBMr$p59`PpcFS7<=Vi;+kJ64mp5hpjd^;.Ad)E`2ki1E8?'9/k5V%[GaIQG_#&ejUP2cJ"5UUOe(`)YPn6)T"LeS;:0b9t+Q<VW?Y%]lQ*+P7q[\i>(\QbhDP/glZ6bho8gc_G/A2U"giD519o8JGL1_m'>K$-D5Wdt3I.ekBo/_brbo=kp]O85_X[]"&D/dn#D(V=<\T55Il?LG]bC"K3Z3fmFT3Nc00-CX%`a3Q'C>dUb!\47'.F-I2LjKNt4ogohGKSs93RX,oe@PG8cm'RWp#0:BFf,e_>2L0Y+346gRmK"b%`VmqPJa)+&ADD[nn)kpj9j3Qm_<0qBfb*XB2n=-nQHg&F6Kf^)k3@A9mC'Rl\'h%A$uQM)%="-sT_i)1^oP*KSc24`?KDW@[F0RiGlrB^Pm4ln)[P](@b87-(E%/+<GgkngG:sq@oqYAa)d.K3rkVT"`Pc5_B]3h2[LO7<$l>"`.pu&"UM"Q%!2\.(^E6NpcRGqJGp`;3+t!U@K<uK5Z:&Uq$V646^"kQ"]5&OSUO%8)?WK].:?9"5Z/1GK?3_e)FfkG3X.%%f"fbmGRoboGf4:MN`Rf5gFPD89KTfiX9_ks)%ZOROeo@Hi+Y-"\=ST:pJ1:%m.)E/"%lo"=_>,A>:?/Giuugl-D?JV'h%DO%h[6aJ_[+/R\d3t1[o\)hpoMkaJs:g?:=udB/=7\c.cHTMojS@>/c\\`ETt=<X#"3hlNZ?ejJnpZmpds<'1b&jMGelfXjQ,2*'m8n)ZjAANPXs12n[ET(O?dFUqDc^bR?q80D1MCZ7F3l.QfMWLiu^)N(?LK.OsYbe%&S:ZoQ4/sM7]=[qro"sK$^LjeIoG\W*bOSO)^a:hR4Ng)`4gY)<_a>[2Ep[-iKg8,>;h]Lk"-XeO5+][RWF2(Y^H1e>F<k:BN,fLFgCfg+^W@=<0J5`#eLhKI0)KMDU3l^W<T;`;fl<b"rX`hlm,d9=5a=lLcji61gWbDqDr]Q=@55i@s.jhXZk.=MPg]+V%4uIP*aK''GWX:L)No>:jV_\!9/B9HN%cuqhMc?=_9Btsr/jT8bcC!Ck'-:eK9J_YcdLWsXq8_fO(-ssnlgAb%OI12GWrnd(]9mXlSMV-0+Zh]GjN!_f=']5(BZ?05RH@t2=J,H4A*i#Vl^Zos7D7r(`&s@=_2J4."EGSPqL"CU5uBH=0(M7\W>;gCa;;F4>ZsMIA@tY)/+-*:qIjKbQ^*QiE5om(QfNPF*fRMJI3j4)j7(0aJ8Du8Y55knmp88_G7J@/a"0p75%<+T;1GSZn5R6#\Heau[6oHp-X=atS!iK7+:b,k"EMM0<3&3nbbTjP\U]*cruEcO_qqHj?XDGnX/;4"non'tb=h_JFNY'f46YP1[(f\IqS:O.IG,L:^,JUO?dZ&aT\c`D?_8m#lYVjs.8921Ts%6M.<c:@/,S#+!l[?-6ap:4jrnm4r<i>ml.XgL3[TgL6K\;6+IGLAYE)&Es0CF-gYOujg@ac=H[D]i0%&-eVVQ,\Q1fXpqn3Z1;*hAfU%ITQOqIFALKBeB\!FpiIc]\\-W'K]=K&<IG8u6W3lJ%OL`OZX4NH8u%'d/*:pYW:):7P/6m/0&MZliGNXCc3@p(Ao2F!Nl0\J'uZC)A2);hi+L=O;7NOX^Y=m]aTD)flFDf$IRqB'I*[LN~>endstream
|
||||||
|
endobj
|
||||||
|
54 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3911
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gb!l"=``=W&q9SYkXT1sd6&\39O?:OS8@3'@r##B/QYY4,U@G)&IJQld6?o8hZe=]P^(>Gm;-WbAipd#DKN54rUjS$FSmlCJ%[/DknK08)do$eSV&ZF7POcL(Xo-$7n1(21tHJUXH-cK(n,?Q,Q&T8itm]FQD9FJ\cfp5h`cL-Jh''QX*#HB"Uo4lJ90uZ54sI7i]Xr+l(9[.:%J-$J%#8k#It[]YjEVr9m99HCk63/[Q\[rRuC'cA0C978:JgNi'CYn1e\jCL'9;cq/8f&ra^@PL5J-_+uk21hs%UTUQmMSVa"I6ge)d,*^J=t>Nt->J%E.nM6=-/'.1k\bWR2V;#>G,-8V,>>EC<$-`>lp!eW;;>d9)SU=NA(Z*!7(h*$Gf2&[W@:cJ[)f!._\R97&$)'^uB".7lJE0kP6bOXrKX3@t4YVSm,`GA,b4^IZ&Q"AJ>M7Ue\*[R&[GBd,bT(=#=h12RJmU!<%YeN`X?qH-D`W>2:]pPm7%'O)cH[]/E%33&7Ru$n4&,L@d@R9$tj^ei1;;P.?)O>UgU<<HjINYoq7.B3ML9J(:VhkM:K2h'DWs3.hPJ2uf+l9==qq4?1)3][eRdka=;Z"Z6@62(cSt93ig?<&);7NML'_d-uS'h(JBYerCQdp,oItW7]V2hTcF]YCdgn(^trc2>-3$@C^R>!Q_&-5$lg*\&'`KEXQq)]uYUYf@.A=*9=.Q^HXLtPr7d/k35,mcp&-YZ*f0j-DS"k2_ZmP6,1Pd+MF)<pPr>SK^NU:^EAS.g?9A*=l$/.DVo:U:"&#n1,/Bt`l+Vi6#*Sr?r<SMT^84a4,p(add6Wm!cMec?<'np%:^0RROp_\V,$(@a;*GmNWQ)C#P0V9-pke)1\)Ymq&D2t^BADIFSb$6h`(h@6(?%#F)OFX0!c>$m"#5LGH[,Qnu?P5%kijmW!5T1>>[:.A^qG(8CS*ar[RPik0P/LZsH+l'(D]ss`%51U)\$X7?Oadf??KTFe!-:W\(I**3Y*@`Vu;mq3*:LO9rZ3<pD$4HWn/RU>4=MUhN!M9],peQ?HX)qYu>qj9!@O>"$r*_+TV;'*rQ0\65[f6/a%HJtC4a+3S`)*,#HGdhOb]Lbjm7q_7?2dU%\5U-$-Xd;Ep$c:e9SJ,;DWDBm4.1d:Jd>,g<=i$sfQ+N_!jOb_5'hjKXr,b5oal>"*UhpecZ9?W,S!kc<sX&%_48J@n7#SgS_/g8Np=RM;BdgR/$`Xs7hP`rStLOJQ!iYg3OVoobRRVSUKAfrc&Pd*Zg(3F.Y3$Kh,.`tTg[M4/0qUL24MqHT$84f;rK08@I<A;/Q8uuq]Na7P].C(_ut>ZN77"KK\Ok#Vl-/=)57j*L5XBMg8/j0Z*7Y90_ij-6]X\L$,;V5`T%/@oL2<\5\Nh_m+k#sWR##F)D4hS?G1ofQluYJW,?a1K4l=hd=9N'WL_o(o:KPO$\#NW5A:OoQ-u9;+]Rko$mI?0bNe&&/KgjZ9<X,":3rpaE0'JtI@Xb21!2u"r4gpRUN>LD=*=j@;tbm4RG1dF?cXF!*6qYk%tJ[XN#NH)C*TAZibdPK5\nH8&0E)#@Tshg`AOO`S15OrEhTrgU">iU*t,1,3UjMn'+ArjWtsa<<R@AW(VJSYJ1%+dMK2<8OcOE&[Xt5#k4?@rnC@RO@&\_cE0'A9i_&^IGFk786#_R']09-S6MG,3:'?.0RU]qW'=nH/%Hg+NE>TS@$XA0M'M7IEVNF@f1H_H,Sc1s0O5)ffe_?HE)=s,+qQUOC#FI4m\;87!h/))G.jO9$n*rH6U#ITp$!jk#*UFS$#9J4[P6_!s3'iq;^^N3&H5/S>[95uLAlhrK[\2me+c.pGJ@g?392O9s6K(Lmg18BU<.`l"/_md,E80*`D6q0ub]oMPS%MY@.=]Fa?&O8(Y,UZsjjmo!Oi2#!L'']7"n1&P/Wm7*#73H()r)8IEi1Vn@lS>0r#@#OG2W]Y..OLp60VA%kh/5S?K9n\T@MZZ?Yd`Qm:Z,(^h`$?"=>T=&7oc\B+f*E0_cH1foRf4%4u#t^s_r'oJ#]d`5?C",O$,QH+r6X;bS88qUAb_HVUgYT'5O4Ym5qCOcQ,YLpF_i:#fV)=V5T9UQfR>4"e?AE'VNFAJ=0t9,F'G6TXc0'$:JKrBPd;WJ'[\\2NSioY:49CA7Uag-N,R9F9:^7FT[3Q>P3b78qfC4\9iI2cu*(Dtm0E=%tJlS+=,R2(':f'k%WT-)+h]Z"+p(1>Dr;((^6@f":A"_C0cf7.8r91bY(`pZoEWUsY"=j=T3r(Z!nns2N$sZH7sl2.@'fS[V\LlgAVVg*42?>D,dpk3mFC9LMUU3*;>gP<)IB`?Ge+_dqSomX:H)op7DMS)_oSYpk+VmDJQnVQ=9:nm8*;3Pe+>XgkJ)"IS)G=S&g]S(eF4N4kfWGOf$C6@8*eQW)gP^a3Akd<M$9X-3b894F4"bL&ZQnA\1h[a8oYk/FJ[HOP;Ohjgc8bY5"/T!Z@IiLS]280d!5pJp7E^Hcuh5=0L6-!dYW:mNi`Co\__1``B&<T]R&]lohpk&,6/"WeBqd&D_0o6.Sd;K@:ZM3UKEem]s,E8d:BM8+G/b/GJqf!7JeHHY__Bj"s+/R0d>BqGtN)7!G>^Z#*I`Vu@>Y^sUd$MQ.';5luukRX=iqtt]\,&o7bVrpeYP_Cm(-d0Q,[+q_NGXu3(d2OZFWgf6D311T83B'`m?JO"hg+4c@"gPDWYV!mdl5k[?gc%UX_J)p2.;:P=TF-Ui6W;+6a*$hg/[5%&B7Xho,M-]F@KS"0+,;Wr&#r$W(iVAL:Pihr+CV4CN!;4_&TAn7,='"rY*?`Z:76?&A>/8tYaLUG\XcLMo]rE507/[:P^R3%fnYdU+!8gQGMWeu<@N*CWPBn)>:X*,oGsH/8IHs2f>BE9D892cAs<qQLb3V/$[pMnkMoEgq.b>!ElW4&B<P`_Or--Ea7`t7"@[As6_KNQQ)\pt]HgR+gR=TKY#RGT>AhkQY?Tg^CWfH+F.VPQeX@EZ<L>r"FGD]J2efoI/&jYE`V(Z2?.:KEl^hVYmiA2V\):rYlV5L9[O\RHf=_;4ELZ>&4]&r'E(bn,h`Ps5j5QXlF)70t:%C;nb?N#<f_#'l8O8h?(qb@I,BmGjI^T?Gm*4tOGtr:<delCb"q:N#fDea^RfYiMci`Ot-Mm?!2Up4WPU@cZ\nSW!R>@\1)C@K5,_uJS5_21J1#GI=D+qq7cF(4^o;BUf`UiSEC!as[3oY4U)4qj$hnZ4BiC5U32k"0bi>S.rgI<b'2]P=,>=l8,]`G5cgX*9el"KQ`N\>>`Y<CD=ndn3I(pTC*pGuO(,;VUs>u6KbK4<-7SA5ZFC,I21o[-ec6pA@W/,fio,[l_t;p^G9nFl_<X<$,Um(sWE^l;Q$r@EL2Vm=n,!cG#NPPuppPLH?8ZdTZ4?>OrrV*B)r[1M"4N,G(sA1IWALW&7.L]r1HJ?i9U/t4\baF*c+e^0<@30_ngV_Wc&i.8dN:1^X8+[L.9GOV.mJ-clY#$(7eAoG,qKeGK9P>6gZT&-K#q>oZ-bV'jPOX$:ZcPMf0,M?9Q:.u:,)VBF=*1rHtAt-;AZ^J=OQt;^WTs9+"*uM`,J7Fkpe+g%=DBndT=b?N$VKAu(Lb'QW^]B]6W%8mkRK<e1AdQd/CZ0$"<PXUnU>SmCbS6pbI`5:3(C$_X+&'c+e<tnS=g+2M9j%(D=Un]._Tg2fqJ.[.j[)FaO>l]29^(84bZ*Q_:9"Qibn^MbmKsV>n8D7W0co%Y4b'SdX&B`D`P)2@SABM`He9nb-XF>'*6\(V_m'7\Vc;\uXF0!A21^s_XhN8#BbT6i3#M_F-6pEqfWb7")h&LJ60`1^.2^"URV7G.[*5d52@N)aUVRe\Lg>=@E:b5`/uS+~>endstream
|
||||||
|
endobj
|
||||||
|
55 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3387
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
GatU6>BAO[%Xua-^tZGuM'D4slZ?KSm<0lAUlN'n&"2rA&oI5.&lhePlLV6pI6l[?]@P5t:7E`/5S*o[HiQT#a$1jHf*_V^B5i,lJ/BtE!3n?gAe/i>48X"eMOBd43>5W+@-fqCTj)#Sn*JfV$'&"[pi2%O8[TBY0FP]NPk<.G,C<a-UH0Yn(qCPY=[5n<,.Z\fU]P-jAC@4R]=iqlG[3r`0e"8VBu3%/!G6htljorX[g$\C\#)m1e:Cf#;G.m8P3lW.Co-*([UKdqi\0GjYbDaY8/B[-V@9&L9U?'4rq6=6pN2?krImd/oq)Lr7YYe?\mssq3.F<@drP0;J";qT[EsF!TE22D)5Q^&A1DP=\\F8;abGAm(CQP5."uo:TKn5m76YsJrT#a4ZdB]:7+4k>j%lF^$r*?2VJUos\rJtGJ2XhFf-8@"&\_k<d>DU"@Q8=X-;#++r]lV2:GKhoC/`K]q%PCoB>NQQi[(+=jJ>Id(5`<T1J\k&`1[L'e)j:JG@_r5c2@?%[k)5M%O#>!K'#'Zn?[.5UL:tr2"^_q)F*BC%I#cgQ>]r:c-fn`"Sku^@MIcU3tP_bT[#p2(JM0UR\[[[QY;LXR3l]&?+3q<El[YaSe?UaY[VASZY)CY0-^uDe?,&Jh**Tq<eMScQFhG=ILai-a)aA0o'IFd.'q"LSh&%S&>Z>D]4*Tf=5A<F^114LT5L-,cr?GEP^-PDlm:"<me5-!($^&>1>5$.00]ni'1Udb'Pbg4"E5eElk)#);2W]CKZ99i7PpjU2JpVfQ*5r2qE[NmMj,OH&`Nc0^OMeg'4Yk3":foV5G)@RH7r,Ugu0VE"n8#kkk3j!Hb\-Uo4g(AMa9n;%H(/FJ4Nrb^o)R1+Buq(5RFM5.Y3?5k'g7HeO)31>#oN92-`9Y_r$o'\heLef5,%ANoOl?H&R7j.^On1L9FMSNe2XRkQ8X%</bAGJNk@RZ"D)n1<1ghc/'>OMW.H6@RbS\;e-2DSKIoGn5Z-F+5iE\mu0\cckHPJR.5X,H,=s2S%^kBK-ndXl1bD1W[8-b>A+2-,')cj,311[k1$Gq7p$F&>I9#Q&BjGd'#\le?kO;oh3)o$K&j2kb#*V]7t'KfG,JU#7baLqkn,WtK@p5/5r\A++S`4!WKVT31$kT!>F\oh8ersc6$XU3`@qi_7Dt=nnRr5%J_\qV8Y:Ep<dJmFkEII;E_Y]6lP@4TMYp6R+pY?EQjYV*"PZ^k'sJqm&U'I%SiVa3,*CD#V-pOd'EWh71SYk*l!>IU+o[D@[)*fQ=ULQ7V">+U;f"`N('2j7*bH>)nhG26o(:'iY*0=P0_l"Xg4>t%Pqf8D':Nrm6k@3sQ/$;Oa5H5M20s_A4lM5*kVaXo&9*:k=Q*V:S])&!4BrO-0NF_cbN&n/RC(CqUTm`.#37.@*NOlYU09:Hl't7WW!sZf'@DCbd:*#%R'D/bPmN$0=Jr/uK7Mq!'oaCQZl$sMF0bP)V"#DBe9aP/@A<l=o4:1Rh$1.?Ta&'S2;Q-<FnUh-K@TKlJ-KGtHs@S,+oprlqU,")(lJZJ,_7W,@J3qUM".77>DQ0M4d.;r^Vr%CC9+3]6lf<1n/subRo=IZ\>['eUF&CGB<i'84j%AWCUkaT)=OKt4,KknWoNYGYi51rAuB*0TICFVK(P0)Z;4jHC-ne8_!%ZHGX-'(HRX@P(ka_Knj=h/)lpZ.C;FYdU@;j<ojYa#NqV]<2m$fQkeYF8)"NK<lgPS;h"21Nf(X.pMH)(<@]]Cp5?l_iP<</]2K=P9L@mPs<,OM6:lF+o5ZgOs7D^a!3NA;e;DU]+=!o"mpV'nl:U'N_4CNqS?_GLP6^[TP(%u2&FQ]eX[&3\<'fLpred;iYfW2C49fub:e-.:i=WbN$C5D3k53fBk64-j;_T-\1]Vk@G[o-_(L((:EJ588_p/Pl[TZTtdQ:MdW8>_f-=2P/2Z^XIi'XLRa.>TI"U5Pk@MKFhi$0DN'7b#WXQ6'hX]%uACIT#F-g9h;#"QE^`!JU45B,k<4VSOpn)j1H%2McjWBX$$%3#0[%$L,Rt1olS,TC-TcH`K69M6"%7'!g8$$bnTg?c[I#=6ig.??6Y1=Mk(R;2PTQ[7Skc?:NH=1[Kj=j<G/i4FK^h8Guj!eQ\4)!55\0blq0cm=^1&_gqWO(6hjJe1f_#D].d4<]gK/[6[J]R)D*?RgJ"jiCOEl)7"`[6q)>7;9%EN\!2(eO2o!O'@@R`K&A0.,cd[o0JR^*_WM<08:%M[$3A%E`$,c9/\L[sV.+eZ`Z1lPGDXtZjJSQC[WDA^S)&i03LTMA6k_1nMWG4a*F`2;-W(2.[HdM']1>m&3BW*]B&6Kn(=shW]\(VZDqA1h1Hdjs't@fK-3_]E:+Vh8H.QgH*[?W6<E=n^<Dhjr>cF_IY:so54E'NP=,M^,U6rnG;mn'b6)Q4Ke>$_fg8=!lG&u-P1e9K4.)HnA*>rajZu^H/`mFD4JmAg)dXC^SoV8OTNqS6$3X)9>_rWq&Vd.t96*Ans\MBZgjSj=`7j!-=F'HRTT0e#%Fcm"?@CUfB`uWqoO>6?e5fTr2eAC@2Y1i(.Fh_D-O$KE0?5No@R55*0$u]HA"_mae<5"-5S[Ke4'./@$'>pKK]e(s`nIf9jJ9l$c2)Aj8(PSjJ!kA=&H+*QpJbH3-G?QZ[O'WiU]q8X(Ep@VspNMtUG?"]-cWXaZp;C)*[b\";K1k#UC5K)T`0ca6_<lR9C\VrMH%Z<]AatI>_%Qm]`R&F:G7;4:WZO\cRB)@,`.(4]U_3X=n,A'FqoHH=W6ZYIAoiek5K.lK[=L["0r.t%1?u""n[UM*NPR3Nra0j@W7D3W?GAj-"j>kk1$\=6PUIhnh2YMd[!,N1l*1IWQ]d,j7BGa?=4<XgI@8pIbe?mAH<F\Ol4<NpMX@K)l4!0uI?Dk)X8As$=7_EA$T)68kLlErL<Fkd2^7YPhn`S@RKTYH;`:KiZM8R6Cm;DkfL+D)omjIY)=R;_HJU(=-8r5:C4[.&ghWSLH7SDiCW3Du<[N0aPt<jklnqV0>m&(&]:cTl?-?f_8Rq1W1r`i\aDao@`K6,GC4^T3l&M6[0uUIWgG,2<*O?_-=tQ*[goP1rA=2.5Wrum6]6-/l"LFS<s6bYK]t2;jT/CJS^K85Y=!-br$"@hXg1l?Vh:7=80ecjMm[;P-7L/,#UFk1%o*gtc'&eQ4>Sp3H,7X(pJ&.)hYqjAJ53k7.cXUsp0"lYpnbc]@&DioQNT/ns]t\*?WpA=mGj^WRNW%R3FKFUF#KN:#VU'!n1Nu@_=\\]g]k?V*DU7[]RI[$gD?_<&cj\O/J4:J^#[Ru\rnIZaen[RA/#'60/__7\A:h=!+Ee>PagtS!#;0FL$K1:NB7$/:~>endstream
|
||||||
|
endobj
|
||||||
|
xref
|
||||||
|
0 56
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000061 00000 n
|
||||||
|
0000000146 00000 n
|
||||||
|
0000000253 00000 n
|
||||||
|
0000000365 00000 n
|
||||||
|
0000000512 00000 n
|
||||||
|
0000000659 00000 n
|
||||||
|
0000000806 00000 n
|
||||||
|
0000000953 00000 n
|
||||||
|
0000001100 00000 n
|
||||||
|
0000001247 00000 n
|
||||||
|
0000001395 00000 n
|
||||||
|
0000001544 00000 n
|
||||||
|
0000001693 00000 n
|
||||||
|
0000001841 00000 n
|
||||||
|
0000001989 00000 n
|
||||||
|
0000002137 00000 n
|
||||||
|
0000002285 00000 n
|
||||||
|
0000002433 00000 n
|
||||||
|
0000002581 00000 n
|
||||||
|
0000002730 00000 n
|
||||||
|
0000002846 00000 n
|
||||||
|
0000002952 00000 n
|
||||||
|
0000003030 00000 n
|
||||||
|
0000003114 00000 n
|
||||||
|
0000003320 00000 n
|
||||||
|
0000003647 00000 n
|
||||||
|
0000003853 00000 n
|
||||||
|
0000004059 00000 n
|
||||||
|
0000004265 00000 n
|
||||||
|
0000004471 00000 n
|
||||||
|
0000004558 00000 n
|
||||||
|
0000004891 00000 n
|
||||||
|
0000004966 00000 n
|
||||||
|
0000005068 00000 n
|
||||||
|
0000005183 00000 n
|
||||||
|
0000005310 00000 n
|
||||||
|
0000005430 00000 n
|
||||||
|
0000005559 00000 n
|
||||||
|
0000005710 00000 n
|
||||||
|
0000005809 00000 n
|
||||||
|
0000005924 00000 n
|
||||||
|
0000006043 00000 n
|
||||||
|
0000006155 00000 n
|
||||||
|
0000006279 00000 n
|
||||||
|
0000006423 00000 n
|
||||||
|
0000006543 00000 n
|
||||||
|
0000006673 00000 n
|
||||||
|
0000006789 00000 n
|
||||||
|
0000006884 00000 n
|
||||||
|
0000006980 00000 n
|
||||||
|
0000008056 00000 n
|
||||||
|
0000008996 00000 n
|
||||||
|
0000013043 00000 n
|
||||||
|
0000016155 00000 n
|
||||||
|
0000020158 00000 n
|
||||||
|
trailer
|
||||||
|
<<
|
||||||
|
/ID
|
||||||
|
[<e35c791b1039d8a464ca82208c6e5ad5><e35c791b1039d8a464ca82208c6e5ad5>]
|
||||||
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
|
/Info 31 0 R
|
||||||
|
/Root 30 0 R
|
||||||
|
/Size 56
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
23637
|
||||||
|
%%EOF
|
||||||
30
GIT_FLOW.pdf
30
GIT_FLOW.pdf
@@ -314,7 +314,7 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
48 0 obj
|
48 0 obj
|
||||||
<<
|
<<
|
||||||
/Author (Android Cast project) /CreationDate (D:20260623115606+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115606+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
/Author (Android Cast project) /CreationDate (D:20260626184404+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260626184404+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
/Subject (\(unspecified\)) /Title (Android Cast \204 Git flow \(green `master`\)) /Trapped /False
|
/Subject (\(unspecified\)) /Title (Android Cast \204 Git flow \(green `master`\)) /Trapped /False
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
@@ -450,10 +450,10 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
74 0 obj
|
74 0 obj
|
||||||
<<
|
<<
|
||||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 891
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 870
|
||||||
>>
|
>>
|
||||||
stream
|
stream
|
||||||
Gat=*9iKe#&A@7.lnL1^B_?']JJMiY>UZ28\9MI#9OjPQ%[;HMahdL;'?ACC&ri`9Dr7^@/Kmsf@.h9.!NlO7]L>'i5n#/tJD_K_#I?WNr3@$"-r3_A>&-I80.bC$>9N@D1^'f>i'^K1g%QTj`Z3Ih/H_5tRo#/caanD<3?t7Eo*%JN%.gMN.e4j:RrDZM'4VsKOqQbSrW,gdkJESpc6.A>CtuRY@@gXq;g_<j0'5rBeP'olMlmm9d"?c?"f7=%>u2;g^-_%E`H*tEbO$KsRB,s&FVFL'^FmB>q-qnkOI<lF"VbQ[_R8&$'c2-&Bit:nnrKkQ3Zq.3_E;*qCE"\JDM*pN0t(;qdLYJaQ8oeKQJ!VoRBkM.<Z/j=QIA")%AWf:84=r"5Lq6/SCp,\=<H^+VsoT(]_nQn%.dMj`k\Y?L&Kn@Y(*la8ZSh>c*;-)Z#.JU<Opp4Aec>f,a:h&7<Jt/YAgm(4m"ZVQ2X#se/R?XgCCDFj\&p=Lued)XNWK1MSguMJ""X@c3&PiSiYXkc$Q`ko#'k-'7L!A%S5-6dr86QYd@:O$HrG"ma4,P!M`=?W*D#?TNb,c_nA,HdQC.]A2trdl(1?J+JpMM?\DF%Rh<=`FoQeAJ5;3ddCbqm.6imjS'IRn.+tBu)8aK5H7VSRk]GfqT"_=#3KSKTh5R4-o&V2U=UF3QgBc>nq+J&Aa_\)_p2L&9^Xj@nQkn-,:O;'I4*u[4O55Yb2CFZ7?,:$Y7,&*V1JM)./X$9)m`*U[@L\a;(:9EAKCV)H^VT+D6oPD%6)Xu23XF+UGR)&h]"51^":Diu/Vi)oe?M1W\t^]R7%oBYcOqf@[=\D14#DA[^.upR0hBTGk.V'o&rGgP=3N\A-"-HiJD!/(<Ja]~>endstream
|
Gat=*bAQ&g&A7ljp?2W5_rXfXVJ.'X0Mj#,g.Qr_YinK+-)HKh+Fd`r[]Du9=Y^8P+Ls9i]3L4]TXJ;)^J"XA"E64g5R,%3:_3ZD!kni%^D#C*$;$I0W;s%XU"gG"B9t1]pKSVg`,]f@WV5[<Lk%5#F>[]]dW#rc0ePHtmOMp<Zt-m9aIcjdSORl?7rT-U(%B;3L>04geN3SXa6?N?9F;RI]N@)[>chD&=A+kH-7]n]a,=sb\:e!hN",!r[R3>0,]XukKqPU\\paS-Nn8<`LgB.84\4DI!iGQO9AoMjn7TK1q3rX,V5Hh6e:`+Y'[S[5SkZYQ9/3k^[fVV&EKW@"Q^6;P%%4C]OH:D`?!:"T.N:hffoV@n5e!pnoJEn(%^A4BX3TZ=Vg8)@M<O+ScP$DaX:"\$@</8V]9Tanl;e\TeeQrjQ+noNfW:-8&kXF$U,n)*=1I+S%W`<N$G7`#l4%]g9o%>ii]50e`,Z')>%B'eYJN,Dq_Xf&-P-+uH"q?VS+l\0cI11YceueaWHrY)DK6C+<[pLGdG<LYHH/*TPc5Oc1WFc`X3kW`\8Qk[7I_j6NX9++Va1?>nVPS(@9MDu^fcr6qn3f]7n<,XhG#%-T;VXIk>"\bDj$\#iTL\5'SCRN4Rk1"?Iu(<8\E=9=OOD+Eg)ltJE$0CJEkP[KipU;[as%8\:</gbCk+6$Y`rkSc8W>5#gHMJ)_pLNT>h0GUSnlF+LcsBu@/`EeMNI(n++!-?ILbjq=dnILG5g(u9f-)PL=?<?jm>+_h-u+a?@U>?6GCTsqYqE;Mp9leSg)RR0FWH<?_@U'78ld-Wo]VGG_0enc%QjG[d?Hb^nhLgKn=S0D2=[P%]Lqu[8gJ%#~>endstream
|
||||||
endobj
|
endobj
|
||||||
75 0 obj
|
75 0 obj
|
||||||
<<
|
<<
|
||||||
@@ -602,20 +602,20 @@ xref
|
|||||||
0000227373 00000 n
|
0000227373 00000 n
|
||||||
0000227462 00000 n
|
0000227462 00000 n
|
||||||
0000227597 00000 n
|
0000227597 00000 n
|
||||||
0000228579 00000 n
|
0000228558 00000 n
|
||||||
0000229825 00000 n
|
0000229804 00000 n
|
||||||
0000230056 00000 n
|
0000230035 00000 n
|
||||||
0000230286 00000 n
|
0000230265 00000 n
|
||||||
0000233490 00000 n
|
0000233469 00000 n
|
||||||
0000236177 00000 n
|
0000236156 00000 n
|
||||||
0000237626 00000 n
|
0000237605 00000 n
|
||||||
0000239527 00000 n
|
0000239506 00000 n
|
||||||
0000243954 00000 n
|
0000243933 00000 n
|
||||||
0000247347 00000 n
|
0000247326 00000 n
|
||||||
trailer
|
trailer
|
||||||
<<
|
<<
|
||||||
/ID
|
/ID
|
||||||
[<e92ab2784f1d9b47bd66d5dd1205e8ba><e92ab2784f1d9b47bd66d5dd1205e8ba>]
|
[<27d85e779fba00f29f028dae9147e035><27d85e779fba00f29f028dae9147e035>]
|
||||||
% ReportLab generated PDF document -- digest (opensource)
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
/Info 48 0 R
|
/Info 48 0 R
|
||||||
@@ -623,5 +623,5 @@ trailer
|
|||||||
/Size 85
|
/Size 85
|
||||||
>>
|
>>
|
||||||
startxref
|
startxref
|
||||||
247812
|
247791
|
||||||
%%EOF
|
%%EOF
|
||||||
|
|||||||
@@ -153,7 +153,7 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
25 0 obj
|
25 0 obj
|
||||||
<<
|
<<
|
||||||
/Author (Android Cast project) /CreationDate (D:20260623115606+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115606+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
/Author (Android Cast project) /CreationDate (D:20260626184404+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260626184404+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
/Subject (\(unspecified\)) /Title (Android Cast \204 Graph Visualization Pivot) /Trapped /False
|
/Subject (\(unspecified\)) /Title (Android Cast \204 Graph Visualization Pivot) /Trapped /False
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
@@ -315,7 +315,7 @@ xref
|
|||||||
trailer
|
trailer
|
||||||
<<
|
<<
|
||||||
/ID
|
/ID
|
||||||
[<1a9859941ac21a0ffe6521926edbbd6f><1a9859941ac21a0ffe6521926edbbd6f>]
|
[<c268bbf3393b6d9be5c109ba2597e046><c268bbf3393b6d9be5c109ba2597e046>]
|
||||||
% ReportLab generated PDF document -- digest (opensource)
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
/Info 25 0 R
|
/Info 25 0 R
|
||||||
|
|||||||
22
INFRA.pdf
22
INFRA.pdf
@@ -183,7 +183,7 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
30 0 obj
|
30 0 obj
|
||||||
<<
|
<<
|
||||||
/Author (Android Cast project) /CreationDate (D:20260623115606+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115606+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
/Author (Android Cast project) /CreationDate (D:20260626184404+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260626184404+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
/Subject (\(unspecified\)) /Title (Android Cast \204 production infrastructure) /Trapped /False
|
/Subject (\(unspecified\)) /Title (Android Cast \204 production infrastructure) /Trapped /False
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
@@ -270,10 +270,10 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
47 0 obj
|
47 0 obj
|
||||||
<<
|
<<
|
||||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 857
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 842
|
||||||
>>
|
>>
|
||||||
stream
|
stream
|
||||||
Gat=*9lldX&A@sBlnQc7MH6?g9[]^mSK+)cl)>K=a9`^d/r"KGmjm@)5&+Ts0VC_[Hi(2(Pnnr)#HR;K!OrNqjq.V3"=l`'"9_Ni&Bt-tn8kIg7!Xq&crq+*I:7,=Qr&i`aanD<;=+D3P5,/&J"9_;4IFM-,h<)#Pg0DAc2^a;d&5ZZ#8(4sVGWr(&_r/r!e)r&@?Y>$\Lc_kKfEB"[Qh79AT#4In.*8lbe"Qin[!Y(WE)Q#UKURf'gf\&X6)h<Fe`/koaGs`:N6!5&QWG3Cn89-p50q6^;?Fh2d'I'CR#"-UaF=7Q)sZ^j]N[0="2-!j+GWP*K3Y7lk>+I=jKX[%BQ]aVgI\hN#nHU.RF17[RS[9bl/p,qE1smKNF],jVKpdR(#[4#$r#pm/J'2SUA2;[-Hqs)lp<@MDi3V[E$q$UQ^gn&rE9[/n+_oY"R5RDPLLi%kNE\,7J&9i,)W0Abh.i>X4hq2A^:5@2a$-VECDpi/dD,L\o&<`*8_rkCm9YN<<)OA2i<,-EKt=-nP4!HUR=E",numVfL)4J8R6t%8ZE5:U2BT`QK\<Qu6Wf!lT3$BCi?bDDNJ<V='uM!r1iA/Bimkj'm5hhK82(6ueV'GR,[DBMj`BdHSShlKX&Sgh[3J>aXl0DqVEi9Nj]dgPjKBRD1H!\(!nEq?Zg+qnCC4a0^r:3pF%*he`ArIh-aPdbIF^G7BIFLpdP%Vjk+A[\fQ;E]$42Lc&_G0PD!E#3C%oIY6#gLi*d(K2<"DF:b04n.(&ZFEM0F#S_U">7PlPWRpuoW_-3gLdDX<X<h$mC'FREGA[1EIGUHq@$"V,o^'E;,a!mh<FB,Vgjneq!mLWE@g7OJ~>endstream
|
Gat=*a_oie&A@rkk*Q?,_r3'ch6\e<(^1N[4nU"$FJ?R6;HZVS^Fq$+el#_<%)F:#]Jjb`6ZNa:rNQ.U,QOG=\6C."K4#'8Lk&k:?\@%()1JY$Osj+(!Es8*\M#MZ:(unI/iaL2/#k`T=u'G-jA.STM+9??K#F*cJC9inbS`[g$2Tn@q&k9Y72k8j*5R'50And!)IE"d.Q9edV%BQZglCR+>NY&]">:>A_RrNM'gL@>P\Pn?2QA&l?Qo'r^1pF(5rUh0Ch0I`=M`6;cP$$PF8<<g8Q:TcYV%eAT!#0((F[UadRHVZG+9Y5C$K)2>%XB\ABG*A6>g1XCH:3PY@7(Q)H%.SkdNF,?=ro7+kE!*eMY#!1,$Bl&Au02Bjoq".Dc!J.X$mq[ZXZYrNp&,@Ao@35@d`0G3:Xf,n`L@?,QRjgm+bWgd\pB*cQgZ,7J&9i1_coZ[@EZ=&>fK]aGV10FddFVEBA!^`O5f%el`DMtcqF\LdXcDB+b<-\pYE2dphZ7Ua^%g(Se1)dno03L+Z_#'?of@9C(04isFC)fMT50\t/*#K68MBCi@MDDU:R9&78N"n9X*XNd6Vj5U$C^$4=/M;g9.L_*=Ad(1(%UXP([e<L,3\_6EV"A]NDQY]SI-7tm8IiY5014N^jc`,1_h$NKkp@g<e*n*I0,,EgSI^=/(r&qdi8b4:>mLIgu'Q$Xmc7j)eCb7Y7jD'GC'Pkcp@F1U?%Ee-ir!&oX&D\I.#GE&hkTE9Gi#Mr=l0?Ek&Ld9[[iFhgWI91S=/@?F7%oD/W?k^jC'FREpMB[oICu&OA<:%0o^'Q?,a!mh<Cbmggk"l=!mLWE$$pmL~>endstream
|
||||||
endobj
|
endobj
|
||||||
48 0 obj
|
48 0 obj
|
||||||
<<
|
<<
|
||||||
@@ -367,16 +367,16 @@ xref
|
|||||||
0000006431 00000 n
|
0000006431 00000 n
|
||||||
0000006540 00000 n
|
0000006540 00000 n
|
||||||
0000006643 00000 n
|
0000006643 00000 n
|
||||||
0000007591 00000 n
|
0000007576 00000 n
|
||||||
0000008486 00000 n
|
0000008471 00000 n
|
||||||
0000008716 00000 n
|
0000008701 00000 n
|
||||||
0000008944 00000 n
|
0000008929 00000 n
|
||||||
0000012295 00000 n
|
0000012280 00000 n
|
||||||
0000015841 00000 n
|
0000015826 00000 n
|
||||||
trailer
|
trailer
|
||||||
<<
|
<<
|
||||||
/ID
|
/ID
|
||||||
[<6a21447e613b14d0d348f555435c2451><6a21447e613b14d0d348f555435c2451>]
|
[<6c9de0b8eae69d3f13c0b3c1e6685a9a><6c9de0b8eae69d3f13c0b3c1e6685a9a>]
|
||||||
% ReportLab generated PDF document -- digest (opensource)
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
/Info 30 0 R
|
/Info 30 0 R
|
||||||
@@ -384,5 +384,5 @@ trailer
|
|||||||
/Size 54
|
/Size 54
|
||||||
>>
|
>>
|
||||||
startxref
|
startxref
|
||||||
17880
|
17865
|
||||||
%%EOF
|
%%EOF
|
||||||
|
|||||||
751
Installing_MacOS_Sierra_10.12_as_XEN_guest.md
Normal file
751
Installing_MacOS_Sierra_10.12_as_XEN_guest.md
Normal file
@@ -0,0 +1,751 @@
|
|||||||
|
# Installing macOS Sierra 10.12 as a XEN guest
|
||||||
|
|
||||||
|
<!-- doc-meta:start -->
|
||||||
|
| Field | Value |
|
||||||
|
|---|---|
|
||||||
|
| Author | Anton Afanasyeu |
|
||||||
|
| Revision | R0 |
|
||||||
|
| Creation date | 2026-06-26 |
|
||||||
|
| Last modification date | 2026-06-26 |
|
||||||
|
| Co-authored | Cursor Agent (project assistant) |
|
||||||
|
| Severity | low |
|
||||||
|
| State | in progress — HVM-only; CloverNG/OpenCore path |
|
||||||
|
| Document type | technical guide |
|
||||||
|
<!-- doc-meta:end -->
|
||||||
|
|
||||||
|
\newpage
|
||||||
|
\newpage
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Document type:** Technical guide
|
||||||
|
**PDF:** [Installing_MacOS_Sierra_10.12_as_XEN_guest.pdf](Installing_MacOS_Sierra_10.12_as_XEN_guest.pdf) · Regenerate: `bash ac-docs/build-pdf.sh`
|
||||||
|
**Scope:** Running macOS Sierra (10.12) as a XEN HVM guest using a `.dmg` source, OVMF UEFI firmware, and Clover or OpenCore EFI bootloader
|
||||||
|
|
||||||
|
**Documentation index:** [README.md](README.md)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
> **Legal notice:** macOS is proprietary software. Apple's macOS EULA permits installation only on
|
||||||
|
> Apple-branded hardware. Running macOS on non-Apple hardware (including XEN virtual machines)
|
||||||
|
> violates Apple's EULA. This document is provided for research, testing, and educational purposes
|
||||||
|
> only. Do not use a macOS XEN guest in production or for commercial purposes without Apple-licensed
|
||||||
|
> hardware.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Table of contents
|
||||||
|
|
||||||
|
<!-- toc -->
|
||||||
|
- [1. Prerequisites and host requirements](#1-prerequisites-and-host-requirements)
|
||||||
|
- [2. Critical constraint — HVM only, not paravirt](#2-critical-constraint--hvm-only-not-paravirt)
|
||||||
|
- [3. Architecture overview](#3-architecture-overview)
|
||||||
|
- [4. Bootloader choice — Clover vs OpenCore](#4-bootloader-choice--clover-vs-opencore)
|
||||||
|
- [5. Tools and packages](#5-tools-and-packages)
|
||||||
|
- [6. Step 1 — Convert .dmg to raw image](#6-step-1--convert-dmg-to-raw-image)
|
||||||
|
- [7. Step 2 — Create a bootable macOS installer disk](#7-step-2--create-a-bootable-macos-installer-disk)
|
||||||
|
- [8. Step 3 — Prepare the target installation disk](#8-step-3--prepare-the-target-installation-disk)
|
||||||
|
- [9. Step 4 — Obtain and configure Clover or OpenCore EFI](#9-step-4--obtain-and-configure-clover-or-opencore-efi)
|
||||||
|
- [10. Step 5 — XEN HVM domain configuration](#10-step-5--xen-hvm-domain-configuration)
|
||||||
|
- [11. Step 6 — AppleSMC and the OSK key](#11-step-6--applesmc-and-the-osk-key)
|
||||||
|
- [12. Step 7 — CPUID masking](#12-step-7--cpuid-masking)
|
||||||
|
- [13. Step 8 — Run the installer](#13-step-8--run-the-installer)
|
||||||
|
- [14. Step 9 — Post-install: Clover/OC on target disk](#14-step-9--post-install-cloveroC-on-target-disk)
|
||||||
|
- [15. Networking in the guest](#15-networking-in-the-guest)
|
||||||
|
- [16. Known issues and limitations](#16-known-issues-and-limitations)
|
||||||
|
- [17. Troubleshooting](#17-troubleshooting)
|
||||||
|
- [18. Comparison: Clover vs OpenCore for XEN](#18-comparison-clover-vs-opencore-for-xen)
|
||||||
|
- [19. References](#19-references)
|
||||||
|
- [20. Changelog](#20-changelog)
|
||||||
|
<!-- /toc -->
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. Prerequisites and host requirements
|
||||||
|
|
||||||
|
### XEN host (managed by Anton)
|
||||||
|
|
||||||
|
| Requirement | Value | Notes |
|
||||||
|
|-------------|-------|-------|
|
||||||
|
| XEN version | 4.14+ recommended | Older may lack OVMF features |
|
||||||
|
| CPU | Intel with VT-x + VT-d | Xeon Gold 5218 ✓ — SSE4.1 present |
|
||||||
|
| OVMF package | Installed on XEN host | `apt install ovmf` / `apk add ovmf` |
|
||||||
|
| QEMU | Installed on XEN host | XEN HVM uses QEMU as device model |
|
||||||
|
| VNC or SPICE | Available for console | Needed during installation |
|
||||||
|
| VT-d | Optional but helpful | For USB passthrough of physical keyboard/mouse |
|
||||||
|
|
||||||
|
### Caller actions (request from Anton)
|
||||||
|
|
||||||
|
```
|
||||||
|
VM request:
|
||||||
|
type = hvm ← mandatory; paravirt will NOT work (see §2)
|
||||||
|
memory = 4096 ← 4 GB minimum for installer
|
||||||
|
vcpus = 2
|
||||||
|
firmware = ovmf ← UEFI required; traditional BIOS loader will not boot macOS Sierra
|
||||||
|
VNC console access ← required during installation
|
||||||
|
```
|
||||||
|
|
||||||
|
### Preparation materials needed
|
||||||
|
|
||||||
|
| Item | Notes |
|
||||||
|
|------|-------|
|
||||||
|
| `Install macOS Sierra.app` or its `.dmg` | From Apple or Hackintosh image archive |
|
||||||
|
| Clover r5xxx `.zip` or OpenCore `.zip` | See §4 for which to choose |
|
||||||
|
| `macOS Sierra` base system `.dmg` or `BaseSystem.dmg` | Embedded in the installer |
|
||||||
|
| An EFI config for Sierra | `config.plist` — community presets available |
|
||||||
|
| AppleSMC OSK string | Required by macOS kernel — see §11 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Critical constraint — HVM only, not paravirt
|
||||||
|
|
||||||
|
**macOS cannot run in XEN paravirt mode.** This is a hard technical blocker, not a configuration issue:
|
||||||
|
|
||||||
|
| Mode | Works? | Reason |
|
||||||
|
|------|--------|--------|
|
||||||
|
| HVM (`type = "hvm"`) | **Yes** | Full hardware emulation (VT-x); macOS sees real x86 hardware |
|
||||||
|
| Paravirt (`type = "pv"`) | **No** | Paravirt replaces hardware with Xen hypercalls; macOS has no XEN PV drivers and the boot sequence is incompatible |
|
||||||
|
| PVH | **No** | Hybrid mode still lacks the UEFI environment macOS requires |
|
||||||
|
|
||||||
|
This means **the macOS guest must be an HVM VM**. If the project moves to paravirt-only nodes for cost/performance reasons, macOS cannot share that pool — it needs a dedicated HVM-capable slot.
|
||||||
|
|
||||||
|
Confirm with Anton that the XEN host has hardware VT-x enabled (`xm info | grep hvm` or `xl info | grep virt_caps` should show `hvm`).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Architecture overview
|
||||||
|
|
||||||
|
```text
|
||||||
|
XEN Host (Gentoo / any Linux, Intel VT-x)
|
||||||
|
│
|
||||||
|
└── HVM Guest: macos-sierra
|
||||||
|
│
|
||||||
|
├── OVMF (UEFI firmware) ← provided by XEN host, replaces BIOS
|
||||||
|
│ └── boots from EFI partition on disk
|
||||||
|
│
|
||||||
|
├── EFI disk / partition
|
||||||
|
│ └── Clover or OpenCore ← macOS-aware UEFI bootloader
|
||||||
|
│ ├── injects AppleSMC
|
||||||
|
│ ├── patches CPUID (Hackintosh-style)
|
||||||
|
│ ├── provides fake SMBios (Mac model)
|
||||||
|
│ └── chainloads macOS boot.efi
|
||||||
|
│
|
||||||
|
├── macOS installer disk (hdb) ← converted from .dmg
|
||||||
|
│
|
||||||
|
└── Target disk (hda) ← blank disk, macOS installs here
|
||||||
|
```
|
||||||
|
|
||||||
|
**Why OVMF + Clover/OC (not just OVMF alone):**
|
||||||
|
OVMF provides UEFI, but macOS additionally requires Apple-specific firmware tables (SMBios,
|
||||||
|
AppleSMC, NVRAM layout). Clover and OpenCore are bootloaders that inject these tables into the
|
||||||
|
EFI environment before handing off to macOS's `boot.efi`. Without them, macOS halts early with
|
||||||
|
a kernel panic or simply refuses to boot on non-Apple hardware signatures.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Bootloader choice — Clover vs OpenCore
|
||||||
|
|
||||||
|
### Clover (r5xxx)
|
||||||
|
|
||||||
|
- The original Hackintosh bootloader
|
||||||
|
- Loads from EFI partition; injects SMBios, AppleSMC, CPUID patches, kexts
|
||||||
|
- Mature ecosystem; many pre-made Sierra configs available
|
||||||
|
- Some quirks with NVRAM on OVMF; workaround: `EmuVariableUefi.efi` emulated NVRAM driver
|
||||||
|
- Active maintenance: [github.com/CloverHackyColor/CloverBootloader](https://github.com/CloverHackyColor/CloverBootloader)
|
||||||
|
|
||||||
|
### OpenCore (0.9+)
|
||||||
|
|
||||||
|
- Modern replacement for Clover; cleaner injection model
|
||||||
|
- Better NVRAM support with OVMF (uses `OpenVariableRuntimeDxe.efi` or OVMF's native NVRAM)
|
||||||
|
- Stricter config validation (`ocvalidate` catches errors before boot)
|
||||||
|
- Supports Sierra with minor adjustments (`MinVersion` quirks)
|
||||||
|
- Preferred for new setups
|
||||||
|
- Guide: [dortania.github.io/OpenCore-Install-Guide](https://dortania.github.io/OpenCore-Install-Guide/)
|
||||||
|
|
||||||
|
### Recommendation for XEN + OVMF
|
||||||
|
|
||||||
|
**OpenCore** is recommended for new installations with OVMF on XEN — it handles OVMF's emulated
|
||||||
|
NVRAM better than Clover and has active maintenance for recent XEN versions. Clover remains viable
|
||||||
|
if you already have a working Clover config from a KVM/QEMU Hackintosh.
|
||||||
|
|
||||||
|
**"CloverNG"** — if this refers to the next-generation CloverBootloader (post-r5100 series from
|
||||||
|
CloverHackyColor), it is functionally equivalent to standard Clover from a XEN perspective.
|
||||||
|
If it refers to OpenCore, use the OpenCore path below.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Tools and packages
|
||||||
|
|
||||||
|
### On a Linux workstation (or the XEN dom0 / a Linux VM)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Debian/Ubuntu
|
||||||
|
apt install dmg2img qemu-utils p7zip-full
|
||||||
|
|
||||||
|
# Alpine
|
||||||
|
apk add dmg2img qemu-img p7zip
|
||||||
|
|
||||||
|
# macOS (if available — easiest for DMG handling)
|
||||||
|
# hdiutil is built in; no extra packages needed
|
||||||
|
```
|
||||||
|
|
||||||
|
| Tool | Purpose |
|
||||||
|
|------|---------|
|
||||||
|
| `dmg2img` | Convert Apple DMG to raw IMG on Linux |
|
||||||
|
| `qemu-img` | Create/convert virtual disk images (qcow2, raw) |
|
||||||
|
| `p7zip` / `7z` | Extract Clover or OpenCore zip archives |
|
||||||
|
| `hdiutil` | macOS native DMG tool (only if macOS workstation available) |
|
||||||
|
| `fdisk` / `gdisk` | Partition the installer image for EFI setup |
|
||||||
|
| `mtools` | Write files to FAT32 EFI partition without mounting as root |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. Step 1 — Convert .dmg to raw image
|
||||||
|
|
||||||
|
The `.dmg` from Apple (or third-party Hackintosh sources) must be converted to a flat raw image
|
||||||
|
that XEN can use as a virtual disk.
|
||||||
|
|
||||||
|
### Option A — Linux with `dmg2img`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
dmg2img -i "Install_macOS_Sierra_10.12.6.dmg" -o sierra_installer.img
|
||||||
|
# Output: sierra_installer.img (raw format)
|
||||||
|
```
|
||||||
|
|
||||||
|
If `dmg2img` fails (some DMG variants use encryption or non-standard compression):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Try 7zip extraction first
|
||||||
|
7z x "Install_macOS_Sierra_10.12.6.dmg" -o./sierra_extracted/
|
||||||
|
# Look for .img, .hfs, or BaseSystem files inside
|
||||||
|
```
|
||||||
|
|
||||||
|
### Option B — macOS workstation with `hdiutil`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
hdiutil convert "Install macOS Sierra.dmg" -format UDRW -o sierra_rw
|
||||||
|
mv sierra_rw.dmg sierra_installer.img
|
||||||
|
# UDRW = uncompressed read-write; directly usable as raw disk
|
||||||
|
```
|
||||||
|
|
||||||
|
### Verify the image
|
||||||
|
|
||||||
|
```bash
|
||||||
|
qemu-img info sierra_installer.img
|
||||||
|
# Should show: format=raw, virtual size ~5-8 GB for Sierra installer
|
||||||
|
file sierra_installer.img
|
||||||
|
# Should identify as: Apple disk image or DOS/GPT partition table
|
||||||
|
```
|
||||||
|
|
||||||
|
> **Note on EFI:** The user correctly identified that converting the DMG produces an EFI-based
|
||||||
|
> disk (GPT partition table with an EFI system partition). This is expected and correct for
|
||||||
|
> macOS Sierra. The installer image cannot be mounted as a simple CDROM/ISO — it must be
|
||||||
|
> presented as a virtual hard disk in HVM mode and booted via UEFI (OVMF). A traditional
|
||||||
|
> BIOS/MBR boot path does not exist for Sierra+.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. Step 2 — Create a bootable macOS installer disk
|
||||||
|
|
||||||
|
The raw `.img` from step 6 may be the full `Install macOS Sierra.app` disk, or it may be a
|
||||||
|
recovery-only image. Determine which you have:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Mount on Linux to inspect (requires HFS+ support):
|
||||||
|
apk add hfsprogs # or: apt install hfsprogs
|
||||||
|
mkdir /mnt/sierra_check
|
||||||
|
mount -t hfsplus -o ro sierra_installer.img /mnt/sierra_check
|
||||||
|
ls /mnt/sierra_check
|
||||||
|
# If you see "Install macOS Sierra.app" → full installer ✓
|
||||||
|
# If you see "BaseSystem.dmg" only → recovery image; need to extract BaseSystem
|
||||||
|
```
|
||||||
|
|
||||||
|
### If the image is a full installer (preferred)
|
||||||
|
|
||||||
|
Convert to qcow2 for efficient sparse storage:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
qemu-img convert -f raw -O qcow2 sierra_installer.img sierra_installer.qcow2
|
||||||
|
```
|
||||||
|
|
||||||
|
This image becomes `hdb` (the installer disk) in the XEN config.
|
||||||
|
|
||||||
|
### If only BaseSystem.dmg is present (recovery path)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Extract BaseSystem from the installer structure:
|
||||||
|
# On macOS:
|
||||||
|
cd /Applications/Install\ macOS\ Sierra.app/Contents/SharedSupport/
|
||||||
|
# Copy InstallESD.dmg and BaseSystem.dmg
|
||||||
|
|
||||||
|
# On Linux: extract from the converted DMG
|
||||||
|
7z x sierra_installer.img InstallESD.dmg
|
||||||
|
dmg2img InstallESD.dmg installesd.img
|
||||||
|
# Mount installesd.img and copy BaseSystem.dmg out
|
||||||
|
```
|
||||||
|
|
||||||
|
The recovery path produces a minimal boot environment sufficient to run the macOS installer,
|
||||||
|
but internet access or a local macOS packages cache may be needed.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. Step 3 — Prepare the target installation disk
|
||||||
|
|
||||||
|
Create a blank virtual disk that macOS will install onto:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 60 GB target disk (minimum 40 GB; 60 GB gives comfortable headroom)
|
||||||
|
qemu-img create -f qcow2 macos_sierra_target.qcow2 60G
|
||||||
|
```
|
||||||
|
|
||||||
|
This disk starts blank. macOS Disk Utility (during installation) will partition and format it
|
||||||
|
as GPT + HFS+.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 9. Step 4 — Obtain and configure Clover or OpenCore EFI
|
||||||
|
|
||||||
|
### Option A — OpenCore (recommended)
|
||||||
|
|
||||||
|
Download the latest OpenCore release from:
|
||||||
|
[github.com/acidanthera/OpenCorePkg/releases](https://github.com/acidanthera/OpenCorePkg/releases)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdir opencore_efi && cd opencore_efi
|
||||||
|
wget https://github.com/acidanthera/OpenCorePkg/releases/download/0.9.x/OpenCore-0.9.x-RELEASE.zip
|
||||||
|
unzip OpenCore-0.9.x-RELEASE.zip
|
||||||
|
```
|
||||||
|
|
||||||
|
**Minimum EFI structure for Sierra on XEN/QEMU:**
|
||||||
|
|
||||||
|
```
|
||||||
|
EFI/
|
||||||
|
BOOT/
|
||||||
|
BOOTx64.efi ← OpenCore main loader
|
||||||
|
OC/
|
||||||
|
OpenCore.efi
|
||||||
|
config.plist ← main configuration
|
||||||
|
ACPI/ ← DSDT/SSDT patches (may be empty for VM)
|
||||||
|
Drivers/
|
||||||
|
OpenRuntime.efi ← required
|
||||||
|
ResetNvramEntry.efi
|
||||||
|
Kexts/
|
||||||
|
Lilu.kext ← required base
|
||||||
|
VirtualSMC.kext ← AppleSMC emulation (replaces hardware SMC)
|
||||||
|
WhateverGreen.kext ← GPU fixes (optional for headless)
|
||||||
|
IntelMausi.kext ← for e1000 NIC (or use AppleIGB)
|
||||||
|
Tools/
|
||||||
|
OpenShell.efi ← useful for debugging
|
||||||
|
```
|
||||||
|
|
||||||
|
**Key `config.plist` settings for XEN:**
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<!-- Kernel → Quirks -->
|
||||||
|
<key>DisableIoMapper</key><true/>
|
||||||
|
<key>XhciPortLimit</key><true/>
|
||||||
|
|
||||||
|
<!-- Misc → Security -->
|
||||||
|
<key>ScanPolicy</key><integer>0</integer>
|
||||||
|
|
||||||
|
<!-- NVRAM → Add → 7C436110-... -->
|
||||||
|
<key>boot-args</key>
|
||||||
|
<string>-v keepsyms=1 debug=0x100</string> <!-- verbose boot for debugging -->
|
||||||
|
|
||||||
|
<!-- PlatformInfo → Generic -->
|
||||||
|
<!-- Use MacPro6,1 or iMac17,1 SMBIOS for Sierra compatibility -->
|
||||||
|
<key>SystemProductName</key><string>iMac17,1</string>
|
||||||
|
```
|
||||||
|
|
||||||
|
Generate `MLB`, `ROM`, `SystemSerialNumber`, `SystemUUID` using `macserial` (from OpenCore tools)
|
||||||
|
or GenSMBIOS. Use random/generated values — do not reuse real Apple serial numbers.
|
||||||
|
|
||||||
|
### Option B — Clover (r5xxx)
|
||||||
|
|
||||||
|
Download from:
|
||||||
|
[github.com/CloverHackyColor/CloverBootloader/releases](https://github.com/CloverHackyColor/CloverBootloader/releases)
|
||||||
|
|
||||||
|
**Minimum EFI structure:**
|
||||||
|
|
||||||
|
```
|
||||||
|
EFI/
|
||||||
|
BOOT/
|
||||||
|
BOOTX64.efi
|
||||||
|
CLOVER/
|
||||||
|
CLOVERX64.efi
|
||||||
|
config.plist
|
||||||
|
drivers/
|
||||||
|
UEFI/
|
||||||
|
ApfsDriverLoader.efi ← for APFS if upgrading later
|
||||||
|
AptioMemoryFix.efi ← NVRAM fix for OVMF
|
||||||
|
EmuVariableUefi.efi ← emulated NVRAM (important for XEN/OVMF)
|
||||||
|
FSInject.efi
|
||||||
|
HFSPlus.efi ← HFS+ filesystem driver
|
||||||
|
kexts/
|
||||||
|
Other/
|
||||||
|
Lilu.kext
|
||||||
|
VirtualSMC.kext ← or FakeSMC.kext (older alternative)
|
||||||
|
IntelMausi.kext
|
||||||
|
```
|
||||||
|
|
||||||
|
**Key `config.plist` settings for XEN/OVMF:**
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<key>RtVariables</key>
|
||||||
|
<dict>
|
||||||
|
<key>LogEveryBoot</key><string>10</string>
|
||||||
|
<key>MountEFI</key><string>Yes</string>
|
||||||
|
</dict>
|
||||||
|
|
||||||
|
<key>SMBIOS</key>
|
||||||
|
<dict>
|
||||||
|
<key>ProductName</key><string>iMac17,1</string>
|
||||||
|
<!-- Generate BoardSerialNumber, SerialNumber, SmUUID with Clover Configurator -->
|
||||||
|
</dict>
|
||||||
|
|
||||||
|
<!-- Boot → Arguments -->
|
||||||
|
<key>Arguments</key><string>-v dart=0 debug=0x100 keepsyms=1</string>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Embed EFI into installer disk
|
||||||
|
|
||||||
|
The Clover/OC EFI files need to be on the **EFI system partition (ESP)** of the installer disk
|
||||||
|
or on a separate small EFI disk image.
|
||||||
|
|
||||||
|
**Recommended: separate EFI disk (simplest for XEN)**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Create a small FAT32 EFI disk
|
||||||
|
dd if=/dev/zero of=efi_boot.img bs=1M count=200
|
||||||
|
parted efi_boot.img mklabel gpt
|
||||||
|
parted efi_boot.img mkpart EFI fat32 1MiB 199MiB
|
||||||
|
parted efi_boot.img set 1 esp on
|
||||||
|
|
||||||
|
# Format the FAT32 partition (offset 1MiB = sector 2048)
|
||||||
|
mkfs.fat -F32 -n EFI \
|
||||||
|
--offset 2048 \ # 1MiB in 512-byte sectors
|
||||||
|
efi_boot.img # note: loopback mount preferred
|
||||||
|
|
||||||
|
# Mount and copy EFI files
|
||||||
|
losetup -P /dev/loop0 efi_boot.img
|
||||||
|
mkfs.fat -F32 /dev/loop0p1
|
||||||
|
mount /dev/loop0p1 /mnt/efi
|
||||||
|
cp -r EFI/ /mnt/efi/
|
||||||
|
umount /mnt/efi
|
||||||
|
losetup -d /dev/loop0
|
||||||
|
```
|
||||||
|
|
||||||
|
This `efi_boot.img` becomes `hdc` (or `hda` — first boot device) in the XEN config.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 10. Step 5 — XEN HVM domain configuration
|
||||||
|
|
||||||
|
Create `/etc/xen/macos-sierra.cfg`:
|
||||||
|
|
||||||
|
```python
|
||||||
|
# macOS Sierra 10.12 — XEN HVM config
|
||||||
|
# REQUIRES HVM HOST CAPABILITY (Intel VT-x)
|
||||||
|
|
||||||
|
type = "hvm"
|
||||||
|
name = "macos-sierra"
|
||||||
|
memory = 4096 # 4 GB minimum; 8 GB recommended
|
||||||
|
vcpus = 2
|
||||||
|
maxvcpus= 2
|
||||||
|
firmware = "ovmf" # UEFI; critical — do NOT use "bios"
|
||||||
|
|
||||||
|
# Disk layout:
|
||||||
|
# hda = EFI bootloader disk (boots first via OVMF)
|
||||||
|
# hdb = macOS installer image (from §7)
|
||||||
|
# hdc = blank target disk (from §8)
|
||||||
|
disk = [
|
||||||
|
'file:/path/to/efi_boot.img,hda,w',
|
||||||
|
'file:/path/to/sierra_installer.qcow2,hdb,r',
|
||||||
|
'file:/path/to/macos_sierra_target.qcow2,hdc,w',
|
||||||
|
]
|
||||||
|
|
||||||
|
# Network: e1000 emulates Intel 82540EM — supported by macOS Intel kext
|
||||||
|
vif = ['type=ioemu,model=e1000']
|
||||||
|
|
||||||
|
# USB tablet for mouse (avoids mouse capture issues in VNC)
|
||||||
|
usbdevice = 'tablet'
|
||||||
|
|
||||||
|
# VNC console (required for visual install)
|
||||||
|
vnc = 1
|
||||||
|
vnclisten = "127.0.0.1"
|
||||||
|
vncpasswd = ""
|
||||||
|
vncunused = 1 # picks next free port starting at 5900
|
||||||
|
|
||||||
|
# Serial console (helpful for kernel panic debug)
|
||||||
|
serial = "pty"
|
||||||
|
|
||||||
|
# QEMU extra device args (AppleSMC + display)
|
||||||
|
device_model_args = [
|
||||||
|
# AppleSMC — macOS kernel checks for this device; OSK must be set (see §11)
|
||||||
|
"-device", "applesmc,osk=<REPLACE_WITH_OSK>",
|
||||||
|
# Cirrus VGA (simplest; QXL or VirtIO may not work during macOS install)
|
||||||
|
"-vga", "cirrus",
|
||||||
|
# Sound (optional; macOS may probe for it)
|
||||||
|
"-device", "ich9-intel-hda",
|
||||||
|
"-device", "hda-duplex",
|
||||||
|
]
|
||||||
|
|
||||||
|
# CPUID masking — hide hypervisor bit from macOS (see §12)
|
||||||
|
cpuid = [
|
||||||
|
"0x80000001:ecx=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0",
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
|
> **On `firmware = "ovmf"`:** XEN must have the OVMF binary available. The path is typically
|
||||||
|
> `/usr/share/ovmf/OVMF.fd` or `/usr/share/qemu/OVMF.fd`. If XEN doesn't find it, it falls back
|
||||||
|
> to the legacy BIOS hvmloader — check with Anton that OVMF is installed on the host.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 11. Step 6 — AppleSMC and the OSK key
|
||||||
|
|
||||||
|
The Apple System Management Controller (SMC) is a coprocessor present in all Apple hardware.
|
||||||
|
macOS checks for its presence during boot. QEMU (used as XEN's HVM device model) can emulate
|
||||||
|
an SMC with:
|
||||||
|
|
||||||
|
```
|
||||||
|
-device applesmc,osk=<128-char-hex-string>
|
||||||
|
```
|
||||||
|
|
||||||
|
The OSK (Output Signal Key) is a 64-byte string specific to Apple hardware. It is technically
|
||||||
|
part of Apple's proprietary firmware but is widely documented in the Hackintosh community.
|
||||||
|
|
||||||
|
**How to obtain the OSK:**
|
||||||
|
- From a physical Mac: run an AppleSMC reader tool (e.g. `smcutil`)
|
||||||
|
- From the Hackintosh community: the OSK for common boards is documented; search for
|
||||||
|
"QEMU macOS applesmc osk" — the value is the same across all OSK-based macOS versions
|
||||||
|
- The OSK is 64 bytes (128 hex characters) passed to `-device applesmc,osk=...`
|
||||||
|
|
||||||
|
> **Do not confuse** the OSK with Apple serial numbers. The OSK is a fixed hardware key, not
|
||||||
|
> a device identifier. It does not uniquely identify a machine.
|
||||||
|
|
||||||
|
**VirtualSMC vs hardware applesmc:**
|
||||||
|
If using OpenCore with `VirtualSMC.kext`, the kext handles SMC emulation in software and
|
||||||
|
the `applesmc` QEMU device may not be strictly required. However, including both is safe
|
||||||
|
and the hardware device takes precedence. For Clover with `FakeSMC.kext`, the kext similarly
|
||||||
|
provides SMC emulation.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 12. Step 7 — CPUID masking
|
||||||
|
|
||||||
|
macOS detects hypervisors via the `HYPERVISOR` CPUID bit and may behave differently or refuse
|
||||||
|
to boot. Additionally, XEN presents XEN-specific CPU topology that can confuse macOS.
|
||||||
|
|
||||||
|
**Mask the hypervisor bit (XL config):**
|
||||||
|
|
||||||
|
```python
|
||||||
|
# Hide bit 31 of CPUID leaf 0x80000001 ECX (hypervisor presence)
|
||||||
|
cpuid = [
|
||||||
|
"0x80000001:ecx=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0",
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
|
**Set a clean CPU vendor string (optional but recommended):**
|
||||||
|
|
||||||
|
```python
|
||||||
|
# Present as plain Intel, not XEN-modified
|
||||||
|
device_model_args = [
|
||||||
|
...,
|
||||||
|
"-cpu", "host,vendor=GenuineIntel,+sse4.1,+sse4.2,-hypervisor,kvm=off",
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
|
**CPU topology (macOS prefers 1 socket × N cores):**
|
||||||
|
|
||||||
|
```python
|
||||||
|
# In XL config
|
||||||
|
vcpus = 2
|
||||||
|
cores_per_socket = 2
|
||||||
|
threads_per_core = 1
|
||||||
|
# Results in: 1 socket, 2 cores, 1 thread → macOS shows "2-Core Intel Core i7"
|
||||||
|
```
|
||||||
|
|
||||||
|
`-hypervisor` removes the CPUID hypervisor bit at the QEMU level; the XL `cpuid` directive
|
||||||
|
masks it at the XEN level. Apply both for robustness.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 13. Step 8 — Run the installer
|
||||||
|
|
||||||
|
### Start the VM
|
||||||
|
|
||||||
|
```bash
|
||||||
|
xl create /etc/xen/macos-sierra.cfg
|
||||||
|
# Check it started:
|
||||||
|
xl list
|
||||||
|
# Connect to VNC console:
|
||||||
|
# Port = 5900 + vnc display number (check xl list or /var/log/xen/)
|
||||||
|
vncviewer 127.0.0.1:5900
|
||||||
|
```
|
||||||
|
|
||||||
|
### Boot sequence
|
||||||
|
|
||||||
|
1. OVMF loads → shows TianoCore logo briefly
|
||||||
|
2. OVMF detects the EFI partition on `hda` → loads `BOOTx64.efi` (Clover or OC)
|
||||||
|
3. Bootloader screen appears — select "Install macOS Sierra" or "Boot macOS Install from ..."
|
||||||
|
4. macOS boot sequence (verbose if `-v` set) — expect ~5–10 minutes for kernel load on first boot
|
||||||
|
5. macOS installer GUI appears (language selection)
|
||||||
|
|
||||||
|
### Installation steps
|
||||||
|
|
||||||
|
1. **Language selection** → proceed
|
||||||
|
2. **Disk Utility** → select `hdc` (target, ~60 GB) → Erase → Format: **Mac OS Extended (Journaled)**, scheme: **GUID Partition Map** → name it (e.g. "Macintosh HD")
|
||||||
|
3. Back to installer → Install macOS → select "Macintosh HD"
|
||||||
|
4. Installation runs (~30–60 min); VM will restart several times automatically — each time it should boot back to the installer progress screen
|
||||||
|
5. Final restart → macOS Setup Assistant (user account, locale, etc.)
|
||||||
|
|
||||||
|
> **If the VM reboots but boots the installer again** instead of the installed disk: the EFI boot
|
||||||
|
> order has not changed. In the bootloader menu, manually select the installed disk. After install
|
||||||
|
> completes, update the bootloader config to default-boot the target disk.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 14. Step 9 — Post-install: Clover/OC on target disk
|
||||||
|
|
||||||
|
After installation, the target disk (`hdc`) has macOS installed but no bootloader. Move the EFI
|
||||||
|
setup to the target disk so it boots independently.
|
||||||
|
|
||||||
|
### Mount the EFI partition of the target disk
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# On Linux with the VM shut down:
|
||||||
|
losetup -P /dev/loop1 macos_sierra_target.qcow2 # may need qemu-nbd for qcow2
|
||||||
|
# or: qemu-nbd --connect=/dev/nbd0 macos_sierra_target.qcow2
|
||||||
|
mount /dev/loop1p1 /mnt/target_efi # p1 = EFI partition
|
||||||
|
```
|
||||||
|
|
||||||
|
### Copy the EFI bootloader
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cp -r /mnt/efi/EFI/ /mnt/target_efi/
|
||||||
|
umount /mnt/target_efi
|
||||||
|
```
|
||||||
|
|
||||||
|
### Update XL config to boot from target disk only
|
||||||
|
|
||||||
|
```python
|
||||||
|
# Final production config — no installer disk needed
|
||||||
|
disk = [
|
||||||
|
'file:/path/to/macos_sierra_target.qcow2,hda,w',
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
|
OVMF will now boot from the EFI partition on the target disk → Clover/OC → macOS Sierra.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 15. Networking in the guest
|
||||||
|
|
||||||
|
XEN HVM with `model=e1000` emulates the Intel 82540EM NIC. macOS Sierra includes built-in
|
||||||
|
drivers for this chipset (`AppleIntelE1000e.kext` or loaded via `IntelMausi.kext`).
|
||||||
|
|
||||||
|
**Expected:** Ethernet appears automatically in System Preferences → Network after install.
|
||||||
|
|
||||||
|
**DHCP:** Works out of the box if the XEN virtual network bridge provides DHCP (standard
|
||||||
|
XEN networking with `xenbr0` and the host running dnsmasq).
|
||||||
|
|
||||||
|
**Static IP:** Set in macOS Network preferences if needed.
|
||||||
|
|
||||||
|
**No internet to iCloud/App Store:** macOS will detect non-Apple hardware signatures (unless
|
||||||
|
correct SMBIOS + serial number is configured) and refuse App Store login. For pure testing
|
||||||
|
purposes, network access to local services and `apps.f0xx.org` should work fine without this.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 16. Known issues and limitations
|
||||||
|
|
||||||
|
| Issue | Cause | Workaround / Status |
|
||||||
|
|-------|-------|---------------------|
|
||||||
|
| No GPU acceleration | Cirrus VGA is 2D only; Metal requires real GPU or PCIe passthrough | Use headless or accept software rendering; Cirrus sufficient for testing |
|
||||||
|
| Kernel panic on boot | Missing SMC, bad CPUID, wrong SMBIOS | Check §11–§12; add `-v` to boot args for verbose panic |
|
||||||
|
| NVRAM not persisting | OVMF emulated NVRAM resets on shutdown | Use `EmuVariableUefi.efi` (Clover) or `OpenVariableRuntimeDxe.efi` (OC); or save NVRAM to file |
|
||||||
|
| USB mouse/keyboard lost | USB tablet works but real USB may need passthrough | `usbdevice = 'tablet'` in XL config handles mouse; keyboard via VNC |
|
||||||
|
| macOS updates may break boot | OTA updates overwrite `boot.efi` and may change kext requirements | Snapshot before updating; keep bootloader kexts updated |
|
||||||
|
| iCloud / App Store blocked | Missing/wrong Apple serial; Apple server check | Expected for VM use; not needed for testing/dev purposes |
|
||||||
|
| Very slow boot (> 15 min) | QEMU Cirrus VGA rendering overhead; slow disk emulation | Use `qcow2` with preallocation or raw disk; increase memory |
|
||||||
|
| Stuck at "2 minutes remaining" | Common Sierra installer bug | Wait; may take 15+ min; do not power off |
|
||||||
|
| HVM slot unavailability | Anton's XEN host may limit HVM guest count | Coordinate with Anton; confirm `xl info | grep hvm` shows `hvm=1` |
|
||||||
|
| Sound/audio | ICH9-HDA device available but macOS may not auto-configure | Install `VoodooHDA.kext` if audio needed |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 17. Troubleshooting
|
||||||
|
|
||||||
|
### VM fails to start
|
||||||
|
|
||||||
|
```bash
|
||||||
|
xl create -c /etc/xen/macos-sierra.cfg
|
||||||
|
# -c attaches console immediately; shows QEMU startup errors
|
||||||
|
```
|
||||||
|
|
||||||
|
Check: does `xl info | grep hvm` show `hvm=1`? If not, VT-x is not available or enabled.
|
||||||
|
|
||||||
|
### Bootloader screen never appears (OVMF logo then black)
|
||||||
|
|
||||||
|
- OVMF did not find a bootable EFI on `hda`
|
||||||
|
- Verify: `efi_boot.img` has a valid GPT ESP partition with `EFI/BOOT/BOOTx64.efi`
|
||||||
|
- In OVMF shell (press `F2` or `Esc` during TianoCore logo): run `Shell → fs0: → dir EFI`
|
||||||
|
|
||||||
|
### macOS installer kernel panic immediately
|
||||||
|
|
||||||
|
- Check AppleSMC OSK is set correctly (non-empty, correct length)
|
||||||
|
- Add `-v -x` (verbose + safe mode) to boot args
|
||||||
|
- Check CPUID masking (§12) — remove it and try without; then add back
|
||||||
|
|
||||||
|
### Installer runs but network is unavailable
|
||||||
|
|
||||||
|
- Verify XEN `vif` is correct and `xenbr0` is up on host: `ip link show xenbr0`
|
||||||
|
- Check macOS System Preferences → Network for the Ethernet adapter
|
||||||
|
- Install `IntelMausi.kext` if the NIC is not recognized
|
||||||
|
|
||||||
|
### VM reboots after install but shows installer again
|
||||||
|
|
||||||
|
- OVMF boot order still prefers `hda` (EFI boot disk) over the installed `hdc`
|
||||||
|
- In bootloader menu: manually select the installed macOS disk
|
||||||
|
- After booting successfully once: update bootloader config default entry
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 18. Comparison: Clover vs OpenCore for XEN
|
||||||
|
|
||||||
|
| Aspect | Clover (r5xxx) | OpenCore (0.9+) |
|
||||||
|
|--------|---------------|----------------|
|
||||||
|
| NVRAM on OVMF | Requires `EmuVariableUefi.efi` | Native OVMF NVRAM support; more reliable |
|
||||||
|
| Sierra support | Excellent; many Sierra configs available | Good; needs `MinVersion`/`MaxVersion` quirks |
|
||||||
|
| QEMU/XEN compatibility | Mature; known-good with QEMU 5+ | Excellent; actively tested on QEMU/KVM/XEN |
|
||||||
|
| Config validation | Manual; errors only visible at boot | `ocvalidate` CLI tool catches errors before boot |
|
||||||
|
| Kext injection | Flexible; some ordering quirks | Strict ordering; predictable |
|
||||||
|
| Long-term maintenance | Slower; fewer active contributors | Active; new releases regularly |
|
||||||
|
| Community resources for XEN | Fewer specific guides | Growing; Docker-OSX project uses OC on KVM (close to XEN) |
|
||||||
|
| Recommended for new install | Only if migrating existing config | **Yes** |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 19. References
|
||||||
|
|
||||||
|
| Resource | URL / note |
|
||||||
|
|----------|-----------|
|
||||||
|
| OpenCore Install Guide | https://dortania.github.io/OpenCore-Install-Guide/ |
|
||||||
|
| OpenCore Legacy Patcher | https://dortania.github.io/OpenCore-Legacy-Patcher/ (Sierra section) |
|
||||||
|
| CloverBootloader releases | https://github.com/CloverHackyColor/CloverBootloader |
|
||||||
|
| Docker-OSX (KVM/QEMU reference) | https://github.com/sickcodes/Docker-OSX — useful architecture reference even for XEN |
|
||||||
|
| VirtualSMC kext | https://github.com/acidanthera/VirtualSMC |
|
||||||
|
| Lilu kext | https://github.com/acidanthera/Lilu |
|
||||||
|
| IntelMausi NIC kext | https://github.com/acidanthera/IntelMausi |
|
||||||
|
| QEMU applesmc documentation | `man qemu-system-x86_64`; search `-device applesmc` |
|
||||||
|
| XEN HVM OVMF setup | https://wiki.xenproject.org/wiki/OVMF |
|
||||||
|
| GenSMBIOS (serial generation) | https://github.com/corpnewt/GenSMBIOS |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 20. Changelog
|
||||||
|
|
||||||
|
| Rev | Date | Change |
|
||||||
|
|-----|------|--------|
|
||||||
|
| R0 | 2026-06-26 | Initial guide — HVM+OVMF+OpenCore path; Clover alternative; known issues |
|
||||||
879
Installing_MacOS_Sierra_10.12_as_XEN_guest.pdf
Normal file
879
Installing_MacOS_Sierra_10.12_as_XEN_guest.pdf
Normal file
@@ -0,0 +1,879 @@
|
|||||||
|
%PDF-1.4
|
||||||
|
%“Œ‹ž ReportLab Generated PDF document (opensource)
|
||||||
|
1 0 obj
|
||||||
|
<<
|
||||||
|
/F1 2 0 R /F2 3 0 R /F3 50 0 R /F4 51 0 R /F5 52 0 R /F6 53 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
2 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
3 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
4 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 45.68504 762.0394 183.077 773.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
5 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 59.68504 751.6019 161.4 761.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
6 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 59.68504 741.6019 175.9725 751.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
7 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 59.68504 731.6019 158.0625 741.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
8 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 45.68504 721.0394 207.509 732.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
9 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 45.68504 710.0394 131.045 721.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
10 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 45.68504 699.0394 203.525 710.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
11 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 59.68504 688.6019 106.35 698.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
12 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 59.68504 678.6019 116.1675 688.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
13 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 59.68504 668.6019 177.015 678.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
14 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 45.68504 658.0394 126.173 669.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
15 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 59.68504 647.6019 244.3425 657.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
16 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 45.68504 637.0394 186.189 648.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
17 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 59.68504 626.6019 166.8075 636.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
18 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 59.68504 616.6019 202.65 626.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
19 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 59.68504 606.6019 113.8725 616.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
20 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 45.68504 596.0394 228.877 607.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
21 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 59.68504 585.6019 189.7275 595.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
22 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 59.68504 575.6019 227.6625 585.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
23 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 45.68504 565.0394 211.101 576.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
24 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 45.68504 554.0394 252.893 565.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
25 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 59.68504 543.6019 190.1475 553.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
26 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 59.68504 533.6019 147.2025 543.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
27 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 59.68504 523.6019 154.7175 533.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
28 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 45.68504 513.0394 207.533 524.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
29 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 45.68504 502.0394 195.541 513.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
30 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 45.68504 491.0394 151.501 502.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
31 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 45.68504 480.0394 152.405 491.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
32 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 59.68504 469.6019 101.37 479.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
33 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 59.68504 459.6019 109.7175 469.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
34 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 59.68504 449.6019 115.545 459.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
35 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 45.68504 439.0394 225.757 450.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
36 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 59.68504 428.6019 193.0875 438.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
37 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 59.68504 418.6019 140.9775 428.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
38 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 59.68504 408.6019 211.845 418.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
39 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 45.68504 398.0394 142.621 409.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
40 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 45.68504 387.0394 161.733 398.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
41 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 45.68504 376.0394 116.389 387.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
42 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 59.68504 365.6019 111.3675 375.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
43 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 59.68504 355.6019 251.85 365.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
44 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 59.68504 345.6019 197.22 355.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
45 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 59.68504 335.6019 190.9875 345.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
46 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 59.68504 325.6019 220.5825 335.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
47 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 45.68504 315.0394 209.293 326.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
48 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 45.68504 304.0394 99.93304 315.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
49 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 54 0 R /Fit ] /Rect [ 45.68504 293.0394 97.71704 304.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
50 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
51 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
52 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /ZapfDingbats /Name /F5 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
53 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Symbol /Name /F6 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
54 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 116 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 115 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
55 0 obj
|
||||||
|
<<
|
||||||
|
/Annots [ 4 0 R 5 0 R 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R
|
||||||
|
14 0 R 15 0 R 16 0 R 17 0 R 18 0 R 19 0 R 20 0 R 21 0 R 22 0 R 23 0 R
|
||||||
|
24 0 R 25 0 R 26 0 R 27 0 R 28 0 R 29 0 R 30 0 R 31 0 R 32 0 R 33 0 R
|
||||||
|
34 0 R 35 0 R 36 0 R 37 0 R 38 0 R 39 0 R 40 0 R 41 0 R 42 0 R 43 0 R
|
||||||
|
44 0 R 45 0 R 46 0 R 47 0 R 48 0 R 49 0 R ] /Contents 117 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 115 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0
|
||||||
|
/Trans <<
|
||||||
|
|
||||||
|
>> /Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
56 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 118 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 115 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
57 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 119 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 115 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
58 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 120 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 115 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
59 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 121 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 115 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
60 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 122 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 115 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
61 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 123 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 115 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
62 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 124 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 115 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
63 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 125 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 115 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
64 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 126 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 115 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
65 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 127 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 115 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
66 0 obj
|
||||||
|
<<
|
||||||
|
/Outlines 68 0 R /PageMode /UseNone /Pages 115 0 R /Type /Catalog
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
67 0 obj
|
||||||
|
<<
|
||||||
|
/Author (Android Cast project) /CreationDate (D:20260626184404+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260626184404+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
|
/Subject (\(unspecified\)) /Title (Installing macOS Sierra 10.12 as a XEN guest) /Trapped /False
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
68 0 obj
|
||||||
|
<<
|
||||||
|
/Count 55 /First 69 0 R /Last 114 0 R /Type /Outlines
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
69 0 obj
|
||||||
|
<<
|
||||||
|
/Count 3 /Dest [ 54 0 R /Fit ] /First 70 0 R /Last 72 0 R /Next 73 0 R /Parent 68 0 R
|
||||||
|
/Title (1. Prerequisites and host requirements)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
70 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 54 0 R /Fit ] /Next 71 0 R /Parent 69 0 R /Title (XEN host \(managed by Anton\))
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
71 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 54 0 R /Fit ] /Next 72 0 R /Parent 69 0 R /Prev 70 0 R /Title (Caller actions \(request from Anton\))
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
72 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 54 0 R /Fit ] /Parent 69 0 R /Prev 71 0 R /Title (Preparation materials needed)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
73 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 54 0 R /Fit ] /Next 74 0 R /Parent 68 0 R /Prev 69 0 R /Title (2. Critical constraint \204 HVM only, not paravirt)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
74 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 54 0 R /Fit ] /Next 75 0 R /Parent 68 0 R /Prev 73 0 R /Title (3. Architecture overview)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
75 0 obj
|
||||||
|
<<
|
||||||
|
/Count 3 /Dest [ 54 0 R /Fit ] /First 76 0 R /Last 78 0 R /Next 79 0 R /Parent 68 0 R
|
||||||
|
/Prev 74 0 R /Title (4. Bootloader choice \204 Clover vs OpenCore)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
76 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 54 0 R /Fit ] /Next 77 0 R /Parent 75 0 R /Title (Clover \(r5xxx\))
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
77 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 54 0 R /Fit ] /Next 78 0 R /Parent 75 0 R /Prev 76 0 R /Title (OpenCore \(0.9+\))
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
78 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 54 0 R /Fit ] /Parent 75 0 R /Prev 77 0 R /Title (Recommendation for XEN + OVMF)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
79 0 obj
|
||||||
|
<<
|
||||||
|
/Count 1 /Dest [ 54 0 R /Fit ] /First 80 0 R /Last 80 0 R /Next 81 0 R /Parent 68 0 R
|
||||||
|
/Prev 75 0 R /Title (5. Tools and packages)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
80 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 54 0 R /Fit ] /Parent 79 0 R /Title (On a Linux workstation \(or the XEN dom0 / a Linux VM\))
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
81 0 obj
|
||||||
|
<<
|
||||||
|
/Count 3 /Dest [ 54 0 R /Fit ] /First 82 0 R /Last 84 0 R /Next 85 0 R /Parent 68 0 R
|
||||||
|
/Prev 79 0 R /Title (6. Step 1 \204 Convert .dmg to raw image)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
82 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 54 0 R /Fit ] /Next 83 0 R /Parent 81 0 R /Title (Option A \204 Linux with dmg2img)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
83 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 54 0 R /Fit ] /Next 84 0 R /Parent 81 0 R /Prev 82 0 R /Title (Option B \204 macOS workstation with hdiutil)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
84 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 54 0 R /Fit ] /Parent 81 0 R /Prev 83 0 R /Title (Verify the image)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
85 0 obj
|
||||||
|
<<
|
||||||
|
/Count 2 /Dest [ 54 0 R /Fit ] /First 86 0 R /Last 87 0 R /Next 88 0 R /Parent 68 0 R
|
||||||
|
/Prev 81 0 R /Title (7. Step 2 \204 Create a bootable macOS installer disk)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
86 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 54 0 R /Fit ] /Next 87 0 R /Parent 85 0 R /Title (If the image is a full installer \(preferred\))
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
87 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 54 0 R /Fit ] /Parent 85 0 R /Prev 86 0 R /Title (If only BaseSystem.dmg is present \(recovery path\))
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
88 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 54 0 R /Fit ] /Next 89 0 R /Parent 68 0 R /Prev 85 0 R /Title (8. Step 3 \204 Prepare the target installation disk)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
89 0 obj
|
||||||
|
<<
|
||||||
|
/Count 3 /Dest [ 54 0 R /Fit ] /First 90 0 R /Last 92 0 R /Next 93 0 R /Parent 68 0 R
|
||||||
|
/Prev 88 0 R /Title (9. Step 4 \204 Obtain and configure Clover or OpenCore EFI)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
90 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 54 0 R /Fit ] /Next 91 0 R /Parent 89 0 R /Title (Option A \204 OpenCore \(recommended\))
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
91 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 54 0 R /Fit ] /Next 92 0 R /Parent 89 0 R /Prev 90 0 R /Title (Option B \204 Clover \(r5xxx\))
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
92 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 54 0 R /Fit ] /Parent 89 0 R /Prev 91 0 R /Title (Embed EFI into installer disk)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
93 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 54 0 R /Fit ] /Next 94 0 R /Parent 68 0 R /Prev 89 0 R /Title (10. Step 5 \204 XEN HVM domain configuration)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
94 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 54 0 R /Fit ] /Next 95 0 R /Parent 68 0 R /Prev 93 0 R /Title (11. Step 6 \204 AppleSMC and the OSK key)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
95 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 54 0 R /Fit ] /Next 96 0 R /Parent 68 0 R /Prev 94 0 R /Title (12. Step 7 \204 CPUID masking)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
96 0 obj
|
||||||
|
<<
|
||||||
|
/Count 3 /Dest [ 54 0 R /Fit ] /First 97 0 R /Last 99 0 R /Next 100 0 R /Parent 68 0 R
|
||||||
|
/Prev 95 0 R /Title (13. Step 8 \204 Run the installer)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
97 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 54 0 R /Fit ] /Next 98 0 R /Parent 96 0 R /Title (Start the VM)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
98 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 54 0 R /Fit ] /Next 99 0 R /Parent 96 0 R /Prev 97 0 R /Title (Boot sequence)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
99 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 54 0 R /Fit ] /Parent 96 0 R /Prev 98 0 R /Title (Installation steps)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
100 0 obj
|
||||||
|
<<
|
||||||
|
/Count 3 /Dest [ 54 0 R /Fit ] /First 101 0 R /Last 103 0 R /Next 104 0 R /Parent 68 0 R
|
||||||
|
/Prev 96 0 R /Title (14. Step 9 \204 Post-install: Clover/OC on target disk)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
101 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 54 0 R /Fit ] /Next 102 0 R /Parent 100 0 R /Title (Mount the EFI partition of the target disk)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
102 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 54 0 R /Fit ] /Next 103 0 R /Parent 100 0 R /Prev 101 0 R /Title (Copy the EFI bootloader)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
103 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 54 0 R /Fit ] /Parent 100 0 R /Prev 102 0 R /Title (Update XL config to boot from target disk only)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
104 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 54 0 R /Fit ] /Next 105 0 R /Parent 68 0 R /Prev 100 0 R /Title (15. Networking in the guest)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
105 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 54 0 R /Fit ] /Next 106 0 R /Parent 68 0 R /Prev 104 0 R /Title (16. Known issues and limitations)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
106 0 obj
|
||||||
|
<<
|
||||||
|
/Count 5 /Dest [ 54 0 R /Fit ] /First 107 0 R /Last 111 0 R /Next 112 0 R /Parent 68 0 R
|
||||||
|
/Prev 105 0 R /Title (17. Troubleshooting)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
107 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 54 0 R /Fit ] /Next 108 0 R /Parent 106 0 R /Title (VM fails to start)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
108 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 54 0 R /Fit ] /Next 109 0 R /Parent 106 0 R /Prev 107 0 R /Title (Bootloader screen never appears \(OVMF logo then black\))
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
109 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 54 0 R /Fit ] /Next 110 0 R /Parent 106 0 R /Prev 108 0 R /Title (macOS installer kernel panic immediately)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
110 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 54 0 R /Fit ] /Next 111 0 R /Parent 106 0 R /Prev 109 0 R /Title (Installer runs but network is unavailable)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
111 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 54 0 R /Fit ] /Parent 106 0 R /Prev 110 0 R /Title (VM reboots after install but shows installer again)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
112 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 54 0 R /Fit ] /Next 113 0 R /Parent 68 0 R /Prev 106 0 R /Title (18. Comparison: Clover vs OpenCore for XEN)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
113 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 54 0 R /Fit ] /Next 114 0 R /Parent 68 0 R /Prev 112 0 R /Title (19. References)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
114 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 54 0 R /Fit ] /Parent 68 0 R /Prev 113 0 R /Title (20. Changelog)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
115 0 obj
|
||||||
|
<<
|
||||||
|
/Count 12 /Kids [ 54 0 R 55 0 R 56 0 R 57 0 R 58 0 R 59 0 R 60 0 R 61 0 R 62 0 R 63 0 R
|
||||||
|
64 0 R 65 0 R ] /Type /Pages
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
116 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 931
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gat=*9lJ`N&A@Zck*SPGZa8L!><SfsP.#*=-!4"T\QH'I8&hF78]8C4Y)2[=_:Zh\(#F@WhTX8!K0[\6`V4H\nC<<;>6JKpcN-&bi;\BJJ+Rr<T-q/ldM8"!;Mn;kis'/)$$DX\*$C7hWH*P<_*!a>/k1R/G@hQa94NPS$>Y5JCVZ]518Uf"pLeI=,L5j&MSaT=b@(0#JOufh1]X>i#R`Bni6TY2/Cll*cbY)5rrU27%O:es4SrY^,bgGR.!cN"]s_K66u7RPojD[6#ckVAf'gr"[sI#ploIbqFUFK)YgW&aP3SD*dYeUg64r@[6?`<XFNl,!=A$SVqjk2.>F6WDZUYif$"JT_29[]^VgZ]DN:&bp$:56i[7&F&bhaeel8Yt0KpNnEF\W932fDQ+%,<%nf`+BP?96iAUrBBX5-hJQMJVpB<4iZ_1cq'r.$/D*neC6L+Bn(HEuf,@U;I`2p+V;FK3.C:2+`/iEWUBR-S\lNK/gq1H@<<o_!;Z3#5==1&$msHNse1'Rs%>&K>VZ!l6&#`@2@qkX50Op\,f'e*)ek0Z9u)@*/7gOq%$aXZZ$s\LH%!C;D/:MnA$F3TZD$,UK10`?`.%i_UUun[b%V/j@rEkdtk<V1o`P(l8@K.%amb7<Yjhej/rgRNfoG5XZ/9sPIsto$muNp0QCEp3m6H80kIuq3/OET(YJHXqn(%Wf>B)Z?b<IKW:=fJFM5&JSSqOl]Go(elfi2$C+V449/t[=iMZLaNJPal(M886X\X.QaF]K/gp*sWUAYtGUtDF7%GH&$CBnWF%M7=(V7snu1-;#U[qLKd)Bc6#W!5Xi#h_Ja$GdYe?6PgC_Pud7asn"Eeb79>DYKpup$pD)-rCV6/s_\F;&n!-`U1(`\ih6%HZq%fKYrUd4;XA-!mrTSi%m3r/$_Vk^uujnPHa'~>endstream
|
||||||
|
endobj
|
||||||
|
117 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1797
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gau10>uTK;'Sc)P($C`tGE(_QoF=cdA_NAd8XWm=_^MsVBOa]7,Qml:4gLVpg9O[de6rPB@!Wk9^$"Dj"@E#/h<2'E31Ie,"T]7PF:KQ&&t$CgoBFZS,;MBLUd8%W@01_G#@T_enFuFm6!-Np)FG'sZ7mpSaO=ge&5\90r'/:U$jg@r@#ScT&OeUpnW_=6#'(3M'SZph?buAAR/UN(s+;Ch`QuC;`/jfb"H)UV8Jdp#n51pZ^:%9f__b1e_,>"Mh=hV!*0J[eO[oONOD_%<qp0PS-04oCrh7BB4`73k$Wb)["/j",EVmlZ-h3*NVKL,td*ck^1d]m^0Z9G2fc5MWqo-FI>>msB'K";n`G)G?0NPI$JVK,2aX@L(XLR48Xf[Vk;3VGN]I:q]n!aVS;/cF:+UqQ1H`i;0?<I!>MZYq=jUq`'RT<k)h(s3"fu(!:ZI)<;rCMejJ28WK/STo:.[Q<bXO#8'[Qnf8iG-WU==WG5<ZDVCXMT;g<-J-5puipalig\a3J-Y1,=<<,?99<@IM"cK;E!1tWkP:k;Lr[QYMnbYEoDP4B"l3H"u)=JmecOCQ7Hd&%W+0u%OZMp9E\1:cUI^:%oTO:knA,bN0uCnen(bB9aE,YkADVA-Pr\p;O%E)D:faKk_i">'XE:_C)12&./EqV_=T`Q7>F5nYNRTCV`i[o7W+NBBG#.u%RfBe&=rJ^%5"cd^H:).DHZM\nCiFGoLjC\")P^9K]RGfkpZ'JUO8/#1rr3B*2oh$)><E77I.;!EOb\b5fNE=JZq,(n@9NEcMu&uE9n)hDsM][lh5S*fUOD0.[NIqF74L"fY\TWm!>E9CUui#;T.#-/d8aIQ$1erYd'Um'4_mU3p'm2k.!Y<IY2*8:(:22B""]*$c;Fqe&W?_B])O0^8m[<9raZa\6$rN_QGQ0XMu<oS!iFUQO]D)iL''3D/Xm(m2U8u@/O6=cG&&9%bPUGa=kkb1IM1o7tfU5M0*\E+iKl+$O:sRI;\EL[ei)1E%A8s`&d9IJ;*uM-lKh+*pe!^Y1`JYgaV+rkLK5e=L$,STp!9^X!,jjPn-L`q"aJ4c2kW<_I7[:\MjUXidmoh8NsPV*s5^r3RD;ldl]#CCM]?7K=I=/6r3bN[n[:;2;t9OfFsFdDtqNS)1b.mmBE'-Yr=1)P!KSQ@>[WnrYi05AnZE:=(@c=gS*c\Bp-Q@T:3i%oGY!Z%gT5q?,krQJ)EAn&^Q25XuAGLg!5sHJ:rA;5-HKKBmt=lZsRTP/5Lc)[$RP*Z2-="Jp>`^g<^AS=GMDI&%bQ&Y_BddEo8@Y=Zh9Wn"#ON!r#7A%_%Z[Dg62)*/ZCu_4(7N0^'4J9"*pioFfKlBbnXTh_c?cp71\W>HqkrM&d.*^Bf1Q=h7Rk#nY<5>'.Gi<7soBHYW\j>Y$@a!OJ5\/!p2b:Ag:SkhK34$!(P#'"gU[eZap@"Zk17m+EuXQrGRmbZ]Wjm-;hVVH2&j4CmbA*RH#!$<,1B+fr,_6,Fdp*@)!l618BL/oZ5\?mOTV*'kf.Q4;+RY,-C7`#\.:qT]*loOctdqR98OIbVQSTeAhZDnCFN]DZtG`I_O?3CLm\*9SKMOe7(&>@oTPJ7rXf7N$b!^]&npePhE2F/LA^%D+:9<gE"\%$JZ6GrN!NH$@N$;Y1G@,gdX_GBdYBh1uB+WaB[$li-=(*FGm)o[P,Cj4asGQhUu9NEK-nA\28AAIUcE<R;Y^7(JOS#<sLZa:go2%"A-.^W\=8UECNT#e9Vdeu\$(W.69*d$YX)lQ/Q8![RUp&0-*#f9*O,~>endstream
|
||||||
|
endobj
|
||||||
|
118 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 140
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gar'!]aDY2&;0_($B7W39B;_t=UWL(V/U>a8>)'<IK-!an.Z!<#X4*4MKnr?!Y<2Y&p1>u$lWM,4AEPa.?J8`4b&5D-s($.\KRe\>E@WTnk4^q)T`t--T[<n*;-NHCoG9V+Fe);*D$~>endstream
|
||||||
|
endobj
|
||||||
|
119 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 139
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gar'!0a`S!'LVbIMNhlGh2F/8fEtg8#lb*\JmdQo^Y!Oo8cf;%?:'%Fq"O.W7RK6NFKceXl<t&IP?Tki1A5tUpQ,HQLDdHP88_S]6g$:L6\5[aa:r"u.ZZJ0eZ]_<4N&_2+)*&B8c~>endstream
|
||||||
|
endobj
|
||||||
|
120 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3697
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gau`VHZ.Z[&c^a\@W4S0jXt0?-C$r&,`\(uNFO>VgacdJTZED?KF])iPc^Z%^,*rf.#HqN/p]5rJ_K4uG'<",Z`AV8Iu=#C,Cm6^nER[gM@)9M:io9aRnn!PF7T3b;U3c$ag;L[#A\'HWiTG"hT;,8$+;![jb2MeOKqb?;^DN`,#DhHre)h&Y_f,+rmD%=]M%$B@W;V*HHBL.J=H!o0JR>E2pCsT^i_tga9.K[iL?H2cn>W7Z&Dl=dB[#lHbUrE7EdP8%"n?6rmGeiB(rW^V5\NsA/+^niV1*XJ%gER):,+T[t$Qj[,<H]?nk<FN4jt/*_IdCboQ5)j.:RRb?rNc+S8G!22V24<&=/6W[V,4AhuA[Z0p4+N_qNe822M,K=ct:mHt-;*#q6:i8a2N#SeNG1uI!:9(J^3?/dug;jY1NX4thlnEp/P"Y>6^H?<'_c&"SC$^2;u+\CX-al9WPAUoso1JHq&P(ebQZ#ke5'M5WAjfjO*Z=K:8qRf/J[G>1?D+gp)5-Y?7a>h9CGMf9O/HZL+1g-[VbFE[6[TI(9\HHi:bE2[jQda6pI<kugQ:=0[+XfItaatdm,S&H$0gKqWY&urq2'L<14N/%D*r&Lq'ln3("pu%lnYqm\:I7h`@Q2LoRR_8$$IUIqbMYI2&2Se0@Y"6roJnG.$5,04j0`17U(Z8V\,]hM=c11#"f1)Yr@MTN3N;>Z"FN!mkmN8W?LA0\UC,1,>pc*3!=HoskLcEX=b:i(\J+B`L3osT3>o3VF$WLZUMtosUd>;FM'A7s5sn[t$o1&hZZ8c-oZig[Y?qHSC-Q>?C8Vrdacp>\cjt"nF/iZ-PO67$9Vn>b)[$lg<E6(28C("%'a_$AQEoE>J-Y-k[-2sj()FZ]N1=IpMOU&W8-HO]QX.]eV&u-md'="MGE^+)SHj8Yq&8,.=V>pp(Xkj[.0^WXhI%qW[]12`8D;RX/K5tY:oCmVHqn-s9pSZ?WMD#D$)a.7E6Bk_7[isNcEXL[.?^@%_sVaEP,7p$23fEMl?4gdbrC;-]#<_WI+Y,CTTE>f1.C$:5oSD)_VWfmmVEJ=nX@7XhOf2O37Pc%<=IXj(d3m%J*Vd`@4\3_6rJ-G3eHka,hn6&c*qEe+1@AE%cF6Aq2)2h;BBpj]%Tp>am3Vq?Z<PEYbVERDmSt-Y!U&T(pqm+3pr%1mOX`hj_76]cnL?9ATW+oXku\0a^2n'$UsK6gRHY>pk?Ed=DBsrh\bLZ%nYu9Tjig/Od"1_U=F4_nKWX#eUlK@*7kj&+_L2'D5De,O'Y.VZR)aq`oDL]O/H@9&/a`\!*'6e[rB<"TDl4=0.$PQA/AmH<A5&K<OCDejof#X!dA;Q"!#YA9PuegArTgdbPC6"D]MXJ85kO]<7O,l+Y1uqaruhJ&62#\GV&28Q`?,.G5M)oOPT:"ip=>8Cuacp=ZJe3bRqN)i%a@c3$<j4BCqTHK%XJ%;H;'pBfbUW.&61['r#G)NMh-2/.6tgib4s<b=19md']:QfG(Q3LX1<PKl=<,(j%a`r%uM;Hq5$Wo[fVE*H`+pK<=;Cip0ZCJr\J-akuXgpCkYL/_s62p\X93'*Oth2&qQ55_pIKR#.N=JaK)k`l,l]",%4\2Fd28)F2Br(r3%a!.eTh!2$7l"G;[7I&[A^!]C8PW>\$4f,2<$@R)ZT_Ac&2qI(VV-C_t(dWk^eNINrf"W3[P9f;<WcbY^FHG\l$iJ_5N$BD(\3#2m$U/3SS8<^!]>c;5\E@4^@r!A9'h#*:uA^%c0;WiSFl:N3?,mgo>b:`MD-'V<?Y5K#%gCF2ar[NNE^G=!"gB?qD6a-+-ed0-jfQ4>D?2odd,'BiJJ<0o?f]T:SGYHO-BEHHr+p$Lt2jtukLdh(W8ta@+o4\+aI!?#r&-l&RM%EfZY"eWs=fpIjcB4=EpoWgqiQm`UO(9ot@q?D?r<c]mGX34'hHjI3TP/un(841u293/:Fq'9VQ';:jrPrK>+!XW/9Q)1pof?A6c&O8\fAq7pkcKDR9J.NX+m@-$%@iMI/FlPS!NkV8#3VQZg?Pk3c"$$96g_'uVoR;tAhRHf[;/BQ.;TL1;-P@.7E2'SbG&aOABO$hFIuX7[ea;XZn?pmeuk4,j`2/H;s_U#_$51_'o^OZlb,goU+M:^5@Op4?uFmd";03?5[DZCeH,:rg@lFNfel1N[ni!]Vl)[8ruJHaUi,ZDRbh`nI5HhNQ'jrTU&<:K>T^6S>X(e`5u`iugNn1:?Ek<!)iDr^c@E)YDLg%(P)Z#UB"^V71\(GupSl(QDQ*/?c9/u05n'1-p9S'E=>r\c+#0>Q:f:I"%q8,=PLa0%.UL"/UgPAu_k8Og)\s3+"R60PEKI;\:',<5VlG`f4CbbDZmTLQB5fa*#Om[mk^WgVbN3N)V<@/"0`>Bnbec]s$8<pOZO-qQ$]/*]Yd0sof3U<kaI$1^hV8*W@ggX&lD=]ODNt4N9aP3FPlPDZJ>o\SZ=r?MW_NrFPAKnZ.GI/PYNZfHL8%Uk@"L!K7=VCe>Z%QlO_5N2"D9/M6TPf,OG?@="+IN1e?,D(UmD-,<\V,"85Q2iN`r:D5;=g]c?3T*RH?4-''c":+J)a_db^re*R=n2\kHa,OO]-ao.Y13K*r-Y11K;jfF'[bg$;t#VkU]/3^!bpmRMM&'B.Js#CQl]$+$l6C8(O[6O@Nb@_,5o/l6Aqm%`hE'?`32[fNW(d?MC$L[R*\L4_Up&*3+d)qmW&PFXO8<k(A&M>Pas9'N:j2]_];TPdEiIrubOeBQst1u-r0aq;D>VtVabbI[t&e4tA%Hgtm>6SNH.!_cLHqsqielPI1KUcR)bf2\>#B_CKP(o-Ca;X$q>na(Ftgg]kY6*+6W#HRC>!f/(fhcT:''-C4L0arfL=pa*&au0hDp%fH:1n_`A3k)9L+k.jM!M!=LZ-+Pu"u2jB,qa'oW#=J6]tXI?5O,h?\,Buas1"YuJL<2a+u!c&ciG.'5Z]dI=H"bo`6D67180uhO1&mb*&lPT\B,eJS*Y%Je0&7<i?kUVS$p+mTcM`.XZ<dJ8F7I[Uro!69o[%58?pEc6L/d&;p=9jXsuKf4EfOG&SN@t:<[o8C=,Wi$X2>]M/rN]@p'cZY]P6&"&'uM=:"Y'VTF&E&pd^>NlBGO_DA+L?<3";`QOGZT"W!H.iPIqqbiQ^pe,9EUWSR,dU^4CgARH.+@o.g&uu8*BOMK"_KlX,:kkniKfjLKV)YsC@?M)0@A?r%UpaL8s";V8iN4pd,*Q[q(LiP!lAI/,PNiu3:5i=L&pjF0r$fKZZq0+>n:9JYHGmEdE51Ub$Fek8UYhgUptk[15KQ9R^)hJim.7c71!"I*UgjFEfOK'#ShLedCD+:R?49/+\ekFs6<OKYEBjn].X5]<>57fb(;;cX/8cPX^o3SFn-V+l)En=Erq$h\WrN;?W$J,?qCNV*CWEr-B&#Ro,'MiKEKWTa,iPYK[u9'UUCZJDrRO8;`8UaPAF#!8h2>p9A^ko5Ypcf!c-&i\VhY1,'V-5?,XDQ>*$166(s]F[]OqRX^jl8*Q7#7[3BCS#d/VoW/_?)F5/Y6nJ*Mj".(j9o$M2YK*G=:QVCYbSNh'IIrBXm8&p8Wpr3P^-([l=DD;*L;4BmSW#LHu2DWqKT1>)Q^'R_1,:F3?KqARc-crA-8VDbB-A13<e!o_'_+&gZ@2K84o4hJ0\~>endstream
|
||||||
|
endobj
|
||||||
|
121 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3215
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gau`VflGh.&q0LUFJW_ejEiJI"?.cTMB+''1Jp%lc9/&j(/.%-@ZmBM9"+?adf:1]Zm\dpeP%lZ!XP=Q:3QfF^r5,rr\oW6cE?*t]`f1&Wu5$"iP<tk\@=T240m"sNb`kaf6"fP/]4s9%_d/ZO0=_kKT'W:Zg]K1oZ5P2jnoBc[-C@*bAcDi`]Y=2eAiGce.)T-^Q.:<(QQ%q@nHLhelR%.QZTp/9!RA!b@!eX)-fq^\B&&=R*YhB&[H(rXC&X:j*qLh=AYSWJqb/]2#)(t2aZR0S+.<Qg&"etRK<OdZCFArP7[<O(=fbtDl1S""hi1TVSmVgj:fXm8b<U^8J-Re`q04gA62aU=hYZ-Q3+J\emGYNLaKTW]ou0uA[#R*<C1.?IG5Z5cH,L'b?(sUI=aU;83,Y3,Ig8Z>=>1%n28`4M!jHc&\_LGhSYt)*XO[=l'HH*3tXLN>%W%77O+&"l1+'KW8"Qg^BV:dMq,\=pT!9Ba2Rq:-ZHE99;U#ij>e"_.ddlo]3B<4ZehQn`.hF;!^>WFbd`W#WFV+>Ru"&Z/L'tc#B\/XYJrJB%HDJLIKH.F^V?=)6m'B'T,nrJ<e2S@Hq@I]/eFNSW1m?^1Qr^;$_!hhr*hsPT3544k=I;U2a,NW?:48;5Z_''n<Je`5YV>R<a:M-Ak<IkMQdsL&2[2F+D*Dp*81i$bb0-#?`c*9TV6]%JH7u\^-Etmr,Lio$QA+E0IkJ)pGflo0Q6;@h^fIZR7p]c.8A/NKS5<)WV2t;1.)5?=:.9K";6h*[2BRP%(-a[I%J]4M10(/!GWR6h&WAaB3!tD"'LpV:Inn7U7[q;E==h-]`n"XhuSHZ+b&NXX/u#s*]S#O"37?^PYhTp>k$Aa8\*`#+Phg.LNP*%YoBs-Z+\&$=AEt,Def+3@ge$Gj)^6C%tE!b<Wtq#BEV-B'UHFuq,o+0l,9VYPDYZjb$;:#RkelfZ;`f72&2X2rUKCu:<`m"knA0XLHOmReKcftfL5TfYWu`[=jH"c(jsFM1+O<`W%Y[A9M2;tmYoIJTI\/0`Ad\!\RVqqGLhk!Y`-SF.:NL=]5KK"!$tu]r$h>h"8>.=;CRo'pps0V(\.'b9!49T5ebpg3PaWc6raOjX;X^FlJirRaEjQ&hZc)YKmH5OA-ks3p)<'AhX\Yl7!r1VNH3mrEtJ^]IW9O]$bNRV`ctnDeqn$#0TGUpIH&h#S/4Z="KQ+%+Od2"%@GEkQrQc$H36IOBS'JeKF^OM;-ru^B%pN)dGG2T(q(WooT<sXVF'F!1[5<X3mak"jaBaVQ2>u:-97.?]*Gdh#uO7$%VA=,*m-#*7_P$]m$EH./pX+C.tS^@1u]\/lCADg&rE8$ASha*K!GAj6=>(:Q33"`HV%Y.(E2MCYXqkMQ*sE2'@\QB<EZ?7.=3PlKI>AR:SG.4M$h8eL#+(.FF;X-,&GfN+Q.q/6cS\.g4T6mnOn/k_\-bJf+=\MYi;?Ga['1%<ZEgk=>V*e4gbMAn+jWf*E,dn[OOF:WT-2ZT<ZpCn^1i^fBK55T(in3qp@kre8PP^+X<8N)AXea16")*Dul\6LiouAF'TBY]"F!j.c'_.`S"/om3lEOT"6@A$X8=\fi'FM-L`D)8'?U,.ah>l=%-)!FZUe8R[q9PpIkFE]r-D7JY16gRiuSl-)9ED,"AY5-[O<JP^lB?dKLD?IpYuH^KjN^2!Vaq't?W>'2K^"Gu`etr8CZ1@g^t##IMjl1Xcf&m`Nmt*qJ9[@2^X9]UdT8Ti.$76g7dOM(Bc0.r*-HZ<2HeBSXIZe].7V6ocp;T.Q8"m\*VgN>Y"W#g.f!O)ZYearmN,PkUt%EltbQos'+ZLW"?Ys#<qBf1N3?p]Qn_.7TTSV$r[?fE8?Kh"STpO2lud&uW&rZ]X@L#mYWdXoVTj7%"P*'U;GVX9[A3a9WeJp*f,;1sID>/0AsRU$]u:0;R0^Z<AYc'2Ik=f=`XFg[])YI1L3I^Z47<VKkV3&B8e.j#Pm<B+C7g7t%65Dk7GObG[&ioVij*Dq/":jr<T<T"ja$bf3CrA34,Pdb`&!D9G@0P'[&oa=p-&G&8r"Z"NnX0RT4G*D;6Vi+li1nCSj!nR-%`ka4($".*!%b:357Q77Ppc@P]8ng2W<]<4euZ*$7H].T*`^+R^c[B@4\+@Q`OOXIU>2N5kNCf$Zrl352]F]:bOH7Q7WiL/PDf)<1EaN3b%f6gqf;R[q.DI0B\TWr"k`qtJS[C"IhqRedB02<MFh;j3_9M+^3,CW$Ad"1)bZ&Lp'Tu'd6\6k\2CMugtj[%0ebA.*Z9Otl5;/m)l@n!E=Dg-cB-RVO-*GgJeC2GI&e>D8X;bO+@N4L@&)V+oAZdiIY^\:B-mG2.?MhbPH%9I+IeN[);%RC,\_#dPRG>>DoN"38V,34W8pP[L9km_WiPMWV>/\FtL.Q8YUFC67lN&U?/I0-h*W6!g#)KhpIB<P1qorO^AW4)/uLp,>PU!CdG]/&cu\jTUiM7P_&A_TRH)_6>\Hct-KLW]3enf2Z@W&Qbds7XS^S#;skF&HZMYu!q9=PdP7,-`3GK'$G8pXbN^,/3)@d/Nk>_\&1IpJi,lf*M_T,.Q,)B(L@jj(i^!Y;'Pa175ru"8Gh)@%M6Ei);L`fsrhf:XoGWi5Pa\<<N$G(r/Ad!2e5b!'V,"KT$9h.F@`T$2Rk-q*kWjd[iDcXE+[`CVEO0c3`(CXX>)j#^Zb\jt+K^`SEpRjQ[qu8kdt1pK+&SD]*(IM#A\llFro+iUpJsUTN#D9p%HZZC/mTW''m\H-;;+V$pHa4bd'ELYf8T4Z*R8@2@8g+PAl`U#6%M,CNFfMYhoN\g:81s$j$Td0s0df4Er*8'*g;h\J+&>7bp^dSfnTZ=f/OX<"Hfa3i:R<%Z"L_lN?qlYi>2r[nZns$fFd?gT:lGQgHNHAetBC,Xe-[fWuIa*ZNKX='t<:TnLf%eO)oJ9P\4l+^3j:t%_-/lYf9?)b_UFY'QjJgGtq/52m8\3r*RqtiXsWFVDX&*e;6Dja?Pc:\W-s+Z;XVD1h=gT[D3@c?QX_jL5uGR+'?,;h[=<^u_)r3O91T@P^NJm_rJe[S[b,O;DjEJKRt9e2g8eQlW:e6T)bfEZl<qu3o6%e@@5O#QTDrM:k3k<t9p)\*`iFj`!la0L('g-=0uR.bOL8_JYPjE@eSna5iPO>^>OZ^&tT^r*1t+r`N"keCgKXS)~>endstream
|
||||||
|
endobj
|
||||||
|
122 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2769
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gatm=CNJJp(B*+)ibiVX'YQ<TpjnF:19&ECW!OUfkj3\iW_:tG[.r1WS:p_2F!X%q,Rc$Q,Se,+[Z9e9g`p5m#Cd3Uhi@c_a.QcY@$iX>JRN=PN,RZir9;6LUU7D?Ra^SGCiF`Uf!.=Vn&&SHdAW\fe%.5n_!&nPokP4'H"!Si42C%+HDI(U<Zi.l=@D<D1Q;>=j8[3"^>eTcdlD#'h,!d8c4V01+_Ygj3;HN:GoMN?i6\ZEE!c^T;<nIHnhuEg^uAJu)5E^cmju`e#t)im*3&G7Ah9bXBV?!PKt$A^Y%tN[n(S&TVjXBtNrR>OIi\?2X!6!Hp>7<tq5&#[8F%l?'Ts<9Y5;SKU%5&rN7#go7QL5MkL:=,$<TQ'_.JW1(]tt$,^uImY^!<[E]LX\PUAcbdgV%YC3rQ.)Dm86eZ7=#Nb&AF>Jd1YF$GDD+<\L>;1_Ir$I;Bs8hc@/1-q\CalKd_b@DLK++6_#Ogm.Z#M"t<e"m(gZhKTD7)U1-@&/rS;dQX`VT<fI8K9)ZVA,aMNtk.V0BQ?#iW:bc+,0m258qDW1gOJjU-+Xj%?MOs8%bF6RaF!a-cSSM6<Fd?'G4b.r;JZ@e,`QeSL03#IUWGoa`pK__oKU$N5?G<:').E&iKaHEBiIRoDW^)&'c72+A<$aO<DB0Q!U=@/5q*Q6h6/d":fID[D-Aqf;uu9cl.WACRQ""aj6GY>n'8TVI11U^#5,_`=`>ZV0A%bl\psT57H3/\si@?TYp2])9U'B74#Hi`>:DDD,A<4-P9l%^OndQ14plKbjmIC]tIdS@(R=JRdN@;Y4#H-kf>k>*_@9Of65aHGanBNMY5/l.M&nJ#SL[Y<BH$`"j2_Pi0"Gi,8MN=/==2&<K^kK5LD+nYSc1'9@Jo3G5&?hOtM:g!A%h#'(7pbpc&'3$]n=e3Dkjfbpcg#N.W1j68)Q-^S(RH4YB;1g-XU5jr(N>i,:QeIs=SQm2t-8r>``'%*,^J(/hX)eHSOEL]2+l*$jR.+q`G71MJ#-bn)K:-D(eRZKpM^)U+=HF]#M@&./:(P@mfK%\:k3c]D$J_]G):KFeG[Zjj=@laSg>VJ0T]&isTRL\=DAI!\t)I5;UE>u\7f6Jcjh)ENVZ5NH*So1FXZE0Y8-.c=5Vis7YoLNaNMFI-G`/[<iZ-07fab@W*)s*8`7rA%mS#*#<lFnUB)Pcosbc;?ofP]G.QWBRYgnKQD=S5^/;P-h[LXV#uKIf'3<ZSW,Z:LrY6oTI0@PCgjFFj8u.VS#1DR6Erk5_Dq*V?n&bKit[8q\QoXSR1EQY==l,$T62eHh6oL*PF";U:P3fdN$I$p*QKh6XhMSN\5J)0K8%!+d)kQ#j,c%-kRAmL.^Gr0gK'/!HJ=hMsT24pV/Tl3,/ue^!N[flm(0J@Ocp'#W\*^QU$r5Uh\I0nX!?d)<t1.5u_,MVDOr3K,V!8h"#]]\_m4K>8nP2T6d>]Z3pD\q2W*kL_)lISCUtDj_mNVA=Jlsep*5:rE@$k,[T&j=ik6_V^d)jbgr<k=[45A>(DULU;HU'CB4TFli74^,J5<!?<1au_h.*gl.d8[1[OQNbNS@)FU&pg)SDijO;aB/d;<-!Ko<@eUR-#ZRp[BQ.jWC_kAo=g)1LXkjnA?W;XRZp0;@5a*!"/<lfB.H*k+sdqt^]uIQ_GOkHL`rnsoZKAYI,I%#ukXY:LX).%B0p&/LTOA(gZuXJ(PK&t3?`@7oR<">A`"XoWF`g'?q_9,sfY/nZK5C>tru7`_&b1[/KhT'"NFNf;J!nf3Dk#o&A,l;67heke=8.J@Pbok@7/<l`ta`fWOK9J#b6L+Cl4cN4_(+AVP9bPcIaQZ07J8BbDL7adYegcb:,CbZP*iZjQRFN38%T)n&jk,#YE5>*2,#a&_+FT%"aks60n*EAF!;VSS/a7dF$mFBnR9)FOCoi-3qTAZs44pEfiVWO;<Z+'!l\^`>B%L1G<$0XX3JNPF-WW^Xr+Y.DX(*Sb(:k.b;Y6Nl&,aVq"23u6*2>8,@,,e\G[/eL-_sumPil[0hCGOW::FWH;m:T/;Y$DG*Xc[`P7?V_&F=H+7ApCRDBk=Ga-BoJu2*-Un/C/O8;'7@:;dEjJP-^)D^(*4h7o+.c\fC#\r$U#<8uN.)X]/.S9!M[D%!WbnM+u6CaVb_1[dB*l+V2)6B+_6iEASe5J)lQlcY^iq5N&\3gc]Wi?,_E!?FftEqBB8)\Rf3P/TKhR%]]#K4AF[XraVXp7Y?VFQD:'*pFm;RJF:]U.4ACm)A4LIja$!pP`9@]'*EdbU1U/;LDs!&>Tc"PqO@A#0OlacmR^TPJZ>(j-jai'PJ*EmO.&0NO?@%A?aMk50KPa7h"<>]bZl4`(V]+jSF=Z^:6P+k>T58.(p7ZRBG`_l/2*;.ctP\9UF\LF_M2W;L1Ak_=kGurmZ[p2%LpY<6\@VeCA3s#P>$/6634.oq$fllQ@S>W7&_!dN`,/F[>1)Ermbmrl/<C0h!]Z(O8$Cu>qIjG[nl>:Sh0-k'\0KO?LB0Cgpp@4U<AHBfTN2IA,5<)BD8os^L[ujDqYr7''4XTrp^gqe46d(2#%F>a=$M+&i+r::+Z.>F379?-[PIZ22]#dLU4he0[>:.pm^%HgN!^te(-AC21E+#DrVlg/)[T9Z2%m%S[P.u8SOWqU?jh6.$*7H03GP.H>*DQQ@oAt9sAlm.Df+7D,+9#PNLSRiB"4?>%Cki1Jo<^?fQ%b@Fm7lfCF7Q9ZSo6.OA:OkZDk0e%hlr!Pu4u2?~>endstream
|
||||||
|
endobj
|
||||||
|
123 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2351
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gat=,qbuLq(B3.)iiH'_ZM-stK\*;!Prc3\Xb^'*g0;bO<0K/+2+bh`#@[Z/4l$Df#r8/U-)>Tgq>*4fNX5phRHhO#!*kIKn!d]g0V3i0CGq,ii+dZ3Eb&dFG#N1!RYD:=G#L18>oWHsI_Oia`csb%T^EiZjN(0WI"$_ac.n0/es\9&d"`&^q/Z`\l(N:o;nWZb4qZ5cFZ<n#$]P*T\Q2jN@PqBCSVdUGNJ<[E%b0fOPf3>]RG!@__LOUiS@)*d?lV;A1>DSN1q:%:NW=LEaJ57=E**Y`iCuJm'<AF<B=dpp>/c'tBZWsgED$@ZVT\)-=E#p`Ip!^Se$Fb92Bqq2[kY7sG2$h+%,Vh6=dkT^]Tf\.;CG7,Ic%)@lUX"da?rZF63Mu^Z*k@F%;mf(Pt\#t=r"Ri%ebaT=H!f4inl*!Pk)^K*ZhK!<[8iF&Zr'X5b(qZY=_T*1X6%=7PqbgS:Y.mO!h],^j[6IVO>@#Z6Mf?FbXMrf(dfM8J'6*AMfZOS:iL&oQ^YI$ObrA1kpiu[D?Dc1'*ml;N_Y7cD/IYO?O;1$F*\p+D@f]#eC^c-VK"cRK++Fdu)eR^b?BB$fN:hl-a2Paq6kp>V;?J+bi.qqC#f[fk]e-ie#sgcNcEc)B[k.\L3u3WJ1SXViUY537"WujtiS\>VIL830`a!qNSoThB,[sgGg/QWtNms$b[Yhi2V89fFb?#,b,nU7+:Sd:(M6ENEs44^$Bq__\PHVNf2NRar`3>UGK*XIX*_s]XfahVJFqlJ;l@TH#kS.]i^M:\D0I<j0B\ULItP1k<,3P?^8Kfg*l1iG)l]Oa!d#YrVWf_!cJ972!;fBm00C\et^A?YsJXO@!pN!QDqb4\@d7&59I\b>:SgRa$G3udoDJl&hO$]:ERqXk3CcoBTW"hgS?GL2(sb&(F0^;ocI8E\ob]dmQ?%!kW8X23aumrjQB`sFQY%A)M%2Gmc`$AIh;mW`i@^)gL'OF9UB3=+,8b]lZ+MU)p_;:WN^O.dGlDorb-8MmXI'"7''1UBl7N\@m24\&0I)^6n5F6D]j<G$L/--Nic2u]>f6IDJKGsV4D,1ftaOAJUM%bWfHo4l)Hd*\#M/aX5O$k!m;`>A]k*KagUOu`e0bDdG.1c,]C71l[jpk,.1i`Y31To-/=d*%@^^55-8?K068eqfOA,*[/ioeJK:Yinpfo4WcP&(>SjoBRf!E1q0n3gl:SdZe$]WR\6C4\Vbjp%A-uX_oW;d'V:t_Jol51Kr:R2TP3sT[mq:D<I%CHt'_+(Qc>Su?]Y4B4E7$JWV:/u31R=nH?o+HQ]F*ZTiM>/8O:sQVf$8#FF?@%K],B'46L1Y.m=g/N^K;')7q>mYIbnEXNK1-KhtFaUY`GDi[ZC:S;T5:i.>/C&_I05TON_.2KM#)lJrqtH#Vl#el'p2*7X&#,.^3PD;\n6g?u<LUlMJ+J#"5]i@!FH7irFM.-^<K($cnhZ^kE`07KM=hZE\b6j:E!RV=*M@,^Bf^>)\XZiQgWM+U$K(2\@(c(!XaYY3<Gf=aIYP(]$@\1Yf#PcK"@l/5aY"jtOb8)'IPJDUu-&,Hj2>l'NY@g#1O2;sM7_&pr^#C79!-1b:<ch?B;&/q3aq&I/V+%ZM^ggJV5^SnG<_[\2JIF7iA_SkKK^Y$PbIRFJ\S]7[TB;#QW)p-NG]<dhQBBnC/Tn[P5pMBMeDOs_jX)19Gu.C+C.,X;q"DW%4[\u">4L45<ll?An?Q:aWgD!nG'*#n.`gk[@S`ESu?U!S]+b<]cG@\DoY2FJq7/6%o*0\q?RI@\ck:!L\M4$04f0XP^En:C#g`DrY;Kj17u9P(ob/X7^8ffmbm_/5$k/MVO*STu2*<;ONnZLAj0B/4%/9>couT0j):>cXWfN?<*pZeNV+?E+/[TsCcm&<YR5U_#p2#oZ)cNEHJZm;W+Y$OFc;j>5NE<6jo&c&Sd2h@=)rVHn6=`Z$%k$:eIO:_/B"id.\4IVI*/\qc'2<?!^':?u0pcn]f%5d?3F/En2q5:qKI]Gs6`;V?@NjGcEt:2j+H2S-$8!Tk'JnCn*Lkt1eSFG!YB1C8(($R\PUjh]Xf,tkXN>f6II?4!Mb'Xe9Za13F?V#;#JNmlT'If:,HFuT^%%d80&Z1tiYMq$PH_4N"`GTpf"B0@Hu8Jb&R<nJi:`Tc^1l&Xn(@(tga?$gSDX+d"k;uU9$"mktW?P#E!,$/q[DZ;1L`<&igp^efnms6%moBBu)>jD&3&j53M/=aZ-ZtrV$6qHSr:A,=7jp+e#7tN<ZB:Tr(0Ira&[V_K#(0&%Ij*=dL[9!!)]\p*KY`K-44(.$0a##m#IB<T4Ap_W/*;p8q;&YS~>endstream
|
||||||
|
endobj
|
||||||
|
124 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2982
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
GauHMD/\/g')nJ01%=2LoIa2:Am%a0"kmdu%CTEKNAoJ,jUfcOAb.I0N^u2#^Y^4-@U$5Z`<@k_S(aSrDpLO%6X!mW+%uVQV>q^XE-c5LA]$J3b;ENAItEUKdDM)HX`Of&k7:6&4EkJ+:>k,Y7t:E+e!T;IOci2+8PY:>]f_o.iJpq``58tg0MYINDP6tJK<IZ_0=*?@6IH;#/bCS5pVoEumkp((#NNSb"UcNmA#'oWI:$N=T_a!ClCVEk_8<a5N'9ghF%TlWEsY0r>dA/Q7)C'#c$C>BQ(U,^M1-I6/EEh?of/[=(=N)E7l7b(q,H:Ps"o%d6JjF3$,*l5LHF636;#,B%ErOXd0.<(<=5Fh5gGaIEk=7a](mAp6:dJ?&6-Lel9XrgGA(-'YIF5ooui\J-dX)1P"<J(0'7*Pq=Wb=Vt]?jp]%fCJ%WfBht9`JR[pcI0*L)0p0L<uWHqd_JM5nE!GZ`"Ed9N/Kia@U$'.3@6WE-h;l('W6e<X+G7#q"6tm>"h7jVL_i$'4H$gbQcUdW(g.f[lj;]aPmU5SjG-Z'&oN<MTd[rt(-"1j<54(iDRe=%mkeC=6$l9)*^5H1@I.C#1A"D$:l0Zr\J';3Q@u>ZeSKt?m**P^p,eFjPY$kB>*k%9O/lT_EeaH9p07B*>F_\b_44*Oo0CA>PnL1HQEFGf\M-6E6P+4!io48j7>&Tp2T<#YdiS2<n,ogQ.8J.p97^q!90OYj@=$W()-"N08"31+L60&FcbAr<iL@A;^q.$nM[aTK^E._rt:(*2VMA[=WWiS9^\f,S<2@;aYs2>53(40@Ei%!;!M)Z7'.qB9IG\6LLs$DYK$^d#phSEsMq3`p0Xs9(U.1')Fi<iLs[S.?0,+=itUY,el)91]b-@(@3OlCKH0KrM1,"_&I'P:T@UPmj'iB$k`3uIheo9NCBV2V_IdNi%HhR(D1%(MFA!FDaT6_"9"XAOb[32[bs2=MS1W--`uG3lg(<3E?OIB5-(-,[t7Mba]3,U66VdS.M<cXb>KC$=MceElV2ng&dJ,BJQ<#R&[%Va@Ls)5)>WXUnHo9">H2*=SIGs'DXNaeTkUKh5,j'[iG_-_*g3^0FqCM+6\Y8V@0;.fg`1YH&QE\tl$J+is_J+X*"ld+u)?p,gDoYuYg,lQ?KoZBE_JdFco[<:p=$X/BP+r=HltT@'RNONMY5Sn%JF@iM!U3;[d7[LK9@E"F^'#2C5[$FqQ1gor6Y:\^K`C)hP;J$P6i1MD2&/83+6(+QJ#i=N/f->=CDZE?#I^]a<?eUE'D(@\i`j-;qWjp\"_<KO(#9a\#Q,=Ch"OC5smV&^bEPn`m'M&#>?(Geaq1bCI0='\_H[(<m*DCPRI5:Z^'M'S?%(k`A)FTZ^&>8slPOa`nZn#YIZ/p!Un<#;m+:bb9`$I9hJOBAeG3Ta9s^>qCBBM`2R[-JW>\r\IWeZj7Ho`H.\o,5TNNVPd!CE)udm]<+)798\hX@3e_+;G4gCB2#`2ONRa9WdWR[MKnne=L9lP"BF]!2P9S=d5/f99KugV[n4f,Xq,,F"W+mI'fb8+c9=D4dIo@f]\2&C(Gn*D]aY"RNkWfcNV8k!^VBB#"W6spl'k='gfc6P7oF&cu-[2-Qa6rLHKW`IlHF!C0Z8MHL;&a(1WVE[r4-Cb4\;g>;`Hm763^JND4$sjHq=%[cTg)7\$FE3uI)S];*g!-rLj\jKqT))q/&UYNd1:I@(9NKqc1o!B/F73AZtDkn[NoME=2=9l4X^.nHC:A1?*DW<;%3jK.>!cG;]U&?8Kb(,S,9-s6e]"in$6`Z,6X((O(r&C^g35Dr?Vh*mPK$`9Jp*.l5:1b=PGQt1MuK30SOd_GKf)o.nSl=R)cYpX,I%OJt8V[isSBk.3E+Gq_%"%F%Q79&u"jcCcZgn?<@!q5V,e]i:?O%O%Vk#=:++cTHJBtu$8pj'_ReX_9(`###+U0oEFPBiLD`:4'sd?!@9M&Fos98AIII,"-2fA#'@3<QTjnBqWaXsTfM=_uAJs*=8fU-i>MS9@`RnI0'>jQGQ.<i_$c98GsQCpfr3P2SYN@*&]@!;=H_J%k](HZ_.@g4jdMp&sPe"Wdj8$.VNN&W:.f,L%CG&M2SDf?F5(]Bm@g7pd*H/9'^ho0/%6H/t24pT"V7)V+KPdr1[de/k[MJgYrW.S")."'&p2/F$MK@LY5)nNp^!`e]sQf7ZH%oBuD.-`m]EhS&>BcZW\R8ou,<L3r'Ys8PZYm0AB&)88&[m%J>+WWb&!ndUk!FAF;S=2fPYZO$M7btdR,8j/F^c!bgR.qmGWo<-\Yf%'Bc^4Yq<:RSINCS-2f\F^@](\4@YmHngK/$Q.c;CA@is1n?S26?)PIF;J4m:<q)hsraU;64$X,REc8Z#Ugo==nc;XL<0?Y2Up)?Xsh$D[IQ2eM4UeSG<C:#j-9=.%*Ardnf/I&j7l>4b;G!9ri;qI_DpagjCM_C3D*LX+fiEi`S40-m#p1YFDXZ?,;a5SuVl,PHSc;"pWeOT$nB(HTCY]r8-E[j@T#<[l"Kc/'/b/)%!?D2`-T&[u[cD#pif!W!8RV2(glHKM9SnXOU<^5\k0!+_"Gp<b`Ptq4nQWUI''1HcpUA0DGQH=Tb^-nC"2LWL<n'C^RlljY9/OJD4KT<d/2'V#(lTr*"JE@X9X+7bs,>M7;(W7%%X3lDISG.=i%O6rH"@1-BuZfdWd^(O^jE<)/B+DRq%"<o"O/?32_sIDfa)\N)e,]\_D0@=`@,=?#sriXO`:JepN?"1BC5W8baN/TZ]bG1-`JZ<i?0b:!nueX_5hZd<J0db"Y?3uOMX+D1OK^mL7ClgYD:(RqCodC@YFTt/cNcZc.-V0h$Z.em:S?@b.,e6STU[:g/q/0\q73Pai1Dq/'A(lcO2Snl]?[7/jk=#1A-`oqfjWL>P`/SjQ9qf`puAuEH6Wf-NZ=/ckpTbI442m=i?]BqS.;ZucZ+?93*AVV`?~>endstream
|
||||||
|
endobj
|
||||||
|
125 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3889
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gatm>=``=e&q9SYkgJ%JksPSmK<WLtOt#'b@bOFr,ZUnIm#W'ILiC^nJW?)pp?`n@"E0As<3ZSMYc%Ba]8$USpg^7P7kqgV)sD`)^bF_Z%#1n;E:Xr"DI.a<AX#8n7rs$;DM-R,Bo_<0pc2U1eZtRT64-1VeC5JJM&".(U8ZP!cd8pRGb:ig8m/q5A0\p9!c0dT9Or*\RN?!%iZeb"QUrN,'LBr4?a&ELj?g'q8-KtFJb!rkBe7[L1eg&X"#k_Gbn%bhYP>GaIBTR52>c^LY*c?%Y@N<HXd',%M2.%>bBYl&E8Ps%@[LaI_D*GS\f^DeqJ>?UZ$]C]leohErL6,Ur]DE6s*!nR20=Yl,aUWG1!9=-7D^8lW$"fB*/[FiF'H`LHAAQBWFQDFE)BCQD_L9Gl9m1kjD;\+<J>.-s/#rq[aj;MJX'PuH`o]j"J9!WEA."/kV1('T4KSa[.M6ND.o1Ubu/DN=/90RC\d<LiH]?&mc)fD$"bA%E?;Iu7e\hJ@otg'0iqmG&$lMNQ!kBLQ[_8XdUeaRIi=93C#=+[',*!ZiGVeQO71I*%QNlC0_D^S556990p?OBd29)"TXeDl9:c8K5V@O]F-3\_#GkkT76&;S2<?Q"+bD=e%Tc?F:tb&_c2I`O',G(KW?&]ohr39WK-TG:9OsSdiR@U")s;;@mu5q9oDgX`KS0H'=cDR"gY&=r/VNRM,Q=:OA&M^[4sEcN#6&K('XD!ZZL?\@_VG3`65316gajj4?qOf=a=tVYc>o>Il%L@Xo2:<l2O^XG<%qk31lm54WshY&jch^n`^hgMg0'h">=e.0?OliBU'K3-*2'DhEH@Poi%3&<,a:iQ0$d?62B&E;Jq5%:&JKU%>`Q0lQAhg1i2HY(ZI`EC(!NU=_$U#JL3\nlZR,P&KS:ogT9_L6kOHFW!!3S5Dq2IX&!nl3[d1Gm&nDs';F)&JP\#rL&WNZTY'<4OX4S97MlrEpq(ZV3ad"TH::86Z#%qG&qocH#"L-_N;9^MKB+`2Lk8<bm^a*9!I$>u<E'g]>n1i*2H(t4jFqn_f@(QlCQ=fEj7uXV.?l8Qkj_S^o+Jr;,.eLAM3+0P3`W?>A_Tf:49V.I[^4h$#@T_iCm8HI*@!XcXNpg`>HBr`,]:_\0a,ZKp6c[uM^G0#XI4\KTJT@/(D.lOo!K($JIgaqUD?K;i6WKub9GoLQ!bEfLf#!b@9^FRXmYQm/>$-U@R[X^nGHj3%aAtD&XKDlP.']Du)lEK#/&B9+KTSC4;M/h:b-.I)6S<U^]QU$V_!9tf\cI<I7VOn>8=O>eB;YO+57?>TDklsH"S`cc^-I8R.X^8rIZb*AeX<At\gWE#\9!NuZPt9t>L<51O$fXpDr3/+YorsJd<3^C2ERmJ\CLH4.dEq<Q\Fp6)")9ifY1E-qRu/2TdE/.'k5Z]::eWaF_d*1''7+*>nG^RroO"-7LX.[W&O&Pib]:(s7kB*bUOg;DS54kBbJ+d^t,r0B%hiPGT5"0kIuTKe-H-TpNdfKr,$YtjKpGdmRGYiSd+QVl1K&piW&=6g,:fm2r)YK>DD:,)to;3?ge1@MXiMoT:-V#`gC9_%N\HXc-t2$Fe;".7B!UgltfPd)j.JRjf/de-=a,e^Ms"5MMEmR?kuSs9QD\!G;Ek(:`o#Lh48Qc\G-,t<)4X7bDgM3#!@4P%:.SP$VHA`R%JY$HsS._8'j%H&7,e'b@P$b^_Xm,7<u\JAdot710Vc[R@CG9/Q3cY[#/<P-)Y1+7:nNsPd4IRSB\:$;s[kQP[&RncZ3/hUnXT$!08:-`^kN&_"'$]pY#F&/I]gCNRmq^QY!j,K/k!c?0:tb2'W_J\seC+[WZ=nf.Ybj`'=?^$Q9OfLNl[1[_S?.>8sO^UU>hXUd"h.^KQcpG@VqN'T9W0J/P612!:Z!aikho+gI<J3hbJV.)KB/WF:2`aZ>8,RL$<N!>@%s>o"ddmrH'Omdf]An!POjZ/U)NSJ#Xo"Zpl&$%4p,ZC#4\g=[Fi)\5C:>*93.jXU2\5a,1_SmPX>XC5A4$7aH-fk\F!i?.J$?YKE`$gX]n&8$b]kb>7j_ikGA_Kiu'8m;>iFX-/aOqSQLY`B@3',)@kE0;oC$VjWc4Ge=6@^Kq8IKSjuPNaJ1Jsa(i]Y?l6I`)^uKOhiC4=""Ob&R]3$F&P6]0NapN'f0H#-LObBJ`P=)=@S8fb3[`2s2LsiXWA54DKU.4>t9GYHcK2AjWF*2+Jfe*^_[iid/`50jnSH=FYeN;DD=bP:-W3MWd#n\8iS[Gma0q%*QR]e$I9CQ)<eLonIn$\?!G!=SO/?Rk-4HMo%H<Wg2CV0.tNJ$jRc5N])7'fp^bR/]Rq;nm1);J`\tiD]<4P$)p3LO_\;[%F^"E_a<J&p]mTd5NNr]k;W)WkJ\K:&[Z!BGP*E:>PG*cb-odO@i6jI)tm%L^3K_%T"^Dkh)g->mbN`)[<7D=YVZa:2U%H@8dc'bfGYfgi)!>@<FiTbo@dkPL?!$[Vu)6GmUIQLR50IP_`#.p-rY;$!h7(-\j0CD?hT7%/b8ZgOEnMT`uE:`0dh@]\lE_uie"<)p$2Y6*k@2RY]N]+'I(l]mc,0RB_,L%Pc$4n;GF.*jWUH3_=7gLWZ*l*cr^0=X@?<XaXQ4+RC5r0!W:b_I[G-k:]dE?Q4THUaO7=mGtu`Y8RRQ<Xa)Ecb4>'^*/,BeHW=5;80o&1\?D?M.IN@3/AWM4Hc3$"l+*DZ5A5QjRL5tY62qdV/:d`MmH+-u4Gd%NV3K_$!F&$sI[(ndV30&fNum69Zou="Wu:SsGmZ*)ab5X(q;Oh+\\PXVof':=WdB/Jgbt^*gFla]\^'#LB*1#mT4(e9DV+_i-i5!]V?^[F)*i0m3X_8lR6igVAUqn1KiY5<`SuaN2Qbc[De^fp0B2ni@Dt*_pamSC=uF?8W8kTj9H^S;Rd4EXiTlFM'oCi=KJ(ZtTD<e"?i+q,f?e3N*dJ%nC7PPqgXN6-qkALcr>sr4_gV91^C4&BF0RXX12j*K]D\aIIF,g:,bZ>\j]:/CW>MSD.#5:>k^*KLp"qW?\tHa<loZ3kSE`mp#HnNL?8$'s>FBeF=>MkSM@K`$J_MX'^sQQJmRr%fJpM8HjoT-`=&Rg-AI>1U,50A=,^SV0Ja)LF=a_8-oof[CMGqmdlO9.Q?0&7[WjpX_RYb!H0?25@\H]50=`M02H!Me6L5gb;+jFJA+U+\r4J0sNbfr5f=&qr*\^S%'g"s<BiMG`rZ,W1j@70C,*k!%e.rG=8au%[$dT4c$(2`'qr99@3,Ur'G#2di&#/?TlWM8<g!6R)G>85?]6C'*:#.fG<W_(utrn:!YF.3WrEUa*5<"5JCJR@Rf`45RD`,6lg>AMEi&H$i/\:mE2=4^9kO/Ubn<D:q&W-NTLl*_>$[9>&Op@.3%$#P,3eo4kOGa_J\VTuiAbmP*L8IaeE7:;LAE"`kDH(9c:[j4rHm;'\m1<5Q68N8KkD\cfp?m3e'2Lf_D;?-$1@R#i^PdDK.=5TSdk$&2H]"Zho\DLF;:K7gim"$C4+%aaV#h#HM8tYV>F?JE3lIMoDmS')7UX;ZS'DBMaL^iNSUYG2:qjqnqa>A15W?J=28s5i^m\-d!e27H/YL0_]o_gY8MBGUVJkqf?@ck$gg`hLQ4\)I-EOt;nTCMrr?>2ROZQ0.6J,f64Q0,k\4_fi:>s:D@E35FJ>gOF.l:q,`:Gd5pYA$tb=J3]\an6F8n?H<*SV8A;XHs?B@0n$V-%A3#J'OOm^mm@HcL*P+n>TU,Vl$!Pr-3#9FK8Y#*36;!3iRRqj(%=k@0j5H5?-s`QHIZ=gFt`+Q@I59#ARN-CMl-qBUFolp,(5WH=/e&@i.?dbj60-VJO.T0GA^(ImajJWW~>endstream
|
||||||
|
endobj
|
||||||
|
126 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3670
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gatm>=`<%c&q9SYW0[[PR1[E-U5d./;=)4_EL_k*@hoV0TZNML,DrVmYiWk'poSFkV^NU0?s"&pc*"7qY,\?#1B&`^e(k)<^PBq=!f@?Z92K_%L\oD:Fas,F9KC<RVin,1#$@1F5AV>^';PIY>b)$X8QA&8Ce7W+'?58/&m5-R-Ar%Hb(59n8>o#]1f0EYdIIrC%MYPf((8dmq9b]YJN%Q]O0WtKs#8a5_Un\fs,(q6_j"\)[W-kaeWKRqni*mNpA!*l9CU"9FU:$'%eZA_T>4qL_q&hrk4nb8OWFZW"t,8\fO_m^Y*+m:7&A#6V!*]$1O[KJ^lTe`?mDZoMB1RZZ1d6^:WGs9N-U@*>%p@tnR:qVn-J4jKU<l)`$8RjY(,L3he1A:[<+ceqY.I[B9E;A6I.E';f2Cc`uDS7q>L48+-ru%jnq$^BUZ+A>,j7T=FQACCU0?8NXt:hLZ(I4;Uu<!S/O/?aO2BX_MK],',))%elp'N3ue4IA3$ZYC.f;nAT]Gf"SX'4ctoF6@keEn-`s*cV\gf&9i2?j:RPheCjr-QnDP.KBVuH\%+%nh\-G#sccH(FCIjaBgcBFK]WY)oS8su2#IcoR73E/$p-,u0EFJuZ(FCDN-[QJ"crX=+N[P3$7rjqr#rD]]-.B6/PPQtM<Dj;?lHXI4ONbI<&"6NF1g:W;Et069;;I-A4q3edrWfKclsTe!brod0H4h^t\c*:<qkm>]pb0-[!_.k#i8K-t#9&.!%s\Fh+cq6Snt^.,R2CBKYhO"+n'UEJk'//)#^&K9$j'4LiTta+#pWQ2mN-8L_.P8&nJ[0)IE1.phXuD1kdd-3YV<e8X'q](('r>0on7FQ2"8;37g(ARFEN!6/3&g$kOa;%lcg(.&++q$FSTr`-Vp'#09/l'gK!&hekUnnT,\pjqY9_)Y3')"LFu,-ML7P8G[4Yc=e*.>]=Sk$HW-8Mq&\=*g04`1';Vppec[pq`Fp'Nkf=dIeN/J![WN'([m%o,64@pS:S!$\)!1kS[MJ>W+\[p'3>_;u2pF^9E54Y@W.nHGT+AanP0[M,S4>qa=?V=rHZZ$Eq`%lM*RJo37VCJ;0H`Ot6U4qMgF_qD#"eik)hqdj,ti-5`eDi^*>F[p\eY;W/pBCLb\q-52ufGhUPQkHZ7mPAm(]1s"=tCRm4Nk`/\;HU$!-T-:FIoo``k%cddubD0n+`E^2@57&Orro((p<V,%jJTb<3(Ta7h[`Qf*OtW!?_Rpc2fSIJnWd!V=*?_ejjR[\m>eMKfo:C1.afAPWFW_SXq@LG'hYYU$qRA$(AW5@V.i!SC4T^B`QTL57H!M>T4RnM:P3g_,bmhj8ZId&a]k3fU61kLGp1_Op%tY&;1ER3NMVID[DJ@jj8uPO/(qZ"?j\'Z'#DHl?hLXh;#+456e.F6k34%.ff6-<oE]((!Rj(9**mJ$b#Coi9to6&1i4EH?^^r4k:EP4G,K9Yqie.H]B/P/`+7-G]D"lQd(E<[=)jQ3-TCRou$rTo.MQT`8j[:MR+V>CCp9`XFjQ4B16N]gO;\@9U/E2i=OJ\=JmPK-#OoqlT[KfT&B'A"cHE@Z$Or_Es9+jt$h=`'p7NM$6![@0-[mVg2Oi)*:@VZhE/q]OCMJ^<Q:)gNY9tcn,QeF**'X5u95E&c(4oX$BTBiJdC/BM@=KS!Uu'*n(0"U;TK]N0Xd*a3Zoo0qNX&W[VqM<r([9V3C[/B(Hkqqd;9,:".@NV2_Wmq1PHLk#?pMgLA/o,8QfebSM&a'Z&Uc"<nN>OTOS28XrqU8%"9g$;$hhR\>;.fqrR[6*^pLf(71JU?eZ,O.mXu5F(YuU+&fX,dF!Pp$_5rFQ8+Q;IsFoI)Ws$X`Ie>21Y@6V^+*oM0,(,[+9@gF%pLeY%]KEOa#F,Er5/Xg7__o2qD<?oYE3tUX7Z^pFZ2Pd3fl.,e*Tg8=&ULO/NKN9WI[1f&W0QDjRpq"6!+jLC>sGrVM-&aH)"/a"<7ND=W2XJ1#EqZ']>Z-k#RZJjUo_R+[@&/*/Z]FupIKB"R/&%uF(d1J3n4C^k:XMB5YbWeXu;PIT>Y=H[,Q^Yi>G$QM^7iBDk]<&p;F4Zs\$:MKJHA);q'dN0k2Q3N^98!F1bmd?l7dFgHR'MW=[1n2teOTn`oW5/DB])=hOah5gkSsV]>T>me<_H]%;.G[%)&s<XT"RJ,cY>A86;hZFrj4A1.$n#2`#05g@Nu:5W0R<E&G72uOJ%2&VmAV"+XbRE]A7oUs+^.H4S>ieoSAU3=M@AhQd(UBpQn1MZSnLN;n'-\XY1"t#ZRH3a(qEs3EonG<,5$#7g#j<Uj-^F\'>&#gD?jj9]IBCugo)52(k[IomoZ8ko(b4^GeIWNSAM[0p0=g<&@!fY;gb0OG55Vpk2@$;ECenFVf]aJ#nQKH"D)Fh_#2E.eJQcu/]LG@<F=Zl`nW/`iIp>WHR@\T/BK]Ob_/(K\;ZAUl%XB0/]Qa;0*N47PFqZB7[sb/1*ip=GJ][FSHc)Xh!)<&,f&&hlUNK4GupXh@5#nb#Eub8@cUZ5>uDJ>$2$h"&Lsn;[.,F7A&t6q$%?:ML4nU!q4D>[N4U#S>b6-q.,8]n!>UeVfB5<2QuViS;T/9mh'U.V&_s@i#k]m-F89k,*\,JpSg-0k]Am=b/n%CSTd.]QN!,:<OldA6,4@n*P5G6V;3Ch'G^2_Z3h>B!*QP_TWGjSsq,k/>&?cA_6[5"0@G+^'_TQa$X1cpe?=a4@d?Oq*.N:&lAB]X_?6Q$Z1pB:s%H(4e\Vdoibdu`?q9V/A5C%"G>.B`0g*^).W[1<<VOfsu<OHO)@;%=1QJc!(SF#SY9N=hYSbD@c(i#+\Jc2$dJ_J`bW34o\96[KhbFKXUX0MHg=P,Gk&N>WKA)1bm<SuGS:$:T^SHupTHTl1%?DkEo8Lm3XP>'YWe`,K$T`acgFFEs.rIO4k9d+:IADQj<I/!$Ei,DT[38R*ePDP%uZP-/*>%,O;4A(i41)/aNMQoE$Be.lkGQ1]E5EhAm^;*g4g7LQu.!Qb-Wt2B_N:?qg">c%=WK:`lXgs01%km$4Z`E^67[?L:OMGgMR04"YA"kbN!ISqCc-)(A/=b3%[<2T<T`@\6hL]B\'2b:_k?KUec.S\seiJd.Acpd"FZ1qjP]frZ`"-E6j]j,r32*s]0e0m/VVW^+$KR$HSa!Tfk2;-VJVGo1h>AZb58e7%a)DY#ic&/(\-%1FkY)<dD,p5dK&STZPFa<7?bD";::l4J?Md(^mEb_.;B/U.@r"&l%^l]YD$A;E4[Jk=_d<\+[OugK9s>UpgD`jIPA4$#;f-=FCn1QTODQb5`3K&]5;iHroigtM!Wt-#aeP1fZIa"*E8.,Yi!k=J/O*[SRD'%tiagXc._g:6HDVW2m7D8qI3fZ3`4\b..D[MaglE_JhnHk9Rpuke84XaC<[8f]e$6_(3rTG/m':ScV0+oBdCcS.2(EMQo?2S?WR:^FEd8g7F]9hQ],4ErPpcSbb1164W"d2u0,r&$Ee2N9Pb1uRI[ZPmdk&YfWW5YqX/J[aX-h(lRk%WA[8[$FeG2N[U!rI3gK5`b7bdgjP+p[=HMZ.G-mfA(<)m(Qg"Ha5`+R-('Znc<`A4.d?0(\<D#iYhOP#n5)_.0"[PA$:O:4RGMAHOf8:Q6VY>BhWrr_b>^eO~>endstream
|
||||||
|
endobj
|
||||||
|
127 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 532
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gat='a\K`=%)(gSHn:p#A'Z'5U[/%^5fALP"@EL&.C>fH5#*#b2!en?9K[dmfs*[GOr%0fRgHlJ!o!qc8<DU-C7ue2L&E9CNj(uV0;Lo:c>*?72:L2.UaK^f#SgS.4:#RJed/TZPVZ#OcmBN]A>,%kAc_<X=gD9iKW#&_UB@J.,B-XhoH>^g<+dDUP9g<4J&dL>,7p4>hF1O_5k4osAuTpuX3j:EKlf*LL[8>NKJ.J5N!3s<s3MeAVtm9lgnpEtqmntI^BfX2ooVJ*kO5DranDRuPPmq4^(]\V+4ZGDXN8gEN*`gE!7sUKNip[9L0&!m>JmA#&#MHj:MFg`o,bS((f(rV#3iW'ZTKhF7G*13I/9:!2P7a;q'TmJnFI1t:JMj^mXB-m#m7C"K0O)4R]S;L<Y!eHQYXXI_6jiHbO@r73S7Lrd&:N*9&@]mnW^E(!gi>?;7k.9h9\VnDkuM7O2<m]E`5S\E#R,,kjH\PqPl9ef&PCtT-5j97Ls$_61h&@AWI(?S#:J4iXid(-#`bp~>endstream
|
||||||
|
endobj
|
||||||
|
xref
|
||||||
|
0 128
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000061 00000 n
|
||||||
|
0000000146 00000 n
|
||||||
|
0000000253 00000 n
|
||||||
|
0000000365 00000 n
|
||||||
|
0000000512 00000 n
|
||||||
|
0000000657 00000 n
|
||||||
|
0000000805 00000 n
|
||||||
|
0000000953 00000 n
|
||||||
|
0000001100 00000 n
|
||||||
|
0000001247 00000 n
|
||||||
|
0000001395 00000 n
|
||||||
|
0000001542 00000 n
|
||||||
|
0000001691 00000 n
|
||||||
|
0000001839 00000 n
|
||||||
|
0000001987 00000 n
|
||||||
|
0000002136 00000 n
|
||||||
|
0000002284 00000 n
|
||||||
|
0000002433 00000 n
|
||||||
|
0000002580 00000 n
|
||||||
|
0000002729 00000 n
|
||||||
|
0000002877 00000 n
|
||||||
|
0000003026 00000 n
|
||||||
|
0000003175 00000 n
|
||||||
|
0000003323 00000 n
|
||||||
|
0000003471 00000 n
|
||||||
|
0000003620 00000 n
|
||||||
|
0000003769 00000 n
|
||||||
|
0000003918 00000 n
|
||||||
|
0000004066 00000 n
|
||||||
|
0000004214 00000 n
|
||||||
|
0000004362 00000 n
|
||||||
|
0000004510 00000 n
|
||||||
|
0000004657 00000 n
|
||||||
|
0000004806 00000 n
|
||||||
|
0000004954 00000 n
|
||||||
|
0000005102 00000 n
|
||||||
|
0000005251 00000 n
|
||||||
|
0000005400 00000 n
|
||||||
|
0000005548 00000 n
|
||||||
|
0000005696 00000 n
|
||||||
|
0000005844 00000 n
|
||||||
|
0000005992 00000 n
|
||||||
|
0000006141 00000 n
|
||||||
|
0000006288 00000 n
|
||||||
|
0000006435 00000 n
|
||||||
|
0000006584 00000 n
|
||||||
|
0000006733 00000 n
|
||||||
|
0000006881 00000 n
|
||||||
|
0000007030 00000 n
|
||||||
|
0000007179 00000 n
|
||||||
|
0000007295 00000 n
|
||||||
|
0000007401 00000 n
|
||||||
|
0000007485 00000 n
|
||||||
|
0000007563 00000 n
|
||||||
|
0000007771 00000 n
|
||||||
|
0000008319 00000 n
|
||||||
|
0000008527 00000 n
|
||||||
|
0000008735 00000 n
|
||||||
|
0000008943 00000 n
|
||||||
|
0000009151 00000 n
|
||||||
|
0000009359 00000 n
|
||||||
|
0000009567 00000 n
|
||||||
|
0000009775 00000 n
|
||||||
|
0000009983 00000 n
|
||||||
|
0000010191 00000 n
|
||||||
|
0000010399 00000 n
|
||||||
|
0000010487 00000 n
|
||||||
|
0000010806 00000 n
|
||||||
|
0000010882 00000 n
|
||||||
|
0000011041 00000 n
|
||||||
|
0000011152 00000 n
|
||||||
|
0000011284 00000 n
|
||||||
|
0000011394 00000 n
|
||||||
|
0000011539 00000 n
|
||||||
|
0000011658 00000 n
|
||||||
|
0000011836 00000 n
|
||||||
|
0000011934 00000 n
|
||||||
|
0000012046 00000 n
|
||||||
|
0000012157 00000 n
|
||||||
|
0000012312 00000 n
|
||||||
|
0000012436 00000 n
|
||||||
|
0000012610 00000 n
|
||||||
|
0000012724 00000 n
|
||||||
|
0000012863 00000 n
|
||||||
|
0000012961 00000 n
|
||||||
|
0000013148 00000 n
|
||||||
|
0000013276 00000 n
|
||||||
|
0000013409 00000 n
|
||||||
|
0000013555 00000 n
|
||||||
|
0000013747 00000 n
|
||||||
|
0000013867 00000 n
|
||||||
|
0000013992 00000 n
|
||||||
|
0000014103 00000 n
|
||||||
|
0000014242 00000 n
|
||||||
|
0000014377 00000 n
|
||||||
|
0000014501 00000 n
|
||||||
|
0000014669 00000 n
|
||||||
|
0000014763 00000 n
|
||||||
|
0000014871 00000 n
|
||||||
|
0000014971 00000 n
|
||||||
|
0000015163 00000 n
|
||||||
|
0000015290 00000 n
|
||||||
|
0000015412 00000 n
|
||||||
|
0000015543 00000 n
|
||||||
|
0000015668 00000 n
|
||||||
|
0000015798 00000 n
|
||||||
|
0000015956 00000 n
|
||||||
|
0000016058 00000 n
|
||||||
|
0000016213 00000 n
|
||||||
|
0000016352 00000 n
|
||||||
|
0000016492 00000 n
|
||||||
|
0000016627 00000 n
|
||||||
|
0000016767 00000 n
|
||||||
|
0000016879 00000 n
|
||||||
|
0000016976 00000 n
|
||||||
|
0000017119 00000 n
|
||||||
|
0000018142 00000 n
|
||||||
|
0000020032 00000 n
|
||||||
|
0000020264 00000 n
|
||||||
|
0000020495 00000 n
|
||||||
|
0000024285 00000 n
|
||||||
|
0000027593 00000 n
|
||||||
|
0000030455 00000 n
|
||||||
|
0000032899 00000 n
|
||||||
|
0000035974 00000 n
|
||||||
|
0000039956 00000 n
|
||||||
|
0000043719 00000 n
|
||||||
|
trailer
|
||||||
|
<<
|
||||||
|
/ID
|
||||||
|
[<f7bcafe2c14a6b5bdfecf76226921bd0><f7bcafe2c14a6b5bdfecf76226921bd0>]
|
||||||
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
|
/Info 67 0 R
|
||||||
|
/Root 66 0 R
|
||||||
|
/Size 128
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
44343
|
||||||
|
%%EOF
|
||||||
@@ -142,7 +142,7 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
23 0 obj
|
23 0 obj
|
||||||
<<
|
<<
|
||||||
/Author (Android Cast project) /CreationDate (D:20260623115606+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115606+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
/Author (Android Cast project) /CreationDate (D:20260626184404+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260626184404+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
/Subject (\(unspecified\)) /Title (Crash console \204 open ingest API \(design\)) /Trapped /False
|
/Subject (\(unspecified\)) /Title (Crash console \204 open ingest API \(design\)) /Trapped /False
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
@@ -289,7 +289,7 @@ xref
|
|||||||
trailer
|
trailer
|
||||||
<<
|
<<
|
||||||
/ID
|
/ID
|
||||||
[<17f9a5b944b42ce125306ff3734bcaaa><17f9a5b944b42ce125306ff3734bcaaa>]
|
[<c12702ff83f02932bafed0a50a05e9a6><c12702ff83f02932bafed0a50a05e9a6>]
|
||||||
% ReportLab generated PDF document -- digest (opensource)
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
/Info 23 0 R
|
/Info 23 0 R
|
||||||
|
|||||||
@@ -152,7 +152,7 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
24 0 obj
|
24 0 obj
|
||||||
<<
|
<<
|
||||||
/Author (Android Cast project) /CreationDate (D:20260623115606+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115606+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
/Author (Android Cast project) /CreationDate (D:20260626184404+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260626184404+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
/Subject (\(unspecified\)) /Title (Open tasks \204 dependency graph) /Trapped /False
|
/Subject (\(unspecified\)) /Title (Open tasks \204 dependency graph) /Trapped /False
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
@@ -208,10 +208,10 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
35 0 obj
|
35 0 obj
|
||||||
<<
|
<<
|
||||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 851
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 855
|
||||||
>>
|
>>
|
||||||
stream
|
stream
|
||||||
Gat=*a_oie&A@rkk*Q?,_r3'cdj5/)"%?[mVd9La:6\pT,W^YZ^6BUA95RfeA;_"Sn'0m3L*QhC&(^2L!q84#]*AIL&?Gm9&J-MO>;1DniQ"J4M=Mo,TX?,2qnh<^R8AraaanD<;=+D3P5,0QGb-oj4M&oO,gHPqPa)Wr.L4$T601oWJd?7CjsC6NQ@DO%c'X7,\;nY+WuX;=@K,g(Jl`4q@G\s`R?-br,ul+NNDrKs<s\c509m3](Q4Pn(CjVk/3<Y(de8:1:&YdBWebN)$9+'%p8E7%Ust'C\e`s?TKF$&(G3VYd68E9["<;^R!li5.2O?<Kn8p!j/eii(e.;\+Z5sDIX=?-bKTrC`;26m\qX9kk2fYJ@[OX-,R.SG3UHc$Eh.TmPdKlDB-02L8tC<XSTk[MfgKI/#pg3M;-h*;/)4r8O1C7QMI9gAe/R?XgCE\]p*D4YbiK2se7L/bYJW1JG@l39o"Z=\V[iHbH&p-.9.p[fJf=rjlH*K0;OGflW=Xcl^U,B\:3XK%;fh5QhLKK$3=LhM[#efq]QTe-KF(?H1hm)$HJl,T=D,)\;6*UhpNlpgnk>A3h71pGGM1kqm_hN`2Aq;^:6*]LN`sip`,Q-0OZaMX/-c;R%`-b5[7s>0_=$k+\gR+4Kp`b>D<nVGCVXO0>l8R@f,=+G(=HJkHL91*GH6;0a.kk5Ni))_"3]CdgBQBrVQGEO+_QV2X$bX[)RAXWco08Uj``t=K@(]qD@ih#:^oa5&>DJ[%YD03F_)R)..hu9.bsRS0\=?dQSjJS..m"*]L3,qXe=SF:/@L\O5mR3'9[-_T%ea_,SJM*Dk/fmGG%!R!4.0o#DS$~>endstream
|
Gat=*>Aoub(k'`6p`@%>EW,\?O4i*-g8afY[&6J1$;O5q+9g1Bs*f]eE*5LM,/M.i3T'Ask6h@!&!lZQ"Rt)sM^np@i%4s5&`DK\V)N[hi($QdM/jjVTX?,2]>EQD1SG<=Oos[GU=oXB-$'5VqD>II\-o(JMeiY'.#SXq'`jD;K$'f9GQF>jY"T87TDcmi2e*a-@k.To0/i<aqQ&dTi4XYb%b!>]b.P405,emGXJJOHY!V?<?)a@8X]R,R><?LqE<BiTBbJ8Lh;usQD`7VMJ%U5th0gMF;!I6W+uNeh/ql,D.*#M**Dqd_g3YuB$Q,4rfd.&pZ<g'm%4ogWBCSrL(u<f!P_9+LAVHl!RGCetol4;\$ElG7b>0mfT=8&W%%K(7f`+U`<q>WWd^#mB@B<W@AU_2Ej9j/tiClRp6r6j\0`U]Nf;?I@6l1^:1DK*_#`-`UZZZ8;U]\VW!d1"\1!Gr4lt79D5.pI%*TC"Uqn]q#=d[.JKqH/?4]:rd)nr,fc`L.Pr4G,!Hh<=/^aN,[C4B!>DDg.&)aDLh8qM""0#e<-I&'%1&EAaGVLFrhB#%T8]"?i-i1idt2t&(&o?HfMj1-BJK^5SW+WTmr4<HDTj,(Yj<b_,hROmb:4PGCja^Q9Y3/;mf)PDF6s!fnTe@_pNergunP<C)'g],HM3(s]oY9fb1iS*-ni:$*tO6WL>pj@d@fgM;=ZrKg>*?/8o&/A9%AeV5eMYf]GM:O)a"`eC;DF&B(:b@@#&Yasj21i:K]V2AXX$WK+gIWo7]8p^.pP1A:$5HG%@'t69(5Q-[\*TWV/l<_2B-ScLf*!,+s"[.kU/To"cO_]o[1WKerr@"-HY!~>endstream
|
||||||
endobj
|
endobj
|
||||||
36 0 obj
|
36 0 obj
|
||||||
<<
|
<<
|
||||||
@@ -286,15 +286,15 @@ xref
|
|||||||
0000223654 00000 n
|
0000223654 00000 n
|
||||||
0000223780 00000 n
|
0000223780 00000 n
|
||||||
0000223876 00000 n
|
0000223876 00000 n
|
||||||
0000224818 00000 n
|
0000224822 00000 n
|
||||||
0000225538 00000 n
|
0000225542 00000 n
|
||||||
0000225766 00000 n
|
0000225770 00000 n
|
||||||
0000225994 00000 n
|
0000225998 00000 n
|
||||||
0000229045 00000 n
|
0000229049 00000 n
|
||||||
trailer
|
trailer
|
||||||
<<
|
<<
|
||||||
/ID
|
/ID
|
||||||
[<ec45184a6869623d65b73cee381b9d72><ec45184a6869623d65b73cee381b9d72>]
|
[<7a84381d4efe58b11f1f4353e8a1e0ad><7a84381d4efe58b11f1f4353e8a1e0ad>]
|
||||||
% ReportLab generated PDF document -- digest (opensource)
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
/Info 24 0 R
|
/Info 24 0 R
|
||||||
@@ -302,5 +302,5 @@ trailer
|
|||||||
/Size 41
|
/Size 41
|
||||||
>>
|
>>
|
||||||
startxref
|
startxref
|
||||||
231128
|
231132
|
||||||
%%EOF
|
%%EOF
|
||||||
|
|||||||
@@ -163,7 +163,7 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
27 0 obj
|
27 0 obj
|
||||||
<<
|
<<
|
||||||
/Author (Android Cast project) /CreationDate (D:20260623115606+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115606+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
/Author (Android Cast project) /CreationDate (D:20260626184404+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260626184404+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
/Subject (\(unspecified\)) /Title (Opus / Speex / stream protection \204 validation checklist \(task 3\)) /Trapped /False
|
/Subject (\(unspecified\)) /Title (Opus / Speex / stream protection \204 validation checklist \(task 3\)) /Trapped /False
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
@@ -333,7 +333,7 @@ xref
|
|||||||
trailer
|
trailer
|
||||||
<<
|
<<
|
||||||
/ID
|
/ID
|
||||||
[<1cd619210883038fac0702297f0173e6><1cd619210883038fac0702297f0173e6>]
|
[<2f6142b0e36347c770d4b994c2ae110c><2f6142b0e36347c770d4b994c2ae110c>]
|
||||||
% ReportLab generated PDF document -- digest (opensource)
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
/Info 27 0 R
|
/Info 27 0 R
|
||||||
|
|||||||
4
OTA.pdf
4
OTA.pdf
@@ -142,7 +142,7 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
23 0 obj
|
23 0 obj
|
||||||
<<
|
<<
|
||||||
/Author (Android Cast project) /CreationDate (D:20260623115606+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115606+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
/Author (Android Cast project) /CreationDate (D:20260626184404+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260626184404+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
/Subject (\(unspecified\)) /Title (Over-the-air \(OTA\) updates \204 deployment schema **v0**) /Trapped /False
|
/Subject (\(unspecified\)) /Title (Over-the-air \(OTA\) updates \204 deployment schema **v0**) /Trapped /False
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
@@ -290,7 +290,7 @@ xref
|
|||||||
trailer
|
trailer
|
||||||
<<
|
<<
|
||||||
/ID
|
/ID
|
||||||
[<bfaafcc416205de30349560cb8ea8f8f><bfaafcc416205de30349560cb8ea8f8f>]
|
[<3509cc3417159075b87375494b8de57e><3509cc3417159075b87375494b8de57e>]
|
||||||
% ReportLab generated PDF document -- digest (opensource)
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
/Info 23 0 R
|
/Info 23 0 R
|
||||||
|
|||||||
@@ -127,7 +127,7 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
20 0 obj
|
20 0 obj
|
||||||
<<
|
<<
|
||||||
/Author (Android Cast project) /CreationDate (D:20260623115606+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115606+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
/Author (Android Cast project) /CreationDate (D:20260626184404+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260626184404+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
/Subject (\(unspecified\)) /Title (Pro / OSS split \(cast-core + cast-pro AAR\)) /Trapped /False
|
/Subject (\(unspecified\)) /Title (Pro / OSS split \(cast-core + cast-pro AAR\)) /Trapped /False
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
@@ -259,7 +259,7 @@ xref
|
|||||||
trailer
|
trailer
|
||||||
<<
|
<<
|
||||||
/ID
|
/ID
|
||||||
[<a4eb65ee35e6b29ba7d315a4876585ed><a4eb65ee35e6b29ba7d315a4876585ed>]
|
[<dc1c0dedc7b9dee00a0ee692ee732c53><dc1c0dedc7b9dee00a0ee692ee732c53>]
|
||||||
% ReportLab generated PDF document -- digest (opensource)
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
/Info 20 0 R
|
/Info 20 0 R
|
||||||
|
|||||||
287
README.pdf
287
README.pdf
@@ -2,7 +2,7 @@
|
|||||||
%“Œ‹ž ReportLab Generated PDF document (opensource)
|
%“Œ‹ž ReportLab Generated PDF document (opensource)
|
||||||
1 0 obj
|
1 0 obj
|
||||||
<<
|
<<
|
||||||
/F1 2 0 R /F2 3 0 R /F3 15 0 R /F4 16 0 R /F5 17 0 R
|
/F1 2 0 R /F2 3 0 R /F3 5 0 R /F4 6 0 R
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
2 0 obj
|
2 0 obj
|
||||||
@@ -17,77 +17,22 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
4 0 obj
|
4 0 obj
|
||||||
<<
|
<<
|
||||||
/Border [ 0 0 0 ] /Contents () /Dest [ 18 0 R /Fit ] /Rect [ 45.68504 762.0394 95.92504 773.0394 ] /Subtype /Link /Type /Annot
|
/Border [ 0 0 0 ] /Contents () /Dest [ 7 0 R /Fit ] /Rect [ 45.68504 762.0394 124.389 773.0394 ] /Subtype /Link /Type /Annot
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
5 0 obj
|
5 0 obj
|
||||||
<<
|
<<
|
||||||
/Border [ 0 0 0 ] /Contents () /Dest [ 18 0 R /Fit ] /Rect [ 45.68504 751.0394 95.03704 762.0394 ] /Subtype /Link /Type /Annot
|
/BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
6 0 obj
|
6 0 obj
|
||||||
<<
|
<<
|
||||||
/Border [ 0 0 0 ] /Contents () /Dest [ 18 0 R /Fit ] /Rect [ 45.68504 740.0394 99.91704 751.0394 ] /Subtype /Link /Type /Annot
|
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
7 0 obj
|
7 0 obj
|
||||||
<<
|
<<
|
||||||
/Border [ 0 0 0 ] /Contents () /Dest [ 18 0 R /Fit ] /Rect [ 45.68504 729.0394 74.14104 740.0394 ] /Subtype /Link /Type /Annot
|
/Contents 15 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 14 0 R /Resources <<
|
||||||
>>
|
|
||||||
endobj
|
|
||||||
8 0 obj
|
|
||||||
<<
|
|
||||||
/Border [ 0 0 0 ] /Contents () /Dest [ 18 0 R /Fit ] /Rect [ 59.68504 718.6019 142.6425 728.6019 ] /Subtype /Link /Type /Annot
|
|
||||||
>>
|
|
||||||
endobj
|
|
||||||
9 0 obj
|
|
||||||
<<
|
|
||||||
/Border [ 0 0 0 ] /Contents () /Dest [ 18 0 R /Fit ] /Rect [ 59.68504 708.6019 132.21 718.6019 ] /Subtype /Link /Type /Annot
|
|
||||||
>>
|
|
||||||
endobj
|
|
||||||
10 0 obj
|
|
||||||
<<
|
|
||||||
/Border [ 0 0 0 ] /Contents () /Dest [ 18 0 R /Fit ] /Rect [ 59.68504 698.6019 106.38 708.6019 ] /Subtype /Link /Type /Annot
|
|
||||||
>>
|
|
||||||
endobj
|
|
||||||
11 0 obj
|
|
||||||
<<
|
|
||||||
/Border [ 0 0 0 ] /Contents () /Dest [ 18 0 R /Fit ] /Rect [ 59.68504 688.6019 107.2125 698.6019 ] /Subtype /Link /Type /Annot
|
|
||||||
>>
|
|
||||||
endobj
|
|
||||||
12 0 obj
|
|
||||||
<<
|
|
||||||
/Border [ 0 0 0 ] /Contents () /Dest [ 18 0 R /Fit ] /Rect [ 59.68504 678.6019 125.97 688.6019 ] /Subtype /Link /Type /Annot
|
|
||||||
>>
|
|
||||||
endobj
|
|
||||||
13 0 obj
|
|
||||||
<<
|
|
||||||
/Border [ 0 0 0 ] /Contents () /Dest [ 18 0 R /Fit ] /Rect [ 45.68504 668.0394 102.165 679.0394 ] /Subtype /Link /Type /Annot
|
|
||||||
>>
|
|
||||||
endobj
|
|
||||||
14 0 obj
|
|
||||||
<<
|
|
||||||
/Border [ 0 0 0 ] /Contents () /Dest [ 18 0 R /Fit ] /Rect [ 45.68504 657.0394 109.701 668.0394 ] /Subtype /Link /Type /Annot
|
|
||||||
>>
|
|
||||||
endobj
|
|
||||||
15 0 obj
|
|
||||||
<<
|
|
||||||
/BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
|
|
||||||
>>
|
|
||||||
endobj
|
|
||||||
16 0 obj
|
|
||||||
<<
|
|
||||||
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font
|
|
||||||
>>
|
|
||||||
endobj
|
|
||||||
17 0 obj
|
|
||||||
<<
|
|
||||||
/BaseFont /Symbol /Name /F5 /Subtype /Type1 /Type /Font
|
|
||||||
>>
|
|
||||||
endobj
|
|
||||||
18 0 obj
|
|
||||||
<<
|
|
||||||
/Contents 39 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 38 0 R /Resources <<
|
|
||||||
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
>> /Rotate 0 /Trans <<
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
@@ -95,10 +40,9 @@ endobj
|
|||||||
/Type /Page
|
/Type /Page
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
19 0 obj
|
8 0 obj
|
||||||
<<
|
<<
|
||||||
/Annots [ 4 0 R 5 0 R 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R
|
/Annots [ 4 0 R ] /Contents 16 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 14 0 R /Resources <<
|
||||||
14 0 R ] /Contents 40 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 38 0 R /Resources <<
|
|
||||||
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
>> /Rotate 0
|
>> /Rotate 0
|
||||||
/Trans <<
|
/Trans <<
|
||||||
@@ -106,9 +50,9 @@ endobj
|
|||||||
>> /Type /Page
|
>> /Type /Page
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
20 0 obj
|
9 0 obj
|
||||||
<<
|
<<
|
||||||
/Contents 41 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 38 0 R /Resources <<
|
/Contents 17 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 14 0 R /Resources <<
|
||||||
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
>> /Rotate 0 /Trans <<
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
@@ -116,212 +60,83 @@ endobj
|
|||||||
/Type /Page
|
/Type /Page
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
21 0 obj
|
10 0 obj
|
||||||
<<
|
<<
|
||||||
/Contents 42 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 38 0 R /Resources <<
|
/Outlines 12 0 R /PageMode /UseNone /Pages 14 0 R /Type /Catalog
|
||||||
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
|
||||||
>> /Rotate 0 /Trans <<
|
|
||||||
|
|
||||||
>>
|
|
||||||
/Type /Page
|
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
22 0 obj
|
11 0 obj
|
||||||
<<
|
<<
|
||||||
/Contents 43 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 38 0 R /Resources <<
|
/Author (Android Cast project) /CreationDate (D:20260626184405+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260626184405+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
/Subject (\(unspecified\)) /Title (ac-docs) /Trapped /False
|
||||||
>> /Rotate 0 /Trans <<
|
|
||||||
|
|
||||||
>>
|
|
||||||
/Type /Page
|
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
23 0 obj
|
12 0 obj
|
||||||
<<
|
<<
|
||||||
/Contents 44 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 38 0 R /Resources <<
|
/Count 1 /First 13 0 R /Last 13 0 R /Type /Outlines
|
||||||
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
|
||||||
>> /Rotate 0 /Trans <<
|
|
||||||
|
|
||||||
>>
|
|
||||||
/Type /Page
|
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
24 0 obj
|
13 0 obj
|
||||||
<<
|
<<
|
||||||
/Outlines 26 0 R /PageMode /UseNone /Pages 38 0 R /Type /Catalog
|
/Dest [ 7 0 R /Fit ] /Parent 12 0 R /Title (Developer onboarding)
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
25 0 obj
|
14 0 obj
|
||||||
<<
|
<<
|
||||||
/Author (Android Cast project) /CreationDate (D:20260623115606+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115606+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
/Count 3 /Kids [ 7 0 R 8 0 R 9 0 R ] /Type /Pages
|
||||||
/Subject (\(unspecified\)) /Title (Android Cast \204 documentation index) /Trapped /False
|
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
26 0 obj
|
15 0 obj
|
||||||
<<
|
<<
|
||||||
/Count 12 /First 27 0 R /Last 37 0 R /Type /Outlines
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 291
|
||||||
>>
|
|
||||||
endobj
|
|
||||||
27 0 obj
|
|
||||||
<<
|
|
||||||
/Dest [ 18 0 R /Fit ] /Next 28 0 R /Parent 26 0 R /Title (All documents)
|
|
||||||
>>
|
|
||||||
endobj
|
|
||||||
28 0 obj
|
|
||||||
<<
|
|
||||||
/Dest [ 18 0 R /Fit ] /Next 29 0 R /Parent 26 0 R /Prev 27 0 R /Title (Specifications)
|
|
||||||
>>
|
|
||||||
endobj
|
|
||||||
29 0 obj
|
|
||||||
<<
|
|
||||||
/Dest [ 18 0 R /Fit ] /Next 30 0 R /Parent 26 0 R /Prev 28 0 R /Title (Design reviews)
|
|
||||||
>>
|
|
||||||
endobj
|
|
||||||
30 0 obj
|
|
||||||
<<
|
|
||||||
/Count 5 /Dest [ 18 0 R /Fit ] /First 31 0 R /Last 35 0 R /Next 36 0 R /Parent 26 0 R
|
|
||||||
/Prev 29 0 R /Title (By topic)
|
|
||||||
>>
|
|
||||||
endobj
|
|
||||||
31 0 obj
|
|
||||||
<<
|
|
||||||
/Dest [ 18 0 R /Fit ] /Next 32 0 R /Parent 30 0 R /Title (Infrastructure and deploy)
|
|
||||||
>>
|
|
||||||
endobj
|
|
||||||
32 0 obj
|
|
||||||
<<
|
|
||||||
/Dest [ 18 0 R /Fit ] /Next 33 0 R /Parent 30 0 R /Prev 31 0 R /Title (Development process)
|
|
||||||
>>
|
|
||||||
endobj
|
|
||||||
33 0 obj
|
|
||||||
<<
|
|
||||||
/Dest [ 18 0 R /Fit ] /Next 34 0 R /Parent 30 0 R /Prev 32 0 R /Title (Alpha and QA)
|
|
||||||
>>
|
|
||||||
endobj
|
|
||||||
34 0 obj
|
|
||||||
<<
|
|
||||||
/Dest [ 18 0 R /Fit ] /Next 35 0 R /Parent 30 0 R /Prev 33 0 R /Title (Backend apps)
|
|
||||||
>>
|
|
||||||
endobj
|
|
||||||
35 0 obj
|
|
||||||
<<
|
|
||||||
/Dest [ 18 0 R /Fit ] /Parent 30 0 R /Prev 34 0 R /Title (Product and codecs)
|
|
||||||
>>
|
|
||||||
endobj
|
|
||||||
36 0 obj
|
|
||||||
<<
|
|
||||||
/Dest [ 18 0 R /Fit ] /Next 37 0 R /Parent 26 0 R /Prev 30 0 R /Title (Agent bootstrap)
|
|
||||||
>>
|
|
||||||
endobj
|
|
||||||
37 0 obj
|
|
||||||
<<
|
|
||||||
/Dest [ 18 0 R /Fit ] /Parent 26 0 R /Prev 36 0 R /Title (Maintaining TOCs)
|
|
||||||
>>
|
|
||||||
endobj
|
|
||||||
38 0 obj
|
|
||||||
<<
|
|
||||||
/Count 6 /Kids [ 18 0 R 19 0 R 20 0 R 21 0 R 22 0 R 23 0 R ] /Type /Pages
|
|
||||||
>>
|
|
||||||
endobj
|
|
||||||
39 0 obj
|
|
||||||
<<
|
|
||||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 836
|
|
||||||
>>
|
>>
|
||||||
stream
|
stream
|
||||||
Gat=*9on!^&A@Zck"&Rjlg\V.Uq:H>MB3P-SpH6Lfk*[9D$XtRpN6N\+,,e!$`r!0Dk>#0nK:Z_YkVQo!+.m6HpL"%hAT3%!T"f.hWW8k:Fh,Eb)oYRes]G'$B)7>KK>&b%YVHOC'TQ\bS:EJgW4Epfo-+gZ6gE]bY9dW)aMn@CWc%W(Vk86#AFeTnDnLDpr/VT+Be(U'5)b0-8C0n@/bTUmiB%GQo)W[l`4lhoI;,ldOQcX$DH:bol;7;MD:H8I7!OV3K.=n,_F!OqYXhmU7bK7@:!]c**nr802R]%U323"loa1ic8^T!Bpi8DO=BJr$)rLKKB:<]\VAL)CIg`>T\Yq_HCNU$LKNHr<VQ!?gV!G:7s+><(PRE=`!#u;QInKP4A&cc[H!.0pRm<lpD?f%fj'R`PXkpGFV"(>J$Up_juPO6muFMHVh[R>)k??%hauO306^75REYc][3,;#K@sPFH/SDd;hKF*p>OT"R+oLHi5Q8+HE\?[;KL':JY0?2p4D/["rLod6Ic3=LMf!%%J)]]7nF8p_pshX%(F`%"(Je#PDNX7\*7m6V/GIC!IXB3Q=b'`0K\'u2k2rb6+Dh64G8>M[*3iek]#Ml'*htDAomK+1nPeW#CGG*<+%t7puilL0RjpP-B7uK"mYRMpHBc2dmDbLUt%-4fhqu;c`_ds]h8+`#+!4BX\[<`0Wcq./\+34<t4gO<fuL?6%+Vk.(94t.u\@2FG3O#KW5TXJIiQJ2\<X!X!t);T[:`sb&QU*Ej)[ul843P.!2]+[mUU.@4GsbXbY@OlL],J@R5$/d'9R:8Knb;U6HWB4@1hM_<;tifm$6~>endstream
|
Gas2DcYC?O%#=:sMVg--<4-8[ZB#qt:YfHs0/+#"(kf3_rF'm'rFm*9@"BWiq^dK&_94ja^jX%Ba'_1nJ-,t>4bhCuGC8W`8hm:Q0Jd`5L\e0>aX-KB5s@eO$"PMG0M\fWS]Tb+6^]Gk^tK>D%3XXZZLbJ1-M/tOAibqo2^iSm\(FrPX3FS&^PjA#rYVWp*#\(T2Y*YV-Z3ttf</EGdI0iN):-4V_rF#RoO[V)?B$5`Jo;*/J_;6uq(0m;WUVa_bE@?hWAig9pF&YVS/0)8Z%]q*62([K9O2<~>endstream
|
||||||
endobj
|
endobj
|
||||||
40 0 obj
|
16 0 obj
|
||||||
<<
|
<<
|
||||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 614
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 396
|
||||||
>>
|
>>
|
||||||
stream
|
stream
|
||||||
Gatn$;/_pX'SYH9/'_Y6#8\><@;j8N8s<;X?$Y4`CRg'3fZZ=WqX8'1>&A+5GnI?t#[dAPot<D`8A_%[?1!23L!(tRb##3+1QnI.MH)P225A45N0Cp48Hp=@8^]@%hh>X)'J/>p86Y/4-pRoJAObW:Zg^ceMP1?VI:09(K<]uH;9A]9_lf]7n_3d;"0.ul4q?r60M_00j:$M6N2J)D%-^<T[k2?q%f8e;<_c)tla1EXNKV#\-3g"V;k]PhD`.ep5;`3k#0kGmpIY#:$/TibMLa.TLXHTin/&5E*nOoZ"nEJ9G-^l1T_uW?85l;7?#-&VUa4D]=m?7Jg2?+7FNuAl7hd+"V\Lq)]<*'^iH?8.0;bR!UtY(KQ<b;jq\b.[0D^[7Fm+H4HY$up@Pm0AA>Z[N.XuB=&,dog#WCjEZ*._KI(1*$61sVd9]En[;N]<,IQAT2;fN3Ol?GY=SDrr6:>JQ_;MaMa$nhfpZj3N$-[]:GQe*anYOR6"JR5Cn.FC%cfAk8i*?'R"jV7t9e#nJ`8rrtuFk6Amk-["N%5h0jl[&+S;'Ibf7?4kKZd@<P.nP1P$3-+5;aG(/p7?9@.4rP=/f64's2Dh@2fRZUg&~>endstream
|
Gat=f4`A1k&;KrWMK`ku(nX%PUg#?WC8HAilk4o$'X4PMi:#8(#dqHE<@?I_n*K5JP6j>UokUr>*X`Cr";3+p+N5%P-]ErD/"pILdO`X"="qWJ/oqcr`AHVCOBR7X4QRml1Krjs&EZQ3P>2tS.+XM(NXR'l_G*m&<Yg.=b.H69[^eisM;k[J^W*e':\d6Mnpi)uI>?>$LN[<3IU`JmS+na4CH)9GJ6#>^:7]2nAT7bBX2'SI1sre63!8eu#Hi*12+:VXOqE!h>Xcq$8qnjH_CLV:rJP%rsj5>UUDD.`Liah"L%cVntog).//WF]OI2_e/&`/?Tki+CUX9Pb^j~>endstream
|
Gatm:D/Ymt&H88.E?DNd2;#QRhm.p<R\D&2>%pk[7"^]-!bO^PC`iB*GEC0LRPZ[dJ6;N9T6p"O\MFC,+'SWg@t:a8866KR"*XcF,q?DLYh[O-%c(m")UV8R<l$IaU+&5?pRrE_dMFH(1iQrtE]K.07'd#\X!_+<\"<ek#_R]#(D)DuA'C.R01(f:XNT3ak0FDV^`jFH`$,dj=KLEo\3CQ5/XKRFgm1Uf[4QiOp5)a!mcTc*%6hC[)^^\k&P'#81S7O^W2[#'=e!I+i*TYug4Yf$nO8TVnp4"u[Zp\M^6bZ47o7crh6B/5o%1o9$=Gp-aq)lHdXA*AR0F%^YM..*DT7/hL)J;\ob6se>4]fgp_m&%[@o_$n1(g>M)umeRdm$Ak"Mnn488?2j2#1[dq,)=?H,p+j"I:R:Vo>)Z6XDi:;Kk:7rW(oDU/%)OtgGc^9!b^#nQhFO$jjSOk^=/$deNPK6hg=W<Tr62!bh-A;[5a;0ofiQp;(>oi-h<SHQF\MQ6=TUJ-G9W^+R4nJNLnB<.bB]2V<)Va>acDUR0'>buWK0'XLp`RU#KWq+.fVie9/[7p\XfL2l;6`[AT)1)DJQ2A0\1#JH8VD*V"kT&7>@ts0,\"K5fb9OXV&PYF*,(8L-F_?[\;p4kSbIsJ+.6m1NkuMWu4$i52(D-E:=>GcarpkiTUo33R?/`r7S86Fhhg'k%A8E:J8o<k,KjJ%^N44;`6,`^)h+.p9_Mg4E?1.\a<Umj[s&*>b!glJ%iUAD(LIEJ[56q6FcO.JGeoiBO+pX>%Y]'R27fB;J3A.5-S*Vf5Hc%>W$^(CB<S7Ql$b5B=1Zrn250>Y3X`L#F[RO3A[Vft7a7V@`ROLb;Ge1`G2"8[-8\gs+^>ea>#e_hY.^:'b(Rof$d).Q;B=Wg)Zn9o"qVr`F3ge]*p5e6sGcJ<RTBCG?KDYcXn\>eXn"sU:G+<>!U3#kCZemjgI`LniLR?:^2%&`urmno7r*21MppE$?/-;^^aN\l'c*I8If?i.ZK:T"c^f`8)DU]6UX;51SC'\cZ$ZOZ.i*-SnTelm3gB\Y^D5(?WH^S]\h<_`lkc.;bK3"P:<$6ofWM)\+I'*+m"U3;_jh?jU9eco2d3;mU1eQ$X1=T;h!p*/)T^r\F!l(Z~>endstream
|
||||||
endobj
|
|
||||||
42 0 obj
|
|
||||||
<<
|
|
||||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 322
|
|
||||||
>>
|
|
||||||
stream
|
|
||||||
GarnQ4`>s,'\rL!2j,Y2Gf7VIg8H)\3`Pd>,m?5I#W;ibrdKEq;-TkXak$(>48Fnu%%uk//)XH<EDN5Aq@1@\LYgra8+.%\Q!COeM1e5G`Pcf9LV876-G%l#K*,CQ;^S0<a\kinanW)+]KY#]`""0\8d#Z3)`N`Qc5)/n`T4j]2mFrp>udZ/iF!\C_4^:C<uDgYN?;t]lsAjWG>7Cm3HhPjjkG<`>uMNQGGlJP@85WsB5@d#KYA>a4:eq?8MHQO3C`j8O>8*qqA(d,M.D@UpK%llfIN8YHi29O=@u%T.\qY&+uM4mF"EFOqC/.7[9I6g~>endstream
|
|
||||||
endobj
|
|
||||||
43 0 obj
|
|
||||||
<<
|
|
||||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3687
|
|
||||||
>>
|
|
||||||
stream
|
|
||||||
Gb!;&CNJ3#np>gSJ%BZD!Gb.kJp\4S4'Wn9^r^GYX&QAA5T:lOH=/hLrd#h$&dH%T>BO#MfGT#!k=e+;Rt-#R,l2@q!I>-`]d#cj/65$3Q3<*XBT!CNI3=<9;S+6!g4BHbU9k'./)g46N*dh:/j`sN"\STWDsqAH?:@Zk]J\KC[LGm]%(FFer/\)W',J?&.M);qU*Opo5A>`q#Ur(lTgQf-#VE;3$VCY-8t0uMJp9L>pbbn\Oi;3r&h684Lu:!irJ!<-cZ,!s>h[Ya&5$p@p\6=3.E3o2FYH`lN*5Ao^eDB-6Hlf(;gZl)jY1&m@2AHGN>5m9XMZUOb8MnJHs)4BbiH(L$8@[&%^09+]6,g:j^QH^`A:kS=Y.!(+a#>,KOP=4lPNGI[\$gFI-kD/M04bI9@tlS>t+a[JeGV(qT]t:kf[Z+(Q[E1l\R'7`!M/N7rU7DGi#K]Q\r-r$Z[i[o5M<!]XK]Pl0n6=Os?%;/O>Pq8Q#S[OXs=WVL?p*F%r:Q5O1DWh7:7.qmmkjeClNJ#[Eqs`+^jWeo6pg\uco*0MI]+5!7YK^V<34DHE.K5b/CW5!m+clRFF+K.,@$JC:6;C(m#?m,llI7_2;=$oZ@qmCneu^H-(g;hLA$]boVSEn9_Al="Q*JS,+OleE[SW!^H!D%,'OIaHjeHhR(d<rl:%WIU#3Ni&FKI6&<BB#DSaS!Ofc8FSd5mP0DmZ5Lm=n,qgH5qU]pJiD?8L(b.k(qW)=Kbes.<:72$;(58MI:cdfg_Y`kIKO&Mm#5=NTFN0q<_!ZRK/WTblt^Y_O/QqV/'fWAPNl+o)YhP2>:,!)Z"q/3YcVJY$G[12+@MX\GE8[Y[^XlsWb:]:Du$]fY#8Ktq-p5#@t!i+T'?E[pNU%;mMZf.Aq5V*)*MSJ@2Ws,i:!&$.p#6@-Pm@-K9d1K18-$AgI)T]nUd,)(#9U/*mNu&B`s1XXoV>+!\`mX*et3mgX*<>kh-iC5=I+^"h@3XPa)E4q3">a;GST<d#lLZm4hrYX=a$<_e/c9=iWTATOZ]A;q*PO>ps4n:4SirJS@f$r\/r;%qEM`N'XWJM^&mf*iuH9!=-Xf*?9]?2NOpsQd=i$_cRg=F=g'eF;*om=RIcu`@.$rW2^*+aBb+\:CZBIK3L(CqE1hK)#MDnn=YAOXdu?$=uB^0<^pa-\abb^%n^gUQqu3bj^bDe@D6`p!(Q6Tn6P&ZQlBZ:YVGG58;L/\h:,0?'s;ka;nqQ-O6UDgpd9Nr+gq,n3;H`QcGDR8mYIq$J2nRd0cA:Si?9Cco<7qMq?]<;Zc"hZa5:ARZh?L.>!$>#%a-eGNUZKu*"C8Y:IgU5b)'>n#,]C):kV#Y2%3W'T$L(GC'1%pbN<i6Y2d-]c7R_pG&o;]W?+S+POVbEonVh2P^#&6%+q0)mZ)S;[1T'=2jQY__GHdii3([T^<&q=R+7h.R#94sl"%6LB'#hg:.9;1kABO>(nNk-ha!"+0pXrfh!Hd9I5]HLc8%W3+P!75rG\IfN@*Q+M06aDrp'/=]QP76.uCS4ZAk$no>#?m*bQJd)OtYjqUiTAC,<at:V:\"Q1^#03&KthnWKrIG,MX'B'Pr`<RpiXmKOU=C-&5>]+'KMI:qs'TUb;Ie*UY=iGKe_k&]^-mhmXn1%=%gQHtbY/W-#JXOOCFFSPNH<\B]h5X+krAS=PY<IcqPk$W,"i#Z10lb]39[!Xt6Ppb:OZf[<5#E6jiStW&>@#%SfF#O=e*?G@@hlQBSJ6:qs+Bom_[BDW'Luf=L*Ig;bo'!"i#%+0Y-KaP]!s6]dedTo`UOX:!H5N2)1LE7B^&$pO/_'T_\W2GnqRN,`2<aBD>2JaupcS9>T^.t`nGu/[0P2AliC,@oW1;sCVN5eH51R%?khe)S(oW@uWC@n;]?n<`mhgC?Vu8TB*Xf!=LQ3fIqARmZWE,Ulh9&k8LA=`!e\[8=)ihgPY`1S#$t(_FYXEZ9'cpO@S`>LE!q0UnN+-WHHEG;OX]%6\REd.jWg8RXeZkS\NLH`&.K1nes$q\BP/AKr[K>A?@oJU2HBsP)iAsak\T1.qe&IT*VQ5+rM!+VR4=um]<@@Fpo%8A(GY?[&YdQV4%r$#!fWLagA-JuXl`--f=\e`!rQu2ScjCTs'gE\TcJ\.pH*U#,1T&hn*K8N_.8d*T+/2W,.OBOmn1Y*+StY.f2QS_ea5W2Zl=?KAq<s7-rQ'JcWQN.gf`.Ztk'@b>CJ_8iV%*?43RWG)[%2cB#(^3#U95suf">Jh.qE'S>$%!cj1M:>*fPl#?_&iBVJqf]8o-X-ghNI3'*I:6n/,2k-lFee$lDbg1!1Gqca0!D1KL@OD>FtTc1+3:=/U-<nF@olN:!-;%/Mp^qt!1U6PZRpi;E'1r^3^q01jcAHYN]RV%*#%,btH-k$oRB0t$*M,2VufKB*\$hV(_WE1)5E.0IFu!hpqB_IWc]3Z/J]O!*;B:4`0q!Hi&[KZaL_AY,cdVci.rMKtY%Su.mQ=lsFUH(&<9VO/`6k"1GUP%C5\R-1$t1^KESW%DXI\4f.ck"P8U!YR<Ci6)6k1>:[0"=.Nb_3[Yg2ku?"8Jaug(!9)]E^gZ38It3I)VQPjL`%Lph3;c_VG2o8Q1=pJZl@m[Y(U>*4R*Gi2`$k'&\CY.;2B8(TC4[/Xfe#nQg#)gES^l*>16YXAe^Yj#@9gH4V904GIc@mc43KPlp;L`#Q.b4\l;M,fp8e$qcCDXeH6X'Lk%dDkb9,E[dNb]@LQUMV0H/BZ060cJqQVAL5T4?=MOOd^ENETQ14Y(EkV/!'+o^.^a)+dRL5L)20D6.U@\?i0*_ElOF#1-j9O1PIQ[S`]iMVXBb@0fbAkpTAV8LtLm!.."%L[K6UeIALn7Kemai5d/^dKoPR@?>jnYO-hmtr;;rG,;ci7PF?Cpj>RaM!Sos:L[opU?<3ppAJZdnC4?h1PRa^tEejBn8<>Jdu^@BaHrDhi*Z4kFQrHFAa(lLOmfp$05f6^?Q>P</C1Te)@LchBB0kCs"AlAW42rI:c_T?ZPk+XR=H+]LC]<]eoA"g=QKMsQ(DMJg!uAl:e!T3q6(MfJD3Wp9Hn*I&Rs^-b;dkrSNBoVMi-8#%jM>J#G$^MdpnpIG3uG)`"<P.796%(1u-0fq'/lY#HI>rca>]8gZ2_5:B<@r2C"XM(7,GW12mn)rZIK:f_XH1"Jj^gM?"Gt(uun'-$)9q.L3;0$<tU-roh/h2GD&3n5oU62c/DZW/KL(2d=lZcA^RUO)Ajga._5N#Id(RQbGJ6f9+EtbcghrP"-s0=IE0RYh#,Fs"YNEP,g*0+D:V];QJ05kM3abG[E?LNkt'J8qAJNOO<nhhU3ZoV).SKjCPrub$Ja<qMs^^JD#)MiS@iofnGFG\YE\O3'X9@0%.IdT9pH6Mbg\/-<G!ls/6Hl;@ZgRa`';3U]de-s;(n3eQ+Q#m"5]ERI<$8eTI=ra,.\&=6&`_ha0-o$&TTF?$Mb12gpNs`FU]43Qo]UuSJNifCM+.a7e+-^1>$\f?_'bA`$L*[a.g3G<C[4\?/QFM>q:cq<u'KFLUM.EE6e@8!qY$;jek`ct-kSsh]\IL&.-U,]::m-:\W2C\*/C;tRR3,fdFh@kB=m+iI?S+\j7$6I+mjZqN#brV,AG[e[gS3-5R]ur/h&ep1aEbI5UX%p/*Vf,2WMc%,~>endstream
|
|
||||||
endobj
|
|
||||||
44 0 obj
|
|
||||||
<<
|
|
||||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1496
|
|
||||||
>>
|
|
||||||
stream
|
|
||||||
GatUt@;hW+&;Iso=,^,7amCCA`>ER/&Xt%HSX9CPY>V/2J[NbAB'J_EfA*REJ_25B*H`=E9!FY9H2Pt3b9R3aI$*Q8[K\]_TR0:]=HLaXfS0jW"G5^j[s)Ape*\08f/IPc4^selJW8:?BtTP7p[X8,,\nN/I<G;6JjI((DpFgp(=;SQeM;icbi-_E!6IHeI&t4jiG2dKa#3^1W81aNa$a>$0kcR82=tLo0S.LYEF&&]iONm.F1AJ+(Zp=Ss&]qA(5qaNcf]8r\ZouF&PQfL@Q,AcaSP<\&`-8Pj/N'h`LHXh+F/:BANEVfl2dna/[^[d]sm1d,gG`oWe(hZ7OU#O1bZbfO3_MSK[V=UU/lh=UiHd2C;nY,K>SZKRY>Gm>Z*d+[ff.1?r@"XD6kp3@-Rod/3!b#:hc*_n8j]01n+99$U8IL<.R&-')mKh6EsLB`UaS)k:H1"rC`d>9?PeJ#tYpWXd8^8UfDE\<=@D095#(uaP>s<]bbA&d=OLrCI;^%Q=DtQKf*rm6ubJ%XJ\\[MT^)fWSFT,WH`+P"C#r$SY'Ieb&(`8G&KVVXr?0BT8s4a/'H5Sm4TuUaf]1fdrYkh4h;4U.[OBg<\i'Cc_:`QWt:'&E!IK'M0;biSO8<U'`BrV-u*mjI!*bU5]\O9gBRPUi2+pImofMq7E<nE_=LBu)S==?Nd>ID,R7PrE-cL97)Q8oBn]-"$!eDFTa$$mY^qJTPktBCWM0lQT<[HXKgp.W#7'#'/3]cjUPgiIqJjr(e12pLSig&TFqY<#mpMp[YNaT]T8\u;oEq5"5obr`QS"DN%BNg3A]E<&<%kpM"403`#p*<OFu/.+VG8_S=l''Mms1&#Q?:cLJ_B,F$T)Mc64H-Ai7=NTZ^@KY"Fnm9e8aOscNTh>)qg3$`kFfJ"ct<=G./rs:7XC.__l;?7bb\O8(nD*R\,Z[fWo\6?[r&`c<SlP]]EBiKhj$)(ucH7)f)'@k3FeuF+o(0U</XWI963JO\?eS!U#33">4^A5%u^<c>2>3f<n?^(gik(:U@4@8)]=Y*mfR5%ScT`.F(W[AXuVgkmb(:gKSf.c:.,cJer]u8u:Rop:tscCmG*7j+O"!VI*Nl>CjJt"L2)a%C`dZr\MNB1ORN!,aESooolnQ(YL/qR>iR=3XWaGoICOpm2<m'oEUF%?n*rh^4b6j]7pou3!cU,nBZ^0,d)j&GZ!IjL^)&0_HTLU29Dn9B\R.2iA]N\,"3.B_4_d1ktib&<o<E?#Q&WS`%7r:$Wn/*SV2u5oqZuL\a9kc6?7&se\d9</nnVoeV2"s1go(PH*`Ak+BY&7lh<'$k5G1D*Rjt4b>3Jni?\99VUTPc)kCZ?^`T7XfTkc%.@,ag87*eVZ7?HU+!.>QAh*(F%r050*r]FqMFu"YU)qNV`K##2a^`:GUO)]dBJ0n11G*rT+,4PEi]?T"prLs6nU]Y8s+g*&[,5p6ijg+<QMZ>[%<]]W*M"9+i8+F`0DQg~>endstream
|
|
||||||
endobj
|
endobj
|
||||||
xref
|
xref
|
||||||
0 45
|
0 18
|
||||||
0000000000 65535 f
|
0000000000 65535 f
|
||||||
0000000061 00000 n
|
0000000061 00000 n
|
||||||
0000000135 00000 n
|
0000000122 00000 n
|
||||||
0000000242 00000 n
|
0000000229 00000 n
|
||||||
0000000354 00000 n
|
0000000341 00000 n
|
||||||
0000000502 00000 n
|
0000000487 00000 n
|
||||||
0000000650 00000 n
|
0000000602 00000 n
|
||||||
0000000798 00000 n
|
0000000707 00000 n
|
||||||
0000000946 00000 n
|
0000000912 00000 n
|
||||||
0000001094 00000 n
|
0000001135 00000 n
|
||||||
0000001240 00000 n
|
0000001340 00000 n
|
||||||
0000001387 00000 n
|
0000001427 00000 n
|
||||||
0000001536 00000 n
|
0000001709 00000 n
|
||||||
0000001683 00000 n
|
0000001783 00000 n
|
||||||
0000001831 00000 n
|
0000001871 00000 n
|
||||||
0000001979 00000 n
|
0000001943 00000 n
|
||||||
0000002095 00000 n
|
0000002325 00000 n
|
||||||
0000002201 00000 n
|
0000002812 00000 n
|
||||||
0000002279 00000 n
|
|
||||||
0000002485 00000 n
|
|
||||||
0000002777 00000 n
|
|
||||||
0000002983 00000 n
|
|
||||||
0000003189 00000 n
|
|
||||||
0000003395 00000 n
|
|
||||||
0000003601 00000 n
|
|
||||||
0000003688 00000 n
|
|
||||||
0000004000 00000 n
|
|
||||||
0000004075 00000 n
|
|
||||||
0000004170 00000 n
|
|
||||||
0000004279 00000 n
|
|
||||||
0000004388 00000 n
|
|
||||||
0000004530 00000 n
|
|
||||||
0000004637 00000 n
|
|
||||||
0000004751 00000 n
|
|
||||||
0000004858 00000 n
|
|
||||||
0000004965 00000 n
|
|
||||||
0000005065 00000 n
|
|
||||||
0000005175 00000 n
|
|
||||||
0000005273 00000 n
|
|
||||||
0000005369 00000 n
|
|
||||||
0000006296 00000 n
|
|
||||||
0000007001 00000 n
|
|
||||||
0000007229 00000 n
|
|
||||||
0000007642 00000 n
|
|
||||||
0000011421 00000 n
|
|
||||||
trailer
|
trailer
|
||||||
<<
|
<<
|
||||||
/ID
|
/ID
|
||||||
[<21bd418253115595219f2239810885ec><21bd418253115595219f2239810885ec>]
|
[<b4fc6b561b67f06b71f7e5359745f43a><b4fc6b561b67f06b71f7e5359745f43a>]
|
||||||
% ReportLab generated PDF document -- digest (opensource)
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
/Info 25 0 R
|
/Info 11 0 R
|
||||||
/Root 24 0 R
|
/Root 10 0 R
|
||||||
/Size 45
|
/Size 18
|
||||||
>>
|
>>
|
||||||
startxref
|
startxref
|
||||||
13009
|
4055
|
||||||
%%EOF
|
%%EOF
|
||||||
|
|||||||
@@ -183,7 +183,7 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
30 0 obj
|
30 0 obj
|
||||||
<<
|
<<
|
||||||
/Author (Android Cast project) /CreationDate (D:20260623115606+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115606+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
/Author (Android Cast project) /CreationDate (D:20260626184405+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260626184405+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
/Subject (\(unspecified\)) /Title (Remote access \204 implementation notes \(v1 WireGuard\)) /Trapped /False
|
/Subject (\(unspecified\)) /Title (Remote access \204 implementation notes \(v1 WireGuard\)) /Trapped /False
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
@@ -276,10 +276,10 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
48 0 obj
|
48 0 obj
|
||||||
<<
|
<<
|
||||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 861
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 872
|
||||||
>>
|
>>
|
||||||
stream
|
stream
|
||||||
Gat=*95gRZ&AI=/bV?46fAe4u]8ourp!OWC?@"oRBrM/E$0eJiIL!03a!Lp5P$%8LqrXC<$oS0b#HQ`n!q7LdRl^`e&?GjH;\2(,pL*]ALAt:(c&AR2!c'CJdT;)H1ZP'g=oso%iRS*C[I=ntr]29!4LhX-,ih8llI(@tV#r<:6u*7bK*^U80$+G*iH"1k>Bgas6C_lC/obS;(3,X,8p7Ma57i:_\\$aQH1Z-""i38'f<FK0Oo.^qNeLl&kp?PXd5M@0YoeR.H639Ud869V3Um+@K+oG6a(0s>"HhH?Zd2h?J2V84n8+r']telWF\85;ia<j%Ip0^b->&kV'F#>+c5j!hM6hTp21coS_^[tVrNSi^o?@1[`:c<s\V+%TkEQi0@[OW>/-0'W0]N,8U.MoQ8mY6bMb_cM;jEk[e_=Brf$VT36B+ZY1m]or%+dSm@rA'bg)gTSHQsM>gYqP&Gg#XiZ!9Pb(=[Z>X"Y!lT5Jkao=uH3V[iHbqhV`2g#n&r^l8FomGp*Oc/&@F'SSu*CQI\MmQb`"(7[R/5e!/OL50_P5a"S+.UGjV@(N75!N>7>cPBqhh/5WaC>46q/!,r>H$18^O,MJbbe`1Ym_hQa/fD_A:<q4-0ks4V'?;P<o'A63CW(b]aXR"N/U-<M%`RUCK^Qt[Kj29f<:/urgct$"5%C1g9%+NO2a6'H/I)1ocMXIuPKLXUGcj`QD;^t!hHJQ8Ee:7&1UKlN+Y,2MD%ghaIL"pm(u'Vo#%9Oudi_TpTc/UN+Cn,H=&t;GAbWf:iXUJ'=<C>pdL7%+d)3G1R8o&bna)=MA(,)QhmqDi"t_DoO']Ic1QCTu\'-kL%G4E!_!E_6*/P"~>endstream
|
Gat=*gMY_1&:N^lk)i&@Za3a10hk6hMPptdm7X7rJgGDiD/'JZrk<.]j%I5@aP`>-k+'!Km-YumqdBDpLB([D\@G*p#2Tth&-:Vj`noY"!'`>p,g)6KJC^/cmL"lY@R;*T,mV:m7C<4c9BHS7jE4ijnR+h=(KqI\:hD$kb7$p23,5RsgfqR5C;Mqfi6URuZ[lc/1^)c`AO7',IN$-:6rn1O_]?V_+>FC25?U*U?%M_[hDL8WI+J6Dq]#u0+d$=AP+nugRU\,V:?4SEbbD@VU=mHfLA+7Z_K>_N_]-AGhVF0(Z^5Tk5:7^]'V;_B+uNehc<[D!.*![fk"7@OOLJg`b$\IXAsY2^$:Yf%(g(*KcKm!%(d4``E^BfOYs?_.bjHdqqE1smKNF],jVK5;SN#Fr%%Osof`.G^:@e?]dX8&tA$"<0H%ig+nd<V+F=!VK+t0HaR"+q4X_BIjd93HXKL24>#-hq4G+64b8V^D#TT2os5hn!jaPVB4mHL/HDO3K9\>NpTD!^t=hXLu`Z,K`!3t6CjfcQIe5A`%?&V'Zs@$IW&[6NO-\*BN=M8)V*N#0;cR.go[^SO[+M#N6l7t+e#VSc`*\p<-?i4UA'R@Qp$o]*TtrnO2M"P^.,6eFIfZaA2=p*U=o==<WS@_7@1LO5rWCHUKdXTtXDlOJC<k"j8"/[Ep@3l:jOrndt!@9Q4VOYk)BK5FfMn);P&b<%0M>eqs-dAh`JVJ/K(U2ki6lPZ]H<g%$R5ug<GPZn7#,t?K/\jWJ86BqgR6\lAkCC"8:X6s#>5b[qQQ/N2p7BB:_\ho+u.!2]G[6tBjgLiFb`jP%Dom(IVMEu8Wd'3g/P=-TUGuH^k\,fkc";q%=hO9#/~>endstream
|
||||||
endobj
|
endobj
|
||||||
49 0 obj
|
49 0 obj
|
||||||
<<
|
<<
|
||||||
@@ -374,16 +374,16 @@ xref
|
|||||||
0000006633 00000 n
|
0000006633 00000 n
|
||||||
0000006720 00000 n
|
0000006720 00000 n
|
||||||
0000006823 00000 n
|
0000006823 00000 n
|
||||||
0000007775 00000 n
|
0000007786 00000 n
|
||||||
0000008685 00000 n
|
0000008696 00000 n
|
||||||
0000008915 00000 n
|
0000008926 00000 n
|
||||||
0000009143 00000 n
|
0000009154 00000 n
|
||||||
0000013497 00000 n
|
0000013508 00000 n
|
||||||
0000017095 00000 n
|
0000017106 00000 n
|
||||||
trailer
|
trailer
|
||||||
<<
|
<<
|
||||||
/ID
|
/ID
|
||||||
[<73cdfebcff903d1566b9858951833b52><73cdfebcff903d1566b9858951833b52>]
|
[<74db94b9f71a3d055821ea20f0c6c642><74db94b9f71a3d055821ea20f0c6c642>]
|
||||||
% ReportLab generated PDF document -- digest (opensource)
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
/Info 30 0 R
|
/Info 30 0 R
|
||||||
@@ -391,5 +391,5 @@ trailer
|
|||||||
/Size 55
|
/Size 55
|
||||||
>>
|
>>
|
||||||
startxref
|
startxref
|
||||||
18716
|
18727
|
||||||
%%EOF
|
%%EOF
|
||||||
|
|||||||
@@ -137,7 +137,7 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
22 0 obj
|
22 0 obj
|
||||||
<<
|
<<
|
||||||
/Author (Android Cast project) /CreationDate (D:20260623115606+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115606+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
/Author (Android Cast project) /CreationDate (D:20260626184405+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260626184405+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
/Subject (\(unspecified\)) /Title (Remote access \204 validation \(Linux CLI + mobile parity\)) /Trapped /False
|
/Subject (\(unspecified\)) /Title (Remote access \204 validation \(Linux CLI + mobile parity\)) /Trapped /False
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
@@ -193,10 +193,10 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
33 0 obj
|
33 0 obj
|
||||||
<<
|
<<
|
||||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 874
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 890
|
||||||
>>
|
>>
|
||||||
stream
|
stream
|
||||||
Gat=*968f@&AI`dp6_Y.U6YDUO(k&)g>S4Qkp[G#Lr:0I;D=pBpKa1(575DB%+\O]n(WV@V+'>7@.B7UJ?L,$h]neEE"4:aKQ%!:iTSSn5?CIr['-tB@gqC(+:1PI`dQep&""/HDL>h]M*N8dSk$_UHSl#EPZ.oRj\uNE'I_)M=$i*5SAE1>9p`DE.$!\@%8T;-fLCd0(?NXnK;XW!P&:38mGnM"JTU]L=]fp,<_<;\FEn2O.tgtXDGlW&&+gk466fEo(Q)^q&_^aL$]h9X+6X]=89$RCJXU:qMk()/]1l`BlQddWn&/LGBnpEF0]AM<[/'jk;qrgL>)9l)Es"0&o+Wna9H_;b9^%aqq%[n\Vd(JATf&noPgCIE'L0h^S3q*foBLCAj_8&iX?^n!(8W=m0ChR0?WT)KmC&/o;sg(gA`XUD(DQ+WT@h-LBI9E>-9:@4R"%P_NGUE%d4Y)R>iC,BKihE$ZcQR?Wuf!F6(R+:KfATOMq/tnF1h&dkS'iupEPsrRYq$MiFd+>LT+m)(iEDuG95/:eDAm]p't.H\Bn_\5M9JS*ZTo+[*Ip+T-a(S*oatS9t_O._ZRXn7n%UU*jr"Aqn/9R%JF=I\(9AkVtCM^:@0UcU`C&a_%E-u]lnKWnXId88bPhjnM[Z@*B"Fg_RF*h8Ssb\rpeRWoYLI9NF+G5pr*:%TCdUR0jbcsW(C]_O5HptJbT,NT2sR,qcpqD&Fm>^2l:k;@;X*u,1ea&7A:uI]g5rB.oajq"Vo$6+JqKh#!uAsfg*UciAD0Qc*!pH,m'prm?YZW5>#9)N\tPi2:Lc!=h)[H7&-G=[VjB@l-HE:Q41nle@<r[.hkoQ/Z_U)$\W<BNC8<E5LeGDT`~>endstream
|
Gat=*gMZ")&:N^lk)jh@lZ%;D*a)*:?*RTKU-;SWZ=)Bc,]k3VmGE+#$Fq\jJc`4:nMt[\GWZ8%*mEL$#iN<*=#UC5^n1[#-G^chhf&I1iR^]$R!'42@#SOLnKd'abd]/CjT'?ac&E+T.,daN`H-qsEMpg,+-?m2W)=?sU^E>skUN8tmSBK=[*_"@&<+YQ\V*Hr%'5(a3!kae*lDK7&B:c#cl:cW2i-UG_O6+e?kF_-Nu&Vj^OgqASMDL:E)4eD0/PGLH_EEF)PK2m]l9@mpjoD3'IfVK%%r$TQq&jss17h!:Yf?\58l[JF9f;,?2sWd2iB"eqe?O;L'cIB"r.qfQ_I2?dmEE^[:,+pR%oJj@fe(l*C;D19J;5YIC<nohm\>OKG(<F(<)=jHfks0j1P4.??r'm3@b[6]\.iKi+?+9r]a+6l"mekB2d>S'AN,AjdESLZI$l,B+c\)P+t3rq&u--Ck]EU:(t@](%.Zd&;pn-X5mj+35Lq;W8iQ27<]Zg_=GLH%\GlQ:5Mo+HYD$iP)@Y,_p@8\)H0Aj0_?-(;`C\'<k!75^!.8t/p)lt:Y+1#)i%i5//,&OPAhG#RlJc"dn(%jk(0.KJh4P$$"m8+C;#tl2"kHjf/C;IO6^T,*SF#oMJ=>gN?^8P:>4+X`,@Q*K^gkKicSqlCM[l.L$SPZ("kQtjQ#V1di7m+G5MtO_U%pps.o[1Mn-\q7BK-m*<)W!"l=ITI["24l/rIER>;X_]JRk@$O]T;&>a52;'^1fZo9CjG`M>e+>:d&'#`i:>sd`p+\N*/,FfC`.G.WYCPtGl2S576Frspqmgh9j)E$"-iqD:c,8#oil<(SW4f5usc9a97a&'B?[9"cRO;c_-2;/=;TM(+AX\X9QK^f~>endstream
|
||||||
endobj
|
endobj
|
||||||
34 0 obj
|
34 0 obj
|
||||||
<<
|
<<
|
||||||
@@ -269,15 +269,15 @@ xref
|
|||||||
0000004477 00000 n
|
0000004477 00000 n
|
||||||
0000004574 00000 n
|
0000004574 00000 n
|
||||||
0000004670 00000 n
|
0000004670 00000 n
|
||||||
0000005635 00000 n
|
0000005651 00000 n
|
||||||
0000006372 00000 n
|
0000006388 00000 n
|
||||||
0000006600 00000 n
|
0000006616 00000 n
|
||||||
0000006828 00000 n
|
0000006844 00000 n
|
||||||
0000010441 00000 n
|
0000010457 00000 n
|
||||||
trailer
|
trailer
|
||||||
<<
|
<<
|
||||||
/ID
|
/ID
|
||||||
[<1627e3f70ce4b1d1228423dc24c605e0><1627e3f70ce4b1d1228423dc24c605e0>]
|
[<89a96c4eec836ba258bfde0ec50915ad><89a96c4eec836ba258bfde0ec50915ad>]
|
||||||
% ReportLab generated PDF document -- digest (opensource)
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
/Info 22 0 R
|
/Info 22 0 R
|
||||||
@@ -285,5 +285,5 @@ trailer
|
|||||||
/Size 39
|
/Size 39
|
||||||
>>
|
>>
|
||||||
startxref
|
startxref
|
||||||
13792
|
13808
|
||||||
%%EOF
|
%%EOF
|
||||||
|
|||||||
@@ -198,7 +198,7 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
32 0 obj
|
32 0 obj
|
||||||
<<
|
<<
|
||||||
/Author (Android Cast project) /CreationDate (D:20260623115606+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115606+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
/Author (Android Cast project) /CreationDate (D:20260626184405+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260626184405+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
/Subject (\(unspecified\)) /Title (Android Cast \204 implementation roadmap) /Trapped /False
|
/Subject (\(unspecified\)) /Title (Android Cast \204 implementation roadmap) /Trapped /False
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
@@ -407,7 +407,7 @@ xref
|
|||||||
trailer
|
trailer
|
||||||
<<
|
<<
|
||||||
/ID
|
/ID
|
||||||
[<fc9a6eea06a9e2d4a6457f8f52705b23><fc9a6eea06a9e2d4a6457f8f52705b23>]
|
[<03d0655aef4f711dd3cf52a5e2c5902a><03d0655aef4f711dd3cf52a5e2c5902a>]
|
||||||
% ReportLab generated PDF document -- digest (opensource)
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
/Info 32 0 R
|
/Info 32 0 R
|
||||||
|
|||||||
@@ -132,7 +132,7 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
21 0 obj
|
21 0 obj
|
||||||
<<
|
<<
|
||||||
/Author (Android Cast project) /CreationDate (D:20260623115606+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115606+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
/Author (Android Cast project) /CreationDate (D:20260626184405+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260626184405+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
/Subject (\(unspecified\)) /Title (Tickets, Gitea, and alpha smoke delegation) /Trapped /False
|
/Subject (\(unspecified\)) /Title (Tickets, Gitea, and alpha smoke delegation) /Trapped /False
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
@@ -266,7 +266,7 @@ xref
|
|||||||
trailer
|
trailer
|
||||||
<<
|
<<
|
||||||
/ID
|
/ID
|
||||||
[<2691acc5e8ef1ad05f5101edc8066bb6><2691acc5e8ef1ad05f5101edc8066bb6>]
|
[<20b0e6cbe00fab788bc216ed6bd7905b><20b0e6cbe00fab788bc216ed6bd7905b>]
|
||||||
% ReportLab generated PDF document -- digest (opensource)
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
/Info 21 0 R
|
/Info 21 0 R
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
18 0 obj
|
18 0 obj
|
||||||
<<
|
<<
|
||||||
/Author (Android Cast project) /CreationDate (D:20260623115607+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115607+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
/Author (Android Cast project) /CreationDate (D:20260626184405+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260626184405+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
/Subject (\(unspecified\)) /Title (USB-C / HDMI and USB-tether cast \(roadmap D & E\)) /Trapped /False
|
/Subject (\(unspecified\)) /Title (USB-C / HDMI and USB-tether cast \(roadmap D & E\)) /Trapped /False
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
@@ -216,7 +216,7 @@ xref
|
|||||||
trailer
|
trailer
|
||||||
<<
|
<<
|
||||||
/ID
|
/ID
|
||||||
[<b5d8df8d7d570acdede8840905e28dc4><b5d8df8d7d570acdede8840905e28dc4>]
|
[<56adac8059bac4b41af2249b586fc64a><56adac8059bac4b41af2249b586fc64a>]
|
||||||
% ReportLab generated PDF document -- digest (opensource)
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
/Info 18 0 R
|
/Info 18 0 R
|
||||||
|
|||||||
@@ -102,7 +102,7 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
16 0 obj
|
16 0 obj
|
||||||
<<
|
<<
|
||||||
/Author (Android Cast project) /CreationDate (D:20260623115607+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115607+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
/Author (Android Cast project) /CreationDate (D:20260626184405+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260626184405+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
/Subject (\(unspecified\)) /Title (VPN / Remote Access demo \204 gap report \(2026-06-13\)) /Trapped /False
|
/Subject (\(unspecified\)) /Title (VPN / Remote Access demo \204 gap report \(2026-06-13\)) /Trapped /False
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
@@ -204,7 +204,7 @@ xref
|
|||||||
trailer
|
trailer
|
||||||
<<
|
<<
|
||||||
/ID
|
/ID
|
||||||
[<b2cd8347e0a4b196bec35dc8a81f419b><b2cd8347e0a4b196bec35dc8a81f419b>]
|
[<aaf2d994c373d899c5fcb0d61963489b><aaf2d994c373d899c5fcb0d61963489b>]
|
||||||
% ReportLab generated PDF document -- digest (opensource)
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
/Info 16 0 R
|
/Info 16 0 R
|
||||||
|
|||||||
@@ -7,12 +7,10 @@ import sys
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
_BUILD_DIR = Path(__file__).resolve().parent
|
_BUILD_DIR = Path(__file__).resolve().parent
|
||||||
if (_BUILD_DIR.parent / "docs").is_dir():
|
ROOT = _BUILD_DIR.parent
|
||||||
ROOT = _BUILD_DIR.parent
|
# Always scan from ROOT so that DRs/, specs/, and root-level .md files are included.
|
||||||
DOCS = ROOT / "docs"
|
# (The old "docs/" sub-scope logic is intentionally removed — ac-docs IS the docs repo.)
|
||||||
else:
|
DOCS = ROOT
|
||||||
ROOT = _BUILD_DIR.parent
|
|
||||||
DOCS = ROOT
|
|
||||||
|
|
||||||
sys.path.insert(0, str(_BUILD_DIR))
|
sys.path.insert(0, str(_BUILD_DIR))
|
||||||
from md_to_pdf import build_pdf_from_markdown # noqa: E402
|
from md_to_pdf import build_pdf_from_markdown # noqa: E402
|
||||||
@@ -24,7 +22,10 @@ SUBTITLE_BY_REL = {
|
|||||||
"DRs/20100612_1_scaling.md": "Platform scaling — DR (architecture, bandwidth, GEO policy, task graph)",
|
"DRs/20100612_1_scaling.md": "Platform scaling — DR (architecture, bandwidth, GEO policy, task graph)",
|
||||||
"DRs/20260618_repos_reorganizing.md": "Repository & microservice split — frozen DR R1.1",
|
"DRs/20260618_repos_reorganizing.md": "Repository & microservice split — frozen DR R1.1",
|
||||||
"specs/20260618_repos_reorganizing.md": "Repository & microservice split — SPEC R1 (normative)",
|
"specs/20260618_repos_reorganizing.md": "Repository & microservice split — SPEC R1 (normative)",
|
||||||
|
"DRs/20260626_cluster_monitoring.md": "Infrastructure health monitoring — frozen DR R0",
|
||||||
|
"specs/20260626_cluster_monitoring.md": "Infrastructure health monitoring — SPEC R0 (normative)",
|
||||||
"20260620_postgres_timescale_db_platform.md": "PostgreSQL, TimescaleDB, platform DB adapters — advisory",
|
"20260620_postgres_timescale_db_platform.md": "PostgreSQL, TimescaleDB, platform DB adapters — advisory",
|
||||||
|
"Installing_MacOS_Sierra_10.12_as_XEN_guest.md": "Installing macOS Sierra 10.12 as a XEN HVM guest (Clover / OpenCore)",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
190
docs/CURSOR_SECONDARY_LAPTOP.pdf
Normal file
190
docs/CURSOR_SECONDARY_LAPTOP.pdf
Normal file
@@ -0,0 +1,190 @@
|
|||||||
|
%PDF-1.4
|
||||||
|
%“Œ‹ž ReportLab Generated PDF document (opensource)
|
||||||
|
1 0 obj
|
||||||
|
<<
|
||||||
|
/F1 2 0 R /F2 3 0 R /F3 9 0 R /F4 10 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
2 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
3 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
4 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 11 0 R /Fit ] /Rect [ 45.68504 762.0394 110.597 773.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
5 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 11 0 R /Fit ] /Rect [ 45.68504 751.0394 172.829 762.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
6 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 11 0 R /Fit ] /Rect [ 45.68504 740.0394 148.845 751.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
7 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 11 0 R /Fit ] /Rect [ 45.68504 729.0394 131.949 740.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
8 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 11 0 R /Fit ] /Rect [ 45.68504 718.0394 108.381 729.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
9 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
10 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
11 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 23 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
12 0 obj
|
||||||
|
<<
|
||||||
|
/Annots [ 4 0 R 5 0 R 6 0 R 7 0 R 8 0 R ] /Contents 24 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0
|
||||||
|
/Trans <<
|
||||||
|
|
||||||
|
>> /Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
13 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 25 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
14 0 obj
|
||||||
|
<<
|
||||||
|
/Outlines 16 0 R /PageMode /UseNone /Pages 22 0 R /Type /Catalog
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
15 0 obj
|
||||||
|
<<
|
||||||
|
/Author (Android Cast project) /CreationDate (D:20260626184405+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260626184405+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
|
/Subject (\(unspecified\)) /Title (Cursor IDE \204 second laptop / agent handoff) /Trapped /False
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
16 0 obj
|
||||||
|
<<
|
||||||
|
/Count 5 /First 17 0 R /Last 21 0 R /Type /Outlines
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
17 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 11 0 R /Fit ] /Next 18 0 R /Parent 16 0 R /Title (1. Code \(required\))
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
18 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 11 0 R /Fit ] /Next 19 0 R /Parent 16 0 R /Prev 17 0 R /Title (2. Workspace rules \(recommended\))
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
19 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 11 0 R /Fit ] /Next 20 0 R /Parent 16 0 R /Prev 18 0 R /Title (3. Agent conversation history)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
20 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 11 0 R /Fit ] /Next 21 0 R /Parent 16 0 R /Prev 19 0 R /Title (4. What is *not* portable)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
21 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 11 0 R /Fit ] /Parent 16 0 R /Prev 20 0 R /Title (5. Scripted helper)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
22 0 obj
|
||||||
|
<<
|
||||||
|
/Count 3 /Kids [ 11 0 R 12 0 R 13 0 R ] /Type /Pages
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
23 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 361
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gas2Ea_ClC&;KZF'`ZP`;Kh^s8)jXOM+0R^5X:&A22$ou7e?WD<jO1t'N@BMnpara&CL:2b8Rl"k`-K2&QW:6)I\S5aPJ^:<GFnP)kl5\,GB,uqdQ"IQc^_<b,oV(jG_;?UKqMP-@a2uKK;^rYXoI*-@n8d.3WQPLC0UO8%WP?g^T!_QI93N/=T@f[plsf[cjGf0/n6j'Uu+*Xf`4A&[$+p4sVmJ7/Mns1795%,<3/kbBV.2a;i;^I3J#JUk^ZcUUI.!2<D!qJ"4b2Zc.=ETA0s'Z_tdP2[ts"e^YJr5>]@^o^2^E$HQpnB5nfM=GamBMOa%t5eg]dEl:/u5T2E%rW(g6\2\U8K'X/siGiQ~>endstream
|
||||||
|
endobj
|
||||||
|
24 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 544
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gatn#:N)^V(l.SU'Ye.HKBq+n%(g(bH`EA_Tpd;sWYi5T.q!+U<r;SH,c\:2#?4-XY_6B]4RX@Xi-s)Cb\Q-PMTZq?$)A*)J-AJ^ELfjr-Zk:U65IN`&"o.r>UG%%c6"h`$Q2PjR7(<!?n)j^5d6:_Ij_p<La0#b6Q?t1oRpqIrMh]u"*2k4]'7uRdbdT.4o;iuVt^l("CE5>KQtS"#!+Ii9VJ_^>5c)eXY.$u,6WVZ>QTN9LTsXXc#O9*YI#6RE`:T$.7WUDpfokC@K,K&d!+M=>F0K/Bs9*nBC)6&-K6hFERH-%L"U#X8r$PZ\f"[]]7*dM=AX)lMi_A2gTp3gJXrrID9(QpPDW;"58b"Y$&aiFhCmrS7"k=3#<rtF$mjD2aSQe1EF\]#f3bbl>Aohnqp"eCq<_q2rcruT?_tp\Ws``t:iJH;\lk<CPJaGn3g:(S=#Y@QorE!h]"[*?htEo?B:ZJ*<Zu8LS["3'aIK5[84@d<+3`V7RBYoM0DQuf:b"r>DheU$8/)TF9a*-ms5RMX(P`51QN~>endstream
|
||||||
|
endobj
|
||||||
|
25 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1882
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
GatU4BlD`c&H/2-0j$8_j4:S/?1q`)TUVat,#+-.]-q'[TI&;m,)[p"-U"p:m5pPC>F$R*l,H:/8]0NVn]e^T-k,T4Zet`pi6O.MT2VBk`\X8GZ!i"\kMr>`8$oM-*T@R"JIUIT8/uDUj#DFG"6mfA,7][!5R6FtOa.obLP+rgk0Q+o.4l8;;J:kt$@3:2^d3bG4;'>VbS"7qWDX:I)CbckcHbsR%F\=Gb*]sL/Ke>P)Z5<YDk^(+O@iWt>6-**^;_U)5%Vd$JUke6<Y8+")#,(6i[CB"%Srqt>1aW7G)RN'+YAA!-2/3a/4aA.mM[5)iMR.oa)(m1;M,-_3>*mT01/#3S=19B*@3nQE3[7?UrA!F,D0>ls%SI1m3*4&].+R.:K!TCJXMH@GmD[QT3o;0FFO&[VpgP_Qfhls@+<.4$n3.eZ`cb@FeAOGB9SN;3+CAHbIS3S7c5AfDKNaD;/E^me<e@TLkBlL\g+,[NGIFZn89#M`jp.?PHQZ=Eg_J/UL;?=h]!qdLU^OQJ@e/j1)MdiZ%,q$GMip]GRb\Ge3jr00Pc=BNsMN)Kc[W%dpprtQf_56i0tVuP.@omH7]>ph''O9Bjg`h;moaD/7?AJYiVMm%Rq=F=)t-bd>/:=(i]fKYBW5E3XoSjL,&u27VW`EY"VmiBQgb.Fgt(%WFi"Kjbt`'?q\RX-M3.ee[p9"bPihCnr,l'L,2Abcrc_HY]Kuf3g>89cnZT00*SF2$P_BuF/3ds`4L_Q]Bm;>e7UG[0?7-r)HptC6^Mf%c#5&[RL/u1TBd^WA=i0bW*\Ar35SY.>:7g=96\%,i$s(.-pJg?4<A>+8f%);n?2Bb^Xk+mYt?\=/q:^i-jR^NgtWSRh_it8a!T$*ScQ.R^p]&#(d)%M'\7f++3?L+A?Vr3;2?\@`_\,^h!YEpf2W.AUFO;>$I]1>P-3b]+_!-J3D<?`Zqppmd\^%"V[=2jB=[*Hpf8f6Q\;[:+.V"%GoM8U/dQ`dA#;TF;T3/5X"ZgB&kp53a_Tk5:I("%BpOQl-ptHM"KT,!277+'Jr49#.b+8=^D'Ij3a0f"-Vs>,5AQX4V;V5VEiimm[><IV9Agg;+01Rn-'&-gRfQThTspag/!Ta-<n_=-)3j"S7OD2L;l[,)1-'%N3u`&QEVrjoR8cgsGl*dWhS9DdXsnqW21NnF*68CMJ4b<EF*CNb_#JR>_fqJ9q*+Heq>,H!-Co[bfYS\Z4C0(=(IQQ>beLu)Z>flK,;?p)p&f<hO&o2cCUP\;bpL,&q!HJP2m:R%)"ZLb+U/]rC_VIjqgK@5TO\o7>c6DK.K>)T>g79`X7&8\b#.tn6@Jl2Oh]WKE6/)a`5[u';!d-JK86'l9Fk4!e@N.)T\#\KN:F?i^nX8IFUlm>:Krq(*fW(_[O'P(JQp<e+B6]\?pE7eR.eKQD4bG_na#l6Za2O&O9\#=gC)b88'>J'HXWD4<>[i'IM/n516&1>,=k8:/W,/5PbJ3)eLNp$Ag]eP4@oZBO`s3m3=H["jk=7"RnALs;`nIQ((t2R&iZoa5)HT8i*o$gdqfg2Sm=$"aer!WLUNc(*c*a-?CnBfD:GHiofTaG5*+:A7<4DJp>O]Z=)]CujsR+!%d.gbN8#>FD!YE>rtj%;GgdRAbpp_p5CcF#\R*)$,RSG:?&77a.P*V1iD^c@!?u,aSOP-#,$VGDPt:TI_7+YT,!I:s^9-r>=aBi@.VGLONsFZ,%hH)FS)CEB=!.A=e8bh"AZC_l/jtA07uQUoeiII<q@'GUlS]pTp*sX.kf'-V)apR(0FDofGZ]Hm*$lffklNY`.W9,%!CJu=;U:'^FaK:p]OMmd*9BfYE%I's+eG_P$3d9DCeYoXBlEC_"%W@lS/ArH~>endstream
|
||||||
|
endobj
|
||||||
|
xref
|
||||||
|
0 26
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000061 00000 n
|
||||||
|
0000000123 00000 n
|
||||||
|
0000000230 00000 n
|
||||||
|
0000000342 00000 n
|
||||||
|
0000000489 00000 n
|
||||||
|
0000000636 00000 n
|
||||||
|
0000000783 00000 n
|
||||||
|
0000000930 00000 n
|
||||||
|
0000001077 00000 n
|
||||||
|
0000001192 00000 n
|
||||||
|
0000001298 00000 n
|
||||||
|
0000001504 00000 n
|
||||||
|
0000001752 00000 n
|
||||||
|
0000001958 00000 n
|
||||||
|
0000002045 00000 n
|
||||||
|
0000002365 00000 n
|
||||||
|
0000002439 00000 n
|
||||||
|
0000002541 00000 n
|
||||||
|
0000002670 00000 n
|
||||||
|
0000002794 00000 n
|
||||||
|
0000002914 00000 n
|
||||||
|
0000003014 00000 n
|
||||||
|
0000003089 00000 n
|
||||||
|
0000003541 00000 n
|
||||||
|
0000004176 00000 n
|
||||||
|
trailer
|
||||||
|
<<
|
||||||
|
/ID
|
||||||
|
[<24c5032a0c9e3e5ba18591c4ef610879><24c5032a0c9e3e5ba18591c4ef610879>]
|
||||||
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
|
/Info 15 0 R
|
||||||
|
/Root 14 0 R
|
||||||
|
/Size 26
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
6150
|
||||||
|
%%EOF
|
||||||
214
docs/FRESH_ENV_CLONE.pdf
Normal file
214
docs/FRESH_ENV_CLONE.pdf
Normal file
@@ -0,0 +1,214 @@
|
|||||||
|
%PDF-1.4
|
||||||
|
%“Œ‹ž ReportLab Generated PDF document (opensource)
|
||||||
|
1 0 obj
|
||||||
|
<<
|
||||||
|
/F1 2 0 R /F2 3 0 R /F3 11 0 R /F4 12 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
2 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
3 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
4 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 13 0 R /Fit ] /Rect [ 45.68504 762.0394 146.845 773.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
5 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 13 0 R /Fit ] /Rect [ 45.68504 751.0394 99.50104 762.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
6 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 13 0 R /Fit ] /Rect [ 45.68504 740.0394 178.621 751.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
7 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 13 0 R /Fit ] /Rect [ 45.68504 729.0394 92.82104 740.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
8 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 13 0 R /Fit ] /Rect [ 45.68504 718.0394 83.92504 729.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
9 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 13 0 R /Fit ] /Rect [ 45.68504 707.0394 108.829 718.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
10 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 13 0 R /Fit ] /Rect [ 45.68504 696.0394 103.045 707.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
11 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
12 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
13 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 27 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 26 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
14 0 obj
|
||||||
|
<<
|
||||||
|
/Annots [ 4 0 R 5 0 R 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R ] /Contents 28 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 26 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0
|
||||||
|
/Trans <<
|
||||||
|
|
||||||
|
>> /Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
15 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 29 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 26 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
16 0 obj
|
||||||
|
<<
|
||||||
|
/Outlines 18 0 R /PageMode /UseNone /Pages 26 0 R /Type /Catalog
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
17 0 obj
|
||||||
|
<<
|
||||||
|
/Author (Android Cast project) /CreationDate (D:20260626184405+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260626184405+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
|
/Subject (\(unspecified\)) /Title (Fresh developer machine \204 clone guide) /Trapped /False
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
18 0 obj
|
||||||
|
<<
|
||||||
|
/Count 7 /First 19 0 R /Last 25 0 R /Type /Outlines
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
19 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 13 0 R /Fit ] /Next 20 0 R /Parent 18 0 R /Title (Standard layout \(~/repos/ac\))
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
20 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 13 0 R /Fit ] /Next 21 0 R /Parent 18 0 R /Prev 19 0 R /Title (Stay up to date)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
21 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 13 0 R /Fit ] /Next 22 0 R /Parent 18 0 R /Prev 20 0 R /Title (One-command bootstrap \(alternative\))
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
22 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 13 0 R /Fit ] /Next 23 0 R /Parent 18 0 R /Prev 21 0 R /Title (What you get)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
23 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 13 0 R /Fit ] /Next 24 0 R /Parent 18 0 R /Prev 22 0 R /Title (After clone)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
24 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 13 0 R /Fit ] /Next 25 0 R /Parent 18 0 R /Prev 23 0 R /Title (Lab vs production)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
25 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 13 0 R /Fit ] /Parent 18 0 R /Prev 24 0 R /Title (Troubleshooting)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
26 0 obj
|
||||||
|
<<
|
||||||
|
/Count 3 /Kids [ 13 0 R 14 0 R 15 0 R ] /Type /Pages
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
27 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 344
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gas2Ehb1j@&BE]*=*u*fi&-k^Re0TonR5,@i6u()>IV^hF[Q1XPAU;$&NRpdj=[&8(P[g`qmG[>bCI6;YXWj=>I"N5<$?V3pfM6a$89Q=3Ch5V2YP+*;I1:s+B'&uH&r\F>/k`R`AdT3it2'CcsTENXV65M-^NDe&6_cmD7<`Cm68,+nCha,5;oS898C(/%aAUAgZA=DmEQ97&^GB9g)kHUA,N0.0ZfB]-nYnI300=6a[)AZI2n/;#Lh`ooOs"lQe-H3rUlnR4Y3b52m\D<p<2hF)0)IcgWQAoEgGAn)!?NHUAI>3WAsn!01dmYfZ174+^t(ki<^`a3>"RN$,_U:h#~>endstream
|
||||||
|
endobj
|
||||||
|
28 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 567
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gatn#?#/1K'Sc)J/)JHk0L_-hAFFCX$+gK1[[QS1:_[,*]\8Mrb:1-XDkHBLZF,7O@K[<G7t0=hS0Kab5M.[Q2=Md,@`?,BZ5m%<6=aj_Ze;N"4%G#;M3EaM&4-pHUnL$9[g>cR&-X1B)H2cKLkqrPKAFlO5M6^);.R(In2#^gShSLO[See@j@25-?$h:l-aGZoql:g*pb@1#5<.U>P//:\kdO=P6J;L+Ho.D3B)[-c<Faa:bVrTJUkIuc;BF4CE!D#<C'6UhVIJFroenaOm?<+'0s5Y"2Ei"aElr.]b+fl?%K;g9\>\W35s"e(@'A>k0T2h1^Ya=[a=F%+P^l5%ES#5h@uJ?qU<?hVo`+/q)GW`IXQfXGC_+8TV;@8@-OC(^ANfp2J:Ai-F+>&C;3o31cdrum89C"25Rd3ss.R1JVR*gZLXilqmH;+Cp%Q(Zl^R2dW=*N%(MM?\1fU<cDt.6%4\C\eT2mq;l9X)=Y4&<tCDp]Rh]!KGK%0V4fTs0h9LQshM",jU.=TEH9&fG0q3R-j&;2@D#!=(AA'*YCcETY(%gTF*K3Ca(~>endstream
|
||||||
|
endobj
|
||||||
|
29 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2586
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gb!#^D/\/g')nJ00j*4Rh-MCcHF<?QJSa?&m3-/K[bINAJ:Nr">HQbJP`t7QrUq2QZ7O+\-+PV3E)VPOE&aB>B;cBgn3bY(h#QC-3=OdW+?I_J5YT^]q(5;&(Oo_PN7,(4HXph;32;UN).O?3iA</43A4[G?lf<qjS*N6E?lE:l%cHNn3Jaa6D3fdk$O38h[p9%T@"3t)CJCP9kA)F.U:FV$9aaP&FoGTIORmPc;V3X5]0Dl=aS9PE4F?1I8c9IOLi=gPsoV"_.i+NW[gI1/ZB)ANot>VIf@8]SW5858OnG)($YQi6$bREC1rp[E(Tj<Q15K('6k?n,l6D[ZT&T8r7lW?K88(GP1_'3QgC@=S?3tVcm3&CHckTl?Au22[^EHBPei[#Y,!C^@1[flH5r.d%Pkl$=5Y^)+s`$kJ#"+#oqRV"U1F+d$HA4t_R7_`&!-*H?0+*+?U[Xo#3le!Z!@L[EpGLm0;4=%3-2Q6GY`-O=s;Y?9:AC+][0=:kgME5h*gb5Lpe:IrT,+3.21!uPaHJ7=,TfFXJ!o9m"tNKYGIToVSq5Cn$rc?JgDUh7`@i.iR9Hp_Jd2_E`DjbkIMOA3ugtjG-&$E1K&@N37<]W"Lb'd)+!^6r>]YtN1OHFT,?M&prd[$.FeDJl8Dm&%arM`*m@>&rh@8(jGKDY<L3E-=QT30&..G)4F>0SDC-GQ[s.S1l/QS8s)>.GbD4[i@aI$7-5CWY_&)_T80X.%dU=f"jS%f>mWUc#WereDo"AcjgP)oP:+f5l&1:4?LeEMa\%\Jh#Wa?1Dsja@&G!d7o0T\'qlR-"C76kpoR:RdW`DU9gDkG8/^RLL*h5\Gk+s!"h$8&P3]3^2HQA&W)bhLiUIF0<)]"%;nba]/?A$#AE1IcuA:s#P*+Sb\qYMFkngM@[*!HB.IV/saYg)N!<rsFbh#Ze*dhf:\JP+<b=fa_<WYI;F.m1&Z*FQ?RLZ#QKd\r1li4TMd,0tsS'G`*j82uS`UJN%L)U\a/X@o8*h/`mO8/-3GH]#+>0r@&7%hH5!TY;BQQ[<]r@$h(:@BAO&5#dkC1XU0\RFipeE4G_-JkiH-!i<&S2[6(4l-HU,`dfo5EDFm0S=_\r!CT8YAkAcJm#e:c_uaH0'_YD3O`"8*W5dK@S.V][V2n=pbnf:oHt$8-(X[(r0ZZ5+eJi$J58f;peWHdZ3tnXOfcj(-jbn$,T.eX$n\qE(85b\UmnshHO!)/f\72AHHM?!7^7?tqVk/<4P>.fTF@0,Hbs$pO2"I\i\%#Q&Rc\*^Ar#cticZ.W6+$,8&i"7maBK//&(PA1;V^AK`uA\32mPp]Ou&oS]\u@6*MhP55@ut5QPZP>J[]`Pa_ND;8Nc9-KGP''8aQN<S@3mb!.At7.<D_<nr0,aQRmdQF;qG<_=A.k-`"a%dpMC8NhH=RqgH%[Bss_*/\=7_B90=&X&]@E3D3+OW^RW..Z+?l5##S,/@5^Y"q?S=$q)Hu<9'GX[dS#.hl6L<+]cC=_u3cVs1e@#j[(!PNbK*(IS]ulJVF)K?Vl>Arl(!1ZZJMa51`Df[0']cU7MfpUV[.op(LPJ$55DQ:LK_B9]0SKJYU'brnC4Vd3q]HBK)XNj.1LmD##3;mE[*fAKVI)j0+HP^i2utbQupQ\mC*(2\C54<Toje/>'&DHdoK)ERZT]5J$Im_#cYN6F>ni0R(=5L8d*PU^c6eV7f>JFt:;S*M]i5$biSF0."8-%oleP83M2HnZ@Qr/UY;L]QC0o-'0jZU+YHOWUhFMfT>Xpd7^D6?V4a*`9@i[pau8CX$99r7<]`uUIH<\_gHBJ0<q.GPmI7)1qXdL>Gn)jk\$+Fl!uu)]R#)!31X=3I@NtqT0>iEP$cr'HHQJhO+1U$m7-'?Gcff$kkE`o_fU&Lm;[RKroRtlq=41DIX]m\RWDp'@dEj7N2m]'4'lk<&QeK]]Lk+$]E35ck&fit0"sa/Hmp4<Yjg<T>AVpK<N[:al,dt:e('fN^HklF6ti[E\qAhMVMuLpZ>PVBJtBqTp'ORs@NI,1mR\tC054s5(H-%XBn+a_djYfm9#N!¬kkT&U'P\J"d(K\/$\=8.37?&&2gU\f58pWI]U7V\,4YsA)=8O03Z$l?s2*%,1M,C82_jsEGK<BtW'F[d9#oYEa8$0K9LII1u9<E5+W[b^?C]1G_XZskMNS5knF]R-AhbZ?/*APQ=!."?Kqb8<.74YeqFZ!ia6Zq"qq'D+tFEunbBcbq/f&hg=:9BDt)3=g>^S8L<XZmIrBp+!BXa1(dJHEf]M6#T;sohA\tQN4j"ciKF+B)U$PG'5VtC1$A!MW]#`=UjA-a;K+ZFE)EG=`[Q;bO'!m<IMN05J4[U04/,0<tCck1fkR=<P:%@-YT<B_X!qmf-Ma:^6LkEI:3;lp[3&c@9$WHIgg@(RboEL'7KuML:L[Q+*XM6JT@Pj540mm>spm$hrL";INS>2-.GOJJmWO:r#XLXV7SGQE/A.j:q(FpbBaIIlhY=S926l3Z)QHcA`PdGWac\$fMMN1`.!%$KA<fk03H^Z*0lI:0C+p=&McuIV$7,^W^b)5E:JF8'uJc~>endstream
|
||||||
|
endobj
|
||||||
|
xref
|
||||||
|
0 30
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000061 00000 n
|
||||||
|
0000000124 00000 n
|
||||||
|
0000000231 00000 n
|
||||||
|
0000000343 00000 n
|
||||||
|
0000000490 00000 n
|
||||||
|
0000000638 00000 n
|
||||||
|
0000000785 00000 n
|
||||||
|
0000000933 00000 n
|
||||||
|
0000001081 00000 n
|
||||||
|
0000001228 00000 n
|
||||||
|
0000001376 00000 n
|
||||||
|
0000001492 00000 n
|
||||||
|
0000001598 00000 n
|
||||||
|
0000001804 00000 n
|
||||||
|
0000002065 00000 n
|
||||||
|
0000002271 00000 n
|
||||||
|
0000002358 00000 n
|
||||||
|
0000002673 00000 n
|
||||||
|
0000002747 00000 n
|
||||||
|
0000002859 00000 n
|
||||||
|
0000002969 00000 n
|
||||||
|
0000003101 00000 n
|
||||||
|
0000003208 00000 n
|
||||||
|
0000003314 00000 n
|
||||||
|
0000003426 00000 n
|
||||||
|
0000003523 00000 n
|
||||||
|
0000003598 00000 n
|
||||||
|
0000004033 00000 n
|
||||||
|
0000004691 00000 n
|
||||||
|
trailer
|
||||||
|
<<
|
||||||
|
/ID
|
||||||
|
[<7c6aeed2bcb6a012d5318200c51d871e><7c6aeed2bcb6a012d5318200c51d871e>]
|
||||||
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
|
/Info 17 0 R
|
||||||
|
/Root 16 0 R
|
||||||
|
/Size 30
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
7369
|
||||||
|
%%EOF
|
||||||
184
docs/HELP_REQUEST_20260623.pdf
Normal file
184
docs/HELP_REQUEST_20260623.pdf
Normal file
@@ -0,0 +1,184 @@
|
|||||||
|
%PDF-1.4
|
||||||
|
%“Œ‹ž ReportLab Generated PDF document (opensource)
|
||||||
|
1 0 obj
|
||||||
|
<<
|
||||||
|
/F1 2 0 R /F2 3 0 R /F3 8 0 R /F4 9 0 R /F5 10 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
2 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
3 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
4 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 11 0 R /Fit ] /Rect [ 45.68504 762.0394 133.301 773.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
5 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 11 0 R /Fit ] /Rect [ 45.68504 751.0394 183.525 762.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
6 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 11 0 R /Fit ] /Rect [ 45.68504 740.0394 187.981 751.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
7 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 11 0 R /Fit ] /Rect [ 45.68504 729.0394 86.58904 740.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
8 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
9 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
10 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Symbol /Name /F5 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
11 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 22 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 21 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
12 0 obj
|
||||||
|
<<
|
||||||
|
/Annots [ 4 0 R 5 0 R 6 0 R 7 0 R ] /Contents 23 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 21 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0
|
||||||
|
/Trans <<
|
||||||
|
|
||||||
|
>> /Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
13 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 24 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 21 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
14 0 obj
|
||||||
|
<<
|
||||||
|
/Outlines 16 0 R /PageMode /UseNone /Pages 21 0 R /Type /Catalog
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
15 0 obj
|
||||||
|
<<
|
||||||
|
/Author (Android Cast project) /CreationDate (D:20260626184405+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260626184405+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
|
/Subject (\(unspecified\)) /Title (Developer help request \204 updated 2026-06-23) /Trapped /False
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
16 0 obj
|
||||||
|
<<
|
||||||
|
/Count 4 /First 17 0 R /Last 20 0 R /Type /Outlines
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
17 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 11 0 R /Fit ] /Next 18 0 R /Parent 16 0 R /Title (Done / updated by agent)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
18 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 11 0 R /Fit ] /Next 19 0 R /Parent 16 0 R /Prev 17 0 R /Title (Your verification \(after agent test send\))
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
19 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 11 0 R /Fit ] /Next 20 0 R /Parent 16 0 R /Prev 18 0 R /Title (Still on you \(unchanged from 20260608\))
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
20 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 11 0 R /Fit ] /Parent 16 0 R /Prev 19 0 R /Title (References)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
21 0 obj
|
||||||
|
<<
|
||||||
|
/Count 3 /Kids [ 11 0 R 12 0 R 13 0 R ] /Type /Pages
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
22 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 351
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gas3092>UD&-q_%IZ".;9c,q?k?a-@4E(k62\TZQW\J=?"oS;,J.IGZPB;sOAq"S7.L5F_GmE+mN5c8A`)j/dK/c.1X*)D%S]6g#<Z-/N8a4siF*X0Q&8a9qf1u,AnlBMCkhiCFPCM;2`%JM1YUqFp8qZ'DC[j$\`tj<^oU-K<<U0+G(+]#k]h=hHSjbbbX7g+o>)3eM<,O,\$Ln5g)T1#R)*Q77+5AU(?as*@42uP0LMO1#3gVqha&-DWK#+s(G%d66c02<ugs7%1ku70jB*G6(B^4;ii<>D;,f/q@AHR4qS8WG>&#`qC`DDa[rm)[deXeb]0+^dB3UGE$`X)DDK'E^YP&HE~>endstream
|
||||||
|
endobj
|
||||||
|
23 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 521
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gatn"92FS%'Lqiq(#Q=@_YDhVSBMUC1^b']15h8ETo_;]OP1_q!V,XA2Q75i>uV)4MP^(pkM1h!Or',(H39\&35$Gr6J6l%OeBA*U7D1Qd69<W7@'i,JMBVb>pT=g*t+JeSSAF9ACBNM-<3K$#jWB.PMRu=;/Vbpp'dd@KR$_VG8@nYm9R(Op*V71;?#4QYB_/JBCZFX4lH_CQm%I]F71YT0l0okZn'qHU0=nA&IqD&>n2A^&FaL'gU))<>OSed=&$&1E^@'\6uUmrH#eS)cG.Qg2RZlrep6oj.h/Y1W8*iBe-*O;Ot)Z`b`@ob?Q#5`;E)%h_7J>A1FJ'52Ni79_Z;#O^(4VT<)Shj545&U6op`MR*eUq?L/$=NNDMCr*!?3h;'WbIkP]_];\OtMp2T%V$qRR*h1rmm]"6b%o6jZY0J]igtEP`HGkSr)a8)I5"%Tp8T7[bMX0^u00\JL9L<8FI,$+<[fR<hgL'2hfqd=-b..g.'e*!DAi<_<-1l[,bl.Woi;0#~>endstream
|
||||||
|
endobj
|
||||||
|
24 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2062
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gatm<=``:f&:XAWkXUdFP%JgqVg'pk]^%(5V33=.>_<kYZ*'#g[U8a;DiYA>6<n\k,g'eHqO0U^('+ko,l?1&!<+$kH:<?\(f#W!M?1U6kRGjeT94`R0GVbc2$7[8;,"Z5i&TT4K4MrZ.OGQ++I[]7A/lW3:s4;s#-G]cjs&atT"kRJr^%6.-qRTV&?Ad*Q=ajVj.-#:UYrm'4@tfG;NM[L=tkq(H(5Z=GecE`]Pnk(e>ZS1WDgEX'QSGY`7*4sSneRqCd%\EmJhpU-6Lm#U9/f>Rb-b^(#RFiXaB$O]TDsYE-VUYlM3UpRI<j*ZS(\NlKo,O;B@(p7Oe+=P4Aq'\_tLVAloee2Y8.\W^CKL1Gi<;YNA`o7"n&l@8c%Y("eJ#kt[Y4F9+,4g(:5s%b48o'YS!j[KDD(dZ-VhG="FCYu'&464(&m9lppdVB:qsr"UK;hF+)KljTgWMaOpR3J9:Kn26^pnC>d9HqC*I/!;HiBHH5fDP`U.Nk%*+ne`hnFKtnX`o,Kp/QAVT-IH&m%T8TFOrENKE>cs3%C,.0!_HDMQRljU(o3N0W>C8DXX]$@oBt[j?.>'\>`Y#\bE>hPSk3pZ)[39qcV"e->(XdYF0R2hUR.;mAc^HpD1,ga@Ad]uR%71CAq'*#]KPBg,XE=j[bB5S-M0CDrX2gJ6d1\r/)^VhB;rt`.]Y[S<@jdeng9NhROP<`g_G3\C!]/T:\Dg=)h[H0Yh08D$6OF`.:[!=OLe5`"WBD)\"3n4Ie;?[;?cgJX-1]9,:#'mo\gHGI!qqL89d*sl!-66$5Ot.,kcM@mVa9YT"<uUa;\7*deR<9&bG)Aq+nt_L_>u`Fd%]j=]K-'9k0A>Ip[EKbY&>_nUK`%3n7PCPXs"p%/staG)WE`o$X<sSJ_<KK\MHFUiS9Lg@8Y=HYsd4Su;6ZfAO9)X,W@\P.AHIA_hL7]dIkJYdoKcfZnOD9#=:[rkZ@ac4l&fL.S';m!h#_/Fctge6q*_E94t[gX)th[>ielR]]!)bQcgAAHQ#qL:qTD?;&('>M6el\Ui#4Z@T&sK5AUOV$osXq(5-/X$r`:[p9Qd13CLD8QHh"#maZGS;<;V7LK5i0"e1HAdo+U".RGrQ!kt0Z06e@#(%9.8e87</$rH?_a'Y=d%,7PWLdVsb'nns1QX/_nb`Y5*NRjpL]@o83?ko&[lEU.>XK,l:C)tK'L5u]d<dbDAJ`EQ5urg-R`bj)!mbNS>`=/P2pJmE2t@<4/%di)b4W3nm/#be\rYtO1]JFpSKUH=Gs#W[k99@6/b4Fjfr03gJqK&OTB"o:FY.Z9`#dKq.aZ3?pNg-fJju!iKs+eM/boNV(_&)fJ<8cu+lrd1mAN9e&gVllm"X-a#nSC28,6HBhjSkDCf!G/9=KpbMpS$$E/(bWMh#hggnR7tY8FiVdG`Hb64_?lG,K%B3&"F$p;+;6H1X)3pYE^m3H]!PZK18+@H:t5G7iu_RqE>V3E7,#L`F-i^uCnPE,#c)hYp=V%p/&X^Xos[jm>LO$^bZeU2U$/0+K9TWe1Op>,OdTSgZ\B=0?=]mk/L)H[q>hSNMB+Z&"^T5Mc[np\X6m9t_jjK#;ts-/7=6]Pnd;Y+)J03G/tLiF+JR7HkT<%Z"ofK=LQ0p7"oi=#+O8,?ai-nLIXAOa>7/4(00f,A^W4<=bJ_CO]eQfXddB0M*/5ik!=hp6;>giO&#LfbPep,bdEh'>B(n)olq$:D&lqD*FA-Fir8#]>=!rk,/%Xq"@!]1OKf7/Ag3oleqg<afLE?HQnR(lC!J82Q*WVV@bZ'7=c)oA-*iWnG=O5\cLdSOcoe$57+FE@&'b(rm#6\Ros;)=+;(Ve,=gScqVL/oZg4IDeT!)i'c)Bk>O!Xk\df&"u3^<;7)UUVPmXmbO)LM)5o)oN8:@4([^RQFutN"T$Q/-Oj;_PA+dQH=K>mm'oUtFb#Q28q"iXTqu56]\\IGN-WX]XpPBp_])CK)n9Aqsq:P.Yn%\Vn5FZ16[R#^d62e=u#8qRkT`Q66PV<[M&dQ5o`P<Y8an0<3fH0Yo3H4[V`sUpC~>endstream
|
||||||
|
endobj
|
||||||
|
xref
|
||||||
|
0 25
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000061 00000 n
|
||||||
|
0000000133 00000 n
|
||||||
|
0000000240 00000 n
|
||||||
|
0000000352 00000 n
|
||||||
|
0000000499 00000 n
|
||||||
|
0000000646 00000 n
|
||||||
|
0000000793 00000 n
|
||||||
|
0000000941 00000 n
|
||||||
|
0000001056 00000 n
|
||||||
|
0000001161 00000 n
|
||||||
|
0000001239 00000 n
|
||||||
|
0000001445 00000 n
|
||||||
|
0000001687 00000 n
|
||||||
|
0000001893 00000 n
|
||||||
|
0000001980 00000 n
|
||||||
|
0000002301 00000 n
|
||||||
|
0000002375 00000 n
|
||||||
|
0000002480 00000 n
|
||||||
|
0000002618 00000 n
|
||||||
|
0000002753 00000 n
|
||||||
|
0000002845 00000 n
|
||||||
|
0000002920 00000 n
|
||||||
|
0000003362 00000 n
|
||||||
|
0000003974 00000 n
|
||||||
|
trailer
|
||||||
|
<<
|
||||||
|
/ID
|
||||||
|
[<1d0920c2e13176b58a30f9e5ce52f751><1d0920c2e13176b58a30f9e5ce52f751>]
|
||||||
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
|
/Info 15 0 R
|
||||||
|
/Root 14 0 R
|
||||||
|
/Size 25
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
6128
|
||||||
|
%%EOF
|
||||||
275
docs/SECRETS_AND_RECOVERY.pdf
Normal file
275
docs/SECRETS_AND_RECOVERY.pdf
Normal file
@@ -0,0 +1,275 @@
|
|||||||
|
%PDF-1.4
|
||||||
|
%“Œ‹ž ReportLab Generated PDF document (opensource)
|
||||||
|
1 0 obj
|
||||||
|
<<
|
||||||
|
/F1 2 0 R /F2 3 0 R /F3 14 0 R /F4 15 0 R /F5 16 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
2 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
3 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
4 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 17 0 R /Fit ] /Rect [ 45.68504 762.0394 135.493 773.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
5 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 17 0 R /Fit ] /Rect [ 45.68504 751.0394 105.693 762.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
6 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 17 0 R /Fit ] /Rect [ 45.68504 740.0394 95.92504 751.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
7 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 17 0 R /Fit ] /Rect [ 45.68504 729.0394 107.909 740.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
8 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 17 0 R /Fit ] /Rect [ 45.68504 718.0394 168.405 729.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
9 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 17 0 R /Fit ] /Rect [ 45.68504 707.0394 143.925 718.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
10 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 17 0 R /Fit ] /Rect [ 45.68504 696.0394 153.269 707.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
11 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 17 0 R /Fit ] /Rect [ 45.68504 685.0394 156.389 696.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
12 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 17 0 R /Fit ] /Rect [ 45.68504 674.0394 166.173 685.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
13 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 17 0 R /Fit ] /Rect [ 45.68504 663.0394 73.25304 674.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
14 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
15 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
16 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Symbol /Name /F5 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
17 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 35 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 34 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
18 0 obj
|
||||||
|
<<
|
||||||
|
/Annots [ 4 0 R 5 0 R 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R ] /Contents 36 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 34 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0
|
||||||
|
/Trans <<
|
||||||
|
|
||||||
|
>> /Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
19 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 37 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 34 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
20 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 38 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 34 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
21 0 obj
|
||||||
|
<<
|
||||||
|
/Outlines 23 0 R /PageMode /UseNone /Pages 34 0 R /Type /Catalog
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
22 0 obj
|
||||||
|
<<
|
||||||
|
/Author (Android Cast project) /CreationDate (D:20260626184405+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260626184405+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
|
/Subject (\(unspecified\)) /Title (Secrets, tokens, and recovery \(lab cluster + dev\)) /Trapped /False
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
23 0 obj
|
||||||
|
<<
|
||||||
|
/Count 10 /First 24 0 R /Last 33 0 R /Type /Outlines
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
24 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 17 0 R /Fit ] /Next 25 0 R /Parent 23 0 R /Title (Shared store \(lab cluster\))
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
25 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 17 0 R /Fit ] /Next 26 0 R /Parent 23 0 R /Prev 24 0 R /Title (Recovery priority)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
26 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 17 0 R /Fit ] /Next 27 0 R /Parent 23 0 R /Prev 25 0 R /Title (Gitea \(cast01\))
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
27 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 17 0 R /Fit ] /Next 28 0 R /Parent 23 0 R /Prev 26 0 R /Title (MariaDB \(cluster\))
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
28 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 17 0 R /Fit ] /Next 29 0 R /Parent 23 0 R /Prev 27 0 R /Title (PHP / issues backend \(config.php\))
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
29 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 17 0 R /Fit ] /Next 30 0 R /Parent 23 0 R /Prev 28 0 R /Title (WireGuard \(remote access\))
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
30 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 17 0 R /Fit ] /Next 31 0 R /Parent 23 0 R /Prev 29 0 R /Title (RSSH \(bastion / reverse SSH\))
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
31 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 17 0 R /Fit ] /Next 32 0 R /Parent 23 0 R /Prev 30 0 R /Title (Git HTTPS read tokens \(future\))
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
32 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 17 0 R /Fit ] /Next 33 0 R /Parent 23 0 R /Prev 31 0 R /Title (Checklist after creating any secret)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
33 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 17 0 R /Fit ] /Parent 23 0 R /Prev 32 0 R /Title (Related)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
34 0 obj
|
||||||
|
<<
|
||||||
|
/Count 4 /Kids [ 17 0 R 18 0 R 19 0 R 20 0 R ] /Type /Pages
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
35 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 367
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gas2Eh+@c(&;BTI.F.&+T4oXACpKC2[oZ#'%>%D)FZ0Z]mGbPiI!_'c<a.rrEZd0+o1ar_6La]M)W9>C5@h!OHNkuuE$LT"Gu&ZlWAN^;$O(#KM6'P4>tC0`1=I*h.ro&LaCn^)7e`(!Sp[asE)!Qu?l^hpN!?.%D2lY)hUP.E^?YWBFb+]4k*JBsb8QqTg5YPb0hiJU-WH"be_54,8*r7a?4ZH=mL5H&XTJ<HLqi.p-N-<8"W'2Z<);a7dQ;o<K7k<ZnR@/nfX21R[T`>Oj^;?)amA<dAi;7HG7Wg1Odc+cn/iik86W>GM?RN)Eu<t;G>&Ub7YHBarJl>hlHBgoYQh'u1YXL(b3225JKXain[`d)~>endstream
|
||||||
|
endobj
|
||||||
|
36 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 671
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gatn$?#Q2d'Sc)J/'__;$eI9R_sZ)$D(bOE-"tc'8sMc6`!aDLD-H&YpHYHfCNI<AKEM>qT'%*.1(5QPX?@AHJ=@O]D](5=q&3@/@`UdO,Tlq%Yk-(@O<bPt"t:jl;&82=3)"#.,7ss5Z@p@7L_Mt0)7[ok^WBe9N'b6K#!Xn'D[=6c/P?Or%>Cp9Y(FE?r&<[Y)YSA;0(BVO%XrN:1J$7-=\E+<Q.%8Q_)`&"_br([-u0p3]>*VR&ncWLb]R>9[6)7A)='sUG+_?>?h?Dn[)2YIjTB(b9'>Zb^d\#7jbt,82#.)a4\PY2c_`M.#31-64Y0U<e((I\Z.7QEaC0GZj?l@C5!P%UGI;INK[Y8e1oR.qhKSK\ZFIA7/f%Ab=CNV9Xft5h@m[j5I,7F@NI&er9_3Y?5R4]K?u_/g\uk9p45EIto"JX(>@$Sfirc5;VA0G[$DuO-WfH!phM)M($0uNq-rnWp%SS$:,UmMrQRB^+8^A&H8l1g"$sm;u8.fjiMEnUR[!C#7Y-rM-rWnG(BKjNS&"gRr+6Jd7[i^h00=&WCF"Wr:[IG_@[I`luh%!*^ZgfV0)Z>>7K<S>VI!mtV(N9de?E"R,?#6Y7jA";q`f/"B?=-L^0?q[2ErNuT<K)_Z@4<f/(ITsC[Y5/NAj?9M"+t5T;m#o~>endstream
|
||||||
|
endobj
|
||||||
|
37 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3504
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gb!#^CN%t;')eD/1#LRL`d1H7X2W%Hg.g"3gGJ6kDGb3cL*G*')HkK'jgb<aG=XkJlX<@[(Usb)5Tr-5B/i"dAuL<55H=M9>lhU-JUF/C8mo(1<L7fpI=h(Daa[+9XJ]r,k/:)<YcN\WBXWr]YSd\GKe-5Vfa>`VUmQmf+uZ)DP/0T/(Bc'i[N^1[#8g1e5(3#0B&CSOU2^=*7iK`e)T+I<K,[`:U#82s0X_;J`@7>5>X8uddGP_U)#h1YL*sPqKhP/ua!df;p'*/N07`,G!df#u\cCWu#F:#tX\R&+d4M"U&m3N%&%>gA!a"B:&[',r!oQCbARali2/WK)2qiMuA%5:l@84]RT;9+?Q1kO_1au6[>8=)W"VR!!N.71:G+7neliHNDHp=dKAdOIc?F<OEEdObiR(?Ii=&LA51Gk1MgJk6\8<uPX?,^MQ!^9<:/%-au&ei8u=Ia@+)J/K3XNtETl@Oph]1>8[%b9Ii+Ob-FZmSr,O-#:u%`oFjS:Dp22lW?c%;[?@9<RW0_[p^P6@d>$O"NPe[OPQ?d)_M^+!LAWkW4P:#-G0g`KjJ/[>p>s'u5Hgr4=/a4J$mg]9Y"Ka,G=i7WdVn%2."WR?[V?\eSgP=rkLUr?@H?Esp#/Vd:l0D^B$;Tu_qS>H*s%haVm:GJl30qk\dtl\jMFXi65D3P@uS.HG@[jU/'Saj-HiZC,Wq<>R8MI2iIj(7lNgYF5RMY(:!i[1T0IV1_E"MaW3\DB&8;@S`W?=])>#87L<@220b+Zg/1PoQD8+e4'^Y5E*%TN5JZOR[%__oS9c1Hs.,'$;8_>+UmqBp42EcD5^bn]nAEP;_2p-P&*SC"sE<sdH2_FZP1NrG:u2M.:p6ZENXlJkU#?Xm[oX-YXD@#NL'%Is&j9Eg#rGS5`E4fJGX3OZFRqP0-?)m8F3T:pn1]]EfMp"b)9cj!X8,X@@J(&-Co5E/66(2hT]6*:KW;maI\..p\lqc`&'?r]h_SY@[+_m18IX>id]!uhbU$SZ#i?elL4!!#r9Cm_)57To]Dc0gkmGTgn=$4=XeJEF_MG@>c#r%?[2bEO\u:1jUK9t8e(Q\2^#XZ2;hQiTGh!KJ%gZsA%)Y:0iMlWp>R<8s.bQ*RbC08/60JVEsFI_8CjJL@SXX=,nd@]8bc""0%MXf)ee/eZT3$b.TN>s=']h]inY?)Q%!q\OI4LQ+U;WkDM"+YZF<Z)XPg?5EDI*%*\LC=.M@(>CVr'b1snanV^]16654cTlm:C-ZVArd0SB&$9%C'$`,nR\,T!kUB['@TN;?2[Y2a0@V=<h3e_tW3G^aerh2#=+SJL/tEahKO1eeg[OPC1j+?+un##"Dnc/T0Z=9**R>C-'q8#(Aa>ebS;qH1d9O$BP<VQWd?OHt]jpQ#,M;jk-UiVfZ)4Kn"`E:4aQ.hu#+@o5?LXDG"qXd8&I>4(4cS;(as</s13>"pM0,/,"EojW6XG0o6`_Y!Qq_qhA^L133(ipbW2h"?@ro(0ZPfSe*l`>,!Lj+9X,pB?Vd)<)c_j$&qg/BQJsY:bGEH2BjV9sOLH^G*6O?X56XeJ\7QS[#B#*>,&Mjd94QRcJ5F0)..\N:"O,pHl`$EJ.O282MNYMKt0Al$gW_E3M?:@T$dkU/l!ORIL+5^8j6Z?\2V/`T?T5pP,ds3d[78[9Xlp"JA:H/*e"pcgE[l$LXZ&4J3p3q^i*NGg)WZ*ce*ja$h*Fjc1b/0*d<=fdEc'\(&`P.<;-9k"*<PUft35KJ6_"WeC$EYmW<]gl+-Q;'^F<=&MkgO?BBW40D3o90"jdW(Ah)q4EPL3>m%GRGgkr\A:P?nMk\M0/>5&Sgc.j+j84c*,%5P;*(5EVV/$9g%k::m*g@Ujl?/Z/c,GEl`Aj6NLm0J`,J\KOgbHXAB>e9-DU2ASAKmS1te9)K6;KDopgpne+`%sbH'=lg&1f8l\hgeJ#RBHQkTR^TF@o>U$S^XL:l?9EVbIJhB?W3cJ%KV:TQT&A2<m(*OB\*A9NW"4$a-lV&'!O)m$_lc.W>(g0TDt2\9GrVh@iGI,n567R"D`8Z$3;Xn4n\1eGqQ%-C=Ric)g!S*ERj9Tk4FO_)gXV5<bCLD7`=r+_@V'ZZoVi/D0+>j+7l'7P+K=iQ&8j+oa-Xp%?Zplhj/P,>(dYf7.kd[Rne5R-o7M*2(S-uu9C'a.5WV<L$CPX.?%P\)jskt:SlP;?3#fVOd"l$[S@qg%jfY.APniGr9tTu^amR%Hg0^eVG_.Lo__9c<h\ORq(]T>&;C*$+A6lG_L2.Vm/s%8KSm&I#h-JkNAt>l50qNHb!le/aah)\0b,Ck&\A1I(F3$7p:kBEHI?Gm&mgN0?PiWQ\hoE6$>o[g9lEBC.W0WBV@@HRUt-oE3"*?S`I``8F'a"u^gp$f$ACZ3*mF%m3kZ+;AED[3D<AnrgRu\)ICmD99j[$qA)_dc)\G[i"p*dZq^bQmemlH\?/,/'AXJIcr?&g#+WJRcK`e_Yg/4AP()ZNe7*/>t)jN&;<Mh9:V$03f>No!D>(X8M?kb[OG>tC$,iAe;Fe=On.YP%ERH^``#>hh*cla4^4APRAB%$.S*qskYPDk[ld$?8FuD`%EMIVDRbQj7Mhf5<jSGAgRHFlBoSYWPd@L5l,r,A#"jj::e`:#2s(6,'3RO&LQ%V,$_i`G%Q`6r53ZYq`\Hi>L!L%34pCL?M#U$#PKg^iH*GrUE#lR@9'ZK:TFV2+*piNs$r-E<K0\-D[8NfHC'<Q#<Pc@P3Cbt9:u-@8E@d_HoeG@nP$hL'q3XQ;75nlZR=1Hp?b`4^]9urQ\Xn:5s&LZL`fO:!8tkq6a:"R[hco"\))03Xo!nKI6@\4MpBl!<U`X[prL0Fl,R/1<13=I@A\;W.c31R"[#+j"Rg1,pF^e"Tfbg]2?goki8KX4(]@U7.^8/:R\mR+6I.kp\iNDVM[Al)5[bA-Qg7uE(;/MJI>b![crI`kNZQ!51ni9'&k($Yr9l!U1i/d8?0*486&[Q]g$]hNIF@1"b=Sh"=/Uujun=7^c`f1_?r0?0J7UgT_KI&%i/Zq+b93\9h,!B^+(qO$q(e@>DAKIGD>(umVUr[KJ#j!X,bY!24Xeg,kX^N5I%r"Ms4h35bA&J:Y6M]S\DoJJG\b_>.0J_g_f,pE!Glf`:[CcE3j8T4^^0]*'c_l8a:Zno#0^@J>SW),jD"1tHf.2!0H0Qr9@dCiUk_Ae3F=.6l<O\&u<OQ,h84c)RJ#U?N2='8Ui/>:jMnfST[1.UJ2(d@Frs=/()u9%IQ#2.1#:lasI.K%QE;Q_c<($r"GjKXC(!#q8.MM\GdUV[L'hdd]HA[0rUo,IBDrYj^_tqJk.%@47c&sAI9L@J!rg'?km=VsrDdaBjK<Y&E,Go6G`J]H:ERWO_o]\]b-mZ=H\1Ii*,Mj]&<_aPKTt=W>T[AjcHhh.^>r%4I'J*+eF;5)`<.F@E5_qn3B/i`9Q(_?D3^KhoL1I7J7-JK`+i*;g$\=NA!PF0MMZ~>endstream
|
||||||
|
endobj
|
||||||
|
38 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1625
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gatm;hcK)&&:XAWQq-cg65*O#]MF@&lQ1OpL%T$1_l7L7?;&aaK!,.P:>,cWJ=pONe_8:ooAuGp1FWJ80:MnM('#.\BFQ@d#3-RtS(KF/!H3AVcNu0dD234<a0L8;:98Wj`c5\3JTO$kV(c3U@qK[q_"-YkDRCU6L;q,EoFiR2-XZ+/-I@?<]S]Ah_"X&A;],OhnX0^\$a3:gNf*q;".[b2A7E*NmBhGO],cgA5e+_C2T7p/#nD"n6LGIU=U1D&NM0a'L/XPAFD5rC\WD2")s[0<&GdH:(Z0](P&nluk>\c>U2_k=<k'@A,K\/K]Ukd3`]('.=R;lF[2J42SaXcadLsBc49Z?R<=;Zpa/EYNMO8`YA6Ot?;/0VoQ%g+FXq!+''kD[ZDB[(V^daAWA@O,1Veut1_V@t&*gX"P&WI5.PcrMa')G`:pEN4W4o[p\D*Zd'&X8X-`Bn*a>fW-*c*KI6,qe-^C(?uB\#9V=.+P>_+WJmN_bNo_U?6S0R&3,$;Q3%i:O_dWP40,SfN4orO!Bc,/V:1O*\"KbgaVMR$)NUCU'*)%@)<b96is5i7ffR!T,Bk#WAg74>2ULtqtl&VN8"hrqYfC<KK/J0W_JCGM86#+7_-@8^:-;=[PiRLO588m@B177Bk>)XM?/3-#-:];"$RG(`ju>U-IVaaN:a0:K2%,o0&`=@PD\0+Q:k?E:_tF@KLqo(\JP.\XYl68(;6>-[S1)Z9@?MJ7OEJLa&s`*&Go6R1&eu4MY_4:n8@^8hR(o'H_]!\qK@*N(7T10(<XXVrqX(EhTb_)DgZt_[lp2H<GR9oLY2"m7!3a$AcH5?]o"ZE*05k"XPJ=2=s=QUGg2P#R>F^3eg@icP4$WJLN>;j/<#<is*PP@Na;l?PAn.f[Y,,oc]N*WZ;meEo/cAuNEDWOBp),kU/5[f.nt#s=G`'r^14boDYMY=@\N)fWtdR>8XRUJm%a?[oS!?5.23O*?*]IW6KGgGrIFl)G)nU^.k7d76s>.h92Lp?-8\a?m'9,)`r@T%n!=E!Y8t?UQi:4m06)[2nRicHKYXhY--s()hFjAo!BT$hTtB=EU#<.g-BrTH$iYle(^_M@\l95/Ln,[Z@n$%)\t8gk,FX2SB6`-n)5*c4jd8@WPPBQH\g=)P5"5DqOKVk#S:ZRXFb`*J"s](B&s"&P&SWi6alsD:FBl;<WEnfD:pqsj2,e]3!uaVmH)+8i!?_R-@I645A1C\lUmX($dq^4qa(u3?]9PL-)r:0<5G'cFIXk$O#I3cn38YLEKeg`36'InL\O[i%,1L1M%)NMS5PTRFhOWg8ntTKHnrJr!(C^L/8pD$_S+$pF?c*mHR]ILCqRn.`+)*b;"En%YNq"\^"qTSSkL@+jSG$mhmlYE!`V'UIiL;Bp>,M(F%JC&e(9]:b>Au4.8+5ShkWMU0hY>FU)NLfb.$aEY#eS81S:%@Se]NFb1ddDFo"Clo74X1\W8YrUbtIi6#Hr>slg6Z!jKPhH%hte"JF7T(9BP!URDn[ZB(72eoU>S>CbFdI'T8j'eFVfRQ>cYn)[H9D/2j\OgcgE*DH"\>:qpp4%J'nrpfMta<gMgR3MA'S^GCX)Pe-\U)E('l5K&,:rr=$rr<W~>endstream
|
||||||
|
endobj
|
||||||
|
xref
|
||||||
|
0 39
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000061 00000 n
|
||||||
|
0000000135 00000 n
|
||||||
|
0000000242 00000 n
|
||||||
|
0000000354 00000 n
|
||||||
|
0000000501 00000 n
|
||||||
|
0000000648 00000 n
|
||||||
|
0000000796 00000 n
|
||||||
|
0000000943 00000 n
|
||||||
|
0000001090 00000 n
|
||||||
|
0000001237 00000 n
|
||||||
|
0000001385 00000 n
|
||||||
|
0000001533 00000 n
|
||||||
|
0000001681 00000 n
|
||||||
|
0000001830 00000 n
|
||||||
|
0000001946 00000 n
|
||||||
|
0000002052 00000 n
|
||||||
|
0000002130 00000 n
|
||||||
|
0000002336 00000 n
|
||||||
|
0000002618 00000 n
|
||||||
|
0000002824 00000 n
|
||||||
|
0000003030 00000 n
|
||||||
|
0000003117 00000 n
|
||||||
|
0000003443 00000 n
|
||||||
|
0000003518 00000 n
|
||||||
|
0000003628 00000 n
|
||||||
|
0000003740 00000 n
|
||||||
|
0000003851 00000 n
|
||||||
|
0000003965 00000 n
|
||||||
|
0000004095 00000 n
|
||||||
|
0000004217 00000 n
|
||||||
|
0000004342 00000 n
|
||||||
|
0000004469 00000 n
|
||||||
|
0000004599 00000 n
|
||||||
|
0000004688 00000 n
|
||||||
|
0000004770 00000 n
|
||||||
|
0000005228 00000 n
|
||||||
|
0000005990 00000 n
|
||||||
|
0000009586 00000 n
|
||||||
|
trailer
|
||||||
|
<<
|
||||||
|
/ID
|
||||||
|
[<aa67d45e33efa2f9924363b6a9c52296><aa67d45e33efa2f9924363b6a9c52296>]
|
||||||
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
|
/Info 22 0 R
|
||||||
|
/Root 21 0 R
|
||||||
|
/Size 39
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
11303
|
||||||
|
%%EOF
|
||||||
@@ -1,7 +1,8 @@
|
|||||||
Infrastructure health monitoring draft
|
Infrastructure health monitoring draft
|
||||||
milestone: R0-pre
|
milestone: R0-pre
|
||||||
severity: high
|
severity: high
|
||||||
state: draft (annotated — see [AGENT NOTE] blocks; please review before DR/SPEC conversion)
|
state: closed — DR/SPEC generated; see DRs/20260626_cluster_monitoring.md + specs/20260626_cluster_monitoring.md
|
||||||
|
Track B (orchestration) → drafts/20260626_cluster_orchestration.txt
|
||||||
author: Anton Afanasyeu
|
author: Anton Afanasyeu
|
||||||
date: 2026-06-26
|
date: 2026-06-26
|
||||||
related to: 20260618_repos_reorganizing*, microservice split, clustered CI/CD
|
related to: 20260618_repos_reorganizing*, microservice split, clustered CI/CD
|
||||||
@@ -28,95 +29,29 @@ sometimes it may be very complex, for example
|
|||||||
|-------------------[ VM A master db node ]----X----
|
|-------------------[ VM A master db node ]----X----
|
||||||
|---------[ VM B replica db node ]---|
|
|---------[ VM B replica db node ]---|
|
||||||
|
|
||||||
with such a floating architecture, especially if we gonna use on-demand cluster scaling, there's very hard to perform manual watch of each service or node. even though, good to have a kind of smart hypervisor over all our microservices and cluster nodes that will make a decision what to do next in case, for example:
|
[TRACK B — auto-remediation and auto-scaling scenarios moved to drafts/20260626_cluster_orchestration.txt]
|
||||||
- the microservice X experiences high CPU load, needs to ask CPU load balancer to allocate quickly another node Y and redirect a part of microservice's X requests to new node Y
|
|
||||||
- the microservice X stays untouched for a last Y hours and the cluster's overall load is less than 75% during this time - hypervisor makes a decision to stop redundant instance, simply to save money
|
|
||||||
- the network pressure is superbly high - investigate why, if there's hackers DDoS attack - perform set of actions for DDoS protection, if there's simply spike because a lots of users(customers) - do actions to increase cluster size and bandwidth, etc.
|
|
||||||
- the data storage Y flied away because of HW damage - allocate the replica of storage Y and put it instead of broken one to the cluster
|
|
||||||
etc.
|
|
||||||
|
|
||||||
[AGENT NOTE — auto-remediation scope:
|
|
||||||
Everything above (auto-scale, auto-DDoS-protect, auto-failover storage) is NOT monitoring — it is
|
|
||||||
automated orchestration / cluster self-healing. These are valuable long-term goals but they are an
|
|
||||||
entirely separate and much larger engineering track (think: Kubernetes operators, custom controllers,
|
|
||||||
Ansible event-driven, or a home-grown orchestration plane). Mixing them into the monitoring spec
|
|
||||||
risks scope-creep and may block the R0 delivery.
|
|
||||||
SUGGESTION: Split into two tracks explicitly in the SPEC:
|
|
||||||
Track A (this SPEC, R0): passive monitoring + alerting — observe, record, notify
|
|
||||||
Track B (future, R1+): active remediation — orchestration reacts to monitoring events
|
|
||||||
The DR should decide whether "smart hypervisor" is a Track B placeholder or in-scope for R0.
|
|
||||||
My recommendation: Track B placeholder — list the scenarios as "desired future automation" but
|
|
||||||
do not design them in the monitoring SPEC.]
|
|
||||||
[Anton's answer: agree with suggestion. please help me to organize Track B as a separate draft document as you see it; make sure it would be referenced in Track A like a next-gen step of supervising over the infra, clean up everything from exactly this draft that refers to Track B, so we'll expect Track B will not be forgotten]
|
|
||||||
|
|
||||||
Basically, the most important set of monitored events may be:
|
Basically, the most important set of monitored events may be:
|
||||||
- hardware health monitoring
|
- hardware health monitoring
|
||||||
-- node / microservice availability
|
-- CPU: utilization %, steal time (Xen-critical), load average 1m/5m/15m
|
||||||
-- ... TBD
|
-- RAM: used / available / swap usage
|
||||||
|
-- Disk: utilization %, IOPS, write latency, SMART health
|
||||||
[AGENT NOTE — hardware monitoring gaps worth filling in TBD:
|
-- NIC: ingress/egress bytes/sec, packet drops, errors
|
||||||
Standard items for Xen/KVM VM nodes (project already runs XEN HVM/paravirt):
|
-- Xen guest: vcpu steal, balloon driver state
|
||||||
-- CPU: utilization %, steal time (critical for Xen — if hypervisor steals CPU, steal > 10% is a red flag)
|
|
||||||
-- RAM: used / available / swap usage
|
|
||||||
-- Disk: utilization %, IOPS, write latency (key for MariaDB nodes), disk SMART via smartmontools
|
|
||||||
-- NIC: ingress/egress bytes/sec, packet drops, errors
|
|
||||||
-- Load average (1m/5m/15m)
|
|
||||||
-- Xen-specific: dom0 balloon driver state, vcpu credit scheduler stats
|
|
||||||
Suggest confirming which of these you want in SPEC §3 (requirements table).]
|
|
||||||
[Anton's answer: you have clearer vision on that rather than me, i'm not a devops, please help to reconstruct/organize the doc that way, i can just confirm that again your suggestion is more structured; i would say it's better to keep an eye over all of the metrics, but up to you there]
|
|
||||||
|
|
||||||
- software health monitoring
|
- software health monitoring
|
||||||
-- node / microservice availability
|
-- node / microservice availability (process presence + HTTP health probe)
|
||||||
-- the reason
|
-- HTTP response time and status code per service endpoint
|
||||||
--- scale needed
|
-- log error rate (ERROR/CRITICAL lines per minute, syslog/journald)
|
||||||
--- unsuccessful configuration
|
-- MariaDB: replication lag (seconds_behind_master), connection count, slow query count
|
||||||
--- software not getting up
|
-- nginx: 5xx rate, upstream connection errors
|
||||||
--- out of resources
|
-- php-fpm: queue depth, worker saturation
|
||||||
-- ... TBD
|
-- cause classification: scale needed / bad config / process crash / OOM
|
||||||
|
|
||||||
[AGENT NOTE — software monitoring gaps worth filling:
|
|
||||||
Standard per-service items:
|
|
||||||
-- HTTP health endpoint response time + status code (blackbox probe, e.g. /health or /ping)
|
|
||||||
-- Process presence check (is nginx/php-fpm/mariadb PID alive?)
|
|
||||||
-- Log error rate (ERROR/CRITICAL lines per minute from syslog/journald)
|
|
||||||
-- MariaDB: replication lag (seconds_behind_master), connection count, slow query count
|
|
||||||
-- nginx: 5xx rate, upstream connection errors
|
|
||||||
-- php-fpm: queue depth, worker saturation
|
|
||||||
These map naturally to exporters (see tool section note below).]
|
|
||||||
[Anton's answer: agreed]
|
|
||||||
|
|
||||||
- provider's fault
|
- provider's fault
|
||||||
-- hardware or software
|
-- Xen host / uplink availability detected via external probe (UptimeRobot, no install)
|
||||||
-- service absense
|
-- internal: cast04 blackbox_exporter checks FE endpoint from inside cluster
|
||||||
-- payment expired
|
-- software/service absence, payment expiry: ops calendar + manual review (not auto-detectable)
|
||||||
-- ... TBD
|
|
||||||
|
|
||||||
[AGENT NOTE — provider fault detection:
|
|
||||||
This category requires EXTERNAL monitoring — probes from outside your network to verify
|
|
||||||
that apps.f0xx.org is reachable from the public internet. Internal monitoring is blind to:
|
|
||||||
- Anton's router/uplink going down
|
|
||||||
- XEN host hardware failure (the VM's own monitoring dies with it)
|
|
||||||
- BGP/routing issues upstream
|
|
||||||
Options for external check:
|
|
||||||
a) UptimeRobot / Freshping / BetterUptime free tier (simple HTTP check from cloud)
|
|
||||||
b) Self-hosted Uptime Kuma on a VPS outside this network (cheapest independent probe)
|
|
||||||
c) Blackbox Exporter + Prometheus alerting IF the Prometheus instance is outside the cluster
|
|
||||||
"Payment expired" can't really be auto-detected; it's an ops reminder / calendar alert.
|
|
||||||
Suggest clarifying in SPEC: external uptime check is REQUIRED for provider-fault detection,
|
|
||||||
and it must live OUTSIDE the monitored cluster.]
|
|
||||||
[Anton's answer: unfortunately there are some sw limits that may probably being a soft-blockers, for example (using current architecture):
|
|
||||||
- we cannot deeply change the set of software on the router
|
|
||||||
- we cannot change the software on FE side as well
|
|
||||||
- we can rely and fully operate only with cluster/nodes
|
|
||||||
future, renting the true cloud infrastructure, AWS, GClouds, Azure, etc.:
|
|
||||||
- also some risks/limitations on changing top-level software because owned by cloud provider
|
|
||||||
- but probably it's a kind of 'hackable', don't know - newer rented foreign cloud infra before
|
|
||||||
|
|
||||||
think about it
|
|
||||||
|
|
||||||
]
|
|
||||||
|
|
||||||
- ... TBD
|
|
||||||
|
|
||||||
a simple example, using the current lab infrastructure:
|
a simple example, using the current lab infrastructure:
|
||||||
[global net x.x.x.x] <-> [(134.17.26.161 external IP) router (debian-based] (internal IP 10.7.6.228) ] <-> [(10.7.0.10 intra network 1) FE (intra network 2: 10.7.0.0/8)] [intra network 3: ...]
|
[global net x.x.x.x] <-> [(134.17.26.161 external IP) router (debian-based] (internal IP 10.7.6.228) ] <-> [(10.7.0.10 intra network 1) FE (intra network 2: 10.7.0.0/8)] [intra network 3: ...]
|
||||||
@@ -127,178 +62,60 @@ the owner of top-level services is Anton Afanasyeu. top level services include:
|
|||||||
- basic on-demand OS installation, on-demand VM snapshots
|
- basic on-demand OS installation, on-demand VM snapshots
|
||||||
----------- all up is SaaS, for all the questions contact owner ---------
|
----------- all up is SaaS, for all the questions contact owner ---------
|
||||||
|
|
||||||
-- cluster of VM's, XEN-based (hvm or paravirt, depends)
|
-- cluster of VM's, XEN-based (paravirt, Alpine latest LTS)
|
||||||
-- VM's control, VM's internal software installation, access, aggregation, fine tunings, software development, ssh, internal setups, etc.
|
-- VM's control, VM's internal software installation, access, aggregation, fine tunings, software development, ssh, internal setups, etc.
|
||||||
----------- the last few lines are totally controllable by developer, developed product owner and projects workers as decided by product owner ---------
|
----------- the last few lines are totally controllable by developer, developed product owner and projects workers as decided by product owner ---------
|
||||||
the VM delegated cluster owner must set its own monitoring software where it needs to be placed and monitor all the parameters he decided to keep an eye on, like:
|
|
||||||
1) hardware resources load, per cluster node and overall in-cluster, comparing the max. values delegated by Anton Afanasyeu according to payment fee for the cluster; like Anton guarantees that CPU will be real (not emulated) and it will be Intel 8 cores of Gold 5218 CPU @ 2.30GHz series, 8Gb of RAM per node, 32Gb of non-shared disk space per node, 3 nodes in cluster, 200Mbit in/out internet, etc; the project owner should have monitoring based of the extremum of each of parameters, compare with proposed plan, alert of some of values differ than what Anton guaranteed
|
|
||||||
2) project owner took 3 nodes / cluster; after month of heavy load one of the nodes show instabilities and slow data writes using distributed among the nodes MariaDb; MariaDb monitoring show exactly that Node B contains the replica of master db node and it's possible that there's a hardware fault (disk writes), so he should notify Anton to take it into account and provide spare node
|
|
||||||
3) slow egress/ingress -> delegate to Anton
|
|
||||||
4) one of project services or its relatives aren't responding well - there should be per-service self monitoring and should raise an alert if so
|
|
||||||
|
|
||||||
[AGENT NOTE — monitoring placement (unanswered design question):
|
MONITORING PLACEMENT DECISION: Option A — cast04 (dedicated 4th Alpine VM, monitoring-only node).
|
||||||
The draft does not address where the monitoring stack itself lives. This is a key SPEC decision:
|
Monitoring stack lives on cast04, isolated from the 3 workload nodes cast01/cast02/cast03.
|
||||||
Option A: Dedicated monitoring VM (4th node, outside the 3-node cluster)
|
Router and FE are config-only (no new software); monitoring uses cluster-internal network only.
|
||||||
+ monitoring survives a cluster node failure
|
|
||||||
- costs an extra VM
|
|
||||||
Option B: On one of the 3 existing cluster nodes (e.g. the "ops" node)
|
|
||||||
- if that node fails, monitoring goes dark — worst case: you're blind exactly when you need it
|
|
||||||
+ no extra cost
|
|
||||||
Option C: On Anton's infra (outside delegated cluster entirely)
|
|
||||||
+ most resilient for node-level failure detection
|
|
||||||
- requires coordination with Anton; may not be acceptable for project-owner autonomy
|
|
||||||
Option D: Lightweight agents on each node, reporting to a cloud-hosted aggregator (e.g. Grafana Cloud
|
|
||||||
free tier, or any external SaaS)
|
|
||||||
+ zero infra overhead; survives full cluster outage
|
|
||||||
- data leaves your network
|
|
||||||
SUGGESTION: Decide and lock in SPEC §2 (topology). My recommendation: Option A or D depending
|
|
||||||
on budget constraints. Option B is acceptable for lab/pre-alpha only.]
|
|
||||||
[Anton's answer:
|
|
||||||
Option A: currently doable, having full control over hypervised VMs; dedicated machine isn't something that can block us
|
|
||||||
Option B: likely the chosed one for now, once we on Anton's provided resources but a bit limited on their capacity; thinking about A and B what to choose
|
|
||||||
Option C: good, but no. prefer to keep everything together until going to real clouds
|
|
||||||
Option D: good about lightweight agents, but don't want to track the data somewhere outside; prefer to keep everything single-hosted
|
|
||||||
|
|
||||||
Now i think option A is the best from robust and future knowledge, although, probably, the hardest in implementation. if another Alpine instance (cast04 as 4th node) will take care of monitoring, I'm fine with option A
|
External check for provider-fault: UptimeRobot free tier (web registration only, no install anywhere).
|
||||||
]
|
|
||||||
|
|
||||||
The how:
|
|
||||||
the actor (any of) may be triggered on faulty node, cluster, service, ..., state, first off, by email. any other services are also likely to have (messengers, SMS, etc.), but anyway we should integrate some monitoring visualizer(s):
|
|
||||||
1) Visualization of the whole infrastructure
|
|
||||||
2) Visualization per cluster and per Node health
|
|
||||||
3) Visualization per service provided by distro used inside the each Node
|
|
||||||
4) Visualization per service of project's software inside the each Node
|
|
||||||
based on the requirements, a few almost-ready solutions touch the souls:
|
|
||||||
1. Grafana (Kibana)
|
|
||||||
|
|
||||||
[AGENT NOTE — Grafana ≠ Kibana — FACTUAL CORRECTION:
|
|
||||||
These are two completely different products from different companies and stacks:
|
|
||||||
- Grafana (grafana.com): standalone visualization layer; plugs into Prometheus, InfluxDB,
|
|
||||||
Loki, TimescaleDB/PostgreSQL, etc. Self-hosted or Grafana Cloud.
|
|
||||||
- Kibana: the "K" in the ELK stack (Elasticsearch + Logstash + Kibana). Primarily a log
|
|
||||||
analysis/search UI over Elasticsearch indices. NOT typically used for infra metrics.
|
|
||||||
The project already has a Grafana pivot analysis doc: GRAFANA_vs_others_graphvis_pivot.md.
|
|
||||||
They should be listed and evaluated separately. My suggestion: drop Kibana from this section
|
|
||||||
(ELK is heavy and log-centric, not the primary choice for VM metrics), or add it as a separate
|
|
||||||
option specifically for centralized log aggregation (not metrics dashboards).]
|
|
||||||
[Anton's answer: ok, let's exclude Kibana at all from our goals/perspectives]
|
|
||||||
|
|
||||||
1.1 Pros: the most beautiful and user-friendly; pretty easy to play with pre-stored parameters, building customized graphics; may be self-hosted; may reflect anything you want, but the administrator's eye is required on it, at least on the first steps
|
|
||||||
1.2 Cons: requires additional software, like Prometheus (the most commonly used) or maybe other time-series based engine; so flexible that it is sometimes unbelievably hard to create pre-stored parameters set to visualize it later; requires also additional data converters/plugins, Prometheus-friendly
|
|
||||||
|
|
||||||
[AGENT NOTE — Prometheus deserves its own section:
|
|
||||||
Prometheus is the core of the recommended stack for VM cluster monitoring and should be called
|
|
||||||
out explicitly, not just as a "Grafana requirement". The stack is:
|
|
||||||
Prometheus (time-series DB + scraper) + node_exporter (per VM hardware metrics)
|
|
||||||
+ blackbox_exporter (HTTP/TCP service probes) + Alertmanager (routing alerts to email/Slack/etc.)
|
|
||||||
+ Grafana (dashboards on top)
|
|
||||||
Each component is independently useful and has a clear role. Ready-made "community dashboards"
|
|
||||||
exist in Grafana for node_exporter (dashboard ID 1860 — "Node Exporter Full") and MariaDB.
|
|
||||||
Also worth mentioning: VictoriaMetrics as a drop-in Prometheus-compatible TSDB — uses 5-10x
|
|
||||||
less RAM/disk, easier to run on a small cluster, retains data longer by default. If the cluster
|
|
||||||
nodes are small (8GB RAM per node), VictoriaMetrics may be preferable to Prometheus itself.
|
|
||||||
Relationship to existing project TimescaleDB platform: Prometheus/VictoriaMetrics is for INFRA
|
|
||||||
metrics (CPU/RAM/disk/latency). TimescaleDB is proposed for APPLICATION/BUSINESS metrics
|
|
||||||
(crash rates, session counts, graph analytics). These can coexist — different stores, different
|
|
||||||
retention, different queries. Grafana queries both. Clarify this split in the SPEC.]
|
|
||||||
[Anton's answer: good to know,i just want you again to re-read the soft limitations i've described above; pressure is that we cannot somehow install new software neither on router nor on FE unfortunately; if there's no need, then just OK; if need is not intended as mandatory - also ok, we just lose some of metrics, which is currently fine)
|
|
||||||
|
|
||||||
2. Zabbix
|
|
||||||
2.1 Pros: good UI/UX, pretty easy to deploy; good support, good abilities;
|
|
||||||
2.2 Cons: not as good as Grafana+... from the UI/UX perspective
|
|
||||||
2.3 Need to check the licensing
|
|
||||||
|
|
||||||
[AGENT NOTE — Zabbix licensing:
|
|
||||||
Zabbix Community Edition is GPL v2 licensed — free for any use. No commercial license needed
|
|
||||||
for self-hosted monitoring of your own infrastructure. The Zabbix Agent on monitored nodes is
|
|
||||||
also LGPL. This concern is resolved; not a blocker.
|
|
||||||
Zabbix is a "batteries included" solution — agent + server + DB + UI in one package, which is
|
|
||||||
its main practical advantage over Prometheus+Grafana. Easier initial setup, built-in alerting,
|
|
||||||
no separate Alertmanager. Downside: more opinionated, harder to integrate with custom app metrics
|
|
||||||
vs Prometheus's pull model.]
|
|
||||||
|
|
||||||
3. Nagios
|
|
||||||
3.1 Pros: the most probably known and loved by many administrators, can capture any data, lightweight;
|
|
||||||
3.2 Cons: i don't know nothing about data visualization, may be Nagios is just data collector and visualization being made by for example Grafana? disadvantage also in that this is very complex solution, hard to tune, hard to maintain
|
|
||||||
|
|
||||||
[AGENT NOTE — Nagios clarification:
|
|
||||||
Nagios Core does have its own built-in web UI (CGI-based, classic green/red status board), but it
|
|
||||||
is very basic — good for status/alerting, poor for time-series graphs.
|
|
||||||
Nagios is NOT a time-series data collector — it is a status/alert engine (checks return OK/WARNING/
|
|
||||||
CRITICAL states). For historical graphs, Nagios is typically paired with PNP4Nagios or Graphite, NOT
|
|
||||||
Prometheus/Grafana directly (though adapters exist).
|
|
||||||
Modern consensus: Nagios has been largely superseded by Prometheus+Alertmanager for metrics-based
|
|
||||||
monitoring. Nagios Core is still used for pure availability checks (is the host/port up?) but the
|
|
||||||
ecosystem has moved on. Suggest downgrading this option to "legacy/not recommended for new setups".
|
|
||||||
Nagios XI (commercial) is polished but not free.
|
|
||||||
If lightweight availability-only checks are needed, Uptime Kuma is a modern self-hosted alternative
|
|
||||||
to Nagios with a much better UI and zero configuration overhead.]
|
|
||||||
|
|
||||||
4. ... TBD, any suggestions
|
|
||||||
|
|
||||||
[AGENT NOTE — additional options worth considering:
|
|
||||||
4. Prometheus + Grafana (recommended for this cluster, see notes above)
|
|
||||||
- node_exporter: CPU/RAM/disk/NIC per VM
|
|
||||||
- blackbox_exporter: HTTP/TCP service health probes
|
|
||||||
- mysqld_exporter: MariaDB replication lag, slow queries, connections
|
|
||||||
- Alertmanager: route alerts to email + Telegram/Slack
|
|
||||||
- Grafana: dashboards (community templates available for all the above)
|
|
||||||
- VictoriaMetrics (optional): replace Prometheus TSDB for lower resource use on 8GB nodes
|
|
||||||
5. Netdata (https://netdata.cloud)
|
|
||||||
- Installs as a single agent per node (apt/apk/bash one-liner)
|
|
||||||
- Gives real-time per-node dashboard out of the box — zero configuration for hardware metrics
|
|
||||||
- Can stream to a central Netdata parent node
|
|
||||||
- Netdata Cloud (free tier) aggregates cross-node view without self-hosting a central stack
|
|
||||||
- Useful for quick bootstrapping before a full Prometheus stack is deployed
|
|
||||||
- License: GPL v3
|
|
||||||
6. Uptime Kuma (https://github.com/louislam/uptime-kuma)
|
|
||||||
- Lightweight self-hosted service uptime monitor (HTTP/TCP/DNS/ping checks)
|
|
||||||
- Very easy to deploy (Docker single container)
|
|
||||||
- Covers "is service X responding?" with beautiful status page
|
|
||||||
- Good complement to Prometheus (Prometheus = deep metrics, Uptime Kuma = simple uptime)
|
|
||||||
- License: MIT
|
|
||||||
7. ELK / OpenSearch (for logs, not metrics)
|
|
||||||
- Elasticsearch + Logstash/Fluent Bit + Kibana/OpenSearch Dashboards
|
|
||||||
- Best for centralized log aggregation and search (nginx access logs, php-fpm error logs, syslog)
|
|
||||||
- Heavy (needs 4+ GB RAM for Elasticsearch alone) — probably overkill for current lab
|
|
||||||
- Grafana Loki is a lighter alternative for log aggregation that integrates natively with Grafana]
|
|
||||||
[Anton's answer: cool, I like everything proposed there]
|
|
||||||
|
|
||||||
5. Mixed (hybrid), like Grafana + Zabbix
|
|
||||||
... TBD
|
|
||||||
|
|
||||||
[AGENT NOTE — hybrid recommendation:
|
|
||||||
Based on the project's existing infra (Alpine VMs, MariaDB, nginx, PHP-FPM, Xen, 8GB RAM/node)
|
|
||||||
and what's already discussed in GRAFANA_vs_others_graphvis_pivot.md, my suggestion for SPEC:
|
|
||||||
|
|
||||||
RECOMMENDED STACK (R0):
|
|
||||||
Infra layer: Prometheus (or VictoriaMetrics) + node_exporter on each VM
|
|
||||||
+ blackbox_exporter for HTTP/TCP probes
|
|
||||||
+ mysqld_exporter for MariaDB
|
|
||||||
+ Alertmanager → email (required) + Telegram bot (optional)
|
|
||||||
Dashboard: Grafana (community dashboards for node_exporter + MariaDB)
|
|
||||||
Uptime: Uptime Kuma on a separate lightweight VM or the FE (external to cluster)
|
|
||||||
Deployment: ac-deploy (new monitoring/ role in cluster0 scripts)
|
|
||||||
|
|
||||||
FUTURE (R1):
|
|
||||||
Log aggregation: Grafana Loki + Promtail (lighter than ELK)
|
|
||||||
Auto-remediation: custom event handler scripts triggered by Alertmanager webhooks
|
|
||||||
Business metrics: Grafana queries TimescaleDB (already in project plan)
|
|
||||||
|
|
||||||
OPEN QUESTION FOR PO: Should the monitoring stack get its own VM node (4th node), or run
|
|
||||||
on one of the 3 cluster nodes (and which one)? This affects DR decision §2.]
|
|
||||||
[Anton's answer: good, so we agreed on most of the points there, i also concluded this combination as the better one for myself. I think I've addressed almost all the questions. the Q from my side:
|
|
||||||
imagine I've allocated yet another VM and put it inside cluster as an empty node (only os-basic software is installed)
|
|
||||||
- do I need something from DNS hosting provider, like CNAME records, additional TXT records maybe?
|
|
||||||
- do we need a kind of tuning of the existing FE configs (nginx which is a forwarder there, for example)
|
|
||||||
- ImprovMX, addy.io, Telegram bot where? internally deployed inside the cluster or externally used by sort of API? need to create accounts for the document target feature? on which services, just to be ready before we go?
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
[Anton's nodes:
|
The how — DECIDED STACK:
|
||||||
just to remind, we're limited on this on the server's side:
|
|
||||||
- machine type: next type will be likely paravirtualized (no HVM)
|
INFRA METRICS (cast04):
|
||||||
- OS type: Alpine latest LTS (or Edge, but manually configured changing the repos)
|
- prometheus + node_exporter on cast01/cast02/cast03/cast04 (apk add)
|
||||||
- software: likely from the Alpine community packages/ package manager; meaning we'll try to avoid any source-based software, preferring apk's built for the particular Alpine
|
- prometheus-blackbox-exporter on cast04 for HTTP/TCP service probes (apk add)
|
||||||
- FE/router: unlikely to install the software there, almost untouchable; we can play just with the configuration, like adding routes, playing with iptables, etc. with the existing software, but no new installations there
|
- prometheus-mysqld-exporter on MariaDB node (apk add)
|
||||||
]
|
- alertmanager on cast04 → email (SMTP relay) + Telegram bot (API only)
|
||||||
|
- grafana on cast04 (apk add); community dashboards for node_exporter + MariaDB
|
||||||
|
|
||||||
|
UPTIME STATUS PAGE (cast04, Docker):
|
||||||
|
- Uptime Kuma (Docker) on cast04 for a clean per-service status page
|
||||||
|
- Docker itself available via apk
|
||||||
|
|
||||||
|
EXTERNAL AVAILABILITY:
|
||||||
|
- UptimeRobot free tier — no install, web registration, HTTP probe to apps.f0xx.org
|
||||||
|
- Alerting via email from UptimeRobot
|
||||||
|
|
||||||
|
NOT CHOSEN (and why):
|
||||||
|
- Kibana/ELK: excluded (log-centric, heavy, wrong tool for infra metrics)
|
||||||
|
- Zabbix: licensing OK but less flexible for future business metrics integration vs Grafana
|
||||||
|
- Nagios: legacy, superseded by Prometheus+Alertmanager for this use case
|
||||||
|
- VictoriaMetrics: not in Alpine apk repos; use standard Prometheus at this scale
|
||||||
|
- Grafana Cloud / external SaaS aggregator: data must stay self-hosted (Anton's decision)
|
||||||
|
|
||||||
|
FUTURE (Track B, R1+):
|
||||||
|
- Grafana Loki + Promtail for centralized log aggregation
|
||||||
|
- Alertmanager webhook handlers for auto-remediation triggers
|
||||||
|
- Grafana queries TimescaleDB for business/application metrics (complement, not replace Prometheus)
|
||||||
|
|
||||||
|
CONSTRAINTS (Alpine notes):
|
||||||
|
- Machine: paravirtualized XEN guest (no HVM)
|
||||||
|
- OS: Alpine latest LTS (community + edge repos)
|
||||||
|
- Software: apk packages only; Docker available via apk for Uptime Kuma
|
||||||
|
- FE/router: no software installation; config-only (iptables, routes, existing software)
|
||||||
|
|
||||||
|
PRE-REQUISITES (accounts to create before deploy):
|
||||||
|
- Email alert relay: Gmail account + app password, OR Mailgun free tier (outbound SMTP only)
|
||||||
|
NOTE: ImprovMX and addy.io are inbound email routing services — NOT usable as SMTP relay for Alertmanager
|
||||||
|
- Telegram alerts: @BotFather → create bot → get TOKEN + CHAT_ID (add bot to ops group)
|
||||||
|
No software install; Alertmanager calls Telegram API from cast04
|
||||||
|
- UptimeRobot: free account at uptimerobot.com → add HTTP monitor for apps.f0xx.org
|
||||||
|
|
||||||
|
DNS / FE NGINX:
|
||||||
|
- R0: no DNS changes, no FE nginx changes required
|
||||||
|
- cast04 monitoring stack is internal-only (access via SSH tunnel or WireGuard from dev machine)
|
||||||
|
- Future optional: FE nginx proxy rule (config-only) to expose Grafana at e.g. /monitoring/ externally
|
||||||
|
|||||||
72
drafts/20260626_cluster_orchestration.txt
Normal file
72
drafts/20260626_cluster_orchestration.txt
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
Cluster self-healing and automated orchestration draft (Track B)
|
||||||
|
milestone: R1+
|
||||||
|
severity: high
|
||||||
|
state: placeholder — not for immediate implementation; referenced by monitoring SPEC (Track A)
|
||||||
|
author: Anton Afanasyeu
|
||||||
|
date: 2026-06-26
|
||||||
|
related to: 20260626_cluster_monitoring*, 20260618_repos_reorganizing*, microservice split
|
||||||
|
|
||||||
|
Track A (prerequisite, must be complete first):
|
||||||
|
- Full passive monitoring + alerting operational (see specs/20260626_cluster_monitoring.md)
|
||||||
|
- Alert routing proven stable (email + Telegram)
|
||||||
|
- At least 4 weeks of baseline metrics collected (needed to calibrate thresholds)
|
||||||
|
|
||||||
|
The idea:
|
||||||
|
Once the monitoring layer (Track A) is stable and producing reliable alert signals, the next step is
|
||||||
|
to make the cluster respond to those signals automatically — rather than requiring a human to act on
|
||||||
|
every alert. This is commonly called cluster self-healing, auto-remediation, or a "smart hypervisor"
|
||||||
|
layer. It is NOT part of the monitoring SPEC; it is an orchestration concern.
|
||||||
|
|
||||||
|
Target scenarios (desired future automation):
|
||||||
|
|
||||||
|
Scenario 1 — CPU overload → horizontal scale-out
|
||||||
|
Trigger: microservice X CPU utilization > threshold for N minutes (Alertmanager signal)
|
||||||
|
Action: provision new node Y (via Xen/cloud API), deploy microservice X replica on it,
|
||||||
|
update load balancer / nginx upstream, re-route portion of traffic
|
||||||
|
Complexity: HIGH — requires VM provisioning API + dynamic nginx config reload
|
||||||
|
|
||||||
|
Scenario 2 — Idle scale-in (cost saving)
|
||||||
|
Trigger: microservice X CPU < threshold for Y hours AND overall cluster load < 75%
|
||||||
|
Action: gracefully drain microservice X instance, deprovision node, update upstream config
|
||||||
|
Complexity: HIGH — requires graceful drain protocol per microservice type
|
||||||
|
|
||||||
|
Scenario 3 — DDoS / network spike response
|
||||||
|
Trigger: NIC ingress/egress > threshold OR nginx 5xx rate spikes (Alertmanager signal)
|
||||||
|
Sub-action A (DDoS suspected): block suspect IPs, rate-limit at iptables, notify Anton
|
||||||
|
Sub-action B (organic spike): scale out cluster capacity, increase bandwidth (notify Anton for
|
||||||
|
bandwidth tier change — cannot be auto-done from cluster)
|
||||||
|
Complexity: VERY HIGH — requires traffic analysis, IP reputation, coordinated with upstream
|
||||||
|
|
||||||
|
Scenario 4 — Storage fault recovery
|
||||||
|
Trigger: disk SMART pre-failure / disk write latency > threshold on node Y
|
||||||
|
Action: elect replica to master (if MariaDB GTID replication is active), notify Anton to
|
||||||
|
provision spare node, re-sync replica on new node
|
||||||
|
Complexity: HIGH — MariaDB GTID failover + new node provisioning
|
||||||
|
|
||||||
|
Common prerequisites for all scenarios:
|
||||||
|
1. Track A monitoring + alerting fully operational (Alertmanager webhook available)
|
||||||
|
2. VM provisioning API (Xen xl toolstack or cloud provider API with automation credentials)
|
||||||
|
3. Configuration management (Ansible / ac-deploy role) for dynamic service placement
|
||||||
|
4. Graceful drain protocol defined per microservice (health endpoint + connection draining)
|
||||||
|
5. Load balancer / nginx upstream reconfiguration automation (e.g. consul-template or custom script)
|
||||||
|
6. Decision logic (thresholds, hysteresis, human-in-the-loop gates vs fully-automatic)
|
||||||
|
|
||||||
|
Approach options (TBD — to be designed in R1 DR):
|
||||||
|
a) Kubernetes operators (standard industry path; requires migrating to K8s)
|
||||||
|
b) Ansible event-driven (Ansible EDA) — react to Alertmanager webhooks with playbooks
|
||||||
|
c) Home-grown orchestration scripts called by Alertmanager webhook receiver on cast04
|
||||||
|
d) HashiCorp Nomad + Consul (lighter than K8s; service placement + dynamic upstream config)
|
||||||
|
|
||||||
|
Open questions (for R1 DR):
|
||||||
|
- Does Anton's infrastructure support Xen VM provisioning via API / xl scripting?
|
||||||
|
- What is the minimum cluster node count for safe scale-in (must keep >= N nodes)?
|
||||||
|
- Is Kubernetes acceptable given paravirt constraint (k3s on Alpine paravirt is feasible)?
|
||||||
|
- What is the human-in-the-loop policy: always require approval for scale-out/in, or fully
|
||||||
|
automatic within defined bounds?
|
||||||
|
- Cost model for scale-out: how are additional nodes billed / what is the budget ceiling?
|
||||||
|
|
||||||
|
Related documents:
|
||||||
|
- Track A: docs/DRs/20260626_cluster_monitoring.md + docs/specs/20260626_cluster_monitoring.md
|
||||||
|
- Scaling SPEC: docs/specs/20100612_1_scaling.md
|
||||||
|
- Repo reorganization SPEC: docs/specs/20260618_repos_reorganizing.md
|
||||||
|
- ac-deploy cluster scripts: orchestration/sim/cluster0/
|
||||||
@@ -305,7 +305,7 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
51 0 obj
|
51 0 obj
|
||||||
<<
|
<<
|
||||||
/Author (Android Cast project) /CreationDate (D:20260623115607+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115607+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
/Author (Android Cast project) /CreationDate (D:20260626184405+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260626184405+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
/Subject (\(unspecified\)) /Title (URL shortener service \204 specification) /Trapped /False
|
/Subject (\(unspecified\)) /Title (URL shortener service \204 specification) /Trapped /False
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
@@ -647,7 +647,7 @@ xref
|
|||||||
trailer
|
trailer
|
||||||
<<
|
<<
|
||||||
/ID
|
/ID
|
||||||
[<dfb56bfa7fa29c8df90718f7ff48e788><dfb56bfa7fa29c8df90718f7ff48e788>]
|
[<d518e6310f2e40f7990db3642e85692e><d518e6310f2e40f7990db3642e85692e>]
|
||||||
% ReportLab generated PDF document -- digest (opensource)
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
/Info 51 0 R
|
/Info 51 0 R
|
||||||
|
|||||||
@@ -425,7 +425,7 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
67 0 obj
|
67 0 obj
|
||||||
<<
|
<<
|
||||||
/Author (Android Cast project) /CreationDate (D:20260623115607+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115607+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
/Author (Android Cast project) /CreationDate (D:20260626184405+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260626184405+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
/Subject (\(unspecified\)) /Title (Platform scaling and multi-environment architecture \204 specification) /Trapped /False
|
/Subject (\(unspecified\)) /Title (Platform scaling and multi-environment architecture \204 specification) /Trapped /False
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
@@ -862,7 +862,7 @@ xref
|
|||||||
trailer
|
trailer
|
||||||
<<
|
<<
|
||||||
/ID
|
/ID
|
||||||
[<c407e2764e1e7d4d181ff71ff66c0bf4><c407e2764e1e7d4d181ff71ff66c0bf4>]
|
[<b59883af3aa2b268402730441ad3ae56><b59883af3aa2b268402730441ad3ae56>]
|
||||||
% ReportLab generated PDF document -- digest (opensource)
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
/Info 67 0 R
|
/Info 67 0 R
|
||||||
|
|||||||
@@ -530,7 +530,7 @@ endobj
|
|||||||
endobj
|
endobj
|
||||||
87 0 obj
|
87 0 obj
|
||||||
<<
|
<<
|
||||||
/Author (Android Cast project) /CreationDate (D:20260623115607+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115607+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
/Author (Android Cast project) /CreationDate (D:20260626184406+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260626184406+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
/Subject (\(unspecified\)) /Title (Repository and microservice reorganization \204 specification) /Trapped /False
|
/Subject (\(unspecified\)) /Title (Repository and microservice reorganization \204 specification) /Trapped /False
|
||||||
>>
|
>>
|
||||||
endobj
|
endobj
|
||||||
@@ -1109,7 +1109,7 @@ xref
|
|||||||
trailer
|
trailer
|
||||||
<<
|
<<
|
||||||
/ID
|
/ID
|
||||||
[<a464cb1b9faafc78e6e7faee8af46142><a464cb1b9faafc78e6e7faee8af46142>]
|
[<3c211d31a9645697899591c5f06bcc1b><3c211d31a9645697899591c5f06bcc1b>]
|
||||||
% ReportLab generated PDF document -- digest (opensource)
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
/Info 87 0 R
|
/Info 87 0 R
|
||||||
|
|||||||
830
specs/20260626_cluster_monitoring.md
Normal file
830
specs/20260626_cluster_monitoring.md
Normal file
@@ -0,0 +1,830 @@
|
|||||||
|
# Infrastructure health monitoring — specification
|
||||||
|
|
||||||
|
<!-- doc-meta:start -->
|
||||||
|
| Field | Value |
|
||||||
|
|---|---|
|
||||||
|
| Author | Anton Afanasyeu |
|
||||||
|
| Revision | R0 |
|
||||||
|
| Creation date | 2026-06-26 |
|
||||||
|
| Last modification date | 2026-06-26 |
|
||||||
|
| Co-authored | Cursor Agent (project assistant) |
|
||||||
|
| Severity | high |
|
||||||
|
| State | accepted |
|
||||||
|
| Document type | spec |
|
||||||
|
| Supersedes | — |
|
||||||
|
| Design review | [docs/DRs/20260626_cluster_monitoring.md](../DRs/20260626_cluster_monitoring.md) (frozen R0) |
|
||||||
|
<!-- doc-meta:end -->
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Document type:** SPEC
|
||||||
|
**Source draft:** [docs/drafts/20260626_cluster_monitoring.txt](../drafts/20260626_cluster_monitoring.txt)
|
||||||
|
**Design review:** [docs/DRs/20260626_cluster_monitoring.md](../DRs/20260626_cluster_monitoring.md) (frozen)
|
||||||
|
**PDF:** [20260626_cluster_monitoring.pdf](20260626_cluster_monitoring.pdf) · Regenerate: `bash ac-docs/build-pdf.sh`
|
||||||
|
**Status:** **Accepted** — implement per §7 deployment plan
|
||||||
|
**Scope:** Passive infrastructure monitoring and alerting for XEN cluster cast01–cast04; Track A only
|
||||||
|
|
||||||
|
**Related:** [INFRA.md](../INFRA.md) · [DRs/20260626_cluster_monitoring.md](../DRs/20260626_cluster_monitoring.md) · [specs/20100612_1_scaling.md](20100612_1_scaling.md) · [20260620_postgres_timescale_db_platform.md](../20260620_postgres_timescale_db_platform.md)
|
||||||
|
|
||||||
|
**Track B (future):** [drafts/20260626_cluster_orchestration.txt](../drafts/20260626_cluster_orchestration.txt)
|
||||||
|
|
||||||
|
**Documentation index:** [README.md](../README.md)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Table of contents
|
||||||
|
|
||||||
|
<!-- toc -->
|
||||||
|
- [1. Purpose](#1-purpose)
|
||||||
|
- [2. Scope](#2-scope)
|
||||||
|
- [3. Requirements](#3-requirements)
|
||||||
|
- [3.1 Must](#31-must)
|
||||||
|
- [3.2 Should](#32-should)
|
||||||
|
- [3.3 Non-goals](#33-non-goals)
|
||||||
|
- [4. Monitoring domains](#4-monitoring-domains)
|
||||||
|
- [4.1 Hardware metrics](#41-hardware-metrics)
|
||||||
|
- [4.2 Software and service metrics](#42-software-and-service-metrics)
|
||||||
|
- [4.3 External availability](#43-external-availability)
|
||||||
|
- [4.4 Provider-layer fault escalation](#44-provider-layer-fault-escalation)
|
||||||
|
- [5. Topology — cast04 as dedicated monitoring node](#5-topology--cast04-as-dedicated-monitoring-node)
|
||||||
|
- [6. Component catalog](#6-component-catalog)
|
||||||
|
- [6.1 Alpine apk packages (cast04)](#61-alpine-apk-packages-cast04)
|
||||||
|
- [6.2 Alpine apk packages (cast01–cast03)](#62-alpine-apk-packages-cast0103)
|
||||||
|
- [6.3 Docker-based (cast04)](#63-docker-based-cast04)
|
||||||
|
- [6.4 External SaaS (no install)](#64-external-saas-no-install)
|
||||||
|
- [7. Deployment plan](#7-deployment-plan)
|
||||||
|
- [7.1 Phase 0 — cast04 provisioning](#71-phase-0--cast04-provisioning)
|
||||||
|
- [7.2 Phase 1 — Prometheus + node_exporter](#72-phase-1--prometheus--node_exporter)
|
||||||
|
- [7.3 Phase 2 — Service probes and MariaDB exporter](#73-phase-2--service-probes-and-mariadb-exporter)
|
||||||
|
- [7.4 Phase 3 — Alertmanager](#74-phase-3--alertmanager)
|
||||||
|
- [7.5 Phase 4 — Grafana dashboards](#75-phase-4--grafana-dashboards)
|
||||||
|
- [7.6 Phase 5 — Uptime Kuma + UptimeRobot](#76-phase-5--uptime-kuma--uptimerobot)
|
||||||
|
- [7.7 ac-deploy integration](#77-ac-deploy-integration)
|
||||||
|
- [8. Alert routing](#8-alert-routing)
|
||||||
|
- [8.1 Alert severity levels](#81-alert-severity-levels)
|
||||||
|
- [8.2 Routing rules](#82-routing-rules)
|
||||||
|
- [8.3 Alertmanager SMTP config (skeleton)](#83-alertmanager-smtp-config-skeleton)
|
||||||
|
- [8.4 Telegram receiver config (skeleton)](#84-telegram-receiver-config-skeleton)
|
||||||
|
- [8.5 Alert rule catalog](#85-alert-rule-catalog)
|
||||||
|
- [9. Grafana dashboard catalog](#9-grafana-dashboard-catalog)
|
||||||
|
- [10. Pre-requisite accounts](#10-pre-requisite-accounts)
|
||||||
|
- [11. TimescaleDB relationship](#11-timescaledb-relationship)
|
||||||
|
- [12. Verification and acceptance](#12-verification-and-acceptance)
|
||||||
|
- [13. Risks and mitigations](#13-risks-and-mitigations)
|
||||||
|
- [14. Related documents](#14-related-documents)
|
||||||
|
- [15. Changelog](#15-changelog)
|
||||||
|
<!-- /toc -->
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. Purpose
|
||||||
|
|
||||||
|
Define the **normative** implementation of passive infrastructure monitoring and alerting for the AndroidCast XEN-based VM cluster. The system must:
|
||||||
|
|
||||||
|
- Record hardware and software health metrics from all cluster nodes continuously
|
||||||
|
- Alert operators promptly when measured values exceed defined thresholds
|
||||||
|
- Provide visual dashboards for trend analysis and incident investigation
|
||||||
|
- Detect external (provider-layer) unavailability via an independent probe
|
||||||
|
|
||||||
|
This SPEC covers **Track A only** (observe, record, alert). Automated cluster remediation is Track B and is explicitly out of scope — see [drafts/20260626_cluster_orchestration.txt](../drafts/20260626_cluster_orchestration.txt).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Scope
|
||||||
|
|
||||||
|
| In scope | Out of scope |
|
||||||
|
|----------|--------------|
|
||||||
|
| Hardware metrics: CPU, RAM, disk, NIC per node | Automated node provisioning / deprovisioning |
|
||||||
|
| Software metrics: process health, HTTP probes, MariaDB | Log aggregation (Grafana Loki — planned R1) |
|
||||||
|
| Alert routing: email + Telegram | Auto-scaling or auto-failover reactions |
|
||||||
|
| External uptime probe (UptimeRobot) | Changes to FE nginx or router software |
|
||||||
|
| Grafana dashboards (infra layer) | Business / application metrics (→ TimescaleDB) |
|
||||||
|
| cast04 as dedicated monitoring VM | Kubernetes / service mesh |
|
||||||
|
| ac-deploy integration (monitoring role) | SaaS external aggregator for metric data |
|
||||||
|
| Pre-requisite account setup guide | iOS / mobile performance profiling |
|
||||||
|
|
||||||
|
**Alpha constraint:** Monitoring stack MAY be deployed incrementally per §7 phases. Each phase MUST leave prior phases operational.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Requirements
|
||||||
|
|
||||||
|
### 3.1 Must
|
||||||
|
|
||||||
|
| ID | Requirement |
|
||||||
|
|----|-------------|
|
||||||
|
| R-MON-1 | cast04 dedicated monitoring VM provisioned as Alpine LTS paravirt XEN guest |
|
||||||
|
| R-MON-2 | node_exporter running on cast01, cast02, cast03, cast04 |
|
||||||
|
| R-MON-3 | Prometheus scraping all node_exporters on 15s interval |
|
||||||
|
| R-MON-4 | blackbox_exporter probing all critical HTTP endpoints (§4.2) from cast04 |
|
||||||
|
| R-MON-5 | mysqld_exporter running on MariaDB primary node |
|
||||||
|
| R-MON-6 | Alertmanager routing CRITICAL alerts to email within 2 min of threshold breach |
|
||||||
|
| R-MON-7 | Grafana serving dashboards on cast04 (internal access via SSH tunnel at R0) |
|
||||||
|
| R-MON-8 | UptimeRobot external HTTP probe active for `apps.f0xx.org` |
|
||||||
|
| R-MON-9 | All software installed via Alpine apk or Docker (no source compilation) |
|
||||||
|
| R-MON-10 | No new software installed on FE VM or router |
|
||||||
|
| R-MON-11 | Metric data retained locally on cast04 for minimum 90 days |
|
||||||
|
| R-MON-12 | Alert for CPU steal time > 10% sustained 5 min (Xen overcommit indicator → notify Anton) |
|
||||||
|
| R-MON-13 | Alert for disk write latency > 100ms sustained 5 min on MariaDB node |
|
||||||
|
| R-MON-14 | Alert for MariaDB replication lag > 30s |
|
||||||
|
| R-MON-15 | Hardware guarantee baseline alerts (§4.1 table) — notify when measured < guaranteed |
|
||||||
|
|
||||||
|
### 3.2 Should
|
||||||
|
|
||||||
|
| ID | Requirement |
|
||||||
|
|----|-------------|
|
||||||
|
| R-MON-S1 | Alertmanager Telegram receiver configured alongside email |
|
||||||
|
| R-MON-S2 | Uptime Kuma status page deployed on cast04 (Docker) |
|
||||||
|
| R-MON-S3 | Grafana provisioned with community dashboard for node_exporter (ID 1860) |
|
||||||
|
| R-MON-S4 | Grafana provisioned with community dashboard for MariaDB |
|
||||||
|
| R-MON-S5 | Prometheus metric retention configurable via `--storage.tsdb.retention.time` |
|
||||||
|
| R-MON-S6 | Alertmanager grouping configured to suppress alert storms (group_wait 30s, group_interval 5m) |
|
||||||
|
| R-MON-S7 | ac-deploy `monitoring/` role added to cluster0 scripts for reproducible deployment |
|
||||||
|
|
||||||
|
### 3.3 Non-goals
|
||||||
|
|
||||||
|
- Automated node scale-out or scale-in (Track B)
|
||||||
|
- DDoS automatic mitigation (Track B)
|
||||||
|
- Storage automatic failover (Track B)
|
||||||
|
- Centralized log search (Grafana Loki — R1)
|
||||||
|
- Business metrics dashboards (TimescaleDB + Grafana — separate track)
|
||||||
|
- Monitoring of router or FE internal metrics (config-only access; UptimeRobot covers external availability)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Monitoring domains
|
||||||
|
|
||||||
|
### 4.1 Hardware metrics
|
||||||
|
|
||||||
|
Collected by **node_exporter** on every VM (cast01–cast04). Alert thresholds are guidelines — tune after collecting baseline.
|
||||||
|
|
||||||
|
| Metric | Prometheus metric name | WARNING threshold | CRITICAL threshold | Xen note |
|
||||||
|
|--------|----------------------|-------------------|--------------------|-----------|
|
||||||
|
| CPU utilization | `rate(node_cpu_seconds_total{mode!="idle"}[5m])` | > 80% (5 min) | > 95% (5 min) | |
|
||||||
|
| **CPU steal time** | `rate(node_cpu_seconds_total{mode="steal"}[5m])` | > 5% (5 min) | > 10% (5 min) | Xen overcommit → notify Anton |
|
||||||
|
| Load average 1m | `node_load1 / node_cpu_count` | > 1.5 | > 3.0 | |
|
||||||
|
| RAM used % | `1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes` | > 80% | > 90% | |
|
||||||
|
| Swap used % | `node_memory_SwapFree_bytes / node_memory_SwapTotal_bytes` | > 50% | > 80% | |
|
||||||
|
| Disk used % | `1 - node_filesystem_avail_bytes / node_filesystem_size_bytes` | > 75% | > 90% | |
|
||||||
|
| Disk write latency | `rate(node_disk_write_time_seconds_total[5m]) / rate(node_disk_writes_completed_total[5m])` | > 50ms | > 100ms | Critical on MariaDB node |
|
||||||
|
| Disk IOPS | `rate(node_disk_io_time_seconds_total[5m])` | > 80% | > 95% | |
|
||||||
|
| NIC ingress bytes/s | `rate(node_network_receive_bytes_total[5m])` | > 150 Mbit/s | > 190 Mbit/s | Guaranteed: 200 Mbit/s |
|
||||||
|
| NIC egress bytes/s | `rate(node_network_transmit_bytes_total[5m])` | > 150 Mbit/s | > 190 Mbit/s | Guaranteed: 200 Mbit/s |
|
||||||
|
| NIC packet drops | `rate(node_network_receive_drop_total[5m])` | > 0.1% | > 1% | |
|
||||||
|
| NIC errors | `rate(node_network_receive_errs_total[5m])` | > 0 | > 10/min | |
|
||||||
|
|
||||||
|
**Hardware guarantee baseline check:** If `node_memory_MemTotal_bytes` < 7.5 GB, or CPU core count < 8, or disk total < 30 GB → CRITICAL alert (guaranteed resources not provided → notify Anton).
|
||||||
|
|
||||||
|
### 4.2 Software and service metrics
|
||||||
|
|
||||||
|
#### Process / systemd health (node_exporter `systemd` collector or blackbox TCP probe)
|
||||||
|
|
||||||
|
| Service | Check | Alert trigger |
|
||||||
|
|---------|-------|---------------|
|
||||||
|
| nginx | TCP :80 probe | Connection refused → CRITICAL |
|
||||||
|
| php-fpm | TCP socket probe | No response → CRITICAL |
|
||||||
|
| MariaDB | TCP :3306 probe | Connection refused → CRITICAL |
|
||||||
|
| sshd | TCP :22 probe | Connection refused → WARNING |
|
||||||
|
| Per-microservice HTTP endpoint | HTTP GET /health or / | Non-2xx or timeout > 5s → WARNING; > 30s → CRITICAL |
|
||||||
|
|
||||||
|
#### MariaDB metrics (mysqld_exporter)
|
||||||
|
|
||||||
|
| Metric | Prometheus metric | WARNING | CRITICAL |
|
||||||
|
|--------|------------------|---------|---------|
|
||||||
|
| Replication lag | `mysql_slave_status_seconds_behind_master` | > 10s | > 30s |
|
||||||
|
| Open connections | `mysql_global_status_threads_connected` | > 80% of max | > 95% of max |
|
||||||
|
| Slow queries/s | `rate(mysql_global_status_slow_queries[5m])` | > 1/s | > 5/s |
|
||||||
|
| InnoDB buffer pool hit | `mysql_global_status_innodb_buffer_pool_reads / mysql_global_status_innodb_buffer_pool_read_requests` | < 95% | < 90% |
|
||||||
|
| Aborted connections | `rate(mysql_global_status_aborted_connects[5m])` | > 1/min | > 10/min |
|
||||||
|
|
||||||
|
#### nginx metrics (via node_exporter nginx stub or blackbox HTTP probe)
|
||||||
|
|
||||||
|
| Metric | Source | WARNING | CRITICAL |
|
||||||
|
|--------|--------|---------|---------|
|
||||||
|
| 5xx response rate | blackbox HTTP probe returning 5xx | Any 5xx returned | > 10% of requests |
|
||||||
|
| Response time | blackbox `probe_duration_seconds` | > 2s | > 10s |
|
||||||
|
|
||||||
|
#### php-fpm metrics (via php-fpm status endpoint + blackbox or custom exporter)
|
||||||
|
|
||||||
|
| Metric | WARNING | CRITICAL |
|
||||||
|
|--------|---------|---------|
|
||||||
|
| Active workers % of max | > 70% | > 90% |
|
||||||
|
| Queue length | > 5 | > 20 |
|
||||||
|
|
||||||
|
### 4.3 External availability
|
||||||
|
|
||||||
|
**Tool:** UptimeRobot free tier — no installation; checks from UptimeRobot's global nodes.
|
||||||
|
|
||||||
|
| Monitor | URL | Check interval | Alert on |
|
||||||
|
|---------|-----|---------------|---------|
|
||||||
|
| Frontend TLS | `https://apps.f0xx.org` | 5 min | Non-2xx or timeout |
|
||||||
|
| API health | `https://apps.f0xx.org/app/androidcast_project/` | 5 min | Non-2xx or timeout |
|
||||||
|
|
||||||
|
**Internal cross-check:** blackbox_exporter on cast04 also probes the FE endpoint from inside the cluster. If UptimeRobot fires but blackbox does NOT → provider/uplink fault (Anton's layer). If both fire → likely cluster-side issue.
|
||||||
|
|
||||||
|
### 4.4 Provider-layer fault escalation
|
||||||
|
|
||||||
|
When monitoring detects that the root cause is in Anton's infrastructure layer:
|
||||||
|
|
||||||
|
| Symptom | Likely cause | Action |
|
||||||
|
|---------|-------------|--------|
|
||||||
|
| CPU steal > 10% sustained | Xen host overcommit | Email Anton; await response |
|
||||||
|
| Disk write latency persistent despite low I/O | Xen host disk contention | Email Anton |
|
||||||
|
| NIC saturation below 200 Mbit guarantee | Uplink / Xen host NIC | Email Anton |
|
||||||
|
| UptimeRobot alert + cast04 unreachable | Xen host or uplink down | Email Anton; check intra-network |
|
||||||
|
| Entire cluster unreachable | Router / uplink / payment | Email Anton; check calendar |
|
||||||
|
|
||||||
|
These events are **alert-only** at R0. No automated remediation.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Topology — cast04 as dedicated monitoring node
|
||||||
|
|
||||||
|
```text
|
||||||
|
10.7.0.0/8 internal network
|
||||||
|
┌────────────────────────────────────────┐
|
||||||
|
│ cast04 — monitoring VM (Alpine LTS) │
|
||||||
|
│ │
|
||||||
|
cast01 ──[ :9100 node_exporter ]──┤ │
|
||||||
|
cast02 ──[ :9100 node_exporter ]──┤──► Prometheus :9090 │
|
||||||
|
cast03 ──[ :9100 node_exporter ]──┤ ├── scrape all :9100 │
|
||||||
|
cast04 ──[ :9100 node_exporter ]──┘ ├── scrape :9104 (mysqld) │
|
||||||
|
MariaDB node ─[ :9104 mysqld_exp ] └── evaluate alert rules │
|
||||||
|
│ │
|
||||||
|
▼ │
|
||||||
|
Alertmanager :9093 │
|
||||||
|
├── email (SMTP relay) │
|
||||||
|
└── Telegram bot API │
|
||||||
|
│
|
||||||
|
blackbox_exporter :9115 │
|
||||||
|
└── HTTP/TCP probes → cast01–03, │
|
||||||
|
FE endpoint, per-service /health │
|
||||||
|
│
|
||||||
|
Grafana :3000 │
|
||||||
|
├── datasource: Prometheus │
|
||||||
|
└── datasource: TimescaleDB (future) │
|
||||||
|
│
|
||||||
|
Uptime Kuma :3001 (Docker) │
|
||||||
|
└── per-service status page │
|
||||||
|
└───────────────────────────────────────┘
|
||||||
|
|
||||||
|
External (no install):
|
||||||
|
UptimeRobot ──► HTTP probe ──► apps.f0xx.org (from internet)
|
||||||
|
```
|
||||||
|
|
||||||
|
**cast04 minimum provisioning request (to Anton):**
|
||||||
|
|
||||||
|
```
|
||||||
|
VM name: cast04
|
||||||
|
VM type: paravirt XEN guest
|
||||||
|
OS: Alpine Linux latest LTS (64-bit)
|
||||||
|
CPU: 2 vCPU
|
||||||
|
RAM: 2 GB
|
||||||
|
Disk: 32 GB (non-shared)
|
||||||
|
Network: Internal 10.7.0.0/8 + internet egress (for Alertmanager SMTP / Telegram API calls)
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. Component catalog
|
||||||
|
|
||||||
|
### 6.1 Alpine apk packages (cast04)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
apk update && apk upgrade
|
||||||
|
apk add prometheus alertmanager grafana \
|
||||||
|
prometheus-node-exporter \
|
||||||
|
prometheus-blackbox-exporter \
|
||||||
|
docker docker-cli docker-compose
|
||||||
|
```
|
||||||
|
|
||||||
|
| Package | Alpine repo | Version policy |
|
||||||
|
|---------|------------|---------------|
|
||||||
|
| `prometheus` | community/edge | latest stable in repo |
|
||||||
|
| `alertmanager` | community/edge | latest stable |
|
||||||
|
| `grafana` | community/edge | latest stable |
|
||||||
|
| `prometheus-node-exporter` | community | latest stable |
|
||||||
|
| `prometheus-blackbox-exporter` | community | latest stable |
|
||||||
|
| `docker` | community | for Uptime Kuma container |
|
||||||
|
|
||||||
|
If a package is only in Alpine **edge** repo, add the edge community URL to `/etc/apk/repositories` and pin via `/etc/apk/world`.
|
||||||
|
|
||||||
|
### 6.2 Alpine apk packages (cast01–cast03)
|
||||||
|
|
||||||
|
Install only the node exporter on each workload node:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
apk add prometheus-node-exporter
|
||||||
|
rc-update add node-exporter default
|
||||||
|
rc-service node-exporter start
|
||||||
|
```
|
||||||
|
|
||||||
|
On the MariaDB primary node, additionally:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
apk add prometheus-mysqld-exporter
|
||||||
|
# Create limited MariaDB user for exporter:
|
||||||
|
mysql -e "CREATE USER 'prom_exporter'@'localhost' IDENTIFIED BY '<password>';"
|
||||||
|
mysql -e "GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'prom_exporter'@'localhost';"
|
||||||
|
# Configure /etc/prometheus-mysqld-exporter/mysqld_exporter.env
|
||||||
|
# DATA_SOURCE_NAME='prom_exporter:<password>@(localhost:3306)/'
|
||||||
|
rc-update add mysqld-exporter default
|
||||||
|
rc-service mysqld-exporter start
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6.3 Docker-based (cast04)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
rc-update add docker default
|
||||||
|
rc-service docker start
|
||||||
|
|
||||||
|
# Uptime Kuma
|
||||||
|
docker run -d --restart=always \
|
||||||
|
--name uptime-kuma \
|
||||||
|
-p 3001:3001 \
|
||||||
|
-v uptime-kuma:/app/data \
|
||||||
|
louislam/uptime-kuma:latest
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6.4 External SaaS (no install)
|
||||||
|
|
||||||
|
| Service | URL | Action |
|
||||||
|
|---------|-----|--------|
|
||||||
|
| UptimeRobot | https://uptimerobot.com | Create free account; add HTTP monitor for `https://apps.f0xx.org`; configure email alert |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. Deployment plan
|
||||||
|
|
||||||
|
Deploy phases in order. Each phase MUST be verified before starting the next.
|
||||||
|
|
||||||
|
### 7.1 Phase 0 — cast04 provisioning
|
||||||
|
|
||||||
|
**Goal:** cast04 VM exists and is reachable from cast01–cast03 on internal network.
|
||||||
|
|
||||||
|
| Action | Detail |
|
||||||
|
|--------|--------|
|
||||||
|
| Request VM | Ask Anton for cast04 — spec per §5 table |
|
||||||
|
| Base install | Alpine latest LTS; configure apk repos (community + edge) |
|
||||||
|
| SSH access | Add developer SSH key; test login |
|
||||||
|
| Network | Confirm cast04 can reach cast01–03 IPs on internal network |
|
||||||
|
| NTP | `apk add chrony && rc-service chronyd start` |
|
||||||
|
|
||||||
|
**Verify:** `ssh cast04 ping cast01` succeeds; `apk update` succeeds.
|
||||||
|
|
||||||
|
### 7.2 Phase 1 — Prometheus + node_exporter
|
||||||
|
|
||||||
|
**Goal:** Prometheus scraping hardware metrics from all nodes.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# On cast04:
|
||||||
|
apk add prometheus prometheus-node-exporter
|
||||||
|
|
||||||
|
# /etc/prometheus/prometheus.yml
|
||||||
|
global:
|
||||||
|
scrape_interval: 15s
|
||||||
|
evaluation_interval: 15s
|
||||||
|
|
||||||
|
scrape_configs:
|
||||||
|
- job_name: 'node'
|
||||||
|
static_configs:
|
||||||
|
- targets:
|
||||||
|
- 'cast01:9100'
|
||||||
|
- 'cast02:9100'
|
||||||
|
- 'cast03:9100'
|
||||||
|
- 'cast04:9100'
|
||||||
|
|
||||||
|
rc-update add prometheus default
|
||||||
|
rc-update add node-exporter default
|
||||||
|
rc-service prometheus start
|
||||||
|
rc-service node-exporter start
|
||||||
|
```
|
||||||
|
|
||||||
|
On cast01–cast03: install and start `prometheus-node-exporter` (§6.2).
|
||||||
|
|
||||||
|
**Verify:** `curl http://cast04:9090/api/v1/targets` shows all 4 nodes in state `up`.
|
||||||
|
|
||||||
|
### 7.3 Phase 2 — Service probes and MariaDB exporter
|
||||||
|
|
||||||
|
**Goal:** HTTP/TCP probes and MariaDB metrics flowing.
|
||||||
|
|
||||||
|
Add to `prometheus.yml`:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
- job_name: 'blackbox_http'
|
||||||
|
metrics_path: /probe
|
||||||
|
params:
|
||||||
|
module: [http_2xx]
|
||||||
|
static_configs:
|
||||||
|
- targets:
|
||||||
|
- https://apps.f0xx.org
|
||||||
|
- http://cast01:80 # nginx on workload nodes
|
||||||
|
# add per-microservice /health endpoints as they exist
|
||||||
|
relabel_configs:
|
||||||
|
- source_labels: [__address__]
|
||||||
|
target_label: __param_target
|
||||||
|
- source_labels: [__param_target]
|
||||||
|
target_label: instance
|
||||||
|
- target_label: __address__
|
||||||
|
replacement: cast04:9115 # blackbox_exporter
|
||||||
|
|
||||||
|
- job_name: 'blackbox_tcp'
|
||||||
|
metrics_path: /probe
|
||||||
|
params:
|
||||||
|
module: [tcp_connect]
|
||||||
|
static_configs:
|
||||||
|
- targets:
|
||||||
|
- cast01:3306 # MariaDB
|
||||||
|
- cast02:3306 # replica
|
||||||
|
- cast01:22
|
||||||
|
- cast02:22
|
||||||
|
- cast03:22
|
||||||
|
relabel_configs:
|
||||||
|
- source_labels: [__address__]
|
||||||
|
target_label: __param_target
|
||||||
|
- source_labels: [__param_target]
|
||||||
|
target_label: instance
|
||||||
|
- target_label: __address__
|
||||||
|
replacement: cast04:9115
|
||||||
|
|
||||||
|
- job_name: 'mariadb'
|
||||||
|
static_configs:
|
||||||
|
- targets: ['<mariadb-primary-node>:9104']
|
||||||
|
```
|
||||||
|
|
||||||
|
Start services:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
rc-service blackbox-exporter start
|
||||||
|
rc-service mysqld-exporter start # on MariaDB node
|
||||||
|
```
|
||||||
|
|
||||||
|
**Verify:** `curl "http://cast04:9115/probe?target=https://apps.f0xx.org&module=http_2xx"` returns `probe_success 1`.
|
||||||
|
|
||||||
|
### 7.4 Phase 3 — Alertmanager
|
||||||
|
|
||||||
|
**Goal:** Alerts route to email and (optionally) Telegram on threshold breach.
|
||||||
|
|
||||||
|
See §8 for full Alertmanager config skeletons. Deploy skeleton, then fill in SMTP credentials and Telegram token.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
apk add alertmanager
|
||||||
|
# Edit /etc/alertmanager/alertmanager.yml (see §8.3 + §8.4)
|
||||||
|
rc-update add alertmanager default
|
||||||
|
rc-service alertmanager start
|
||||||
|
```
|
||||||
|
|
||||||
|
Add `alerting:` and `rule_files:` blocks to `prometheus.yml` (see §8.5 for rule file examples).
|
||||||
|
|
||||||
|
**Verify:** `amtool --alertmanager.url=http://cast04:9093 alert` returns empty (no active alerts); send a test alert and confirm email receipt.
|
||||||
|
|
||||||
|
### 7.5 Phase 4 — Grafana dashboards
|
||||||
|
|
||||||
|
**Goal:** Visual dashboards accessible for all metrics collected in phases 1–3.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
apk add grafana
|
||||||
|
rc-update add grafana default
|
||||||
|
rc-service grafana start
|
||||||
|
# Access: http://cast04:3000 (via SSH tunnel: ssh -L 3000:cast04:3000 cast04)
|
||||||
|
```
|
||||||
|
|
||||||
|
In Grafana UI:
|
||||||
|
1. Add Prometheus datasource: `http://localhost:9090`
|
||||||
|
2. Import community dashboard **1860** ("Node Exporter Full") — covers §4.1 metrics
|
||||||
|
3. Import community dashboard **7362** or **13106** (MariaDB / mysqld_exporter)
|
||||||
|
4. Create custom panel for blackbox probe results (status per service endpoint)
|
||||||
|
5. Create overview panel showing hardware guarantee baseline vs measured values
|
||||||
|
|
||||||
|
**Verify:** All four dashboards render data; node_exporter CPU steal panel shows non-zero (or zero — both valid).
|
||||||
|
|
||||||
|
### 7.6 Phase 5 — Uptime Kuma + UptimeRobot
|
||||||
|
|
||||||
|
**Goal:** Service status page + external probe active.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Uptime Kuma on cast04 (Docker):
|
||||||
|
rc-service docker start
|
||||||
|
docker run -d --restart=always --name uptime-kuma \
|
||||||
|
-p 3001:3001 -v uptime-kuma:/app/data louislam/uptime-kuma:latest
|
||||||
|
# Access: http://cast04:3001 (via SSH tunnel)
|
||||||
|
```
|
||||||
|
|
||||||
|
Configure monitors in Uptime Kuma UI:
|
||||||
|
- Add HTTP monitors for each microservice `/health` endpoint
|
||||||
|
- Add TCP monitors for MariaDB :3306, nginx :80
|
||||||
|
- Configure notification to same email as Alertmanager
|
||||||
|
|
||||||
|
**UptimeRobot:**
|
||||||
|
- Register free account at https://uptimerobot.com
|
||||||
|
- Add HTTP(s) monitor: `https://apps.f0xx.org`, 5-minute interval
|
||||||
|
- Add email alert notification (same ops email as Alertmanager)
|
||||||
|
|
||||||
|
**Verify:** Uptime Kuma dashboard shows all green; UptimeRobot sends test notification successfully.
|
||||||
|
|
||||||
|
### 7.7 ac-deploy integration
|
||||||
|
|
||||||
|
Add a `monitoring/` role to cluster0 deploy scripts in `ac-deploy/sim/cluster0/`:
|
||||||
|
|
||||||
|
```
|
||||||
|
ac-deploy/sim/cluster0/
|
||||||
|
monitoring/
|
||||||
|
deploy-monitoring.sh # installs cast04 components
|
||||||
|
prometheus.yml.j2 # Jinja2/envsubst template with node IPs
|
||||||
|
alertmanager.yml.j2 # template with SMTP/Telegram creds from env
|
||||||
|
alert-rules/
|
||||||
|
hardware.yml # §4.1 rules
|
||||||
|
services.yml # §4.2 rules
|
||||||
|
grafana/
|
||||||
|
datasources.yml # auto-provision Prometheus datasource
|
||||||
|
dashboards/ # provisioned dashboard JSONs
|
||||||
|
```
|
||||||
|
|
||||||
|
Credentials (SMTP password, Telegram token) MUST be passed via environment variables or a secrets file outside git — never committed.
|
||||||
|
|
||||||
|
**Verify:** `bash deploy-monitoring.sh` on a fresh cast04 produces a running stack within 10 minutes.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. Alert routing
|
||||||
|
|
||||||
|
### 8.1 Alert severity levels
|
||||||
|
|
||||||
|
| Level | Meaning | Response |
|
||||||
|
|-------|---------|---------|
|
||||||
|
| `critical` | Service down or hardware limit exceeded | Alert immediately; wake operator if outside hours |
|
||||||
|
| `warning` | Approaching threshold; degraded | Alert during business hours; batch in digest |
|
||||||
|
| `info` | Notable event; no action required | Log only; no alert |
|
||||||
|
|
||||||
|
### 8.2 Routing rules
|
||||||
|
|
||||||
|
```
|
||||||
|
critical → email (immediately) + Telegram (immediately)
|
||||||
|
warning → email (grouped, 5 min window)
|
||||||
|
info → no alert (recorded in Prometheus only)
|
||||||
|
```
|
||||||
|
|
||||||
|
### 8.3 Alertmanager SMTP config (skeleton)
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# /etc/alertmanager/alertmanager.yml
|
||||||
|
global:
|
||||||
|
smtp_smarthost: 'smtp.gmail.com:587' # or Mailgun: smtp.mailgun.org:587
|
||||||
|
smtp_from: 'alerts@your-domain.com'
|
||||||
|
smtp_auth_username: 'your-gmail@gmail.com'
|
||||||
|
smtp_auth_password: '<APP_PASSWORD>' # from env / secrets file
|
||||||
|
smtp_require_tls: true
|
||||||
|
|
||||||
|
route:
|
||||||
|
group_by: ['alertname', 'instance']
|
||||||
|
group_wait: 30s
|
||||||
|
group_interval: 5m
|
||||||
|
repeat_interval: 4h
|
||||||
|
receiver: 'ops-email'
|
||||||
|
routes:
|
||||||
|
- match:
|
||||||
|
severity: critical
|
||||||
|
receiver: 'ops-critical'
|
||||||
|
group_wait: 10s
|
||||||
|
repeat_interval: 1h
|
||||||
|
|
||||||
|
receivers:
|
||||||
|
- name: 'ops-email'
|
||||||
|
email_configs:
|
||||||
|
- to: 'ops@your-domain.com'
|
||||||
|
send_resolved: true
|
||||||
|
|
||||||
|
- name: 'ops-critical'
|
||||||
|
email_configs:
|
||||||
|
- to: 'ops@your-domain.com'
|
||||||
|
send_resolved: true
|
||||||
|
telegram_configs:
|
||||||
|
- bot_token: '<TELEGRAM_BOT_TOKEN>' # from env / secrets file
|
||||||
|
chat_id: <TELEGRAM_CHAT_ID>
|
||||||
|
send_resolved: true
|
||||||
|
|
||||||
|
inhibit_rules:
|
||||||
|
- source_match:
|
||||||
|
severity: 'critical'
|
||||||
|
target_match:
|
||||||
|
severity: 'warning'
|
||||||
|
equal: ['instance']
|
||||||
|
```
|
||||||
|
|
||||||
|
**Note:** Replace `<APP_PASSWORD>` and `<TELEGRAM_BOT_TOKEN>` with values from environment — never commit credentials to git.
|
||||||
|
|
||||||
|
### 8.4 Telegram receiver config (skeleton)
|
||||||
|
|
||||||
|
Obtain Telegram credentials:
|
||||||
|
1. Open Telegram, message `@BotFather`
|
||||||
|
2. `/newbot` → follow prompts → save `TOKEN`
|
||||||
|
3. Add the bot to your ops group or DM it, then: `curl https://api.telegram.org/bot<TOKEN>/getUpdates` → find `chat.id`
|
||||||
|
4. Set `TELEGRAM_BOT_TOKEN=<TOKEN>` and `TELEGRAM_CHAT_ID=<CHAT_ID>` in the secrets file used by deploy script
|
||||||
|
|
||||||
|
### 8.5 Alert rule catalog
|
||||||
|
|
||||||
|
Create `/etc/prometheus/rules/hardware.yml`:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
groups:
|
||||||
|
- name: hardware
|
||||||
|
rules:
|
||||||
|
- alert: CpuHighUtilization
|
||||||
|
expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 95
|
||||||
|
for: 5m
|
||||||
|
labels:
|
||||||
|
severity: critical
|
||||||
|
annotations:
|
||||||
|
summary: "CPU critical on {{ $labels.instance }}"
|
||||||
|
description: "CPU utilization {{ $value | humanize }}% > 95%"
|
||||||
|
|
||||||
|
- alert: XenCpuStealHigh
|
||||||
|
expr: avg by(instance) (rate(node_cpu_seconds_total{mode="steal"}[5m])) * 100 > 10
|
||||||
|
for: 5m
|
||||||
|
labels:
|
||||||
|
severity: critical
|
||||||
|
annotations:
|
||||||
|
summary: "Xen CPU steal critical on {{ $labels.instance }} — notify Anton"
|
||||||
|
description: "CPU steal {{ $value | humanize }}% > 10% — hypervisor overcommit"
|
||||||
|
|
||||||
|
- alert: RamCritical
|
||||||
|
expr: (1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100 > 90
|
||||||
|
for: 5m
|
||||||
|
labels:
|
||||||
|
severity: critical
|
||||||
|
annotations:
|
||||||
|
summary: "RAM critical on {{ $labels.instance }}"
|
||||||
|
|
||||||
|
- alert: DiskCritical
|
||||||
|
expr: (1 - node_filesystem_avail_bytes{fstype!~"tmpfs|overlay"} / node_filesystem_size_bytes) * 100 > 90
|
||||||
|
for: 5m
|
||||||
|
labels:
|
||||||
|
severity: critical
|
||||||
|
annotations:
|
||||||
|
summary: "Disk critical on {{ $labels.instance }} mount {{ $labels.mountpoint }}"
|
||||||
|
|
||||||
|
- alert: DiskWriteLatencyHigh
|
||||||
|
expr: >
|
||||||
|
rate(node_disk_write_time_seconds_total[5m])
|
||||||
|
/ rate(node_disk_writes_completed_total[5m]) * 1000 > 100
|
||||||
|
for: 5m
|
||||||
|
labels:
|
||||||
|
severity: critical
|
||||||
|
annotations:
|
||||||
|
summary: "Disk write latency critical on {{ $labels.instance }} — possible HW fault; notify Anton"
|
||||||
|
|
||||||
|
- alert: HardwareGuaranteeRamBreach
|
||||||
|
expr: node_memory_MemTotal_bytes < 7.5 * 1024 * 1024 * 1024
|
||||||
|
for: 1m
|
||||||
|
labels:
|
||||||
|
severity: critical
|
||||||
|
annotations:
|
||||||
|
summary: "RAM below guaranteed 8 GB on {{ $labels.instance }} — notify Anton"
|
||||||
|
```
|
||||||
|
|
||||||
|
Create `/etc/prometheus/rules/services.yml`:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
groups:
|
||||||
|
- name: services
|
||||||
|
rules:
|
||||||
|
- alert: ServiceDown
|
||||||
|
expr: probe_success == 0
|
||||||
|
for: 1m
|
||||||
|
labels:
|
||||||
|
severity: critical
|
||||||
|
annotations:
|
||||||
|
summary: "Service unreachable: {{ $labels.instance }}"
|
||||||
|
|
||||||
|
- alert: ServiceSlowResponse
|
||||||
|
expr: probe_duration_seconds > 10
|
||||||
|
for: 2m
|
||||||
|
labels:
|
||||||
|
severity: warning
|
||||||
|
annotations:
|
||||||
|
summary: "Slow response from {{ $labels.instance }}: {{ $value | humanize }}s"
|
||||||
|
|
||||||
|
- alert: MariaDbReplicationLag
|
||||||
|
expr: mysql_slave_status_seconds_behind_master > 30
|
||||||
|
for: 2m
|
||||||
|
labels:
|
||||||
|
severity: critical
|
||||||
|
annotations:
|
||||||
|
summary: "MariaDB replication lag {{ $value | humanize }}s on {{ $labels.instance }}"
|
||||||
|
|
||||||
|
- alert: MariaDbDown
|
||||||
|
expr: mysql_up == 0
|
||||||
|
for: 1m
|
||||||
|
labels:
|
||||||
|
severity: critical
|
||||||
|
annotations:
|
||||||
|
summary: "MariaDB exporter cannot reach database on {{ $labels.instance }}"
|
||||||
|
```
|
||||||
|
|
||||||
|
Add to `prometheus.yml`:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
rule_files:
|
||||||
|
- "/etc/prometheus/rules/*.yml"
|
||||||
|
|
||||||
|
alerting:
|
||||||
|
alertmanagers:
|
||||||
|
- static_configs:
|
||||||
|
- targets: ['cast04:9093']
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 9. Grafana dashboard catalog
|
||||||
|
|
||||||
|
| Dashboard | Grafana ID | Source | Covers |
|
||||||
|
|-----------|-----------|--------|--------|
|
||||||
|
| Node Exporter Full | 1860 | community | CPU, RAM, disk, NIC, load — all §4.1 metrics |
|
||||||
|
| MariaDB Overview | 7362 | community | Connections, queries, replication lag, InnoDB |
|
||||||
|
| Blackbox Exporter | 7587 | community | HTTP probe success/latency per target |
|
||||||
|
| Custom: Hardware Guarantee | — | create | Measured vs Anton's guaranteed values |
|
||||||
|
| Custom: Service Health Overview | — | create | All service probes in one panel grid |
|
||||||
|
|
||||||
|
**Provisioning via ac-deploy:** export dashboard JSON from Grafana UI after customization and store in `ac-deploy/sim/cluster0/monitoring/grafana/dashboards/`. Add datasource YAML to `grafana/datasources/prometheus.yml`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 10. Pre-requisite accounts
|
||||||
|
|
||||||
|
The following must be created by the project owner before Phase 3 deploy:
|
||||||
|
|
||||||
|
| Account | Service | Purpose | Notes |
|
||||||
|
|---------|---------|---------|-------|
|
||||||
|
| Gmail app password | Gmail Settings → Security → App passwords | Alertmanager SMTP relay | App password, not account password. Alternatively: Mailgun free (10k/month) |
|
||||||
|
| Telegram bot | @BotFather in Telegram | Alertmanager Telegram receiver | `/newbot` → TOKEN; `getUpdates` → CHAT_ID |
|
||||||
|
| UptimeRobot free | https://uptimerobot.com | External HTTP probe | Add monitor for `https://apps.f0xx.org` |
|
||||||
|
|
||||||
|
**Important:** ImprovMX and addy.io provide inbound email routing (MX records) — they are not outbound SMTP relay services and cannot be used with Alertmanager. Use Gmail app password or a dedicated transactional email service (Mailgun, SendGrid) for outbound alerts.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 11. TimescaleDB relationship
|
||||||
|
|
||||||
|
This SPEC implements infra-layer monitoring. Business and application metrics are a separate concern handled by the TimescaleDB platform plan ([20260620_postgres_timescale_db_platform.md](../20260620_postgres_timescale_db_platform.md)).
|
||||||
|
|
||||||
|
| Layer | Store | Examples | Retention |
|
||||||
|
|-------|-------|----------|-----------|
|
||||||
|
| Infrastructure | Prometheus TSDB on cast04 | CPU steal, disk latency, service probe | 90 days |
|
||||||
|
| Business / application | TimescaleDB (PostgreSQL) | Crash rate, session count, graph analytics | Long-term (configurable) |
|
||||||
|
|
||||||
|
Grafana on cast04 can query both stores simultaneously. No ETL or data duplication is required between them. The TimescaleDB datasource is added to Grafana as a second datasource in a future step — it does not affect R0 monitoring deployment.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 12. Verification and acceptance
|
||||||
|
|
||||||
|
All phases must pass their gate before the next phase begins.
|
||||||
|
|
||||||
|
| Phase | Acceptance criteria |
|
||||||
|
|-------|---------------------|
|
||||||
|
| 0 | cast04 reachable from cast01–03; `apk update` succeeds |
|
||||||
|
| 1 | `curl http://cast04:9090/api/v1/targets` shows all 4 nodes state=up |
|
||||||
|
| 2 | Blackbox probe for `https://apps.f0xx.org` returns `probe_success 1`; mysqld_exporter metrics visible in Prometheus |
|
||||||
|
| 3 | Test alert fires and email is received within 2 minutes; Telegram notification received (if configured) |
|
||||||
|
| 4 | Grafana dashboard 1860 renders data for all nodes; MariaDB dashboard shows replication status |
|
||||||
|
| 5 | Uptime Kuma shows all services green; UptimeRobot sends test notification |
|
||||||
|
| ac-deploy | Fresh cast04 reproduced by running `deploy-monitoring.sh` within 10 minutes |
|
||||||
|
|
||||||
|
**Ongoing regression:** After any cluster change (new microservice, new VM, nginx config change), add corresponding blackbox probe target and Grafana panel within 48 hours.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 13. Risks and mitigations
|
||||||
|
|
||||||
|
| Risk | Mitigation |
|
||||||
|
|------|------------|
|
||||||
|
| cast04 itself fails — monitoring blind | UptimeRobot external probe continues; Alertmanager writes state to disk and resumes after VM restart |
|
||||||
|
| XEN host failure takes cast04 offline | UptimeRobot fires from external — operator is alerted even without cast04 |
|
||||||
|
| Alpine edge package breaks Prometheus | Pin version in `/etc/apk/world`; test upgrades on cast04 before rolling to workload nodes |
|
||||||
|
| SMTP rate limit during incident storm | Alertmanager `group_interval: 5m` + `repeat_interval: 4h` limit volume; Telegram is parallel channel |
|
||||||
|
| Prometheus disk overflow | 32 GB cast04 disk; estimated < 5 GB for 3 nodes at 15s scrape over 90 days; monitor cast04 disk in Grafana |
|
||||||
|
| Credentials leaked in git | Secrets must be in environment variables or a secrets file excluded from git (`.gitignore`); never in `prometheus.yml` or `alertmanager.yml` committed to repo |
|
||||||
|
| FE/router metrics unavailable | FE nginx stub_status available via config if Anton allows; not mandatory — blackbox HTTP probe sufficient at R0 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 14. Related documents
|
||||||
|
|
||||||
|
| Document | Role |
|
||||||
|
|----------|------|
|
||||||
|
| [DRs/20260626_cluster_monitoring.md](../DRs/20260626_cluster_monitoring.md) | Frozen design review (source of this SPEC) |
|
||||||
|
| [drafts/20260626_cluster_orchestration.txt](../drafts/20260626_cluster_orchestration.txt) | Track B — auto-remediation placeholder |
|
||||||
|
| [INFRA.md](../INFRA.md) | FE/BE topology, hosts, ports |
|
||||||
|
| [specs/20100612_1_scaling.md](20100612_1_scaling.md) | VM roles and cluster layout |
|
||||||
|
| [specs/20260618_repos_reorganizing.md](20260618_repos_reorganizing.md) | Microservice split (each new MS needs a blackbox probe) |
|
||||||
|
| [20260620_postgres_timescale_db_platform.md](../20260620_postgres_timescale_db_platform.md) | Business metrics store (complements Prometheus) |
|
||||||
|
| [GRAFANA_vs_others_graphvis_pivot.md](../GRAFANA_vs_others_graphvis_pivot.md) | Earlier Grafana evaluation for application analytics |
|
||||||
|
| [orchestration/sim/cluster0/ARCHITECTURE.md](../../orchestration/sim/cluster0/ARCHITECTURE.md) | Lab cluster node layout |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 15. Changelog
|
||||||
|
|
||||||
|
| Rev | Date | Change |
|
||||||
|
|-----|------|--------|
|
||||||
|
| R0 | 2026-06-26 | SPEC converted from draft + DR R0; all decisions locked; deployment plan §7; alert rules §8 |
|
||||||
778
specs/20260626_cluster_monitoring.pdf
Normal file
778
specs/20260626_cluster_monitoring.pdf
Normal file
@@ -0,0 +1,778 @@
|
|||||||
|
%PDF-1.4
|
||||||
|
%“Œ‹ž ReportLab Generated PDF document (opensource)
|
||||||
|
1 0 obj
|
||||||
|
<<
|
||||||
|
/F1 2 0 R /F2 3 0 R /F3 42 0 R /F4 43 0 R /F5 44 0 R /F6 45 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
2 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
3 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
4 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 46 0 R /Fit ] /Rect [ 45.68504 762.0394 84.37304 773.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
5 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 46 0 R /Fit ] /Rect [ 45.68504 751.0394 77.26104 762.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
6 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 46 0 R /Fit ] /Rect [ 45.68504 740.0394 104.373 751.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
7 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 46 0 R /Fit ] /Rect [ 59.68504 729.6019 88.44754 739.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
8 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 46 0 R /Fit ] /Rect [ 59.68504 719.6019 95.54254 729.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
9 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 46 0 R /Fit ] /Rect [ 59.68504 709.6019 106.3725 719.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
10 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 46 0 R /Fit ] /Rect [ 45.68504 699.0394 124.381 710.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
11 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 46 0 R /Fit ] /Rect [ 59.68504 688.6019 130.95 698.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
12 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 46 0 R /Fit ] /Rect [ 59.68504 678.6019 168.4725 688.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
13 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 46 0 R /Fit ] /Rect [ 59.68504 668.6019 136.38 678.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
14 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 46 0 R /Fit ] /Rect [ 59.68504 658.6019 170.9775 668.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
15 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 46 0 R /Fit ] /Rect [ 45.68504 648.0394 230.669 659.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
16 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 46 0 R /Fit ] /Rect [ 45.68504 637.0394 123.949 648.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
17 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 46 0 R /Fit ] /Rect [ 59.68504 626.6019 170.5725 636.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
18 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 46 0 R /Fit ] /Rect [ 59.68504 616.6019 196.8375 626.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
19 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 46 0 R /Fit ] /Rect [ 59.68504 606.6019 148.05 616.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
20 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 46 0 R /Fit ] /Rect [ 59.68504 596.6019 156.81 606.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
21 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 46 0 R /Fit ] /Rect [ 45.68504 586.0394 114.605 597.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
22 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 46 0 R /Fit ] /Rect [ 59.68504 575.6019 175.575 585.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
23 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 46 0 R /Fit ] /Rect [ 59.68504 565.6019 208.725 575.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
24 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 46 0 R /Fit ] /Rect [ 59.68504 555.6019 236.8425 565.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
25 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 46 0 R /Fit ] /Rect [ 59.68504 545.6019 156.3975 555.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
26 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 46 0 R /Fit ] /Rect [ 59.68504 535.6019 179.7525 545.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
27 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 46 0 R /Fit ] /Rect [ 59.68504 525.6019 209.1225 535.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
28 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 46 0 R /Fit ] /Rect [ 59.68504 515.6019 141.81 525.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
29 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 46 0 R /Fit ] /Rect [ 45.68504 505.0394 97.70904 516.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
30 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 46 0 R /Fit ] /Rect [ 59.68504 494.6019 136.7925 504.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
31 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 46 0 R /Fit ] /Rect [ 59.68504 484.6019 116.3775 494.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
32 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 46 0 R /Fit ] /Rect [ 59.68504 474.6019 197.235 484.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
33 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 46 0 R /Fit ] /Rect [ 59.68504 464.6019 189.7275 474.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
34 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 46 0 R /Fit ] /Rect [ 59.68504 454.6019 128.4675 464.6019 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
35 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 46 0 R /Fit ] /Rect [ 45.68504 444.0394 151.525 455.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
36 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 46 0 R /Fit ] /Rect [ 45.68504 433.0394 138.613 444.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
37 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 46 0 R /Fit ] /Rect [ 45.68504 422.0394 149.717 433.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
38 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 46 0 R /Fit ] /Rect [ 45.68504 411.0394 157.301 422.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
39 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 46 0 R /Fit ] /Rect [ 45.68504 400.0394 134.605 411.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
40 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 46 0 R /Fit ] /Rect [ 45.68504 389.0394 127.949 400.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
41 0 obj
|
||||||
|
<<
|
||||||
|
/Border [ 0 0 0 ] /Contents () /Dest [ 46 0 R /Fit ] /Rect [ 45.68504 378.0394 97.71704 389.0394 ] /Subtype /Link /Type /Annot
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
42 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
43 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
44 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Symbol /Name /F5 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
45 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /ZapfDingbats /Name /F6 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
46 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 100 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 99 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
47 0 obj
|
||||||
|
<<
|
||||||
|
/Annots [ 4 0 R 5 0 R 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R
|
||||||
|
14 0 R 15 0 R 16 0 R 17 0 R 18 0 R 19 0 R 20 0 R 21 0 R 22 0 R 23 0 R
|
||||||
|
24 0 R 25 0 R 26 0 R 27 0 R 28 0 R 29 0 R 30 0 R 31 0 R 32 0 R 33 0 R
|
||||||
|
34 0 R 35 0 R 36 0 R 37 0 R 38 0 R 39 0 R 40 0 R 41 0 R ] /Contents 101 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 99 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0
|
||||||
|
/Trans <<
|
||||||
|
|
||||||
|
>> /Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
48 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 102 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 99 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
49 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 103 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 99 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
50 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 104 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 99 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
51 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 105 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 99 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
52 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 106 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 99 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
53 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 107 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 99 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
54 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 108 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 99 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
55 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 109 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 99 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
56 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 110 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 99 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
57 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 111 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 99 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
58 0 obj
|
||||||
|
<<
|
||||||
|
/Outlines 60 0 R /PageMode /UseNone /Pages 99 0 R /Type /Catalog
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
59 0 obj
|
||||||
|
<<
|
||||||
|
/Author (Android Cast project) /CreationDate (D:20260626184407+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260626184407+02'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
|
/Subject (\(unspecified\)) /Title (Infrastructure health monitoring \204 specification) /Trapped /False
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
60 0 obj
|
||||||
|
<<
|
||||||
|
/Count 43 /First 61 0 R /Last 98 0 R /Type /Outlines
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
61 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 46 0 R /Fit ] /Next 62 0 R /Parent 60 0 R /Title (1. Purpose)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
62 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 46 0 R /Fit ] /Next 63 0 R /Parent 60 0 R /Prev 61 0 R /Title (2. Scope)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
63 0 obj
|
||||||
|
<<
|
||||||
|
/Count 3 /Dest [ 46 0 R /Fit ] /First 64 0 R /Last 66 0 R /Next 67 0 R /Parent 60 0 R
|
||||||
|
/Prev 62 0 R /Title (3. Requirements)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
64 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 46 0 R /Fit ] /Next 65 0 R /Parent 63 0 R /Title (3.1 Must)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
65 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 46 0 R /Fit ] /Next 66 0 R /Parent 63 0 R /Prev 64 0 R /Title (3.2 Should)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
66 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 46 0 R /Fit ] /Parent 63 0 R /Prev 65 0 R /Title (3.3 Non-goals)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
67 0 obj
|
||||||
|
<<
|
||||||
|
/Count 4 /Dest [ 46 0 R /Fit ] /First 68 0 R /Last 71 0 R /Next 72 0 R /Parent 60 0 R
|
||||||
|
/Prev 63 0 R /Title (4. Monitoring domains)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
68 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 46 0 R /Fit ] /Next 69 0 R /Parent 67 0 R /Title (4.1 Hardware metrics)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
69 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 46 0 R /Fit ] /Next 70 0 R /Parent 67 0 R /Prev 68 0 R /Title (4.2 Software and service metrics)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
70 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 46 0 R /Fit ] /Next 71 0 R /Parent 67 0 R /Prev 69 0 R /Title (4.3 External availability)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
71 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 46 0 R /Fit ] /Parent 67 0 R /Prev 70 0 R /Title (4.4 Provider-layer fault escalation)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
72 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 46 0 R /Fit ] /Next 73 0 R /Parent 60 0 R /Prev 67 0 R /Title (5. Topology \204 cast04 as dedicated monitoring node)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
73 0 obj
|
||||||
|
<<
|
||||||
|
/Count 4 /Dest [ 46 0 R /Fit ] /First 74 0 R /Last 77 0 R /Next 78 0 R /Parent 60 0 R
|
||||||
|
/Prev 72 0 R /Title (6. Component catalog)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
74 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 46 0 R /Fit ] /Next 75 0 R /Parent 73 0 R /Title (6.1 Alpine apk packages \(cast04\))
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
75 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 46 0 R /Fit ] /Next 76 0 R /Parent 73 0 R /Prev 74 0 R /Title (6.2 Alpine apk packages \(cast01\205cast03\))
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
76 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 46 0 R /Fit ] /Next 77 0 R /Parent 73 0 R /Prev 75 0 R /Title (6.3 Docker-based \(cast04\))
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
77 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 46 0 R /Fit ] /Parent 73 0 R /Prev 76 0 R /Title (6.4 External SaaS \(no install\))
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
78 0 obj
|
||||||
|
<<
|
||||||
|
/Count 7 /Dest [ 46 0 R /Fit ] /First 79 0 R /Last 85 0 R /Next 86 0 R /Parent 60 0 R
|
||||||
|
/Prev 73 0 R /Title (7. Deployment plan)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
79 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 46 0 R /Fit ] /Next 80 0 R /Parent 78 0 R /Title (7.1 Phase 0 \204 cast04 provisioning)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
80 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 46 0 R /Fit ] /Next 81 0 R /Parent 78 0 R /Prev 79 0 R /Title (7.2 Phase 1 \204 Prometheus + node_exporter)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
81 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 46 0 R /Fit ] /Next 82 0 R /Parent 78 0 R /Prev 80 0 R /Title (7.3 Phase 2 \204 Service probes and MariaDB exporter)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
82 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 46 0 R /Fit ] /Next 83 0 R /Parent 78 0 R /Prev 81 0 R /Title (7.4 Phase 3 \204 Alertmanager)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
83 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 46 0 R /Fit ] /Next 84 0 R /Parent 78 0 R /Prev 82 0 R /Title (7.5 Phase 4 \204 Grafana dashboards)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
84 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 46 0 R /Fit ] /Next 85 0 R /Parent 78 0 R /Prev 83 0 R /Title (7.6 Phase 5 \204 Uptime Kuma + UptimeRobot)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
85 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 46 0 R /Fit ] /Parent 78 0 R /Prev 84 0 R /Title (7.7 ac-deploy integration)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
86 0 obj
|
||||||
|
<<
|
||||||
|
/Count 5 /Dest [ 46 0 R /Fit ] /First 87 0 R /Last 91 0 R /Next 92 0 R /Parent 60 0 R
|
||||||
|
/Prev 78 0 R /Title (8. Alert routing)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
87 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 46 0 R /Fit ] /Next 88 0 R /Parent 86 0 R /Title (8.1 Alert severity levels)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
88 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 46 0 R /Fit ] /Next 89 0 R /Parent 86 0 R /Prev 87 0 R /Title (8.2 Routing rules)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
89 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 46 0 R /Fit ] /Next 90 0 R /Parent 86 0 R /Prev 88 0 R /Title (8.3 Alertmanager SMTP config \(skeleton\))
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
90 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 46 0 R /Fit ] /Next 91 0 R /Parent 86 0 R /Prev 89 0 R /Title (8.4 Telegram receiver config \(skeleton\))
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
91 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 46 0 R /Fit ] /Parent 86 0 R /Prev 90 0 R /Title (8.5 Alert rule catalog)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
92 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 46 0 R /Fit ] /Next 93 0 R /Parent 60 0 R /Prev 86 0 R /Title (9. Grafana dashboard catalog)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
93 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 46 0 R /Fit ] /Next 94 0 R /Parent 60 0 R /Prev 92 0 R /Title (10. Pre-requisite accounts)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
94 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 46 0 R /Fit ] /Next 95 0 R /Parent 60 0 R /Prev 93 0 R /Title (11. TimescaleDB relationship)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
95 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 46 0 R /Fit ] /Next 96 0 R /Parent 60 0 R /Prev 94 0 R /Title (12. Verification and acceptance)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
96 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 46 0 R /Fit ] /Next 97 0 R /Parent 60 0 R /Prev 95 0 R /Title (13. Risks and mitigations)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
97 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 46 0 R /Fit ] /Next 98 0 R /Parent 60 0 R /Prev 96 0 R /Title (14. Related documents)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
98 0 obj
|
||||||
|
<<
|
||||||
|
/Dest [ 46 0 R /Fit ] /Parent 60 0 R /Prev 97 0 R /Title (15. Changelog)
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
99 0 obj
|
||||||
|
<<
|
||||||
|
/Count 12 /Kids [ 46 0 R 47 0 R 48 0 R 49 0 R 50 0 R 51 0 R 52 0 R 53 0 R 54 0 R 55 0 R
|
||||||
|
56 0 R 57 0 R ] /Type /Pages
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
100 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1000
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gat=+gMWc?&:Ml+b[Xj+Nbs/pa)3Q2?1hWqTREh>+`J'o"L;E5Fh`BBg4[Wr";"0:f]UJHnVfUB^ucj&J%,[Wk/6PJ!28=(JM>$XIt@oTnn1;'AhoC"b:s)J-,P\_%*f8+lr&U#J/h?mklR$<HAk+tRM\e?1aBio)A<ej[jEN2#$d*8k>[gg5D#pXaYF6ESJ@hN1'MG.D"JXSBbK_gMj"mg:b!XGWA%Yu@A)X;\H`'Cr#;"]WJpC\F.H2^#i_+qNeo+h[-ql)%cX,WM06a)#hp.kI3gOq4l!jn_ol&CAm6L-Y?n@BdQ=gVM5VptXn<";2%*gOa?=hhmp(^f_?;gA*hpRUBkl!amdeA:g?UGJj&:"q8][QQ5G4Mfb]FOT^<Gr'+dSI?`>Dp)RF`;kLi2(TH7?@8C=<,TfAN4G,f/TCG'_V)EL+`6Q'qRfX%d[o7gUQ!@3W]Frsgr@C,+>f[`UX9ESMT>8_r<AU"=#0_j:tbM,"_o>m<l^J#M@S9cIaA"KFaO=8Ot\D/pZ>8!)a`Z$:45mP7f1a:JNd]t1*U&%=eY'iQZ\<-0P_"pa/0m,)EqNfIaE:Ci1alK*O9*r0mrPSpWMeE[D:,0SFDDHA=8jojFMl'i#;"F2'O3_4AE8HrXCO;;T7Z<2T]G%EZ-3aSpM`3R4a=m01k17U<06abA`$d-7&m/DDO(0eD.qIA,Eol(#A2=&srL<$dUW@V,5b'WJ'K@t*[eeR,ZnPskI9$H8,O4AT<p^ZDHdP.<Lch!R\8?ecH2;AnV<nV9=E2%2[MKG8_IoTr]cBH6Ce,8&LaJG&>e+:$9oC&P.LA,3,\?/pFqm_2G3J?]#\FCKh-J#&a+gOgTI>Cs8[^3%G3AhLfU1b!iRj_O8]EZHX0X:_A'ga_gU-c'gJlN)SJT,A8R^*D/_W5>n=PWH*&>A9.*s^R98._+-4q<ZbKLc.2H`O(8OSERjC?`_YMPT:C5WRhW\E1cV'nMd0CEn=:ndgYM*_c~>endstream
|
||||||
|
endobj
|
||||||
|
101 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1359
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gatn'>Ar7S'Z],&.F)G7+foq;AT)G7DSVRSMnM7W#\]('3D6)=;+^BHG9f1CgLLL/&4U+T<q?:TSATECOPl$lhoc5^r<hD1U-KTt2F%EXYkeGcY0K5'dDMMAOu/M^J1Sl7_@(pELED^*B3]I"]L\5;#EhYZ#RYHrLB!HdQ(\Mc)Ur."%E:kko9EM2)XIZ#gNq]PrXGt.L"/top0[T@8O#pUU!I@s$Mj=IFAf">(5(phY6/<(&PJE%=I-B'&`n9h;,6%QIiaQt9q\'1l.T):,P"\q)_X.6lR)Z>=$uEYP\FrF#0WPXl7,%\M65%]:YT2lXf;J^SeeLi>VA-C&@f$Jn^a+O$^GRnBgW0sdg;$P5bQk];m*]5:.(ei1M$j2/!A+r$4HsInIpUk/*OCQ1Z^&RBl"t'+2<'f>#g3d;l3T2;]G`JJ0JKu#Zs'5B.E:$CA"5?Ct):.d!_m.jc+*ZTL9\KE[?:%m;-XK%rfEg#,UTJ8uNd\?("T9>s\&rgT@RZEbW[-/ARLc#MX@/`Cu/.?6O%`!';4ZR+kM$=mtY$Zl%3H*]d<heQ2E`F$A@Ek"PghNQoD%0i<%*3aM7u\g00SLJ(k>1!J7L`umF^<3h;h,G#O`;Q1tjZkb>e@m&:-7(J*gd2@L.h:;4-C_!,=<PXHXg$/(J%$G$]06ZOq]^slfhi4V7a!?=N4b,#A9uRTAFJcoKM+(pPLE:o9;U;KEdTM?c%"OPHiV3G6c#Cin=[S[\n^rhdmRfL70&OPQPTi#^3)K16nm/AgDcDXo+U!S@`fUKG1#r2se-9?S;Z1KMYu_6F#:,3:PocUZ%/"i-9r$\AThuY>o2!t]D$0WI8Ro)<TZW1-8e@A_]\^68Y!=<r<f5&A*&lgBi.FpY-r(RCAqta`\0F>Dn$Ku=%;NN]l0CbZ)hl-$C^4oHX[<Z*fEhDeK+,r(eRG'/2eIuEXP`>IHeX8h16KRG'<jfK%+>EN0"!uh]b4&Z7[&mAN,B#A*ee",%T5TaB=nmC3/t@q8I/?qIGr2Z6uP3]N+H^YT^@D?n[:[sk7,Y<j05;`:c^bc4T3QI!?at@]b"`XrkZ7Q)+PYLR*%@V7!DtFA\a,>MeME#3pqo"^Rok/`d"h\N=nMHM@IH&;2B4-<DN^(A]l69FiC\#ZRF*hn6r6KXU[B44A,s/d8B`$)e;8*_[VDK'3_1GIXHX"p6\T7A90LDIt;i;41J2g!\@boP-X_gXG7jd]\B@SQo*@K;=qGiU8g+'](Opk4k=XU>^h8dU[PVV_=&)h[\4WZ`Mq//bDE[_=kAjM:JW`3BpQVsmkaoD9,?16bhM2sSk3rl15o;MTib3]:X=71i%7e!SIh=i#C5hs0)~>endstream
|
||||||
|
endobj
|
||||||
|
102 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3595
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
GatU6>Ar7U(4OT53%kY!Z\^/0=*GGgUe*W7DUPDe4.$0["LLSOR`^dc8PZq5ILiEY'3gc-Ul@a*4u])!-POksLT'+e)W8LIhL-Y7-qkFB9[/7T*SaE9I\)\mUhOPOC[!0*@p>_>l/:aM^?n)A>+/A2pj%UY8^33/(/3=FFSU6</1J)lUTT'a&k4gbQ`k\!6+0M_qfA/(V$'_p7PK+t]iOSrJ!8</4!9&`eIi?-?kVY>j5:<RaPQF\@kW8.[aKA!Vm^JAqoK6;1umS0*CiC2M]c2<fh9m`9\]IK47P.07NhIQi6V;^]QriZEp^b\Zk2d-GVhMN+g,CJDUjN3O)K^<OtH2?0Vc&YO*o%o/m--N6V.8H;$?#4>ljOLQ*U!D#lREoR$On$k[GI.RspO*/5P0%;m+=(UFX[N8]L_\a(CPs&?M(W.lU86^pd"X!M:`J]IhtK=k#eF_tXBopYn@+ot]!4fPh+jKj\UAE\GT>LZW&r76[r;MbG`=Z%,&W^Hd'qi8J<jJf<A.0Cp8>(!QOU<tIm\[YI>**n#i]7hg:1+ZbJ[7]"F<5!E:%?^L31-RRob1uY#g8T`c8oSG],*Xc0W.U>Li1&WPXdqgIXqNM/!/l2'dJ,Y*[RA#nspphI2lf</k/1g`cL3,%$D0Gn:.i_)bZ1(d6Djt<(*;.K\p=Ro#PkSPtYd$gaL1MDiJD%+enG9;Ee<SHS;n6eH8i1e6"WEp*&C_O=A><Dp;V-#BB9CqibJ*%S_Hd9VLMXq:7s]j_Ml,7ufClAB>T"=:"XM"G9/=/;Hk?V_21@s5gEgGqm_^.@<T%RF`Dc":s'AbRdA9%%2=A6J@3t2R<c+[*l*e.,1FR[U<j4@1BLWu0W4c=.Y[YJ!AuLnm,`NV.>-'[kZPBQe-3>h(/37Rr19;-Z'`0ur09/lr4O2D>ahfBBlXiqUq+;PD0G1&Fa!-3?j[ugt$dU=ETsQAig[S^i_ApPT0-80!Y8kC!Mns(6`M&ptOB$LRe\2P<h?6#t9p"Kg"<WQZ4@WhYKpN&t*@G=T2@WPqr#kS"4B@Xgg0f"-9BClJA[TP'YM/Z(BAC\W@!K./''?!cOBu1HCs0fa*:eo&=:hc`&-gf'[:1O@MMbCF2,Qe=`:G#NDE2laJ9Ss(FG7/d4XI\rL8+j`MX3:PX'Nb9nN>oB__85#PHKC4`9lnrK<%+mf<Q=F%PBFGpd(#IOCsi[eNHLM9#A@OV!#^B-5/ftbB)&]UqF.QW-8HtqA;u9&%[*A6X(n:%h-\/<!1ZY*0e=+YtHW%WSZX.kq4hE"#OMH&`\K*=EJ?ll$ecSlC`6/N=p!D-/L7dQGmc5;uTa/;"-V\1e#cEf<=;6`oJOV'PBC2gH%qC$dWe'`qUrfg_ij'cZRW8;^*gIDaN??L^%&?5+FN-VBTZ;'ZMV2I#\PH5NjTHTGi.R8]8BPU?NDF2A$hXLQrbs4kPoUgJ:f]/.:<]\:44%!KU=V(Z5P_NskaRq-(3*ZLAmdI(0;R#*KrkV;Du.KBt)Ea\ei+`^0S.\GB%APH*]qWZs$TVeOfd>em9%oV"hDkloiu&[7`8a%\6mP.MRCW?o"67H).;rB"Ue/<Olfrs4M;.L.P.b9'<r"DiVU%(<q9/-KR+2"5kMCTM[JGF7r_0*PQ%fCoE6Gib:RQibnQ0Y(L4?Wl):P*m]BE4B%*TW@5DkBU93pcO[K:N<LMl0iB_(sh6D_m$PS_\lgb=L?#</;rKI/O[c)HBC6]K;5_Phq=^(8VXOP]Vj;*bsn^qLU*m>Y39i-+7^,X9amY<^_5<H'[Bs+d^)g(QWWVcc)>4*rCZC(Qr^QXc%f&LVs[AAMh)sPMTNi(;IWV5`gT-[NuM^ke,SKMF?aS"V0QT-(3hV)F<EhN7BE1f,fHL_)/N)))89ZCBrNK>OS?<ciQN[.9q"P_b%Kr'ZKj0V!'N)I?'dR9kC_]ZK)a'"5\)jqH!["N5G%Es:LKRqI4EfUT#'"bhVgN8H%=)\-p\L^Gq,XAJoH4-qD\ERlV)B!@p0"A^HVXGL7S?ch)_^.hF9+bR&DUM]qOo-Xg\eKNZ9/e>L3!Y/upSj03^NJW]%)^Ci/+1g;)"=[=PAn"8g'g#-Os8lj6l8\>hH+e_7fg[D9eB]LKFtl+"5kWG0&E2#VT2ShQ"rN=Fo%,\5mGCmG;1_cp2NZ=4FiOAcY/i>Zb%^59idPLJ(\eUIUX;%^BEc,68@@mZ]l)Vc(lVEEDeQ?fN?!VbJ!;[>D<8G<KGd#'V*;Lm0@_B&fFWLK>6Fq6rJL-t8/!s^AEK1?fQKgn3:#fC`pnT%:_]+qZWHt/K^JU<nDO,e:aTpQ\1`]7f&*IW+/(pcBiTKRU\0s\2K8su2)-rQW&P@o(BFnSRCa$q`:5#0cf:Tt%sa6cRm;e-s<SM><o]6bpJ,BOt)W%#qh`c:&635/n'\#bWc^sqYuipBLV2a-HjE3cVDE:W3cNPRd2j5p6k0:/Ji8p&iW]?#O"]?C@/Ai&T/%X+RK1F-L\2k<4N"PX'R[_t^#[T_h+,H%5gU^uCf7sirWqr+pD,lbeiP#s,#0osg@O0**cf^5DXV<+aT^7&=7l@XYA6:%B%K#;:eL_r5-(!ffL4i%d(4<t>D8+BPn9WV2Nj'opCY$QT?(c<`64)D:$Q$5;7Ej,Ac6YoHYnOmq]EaZ'"oL+e7>DEAK_BV:%;+EY,a[X8!kj2P;3N7H%kku.k`:10\kWbU2HCOmBrOjggi]sg*=u3GN`l7!Y20b34'XN-7Ap-Z+hMYBQ&'c\Aa[Lp[_"HaNl0%B5]AgAO_C>m4kW-^b!VY3N%b+FnqFOS5ZZ?H)FAB*\M37,r0ECKnA+gh6!_:`ONk2\bOt&bc$8/:^=\iIXo!-MOnd.)D"C=UhLh6(SG6/J3$q=,%rS8OkPJ&2u,WW"K,WWIGEXV>NL@kc7"GshN0Hk*&='oEF8WmfrrT-J+72HRu4u&5@4j`<,UouIVe^&C@*6Bm_alfIERq9iUaUa6Kh8J.\3G;jg_@NRu<dF3r#spL<Fl'?L@Y>E.#FIW@p6QU?rk)$@FRP:"ZMCHX`t"r9_73%8<0)KC3:6SI5/KKBA*U=B(jg!_DSfEt9gKJpEsr$hO)I*GjNap26cC*@PGK?@Pn-;q!Q7VGXrkAFRW/a0"]bR1B:ck(MGnAc\#$D#D"K*qS@me^rH'&:rF->;QEpnUIXl2JB>J$b=&F.Zh2T6qIqc>4XdHBf)b'_,-6H=*Z]IGFr-hZ,D3a5TFo'+$XYP@$I!6Bo%V:"ZATT$4d8S^jI)-bt4_.48f[.6XrmYCFHLt?^YfkWo+."u_4]l\aa=dsU.PDU?8C^TNaOj`af>ZdSdTbhB?Y[Wb^BO5TL>KZ5ZLu7I-18)A8CDrhCiaP[(>C/]EMN5nfn)TU%MUI\obQ4HE94C^dWZg=\ZB4=B8;gYem%hXp*uF%QFVnhRgh"WfX/+9D.1Z#]_$s1G_ahZiT0FB]WTY4cTC91)LIr8W3k6Nd`)bHD-/Bbmb5#]9!0f3+I)4*bqO8&0U-B6c%-PT9F?t`S;2%==E@/&*#i5!2HYf&Ro,4Z/8;At0Oc%)Rji)d(*Tgn@q<A:GZEJUm/M[!Km`~>endstream
|
||||||
|
endobj
|
||||||
|
103 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3242
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gatm>D/\LD&cV3*_&a.q0?qW`oq"&Fr/u-WSt1eQBa\I0KrjC='hdOU06V_/rd0FMMNZOoM:*-YSP9PRjR@FS*"Igf%R4(n+2eGU0@8qgN%dPU%DnuSU;]XprSlni'>1M_]:*VF$e^gNIs<:s"0&00`39ZG)4mrl0%(_tGU>oEp*AVA9HBPJJ7)i]3As]+dH55kaa^<O`9F:s$&']er*?_Ik-/G<2sLsKVV1JD(#/Eb]r'K5W21<Ep/M\I&`a4Va;]d@pun!Iki,Oo"A>\e8R-'#\:WE,ja4B0"YIIN\pf=)=s#JTB'].9[<M8p,"u]EPPd[q;[94*O#>QjkSCY=S_s?a428fC2N:de(==t"rP[UA'J3ud\#CGO7KEsjiCgtL9t2cQ\jh.eP&1u;.AF'h7RorN_pFC"2A-04a".1(Q\R:as"%V$A\"EL);9YTBME[_HNhl#Jc\0[FV??>QRmBUl107`I@`XM4Cd#+(\d16\3p'll>HYfZqK(nR"['lMdF9u&\s=b+pmjB[.^iH#Nhq"ZsbCUfUAu,D`a9I!:dA">\;Wroj6BiGG=KeYjLInO#HsV:IG0Q]Z3:\RV8?OCnS=GSfO1*<Dmhe3LY@g=\SEW$Clh-Bc+Y>beX=6S?r+3ks%QM4bnJDJC>$@WFe&\B/rV9lWTm^+#MYMisVSo&r`dtfH-Ue@ZG&Fb=QPL<p[\6g[n3#6Wp\KV)6B2:I/R1m>`tF\#@#enO)QIB83"+;lWuS#qUX?5=/E+97,I+/:/_^;4*HmV!s"^l+<&(?K3%^i&jY@G#%dpIG5W3)3DdDYKPT+U*9]_Fd*&D\B?\53)U+LBO(`an4?AUfhoe]a"@)lr;5SDF,=C1(`iUi]/n=joHJpb\./Xd0gbV$e.T,Ql]$d].Rt3CTW9MnU(fn(eJ(;HMBJR,MP+(.+DPX^TMu4?<b_o5<!gcL2eLkR"?m7qPY(s"?:b39PUod'rHLRFe'`'aJo/Z=Cs?t(_jStZ!Q\8@31uQFQiOV">EXmeO+1ikbKpZ>bED[eq,)="^NEm#XHJ!SXUp;A8D,L@Uaq$ASUZ04ZG_cUcAJ.2ILb/oHP;JR(@dn03<E6IKeS(c]L`"Z$(^gle9Xs&gR*L_K=\^+pW,!X#(AK@o5O"'a#e#]QKN_]o\>d.]J5c_6t#@am+u6,i]:F-.2UnJ;EkLQ"'-#gU5\q_n-Hq1[c3A7.7?f1C[V``NQH1SFF)5j/53S>06bL=hXgOIY^iiNE9Qj4r>AVQ'I1icc;0"7.-GZM1g8Z5dM]][4rU[8\E/;I@DMIFh]oBF-*S=gL+I!!-9#R/oSWPh!%\)$b'<W?4g5na6"!!5k\p?ar\H7GIg@9TIFJZ\1s\/L81XjEo$/hEONNRPEmor6>1:tY&3!8s]SWIH7lhW5>c*8'hZ<Ee*tF_93?7J7oM!Nrlu<PHKqALTmdYlt&Il81HB=UN.4`YH@CFsO9,Ts7:dFF`rTf35bYK;t3,+`BOQCfuM4b+8NtBf'Z3[DQNS5.e!/ihk9*XQJ!cDG1Mkc^X$D6Yi580<hUW-Al%hEa1Ff^i&0]D4QPXR:=Aobi*C2!ggo"*%t1#K#5m(Bar]r].t)&e;*=V@AX7L9_;qG`:Obm5h</O9[!fQp5D;V2OT.=maXCdj"WYO2ApQ\QM47._jYaC@Z`+>hk%@k^ZW*0B4gR'VY'NLZb+uXgT,Xc+$V>:i;SOB:[.!#mWrl$EV<8')t4$"n-9W<q%$1BI*3$J8j,+F3%?Afeg]qEdncp`@CQ+b+u9B`f_m0X^$N[RG/?V"Aa.Km?*VO#Cs$c*BA"bI\KCbkKD\O&]aNF(I4'_ur+s@PmFd7@G:M)!>(#ZJpc%:!?btT-6"HGVFAXi,8fsY$dRR"Nf0'Ng!*<)FYsT"@K``e-1qf<7)HNUt-hh2VIeQTrAHJruj^Y/mBuXpfVf[KTQrBbpoIeA5S.52s4>u;h\1k*q,HFsY8M%KEVC93#0+r//j_UP8H-anCIeC\?h1"B/o@FO(;fSnUYl_c6?4L%8cm"jM<WkQoF=N94Hja'(R8Z+R;!/^F#[XV\)(CCu7C/]P$?RHb>:2\KnVPf&)cU>Z>CSMh%iInZHQDlh1bWq/0o]?4]"4U*RDc'e7n%Omn<u_OIEH=t@C+(-]*YD^Ki!1/<]M*DrV\FOP;IVLRVQ#JZNJeKq==D!J#A=-dD*-%*.&>thV![Kf(mN:SlMmraK&Bm.cG&8Qu,J&a!mJS(a<rFFr-2;C&'A$0>m-J*CmgCC9e4;\NVr\7'ftIKB&5M8gHIO?uDdEY+LE?W@F4a'TAH"a&9`oMIr\B8]mNkK?FU?o_"3Zng+`dMBW=aP2LI";Jc"Y9uH@Z\^o-h8p"2h59B1Y"0m:Pos5?iL^TknX,u>SXpk$SGSebtY#k:UO3j[<ZH:3-\"_pCr/rn(U`/QI\g7q8@"&.J'a>4YZ_Y/K($hge)U+`6-*DamFK[qX1>YM@&h7EW,)Q192?=&Y:k]>?KS?J69i'4(of/G0$!*Bc^n^.6H[UI^A1R(IK`aJ$:.#?H5`dpT?paH$Q9MG!g*MQ!.&@$4&5&YEHH&l!SY`*NLG80O\OLU;#Mrhn25'!7].3a.:NB(Zhnl0"GD0:eCsO&Hd#m\!qn7b/47]`g!g3s%QYh&uMdM/ZDV+:Qs,e=coT(-8Gi2&4_]&LIJTG>a#>[0Hl]gcNQne*gA?+PF]he7tQ-j)\dl"5bq57ood4:VmlQ&k$ka-$n=f3]A'gV)_hGh^lpPHM)AaLni'Vb=.C9`4+LHRXJ)8CMUB^1XmpdJHZR0aRm*n/UR]-#KY(%I3pL56YBaD/DHiC,1>DG(+$.FMF]Ap@0:NbQ8++cQ^ar0FH6Jt`tDXiE?4.,XZ!X]E):58%_G"<qt=Y;N@e4Vr;-nW$=YRp&UCN9]MdL\E<P:SB>hZ\r*V&=/6T^M>9<XHIhf9i+igjbE/ejPb,^W8pJ+%(VsaD6HO@K*o%k=#dkY2qn#ajR=3qhR[X+h*kX:UYq7=:Z!4"J7!4)+0Q]\iXXEkNOF=*%ZKK6r#>WQJmT5q%([2\<KOcN1Hu<kiC;ahTgS3.#CZ(kUR?jSMbnP=<_".h<dm&mG-2Fq5cdKYRdn%5q%T+/ZCB3FRJ0/phn=Der:[jR\mQS59]`Yb62,2Z$f(YjNA?qdLV`MI':NE?$rf@e?/P#UHT]R0?g]cUAFTn=L?B`^I)aeRK:A9JT#^4ghrs-N\KI-&~>endstream
|
||||||
|
endobj
|
||||||
|
104 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3841
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gb!;gqet4K')k%D"bFSN]Xs!$pS0l&ONk5I*;W2>p\'-70PHl7e]=I88pU@/2q3JC>eR']gH3$L99U8(B1U>B%;?9NnCFmpr>e5>0@9X)L,9o&2FoV='.r(8=,Whl7p=<gZkV9&<"h9pX&t*h_K/N_%r+FsY#oAB6^l.^he!L,/l9gLnMQd6%:86\VESDsbn5;1$/)H.QJaIMU8qEbf47J@pG>W9N.+6SY94#FjAKSYlf-Ycp'gaR%#LV'(r;hEM#EeX]gn"0F0q"mMHp+M4g=^8O67b#X"i;1U)KJS**'$K8PrdLYRI<ESuk%+;B/@(9F^VYMVp5@!F'f+Y3@i*edN6+[.sknnorL"1#&-FR5bj#IMNIIg7V^"SKQOg#3G,rXU,[ORUhULc^hjaaMH(SOCRI>/,aiL/,5VG!^-J[m#o;rJPS<iUKP%"3iY,)o]_\:2k>O0ePe;'F!_/V#t^Y[,S$u\8USlN>md3mh6sVK&cHJ;I\Z3O\f\AF]O8HA?FXaa9SP,Ghn^b$,$:66NF5@q;F]7!P.'Z#Y&qi&Mn8UF3k[LWS=Q7amFD_LWiT+qmJ_@:h[LN(?8OShU](]o`nFD+O7s?)an@Q#jN3Bq33q8N_f:5,pjLe^ntNJDBc*j5es>l4quu[j2eA7`CqCasVnCg/T!5bd[&/3UO1",B-Pu6thS8;0VP_K#FACiU?/WbfjT,VbF0R\p,[0YN&1,5+QL?Qoi6<bX!sPV(:bj,$mM7bcSV)<nKMkPY9"h.MZ$q2KjX7m)cnn&'+cB(#q+Gt^:g'd['?pK+_;DFdMQ8h9V4kfQM`4-+&ar=S[B&3jPX9J[<N,TZe]-3UeZRJt>mu7g=p:/5$34>=$7M/S!4-DT:b!sq9%>Da<*$f?W`;;5YL"gFT13'E;%U=ThNg6q=,TCBrUF9m#lJOdd#Ff3RpC@C!9d2*TQB8X86qnP'!g[#^"Cl_NW@f');t)A"8`k:"Yq0NW@cSuBeb.;@Glb\<R]b^PWF>D22E?&fJ]4MjoiMD*Aa2MF22P8(kW;:)"h1sZ0m$7EtfGG1IX.)2OG"ZP-SP'FS;FJ\mh`6U]Cl.!LQob$<1kom#LIJ4Ef<\(0+!e\01Z&n8T3Y6[V&61TK3]7ii<H-dFfq<p,X"pm*I6Js2EN)=_DdE5[\e=(E7<lfATYLH]6%D6>CEqY^]3!n)"[3ud.g.?]ZSaiLf!h==uM,30-IdOe`!`U2cF4`7e?kmE3B?]o8"Y].dS/INjq2s(c;.>K?^3*6%bd1+ggD?_OP1I]#j%Eh8%1ip;<koKVdOuOS#5/KC)03W5c:5fj,e`roEeUSFY6As1@mRp@.'2C$t.^a/?L+'\j7Bk;i(g5;Fp+2(Li.=t?foR'<.1OZ_k^h-XHNqQE2feEkd!`="Xd6L=9<Q;JQIVG%']D("U0Ra]-X%JqJ:GAj/EsU3n8i<Vna?/W?S'*DSg7G*&NkW_S?+]o>KcDqqK"2RS82#?PG=J<->c2c%!Ouo-@egIN#f4Eo-B?YCF"NK7kpj?@67Jh$fW#8?DU`YLBHde'bnh@\&#<()T-=:,$Q/M9:D8EV2R'mKh=X:pN#`nH;UX+%F`O,PS'q$:tBhG.LZ5gWJ9$HW%>hae=sc97[<(SCOGD*^o2P0Oge^i\nW3pAEecPk8:)Vf(9s?>h8C)L,jr)4dPc.dY[e)Udnb^,u*Ek;[Teaa@dT!F6#bSRcYI8E6Yu/YHlT(=+;bH.)SKKQ^1&@]d@G5"d*1n>aJlSaUdneH9h9[H&"P%?$OY^Jcp/)4pXNQ"SI]$5s/F43h/iR,YS/:BuKT'2Y5I>S]2NZ0$*8_O>S?6lD$?&;j#i)n_7g>3N\Eh:9-V*=VG:'U9J?,$arB0H`Rt4m@i)LaBb6pV)X43G=Gcb[M6Dg0J1]ga*S&r[er%=Qf7uFrE;WnLq8&X'"UFC=\_o)C\eN/>R8Q+-h2@aPG&tod49Dpip+2pV^W3ZS5MpO*fQ$:^dMAuj3rM+Br2R%::CA^dJ/I7$k9(+WcP'EW>MOo"I<Yh,.O7Np93!^UO5a,8l/'QlXW(d$;JTf9KR,2MC[te[XVEWos5l]h"EDT[;Z(&0m\JDknQ:4%AD)%N8Cli+gCo]Wi5@BhfT%p-J.P<h[RmF%1^VN(73(sg]KV.p_S&pR#6H$h8@5Pi=OsP*/&POKL,1Ul0kWZf2g,hI_WM%VB9,J>>Q6P34sD-C!U5;"^TLYD.:@Z'sP1u?$ChOTceqX'8@C[H&6ot-&FoD#VNOJrm"?3ouO'S;[0"V@CW^B$q-TYb@6HEdsa1@RJG[;CDtH26_bcth1laIZHA+)FO>M^UEU)o@^A.00F;-ihVrJW<KQVl^PkVm;bH)&RJd#Df.hs[7;F;V5!%f[Oq$1nae$25cgcJ1P`:!=YL'fV^eAuCINTCEQ04>Ir;Dn>Vp3AUT+s:rT-G6.C49J%b^,;EF\IFqO'/ak9)"VG8b^c$mmu5t4%N]I-jP`ml(&VZH=OO"f,iB_F5NdYdKtKlPYP2e;nA^71ZTJZ0H`5;Zu0fT=e``@3l)Yh]Ot(RmJ.2DG+?P!milbni2U$3N=__WcoDRRbqhcs-!Pt-^T+eN(60P7#A]LQq-hFl`YEU(Bh%h>L8S*eJdrG6ZSdH*pE(1$V5kpfD;:Xr<cP6ZU$Hrpm_^0Y5oZ>K$..4d.%q5<K+L7d$C[prC2>[hVK<LV2^Ec!LNf8J2de0_h1.jP:\V4KkDd;n-GSl=NUf%J:,,;VI%4]A&K3Whii)gB,!%L]Ir7i2FuapUU2.+_#sUfZGN0t?Gtc&j5#)tS#ttP&>!Ig$0he9#oog*6Sn\46&>3_;D_#B(!1G\Pd-N1]c-hAu?Y^ut#l(gi-CT.c*gqkhV/alD_eu*n&\#=47DCG*%A+XcDTBpf359#.N!F<&lS!5R3:,o*-NmWRCo;QQRDFW.K>(T6FVe@&$iL<2hNfq4W4+&Gl#,*o:S>9/0AXmR*RMTLe\4HH%L7hMM!2Z]VDN>g,@EIo/e/N.(B=g9+4-Ut/-(#`-is%Mc`61L3h(U9[\pb>_ObPGM4[*(hAoQ4<PGZ*;>Utj@kr!tpiUb;(f#ru!43s*?4^Gi]+t,.3lNh.@?(%^OF5ZPnfU"a_N(;5'4i%/fM4Vq=@XVr,CdIo+=E.XK)I9-Kd08=hfH2g@oQj$28'q`n`7;sXCf3md4mhF8A^Rh:RQrb"j88/W)(]pd[aYDeUUEWV#famNurP@k9gOjWQI^K&`=G??JLi5):*Jr#2=,eZ5oj8mF9),%CTbJCr^:p*NQb@d[=$^RUiADXZ[Qe$nrpN".j6E=sl,S>[-`U#1C8^?#0gt<cSRhL`p"XK7ZJ8Z9@377cD6.?NTG<Tdo7h75tJ7K_\'?R-_mTaL:1BX?^i$7J0olHXrEp)RLP/l[$YkGe$!j90irsV]ia&aKqilP@G/8fDI*UW*=oH4EW]dZ'd,4S]LhQ*g7%m@Gi9n*+D[`g&h"OAY-ic\P:(dB&FCo;&+6Ajs`Jh:_,I_)&i#p*+Lq(8#'G1o1eTnfm0XB=m:U`+Z8<[q].&ci>t60HFp]"qH6kio4U5V-*Luo#-H?omHT'g00B\/:@l3OQVR#LO?r-W4K.[feUCTj_G`Vj#mY&>85I>k`V^SA$"1BLd,G??@/_5dJ88PMT:G"Iatscr5@``KOkW/c(Ksd&HUD.pI*jr,Ef7gL_H$]lj"r#tqOj^uSm_<jObtLc1Q#eBDEAisCKM@"[kdqT.nNOLN!N\50&J8+!TAb-Tit0rWb0WCgQCK_Rc`8dn?Y_hAK]H#lloq>6WBAF.urT!8@K:+e(b@:bq.d>Rbg;Kkifd]D$17~>endstream
|
||||||
|
endobj
|
||||||
|
105 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2695
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gb!S-BlE%SmCRiOnUS>u\$<$^X__2uLNi&BLS(\2Zp9.NCl]UMk_^WuPCHr"/k]NoP+:[.W,gN8E_$\^)'2.1`#k0??ap(P((@qj+;.d,+GuhBFU]RrpY6u2VP4EdTo'1j3Y=d5<,c14&!N*Wr6V9[ba&n\d[li!L[-!Z,R"i*&O?TD74(QUIpIWA=nJE:o*MMUOG6f4iH\`6fHkDiLTNr/_VC42HnoRd[?m!J\Z;CDXlE^2k71c[c2H7DZe)u'@huqL8Vm6?0^inJ^KK,uBO+@U#lQcAo(d#8m6OXX)?L9b`?KSh,YaM!5BLW;q)ST>/Hao(i_p+b3/C]3@P8Q,*uT4\`t)a1]_^O)r*)]ne>$t0Mk]un1[ja/9,c:#hh2A\#*[DX=o??!dJp_LQL1tk5ok,k!>#.Z-JjFBiR@h#1Yi9j/f"AjEDqW:\D/Tan\dc.g^e&Th+Hd'*lTs*<sn/[IC,ZT@^^XKGUNDZY8A$;lCdE*+)DISjZ!dCcB:buJ>ns64qF%$*9l^-hK^R[Jk0"#YHNO"Y5(Q&rJL_tEEW5/.2NOOP$dqF,aon?3mi4JZ6)@i"=Z]_Y";Ne4@PCB<1!lHquo]Z6lH56gU#^qb?+IJ8%.m>hAS`S]O=Zr,0)m;Ha3%)oU1NI?QN&ojCt)O.:u9ap$3'3eA]<.T2aCYTEpG4JeSnAkncF?iLclL=ECGL[(G!oiIL)d@!`<bD/]"Q%ZU;LY,rSE:f@R>]4?p#jlF.C-c$0#$dePDV?Ha=;#mcckUD;.*0N:V2i&MhaHe.3[k.OHLFMZDb8_=8U'm\<%Lr2Ci?*S1*fD612L^JQZS6PWDQPVsRbaW0%_$^+cN3RCFeTX8,pFF)FDH:s20FI`VHf1TW<L01:-qXa,peE&O#n='Y9:;9oJHY%I5gXYk/A`&mSeVklrC&Pl51G=mgp`,BVlhMAk@$te)1PGAatF'jB>9+C.Dc\"].mf&>6.0bArSHF"'!J#"o.brs\,tNOWMQMstq4\`>h-O7oqsrH4FA4?Sj'\FeHL)0l.D%>ptW0Q*Im+2hM5@4h?n/0):sb"WeZ-I5Ua<A6k9m5c"(Eh\L1]cnp0r4+22L*WfT#dUFd\cIDc8u=qbSirTUEl+[r&P7TUOn$5=eRp/LIkh_.Zj0#ja=4@jR8),Z7_5UA"C9f%9lpuqSM&nBU72k4''RHR0E"`Gb$^#1@n.S#&cu\)^QWaEea=?MC4`CBjq4DqI2]E,Y9bi[VEbh(1#9tOb!I0,+RgCun[??/9SW9Ml;a]%%_)820/;>OZt?GJU/&k\EVm9cc]6n;CjEfKL#T[baMK7c<HEq(Htoks*nXaU<'K3.Fju<J]6)Pn6UaKMFG!(c8)7^rIC!*\Oa`X#\oVPc(<JOb;cQ1jZ^t@jg97Dd'm1n\<^diLO&s^>&\_CBXnWp;VXDB,HW!osV--J"\+rRukt7G3"QeLX_Y7Ms_/nKprf2KCo`RY1'pZT&kO_she'mc2<on5j#okrZ9)rGs]i]P3DXg=9qoN5<<W_2-#@Q7c!oPI3@'Wc6i$\h<6<+*F-jS\/"Min7JD!d+J>3fD<&q?>(V1Ft6Hc*hRYZTS5mI=b[UR$==Ha7p=gBI_,XZh5>Hm:53]F]KX_Gd*TQqgcFp,PB]^`4rj\K#8,-1J8`R/!gl6cW11at3LGQ<a)Kt"qtoGXt#07"Ong\$=Q?4=(q)=k>#*W)PTU0Y@[_m0FlH*M)NHn9c<jj$8f\HnD(:8lQBRjq5q<!=WIp>h^uVB1t%V6FiIgP,"$?,gT..Q&-r5*'#H'OI0!1:h]5hB[&f\kKmk=td04(,E;3^X<YBW7;5sIuNcMMa:CeEqF+g\R[5%ET/`khKZ+GU-?H(ZGM%UP70b.1fD)`E&C+>d+Kgk?=Jd2)VXiK!nV;$1jhsW9X]cuA)Vr=HY[$r8`'mG?g/?m=MfKESt4u([Rf8mJAG$Je'Y]`K)=57$7C45EHu`uf+Z23;!65eiY*/9NGblgfCA&30)c#%IgTj'U#.I%Eq8=i4_2<%cYkD&9^aT(Ze6d$8!E9/jgd7_]7nGo0p4SOg$!a(B`YsD/:7ZfmL]7.O/a/d/F\`Gm@q%0,tV/AeMNLo=-?N\+<5CNaH56Y%-BBUb>+TT@OMEC[_ANfmGb-HoCbnl1,FlH%MP?@&8jTI/7C4<=b?6Xl?oLJ;70I^)"=CSCm*RanAKC3.Qd][9p4=t<$3jU=_AR%Jg%m-Wa\!f`f;&(%a2@rDV/KD@RpPAPP+<bU)F3P&U%6K\;?SM3nq3*W&9%\s!!,\\2X&p'W&(,,aV_G39]'7P3&hUQ<EKDc)Gf/d[64TB@5PWShKlTIWR)2C=@g8jR&e%W"p+<BC_+'*(4GWCib9"NIZjklN3m)5i`p/4:0Q=rdG_?I^H1CL?H`hiGZC(96/B)pLUMrnIuT)!6^dK;o)_]b4Sl!&Z.NpGY,6If,Jg9k#0se[`<ZskZqa0DOs`PJ>6.V:4]mhbUJ[:.qOr=%TXLe]`"*b#-P'b#[1'Sl>LGD&s=N8*^Nj?\9c)9N\8*^$QT2kjnCcd6[*b&hWlIRhm2R8VPW&jGf7B9nVRR8'c%-1iYch.(2iPQ(<dZ/Yg?_0(k1X1LpAk;nZ0n[j^t^dO!TRS.tm+)m!`hJJj^MUd'BF>,d]$oJhEMsjplu8Llj6]YJCb\NX@#pr<IFH(K^~>endstream
|
||||||
|
endobj
|
||||||
|
106 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2095
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gb"/'D0+/q&H88.Yldp6kZHE,hCMUZ#uI98BFXM$KeOQN3nkj)6RO8T^[L#NZ=R1EAL;e?S4#R.hVR\WF3h!W5fF7rs4n7EjTGd+#S7?,3=oKD@IbK=S6UHV+GH\1.-AlQFg-Tg;)MRuGpp[hA8>tZ(bc8I%)qSL)[a$`0pcnqdKT7oKtqrtE/*Bl8hG!&StXOWNUM8_a,qGqT#0P-9V.+&5N8T_"k-A.Af#.>Jh!q6'>o57hSr;EP&#l0V6F%4nbE9k[EgW=:?6uP+_?\GFCkQ+GoDIK)F;D<q+ZK$!^Fh0)E@gd/A$tl>G]l"F,5Yt#%$\SqhdG1R\>;,fqrKn6*Ui5lNDXLLi=9hd1'<RKUU78)L;PXB4t1j$5M$';Gj5M*U;6cP!Mmtea+B^Mn5hQin\)o&rRGT#t9.?6k)g?cWn#Y2$Aa6h\r`<r8*^.+gtQ5L2'[B<V&^3^Lino#;s]TklPD_Tbr*2"\EjQ:[It9nI2+;3h5fD?h%@1MDBkX4AO'u+V-%uQjX3nEMQeCAE$FmH@Qr.c<^:C?j/dSR1n*Afaum5p90(dNu/!p-IVX;Er@!531B`&(#mP2D@qUpbi,G^`aQB7r+lJM!qR2ok38!fl0qqBY-6`6j1:3@dnu]TrQ=`I@s9J[`EnD/DV=/4aI%U)iO9m1%?R%(>j\/RnkKF1^?J^.Dpkl.T^,!+)-8d7q=h'IDrT\b)g6C`PAuA;C+;ZhR%7;%4h%r%63;*9mZkCXj(JNjj:]-ROLfkcdQ?>tKua?Y&S]hS_Vb._m6V[g9/d.+YFjZX?jXJ!CIkt1>T<od/Hon^^:JMmh<@orRa#4@WX*QC$F%TN"?7k7=B[0U*0gRF<<W)$$F!9)"?=O-PhPpC#iE(C_RGSC%>6aK'P\6%p<<r1WE=kkfcA(FQMU3t6'"m%$RkX,?Z*Itm!9"Df-g)';?c[eoD3P0TN0tpS$bt)Da\bW)RM*?0"i5VH9%.TLbZ>//6fCp8*5b>O%n:gM,QO**B_a9m>a;&93:Y<];[#r]Q@'?hEekG8a<oMn*7.889_[V9WoT%QZ:0P9SQ<.0lQES:(+*6S8I?2Jq<&uP\JsZ5dL!(pU)Z%lISr_rd'JFSs:IW1#sL`W?f>B'HuN-MO<A9Pp;`jAeh:GfZ:*;Y?LD4[s0fjS</`g;RgjP&V=Dhb]fO'MP!'j$gE7S#D-3*R0.qL'32_.U-VRiBI>\0I1<00N16H7qG)9Om];!lo@=WM2Q'-UV"'>]4XRAtll/#3r'heIMMf_gXV@X:\mc?\VbRr*T;[77K4g`Pfpp/s,O&^/PE'+]E\q]\U5:]AHLnMeOYcZIUd']oh,PB/1<Yj.?r-nn[FG;``o)jc$N(qVm4uE=P!/H-5;5Iq/?l_a<Do=@-#?k($bHd*CBZZGS=?^+BUl@*nb.U!qTeDnd%-tTC3G>22j/VKR>_B7=5tXB[N$=+pIO.H;F\mU83)45ka\uh*R`(W$u53k::ipD*I,3I$VbK=(H!P2"cdpkMq:l.h0n-1OuH+*CcR)u9^eQ>K'S0sPT7^".R;HiKZ,BGYJ37@d0l-X&"&P+>a_YY[1]Bq<mC1\P0m+NmluO4T3p0Dh\SG)&3Dl[o*-.pF#%BB5P3bg/pVWEA584<JONlX@j+7UEPUDdjKF"*%&GLoAh7U+QH-&UAQ,SI0kJf_Y*n9jh/rMd^nj.L\ag$';jmW!I^askWqn1)P,9Ij[Hu2aLTS/n#4YP-TuB>6AL#i.:4.j2RGFU?Yr-6JB]_K46IDIYRu"W."+mnqS>N9_%(7:RG$V].'j:-6kEoOIO'+Lje`tT_nTfr:@n7$I:3s5glWiDlj_oj(IZjR&FX(+\haKo3?Z&5Kldgka'MC5rCU[mhKqeM?gPN3c'_S@TB"`!5N"mVY4&dNLfWE`4.bQC2WRAePLV9OLXf@*pr]TacMXhH)]pBaiaRH1Q>#_cs>PjUH<V/WW1RlET[I+XCQrD]\3J:_G=2/)3ngA(Y(M2]V<*qOpfd_u+6\dF,;u+ed3RhCY*-P&6V%[=+:quF)=3I#?@M\F5.nMNRMD2Jo5d<["A1/,DZX<cdmO\PXrrGkIW]'~>endstream
|
||||||
|
endobj
|
||||||
|
107 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3336
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gatm>>BAQ-&q801fP0JAPr>@]-Y6'qg9esn:6OYW8tRr(JLF&u9G.a7b4bZ(B9tQ>Zt.'Lm)1dg&D199qsB*C^r1/lqAH+0Ik5"$g&fHP`<ImFE+/8Xr`VG]p<78`\t7l9T'8QQ>)):c?$m-;nNj3[.l9@jUgSoKo^&spF1SWU`_@ki0F;^[M]J!$**Cp<!5Bno:asT?Q5;2^nJ)hSd(Y"ipT_F1_!mBQD)Zg2oXisC*:EbpYiMn>K2erW-h[HO$;i8_8cVXiS,ga`YagMS`?Je`EkB91Gf$on90m*]Fp43oOfVtkE#.gL%EZ;VB=1d=UFLB6[CT$a3Cdkq5mSE,^nsegJ__F]fd>R-]L!L$aJ8idniRMnh49l\1='>Aj-+HeQQHtZ&/BT;1DR5a<r-tH.WNE`*L.VB;s@X*"\76DVA*BEY_&EBd0a%t?1;WK<+),ur!M)&%I=?A-:KaCo/4E!)GboAhlnk5rMbqrq`*TQGuCn6%<OY2O_FrL'p(o*-eP;)2\R7LT/FXGmjNMb5?t1>?R90OD=>9'%V.E*-klR`:QWa]ZWE!>XsCi-oLrSIPiL/Xd^W#8nRKb!Ck7:,'=;E`64!mG_pTP!>/&?LJiW;dG2+WIdkEr:218S3hrgd7n06`EhGJ6.[T!Qq^i\9p@\YK;hf_WRB<taZUb^c4\N+kK(lT7^\13D1U:]UR((HB4@$-?@%;J`,F-%@PJUufYeT\&mWI1g=)kna*`8b*F2DRk=dtY`3V[TE>SR04)DU"_j$FW7V@EmkN-!7F<%j.&Yf\-V^A'f^7=gFhN"BmS?;T:6(&qUGs'G,se*(dMDP4/`;JnQP[AL(BVN:1Gqb]gs"p)ca`gY.H2\7XKapb^7&;m[C]GC@@sdQGW*^>g);1Z?`$ibd7Tiq(n\%>3A@-dAFNbVF\cm@p?mKRdN0PXWO:`ZEn0-1VaCG![[!9iFDE9LZUl$>:CJ2U)F%D'[Q:b[U5:%]-:X%E9brkaQelnY_FWc/GiF=p9Q"CQ,nj@4kB%?R5?XO;32TL=IJQ6RU?2]$[(hkS-"j4k9r<ENH]\RJpLB5Hl>DJ,TI)88mV!AGq3@<`m(\=@[;t4<;DD!O"2Z64]#IWC.(RbBQo^aXU`HeOnTs#.>7:p6Fj+Ooh%\$5&Y(Ui6/DffL!iVR5CnS_fbs;I6PjQOpE_q/mo:VMNh@ggPtNF3P&fM@taq;]'UXaF$RLES*oP%[/1cA$BT;aYaXj+c#B0Kl2SB4Wt3"7A%U.1a/\tkgnpYTdOq!J6*PZOmk@$r]sP@F0b'1GTeJZ/ti3%>\,52NjO_r>3U]q4F][^SLE_];:;L(s,:*.b2GQrb2Cn6lB=Jq1^%gjq,&eI?8g_XnVW/2$H6r1VAU8XJp!W@kSVIJ3r-KO+SJ.U)UlfJc9,fY(1d^!2<J6/Ho1gA9<QsM`#BR]1RFATVcRErjg'4M@%)^XRarATJEad4nSH59Hq#fB7$OrM=?>aY-]E)MLI/%SL'BBhajB=u0n!^^4PIna<@&El.AR#J=!7*E#1LVY<lB-uTG)?r.'1''B)e\B"BEhIpAt`4:(Ul(.RPA=UI)>C3/YMX*I=d?N<._<Uk\)!n::<E3o%,M-i2iQ8Fe[cS2lVo^P$DBB/acFC1IRPn+Ve:,`*#ORL'^IieUIR:R..i1cO4jq8bIJlhUBJZU]'/(eP$0pt'`Di"P"fP":""E$CoFPSr%5$7KVPR'kJY=HGoTVB$RA+`H(!#3?]UO[U2(*).qT6KAYkCs8@f6PS8e`*\*T:#h3/4,@s"%[LdA@(Y<3<mmYW:K9Le!/>5#^-jT7@n\7aEA9I;C?=nT"8[[oa=HT?:3G>-+d/DjUM*XSbIU:eW$oih%&@dkX[Xj_k2n+0FFnsl^n%XoXqr*7<b3P1`kI"RS<7qu3c#5I#-=3fc0hqZ6rJ.FUSK/r1SKq57R`iJ.\r#-*N`?u)5jh7\adNT6t(k+n>Mg,K\!-^q&ZO#E'H6II2<fUVh\\Jm\'E&NnRu4OX(S)p'm9H\]B#mjC!gQ;p4rN6i6NrhSn/LB$Y_1QfSPdWHak1q>f,%VP'0k_V:"-Ee>F]@);$$a/No:le8/a5K*n__I*r2hd(7pbqqH1*kGO*G(T_Fo<+7XSf9iD"Ef"\1&K%%9kRod_P'XF/b^5eWPfM<]8n8KnBothc>%400S>Kuh*P5u*6@3sjaTM;LQXYZoF2W:4IOFHJS32r$'.mEHEHYtV!<]t9Zh-JXC%"ai#$i*I(ihcVWBXgWjJ/@J]EJc;Hs@j)U)PhBR?b])4hND"'rJ&U5Djj(brLZ<F(PoHscR4dkiE/e)3[LpGttF.$brp$l5VMUQ0VtH'"_O)g_8+\gSWi\jR\"I4Pd^WcldFUT;OGONf<ilI[Vp<4*1m\YhH"4(^E[A.-R);qQ8/#eKG.+uJT[>.s/d0f>a]rDT1K*0<MZj*Ep]-VeNI"TM"f=8./WR#^9Zjk@Cb%5Y@3cN1qOqdpCk&U=$)[0Z%853A'AF2PG&+/Y?V'g$5\_'S?XRGrt7.;5?"MGYtg_YA?H&C,];?+bOAPj3ss>m&<Vn%;A:Y["flFkb]]>$tZ^m<^VH8c)YXF.7_@J&9&E36U`BKO`::bI)pL/H(Du$t5<[f'Y1VrcQpg:8"kggYWWB$&(C,L8D9.[eacHFq'&hN9IG1CaCeK)Xs5P,I=Np[\Or#[rq)^UV1GeMURfn@gpK$m5\FX/'=PGk'AFL]P72M$W0!E=JoHM5uTns\u>#0=QtdF[Id;3*8)%LGTtQ'%J)Rm1I`T@UHW,0b,4Kfp`<J4N&/]1TsEB4XI+lgP`i30mC<0O1unOgmL^thfg\)?6ChZml?j;'+u(3;A;XQV<@\NR<l)P9EM3Q[a6rb0Cb[OT)JQhO?/omfGPM4(1F'7/f<\l_qpV$I(dG0-7SaQ5MH:*h<Wct6^,`]?*p3--*+&of6#Qb,g&\kO%H,!E!4fd%J62DojZ2u_d8&Ld\!)HlZSEp<G8JNnhksqdjdLqaj/c/sJ7\Q4KI6n6)a;g2J!_g[:'/:X[G?o>N'ke4D>rW+LR5I4GF@,lV!/IB-U%1@`:VYKXu[Kd#dC!QGl!_19UKj\H*Kl-*9MA]P(.BTEoee.J+O5Q^YgFBO"g=2h[9+8%e?Yt-fint"bo#J?0@f'WeUmV!0&f4YYG)TRJIRUb=VR;)m+jSH]UT29_/p"g*U:Z^0dgs0q#'>MbI9IWY_c+1YjanFH"_W47g>IkI*.Hg9,G$/[MeK3?tZ0W-q,K7j^.rf<PH"`kN#j9N<4Z%DU"mH7F0"D$8-H"PY^pb6fbB-6^Seh\g54ci+G/r7@M~>endstream
|
||||||
|
endobj
|
||||||
|
108 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1845
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gb!#\s)6UN'`Yjr`Oju,ctNrB'#&(\`nKj(\o-oC9KQr^O\#t+9B+HEkcq;b\)26>+G@P9C-!r38?neZT0JtBc'V>J5;W:\I"7OcW4at&CqsEeB%(G1hu_1/Hae?6.bV1f<l_4!U"O-!p#Bp'fBjS`#s.4c-V@81M?pLhO2](K%lKg!9oeP*@DTb"9q'GWs,NeJ\#9@!?\S2UE5)Vmi_cE1M`Hj:Oir0i!lNuGjU_Wg@.7\U9d2I&,=t<hI#?*Vq$Dq*0B1=FMaAWL*>^=\HIfjBZEO*`2t&E'cV>sO4MQJ+"_]TB)G'-!W[*Ok8+Z!K]oADP[dmr>P_bV,Z&mn+U:nd>$'']4B\n@PaXOX^Q)@GeJQ*n6B]\9/oGqA?LY0_.)&=VMB#O"dj_#nD%4P/Bg#dBnetHnL"eM9?nq_%VZ7*[MbH0(k7tBAUe+H$*8;`k'_Xfb^@LhpK,.ZMF;O*bSp8$j)8J<D\".@V\R+"d\X?M6c/IG8[&.dG(&&rE0o-ZU$`KR.1]PrEfi1_;am`h\7hul&=MBVaZXGLL&p#ndTJ,<OsY&)'Adm-FDi;DU4pZqetqrQqT*aJ\ir\fUq1'*P#c;[_tVQ=m1^?uNu5L*$<)bLl>fn_(]6lsU8/J/hTg4b!eo$U,bqML(8<Sq&/7mt.E8WL@98A!r<Je5rGq,_S(C`;]Lg"*^?=J4J,)QCO>H4Fd;):YbRpB>0WL/+FP=Cb[8^?(9CUN:]C=bUW0HGlM=N]3XPO$AQ;=0jn@)*,eh+G%.9nYV4\;/sY+'JOt\.[T#0":oku-l=i\D$VuLJ:?lAKc,TU35^P"dJmXlPd(F/0lg<C)fhJ`\]t8cDGl$daE;U@9B0NM\KD1m(foa2S5VNe*gX%j\@&.-G"Xi3/;dknd"9a3j[`g-Y>!%\d4;JEUK-#nbe3P7#$cn)[J*VhWK^r!iAiPtEqP<g.2=-[19Cs%he>s*aDY>lkT)"L]R-L4XW3_GL=KHD>u&5'HQKqS&=kPor:L=)P0>hW=iJ0o<3R<f1f)-roN`7EJ"<ccI-A]Q=<`o3$=(C")dqs1QGHOlZdFV_#?.HcfrNXoaG`Pn0Y!M"(?dA<4<N,()Wo4eThDUip^oWmc0V1jL;DY`j+pFnj1VL-^^X9_$uVlJkI^9:SLF)`Dd?L,\4%G#!DRUC_ufYF/r\rN@T)B1OBC"!<<B+BI2c!oEh`edh6DPa^>KPk4?b4!WRZI1Q_+WOq_mH77[6p$0hW+H8Cld<TJe+5`<&bn\aSWF/<_pN=DV,)juO02?su"*Y]?k"fP"o\7P)7ro\_Qb?F.cGSRNZ;658Ir7c-W6$&*8elaU\3-*mo(a0<-g8;;mZ-kOI.2;g*pSM7@sT6T9dD"Nh0HQS$8mk`Rjq[Xc"s5WS[f0%FfnU1IECL]lQ-[4lI*fl8Y[rI^3<s?Cd$.'Z?_I<t:mh:6Zp.qmK/[YQhi;OdH96N3/LPCS>r;mul9qhgc8G,A$>[op:K*#Cg)YkXd?aQP[(k[I;^*8mBV?%<PUF>Xh>?`M%/2^>kc#\M<RJ!22)2&#IWj0Ad3(j'3Y1Rt/r;aI1Ei^S`GOT1p%hd^IH&/q!-F"\64D3)Im\KEBpnuks88&uD9c_WM0q\;Ibj@@=n'CJ17n+Q=q`U66]GKZ4#+EnL1.,LEB;6"Geb92J&V=XhIP)/)Y%_p:N;>H[(a]gMO/52.Iee1pq;GG)e`;!d^AkD;2R?($mls%@)O3'$iU[=.7%)/A+QNr$9*"u5GG#b>;Z^UG,8DeKhru`CBK&Ylh1GPdWHu`sg,3'uO+Nd'BH9$jp2RPD%BPA_fnlb=[>R_HNO<V2mlt5nM-U~>endstream
|
||||||
|
endobj
|
||||||
|
109 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2519
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gb!#]BlD`q&H2$(0aLt$%4mCK][[,Rd5i`9e?r9j79p0LC*bUn+`g4(9&'C&=]2%D=X6GF72mIKW*R]mcC=.%$)mVdZ@C[1i*lujmg'I3_^Q.&d:)ec^)`e-Srh2lh,$f":j"HD7o;-6a7i=m^Q&%GM?B.iHudD>G+rU'j4O`2,c),?1rXuRJ4`Xgr9k>9WT"W75;>h+_eBr^ph8ZD.k-%(r%!?VX97c?aoOsjc<Y=A$9_\Z[qn3%1e<<`"*M\%*l$5Pfq$`a?e'bFAFi>_U_6lI+]!(QJ=H_6;.0*VZg$bk]#DERt95<P;.:H#I37/_rYKngtM6,6qDnDXe7LWk!BR./I.QU2i&iV26gZeQ,2$Uqp!Qc#GF_?6VM/0Z7MZ-VD%cS/q0T6psDe=3W"4A;L=7A72b]*HRCEAE'r/=rqFbcar51/'[BA&1UXR6,n-/cW=G#A'J:GS%j[d1$V@d^u:E)LW*&JV>dN+&dU^j05`/J*$".o,BqXd0aL)YpUBXf,&:q53Q$@R3)qeNN$"qZ"29&hI)cZh/%>k9cfb$%T2?NgFQ-;R6X3@_<E7tKX$[X+Z%?*bGTc[\G\i9"[&4E<:o5#kFsVS]_#G]P]bo&?J*=\*UK<UTUD2AV4#@N5;eFhjIaCg]%Fis#9aKM!"(6#TZ[hLO(K9Cp\?=@d424(=7jHKMb33.?iaVa%5iG2T>fgP#`sdDehPD/5tqbG-LsXO4\#)b(CSa9)dP3jj3501ct5`:Y]&asI"PuVoYT;=E/i)gG]O^h@T:r=-?n+*q'h(`@%IQRoKLA#dHIkT(45C_I)d$e@OM\3bFY/l4"XQm7t2e3[_uiGlVgZ(W%jokiFEWVOmj4DW;X&?r;.Y'TCW+i=WS87cYB"O?NlL1B1"H::.uK(a#koCKU,*4"ObP$Ke+`__@eb=(kq@[WG;a-6PU>kW7lEffgIPQ)`kH\o>q,uBYPR(42E^G5;c&sN\14@;cEL'.3D9t]mAOf(PeL2.r"Ql^h&(O-)LHep)V.*S+1_6iZ?07oirI@_l5RV&-+ja=?PW#(r3=.>teX++#p9q^&4uI9r]XA1MK"@<)n%*R'dm3D3l1_pIAl\5Y?+!C%bd8gJQliAlCfK#,[cK,95\s??$U9B!n;#2NI:F!+MoB]o$Q'c-S`'*)j7]:b75[3g$@qR3amtlmS)p'7*'aFF`U+PUV*>4Y!Gt6*'T?8g[AirQi_mQ?28d*PmL'%(VhS.Mn/nFJb!5d6*$eI6rfJ4Kt,5Y@dLMUOON)a^Y:MJ>j;*67g)FJ=\"!#_k9>[Gn/T'iQu^Ac-t@`\+G0Xm$T*'U$@HLq\hPJr;e>e^nBCW^jp'O&/BI$K!"TJT$Gbs'=pem>,l96>TS;LSDCcA@4]A@`N6h_^8*po*VfOrUTZ[1I,i"#*MQM_7MXmBAc9rP*6urp!r:/eLb&MJ0d;NgjK1'&=I^n6Pc6fLSYu)q5PI.mQ)mMh<b2bQeMN`_s%Y-'SbDfL7'iB9QBdbpn,]2=5nkmh&3lA!Tr[A!?9k]HG0cZ\KAi=a"iA&_<J,@12O!3SF1DZJ>68<_0J0`hWET#2KZ94>i[HEIQG^YNWr=YhXt-?WCWakH^=irAPP<Jh6k@.d#LkF\ScSaEC?-J3^[u+R7LgOJYgHVDI/4CbteX?`eBjr)1=+m"j)8=R@h\b<4:'jO$r0g!iN*WSuS`RfIAY0'p9Ek05c@39G69;8@e5HL"qGdm$27`nr8MMhrEVg-]1VMh&rs%H$=[g<+K"S[)$neP`J#`B1lu^6/D??X_b(TW=^Cgip%.?(/$X^<`\^h=MSpcZ@G`i!fjXQ"ahf-BKJhnblSfH7uoL1I+XlXWKW*g>V@2-l^G!>BZg#=Tih?"N[tfR(dr-^\-/S&fW`\HZsA,Rp\F2n*%a=)/Iq"e/3O3]m7jhT7I.c2Xkb]+$8_PXreG^nohdFls7?NJ1aDg!JpO'[9+_q7O>9:-6+sRhDTR""YqNb_n+s#rmnrr_g4\pf?2[nY^0dlUrB90TO@3C2-AZK:L0r5EhB!g->=le/d;L<%8irFgLa7,5HHJhc/N7c^Ukg#G`k3,Z`tVrS39&sfBpdD:do*;X.2HZ8S6'EEVm&1"&LjWq3KgkmpS3u^MuYR5Cqt>,R_X.WkV-.4hW*Aod4.Q.a7:.$_sL^ck@d\OU*e`5BN6imGdH7%S$a_]`eU]J<9m5dc>uP1]2!RtRg.L$H+JpJ:#eYfNp&X^7DFbD-iO$hnjtpl\*JQi5-W!-qjA"rkc!ftmQ<+'F3bMF=!igQ@dK*]L07Q=b4k[sS'!83DJu(!(?H61*3DEr[pqsA&"Zj?qr%GX-gmB!m"g5,Gq`)+WN*aU-@bVgPdDec`M2d1.gWD:/@iN]2rU>m9=J_R)KQB!=<p,PDNW/P^WM#V!2K#,0=nkVVs)B8MV^D^BKNPY7N0;S]m6X)Rth?!GG\1f*<Y2PrQf=AB%7u7Dt:.7UHrb`?Gm%nB2+2Q2%9+;oJ(c<r!b$'!MjHG?2~>endstream
|
||||||
|
endobj
|
||||||
|
110 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 4025
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gau0F>B?9)(4Q"]3024`NG'pW`4K#b-[+X8A3@:U2%Qj1[@nm$!Lbhf>Pma\1j<KK`L2r@Z%9W\lh?rf!\422m!gA_\6QlJRK1`C[0C(g#-:#*e`u5M#q9%1/4J*G#trac5AUG6ARFP[fURWIa=tC`D+,]'!mWV3"G?AC-]5T6Q^.Z-^Pbk>Y+q2Lc&,5QKe9WRBeNM`K<FAfC%`\"m]]2X%q*T[ZPE)b7aM,VH1D/?J&CP!3TqR[;\)RC;R(2YY8I;SQTVgUad*8&67?J.3g6FVb!KCHAg\BY'1kGV]"tqWD$f>YDo]fD)0KGg(b2O^/%!rtL_)RF2So=FaJUPT"LEBpSk?OnX-l9DCc5@=YF1;l]DOgnIfJg#o6ImZC6I8)-!qj_-7o/!iSXT]Z$Q3,rUK9u/P_Q&QRMA*G0=mkYSN0,gWf@N[Rh+NDs-^KRnLi5'Sh`'SEWsX4XWpVe;'YtWuHk6Y2_UDX_#RUaJ#kD\1RnHoF`cac,E>8QWp=a'J!tlq,uZce$5'Cn_`4OMPVm6PJH/GgCGZh#u=\`;'F"*OUl[2U'`LCIJ$Eb<nm)nl8?$6DN>C0nH#9Q%g6BSVKOt+ohb>11cnd(r*2BaT68&m74^Z)&&m]r%eO1sb/,o6'VVKTb9^:`[<+@S8_)`qDn=F;;,M5!l85a!Wr")u\4C;#]WHS*b'al:#ep3.(XUM4lFM>]j3iU(T$&hG4n9<EZ[d?c#bEAL\:OMp2TN&?KcApaJU:*q!li8D:lP)k\eMTrqqZZeHPF]%H\e*BGn,b=GoRaFG.!a`d[7T7j<\#D7R73l`!eh?Z_LA`7-"%KVZjFm$8-B_#NL^MM4e9NS]'R:$hDg`'?\kbj!G42iJrW[#N<5'BXHZCR8cp!.n>#b<e4j3[XMIM$[Ya"n+8/*/+k-ZRgL?-JJH1]fYPP>^W_?X[hE\nBR!g@-)p(pNZ5Nc</N>GA[^<=1#1Si]`TpDHkrq?M,E_W6-iAER"u*18&ZutRDrRSi`q>=&7<R%<s\n#K]g:A"],n]6j5%E*$.-XR:(s?IFQa+?5cFOUClo-Pu5N>)86ARBpu&q=)$qe`8bAQ=T"8F]cPtLLU*B^TJhjHY(SeCo\iD-MJ?k:WIppXfEDt24kloSO1B'l(_g0a@=AnIWlE;VOk'VoN5^UcTJc>X8#a;_gbsT=4#DcR.Ak6udg*U5VU>h3iUf!Uls#dKEMKo_%/qKfkqCJIi^BS;P4hH545f@_i95PmQH$/?6[qF8FDs_"(fjFh(QS\-dP9LgRkG=#N;BI1HLY'%04^c_5:rXImD\*NaRoGb._'TX@j%tj:K:Md2hThF!/8\=G<`^]6egE=+7J*G:tKf+U$Z\_7Ui?i30o]\_2O_N!`Fqi>A4JOXhRXcJ.HF3qOTqBE-$a628C5B6<JT(<7".-FmaN;1rM*(J8Y-=J,s^>=gdRMP)WoL)9c1lfSpcLceXtnpj<c3/dU1N_UabL'%81-K;lrMK:m!:N&m\(fEU52-MEU<D_Vf2(5O.-K%*;,a`na$HNcTS<9QgYd?+8L8kWreJ5AV;DlG*0(1>5tA"a#.!FhZ'=<P5q4;Ej;Jt3LG9!lX4>T8YY\:J8R2S)GR:19^9Qn-'SP[dZG!LMhu-1n#!200D?<?(];!G1?`]nAWqYb5]5MP]KMW4RVkW#A>uK:2jk1?#?._.@l7EEIm7G)jVnH>Z)KFF>9%8j.AIrkeCQg/<kH&>X</Tl-hV:V]Go\jqLrMe,F3AC!j((>j#BYQmR_:e\?W`mP'q(br-Y0LcJWX3CV_,C2QobM!O#'faOF"p\Hc?86=Vk\Q7U]b$AE]c<aS<S^4-O!na:+8MY:GAr4j$,iUB7W(W_`B%:=9-(8d]rU.ip!llr81GI![PA0+)Y%#Q?O6q9KrUc3jfu+k6DL`GAqdV03a/&JLmZp)L:#(uRZ&[m%9ANrPT$)lp`M(TDs-^s$?'e3<p)=1juY=oW7\?87B%utngBCd(m,5cgMY7EAoWD8q+l=,*U@+f;tmF(n(h"l(X=X]l?n$@cZs4WX$%Hdpito%+Uc+?TnSa7lJC3u&",:_Ua??Fc6:i\hgG0L4j,%2V"=gphg)ISD%P0-9d=uF\K'YI/U?X!nm#:\EUAWl<m$:XYkCI^;p).))8aH%k'8rn[t\kH$e'dJk:`k01P>gPP-$e%cb)-":mJRSi#E?!3E7CNQs"pumZ^;"Lg5W2O.6OnLpb%4/9I;9F!r@E:V'Hd8E]K!@Rtos=UCkkRX:T520+o;enZ5RR@O(?(i!C2LYpO12M+G!I71Zc_K0B3!5p90`&D@.SS%DQ1/7&(jWJV$h4"sfY0dum:h:K&$?#.i<B$%pTgZBq@4,F*=einOD\&U<mR<CS&/#`GoNgfX!kSYpP)lC5>MZNQ^bl@[^p*V@+0/1`Mo<`Xl4[kB8EqL'XYj>U9ShjM+7SO&,dNmcQCBqX"*I78<9/<p\VRsB<J.8`#JZ$5/o=*4=b`21KGTCL(MfF>BXe;f8&g(/,J"1?ZM5KH-SuZ1nA5?)6,*0d'E1J8n6CY"UAb%[;p"S!V80&SA9DqPa*.='O[>gdiDt%S65JjQESn!.Mf`o3?!fNB"Wd%kO4L^-eR0kndhTCciidWn$G==3jH][0VF6C*UdIgi\JSpN1:9g<*Q0'FR$.E*OmV8g^e=86j-n50lK!^SV8\h7hl]2=&WD7kdg,kOg!o?`OkErElq1hXT(.u2q.j(WpknYu9;A0Nk^0!bL)fn'W/g':4G1!2r&YE#(fCu?;%hlqY#IMT()^a]#,;I-EK@239BX6\P6MXpB&W+&:\"ZYS)`*m,R%/F$LY*ucPW#\_+L-;$<9F-ihV8jq0J#e)oJWORGFO_Eo`b<cUrYSrcl?aQ"U$#i$RQ@&;':OR)N'serb17S,ntTp1!pe4"q97*ghl-,Jp[GMM"E0b8<E5:m@EEF_83Y,\O-O&kb^@e^IADFbBL"LU]>p>)%g:C!I=rWS5u"',SC[Jo4..M2WI3#/]^rq6[)i$1=RCX*YGY>fSDSJ:i:C3Ha(=[mR7JR%pjN<:b0UC%f7Wa>.Ft\Yg6)T$+trX5o;NRBer(Z@2Aj8CISM`4-CAN?5_DNGh>c[pTDqf^iI*>nGOARPajX0CW_b_obGmgdd^6R@c<NGrY3g#S\QJ5et_klG_hi;<'bkM^odlB^PDh@Hj(OEe8BF[XP_;btCfU%VU2qOBmb=2jj0:,^juV;a;"ToG@TL5pM[I%;`G4K63.tZb58G(fe.4!O6r]AP>iBmuUet,?]o'_abfh7H7&\ms)Wr_$o(>W25-IbG@r0*;kgWJgEj:q_9UPY]/b3*m4%<lm+H;oVMGBr.H5/^%Qi4:!X)cjZ/!QSS^%"V'G%aYZYN^o5e$*R+J3]s5k<;n1MIXGgIn>bXgClrh5=d/0N@&XdKtgno2hUoSb%[5X@p"I?Ak3Zb=)AbPOSbl;APK*G.8[`ZK31H$r[HLc@sJ+7f72<&;D:UF!D=eo23JneB&57mn#W#='[f=(]"#M9iKg=)j5r.NQIlHL3_aZjS@EN4tAJ/mDRX5)pl%<Pp'"[kWu_q9;_1=E@s"k/=&]I-ii^[B!)Hl`AX>%nW*>L:sYp[b4i8WP=Vk(7R?WHkA@_p?t"p_[S(`Z]?nPU=rV"WQ`XQAgd%]ThDrO8[H$-K<3AJZh^tJGEK6u;Q&8T9nr'[N?F.*Dj0/G8n11YMoWI`A2p;I3dL'rrZV]/B1LZd)#O:jSej?<((Wi.jIoF_$V%@pl*F\(r]e?cR-??_TYbjnHbt/0*/a>F,irUPhNBdb>gdd-*$cOdk/,dq+;#JO<KcMWWgu?L8mo_pbFH5l1uW)!"jHZ1_KCM4SSbq+p>)D1:HtBd]09TZ?AqhC.l-AN($=_9qg>_7c+%51$M*QGqeE9G/+f:aiRJdIs([KNPc44Trm:!'Ts[diejrd-4Jhd!K44jm/l7i<Onmu*GO<a[E=t>L*o.C?WEG*j'+6Wq0aY+jM\%\'mrJm;/K)IJrrJ*jJ3*~>endstream
|
||||||
|
endobj
|
||||||
|
111 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1141
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
GatU2>B?8n'Roe[30.s$,"ht?9V9b_agTZ?>0"6NR:0WfD-B2(_JZ]pILk'X`9SAq_(drtkJFdn4(^bJ@a0+e"2(8Ck`u800V&;eM$qeY0V/c'%bOf\"GAh["5e+gT?p$5#-BPb(_ino4E.uqE5i&d0aEYhq:boV"n_s6p?u31Nup-'iR\BCi>6X_q8K6:<+qILWbcJ12^RG_.>S)_[Kp.HeeT#Qnn/29D*PD(MX?3u7]BcX@ZcX]Q50jk-Z<Dh*N!c@(uOh/Nl)l4";S*Hp\-ffSLFrP80H2Y[Sd;bq4q*Bd;W2$p=cl5^*a:4UIoCn>FU<tdXNmoYCG@)1cF&;ZVG!6[`m/,*f!A-9.8:C\:;;`8hbUZAMX6>e%_S5HDVb@SB.9,IG\Lt2l@7">qM#@;3g:Dm];;/=]B"=RVS*o<.k1thlgj"-u0u-Pt>Hn[aI.VO2G)_AYsKJ<#31dNUTiJm)e&QGk[/G2n?Z9rc0$]D5>RoZ-gG0Ek+q^<2OG:?'KI2Y[_CQ'PI6eaLNiIW3siMZ:]6?=DEpDc9f1+&^Hst/Bk)bpPl@N]Mu<p9o+p+o?m8RdF%XJk0K+;n]g^0anW0-pC7+)cJ$0@kX6FUd@]psqg\h)G<H0-pW;6AGjqc-643OC^b^5N#;%OYcWd)sl-&7sI>f)"oo\>t!(o<Q\\/*<Zia.i!;P4J8CSX[V%(4c\>a->C9=^gKl;=WG<I,OO1MjG)"E%:f0)*p^]P31a)M]K*WGYAlPQ[La.(%&]&eo6LL$BXa?0M_93EfFVADbCA@H`9)a).a1uODW!-+Hu#K6@]kdGi_FjI6jekn_A:Sh3Br5@lAS-u3[GGfVYejkp7SflO\i@E]4OHhkUZ=ujsMr!dhGLMsCc^4Ygi3_sPT$[)jl0l%:9ik;!EH/]`Vhp3NnG_p"HipW+f#grAJN7Tc8<Aubp]E]R?p`b%bd(O8@A;c2,%4ZrFSnKPmiYJ=VP!,o"h5leGiZ$rf1+u.2)D<0-VOsQs,5q,=EK?$V))YjiP\dc0IM&!i%aLp);>5:F#MjTm963kF/[`U^P5s$$QnI^i<gbskj3PNpb$'jJGoB:X9MDRLtE2QVn!jH*"Q0Pg`mkMJQI&ALgrTbfmZe<)#Oa[grgl~>endstream
|
||||||
|
endobj
|
||||||
|
xref
|
||||||
|
0 112
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000061 00000 n
|
||||||
|
0000000146 00000 n
|
||||||
|
0000000253 00000 n
|
||||||
|
0000000365 00000 n
|
||||||
|
0000000513 00000 n
|
||||||
|
0000000661 00000 n
|
||||||
|
0000000808 00000 n
|
||||||
|
0000000956 00000 n
|
||||||
|
0000001104 00000 n
|
||||||
|
0000001252 00000 n
|
||||||
|
0000001400 00000 n
|
||||||
|
0000001547 00000 n
|
||||||
|
0000001696 00000 n
|
||||||
|
0000001843 00000 n
|
||||||
|
0000001992 00000 n
|
||||||
|
0000002140 00000 n
|
||||||
|
0000002288 00000 n
|
||||||
|
0000002437 00000 n
|
||||||
|
0000002586 00000 n
|
||||||
|
0000002733 00000 n
|
||||||
|
0000002880 00000 n
|
||||||
|
0000003028 00000 n
|
||||||
|
0000003176 00000 n
|
||||||
|
0000003324 00000 n
|
||||||
|
0000003473 00000 n
|
||||||
|
0000003622 00000 n
|
||||||
|
0000003771 00000 n
|
||||||
|
0000003920 00000 n
|
||||||
|
0000004067 00000 n
|
||||||
|
0000004216 00000 n
|
||||||
|
0000004365 00000 n
|
||||||
|
0000004514 00000 n
|
||||||
|
0000004662 00000 n
|
||||||
|
0000004811 00000 n
|
||||||
|
0000004960 00000 n
|
||||||
|
0000005108 00000 n
|
||||||
|
0000005256 00000 n
|
||||||
|
0000005404 00000 n
|
||||||
|
0000005552 00000 n
|
||||||
|
0000005700 00000 n
|
||||||
|
0000005848 00000 n
|
||||||
|
0000005997 00000 n
|
||||||
|
0000006113 00000 n
|
||||||
|
0000006219 00000 n
|
||||||
|
0000006297 00000 n
|
||||||
|
0000006381 00000 n
|
||||||
|
0000006588 00000 n
|
||||||
|
0000007076 00000 n
|
||||||
|
0000007283 00000 n
|
||||||
|
0000007490 00000 n
|
||||||
|
0000007697 00000 n
|
||||||
|
0000007904 00000 n
|
||||||
|
0000008111 00000 n
|
||||||
|
0000008318 00000 n
|
||||||
|
0000008525 00000 n
|
||||||
|
0000008732 00000 n
|
||||||
|
0000008939 00000 n
|
||||||
|
0000009146 00000 n
|
||||||
|
0000009233 00000 n
|
||||||
|
0000009559 00000 n
|
||||||
|
0000009634 00000 n
|
||||||
|
0000009726 00000 n
|
||||||
|
0000009829 00000 n
|
||||||
|
0000009978 00000 n
|
||||||
|
0000010068 00000 n
|
||||||
|
0000010173 00000 n
|
||||||
|
0000010268 00000 n
|
||||||
|
0000010423 00000 n
|
||||||
|
0000010525 00000 n
|
||||||
|
0000010652 00000 n
|
||||||
|
0000010772 00000 n
|
||||||
|
0000010889 00000 n
|
||||||
|
0000011036 00000 n
|
||||||
|
0000011190 00000 n
|
||||||
|
0000011306 00000 n
|
||||||
|
0000011445 00000 n
|
||||||
|
0000011567 00000 n
|
||||||
|
0000011681 00000 n
|
||||||
|
0000011833 00000 n
|
||||||
|
0000011951 00000 n
|
||||||
|
0000012089 00000 n
|
||||||
|
0000012236 00000 n
|
||||||
|
0000012360 00000 n
|
||||||
|
0000012490 00000 n
|
||||||
|
0000012627 00000 n
|
||||||
|
0000012734 00000 n
|
||||||
|
0000012884 00000 n
|
||||||
|
0000012991 00000 n
|
||||||
|
0000013103 00000 n
|
||||||
|
0000013239 00000 n
|
||||||
|
0000013375 00000 n
|
||||||
|
0000013479 00000 n
|
||||||
|
0000013602 00000 n
|
||||||
|
0000013723 00000 n
|
||||||
|
0000013846 00000 n
|
||||||
|
0000013972 00000 n
|
||||||
|
0000014092 00000 n
|
||||||
|
0000014208 00000 n
|
||||||
|
0000014303 00000 n
|
||||||
|
0000014445 00000 n
|
||||||
|
0000015538 00000 n
|
||||||
|
0000016990 00000 n
|
||||||
|
0000020678 00000 n
|
||||||
|
0000024013 00000 n
|
||||||
|
0000027947 00000 n
|
||||||
|
0000030735 00000 n
|
||||||
|
0000032923 00000 n
|
||||||
|
0000036352 00000 n
|
||||||
|
0000038290 00000 n
|
||||||
|
0000040902 00000 n
|
||||||
|
0000045020 00000 n
|
||||||
|
trailer
|
||||||
|
<<
|
||||||
|
/ID
|
||||||
|
[<f6ba50be391dc4d05b8430d9019777f8><f6ba50be391dc4d05b8430d9019777f8>]
|
||||||
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
|
/Info 59 0 R
|
||||||
|
/Root 58 0 R
|
||||||
|
/Size 112
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
46254
|
||||||
|
%%EOF
|
||||||
Reference in New Issue
Block a user