From 1969541581cfedf3cf428fcdc0119cdb5da89e21 Mon Sep 17 00:00:00 2001 From: Andrei Warkentin Date: Thu, 30 Nov 2023 06:58:19 -0600 Subject: [PATCH] Early skeleton based on server-soc spec. This is going to be structured in a very similar way. Signed-off-by: Andrei Warkentin --- Makefile | 10 +- chapter2.adoc | 47 -------- example.bib | 36 ------ header.adoc | 66 ----------- images/riscv-server-platform.png | Bin 0 -> 76858 bytes images/riscv-server-platform.svg | 1 + intro.adoc | 15 --- readme.adoc | 77 ++++++------ server_platform.bib | 32 +++++ ....adoc => server_platform_bibliography.adoc | 0 ....adoc => server_platform_contributors.adoc | 5 +- server_platform_header.adoc | 62 ++++++++++ index.adoc => server_platform_index.adoc | 0 server_platform_intro.adoc | 112 ++++++++++++++++++ server_platform_requirements.adoc | 18 +++ server_platform_tests.adoc | 33 ++++++ server_platform_ts_header.adoc | 62 ++++++++++ server_platform_ts_intro.adoc | 63 ++++++++++ 18 files changed, 428 insertions(+), 211 deletions(-) delete mode 100644 chapter2.adoc delete mode 100644 example.bib delete mode 100644 header.adoc create mode 100644 images/riscv-server-platform.png create mode 100644 images/riscv-server-platform.svg delete mode 100644 intro.adoc create mode 100644 server_platform.bib rename bibliography.adoc => server_platform_bibliography.adoc (100%) rename contributors.adoc => server_platform_contributors.adoc (55%) create mode 100644 server_platform_header.adoc rename index.adoc => server_platform_index.adoc (100%) create mode 100644 server_platform_intro.adoc create mode 100644 server_platform_requirements.adoc create mode 100644 server_platform_tests.adoc create mode 100644 server_platform_ts_header.adoc create mode 100644 server_platform_ts_intro.adoc diff --git a/Makefile b/Makefile index 2e220f1..a054371 100644 --- a/Makefile +++ b/Makefile @@ -18,8 +18,11 @@ REVMARK ?= Draft DOCKER_RUN := docker run --rm -v ${PWD}:/build -w /build \ riscvintl/riscv-docs-base-container-image:latest -HEADER_SOURCE := header.adoc -PDF_RESULT := spec-sample.pdf +HEADER_SOURCE := server_platform_header.adoc +PDF_RESULT := riscv-server-platform.pdf + +TS_HEADER_SOURCE := server_platform_ts_header.adoc +TS_PDF_RESULT := riscv-server-platform-ts.pdf ASCIIDOCTOR_PDF := asciidoctor-pdf OPTIONS := --trace \ @@ -52,14 +55,17 @@ build: build-container: @echo "Starting build inside Docker container..." $(DOCKER_RUN) /bin/sh -c "$(ASCIIDOCTOR_PDF) $(OPTIONS) $(REQUIRES) --out-file=$(PDF_RESULT) $(HEADER_SOURCE)" + $(DOCKER_RUN) /bin/sh -c "$(ASCIIDOCTOR_PDF) $(OPTIONS) $(REQUIRES) --out-file=$(TS_PDF_RESULT) $(TS_HEADER_SOURCE)" @echo "Build completed successfully inside Docker container." build-no-container: @echo "Starting build..." $(ASCIIDOCTOR_PDF) $(OPTIONS) $(REQUIRES) --out-file=$(PDF_RESULT) $(HEADER_SOURCE) + $(ASCIIDOCTOR_PDF) $(OPTIONS) $(REQUIRES) --out-file=$(TS_PDF_RESULT) $(TS_HEADER_SOURCE) @echo "Build completed successfully." clean: @echo "Cleaning up generated files..." rm -f $(PDF_RESULT) + rm -f $(TS_PDF_RESULT) @echo "Cleanup completed." diff --git a/chapter2.adoc b/chapter2.adoc deleted file mode 100644 index 8c11820..0000000 --- a/chapter2.adoc +++ /dev/null @@ -1,47 +0,0 @@ -[[chapter2]] -== The Second Chapter - -. The first item. - -. The second item. -+ -.. The first sub item. - -.. The second sub item. -+ -[CAUTION] -==== -A moment of caution is required for this block of text must be read and apreciated for its importance. -==== - -. Yet another item. - -. Again, an item. - -.. A multi-line item. -+ -This item has multiple lines. -+ -By multiple lines, this is what we mean. -+ -Seriously, multiple. - -=== An example table - -[cols="^1,^1,^1,^1,^3,^3",stripes=even,options="header"] -|=== -4+|Letters _and_ bits {set:cellbgcolor:green} 2+|A much longer area -|L|R|W|X|Quarter 1|Quarter 2 -|{set:cellbgcolor:!} 0|0|0|0 2+|Rows alternate colors -|0|0|0|1|Thing 1|Thing 2 -|1|0|0|0|Thing 3|Thing 4 -|1|1|1|1 2+|Span Thing 1 and 2 -|=== - -=== Sub section - -Diam donec adipiscing tristique risus indexterm:[risus]. Nisl rhoncus mattis rhoncus urna. Egestas egestas fringilla phasellus faucibus scelerisque eleifend donec pretium vulputate. Porta non pulvinar neque laoreet suspendisse interdum consectetur libero id. Massa vitae tortor condimentum lacinia quis vel. Donec ac odio tempor orci. Mi sit amet mauris commodo quis imperdiet massa tincidunt. Quis enim lobortis scelerisque fermentum dui. Lacus viverra vitae congue eu. Sed faucibus turpis in eu mi bibendum neque. Sit amet porttitor eget dolor. Aliquet eget sit amet tellus cras adipiscing enim. Id cursus metus aliquam eleifend mi. Vestibulum lorem sed risus ultricies tristique nulla aliquet. - -=== Yet another subsection - -Quam lacus suspendisse faucibus interdum posuere lorem ipsum. Nulla aliquet enim tortor at auctor urna nunc id cursus. Massa massa ultricies mi quis hendrerit dolor magna. Integer enim neque volutpat ac tincidunt. Dolor magna eget est lorem ipsum dolor. Urna neque viverra justo nec. Neque gravida in fermentum et. Fringilla ut morbi tincidunt augue interdum velit euismod. Dolor sit amet consectetur adipiscing elit. Eu facilisis sed odio morbi. In cursus turpis massa tincidunt dui. Orci indexterm:[orci] phasellus egestas tellus rutrum tellus. Semper eget duis at tellus at urna condimentum. Orci porta non pulvinar neque laoreet suspendisse interdum consectetur. diff --git a/example.bib b/example.bib deleted file mode 100644 index 9da24b1..0000000 --- a/example.bib +++ /dev/null @@ -1,36 +0,0 @@ -@inproceedings{riscI-isca1981, - title = {{RISC I}: {A} Reduced Instruction Set {VLSI} Computer}, - author = {David A. Patterson and Carlo H. S\'{e}quin}, - booktitle = {ISCA}, - location = {Minneapolis, Minnesota, USA}, - pages = {443-458}, - year = {1981} -} - -@inproceedings{Katevenis:1983, - author = {Manolis G.H. Katevenis and Robert W. Sherburne Jr. and David A. Patterson and Carlo H. S\'{e}quin}, - title = {The {RISC II} micro-architecture}, - booktitle = {Proceedings VLSI 83 Conference}, - year = {1983}, - month = {August} -} - -@inproceedings{Ungar:1984, - author = {David Ungar and Ricki Blau and Peter Foley and Dain Samples and David Patterson}, - title = {Architecture of {SOAR}: {Smalltalk} on a {RISC}}, - booktitle = {ISCA}, - address = {Ann Arbor, MI}, - year = {1984}, - pages = {188-197} -} - -@article{spur-jsscc1989, - author = {David D. Lee and Shing I. Kong and Mark D. Hill and George S. Taylor and David A. Hodges and Randy H. Katz and David A. Patterson}, - title = {A {VLSI} Chip Set for a Multiprocessor Workstation--{Part I}: An {RISC} Microprocessor with Coprocessor Interface and Support for Symbolic Processing}, - journal = {IEEE JSSC}, - year = {1989}, - volume = {24}, - number = {6}, - pages = {1688-1698}, - month = {December} -} \ No newline at end of file diff --git a/header.adoc b/header.adoc deleted file mode 100644 index 5fb1282..0000000 --- a/header.adoc +++ /dev/null @@ -1,66 +0,0 @@ -= RISC-V Example Specification Document (Zexmpl) -Authors: Author 1, Author 2 -:docgroup: RISC-V Task Group -:description: RISC-V Example Specification Document (Zexmpl) -:company: RISC-V.org -:revdate: 1/2023 -:revnumber: 1.0 -:revremark: This document is under development. Expect potential changes. Visit http://riscv.org/spec-state for further details. -:revinfo: -:url-riscv: http://riscv.org -:doctype: book -:preface-title: Preamble -:colophon: -:appendix-caption: Appendix -:imagesdir: docs-resources/images -:title-logo-image: image:risc-v_logo.png[pdfwidth=3.25in,align=center] -// Settings: -:experimental: -:reproducible: -//:WaveDromEditorApp: app/wavedrom-editor.app -:imagesoutdir: docs-resources/images -:bibtex-file: example.bib -:bibtex-order: alphabetical -:bibtex-style: apa -:icons: font -:lang: en -:listing-caption: Listing -:sectnums: -:toc: left -:toclevels: 4 -:source-highlighter: pygments -ifdef::backend-pdf[] -:source-highlighter: coderay -endif::[] -:data-uri: -:hide-uri-scheme: -:stem: latexmath -:footnote: -:xrefstyle: short - -[WARNING] -.This document is in the link:http://riscv.org/spec-state[Development state] -==== -Expect potential changes. This draft specification is likely to evolve before -it is accepted as a standard. Implementations based on this draft -may not conform to the future standard. -==== - -[preface] -== Copyright and license information -This specification is licensed under the Creative Commons -Attribution 4.0 International License (CC-BY 4.0). The full -license text is available at -https://creativecommons.org/licenses/by/4.0/. - -Copyright 2022 by RISC-V International. - -[preface] -include::contributors.adoc[] - -include::intro.adoc[] -include::chapter2.adoc[] - -// The index must precede the bibliography -include::index.adoc[] -include::bibliography.adoc[] \ No newline at end of file diff --git a/images/riscv-server-platform.png b/images/riscv-server-platform.png new file mode 100644 index 0000000000000000000000000000000000000000..aafa47f4f515723475dddf40531fbf02cccdc45c GIT binary patch literal 76858 zcmd?RWmJ~!+AVzBh59I>go25JAf+H6U<1-fr*wnTf`EyI5-J@AozfkOf>J8oA<``+ z{ms+$u6Mm-kFm$tzrG)PJI1pXb>H`Oo#zqrm~)=jV_9j@t()mLQz(?J;$j!&DU`KG zDU{XX8`t9}0SuaH_`kI_=fxE^;@_=}`j7BEo$VzR+pAWFwhlVh1{5PpD+>d58$D|S z14|oYE8DR(g~Aldev0_Ta|({Z!)-SmxAv{9Oeo)HtKRs=o;}8;VdH_d;=>Elb?vO_ zY11r<5hJB)!Y^YZ6e8@e#JoKgapiMjbcSxn&Rqu%ICB?@%va9w3mx6LqvZE34Zk7N z(S^`}*|G)i3 z5w&4MqNZAgc|el^)f5tmhq%a6o@L#+b7yU?gVpp?xg(Yja)98WQU!x=VYyx+WgQt)@_9Hj`_Y z-?4XZe91G0IPF4LwKQXITu;Rb7R7Dbw#CZ6xtn58ZfMWKdqzk|G0j*mwH&wXnH+Dp zhe9dp?jNj+Q_Hna@MTwL77-EIx=%nsWO4i+*2cu))~#E4K0ZFb1_xQia~vn$Rt59F zi&ssJweBhNoyk3N^yqP3UZoQ!PL%l^d8(_cYy0cVj?X0}W##1(m!9krcgSZMvbMMP zefREN8&_9Xmw@YHR&a3e)bDbR^3R`pLWlBhPDVaw6pH=zOaIj|x%2C`>`oixqq@Mw z#pM$o9)9=;Gc&7zfSS**U%$ffsm)8~%axo|58T~Z&z#X19UYC;$hMAM_=lSMkf^9A zKR>^?PgST;++^Rk@}?%$_V#vPi^$&En5zPA%Xu0a8uCj8NEJ~}K@_IS^!6D5O>wt61}3%bwaeWeys4H3e*_a%JGDo}QivlbXn{oK$fJ zRUv{$`S|!ono>n;qGTE*IPwo;-PWyNA8Y*M?O=0y+{fbL8pW}%FOK%~_C{K?WHe1- z>(8Dtt(E<7cU@h)Do^TvQcmMtSw|uet)}EoExPzCT z7~`_+MZ%sj@Wq-prLbz{WnuGK+}zxHzP=C@a+>;{pq^PhO}B<}`{Bdut0}kLxTr3C z`0!z{Hs(ceNXQX!TuROS^pM^3V4Z?ruG4fZ{Ym53d$b(SA;qqmo5y24>M|_U^QY_8 z0|o42+j`u$?TfW4TvB4-vs6HY>FVjxAbOD~ajL0?Po6$4A1~M|U@Nw~yv!>5`u6j^ z{BK(_t&X#@UeUfa@nH7}jcBBX`U7U8Z=tU|Jv~QTv){GlIt<~5PaZw`K32GLLRndP zZec-v^$SGU;NsjQ34vJUq(m&PT7l*F*XIJ$pD~GO;Z@2DGb1#+cSlA?AG;(fYSvkF zhhF$rmecg00d>Eayo!pyX_Mv|#@$;HpqE)F6DI7Qnwol}r;J9TWuPW%tN7)S=JaQO z{x}91*pDqoSfF+MUN#(=#pG znxmBx0=b zE=;#t{QUHoRXrnqJr(V>Oc72_S*gI2KM*zM^CVsxwB6bw+fYsHhU)7QHFM*ele7yH z5m4p0bHe}xz1bJ911434=%$P({`Qca3=DBcBz&XQGc9@dq>|M5@lMokyz^Xcc}`YV zxPZ6boAVD8a%@eO{&aitx*(@x>Zy0_3J(!hZ^JHdiHR*X~1@5|bGsF;K`kkpDVn5BMocfY&*jGhHMQczG}KlTq+*psmfm+U~|C0X|~ z`3ThD(#S%|0B*Gu{m0BQp|?8rWT1rPk9}pos`V_uTb!%==g(0($wr&Ls(qw4Ki$Kj zboT6R#Dl`?v#ZMY9oWO6l{Y4^%-&P=G>tJrY#?*?viCw48ctH-vKp4HraD3*-DSaE z%AfNbmVU4$GfDVQ=bD?2j%U8}qJ7>w5DXBoqLJq)C$jwKoi!47P-COdt{pqxATYH? zS~3fhrbRDbE~~4XF7WfV?I@36vnlkvcWeB^hUTmr@3!qd{krVc@s_D1^~@6&JpEfo zvim|`9KLkvQk#uN*>T~vwl*eXXO=5|ClXecXA6D8`}>U(G_vK#3KkN1%^P3mJI@;S z^8jTB+~Y@M`y;YtH=Ebfr%%zOqOc=T^GVVn0-LvOD@d|Cdi1DSM}Z6Qz(*JMOouV8 zn@&!#XYZ_@O%Fb-7$bk_&6_vAw~Irmk4pDr7hg`vsBoIqvu$M(Znfm}RtxoxgiR#rU~0X2rzQWVO#F~Ruz z2axY|=-VUG_vft8xL=|8)*U|`;Wm2a&v@~6ixchmw5ck=v1oMqSk2sw%J~uxx_5EP zNzG~BLIjl`Zf80x7|%JfK!@==-4w1tf4Kr{mghk?Wd)cz;Wp4FKp(?IVk;UOM_1Yt=m6+_6|Ypn zXDY_4Bs&W~my1{7B2mw-mL`jP##0LaDy0kgGr5UOFOXaR6ETsQ z{Tc5HJZa)1Jok(G^XJbo`d@v>c+s3;Va8KnJ5bF#DMr#{D+8|r7AT=vNJxlg=gzli zPv}yrWHEtJ74n_z$fW}LD0Mqe^}p#0bJOB6tia0Ndx??n6|3TvLzg{d5oBrRP2B8S zc`84C{3r_*$~DMt&~lan8u0_hiA1ZE5IZ2=Q}*hrFIxtmS$&eWHqtxrl$q~kPsRj5 zlk%FHtE*P63KVw9X;b!{pPP$86}1;BeQB|@z|Kn03;e^9mN41gZieM;|slQ__30d;*e=}=)Z2|<-clcfAd;@V4msAjoF-kZ*7Ox1U z%1Zz;mHeKlDTqWHE%5ys#Fqq+_{WPC(~+a~b&?eL$4NuF$Nz<2C@Q6HDSGkk#}B!} z#otdcvQ?bGTuE_c2E@_E00<&LpBB7;VEr1BdwjfQy)Qn4RrlL}imG#05OxJsj z)?LSbhhvJ%pRR}WLQZKYLq=r6r4;cDG$!l$96m8N9{#gx)0y}8@2{Pkn=?U%VDIn; zXI?0wxM3^*atxA>FplEi|MMKfe=ovzRg@U%&@(Y8YM2kr4E^*1KYh9wa{9){VeV=I z74%A<5B!+=As3w{JGvB zG8|obdF%~p@8Dctm|tdQX2J5j86EcVv1e_#_zQ&;eR0fgRm1Y;wC-zT>()XOt>&aXmq7XU?3_)brfSe{lQu?WoG^n%z%njz@Y5&-b4z zb3Pby=BB)smX=fZGd>b!4E71GAcu|*aV?-L#tK-V`q^r&S zHb50I!_-5jbs#t4h2d0DEp_0S>E(qnk>4Z2ad;UG#;#AFKG{C=eDXxz+#;^4#! z4sBt(;YK-(wY(tHimo1xYg$Jss_E^m3_{5bc(R*478F`P@K)*+%?S+^^sHJ2tGqWr z^+O=c8a_RymWt=K!RHSZ-C1M5Kqf(OYeGMtRL|fhP3C_0;M-SfnU)rH4VdcjdP!_# zU5iyAyOq_LXwG(0jxp0Oe971l{t%$vmrYgIo(}bo%0ZfPmO1Fm%@hn3k+@m4b<_@V z02HKqNQItJ1su5biRP!JO>c!aMqDY*8<}q|JOp$*PxvWD9YR`t+lFZPa`EfeucQg% zQX)P+*wSHR4usXy-%m&Y)$|P;HkhG}`h=rq57sGbD_*m zTpDalez$t{>e>j2J?K7lql>$*MoRtw(9@@N-_4;FZ&(=^AvRhz`CSRYw zaKV7qoeUn^_6ZyV&fh0s`yI2(OLUsSWON5swQ<9}dEbo|zgW@p92j41<|qnK+yqL8E|gh;zW$Qtk< z?0V!X!a6Wd+kvktZzx<@&aJcuOpXA?ip71JVqhk1^0;zhqlcj5_-o)==3-7jEGe)C z?Z1V_no^^d7bj)P8-d0v{kbmSCgl;FSfEHW_}1AoEPPh&waVHq2I+<9f3@hR7A2R# zFEqZ_5xDX5KIj^U4woo$Y3leT@?k2Xb#hNY6vQ4eSWwz~5Sc3uZWuTDr zj8JJs08c6Fulde<+im;5A3zN^L;RUGr9_a8OE*)-q%jscL?}eeLGjE|fya&=6SK;n z_I=JIV##v?%R#0YWMqWDKdsBu4^eWL2=yocP+YU5^UScgo#5lgkI6?&q4=oOg2&mY*K&XwG-e1oM2# zplsJE%T^VO=Ctev(RCEZ)&G#l7qAuWxJ9v>UAb@pryfPSl72?GWue zJ382!ow}KZHN2?kEXchWq!yyX7vM=RwSX{U4GqdMH> zaEn3N9PB78tSq2+e?zb=2G|_i0UvB})bE~hGfXR(zujFICq!MA=lV=sw;vt=$5NkR z(K4*X*=wtnivLDy-_7|c6Edwaxh*D>)j@6!eBPs7 zn{}gGAyI>Wq&;8VCtkP^91)mUwSwnQpQbjKVE@Q33ADsc#j2)8q7=Q|qkZd#;m;pf zSd)+UH#Mgkd19Q421x{t@+wAjMKQ5Q;2~dQ$%Z^dmj5DeTxhKB=O>#tZu}1DOPY-B z2I0RWKB|~B-s+W~pC3wM0)~5Iyena!rM`m{G2`D2_!)WNf;&NjckbLF)ucJizm9=IjP7LL^x8^7qU{Im`#u^zb7ZJDkv!An7PU}BxyGQ2cuu=WQuTe%ah=)Q+FmY zM5xOvuUG^5Z6aBf6XQX743L(DtUu{Eel2%s9+yoxm&#Bfbr8H)fq9U7;b?(oxJD&C zFw}%x2fcI&{8R&oF+vXz`V-{#{B(o1g>QBXLIt6Gx~D3nrFy1tWl3gXb}W0F^QbC{v}38A=bW$(`A)6t4n;5KMPa z;zaSo?R;q1@y(b#bWij1(_sqd0iBvK4>rgoD=UlEDsRGF(HSJH9KicKEX?JL7w;=} zpqWrPI5_Bmy;2&%E%QMdc!p4>MR8Sf>H8MO2WI!#%3`0$WqElYsgB8SB34v;Pk%Rb zBOR)n^vv8O%)Pva>HJP;rleiEc#+n}Lq6gP9e9(R9ZXDCslwuy0Rt2l5Wf~;+yt1! z&0vz%!~EqAf?{HE@>@$ncgM$%AE}U_#Vsu@f6#Sn(k0KIzbl8;e}{R(e!+8}pdnrj zVN60jh}XgcN(McqpA>rMp?db>hK7b?Anz)TG^3>Vy>nTZvCm9)U2-bMP~kCQjfgdBE2ED|UCWDtzgEd*U-R3VpQoN>vGbeIlK@{(L1cHfng#yX&;(-K_ZnPJqj9 zP$6yx1%eJOA~SbiF{cM<)q=qgej9TglH_6)SPp@7x=bPr6M6HJ#^?;FY&wWcmu+p+ zq&gn$I7HrG^??Kk+Y;2;;Y2fBgZtrbq5_P>JfOyXU&fwzfC^~Q)Yi}l_6GhW!S0*! za!Yru=^wyV@b@4fhG(GBwS9qP#)a;gyX2q_6nWt5>6^d9+m@mIfneXg+c4c#+#P_v zZA;aoM;l2%lLbj=KCTdb4XCJW)E=;RtDD=(!nUJi|4@1NnJkxkA9|>GT8Gws2Q95J zKD&5y9(=O-A7~-z=%I8#8j|VDfQn>)Gfb@z&T=vGM}n>$yo8ciXXLX}8kp@nvp=VY z+iGq^UH4Otg7*WtE(;l5y}gDN{#?beZCaIsz%6#awUE1@?WY;7eQ93kH2 ze*3H(uOf$HYwu^$QIHSyatb9!y%{Ab+HXnKx zW>vq+Kih@>oJDQ8lJ1TU#d7fA!5Xax0@sQt_=C#Gw&LOo5G8*=cVo98VkBBD5lRQ= z7nhdC%odOh0!~xWgigYO+l{qrqJ!iSttZ>2uldZ*L*js8=tM6I7Dff*?29=G0b|$y zov^~b_Q^DeWY!{NWQ< z(UHXEQ9p-goSmFl-If<~P;UaK(}DkhJ;1A{v}i-G6;E->JMj7Tsx>c9#f_AI0>>N! zq(6kZ;hO=*f1i-k$vQo7dtC*d>%{5LIKDS+NDS#M%w+&@n#jZ^oYwyVVC)65UlectBE(l3?h@$WF_Az*G0!l@VNLk)q_JZ_9YRJph`z$ zlJK2@*xHXO7%1XaP&Y67j6MPcR@sLS=LinL#j)*Ce*XM9ipZ{A!DMos~Is>A|dPVL)ETOb2Ost$n_ohmz? z6pe^*>I-ooOk_D%C^*MBy~WuMH)TKw1Iysrlg8iA<~vQx>+6SG|N7#c=(37(CSc=H z%6{tXoSZB3M%IN>kDfh~njXDh3w81s;JokSBhVKk07zY?>y*_%+Q*jneDUrsXxF+< zCMpI#Y3z|4u!4186+1)<@f5)WeeZlyIvixG{F;dFFg@C)jsdp*G4)ZR%L65fVXpH* zc{I>KCe=pCFg=l`$odmPqaJ z9T22wpia~xGAp4N?x;IqU<5bV0w}1JjsOBsX2Mgi1>T zo-|bW3^cod{s()sybk9kO{VsNI`VB97!%dieOt-i1|^^deQs=S>=|FXSi?M#EHOEm z0vpl`+Q$>d0i~LSjZIQVM%3g!pn>^b(XS-m>VZb%7{A_cQW16o9MSMfta$SZjcgo}24d{DFK+A%c! zZ2MK#w!UXJCE5}xrg4I*>zrH0*I~WV!e{3-R5-N*O38T}nd5A*4tjC~DWYU{A zZw|ck6qd(or$e$X&w5#!Rh{F^cE|yys8C7p{$7twYop(wgqk7GOrA?!xl)Z0$9UTB z4~btzN5`z5q|e#bJ@SB5BL&tR?;t$AhO!SPN&^2m$1ih-@L6ezUukIFV1nK+hYCu= z$msg*22lwyxmLzeL%V}$ELa&PqV29@47wCkpnTw-H>j3ma0ive1G!!U44E9lnJ756 zb(-N~J2dm1>S_g5Mh&o%sM&rQmTj?M_u1>RWf>JPHyk#oO7;ps$pLYuTK-OmF8hnj zjou16@s*WPF9eyGeB^Ro6w!n+`zNAoiOu(UKL;Ce>Vl2nud-JXh>ixVnBC%^8;Xe< zsu*cA^HTVFq~8Iyw%G_lDX_M)>rs3|8K>G0eoyk{DKjN3>v>QyS0?MHQNss-zd-$T zyIAOfvv}g^Nw_(KAY|ru^kN>3*+O&=aU_xgVC%??QN6_+9W>{y*;!ewlhXI5gbRMc z8v_wjx)6gwPDzWp6%v_^8^3 zBS2?@YLZaiXy^_iC_!@+u1la%)FOlb zcJI;FrqS>ulcr?7hsbp{YH=rLXLyJBue!Bg&BJHMf{`N#q`TCUD5rz4faUlK!2&{v zyjeM)V166Z-@m@*z{b>LlmL;3RW(IF(9;93^)iNjy7^&nwz~;Srw^v08VcL=Xzo~~ zlaB33^Qrua5(e@C7(dMCXNQ|!3~K)fy*(foCKE;*4s&Gauj+^d_O&E$4yP)~#LJKa^CMA^F}h6BILeDOSxPGJ|7R zqLTGWS(%xc>uvx|k}d{m)v~5Wf{{?_JX-3M*C%w)YG_lM65iDkc*2&g%9sjP3# z3JSg)=GIZwS-g!cu&=`GfDTddkhml6To77`x2LC&={_tRq}mY+hv$P@S7ycxgq|W; zKO&D|>T>v&YeE#@Od*)Zh#(K>*)zHhS5N9Z7|&#|9s-*O<5xPf;fg8cDhat%v(G-jOnosku}b%DUQ{D8K*dn z?398(KetGQ32PEJ9|{(`3)n6KMhw<3gK}yN3EGcNirSm(6n72)zQmI$33b_c@y~?P zx0XyWh-iG($CL8j5^8m6`Zv~eusY&tj>A~!XrT(mRZWqlsTU9+P3-PugF6F-QfVzW zH}+Vh99qg`V9i4va6g3q!%HkrC4B_FLkP-~Of_O%5OZ;h1l0YWooxX2G`I5(g5rw4 z#|ms*QmE|Qxpv#~JEnm6wFw3fq+x{+QwL!I=VwOZ zV1`j`#*W65NC5Jy2HJ=(!ECPtNG^x{CkjLy=QxHbqDO#ZctKSMi=;FDQ-5((MhSMM z>ipos!b0N8A)K1%^S#M~x!1ey5(?8#%SjxJlJ5-R$U*L*w0omynl^cYa3H!dDx5Nw zr6%|f4Q1Sx)U=1M!MYIJBgWn+Y$WMku`0=LH}7VPMgqj(T?jBf!?R)q?0_-g1)=}Z zMp>~~VAN{}UV`6f2m^Q~{TOx+YWC1bW``0A1u^y`nPOJ~4QAh=FU-F4R@g%~{aFIhfF&O#s7PD;Y?4jcWiV)&m08xo| z0op$?OFiqn6pU8G ziSNL!!jyp*rY@9yCY~TPLE<C$ZKwgVLC?dyU zzM$dI(!huKf-mf`ba!JCp(CRx(bQq~Q^qI_GUda)4I<;b+_BiJE7HMU*|<>_>eR2Xu_OZiFj#(* zt;A?=+LDn#Rs7!Rk|nW?q#0Jy12*GQqf)JOAKX7*INS;w_cUy58X-vK#=rDRRcUNa}n)9qB zkz-MLiE4+M4}$TILMb1tgYG*0$ZT2g3~+WP02^gzXA=W=%zAnj0@jE~1%AqDG`mj$ zG#A#a%CHrY{;R9&00&2sLW3Q8zeVHw5Ax0+yWy{LG40D__Yb>>FG@)q*(zK`K^D+ z0^+;^=E+}KUclu1!$sz$BlI~!nu3}o%sVLnaFmq)a*4?XWkBq##0rNxIJ*}$NR|94 zpJl5Tniz&|ML-z^jv^uy5+DFhJyyH0fC&9{VJLhckfgAD#2`wN5;IUsUf>iu3n`%B z>PHHC4x)i<*tS;|Bo=#8(qiV)!t8PIrmSjd{X(-`pF7-E62Nl|qC}Lz??QjdG#t3S zjFXChI8=581leJ6fVXBiw*yP>!oX+{;MU+an+zT5IOsqb0A%8QAi9HLex_ANJ=z8k zQ?^2%dUgxOyq6r>1qvdbsL>?T1RO?#d!&R{dWVPOQ7DOXkMREWiJEbs1Zdb)WPzNd zCKZd1N(aBc4{J>iQ9sT9lJ%%iG5~_f453Rc_+&uIM65)(0I{h%ArJ|n5L5uTt=`_~ zE#z#EdZCV{m1p$jde_Hw5P7A++>+3O;pgg7b_-x51kS+TZ%4-CRlzUe+RO*@WQ*?Y z4=!4BD44?C(AKqv1v|n!dAYOcl=1idOCSY6@|eZy zjcz+i={)z3bf7yp@joB1gfWw-_T6pvz&f zi$$%SA5Q)D5CcM5EfVV+XObAqhi9#f?`{ z9P7bZ7U`j%^Bek&U&O(c@5@UI)0oZsLBCkr+A0t!A*6zf$Kb2aC0Kps0U9u2mVdhC zb(r|sA)?A*oPtO~jg*eau0T6|iI5hR-3K!xAJOtF8iSS?XZTN_jz;;k@3{Q?J=C-r zZ!2m~J_m={h0vjJ^rh`F^qBhC{%<|J@v3fk^|)1>)LdxWef@VY7D%;esE`zlYY z`ocLHd^Yln&w~L8d_?Faz?^z?|8zKqQzcf7ukC)av*-}%LBNP@#BOnxSwdR6ce^5m zk=AGj#q%P_l)uL+*1$K*jok~lle!V_bejtKQ$cV6;8fAz0# za1a11m+%q#Z2FbPe%tvBZ+2o@Kii~1M?b&EY$*6-)*#}5%p2|^&p8sKQBFw zp1z^ZlrBs+^iIh%LTS?U!Q3_`;dsbL{+jC<@8ot==#CZE47z!(xVARTX4MaNcTZlt zPra=~&(<&rZN(Mm2U5$6sQXP$o17U*M^90L(gCqHn{h#nDQa47=tZ(H-WVThlwA+g zKMU|D`kdRanT!9BbD-He#s{T?RgV!?ZP_-W)!mc#{u~ZD8Jey(q0a&sL*OxLdMP<5 zc9z-t#tk{rbt5I|{)W7B{Kv--YW+3IX5L;X`k!Iq8ysBGmVns*ccfJP?;^gK6R~=R z^WQ;CcGSIe&|;tGJ?ITzzJ3*lfb4c`$n){zA3zA{u!DmvGsY++xqr$-5Y#R?CI!$J zhY@%CNF&nAk(ROUzCR4IvM_+fsCQ1HmLFVNE&eZxbT+YZ{Yd}D;;D&ly@)#(WuV$nZy_i8q*Z8 z0UohW5S|>=@CoD`mFx?VHeYmP?eU3-~v)u@Dp6_SV%uxUzcNKGu0vMkoM~(z& z?nK>l`T8Y<8q%FIq<6(2jBDV*>!RfjDJH1Z_0E>Ta5Df6?dGwrPq^YYgCDAi0h<63+|f z*;t&{Xj@M6?Z~hQA_fxBsAX+!OQGpOCd43ww;|?T^u0;Jg$utGI^66As*kwLG#L@3 zNIEVCS7M}qZZQw{S{#7ZAW-d>S_>kAbbE?qv}E3#G=#g@6oVK&)Kxgj-buF26ho=z zCl&X%YHwAD`ZuB3VEeIl5ErIIEqU_%d4`%{xi33>v_X~J1P{XhTl?n124Gwjc4`d4 zI3*ARL5*;M?XC+JTWLAZ5`wKQC!K(=-c4PI3}WMe8-*vY5DZrx>^$6gx17jnFYp*O zSkRd5B8##Zb8bbqAo{+T(*@Y*0__q#KHgOnkS2=By*@`7N4HCTJJ7 zTXsMbsLQ))1IxJ@lgpGhxzd;x*G8;xIEc0=e#`l(0Rg~Yp;BV{2W9f&Fc}2^XVL{n zLBo;7z^$8Qu3!ye1a1|&@UY@f$Wo1rNFC-CTq?m;m^V*C_^k}!5hcfT0DzgAXF?5R zrbDP%E=%8V2|qH z)3s=cX#|O>M!9OcE58Ej%Zm7}XHq+Z84uVF^?1%cA@^XG4|jOl2C*{`1VYt$1poXFBZZnk*>$NZKECXJAXz^`=h9SbFT>frv``jh>IJqvYYDvA*nu= zf2Oi9s>2i46@yv4EO0ukP-g?UI}jj*O{{FhfujMGH3dLQ=x(|-g*bx(O5x1J9htJR z;l#v5X64^g&XL8N2Ev%KU<2u}k^C>p3Pz+doLC}V1afwo+lp(sKS&;8mqIZm>JPU2 zxVE-7Xl6x`mBmzq5;=Z{TCFlqxc735xD&+QWWaFq_b)lP8+Ostn_iW{)Jx9X5IUQ% z8nCO|4%V^&W|!fuF>wFDCzJC65Q55331DeZ1Y$zyVtB=@cN0Hn#W0Eq&JV{tCW^ug z(2C3%hr}e1?Y20pq?vX7L$z=HAqHZS$Ef|v%gbxfA6#CLZ7SF`xQar^X;I_^E9f62 z(p3}&jNn}5S#TZ@wgqbm?@}s>XFzrJgyRPfo?o+`O13@kCbsk~GF=r?rqUg84BNPE zJ9w#x+Y;NL2%ev2&z>mKVL`X~)F$hR&dtxqLM8Myp#GPU4Rj4TSxQD>TwOXCzTAae zphq%1fKDJbd^D4E`w_KVJ?Ka3grGsgQ4T$G^CWat%sW2}TTw*nUY}cof#55&Btn?u zs^&gDJP&|qBjmA(O9GBwkob-H{rN31SEI&+g#9E2DxZ_L{#?g(gO`+`=eG{WO)A1_8)p#=V1X$}0dBcp7*FwQv$B^gIY`X9 zEF7PR!yrfkkC1hH`K@t!Ppx`IZ>*}@`pU}6ox;)4D-nv#kK~(&Equ#(2l21t*84W4kCT`;Ui*$LqIm?>^rr_!C4X|$C#uVX zH*XF&1f%G6F_}5Px?g5}{oh^yU*Cg=53dFD*UBv@Ch0UNocdq> zA&WHF&F$^&eciz!Y1$tg1ML|{PAk=G*Y<}@pUE*ME0vu+%knwokY8R`Dy z$!3qe{5#QtD7U%vN?t1`Y5DWpFlSm^y0nhhs+|fKnpinHGV%;(G-CP~_U(IyPHtl{ zb7#$l`ajV>KrsA(Ei5`F=A4YocIeKRoSbs@J0MVTMD)7F3?ztdf&fHXhKJYerlb2x z;e32i{;%`L94AmTnmRhd!0SCdE^&Bg@91b1va}I=f~uAlqlA={0icCZY-}tW3(I4! z5*2%UUI{U=Ymh|rp$o7bIB@64;luA!Qn-CzyeP(~(}>m<@bu}H%oBWke)xM;Rl3RX z@oVI`4NS9w((%J2o=IxX;G%CQ*(NT8) z^G^}Zw|;<<`8g#uwFw1O6>M-LxGJ2^bSVMYQB_dbRbEwPh>fiH{P{t4Zf?VzQ>cL5 z6X;KGOQzw{Fh>Q=Gr(-E13PB)jUenH7llnoC`5e*?K%aGIu&bPry3O)EbJ0!VrDk! z3+qcVc8NzqLc$*9!Z#q`E4c)Cd@Iqd%fW!q>Um&%OhtF-?d&XCo(x+dryT5OM>Q=) zVq#+AQOwK{sAS!Ge*Jn6*F}A#6hj7(zzLwyA_}=>UZft`5yVaj*0>Rfs}W`*TFUO- zyGyW|S+nwriZl#dx@&Q)Ob?;R#=+q!$jo+hWr%p}T z`o4Pg8Q1*b3D`F%2uEWJDv{&?j~{Pxp8I{oPw>XiwKd@c2Gu4=QBjer zWI4&A@7J$SaEF(fwFo(m-^LAb9y)XgM^H_Dy}XJb095Sj#$8B?iax}7dFzn^@M4Bm zR^K!3M|k+qj#Um~g=bkl{F?Yd`Vx5*b5i^~_;GtN8fwE^3?~l*Pvpk&!7N zg_A+3aTypGWS~0|%L>^L`;}!Evcn`vBV%H|LR#n((3Zh*c3!kI0UK6U)?vi8d;`R_ z+vrJ~eYfuuc*(Aj<&`-MKopOh^GMFLkb`*GKA)C$a{X-~I0x(J0k7`DnG={9pR?7{ z#N?~%%94YxxAzCj_Pnnos6C!NQ#CPR(HkBa6G0|5H8-aKVraQGJuK6!z1Dib{%#pW)G~!ZMXo-lMZmwhLl)&EbWu`0(M* z=h9OAJ%$x-8XB4pMp;00TwAwp&Cn@cPc9}UC8ZIbFl}<wBIkmliY-wc(WY6vp7B>A%YQxGJ|0V?>pJFQw_KB@bMX0wdd`KS1-85 zKh&6fXl$>ot*r{eFb$*ZYlh;?e6mzY6Hd8;o zsNoVPcofSMUa+Af?`AP&{KQ)iuH7^=pKEJtQ7kjA1>L?)>Fw()eYIuF7F7%gO?ZmO z+9s?m`ShhIItGUF+Pb=Rg@+zr{Mg#s+6dg3WdH$Q|J=EA^0QbRiFUV7)0aZ1k$PVq ze*OMkcKm^u=HOuPY3CU>m?eIuKU{9-?;08^hpT^WOD{?drp))S=(k(LVm1RC^A#a2 zY+fVa&CT+|J2ycvUM=tqf_18{?&sk0~D&Ekx{Ao3}mfT@b;V~w9eCmG~}{ejN3D< zn0R=2;!=fA*-6vV(ry%9vx|m?3z2CL19bau9Ggf+$=Wg_r2A!57T%zD6gveb?ZSE7(H>1`;Q-&;M~{eLC1sV zXKaaC2*y%&W{W^mhmB1aaox(JUsq94@j5BV6T@e%Y6rSwbaeD}k+QNfP9C0Oq-ioB zHqK<68|2@;XOE4@x^?TaT$coZQr)q?i?f9*Jw0%EKENj4f&mJCQx1q>8&KlnHFI|( zH|^?^dC|_!p=3LjD<~@J7#S%i8PTIy+`#!19DqH4ec>%o2Q;cI^~qRFfKlhZ>8Poz z9}*CtcXD#NYX_9_Gr!MuVT6yfB)s6Es0Zz;ef#!}=7D@(jk@T`ZM4Gj-8I~_bE0DdI*+8Nn&jDdih((m(- z`0vxw%xwjQxVd-Ej<&rJC=QK{Wd(cl9Q0HB$RyUp9|uZnmxzPWG^q0P=XJ>G)_2Tq zJ;TEqNxTA-;g-zp^z`)U%P)O>ue9-=Iz@y2e-|g5u7%|03R<;3#`^`Ixw#XA^bX2d zW#v6Mzj)eVbZ@4VzW(9)*)i=TCkY-{wBQ8v&6Jdq+M1D(F>RVE;<`wS%HY>*2utbx zgoK3GmBJV`)~DYPv>Ut+F`$2NaC80AlFd)dulsjDMTQ;!f?0xoaB#3yuNQ}H_JLVm z3!JZ&c))_l$Ujls#x#SLw7JwpTQV%NwW;)|;ER@3Qi3a&kMtH}Q`7n^3yfG0cNr*F zVZ}LaE5cX-N?u5;LUYiY1J%{lUf$kv-5&qoQ~Dc{n2?ZLjEsydv(rTGnpXF^?tXkx zR$e}KVs!`Vgj(tK=*al^3I?XTT<(jDw*X$~F+LYVNPPy;#6MF?MTHh-`Lzo;oOu#$ z{~4yqE%lE->q-XkZY7(G^G!FV`sMCFe5eNmsDeg~@tCDwKW6)d3m0O_k*Y&>%YYrN zCzSzd?oO+zsbx9Op0HB2C_HX5H9ei(p#y-&c*e0vDid(7%=w#Uq3b@3zuwLJWdU-a za%EXdN>Y&%0PSvj>o8Q^gQf7z+qbKMp#1r)7*RT3hlk&XO%E5k`k?nlz@Sze2ZA#W z+#U|0#$Wd|H`OiNT$(?{#?GFM7JmyI3kb4&XNS=aJc^+R3RiY=`4tHXhBj%0#lsgb zs6hoCv0K7q%msVq8OL#ol9Cdo-SxK8)vGT88|vy_HM=Ux%is0&-Tm^_t93*8pP{)JCCGR>Rh%}OdNBnN-v+I8VxmPJIx54GnDrlqID$A1s!D!RZP9OK~VlZxWUz(8UT zZl4X~88*6b3r)vno=i_~8sZr-*3j6C3weMj>xQ;>cUtO)As;8_?K^i?QFMZqFy`Im zb%yjGu^jT~v#yrtWh@lP7&*P5C6sC}vBUp7{Y;h!4Wnj6qlmLMq1tEEUgypT>Gt{^FBcGy=GytRZ2?g(Zz#jTo+XaHw?Ld`Sxvt z>?G6v@r>D7RNiL-(pPspzIb=rHWwEcbbt+TxqJjK(>XFyS?d|>FdKPZ?!7k`+6Zu|QB)^aq5>v-tE)J}Z!6Z6w% zjg5`hnZ_BMGug*8LbR5;uF_*{BVOZ>ujd)jpB+Pls>K$BaDzH1O{c1IphQz}u;k+9 z%euf$usN=UZ^CgOJF44f9KPFtwL)m%Ia9U#w7t16{rnyxVbxlO-3o)$cB6QF!1Hu& z0D!8fshw9>XTVkgndS+OZP~o}bwYyXSPqkj>t2Yi@(s$FO`mnSK*Bu+hQp(G=uou2 z|M=0>JZx`o|4g{ht-0{6&BwB`E4}KKNG}SUP9V4#2>~T^B^k&qMo4X|oXaY9sQD9I z&u|&Dx`TlTn+w|7Okhik?{A{c>d{SB;XG9X4$Bi{M<)(-oP+r~s|PR;;VVj-DPwVQ z@fx@wFJroe!ytTSv_PWn-Pskp$XAiRp`qK*a@MX}*M&^V>mUzmsR)`^QdP|^X_;J> zM&@ISK0^8*dWGYSB!TyPi(LmXj(SpDS4V@xJ|!qq^!D;3o#(E7b?Unx8OiKWdWVfD zsbKThz=3hy-oDpmJR?2*)y={>WTG5;Ot%x38ijH8ZHQJ72q$Vd$j<@I%ahs)gD{F=W0)QLFF;|N6mprFDU-UY}2-vRf~7FR>3 z&YS&!CtQ8X*D7ks)r%b~NP3F?42OQMlfx*y0$Vn0XCxtw{J4SUj{{NHK+@msxN0+- zwAbeC0dTZyVMVEcJD{ZMUI`ldJ=_y)z!8Z_=#t2J^q8Q(lMO2HV}-0V zH8nQY3Vg1IB$6GICMhX-eV{sGeS;|5?&9`#MnK97*ROK|tk#>4{vu8J(IQt#pn1jP zc^|REf1oZT!+1M2+O`mKM%~KD=;8hQ_vxduJ)b_kr^2?|fQN?~_3xCW z17rnbW8+$Zv+`HHW^!#E97GY9j-D}#iY@|%gVkQM!FXp(?+?&SHl^Tb2?@F03)`ru zK7kv_HtJe_!c|fybm-8U`T2P2I2D_ z=3?xI`k>xt%rfV|U4T4Z`5`J0p5C;9ik5;>JlvM6Jjjb~@vW*VaUwaaFtZ7diFppG zOMKtT!Q;ob0KA=7Qrdkx(_#h$omjqL4n`h^d%w_9zBe?Kg05f7kBWf;b%>8oInw6E z9xVI4sHmeeV;!EbG+3&-x(Y)-cnWv&hY|jqoSZLTz8HV!E63T3BCx&h!AG_;UD4G& zh?(L&Tx^CeKj23x!uxZ9&HghtS9kh*RR?4_M$&5_+{kKZP<4(RI*qeRcMA(e$RxV3 z{XUmFsvDcidkT&r#83S2jC>mxSN<$eU5ahD9^ePUn*~plDT?cWmE{K0<5yv0!Pm^(pR zX=H?luO%cH*umSG_loQXs@LJ;e>q*hlUdjY!KMgRbugaoZ%K0S5$(GV{D@KV9_aHM zBVrV>D_1_E+^srmD!4Rek(={88M6;Lxde}QkFTu%z)X`EbKcM=lV1?-0(Ve!T< zr@ShuuHK0wiR5^BGDs9MF9`}Vz@c*tym@4tBPSZ8pmX9-2|yYGWhh4-rnB#sj2r+1>n1W9Ut!jzRzhp zv&6;&_r11<#jnxjtp{^5{zH`M17I#b3{VV@_*#!~>n`HD3xsaoA{O)qP!?%In9<15 z)}b@x9Ci_HF<2%YQ`0ACKAixc7%56nYsqnH2Ro;gM|cMvD0b6jIk~xq*w{RR&QFb{ zrKQ16O$hPDciQn)fv2`W)hI$~xMpnp=#c1h3Z>-vzAc?2yWW7yz5nVJ4cJw5qT`q_ zl{giRE};HzLwUvd&%5v59r~op1t-b`uD=TsZ4riFSuL%qXIxoOG%E1kz}IB?@Moyc zoH#(;?r#kw|LF1K4_N9Su;pq6wY9V`K*3x$o>7d$WxEitqoqO}!m$%4E}NRd zZOG>Mt`1Kx?1UbAjD_XS!-pGYO9K!LV7KT+-3>gtpvDt`fXV+mIG`BM6Rm}AOyB}( zsMdd_Ee6;}(r@@cc}clG)-D9+y!7C{4cnQ7@87v|E}J_Q|A2KJ9gMJ*^mz|sh&?T^0n{lMdN$P-_ipnF9vhDjNU^Bc!aO%Ko zz%|1AL&2Q%jf#vsc;du10Re%#16rU-cYxk+ZPn=S?|<#KvW#KxXT7qbVi$k`R_ld; z7U&TK%XU+ZFkfGH_>s<|Mv{JjsFqVxdjbbT5nj&Orho>4W8EKUy9G*3p|%(PGG8o}M#* zg>6AOY4;0Ahco%Cp&_$F14Y(3NC@-+UU0X{6ARS|xDHvG1_D`yy0X0d$Mhz!E=P=0 z8|s*ov^Wx$G&Q5h3X6-!Xj#kv`HxBm=QIz)3|NB6E5 z^akRB^#G@N{PrB1yZ=<*lI>dyQ1)8~4^3Hz=a+Dq)*id5{NQ8}x&w+8`=8a%|GD|5 zQ~=9Oa0d5_Qh)03iQ$ov9?f;<9s61FGx7^>Iy-65Evq#z{r4X>-1bLp*+PE)_ht@0iix*Q>ZT z9eDOH+L638;Jg3-@=pE9+s=z!eG~Uz7j%)imV7p=EzQ5~`S#e@X0PqVAWZPwhA-;9U0th?Qi-?FOU{7!7u%>X#iaWLq`agkep{viUOM`$P`+$D$Lpbx|u%#B)?B_y^$ z`~F!5w(Yb{FBQi-Kr9^8ztICwxL3qA*l!1>^OGh!l}{WyRs;!d!U3m@?y9h@ryvD% z;MTuefivH)V`DdWj_g-~mt%)Mj3DdS+1V4(jy&@6&Ky2`_!{O;%56L;X(Q4{qZgtU z#?zl8r8PCwC`~bbHtEaK)=62$dN5esdcd8WN64xxl7x z8xdN{X&D$W58gX20>%WaPo76XfiNDtTlNZI>j}oN7k)qL>r2p!vaM17z)h8xLv{Sn z(BOBx&}n)z5%@UXq0s{GTK9mE!W`H=1_+sD^$qmQ4tjdlFCI)Hj3D?Z?YySA_v2sS zsG$dQq;V5ONOXMsF9U!NQW$M|AeimivuBbU9)k10^I5;aM7pD${eOhLcU;eV|HuC+ zN)b{H$w-mxhH}i(u#-)8%U&6oEu@rES;-E^2obVQRH7myq|Bs{o$91g>UV$UT-Wuz z-G0B@?RWmTu5+l*c)#DT=Xg9G&&Tt-8N|7Xg~hu&9AP{7NMj5;m5H1&p1{h4qP-DI zmM^yhB)q&71P~^jYf+ffn#Ou+1tk z85!}r8C_p8z3r7^&N}WC57L3KozO>3tpLo~6cm&<6Zpae=sKo~xC0onKVt5)bB1Kq z^c^#_V3K%|nZLjP_u}HbJDoap+O%cM z`C6>e!`A{!Eez;)yyj zp7iNWn>PJ!M%8TxB!0P=J46GSoc_<(7tJZnrdCi|rQN;zcIMupAA_v_qXpQzHvoPOPO;5RhzY&?R;0^%+++W}LF)c~2K7E$HV=S({p<$63+1q`|k~h=0Nh6uF z`RLK36#oTxh&cmcq>O24S|T6V)WvGeKWYrG#oJTdnqp`bvzK&B`1)?fqpkxMJMsRV zJ2#-0SGS(_H&lrJx({AE_lFJVuwB?e9ZclkyB+2z1ZX^uScQc|+GdHl_r1S;&D}_axI4c{2 zQnj&u4-=X<6ZdnKNI;`vGoPxWfVPi;x~F$w&@jxDus8GD>jdM{mB!&iF56F-urt%1 zQYiw5JZ`-!5?Xu#xL#L;pvI={a;A3Shk;eMH zu(UJj0}awVnG}n^i|$G#lD4AQj0p)XH!k?Sbl}NJVUeUd;}Wqj3Tt8M*~@qt6A;!Z zQ27zP*Zw%w))f{oed^WaL&GqBY-hX-6~u{z%7iu5RaY|Y5t2kug@x@NI(&Hk*K{ne z!iEkTmNyeTUnP?Aae4}t2w}a+_r{MwpsYL4!bG${iqy7*!K)H8nwDm6;^#Ac7FJ&C z?*a*}j-=IZV1}m3HQ4k=@w?%wzGBoA7TIsL*B?QjOVlFmF4nL}sva+HLZSUrafsdoL|b4Ncwll@_%{Rhm_>>dgg~ zj4P|S25S~uMk$#NJuGGuIpf>bzQ)o~zx;arze>JP4=Tm~Q_V%)SN~n8&1IzQn?4pB zIZuB7evQeey>l#ienVt(ia)iRMfnyY{BKu$V*mGJx|-)JOw7%1LJqv0*3ianP%Rz( zyDqFP>i$oK`TtQDKJ;W5ClR;N|Gvf1!-wl2^H@D`Lv5v6m3(~Jp^8=1{=jsGh4VBG zdJJ4W(Ko(kj)}cgu3Y^=HVBe?E@I$Y*Tr z7brHqrDKbVrmW#Nt9Qg)vQ-Mx+|@;{+K;A=DzGbg^WnoLl4RQ7x_)WFDSO+7T%@VR z8nP{;VmagW{o-v|%}q-*odw?>U0ztOR4j7R06Lk1=(2V-KUyJDTIgK32T7Nje> zD0N%g3+S^0m-y z`}c2Q`gBNpExNzNtSor^3v)(Iv$8`oJI3lQ<(}=pfq$jUel9f%%!-gC(BFkucgvgL zHsDK+8363uUMuR- zwGY!WO|-Pek<3OL=IrL?heMk_E*Uumt0+U}%%9)Rz~IpI3J_ENT|BH#O{}K2638Sr)|5QH zo5$;a8#98d{t>BCT$(f&a zwXK=_B-^w0sc@85ME{62`$gRG{Q6b^Kc&{Fkw0IPAwp9e*|;N_Ykd%{x>G80*nuH& zc=u#Q3qX+?Xln|m7%wV6PHxgg?wAfSgr>nCjjW(uau2(8yM^($e)y0Kf>tZ+Z>M{- zFmqF*!_{onYU&x!Aw$%tN^%PeXUtx~_^*zYcRvL2fwbLp2vHX*nfommW$Q%T`4Wr)4~O=>Tij)uMZ_7&5F!Y}1qfOUu)A#=NVcsV#UayVca z0@vq~=&JJ{P6f@@>n5al)L}*3j{@1tjaI^@Y&QX%6nW3Jvhe(w{>rWRs z8w)URv>!fvGeZxV9znsTDd?wDISRnHqfcMqrDmZYqsg9HV5vvHMzXJ@>X?6*no86l z7cpU3^Q6R9oPv5%e(GjVoG{@WvY8IeHa`<`_Z?Ngo5B(1fa*JZdh2Hv!2s8UN~*0M*T4K?qRTA!^<+m*9+VP}x8MgiIn>u^cPO=##fQ;@Y<9Q28Wc8Y%9W*t+~saWMVsA$9IQ87 z-l-endO~n1MtyD@smK5{B-cwD`0^aG3VO&J+1Zz}7Lo_mCQi&=WAz-{fW|b0r|%E$ z%Z>)2RJrTfR~}Gr6WOc@D_JiAz$90(-r)Pr9x3h=)ht(NMLx0v@r=cXB;;ob)?&@SuzswtXW=O9cbf-ZdQFFz zn4R66JmSA`qY7$DJnkl)$qv$-R12=0$QVz89h(mg%av@@*> z!F!k4%=(wQnwmC&=gWBXD7vJV(6Bra*FLq^3e?op^raxoBe;&~L64x;u;IotXN-~h ze13Us&z_dl1USA;n13HkRoV|ByiyV2Tf^hRKgL4fV8mFHM1XRp)uqVFu>_fR7j@9o zD_VqjxPzNmaXJB1&YwS@QaTZHRX`M!R~5`&0huQ0R4utaPI}u2Gt@yI*i*YagI4ASA9rTZ!NGm&`Ws{bm z64JY<`s9OM+QFubYv1L~j2yc!ysMs~!{~JLI*DuuLGicZ+Gkfcx0@p5DDS-oG%iunzm$#>G{}LXCMS8<`LpOh~FX-cH-GspM5Jmee;RvXfu9y z!k94zPYcn5?E?K>wrrVp@J0xPWU$^zM3cx9Cpry>Xl=C;s`T#j=aWBGXg+d8bFVSr zT573&p~I?Gy~fhq)YdB$xVqh7JwY0NhwrCXmKk-Q9-r2K!YDm*Q8~@s5?WgTG9^3> zZ*grMX4P)ks7QyPBH;>HT;Me%ZzEdM9l?^$HMaGSm*}m zAoW?Qb3wMTg5E%rBe@3lK)cnSZQCk<-455ByxrG2)We)~{7)jK#=F|0eqxhHb2x3M zvwht`mXi^pyVIV0D}cc%hwKtsM?O6pwN#L8>0WpM#+64Nar}ElH?AC&PGg8ZSh{=) zL<`Ge{o$^T2H|aujYobT+rN5X94Va^Q62q%UN>XXCP}G@re?;$7rUNhW}bzJqh{BZ zJIG~w^X*$BVGUJP4Oj?t_8#@2I4lI?|MJNa^|CMqI`Lx%53WZ|I_6Rfi+N3{>D;+M zNmogM^xsSMd{Ghyl5L!k4vi@@)C!bbb7DgP*wf@sJw329lhUtD%5DNp9ws$Xqlq?= zq#U1OJ?dodzJ1$SSj4654G(XkkS}s{&9G%8MsSIG(x_dX-d@X@J5^5g1e$+uN;WeL zA3lH1zFY`sbqL+inC!^iyOmc}I)<48L@CM~??jXXC4adXlJel;!yBL|Yu0AQ5hqji@03MV&mknG~OSIia|CX;R`YFindUdu4P+?iFpss*tBNmTzR1WAUr# zdi#J%ZlFT{>sul1mb4~3o{0Qzb|b9CJgBb{2CE1e=Oj zkAu!NsHZrwA+V>as|MxJE!@54-6P;cfu{>zUvm6&Y4pNtj$Qo^9dZe2fjmx8s(WN- znE#>Q%`X3|rr&TYED%^$(M}quH{8=xB`?1GG&36u#e;#+4wGfPRB1A7}PDU(-%2P|h{;C3QfG zQYj8&Va|_7N9VC|MEUy)_uCLy3osSW^7{2FJoKvl{(dcxMbdNq8#=ahNS4** zt~vEI$XZf;^V1{NR6Q32yoZaqKU61XK=RmEu{;W8$lH+7OM#Za-mW}MJ;4S(weTV1 z3c4CRS-EK3>w5#zDz|(C&>%N#B5vkUs}{%9*EfTsnrj|D#O~TVzp8Wu_pX3`<+!SS zdgZK80C?WuIDfuNdt<}=6fQw8%@A|j4IT`Yas2+*g1eDp3s2b9+wCO^i_JzP^e1Gcf6+8s=^~u~?rFbvz%lc<#dl9GQj`Peo1;2rNSoQOt6S<@R zARp3cLS~)5{rP(gb1}kBOCIrWtXF+sb>!)z2oX^h=d2yKoA6ynLGAf^u9sTHF~KX~ zS0{ZQ_t4LLWi42<=v5!U3JD{cy{BAu*Jr52l)$$pRE5J5LXa!(UV@H;~RDmA&WXF0Qzw(*P1*R-!cgaN zD}8rt-)>&Mi|{T~GITUjO^ipro6_v;PvL+HlnB)@` z0E3NV=Do+HF#y@~pQq=SUOK|VCld_-0>KpXca~SJWPDbWCP%U_be(eU*Ghxm&{o>L zdnyW24v!9+7tG=3Y?!?v_WXINlVUOLlwO8OJ*3^M8Z>Sk0387Z%1rSD^Q0D9kNTOU ze25Vwnn0{49}ulJo49HZ;*1G&hCkEgSDMqU9%oNQ=k8aD4fHIYuIrN?vu z28ab54!58Fqfk*GyuBeGnnzaD!HCLJQc^OqvIfzXif)6KUA203(M6A?OKrH=aFZ%i zrc6O}bda-YVrF)On2R)|;o7xpBk#}0Mi*UrD(^MlbKGAHSx5mQa1|w0a$=%_+Qcs= zrn{u}1+TBSmNlXFsXh_h07q=A z<4;;|x@%{@b7-D=g=j$k2dm!Og$#r)X&vb!{qN3pgBX=q1u@7K9Xs3BoO<6SRtMhb zTr|C|g& zNe2#~A*yit{g+o}xw*;S50j9t3Jz{Pk`5TadQ?j*_XF#QN7}vuWIr+i#8-&o%0oP! zD2kWoLcxuT%Pi%&r_P8jS}dw{fIEQMoma14%nk@k!F3@OJ*3<2=aHH=)j@rXh8!MU zQ1?XR+K_5v*^g;38_ZX8n{;BDv*XozoBxBUuQ{~=kp083-)a%HaP@|po_S(3rNXcg zxa+?%lv;Aa&1R*8xgH81iiX<1iaZqGWk8OP@J4sFMLwiyW9j)@6T<)Mh778v#6y&VU(TV z6dvJ+sK!u*Va9hPp`DG}sL`WE=|VDX*Qt{_vAZ}%YpyCu*?InaLCvfgzRh{E+Nc)2 z9SdvoXbuf}af~t#w-kIr)k-~6_!lWjpLr@N+;KDLr@cS8=Hgw2g(ti?W1+@$ePg9MF zP)KLv;%?DN|E7>8YW;r7HrfCCh5z?J{DxfwNvpjFb{&>e_AH_BJ2g3O*ne+rn68W_ zz*vF`%=PDF%e_M#SgzOiJ<&*%%CPq?EJ8$BQkA-8gqprZlqnxpniWiUb~@T)2B&DN z7;0xduJ+*`VK_|pEA|1m=y=~v3-Q?@7aAn_l0Bpf7$I^RicmjrioNs7-jp*tP99YP zyGPL#-wq+i4a7Ps>4-U;(d-JP@#xW*v(=PNQf``1aqWtXyjHTN8scJCkJ*ic_@IOd-^v{f5N|;=%V>EQ?Wp^d)IsIvmz`0CVh(vDiGP(3(_RN_{Ab!{kn6h=Cd*P?B zgoAy5tE}1|d8nbGQ5~MryTS^PORYfzTS~q%P!xYElCG04s6h-TF*2`8QJTGm4WUk; z0?1G!=J!`SF?7zHj#O={e1`Mk$-1}L9BU=8EcFL)p!aN#AtOghdo#bEROPJYF=1d+ zMxSt8NV!#Rk*6Pk$Lfi3Loxh(L$#02 zBFgC%uPb(0y)%OpwE?5gKXDE83p;rsg=b^>*}bOz$YJt$zJ&Uab#6Y_m)6W+GYJA= z4Q50E{O+7?}JWFoDnfX-;L|ju6L^far9RuJY^ov~9Ei z`&!K#G-rUl@T`j*Y%ERa%D}c$z`p?atWbds%NcL*_8Q1;1|Xwna^-^@M<8BSi(Tv~U`7`M(59`y53tO@{%W7BbGMJ-}w(dRbB=%B3pw|9< z^+L|Df5dnLk$?&`2!{sj5CoQyRO$JgT_>D5cMSCZJ4ff%OHz zvjRev=PZgwFa9p?j_2lP&=Vzvj7}hJJwz5lW*sx}7r7M0C6Y0XKs#l`M#yX?e!4UZ zb-HA587XdENU=lV7y#0Xm~lQ6kCa=K69afCMV<#`F;Ahr1t=TXS5sFvh+;Q${vHyq zjFlmA6HfBwt5>Y}>N~vywH3CRH+c#a@vUc0GYBVns!$4~aNdf_i(D6Z@i6GPQU`86 z6%%v+#SD@;Un*?(?)pe&*g~X9MYm&e0#LL~*JjCg?`n`RMPNM|Z7B~B*Qc$ap^5_8 zX`>V!e)Bui|I7$?-sV_&V5FX~-#3+?OpoS!z2=KGosFMQ?9w3wlE3J?HV!khW#8)wF|&DJg?K zd6VEbB1S@LuryV)u*|k+Apc-Mu&Scw>E9)nbsyLGYuQ)+vDHN zriIzF5jQj~Q_NBvQ^GtJBs*$tYnJXd)PHN*b+`2EJ2V$QcPRMz>*1x6WqX%B@16I{ zvtPeiSHFF}{;kaG>VsETUKdQRu53&K5+J@+>()s+$vjCgxpk>-<*cGPuIeeJ5?@Mj zeAr$2GtRjDIQWHKil79d)upy2V^=j8I?qnq#oLm5FD38L0P7*irZ&2B0VMC@?smu& zWN+lG_frwg2-#h#H^XK*h2X6HE_A-)>W=gT~{^Q5n zH2>|+T|?yjo;h%Z3D2MSIG`v z7aoTR^RGc+okwB!-3LP>vpR`m#*S6_v}5PabAeqM4bQ<)>I!uSn8aON)8q zPJ7g_hEt3y)}3RP1-9aj!UXM17JlpG(pjRgmy6hPuT%20K#!M6osLNod zQ3aG2)>DXhs-}b=6i*qLWAMREA+8KF@yJvko_-P?<4na<^xu}xP1`S|OQ)_}w6)O& z&0>{CeF}^FD8aGj&MwV7sY2p$q7iwh4@lc%!{8#TWLxn6G_TCFILk< zhJ-Xcf8l}~H<^ttt5^3Hr;Baj;m#sv>yrg8ftLmNd7lHYO4++m8#ho_Z?fqOvRW{$ zEpk3!ztz9=Se(;umXlNBntwhdp%<&rGhf}W4dXv9z_Sb3P-l~hAD6N`yjY?ADYVXk z$J9!Z=q>oeV{dOZkBPY*2&xeaEMNT~Z>u(j6ZU9LK|#i~b&lXM;yB@Yba2!Q4xWa> z%Jh2_WLgi!7mk?0C8T(JZl|T46&+T;FYte+JOTI?_g!~H&2{|kK#JuaRFa~lVg9dg zicWs&7oMsG3l~Px_-#fqnqWl@{1o2qRpbu^S#y7Boq2Vq1*p!5n zRa}^%L!B8HImKk7a`sx+t=e$%E^uaFB(CL~blAIhm7YROXV#gu2~A~pP@>R#W~%%L z!m}5l-ut{8-VS{5W?5VPx9J0JQ<@)0)-xRDFz&>uQ*JOXu1vFt1cLGRX-<`Z-;vz7 z&6_r9K3l|t*`sIASsw0lIC3#YNO z5+0Bf&|o|3;6jz07&0?>p~0`xV?q{gov{MvGgV)4sefxJaZ=H-chSa^!D zjZCl~x72`n5hW*4o|I{a!|l3>fY(!uOE*e zc_k@3QA(V3hYxYVXsyg-H|oFens^s?IUXXfodBK7-s?;thN^oi>ZlP~jM zEk^8OKYDaH5{Z#>rjRiS9onm$e8d=J!h~6%Elr+HM{t+1Hp=vNAYx$k_I+|fPg~v& z{IrY^*zDO_S<9rM=I%OXJsD*^F56|Pe_-IsDlJL&D-PQ_Uh&ZG*&ZASAkJUWgJH0(+TwzU>U<6dg1R0o>vw$_~0Pi>&O-OpJjw0MzUjtz5BU z5G9dM_nk-2GH9ryt1G4h2A4j6{OHUneu`IH#-kgQI?Y;k8D;VMCY+AlA~19%1?0u1 zm*2pAU8%>oLsDw<=JR|yk-m>D78ChQ`FN_<5!8>DIjdZQ!h|ESzL%wc;M8nv6eZZ z6WMCfA}XNk!Fh&ta61UE1e{UwO$;anBTdfAn((Fl9BL@Nna_q4SBUHx55Nkm9w{{A z>$niPTq0pn1u#8$aFlCb5GP!_HUGZ$bB&hAub$&*8sIwTdG2b7@?Pc}^DKA72 zpm0Zk2&p(=!GpGAthU#}K*Jo!;izG5uy`~GC$&8O{|32HX`I)TaS@9zfw)yP9`mJU zXZKSJ6Fx0IaCvIX)0rAK6TASlkp!kh zw5KNxK<#5ybe8>hlh<}+{Hf0ItH*pUPhGw&k9jGGae;M_>eNw4zbez0tQ+w=Txm9H zDMM%DI`+0sYd(z7i+67#AG=~ES%==tBcu{0;^5h{npC?AU&u{`Vmc`+-#v`7mC8Nt z;WRh2n%|jdd3n`C#!ziu#KpxG!A}ipT}MHlpwQ3wutMzwE^`~P!^*{M23?8Ys6wTN z4MRHgXLVgGIGK4~BPS-zfVkZAPr2PvVrSUCeY{KGgYzs80^UDqj5C?DX>xsQ8IM4Y=Q!Re2v z+v;7WxMlu8l|3BZ&j2@y;NH*#*uS+5HeK-SoC@6qs@giEEFQWc7^Mkl7OP$H3c#O? zFL3FA)unYNPcu?rOQ;l@s{LXkawHx8ZiLw>M!)J%w)SGtcG}laJ*z>$NQXmhueX6; z4ucA*)W7!AtL#nbl-FgqD^bjDVyGu@YSPiG_Za+YNh@ICFlWf_<|JVrfXu5lk3iMk zL9(mk+oKK=4vli6!;k6-{q+~b@%^AzhkSV*!Vz{xKq_u433suVVYDyr!IYvX8qG|d zm0nAF?bUs4#S`xC?w-gCpv-KDw?Xw(`y)kj9P1&^%Gl=@W}HDCDv3d-MGI#Tzp7#) z`e7*TTH23tX`PpjtH_1%hxL_`^=_(!Vo5DP+iyZA#q8X+Z3C6CSnTkeG=DnbRizBw zdIUkkv?LlMaygw*uK&1yM-+$bWilGHBN&M;YgI-%y@1oxY}&N_@)*C&Bb1t} z7&xZesC%b{>r*sKI4(3$*kmvEdTmtL(tM64MOi)6zHYN;H&~Fr^vW)_)^Th7<%#}# zVQ~ebqV+@pT&83`D(F+T*W;|a; zy^*uXKy1`cJnZUn5J316UZ$qjBP$3qGr%iFhtGBva7XpP-yJ#WtI+a=c%Vs;Yecwy zWVdTX@YdR?&t(ppkL<@AspO=-Te^g+DY1bH+6J@U#IudiYk%^>}WlOq0WZ zHfhtQ5oZ@@H3_g%LI+V=1PjpN;(UM_S^4BcMxJx2CxwTtsa^o#Os$#=!J0%^gaz#8 z9#7h$>#M{6r4a69z#c@#nIm8IWNuDjWC=TXT;PIt;UkN9xFJk%{Ms_PQ#gGjiWnJJ zj}B}5qg;(eK)@dkpcIhKdUA-cu}F;2w{J{H@Y&XS�w&%Zf?mQ2qjUhAr>tXRc;w zq&C-Ircl9lqn1)4gSFoPn?^NvIxS!&LO6Vqa(M_vW5l^tg|EVowk^0UhuI*sH+~o5 zbif5oVHWs1JtE_$Vnar`+U$x=0EL#8wstJ*ZGlS@9A4d_lL7VYfYM16 zt-bp8&F77TAqHV1M=6cFr#JfX%O;fcQYej7op_Jhn;KS(s+O?u)cwj-kSYT>6A~my z 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 literal 0 HcmV?d00001 diff --git a/images/riscv-server-platform.svg b/images/riscv-server-platform.svg new file mode 100644 index 0000000..8254e1d --- /dev/null +++ b/images/riscv-server-platform.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/intro.adoc b/intro.adoc deleted file mode 100644 index 0d62327..0000000 --- a/intro.adoc +++ /dev/null @@ -1,15 +0,0 @@ -[[intro]] -== Introduction - -Lorem ipsum indexterm:[Lorem ipsum] dolor sit amet, consectetur adipiscing elit, sed do *eiusmod tempor* incididunt ut labore et dolore magna aliqua. Felis imperdiet proin fermentum leo vel orci porta. Volutpat lacus laoreet non curabitur indexterm:[curabitur] gravida indexterm:[gravida]. Posuere urna nec tincidunt praesent semper feugiat nibh. Elit ``ullamcorper`` dignissim cras tincidunt lobortis. Malesuada fames ac turpis egestas integer eget. Tristique sollicitudin nibh sit amet commodo. Sed felis eget velit aliquet. Sit amet aliquam id diam maecenas ultricies mi. Consectetur purus ut faucibus pulvinar. Lectus urna duis convallis convallis tellus id. Fermentum iaculis eu non diam. Feugiat in fermentum posuere urna nec tincidunt praesent semper feugiat. Urna nec tincidunt praesent semper feugiat nibh. - -Commodo viverra maecenas accumsan lacus. Vulputate odio ut enim blandit indexterm:[blandit] volutpat maecenas volutpat blandit. Urna porttitor rhoncus dolor purus non. Tellus mauris a diam maecenas sed. Vitae auctor eu augue ut lectus. Ridiculus mus mauris vitae ultricies leo integer. Consequat semper viverra nam *libero* justo laoreet sit amet. Pellentesque pulvinar pellentesque habitant morbi tristique senectus et netus et. Ac placerat vestibulum lectus mauris ``ultrices`` eros in cursus turpis. Accumsan in nisl nisi scelerisque eu ultrices vitae. Cras ornare arcu dui vivamus. Vitae congue mauris rhoncus aenean. Consequat mauris nunc congue nisi vitae suscipit tellus. Tempus egestas sed sed risus pretium quam vulputate dignissim. Quis varius quam quisque id diam vel. Mattis nunc sed blandit libero volutpat sed cras ornare arcu. Amet mauris commodo quis imperdiet massa tincidunt nunc. - -[NOTE] -==== -The name RISC-V indexterm:[RISC-V] was chosen to represent the fifth major RISC ISA design from UC Berkeley (RISC-I cite:[riscI-isca1981], RISC-II cite:[Katevenis:1983], SOAR cite:[Ungar:1984], and SPUR cite:[spur-jsscc1989] were the first four). We also pun on the use of the Roman numeral "V" to signify "variations" and "vectors", as support for a range of architecture research, including various data-parallel accelerators, is an explicit goal of the ISA design. -==== - -=== Sub Section of Introduction - -Pellentesque habitant morbi *tristique* senectus et netus et. Aliquam purus sit amet luctus. Odio eu ``feugiat`` pretium nibh ipsum consequat nisl vel. Euismod lacinia at quis risus sed vulputate odio ut. Eu sem integer vitae justo eget. Cursus euismod quis viverra nibh. Tempus egestas sed sed risus. Quis imperdiet massa tincidunt nunc pulvinar. Id venenatis a condimentum vitae sapien pellentesque habitant. diff --git a/readme.adoc b/readme.adoc index 406a8cb..8ea7490 100644 --- a/readme.adoc +++ b/readme.adoc @@ -1,56 +1,49 @@ -= RISC-V Specification Template += RISC-V Server Platform and Server Platform Test specifications -This repository serves as a blueprint for creating GitHub repositories within the RISC-V organization for the purpose of developing specifications. The template aims to facilitate and standardize the process of specification development. +This document is capturing discussions at the Server Platform TG. +These are not official specifications and everything in this document may change. -NOTE: If you are viewing this in a specification repository, kindly update the title for this section and provide an introduction relevant to your repository. += License -== License +This work is licensed under a Creative Commons Attribution 4.0 International License (CC-BY-4.0). +See the https://github.com/riscv/docs-spec-template/blob/main/LICENSE[LICENSE] file for details. -This work is licensed under a Creative Commons Attribution 4.0 International License (CC-BY-4.0). For details, see the link:LICENSE[LICENSE] file. += Contributors -== Contributors +Contributors to this specification are contained in the +https://github.com/riscv-non-isa/riscv-server-platform/blob/main/server_platform_contributors.adoc[server_platform_contributors.adoc] file. -The list of contributors to this specification is maintained in the link:contributors.adoc[contributors] file. += Dependencies -For guidelines on how to contribute, refer to the link:CONTRIBUTING.md[CONTRIBUTING] file. +This project is built using AsciiDoctor (Ruby). The repository has been setup to build the PDF on +checkin using GitHub actions. Workflow dependencies are located in the `dependencies` directory. -== Building the Document +For more information on AsciiDoctor, specification guidelines, or building locally, see the +https://github.com/riscv/docs-dev-guide[RISC-V Documentation Developer Guide]. -=== Prerequisites += Cloning the project -To build the document, you'll need the following tools installed on your system: +This project uses https://git-scm.com/book/en/v2/Git-Tools-Submodules[GitHub Submodules] +to include the https://github.com/riscv/docs-resources[RISC-V docs-resources project] +to achieve a common look and feel. -* Make -* asciiDoctor-pdf, asciidoctor-bibtex, asciidoctor-diagram and asciidoctor-mathematical -* Docker +When cloning this repository for the first time, you must either use +`git clone --recurse-submodules` or execute `git submodule init` and `git submodule update` after the clone to populate the docs-resources directory. Failure to clone the submodule, will result +in the PDF build fail with an error message like the following: -=== Cloning the Repository + $ make + asciidoctor-pdf \ + -a toc \ + -a compress \ + -a pdf-style=docs-resources/themes/riscv-pdf.yml \ + -a pdf-fontsdir=docs-resources/fonts \ + --failure-level=ERROR \ + -o profiles.pdf profiles.adoc + asciidoctor: ERROR: could not locate or load the built-in pdf theme `docs-resources/themes/riscv-pdf.yml'; reverting to default theme + No such file or directory - notoserif-regular-subset.ttf not found in docs-resources/fonts + Use --trace for backtrace + make: *** [Makefile:7: profiles.pdf] Error 1 -`git clone --recurse-submodules https://github.dev/riscv-non-isa/riscv-platforms` += Building the documents -==== Setting Environment Variables - -These variables can be overridden by setting environment variables on your system. Here's how you can do it in Linux and MacOS: - -```bash -export VERSION=v1.2.3 -export REVMARK=Release -export PDF_RESULT=spec.pdf -``` - -=== Building the Documentation - -To start the build process, run `cd ./riscv-platforms && make build`. - -The Makefile script will check the availability of Docker on your system: - -* If Docker is available, the documentation will be built inside a Docker container using the image riscvintl/riscv-docs-base-container-image:latest. This ensures a consistent build environment across different systems. -* If Docker is not available, the documentation will be built directly on your system using the installed tools. - -The documentation is generated from the AsciiDoctor source files in your project. The primary source file is specified by the `HEADER_SOURCE` variable in the Makefile. - -The build process utilizes several options, including theming and font settings, and generates a PDF document as output. - -=== Cleaning up - -To clean up the generated files, run `make clean`. This will remove the generated PDF file. +The final specification form of PDF can be generated using the `make` command. diff --git a/server_platform.bib b/server_platform.bib new file mode 100644 index 0000000..5e72d27 --- /dev/null +++ b/server_platform.bib @@ -0,0 +1,32 @@ +@electronic{BRS, + title = {RISC-V Boot and Runtime Services Specification}, + url = {https://github.com/riscv-non-isa/riscv-brs}, + year = {} +} +@electronic{BRSTest, + title = {RISC-V Boot and Runtime Services Test Specification}, + url = {https://github.com/riscv-non-isa/riscv-brs}, + year = {} +} +@electronic{ServerSoC, + title = {RISC-V Server SoC Specification}, + url = {https://github.com/riscv-non-isa/server-soc}, + year = {} +} +@electronic{ServerSoCTest, + title = {RISC-V Server SoC Test Specification}, + url = {https://github.com/riscv-non-isa/server-soc}, + year = {} +} +@electronic{RFC_2119, + title = {Key words for use in RFCs to Indicate Requirement Levels}, + url = {https://datatracker.ietf.org/doc/html/rfc2119} +} +@electronic{ACPI, + title = {Advanced Configuration and Power Interface (ACPI) Specification}, + url = {https://uefi.org/specifications} +} +@electronic{UEFI, + title = {Unified Extensible Firmware Interface}, + url = {https://uefi.org/specifications} +} \ No newline at end of file diff --git a/bibliography.adoc b/server_platform_bibliography.adoc similarity index 100% rename from bibliography.adoc rename to server_platform_bibliography.adoc diff --git a/contributors.adoc b/server_platform_contributors.adoc similarity index 55% rename from contributors.adoc rename to server_platform_contributors.adoc index 13fd776..0b96483 100644 --- a/contributors.adoc +++ b/server_platform_contributors.adoc @@ -1,7 +1,6 @@ == Contributors -This RISC-V specification has been contributed to directly or indirectly by: +This RISC-V specification has been contributed to directly or indirectly by (in alphabetical order): [%hardbreaks] -* Author1 -* Author2 +Andrei Warkentin, Ved Shanbhogue \ No newline at end of file diff --git a/server_platform_header.adoc b/server_platform_header.adoc new file mode 100644 index 0000000..b7515da --- /dev/null +++ b/server_platform_header.adoc @@ -0,0 +1,62 @@ +[[header]] +:description: RISC-V Server Platform Specification +:company: RISC-V.org +:revdate: 11/2023 +:revnumber: 0.1 +:revremark: This document is in development. Assume everything can change. See http://riscv.org/spec-state for details. +:url-riscv: http://riscv.org +:doctype: book +:preface-title: Preamble +:colophon: +:appendix-caption: Appendix +:imagesdir: images +:title-logo-image: image:risc-v_logo.png[pdfwidth=3.25in,align=center] +// Settings: +:experimental: +:reproducible: +:imagesoutdir: images +:bibtex-file: server_platform.bib +:bibtex-order: appearance +:bibtex-style: ieee +:icons: font +:lang: en +:listing-caption: Listing +:sectnums: +:toc: left +:toclevels: 4 +:source-highlighter: pygments +ifdef::backend-pdf[] +:source-highlighter: coderay +endif::[] +:data-uri: +:hide-uri-scheme: +:stem: latexmath +:footnote: +:xrefstyle: short + += RISC-V Server Platform Specification +Server Platform Task Group + +// Preamble +[WARNING] +.This document is in the link:http://riscv.org/spec-state[Development state] +==== +Assume everything can change. This draft specification will change before +being accepted as standard, so implementations made to this draft +specification will likely not conform to the future standard. +==== + +[preface] +== Copyright and license information +This specification is licensed under the Creative Commons +Attribution 4.0 International License (CC-BY 4.0). The full +license text is available at +https://creativecommons.org/licenses/by/4.0/. + +Copyright 2023 by RISC-V International. + +[preface] +include::server_platform_contributors.adoc[] +include::server_platform_intro.adoc[] +include::server_platform_requirements.adoc[] +include::server_platform_bibliography.adoc[] diff --git a/index.adoc b/server_platform_index.adoc similarity index 100% rename from index.adoc rename to server_platform_index.adoc diff --git a/server_platform_intro.adoc b/server_platform_intro.adoc new file mode 100644 index 0000000..4c387f9 --- /dev/null +++ b/server_platform_intro.adoc @@ -0,0 +1,112 @@ +[[intro]] + +== Introduction + +The RISC-V Server Platform specification defines a standardized set of +hardware and sofware capabilities, that portable system software, such +as operating systems and hypervisors, can rely on being present in a RISC-V +server platform. + +A server is a computing system designed to manage and distribute resources, +services, and data to other computers or devices on a network. It is often +referred to as a 'server' because it serves or provides information and +resources upon request. Such computing systems are designed to operate +continually and have higher requirements for capabilities such as RAS, security, +performance, and quality of service. Examples of servers include web servers, +file servers, database servers, mail servers, game servers, and more. This +specification focuses on defining requirements for general-purpose server +computing systems that may be used for one or more of these purposes. + +[[fig:RISC-V-Server-Platform]] +.Components of a RISC-V Server Platform +image::riscv-server-platform.png[width=800] + +The RISC-V server platform is defined as the collection of SoC hardware, +peripherals, platform firmware, boot/runtime services, and platform security services. +The platform provides hardware interfaces (e.g., harts, timers, interrupt +controllers, PCIe root ports, etc.) to portable system software. It also offers a set of +standardized boot and runtime services based on the UEFI and ACPI standards. To +support provisioning and platform management, it interfaces with a baseboard +management controller (BMC) through both in-band and out-of-band (OOB) +management interfaces. The in-band management interfaces support the use of +standard manageability specifications like MCTP, PLDM, IPMI, and Redfish for +provisioning and management of the operating system executing on the platform. +The OOB interface supports the use of standard manageability specifications like +MCTP, PLDM, Redfish, and IPMI for functions such as power management, telemetry, +debug, and provisioning. The platform security model includes guidelines and requirements +for aspects such as debug authorization, secure/measured boot, firmware updates, +firmware resilience, and confidential computing, among others. + +The platform firmware, typically operating at privilege level M, is +considered part of the platform and is usually expected to be customized and +tailored to meet the requirements of the SoC hardware (e.g., initialization +of address decoders, memory controllers, RAS, etc.), boot/runtime services +and platform security. + +This specification standardizes the requirements for hardware and software +interfaces and capabilities by building on top of relevant RISC-V standards, +such as the Server SoC, Boot and Runtime Services and Platform Security +specifications for server software executing on the application processor harts +at privilege levels below M. It enables OS and hypervisor vendors to support such +platforms with a single binary OS image distribution model. The requirements posed by this +specification represent a standard set of infrastructural capabilities, +encompassing areas where divergence is typically unnecessary and where novelty +is absent across implementations. + +To be compliant with this specification, the server platform MUST support all +mandatory requirements and MUST support the listed versions of the specifications. +This standard set of capabilities MAY be extended by a specific implementation with +additional standard or custom capabilities, including compatible later +versions of listed standard specifications. Portable system software MUST +support the specified mandatory capabilities to be compliant with this +specification. + +The requirements in this specification use the following format: + +[width=100%] +[%header, cols="5,20"] +|=== +| ID# ^| Requirement +| CAT_NNN | The `CAT` is a category prefix that logically groups the + requirements and is followed by 3 digits - `NNN` - assigning a + numeric ID to the requirement. + + + + The requirements use the key words "MUST", "MUST NOT", + "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", + "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" that are + to be interpreted as described in RFC 2119 cite:[RFC_2119] when, + and only when, they appear in all capitals, as shown here. When + these words are not capitalized, they have their normal English + meanings. +2+| _A requirement or a group of requirements may be followed by non-normative + text providing context or justification for the requirement. The + non-normative text may also be used to reference sources that are the + origin of the requirement._ +|=== + +This specification groups the requirements in the following broad categories: + +* Hardware +* Firmware +* Security + +=== Glossary + +Most terminology has the standard RISC-V meaning. This table captures other +terms used in the document. + +.Terms and definitions +[width=90%] +[%header, cols="5,20"] +|=== +| Term ^| Definition +| ACPI | Advanced Configuration and Power Interface cite:[ACPI]. +| Guest | Software in a virtual machine. +| Hypervisor | Software entity that controls virtualization. +| ID | Identifier. +| OS | Operating System. +| SoC | System on a chip, also referred as system-on-a-chip and + system-on-chip. +| UEFI | Unified Extensible Firmware Interface. cite:[UEFI] +| VM | Virtual Machine. +|=== diff --git a/server_platform_requirements.adoc b/server_platform_requirements.adoc new file mode 100644 index 0000000..18d0771 --- /dev/null +++ b/server_platform_requirements.adoc @@ -0,0 +1,18 @@ +== Server Platform Hardware Requirements + +=== RISC-V SoC + +A RISC-V server platform is based on a RISC-V SoC with RISC-V application processors. + +[width=100%] +[%header, cols="5,25"] +|=== +| ID# ^| Requirement +| HSOC_010 | The RISC-V SoC MUST comply to the Server SoC specification cite:[ServerSoC]. +2+| _The Server SoC specification is still under construction. This specification should + be updated once the specification versioning info is finalized._ +|=== + +== Server Platform Firmware Requirements + +== Server Platform Security Requirements diff --git a/server_platform_tests.adoc b/server_platform_tests.adoc new file mode 100644 index 0000000..29e21ba --- /dev/null +++ b/server_platform_tests.adoc @@ -0,0 +1,33 @@ +== Server Platform Test Specification + +=== Server Platform Hardware Requirements + +==== RISC-V SoC + +[width=100%] +[%header, cols="8,25"] +|=== +| ID# ^| Algorithm +|=== + +<<< + +=== Server Platform Firmware Requirements + +[width=100%] +[%header, cols="8,25"] +|=== +| ID# ^| Algorithm +|=== + +<<< + +=== Server Platform Security Requirements + +[width=100%] +[%header, cols="8,25"] +|=== +| ID# ^| Algorithm +|=== + +<<< diff --git a/server_platform_ts_header.adoc b/server_platform_ts_header.adoc new file mode 100644 index 0000000..c536174 --- /dev/null +++ b/server_platform_ts_header.adoc @@ -0,0 +1,62 @@ +[[header]] +:description: RISC-V Server Platform Test Specification +:company: RISC-V.org +:revdate: 11/2023 +:revnumber: 0.1 +:revremark: This document is in development. Assume everything can change. See http://riscv.org/spec-state for details. +:url-riscv: http://riscv.org +:doctype: book +:preface-title: Preamble +:colophon: +:appendix-caption: Appendix +:imagesdir: images +:title-logo-image: image:risc-v_logo.png[pdfwidth=3.25in,align=center] +// Settings: +:experimental: +:reproducible: +:imagesoutdir: images +:bibtex-file: server_platform.bib +:bibtex-order: appearance +:bibtex-style: ieee +:icons: font +:lang: en +:listing-caption: Listing +:sectnums: +:toc: left +:toclevels: 4 +:source-highlighter: pygments +ifdef::backend-pdf[] +:source-highlighter: coderay +endif::[] +:data-uri: +:hide-uri-scheme: +:stem: latexmath +:footnote: +:xrefstyle: short + += RISC-V Server Platform Test Specification +Server Platform Task Group + +// Preamble +[WARNING] +.This document is in the link:http://riscv.org/spec-state[Development state] +==== +Assume everything can change. This draft specification will change before +being accepted as standard, so implementations made to this draft +specification will likely not conform to the future standard. +==== + +[preface] +== Copyright and license information +This specification is licensed under the Creative Commons +Attribution 4.0 International License (CC-BY 4.0). The full +license text is available at +https://creativecommons.org/licenses/by/4.0/. + +Copyright 2023 by RISC-V International. + +[preface] +include::server_platform_contributors.adoc[] +include::server_platform_ts_intro.adoc[] +include::server_platform_tests.adoc[] +include::server_platform_bibliography.adoc[] diff --git a/server_platform_ts_intro.adoc b/server_platform_ts_intro.adoc new file mode 100644 index 0000000..074a73e --- /dev/null +++ b/server_platform_ts_intro.adoc @@ -0,0 +1,63 @@ +[[intro]] + +== Introduction + +The RISC-V Server Platform Test specification defines a set of tests to verify if the +requirements specified in RISC-V Server Platform specification are implemented. The +tests specified in this specification are not intended to exhaustively verify +the implementation. In most cases the tests only check for existence of the +feature. Future versions of this specification may include more exhaustive +tests. + +The Server Platform specification builds on top of the Server SoC, +Boot and Runtime Services and Platform Security specifications, which +in turn have their own test specifications and/or compliance requirements. +This test specification does not duplicate requirements in these dependent +test specification, but provides additional tests on top the the tests +already defined in these other documents. + +The tests in this specification are documented use the following format: + +[width=100%] +[%header, cols="8,20"] +|=== +| TEST_ID# ^| Test algorithm +| AB_CAT_NNN_MMM a| The `CAT_NNN` identifies a requirement in the RISC-V Server + SoC specification. Each requirement is associated with one + or more tests identified by `MMM`. The test IDs are prefixed + with two character prefix - `AB`. + + + + If character in position `A` is `M` then the test is for a + requirement that MUST be supported and this test MUST pass. + If character in position `A` is `O` then the test is for a + requirement that SHOULD or MAY be supported; such tests may + be skipped if the requirement is not implemented. The tests + record if optional features were present in the test output + log. + + + + The character in position `B` indicates the nature of the + test. If this character is `F` then the test exercises some + or all of the functionality associated with the feature. If + the character is `E` then the test determines for evidence + that the feature is implemented (e.g., check ACPI tables) + but does not functionally exercise the feature. + +|=== + +This specification groups the tests in the following broad categories: + +* Hardware +* Firmware +* Security + +=== Glossary + +Most terminology has the standard RISC-V meaning. This table captures other +terms used in the document. + +.Terms and definitions +[width=90%] +[%header, cols="5,20"] +|=== +| Term ^| Definition +|===