From 591edf5b0ee5f57e051e69910516523b6d315809 Mon Sep 17 00:00:00 2001 From: "Dr. Stefan Schimanski" Date: Fri, 26 Apr 2019 11:46:53 +0200 Subject: [PATCH] Update to match structural schema KEP --- .../20180731-crd-pruning-decoding.png | Bin 0 -> 135287 bytes .../sig-api-machinery/20180731-crd-pruning.md | 639 +++++++++--------- 2 files changed, 314 insertions(+), 325 deletions(-) create mode 100644 keps/sig-api-machinery/20180731-crd-pruning-decoding.png diff --git a/keps/sig-api-machinery/20180731-crd-pruning-decoding.png b/keps/sig-api-machinery/20180731-crd-pruning-decoding.png new file mode 100644 index 0000000000000000000000000000000000000000..39788f021467fe3cf21ca6beba709e36a9dd4325 GIT binary patch literal 135287 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

&_ zQ2LghG2IG4koH?KXlS2=`KGY~B3aD1JTT>huLC&~?T$+Wtw`Xa9ODno3%~lzjlzc= z<`5(#MmPnQ+?4r+bo45`HP-m_SCb2=UiHCy#tNAC^wrh0uTZ_&gT{B14s-Wdvf+ni zs%PT?#N(AUB_eV2$6~NC3O|*L*F5=2`-`P7-+8CK=786JR)N}Ngu5P47Ve3i!FuLL z0N17_Axe6zG1cqeFlxeI9qcSWMB+lXU=mGD(|~?Ng%iV0c(W_Hlo$#ht^2=^_IFtb zG2c2JYxY-EL4UEElT!1=vdY$a6&8JBxzzosmD}o%K$L^o0MVnKH8)k4@`0#u?X+=# zI>;6z^wuLw7N^c7U$zIgL20pSZy*mgm{yrqQ7IjdJ6Aidd$labq@3%oF!*VB9Rvu- z#NOK5U_|gF$MBVz?x|_K8cMP+u?X$oSG!~n4!iz)uEkIduh=Z+*Ll-#25y`Czd~<` zfSA_4S+GFSUO_D)*cf6`EV8)=Lg~_o6synWz87F1m!sa;LWU{1ZC))my6>t*c3+)X z56v$8^{_%cK;$*uAx~MSJrSqsIX6CoCcA8P^R|D;~`Vf#7ikBTdEXGQ+33aS|DyQJaiNPu$-BE0^Bb(|P z46<64@se19_2Mk#b-HSq5bLbTAgX@~cHQ&wV(!kxS1CRdkY@>PfRAqi$igz(wWwNi z`)jCJ^j~E-(&FjVWb`*AYWL~MX8u01|9J7?ud=3c^!kpGRXGc`hDy3vTvqa%%s4C9 zCKrgog++C}Sqby0L7!e*!ONR(UqR+V`b<8=V0BNuby~tIoWhaAw7hWP37Sna9!86Ns3!~zu;qW9LrsJS3SeSQug*W_*F^}we@SO{b z>t}}xZvo?FGHYXR3H$d6V(#NK>5tCVv5;un=LVFc%HW3MRXb;|-{KY0j5!968R@2K z4>eJ&S{)SoEbW<5LDek9&~+aIefqMnkT?l*Dms#6ft~YoucWZx&83Q(Tg-b6?o_f9 zOPCQ#Gg%o)u4}??bM>}oRRGpq5gzIfHMw)oLP|47HPu!k^zfPOLJf|z^gRfl=GkHPXeAVnlHPjs+we0pj z94oSLw;JfYLWaz0!(-`&$OP^Cx|eS+aUzB#gAgGp!l37ak12nlg~N8tzLUdGWol+y zZ#qKL87)1{nENW9UVrvaHBXCd+u+~K*cEJW36v!fc!0a|Rlc8Q7ZkMn+R3tQ`|(Gg z3(Zp|DYbAQ9v~ery$7B$J3UMJ(#J2!B62}Z3y%rpNZE_HFJQT2+APkMR~zM86>9Ll zVIHYZ+3c%1>o|C8t{I=RJhh{{DC4D&b@pahGY*5fSVK-;y6WJT&P`?La4d?F+QbK zz0e~(LrXXpj=Yh|qB-CfWV<3}{PiztzD|ugTF7R21og-t&JKi|d%2a$3+_8^X;zia zhy@#qe4smB5k5e-`>zJ2lw9q8Q+C}W#w_JLRkz3Ka(z{sAQr6p6y^cu`5){3J6ERx zhO2nPAFF!D=RT&QQqB9xVaq+ZfrH1MRtuiJ@awUxlqsgi_haVpAorCoHZeaIKpFGk ztVqYFf>%?8%%(wx=5jy--@KZZ^nwbr;Hog>W6QhSyaGSh$Esh zqPCjO#9~ge;mt#sBEaP^ZvMh!DPz9kma5O|0%(y&oepGtmJrubNEa2Z4m5D=moP zb{C5{m`7lDFSYvO(LO9i#vnOY`^6pEk=t2?D0)p{!SP@*LTe;*twf2B&M9B`H_whX zW8R$$lpT%-65;Wm8F%nZsx|>ct5$>xF6|QDqHGBWzd1KAgvfE!s1L0bJNfZyd75Wi zhU`eo+2lHPaL^Q)(|NwVdZPHkoGxR_a`0!2VO$<{5xlikb>DVj$&XSj{J>4paXp^d z37&(`Pf`|<>qPa6xBa^w5mnM@y|9AWK$t;{2hJ zVj+f=@+m{zukd|a*HrDn33w5_AJaH=jHu0PLRM=~xFJE#v}?6Z7>ouWkqu{Q0a zaQm=0#7m?)2+^HM3k!>2a3&RN}A*mN+=!zn9v1CBZC=qz0PkLa`LrG)D8! zy={yZ?pOng4nHNhse>%Qbrig~yt`%Iq8br1udly%1*xA7;iDf@kYG`NOt`+BU*^m2 z<}VV{>Lrv;OQTI}_|ttK>i<<`EU>2E(D>>BjqS~ao@ARErLxChYc+n{u{57#C(ufW zvD|82$b1Yf+@uj=jw+wGT=E++OruEUxBD`Qgl898Dy4$V{GA8Ey`|gR<_#TCCRm;o zD@3ca4oAk0vwo5QBd+dfabD08zT$C?PJD9lK;h5AQAtxm4%bi$?zpaqf`1`2J|S1q zq8i<{4*?picvgtA174*u&*EimTNCFlyr=+!8t00goyA?mYY&+r1EKv;p-kx{X&g62~Vg~AO{}s@WRS_>V@3@ z35Zc(NW0Vly6xu)(0dYU37Ge#wUgs%u`P;1I@%!v$DMTt*%3IG+6DB~z&OwWqIxlx z5fI^KThjX08&*4ua^{9NY#p6HLNt7l1}g_ZU|aQdSKvTQ%sAj5t(JGq-JY^8>(+nK zmwUG;pxl|BEL(i|~<~abIoB(!GL*0SmPBX^ai~Vwp6sNRcMGVI>TNo~0w(zw%{V+&Cy5EJG+U6qTqgh4k%Wq@V0sRkH);%R4=l`x7jLD73YQ^Jz6ej{ ztK*=Gz>fcqTpp#n`wB4iv8KNCoJ@4+^`q6>htJovIe#O424bpaffx(k8_u2_U%PA! zRIFkanT%sKF2l@-8O*Ol*Qd{9l61Rm*CHCrnZYoP7{njD63o84c@QQ)^UJrpd9~yH zHZiN(Z}dJFR^FkCH0_KVqeiPPA+}LIRxrujVRd^v4yALq43U@#U8eRqhl*?fC4=hI zuXrIN!B&dCuU9)?atZ>&jMJ+( zitOJkzfzPG&1S~?TnEh`A(L3Oadf4aEb3IKNB1uNQf-gjtv3e~2Y}aR5eRdc?$sLM zG}Yrj2kw6&r#>NUT&}}MJR-laPY&a!-pT2G75*hP_-47pbeO{VwD6DA2L#tDeDaZ$ zl^Cny|6=j_gs>FPM>KS06V)1C!EV^?<)5z`xktF`v2aY3^u%+N?=RT`wTHp8%OH31 zSjKm_>dE&dl7F8_ut|_&iA-ubw@89_d87dU+|I(!dM+z1_J7Tz+7XIy)stI`|Lgz4 ziH&Yly{F1NppkDX%UW^@f~0j}@Fdc<(2y|}{C}7hfR75eubFJ$jx+sDWC9=i%a5kN5OyB9*ivz`o6+TXZB)Ifa87{H zi)+`;DPB#?eAg#G3tP9wxj+|yn=x7z_y0u|_rbfo4(C&=*q0m2-)&p)kV42OAIHQr ztK#_$7HPnNQeOBOBMV2;mDFWxu&B&af#&YdxE+sD8RUDxJwow*op6n3-PpP=mxahZ zt_GuwN3P!nnw0|R9xvzAf3ed(ycYj;{e-ZNd8OrJ{jcRZ@o_T&T0gNY4a-h}f)ty0 zwLFrdW~!zG-(bQM&ZC><^^c|k&slLMZthm3)7N~ybw%%IrSpW{HuI$AgPH(Ba?cA> zMGg_$Y}c>Zl%)4Jt9soFaK|5}=#d}CtK_u)Jj|-2^IkX1S+J2w|L2Y}AyfX{_rGHq zcklF`kNZh+P367#Ae%($^(LU>Twb$HaXYx^pq1MBy^yn$jPTt=2K$rVdN?(FcqrN} z``iF}W#2lRa~636#PLMA-7<8`9bJd3zm$GDcSXJLU=^3QyZLg1X@SI?sr*o$t!4E) zEAp*Jj?WF=Xnu-UI!G1A|IPfXI5ly7VP?o-;*Ho{iCgZnl_SrMR|K`h8oXFmbJL>w z9%q%LIzAWqd~)G=%^Bv!mtsAOwIixDS22C`iGMX<8@@vmJ1(KuxpRFPGkGP^_XYJ? zRq7mLtQx#?mLA_i2zT}z&s@M@O_SXExDzhKuUJSyhUT!gxI~QX9LW+)S}%tOkrkui zn#F{@Yt>%OjJsz?aM?;rZ(>-hP2d~b1#M7Z)MYkpEIyU8o9gy+^!qV>tJTI%;&@-d zOTUhx>DTq0$!_es5>gEYVk7m0J9(bIs0O#SAGz+6vInX6CFoOK+H~K0RJUFH@$QKz zeMIvdX3g-IiqPrzGFwrrHpdKYrZ=|?@X)0cJ7RUWVm{yJM;^=@!}GvRS|cd6J|WUU zYB?)82OYkwhK7Nor|linMgNyvCHV=H&+_y0cjYo%Q`ftq-znqcT=x-id-6Eu5B)4w zZF<2jH(o-EU3okNeWK>w$;&t8igQ^`Z%*ePk;u_7R%Uh@%J~N8(&)CkLkCHWQZ`3J zR8op?%hQI)N!NN@1YMRa#D5<(Mm1&|O0!Y$hESPrbAl}V=$ihD_)4vTp$?0yM?kOpvvg(;X+`y-?4?jX!#?HZ$}?nJ#DnTKIk1jeC^rP6?jrp zcbRMaz0tSWsVkLHBhSeiRb9bDg?ekE@|XuJ%A`RpDR1(D(l1rk22^W(hwsJ=*-qQS2J?2if7P z6uaqj=vEXIy`5iZ z-eOwj`!tGb%u4>3t-`sxTy>8PA9(n=7NsN<*duQ;(wPQ!Q=KH8(nNp47I5H&JG=yUNORDra zI{EAtHybu92CJpx#5hNlh<>j%iAk)z~MVf@ERWaj6h|9q)SNC5yOtP zb?qbfirbA84h^{DBRw;A@4m!3&KmCvWnRLCI=I^V_hnNEt$rS!S~(nL*~l9yUa5R*0@%|XC450 zm0)f%TONbIagIkko+Ho+S}p9_uwbv8K~F$@1TSjq{g0p(m{TIbUH~s8LHXYgR#~U9 z0oEn5zi8-?iVA$3IqaF^^V5ZDG> zc<4}hTFx+=!eY%PP;xkZ-T(Yi#l~gS?2qc3gu$D`XLb1m=wtf3k_3ARz&jFA5ak4$ z!-$N_7vbK{Lz8)q=CiF%C z$8#YqccwZ$;!N3KV&?>)ytF*|^5eH^mlT=NW?!_Tikzt;4H z&%WAyZ_Nx0xO2cSzR6z2x@s;i2UNT1rnd7i4seb^1cCzQQ}rJ1nW>wa+t+;bIT7H0 zMTpr}f^5AWH0B{SLKCO4gs~aOM7(-=1v=gR)>PAf#$A7&#U~#xjFP+gCg?S=(vD%a z6buOTM5<}E8fs5w_@n5_(bjxM=(P~np4d%O=-Hf+950J=5=ZOtJD}<=c)x6H+bDfn z=!D^zZ~(7d|9@o*FteeB`)e&hfSI0w4tQoKK%Pl)xEu{zwn6}_D{%#41oS=Se7479 zDXTepRZT%##{AQ_syz{Tc)-W`l}Jjh$9UYipvM{)GL`@5(>(n*Zj9IinO4=4#~%m< zDZ>k$Od(i;zr$ulLhJ|$1VH4*cS=(6jJ2~Goi4{PgeXZQx( zYE~=p=h>QX&}Nkv;^g`~Kw3f8Fv*X8!$4&$j}I#^14b*XEMLpf{)dM`31i>wZiZzs*e;*!s@HW)s{3*yR7CMT%7M zf!#1VH3i#d9@_7Y`NA#FdsGIu{?z)YyXY4Q^$vv^9VN4HJ`G!#0&)HH<~{u*^5!(C z;kgZ}9l4JW_f)lB?9APmex3Q8#|`%@EF=rWPOS_E-S+k-2@(X-!wG_BM5q5hH6~9A zt;tMb7kaTS`Wg{xxX}=>3=;vYYV3m49DT3j9o%Izw>bd(E!V0RXsv$3 z^bS)fj<@b>$gn36vbq@~M2#Vz@jgIhXj=e#B*GU477sIG=|MR4{<6AQ1Mq;SwwFhG z@0r}|asklZKkmiyMLE5f%Y&Uw$j+;}64{?tkxF|5yGLPJU*vfEUyK68q67S*zQ%)y z6gG?jdD9!sDzIrk~z}Oix5S>nTEOUuBL%D`Ojh^ zLBq`DY-8EJ8F*tv<3cflhN%D>z<}&fga_>XMd)Yi6lYUOIwzXP4#7 zl;egMB(iB_Ng!x%|Ie5da%Q^#pW(UHFndvWF(4uXj?LPBLWY$C4Rc-pzAfBsISvawQiI?+A3(T?iO)a^4E1}(1y&zCEKTy*IBVB^ z5&A&#>gP8x9t^ixBppfRRUfimFZ^i<6git@yOY$qtuv7sqt%aC&TC>Qo|h#iCT_uC zppVqyvVW*!}fW|?TEaeWplC?%UPxO8w914YvoPhUf*{w#^e%+>ywyeW#x_KgE&I46lTJ zC&ktB(l>N5KA_nl%gG+9ZK zc2acRq4INq6>mfpQtC~o3Qiv(1bLEJRt*1F9j3WIMvClyy=Fmw!*J%}O>|i%n_>uF z8MRRSjVy?w-w-ZyxRw1Ft15^{;;0XW$qn>LW!4#7!lo6sbnL@h_MPD7^6`pWGQU+E zJ;`O^PqtYyxwn$LKzjEuFXQ1c9NkofM6j=(XbM@lL**9O3&lu*ys#pVB16!yOSaOB ztoU1}537c80eNQTEgX{<!U<{y1PF5G%LScBKV^yFwf*^yc4~A50%ROY0LUmf zNcLEUZRYob$kzd|za%7Gf%~u$B0QC`Jm4tNDsqH{^=?j8cquF136-!0nX<|lQ$P;b zb;Xj#-3-|s<@~ff{?5*B0;M~F2S*jssM`R07D}y619yT4Av+P@ zmZx!w75e5+`ZW2@()AnTK=HUAfj>1w<2>5r)|vvzN?6@mC6I;LaV6W&x&~rsOr1XS z-LXH18;BS>89N}c3w)tb9^RTWBIucbJGNb6CG{A6P4h!KLF$aES;fR zKry-x*>IzFcXwYFu{7B6MeN(u1m*`b72H@z+M<;n=Z`L+h2+{bRuQ_J!k=6@viR+< zK;}w02k?VNE(%({*kd`^fO1!^BDhU>mw}<3zuJVv-omWMTg&o0afLQJO6&$FQGHF2?MJujEx0Vz=pW z+UgsjB7+dO!qp!Hlw6JMx}`U?6n0v21(!J(_HmdVd{&LQMyB#VASN{C4J1zbwTkOXb%Fh`$aGFO*e&mp_lTA*l^^ z%Menr4_V0FAad0YE5G&f)d!hfuam>nDeSXo#G?ePK|WiZoDJ3>Xf?qiqO}%NFipDE zc@Eu$U}m3f7qndOm^LAwimzEB}zA>iiDK)nt{_Q9>Q8scC04D5Ss zwqQE6O|fwam{EmDz{iSkP&L$CU-Y4`^1PVLQinsV;{ENB@17Xd%29m@qzLNtdesnb zKJ!V0s)KyO_ZF{Vr!gW@Mr=o_Rx2k~SlhL0i#GH>cDjIr*ozF;glnK|xSB8Yv#Dj3 z)I^}4M*r^m+j%!>O*8@PQ7$^pO8Nrd$Ko<(yx#tgdr%b7?eBX&O%pE&M^SxWJxAYD z5%?QP8dASqZ9u|&5#2Po;@Vihl?@y<$cn$j80j=HuEHe!osR#{mykn94MRf~Hlp-Q zukbSaV4*?H>mQMyiEAm-_pVtGvT*qGn+Td{fYXSzZY?PskzOLHU38+OMK%!9Hl>bB4#5&6JcuIPAnU#*|umYM1 zaPd6vZiEG43BGOOSdJdfZvg5IVFMYKbIZE^yaOp$eg|)YNhFVL_l#RTdf3vB`#PgtMX*=(~cV>DT=B(ox+7)_Jpxc!gnxA zeY{`d@l$tOCjDzcN;0F%es@eyQm)r9)HBCDZhOI|9apPvBlWK%L*c9sB$JJG$Ul)r}vpas(5e0X)oUGN5QB+cB~xa0|iK8KNtRFIW6 z1yzyy%i^3c<-RLP?`=T|pjpA>qE?Avr>ZST!D-JuORX=nOl`Al!mew7Yy5n(N}MU4 zQMaV`;mR{jG(SvAjAXqr*)zHcV2IboG*E8ZhoibQEiW42hl5J~(D(_7->C@xdT~KS zcy*skw5t_Tp7;{N6EoyF=Fji&yl=Tb3_7yxpyX=dt+l6`>5b^>WX1$aZ&=XxrPIQc z^&S!kWYD;QpVpkm`-P3L^See9z^~!0yl10uy1JxgP|GR9;Z*z~%@^#J!Q(-;fQ=2G zcRs+%Fz&@~D+w~6n~Z(My8=1i$;o)8@+)(3VkyyZM1#&jaxJpsVb7Zx!>DWDx)jRM{y$PL4ly)m*h7(itR#ABwQi` zKaqNi4G>Y@cv^ZRd7`psfgCM5<-CeFJCPqRfgIPOcR41m^vp$dw8AyF+S1bSOV`cK zWb}DkGpT1@f%VwCo!Yq4szjdl;K$;Kue0O38#e6~ZFPa~4aW%Lrhva8V2Qp!6I~PX z*p}(R00mYdt9Ie5n`9iBP#)<@ds|(w*Z)LiZ}jOL!_|qLxZB93pQc9KE^M*tHgU#M z_ez1C=f;CF>!ES!eVfI{tmwETl#d=TF$ow+airnQQu+WU@>Nppfs0qhVQ4Le?hHK& z%%9#}+EaM)5*K5gU5+kJ&9(WbK{Ru|M{Qi|mT&^`QL(`H0_7X$W>(qdGCr6Ps173p z&L1-adr%L2k<_IBgpzg;YkPO;;niGM+Ld^FgYV1BShRjTI(;MK4L2(~CLHp%v zeEV?=EBkrzHRtjjp_kk^*ZAi98|1L>MOWFUd{0OS>rNIKAh%y@R}=4N>Ix>hR7~5Zq_0yI5;i^>I)O>i*R$ zyEAS>HFKsZhiDk)Zx3S*E+=C})MTx`s5l_-hoeDVhu~>j^(}9TiJ{YCObuf|2DOk? zA^JLd#Gv5cWh|3i8r1I2k(xm&L89Ez{&UKVcMj49Ka+SDU%5dCftLQ)&$;Q`{`i8a zlmFY?F82%9T4s98D2+zOm>FMDzgP3`Le1VSC*w9f7%NMDgsM3OgEe-xz@1VXr?<75(F2byVB7Su>*)jUNHWrDuKUp(XGl4WkgsbA)pm%za zeI(LJA5^qbGWjI^7OwE%w)0Hu-YONwu~1-}y@!XN>))4zDpd*jJTx#*?vL$BGRH2&E2c3rY3sR`4#4$ zd0o={o#Z^#$AeB=na3n>EOei}N|YGJ^mPv5lOB8>sG{{6pBlbROGL zU;7a}fD(7w&e3drJ>ZgW*GG4uo5uHnw%CRG=wJo@3ff4P){`-7 z3n5oB^BOR`l9QCsY*t{p9^%f{aJF{iUuQ(=Gs$5^tLh%Vd64a`s>f0cB>D+C7RBwx zZ$~hwG2@7eZ6`?!X^QpmcsD|2!(kLI2$?zuk;FK)YSJ3g=caM_q3=CBe;uL|{j729 z@gm)ff>%2ljVP=s`Y(~;cc@6tV%6nmvm5S~5^}8Y_KMyXNZ_{`jz>5d9d^IiwnWeF z&$`R5Q~rNQt7}2b9N^Zsc61U-({;H_<_X?y`?>p)#O4{~;RvInp=Y zdqyMHunIinufipg^_xC@0i&0Hp1~j=&8e;FK?3ywMsOx7Eq7;8JUOF-&?-n50Q@3L*J_@7_UUps9Pz#NPM* zYO^oe83t~|!kD>qXsW1(g5LWb-`8al`Aa0SI?A}7nUrTqjRM<51Fi48l}md1jDUQz zZbQVF*jFme5u0CQRYtMHJy%MK`cw4fAO1f03@o4j9?aQVyY|5-m`J zO|e5CG_Clx!ON>`A;tY*!k70*patc*uEnHFeuKzgV3Rt#6(xyEN7bTUU$*!L(X6H@ zTy7lB+TUEW5|Ik@mkhRRqHGqyd}peMPP?@6-o<#ISENEtKzT8 znHJDhmW+kuycb**#KV@ETT(}XwaHi(7b$a#X+`D&f#EO`R?;bR1m{LDmYuO@Z=_@f zcNoPI2zM44qtyf!rNQ&EnT?~vt3>2 ziQn9$X@*w64!IxkLN&HekCV!mqQxXVV+@6yXNsl0E&L%$>qn@s0g)53cf;!%9z{eE z8BP^`Ywfo4W3RXb6~W)ek&b-P5ZHmR;+d({n_<=s+0?{=aV zMsb6p1(@9IV~;?#Z|dZZ_Q&{dPdcUv&Ql%9Ohty@k*Mo67XpI97;M^?DS;9#Dg_EF9winEr%{lL&%)FD8+h zgh8_9Iz_8*n+G%@6AmIb6tV33WwTI_911)w1W#-jm;MYN8 zGJYZNwpfr`(Z zc)YUCjb(`ZJG1wfUH$+C3g&9GzRM+cTsN^a5grPKKb1iHnr*g=I4c{)}Tk;;U_@yMr}- zh-s{4&XU<#*9sWSj3TUNHq+@s)xcMfefO^DGP@J~0@8T+J#$~5e7qz2fh&V>jB`th z;klD#_E{h3#3s%?=Q?w~6XD_}AIsViYY=s7w#yoBC$yo?40X_=n>R8DaXsw0#Ae|0gw*7sT)d!LStP!c zpH2YI{MmlLIR2C<=``t&hE79wS{2w7@Pe)f5sJ$A1!9w>ANxOuaS`rP_}$)i`4=-q z=&SF7-OnD(o~`O`#7~*~9?Ws*bJQG4TGRl@s1A{8M?a^K081y|;Or$Edt0d%Z;N%x zvFB0N1PO6EH}tb&e|HO_ADKndOAKCq_JD@Y-vNa34{UC|7hjpYsq={?a^zE+%Z0x5d~`P--qFxIxi^;UzM9ih`>EL)FPaqNY_+TAq{RKL zNY^hJ+M`KxZQ}(KH^2M$we5FiGb3Q#a0ATB+2f@2>BwAgr8J@*^;6S|ftR@bQM|%=&wWy0t7@ z279IE@a(6xEG8R}j7?P(G!yKU_!iTznp5%bFdk-KW09O&QYZr;L}rHSS*G>shkPNve_r?dCGSRm>`(|d9l zRE>B7VRvIUSK>|duqUHXB8zp0FvGr|b!6fnq+8OKxVg?oeVc>8{0NM0auzL1g7Q*pBo9MBE$)>nPAUD&JkCvYm!EIXISJGU z{Ia2S`mF9eO^VB{_?DTU5=UMjMBydZhfuwsHMl+b^A#3_>$kvLixO+3-|vY8Q=p0W z1zh&?({EY+`~qa0fZ73#S3H|1b1u+>#` z@0`Fy#ps73?cs-!VeMI$$g1m@)b+qdX&>aY1#w&$7%7gMzCl;_V1m9Pqg~<5IQV-u z@5TFFlKzXQCsv0bx_MowxR`Le`PY~u&bVEVeYs3WS{hek=-I3g2KyGMuE&YQOdlm- zBoZ)3J|&&eZRY0-37%}eeF%LBzqv`wE7BU^VNYc^)2f^xqC3R$sD9L03-Q{BE2kB9 ze66adTzZcw-#5g`?Ptfz)e8f+Qy0Ze^k+q!+_8MZ+nz#Ds7=P0CKhVa z*|B~bwcgfjI-mY7WcI0&YH#_~y_BL&y?}K#wSj8ldQ&kucm>SN7%hW|e&TzR!t+6l zZ<97=v|Wk%9J+Q!dMlT6R6dkZc`PK(=Oj^$?vFhC%*QJh968iU?%E0K>)`4oG(&}7 zLEmfwJx^-jLm2wp z*&4%~dP0DKdL4ECfus?TOr6!5jtfzt7xT|W5A$L7t4OQRKZ|nvM%o$4Gf`~hr=mcu zl>;Iztsexc9^B`7KfaAI_ZpDaInM@SS_ZdosmKDKHIz~V@}JK)yMV(6mS z4w1lI%RW=k$M=RF6H$|U!dM|;4F5Neh=7gp?^oiAidJa1a!*g7SsWig&KZAZIXypj z=gDn!3{;5UCy#8QS+V9Y;cHEov_2ZVyt#j0dcx$#`@{CuBeR@hT`R{QQE^R?XWRg= z?*ed)0#mGi?uH&p{TcQ#c?min+n*Cs^v+SnU+`XxMh@t!%};ceb)MwdVb9y#Q_GSPo^VTlTZ)H#pzX6fFe%RCN)Moq)Ei%C2Slt^zKAi+BEEQN1cPR`43pNCcE(MrWVEYPb}^Nl;2@^eZ^knXZ=(5 z6p9UuH|0YDmq*?A3t8!#7j;8$rGm^@grCLxW;los*)%GU#BxJUw=bN@3X~Vfua>p2eqGM$+C9YHNr3J2ib@XE#OP?Ee~}>L;?hSUr?||s7m9_dwo1MS&rF@3W6;(r<6j!V%%LlgajVeJi8nWPe9FZV!?K`1<4O0h(_ub!F4^=~3#gb3f8Fu7e>tgL+uA zMN3`>FRIeHK=@kA2gP@%cPufH&#S0mM_;vz<;leZ(t1Cq%&-S-B97W)bx?p`L}Fv~ z)a`YPuH1Q&z=i=n<-A*)ohsc%&r~+r2P<}G)(*pXa}GoC$@2vbs*k>NY8N$Rj+MIE zcvZ3YOs^sotI;f_@B5cTpF?>44ObcLcWrudcIR~?kp=-eZ}GRINP@c-1n`W2rQ!p# zZ_NQ_<3$Y#PI+-~VT;^&F@!0b_K2idnm)k&m)oq6ls8%njLr@YeH#(9y&<0$&Vfi; z^ne0$n=Yhs^FfRY_CfJquq90y4gADS*9gR3nylaH^u%CBS42e$4j{5o0qRnJy{rA& z92tKKnn)&e7$v_*;4!6OJImwrLyt4hRo0=MeyID`MqZaUnwP6R{YkvI$B#r+ab4SM zRVHyZPRl=rRF?hRn5v!)=&rzT6_mg9*ni;;ZIndtP$wdk^ZBeZF;mb0AfZkC0%EVc zy)?+-ItA)X2f*dWj#I#H8f$eK+=0i~8k8^%-@oFQI(+@4~lt=e1FXWd-n z(5*}twnKDRtiXfW@k%I8(94PyX+D&-WToUF-!_|;yK`xoX8v!a$zZhvSF3gaW zJ@1bZW_&*TY9~yvPU{y1TAx=j!?q*qm2v$_PwINu{?u8qmwbKtd@JKv4@=uj4Kwyhy}hH3uve?O*?n?b9m98sz`6 z_hYEjb5a0@PJRUVfA1LQpsfC( zxVdVL$`Q1kG>3=yAryXd0}atI72J5+ApP)ft)?L@skj_FJdgQOPq-W?1O&`(z^!bqs3e+Lj@-JZ4YyyS8v=X?}ejUbqA(D#3%w1@sC}Z%P;%;w>ig((a{WSc+4XDV7 z53*TqvNO-@EyxJ4C{DcgcP(WFN#0UihG(LT)=|uOTTJrl!eLSCUl2l?7zC#KDP}uA z>FXDogVG z#o4Fb)r6#EgR65Fd|Xn7KQ!!Dy`rt)jvOw;)%{sG=qig!!okRvGP&o!3Sz~!`Np$E zv3G^3O&`YF z9Rch)Zh92Se6UZGtH3ZaRBQ3o-^$=4Njr;$%1@*UUswCk=cDoW0&Hgo(&EV~>9EL} z&e-;fZYQGyo9mahZ(q1M^h|oGUBHS(z~3H-J-aAfT3)l8pV78Tu@m|L!>I90vI*gP zmx*^pr!kYX*$uJn04)18Vzx2{BJ+@;4E<{VU10A$ZLS7#h8B7j9BWq=RXTVM0z7Ath0Eb#|>-1RSU(l z40aLMoTsg?HkHWWSjbY6^Mo zd$Y?!qUg<^U+NyL#WTN${Ll$;?DP9tRrb3nP7j==1^@Pkv6RSZgV?R8>d6>O8p45J z--4Y%`1h}G5XW;FRV0sDn1WyD{BcRUfSYTMIDLHhe>8n%RFqxYwgM6Y5+bSO(B0kL3Mh?q4PDY9Er@gr zh(mYR0Mgyk-5}i}g5RF|dB4A|rAzeMd!Of#H9H{VDc%8-9@Qn2!6u8xT<`UN^f&{G z%R_$1hc2K2I{dH!GHBjRF33y&@9ts{L?Yvp(fI0qY`|L)!Ykj2{D3H3oGCYic2#5K zK{ENQL)Pl;<|lvYUF5#OH=~G*=2&(sHEQ*)*K6{+RY3y@egsGZ-g?Qrf$i_>gJ97`I8_>3zt}s%jK&ywF-Lw z{q^FQ;|7R3JlmyL%d}R6!h>!T>4zE$+^co)N&0SMSV17jyzQIq(;2a=pPENP`0Q;U zDaaB;SlBKBCQd+(ynKD1g(Q6*=v+eT!k$QR`4B3X8rnvwcRS@4i>Sau|33kTf~raa0qO6g9A=`AHd~vSVOA=Jo2ZR#Ck8M!MM=Rdz}gIMjKr3VFq&2oH6a3Zhyl3p{ME zm+kO*fVl4;)7$%*(JjItbI~%_#ge6yveW|i?Wum8~^$_aD4O#KPCLyq$^B!Bc15+ zVJMMNrBGamQ@qF-sQhE(i~~SW*0?pvXewt{CHo~Eg0n;Dep3{N5>ejgMn&vmlZIDe z-5=;(k@hT<9t;U0_3)Hklp?3IHwKgM{IdR9;h5`tk|OeC12l2s0$qxwh66|c9nFhz; z(gZ+DSMY(>lg9n=Z^4My#9sSUM@mS>4nRfkKExWJ?US-6LjLwJ_wvFD5v|N!_q*U` zP+1iIltLNLp;%4(fuh3;{@b*m05f@J`#em7QyrRwR`tG$&XmQm{c_S-WWZZj*)i$A zPnrb@D^NP{dT*l3TaSBh1pz<+v7gS@OY_AEmm-?L;2&?~Us*7pM=O|0L*%`(Fu7mS zPL3Gj&loWsjCaTtmjm6ojW{&FTAa1yzc1TMo{}BLtDC5p7}`flNBVaAm7S>Af9tPH zkVF*W+u>jwhwMZ*7IN;9^iUrYtLh3w4vGCJZ4ttLvfv&vZv-MDc3=r=)md`@6Xr%- z;LsZc9Yk9S9vXRsE;J1UMv~Qro^|?w&RaWc_7(Rr@qfO0M+uPgG^;Gd=HpIU=6JS} zCqqO?J)&h7%o7RhZo%i2a!OzDFrn!+}L0&tNkbEyW8ZR&bL9X$%UJ zLIq717uIuyasmn z3;cTfw7O?@bCn&LKo@Iyw$YOhUT($xSc@|5g-YtzF?fYWtsk2%Cnt-hb?a;)id$eg z7yP>uoM`nfK!&n}}Kt6C-rd|McZZw}3dEA1i(1RS%}T z(16=tRChT%g+K|;Nj=drR?}ZLU)RFFXK2bjN|Rin)!>bApe@ssRUN`al8N~WE(8yW zOsn*dRAo;BMO4o!Pwhb-7#qfw5prtK{7XqPxt4#L;@r=*@WB$Q`uF zYd1>q+oICNpx+`duYI}<4#A5AG^)~Xk68C?j%@YDGTY~TPmdBmN^irz3t9e6egDU} zlwIHa>wK%YN8k@NnwICf-wTgc=x)_=2OXKTw37MY_#RJO<37nQ(vW?s_Zf=&mw0(c znAQ-`wODPzZ~sLl_r{{ZabY(9sO!&-8JmUA;r{Mtn`Vlyi?v@=`?gsJoX7XzX;Zli z{+kIHmXp6sG6o5f>RRLL;iPeVNcN7l0vgHp_Cm@1km|z`N4 z)7LG|z$7*A^^%?(cyGuCoVSy-)4^Ic|0{>zZf=~t1hH}>)cgZ900CM!qJv$5ij&Rq zNw5C{G$FXZw^Mjma;A{jWvb$da`nbo-nVrq%lx+bIb>IAxi;Z_ReTgzHJ`+`_5}H; z5209l2^Q~qVUf9P5E|z{tB@6O1ep7WW-UvZc3i<&9Xj?=P}LFn7B=@sQ%$g^%dP3^ zp;z-R5cwIyJ32dAHhj(p5opluuf8;s7WTS>=EHikr8expm*I_z%A0Zu2RTIr?kITb zdOU+65%EdLB1o07hpB!G=9f;|Ea~=Hq`wP_G|Jw|EwUfPqo%d#tYALR2h^|O z(7?ob7fzfN5xn>emA=yv*e_7!(IDrEwbxWX|A(w=NKrb%+(FJacDiw{s}M+>LwLN> z_3ED9d=t)dRKxsl39G~aw5gFPxerS`&DtmCU!)3$E3Hb%Oi4-eY)1}?k8=zhn6lIKnU}!eSaqORZ%0zc zy3$Evm1#n!l4=b0HM$GlLRsXDTBP{8FH_thHAA$JTk^=XwD7Nwdria8Q=hFR? zCZpM0Gc13O(580AYli>6?Y>MUgY28y7qfG(1e86#c+BhWj|q|eb z>DD0_qq@j{HLJ$=_F=ohIscDG4BB@76&Zgi{}9p071XXt6dyuzh7mCRZJ2aTs$TwT8?aUC!u+xv@ z`!w^%bu^lrtmyeN=1FSqJDKbC3e4X_4tgh!D{jWJLvi(o)l*JCJshd34@<9RUtIMZ z3pPhAdSbD_9`Z#6uI8zup8K=@8O@WMOYEoxFudqq@ODH${$%=Y6mXl3ECK1PC0L(# z0NPtGC}I?3Qq zJ4X!}DS9%VkAp;vYVWG+F8+TOfOVYU=?`S-tAeSczldR-myQI*ox4%l2jV~MA@x!! z47~M61Lc?T%RApbA6k^W4DZd9{r`R zn#CWW{mQt>Zd|Ew>6q~Gi42||=tYAi4y&Z{^<8?|S@(KNBemvm{?3XXMwYShqAiV* zA47RFxO5ION3(}{lfNY^GD00*d?H>FzMf0aJN#E69OEP~^gh_L@nJDSA?dBM>X6kLFCCIbLL zgp1gULkJJc)rvxWFS1dpqG>P4vK+z}*_#6n?6xqXs!E9MWN#{`S!v8mMabE(dAAQp zALQ8^Erv(uz%*rZE~$Q8A*)+Q5OJ2{L5k-AX(oCCW;RcRd!v6Rv0zURk@yrQ`MTc> zZZOAg#JBh6=5T(>(nY;#oq#D8whIn)^=zJ;sy^&>&6X_GF2OG?CH{u1j=hl4~r12uOg3$jk0b3hx{Q0 z?J;|^UF-b0J_9zfbcCI;?c`ic`SKM?{ejm%ph}pFk#>rLDeMd5AN>y<%%cc`$Itvg z#$$r<$}n{E!anNx;|1^@V<6T_`7b0|M^NL|$;_#Dd z0Fc64AhJP$d004rH;VlZE+^!B98N_DBv2GREQ=IG71%njDTi#d5vN3n0tvA6 zb?Q2saY$5MUZ3$k-coQ(Tz2_ep=+IECOU>7|_SU5#kn8$ZtH;EfvCfwJm z2mQ0Sm$iI5*&1i}i92eiEXcYeYx=3qWpFU{-K#3;-M!vJ43g$#kLAhf7F(Fgjy7e- zc;{N5q1}DDzD3AyFTSBP>{tKaunCB`ueD-8k$k`P#7$rEV5=Q&mz2qE6+`r2YTztw+*c| zrS(rW|NV=kA&g&cRue#M(M)kG&V7}Vz4=bgG;(X(6b#V#2#h|+jwaSo9r`k>)8%`& zumkmp!lNttfn$?X zx?~rrFz6!!==2pfit4!SOsS2w^DCv9*fdgcfB5GG2`l{1b}%{oc@U*#FOHv-a0G{7 zlW@rp9=Q)1Uh~_fQzeMpaH@6_%j7#HPfrP*8={GpNvqv=-o6QWx&QI@V%YJ0EA-(M z{h(dD0-X`B_0z!;OmPA^Nl8!M45keJ31UT2T+W7xD{kQ5H`WqAarUP$I;;a!ye_U^ z;B^mmspfu0^8b+^5nm)$fKoTSp)Pht#8cV;#5^{g`IPH($NT_UYbrh* zLIx_BRlbS{!MoEbPXZCiK*(N4U~w>FPQNYq#gWFMpr~YmzYpi!+Lb_(+4>pZ69}o0)SMKGh(Lhz z64$u>6&1YC)cQwyxL2sW=(`a+v0j72s|ru0MZ~5xlt7S@$$0LYp+Tdk^FK`qr45P_ zwhi_`BbY}Poq7Hy)~fvx9@gmqNZdgF^K4-cmu3_lYl@G@0SQ&A&f@CNt!h%Awz zxoBKu%#ZO%OD7wEFL@xUg_RhWTmZJt=iANo;(_t#NrC6j2zgJZ4De~NA>CfrX7M{_ z0VqPbEG2D`{X18$3JRFXz;>y7}N zqmNEzn4n5UYZb7jCxU*N#@UAJEd5PdO)j24sl8qSF0MayF+rG`^?$DNb?Vnl3eYuq zY8eG+@_X-n+F+~@y<^-TcefzJqe@r=4v~;14xmOfEn8e?(2=-ieKty@SoNI}QoxSz~#NJUG z2}{Cb?&?y6(Y2g?ARAN{$k77XX$X`IUtw>xfQwS8)mUTB{LTY7jlE=Pi0Sp^hmt5z z&W~)CL4FK#iYx(s96Df{m{A?r%m~Eg^tY95X#7l?B>v|G;2PmF zF;gJ@RQgT-cWKS2M(4s4ncX3JBytRW^E~b2NGs7%8<*l7Y1L;SwccD%Wuh&ZOukVB6J^>Lz2umQenonsSm)XX&~wfK(C$VkDr-C3TG zPC$xuv>@9_fQI#Z=)$ht?0U8R_oI=$31(58;dT}tR{eJa7&5?K5CpKTyEA(qz2PoWO< zEq-O*aWXaEp14^w$>lTxSR9q3Q9NPw@%Sc|GRtjJQ88|&>RQeZarkInU()F`SM0(yM}Z5?|CNA>`QW7U z-e6+Nhx{1HMaB$t34sKsl{$c#kqKn#$ZZKd^8-|5(`_eUGq+ork53$8g#V38v~wjdYyZdJf=gPQ~?;Dr%ev7G2Q|;fZWA z(mki7Tr~gWuS1PFm6ksWGMCr2?SU&v{3Ko%2n=~y_3JMi{sZM?Xe3N~K+MU4gvy8g z^C-bzh4v$l(d^7@e-^HNE_dVr*5*zua`@c41)#$bRP5fnj>YqW`Ec3qt#Pk;fL=ZQ z&h+azNKj?(A}aeMsRl%;H*!;KwAEvrVBCOx;@Qe==uCm;+k-@8lv6Qh);;G#hoMV2 zZja~WRzl@YBOi{rY4>IUZkgnw-*E5egAsNbnm2T5-H$5h>*8s~LA!}7=w6!(%F@!` z^bY8!3Ww>b4(;MSh8THPU_`BL8HNS9=hhT!MPePQXYh@%7`^oJpynb-i$Ej`^k2Pu z*2CIY4+1+DM94c_G>r25RmR20o8k|@?569SsA%Byk)JgPIXORB9@+86(Z7O%nW;LUW7+zsVE+3jZapaps#Ip2`i3oh-y+jp3PGx zDmfxA-DT56l%>x=7Y!-+!~xxB8p6B1aYa-5%CG<(_EDmUrfebtG2@7$p4E@mub46g zCf!s+h|RXJi*T`)=RrKvtqJ|!rR3!)F6H|5@n>T8!H!@w`Vb78M-f&$Ke`)c0NFNH zyX-B8)gdQuFJIi&RX$9hD}J9!60G@({?|F1CvzvJ93C?-^c?-B2%{_R|sk z1CuZh7}2~ZW0!p|MrN1;Pcktf-&i5*-LX%dTFJa_L9Y8^S>G07|Y;4OlIYERo|7gUtQJHF zsn!#ePXoc8H^l~ep#IYSl0YbHi9NWtH6h66j2g>f?5E3k*Wc`q1n7)XHA8sIs(mxq z((MVk8bu?1mq%kewToOQ9bfg>m9+O?L=nlk7yb)h%{WP>@3r0x3s4FDlmxWUv$E6b zwWnRxzy7>}ATfp>jlK7YFRGPw$Wo8rPxi!<(s*7a+m?yQN>S36^50Bb29a>9i?J?% zyvw;l&jKAulD5$nnI2A~PoF_@ahR_`wo)3{;TPqimqFV}*k2T42*DV)NZ&YG6?lWb z&-q)BX`&Yor~9xE-7}c$l;`U7h0pNlydV?#{FZ9u%9kGzNup#~fRXbqD(cY*3zl)@ zS&PTEsClb!XrjmW)h5&<@W=bdZN>UeZ{u zjlvZsQ3NULf|mvJ-$Ya8V24sW0a#Zz_Ya8Cs5Sj(z(AG98UM5YNmP{nI8A7rkd(>> z3C`p`tDox_R%R$Qr|F=TCak&6g>n19T1dCR#a(cK$OVrCV(mV7m!wtoO5beZF3 znd2r0jCHy_<{2|C+gL$41y`1Wm$j%$ao19Pr(j3HkR`&FCK<%6evREcItwA<;om?|3+;+isOwfD zjo*ssV7%R*Q-#NR;xa@@cUcir4!;rXIBia+NV6A*$yOYi7$QG| zLCSa}{j*X0w7b#Vtej@W3Sm~bI<2}@y|oY9jwcBjXh|J5TvwIhd9o0{CzEdmSoTUI z75FfQ$vu!M%|V|ZtrtmjzAt}aLYh2qm=L`Pe@$m5q5~2lIMQ@P&}53 zN_vjs$-lmAHIXap{H4%kdoXMlZ>7u=tr=YWzK+lpdjvEjOvwi04M~jMbS7g%COg|& z`qnd=uMx}_=9=e{cbRpz^?G8DPF_(A8!dukUx2D&pDfr*Rt=UbOb47@$4LIy;?c zx<_HS-%r8{aB*zR^JIhH#q)64q6x}murWTvQ`>kd_X}+HmL_6|?Vz3o)6?h49qwPY z)5d_Ky4l0f)bPjg2@>@QTOr_e$U!Hd0`ZSbu19q>t!O)WvdsJ=SNoc?i|c0K-2*K%=~Fgo>%lhct;!M+2~rqXb_Ab%Y=z{pH1df(=5CM_5_Mg2Q#!h z1cr*Je@@}w*aO(~w+Sb1k)$a1Y+k7-q}ns|6TT-copYvl8DYl$I;ufIhaE6Fe0Q5s zI3w(_Fzb79MfB!C!?18qcKUFtUa@$3(EXM+s+f3IyV<5SJ>RUF*lXL;_c~1XeD^Pm zL+E^ObC_>2IXXhwR(=~ko+3WV;3^Ml+Qk>d60kVq&W>qdJc`@2pMHbNt;)A&|{&yAZF$L3k&T^)f}D_a~) zMAk^^a&yS(Nn!~qi@Z0CkF}Q~kh(k@9rURK`&eLmp!!DFEr!=f0gzue9mrtZgs{XN zEURRZD^8MD?1LCldHdcfj^sM~MLyf-OKL!+^L>Wu4BZM6_A?H=(aI=Fv^Lm}qN$t6 zYeIZZ!1Ap4wXg}Lvh*Y>oJ6kFjHFu)eiU*R9(s-$^vZ6QHg*oR=<}{ev0VGan~m=X zYf=v$v8Z?6%{h0|?=V&9aeF`;fAvE_nm|?A%||UEhbJPx0|2%>L$j#bO?p9zM20SD z@#r&DDODR&MgZA@mXliUlr6#nYXNUCDmors+09gPFvJh!SaNp+Xmwv*oiDNQ+X0L@ zBOE4aq<{}!`Hj8%i3Oef0}oS^#5cD?vyIAv;g5_H6Lg;HM<4dicJ>m+cxrn66Fubr zor#n=?z=lJTn(AY8ZA(;dH3;!d)V2qDL?*Rr#V_{6dzgH@oguFSxr$(rGZ{zZU5Uu zupq{#U3+dYDG6+ydjSAy1Q-V1E3?qNPmRVP;c?wj(SPZMCqhhu8(z87tkTU%-fYmK z>1P>4i7huSVQQ7w$hJ|cD#ZAdP=(Bq#*Dpj4T(7~=%r+Fa487-FI#^}Pxbw7R1owI zfDEcxGSnxrXjBczcLT6*iZSmvke>o{zSi@?@QETcv(>Yl_7{esD{UF~Eh}t>FvcUZ z#Fx^EssaI~3(v*sDL1jInhR=_5ii^h7~wR^MLLsryQ0KH;}iSNI2w<`$Q({-HY1}) z>Ps^(Wr2Z%GIsNk^Su2ABY!|OeU!6iVB@?0Q&>cN`SIuKpC=92fRDts$HUMrTBwt&}By>aBj@A@{e}r8X%7o6F2>e=r!4-8Q4H{io|4+d2hY za8&fhAcH44_I+KaEahs}47`>jqH~CZWD~EfsRuBhj*y;VjFC zO!BjS0{Fo5k78o=h8N4KNw)hwzZ{lyM6?4BYT#6nF)^Hnb8{#TJxr{5A2bvsGF&!X9wrm?#t~+*~~sGCFK9 z1flIsAaX;ei8sP9>#LK_^V`Smuluo(D_;qF)MhP|vtYUd9k;Eb81>4JStJ-j}7FeBd z;q!NBXtMmdn?O$!%@pQ_$5ll%C;RGh;GtRXTvZjG}&0upjA#EMC!FsA4D$P9*M z;3$0pLZQojsA%hL-AY#v;ZDt%p7*4n?7$g@z)BIIx)bQ^PoQ%(8GmB2!ARA%oMEweNWLV5<)rQXR6rOf7WzF1|tng*2;&7xe zzb;D7awjrX^68hGSRJ`b<5Jk$s$YA5CW8XE=GW&T!w7w)Hd^N9Mj?F&f#+G7YZy8>JyklE~B~d4!&R2FWkowJr{0uPcGGs zaMx}+!e8od_!;V5Rsc|4jhP>v1ItNSYQ{WJ3HXpiA@Yzu;x`aecumte1i`@|5)kdc zCKk($qQnc5K%VfYe~%Fw#El94=Cc4S?jc6)I5zj%fI_C{gx3OWyci13xwtg_CKSe$WiZCGk#N{;+siaAqXtH-v+!5hD2di4y&&A#8N^@kqCMLHJD z0Zk%fKLKT1yIP>SBz@>Jd!KJV)trnjSux!j6DJK}8TS1iKjX})`hn&~OuLw4?%Cq> zARE$_lBsb-|8p35ckCk)G2g}@>r&mC{8F|F0;C%GFXZ)~fx2>zE>aFH?SLoF#QLbY z_X2;5K}L^F;Q*2DfpBX$5SfntJHL~vagz-(&#bqgy*NO_+YhXKy7iVJG6*jld?l;1 z?a5ZMXP)_fA`+aaFSZ16&p+?#C_quMxGeB{!e>r_Qq}qxOv>f7TbGK2q@>i|;%6h&V1#Io5=5!Z<|;7G}S;?C@EkAoH1meocwNSt|ZwN`@P% zqh`$;5kw}~5#38?wx%uocH&u9z*f9RPxPK7HEz`XLc-k(giykS^yGAnc(@wdS&6qu zZ*Kl4$rM3R80@pYZ!T8dd@(dv&u3peS0DDw(DoSa`kiR-t%zU8U=rC#I0akHwqAX7 zB96x+bt3XXFKa5zX56_BmjO1K)i~A7ogxiVZ{b-=PZhPaV!hs<|zt@)VNqU67F)M{U znrO*X#{GimwnvC#scfi_y@})A?~`V=Lr_9=ESzwQaIn;6srv73P8?^yI(1@r{Cc3$ zi2D0-k4M_LCNo+UM3fJvG+Im;5+Y3-Qe=h~s!zXe|0*artyh#1z7(*NW_2i^IYaJy zDp_KGmv*EY-F)2Q|4nx=Z$7)AYjvSHcfX=87Xf+N*@oLZ-8Nu#$)uDFXmf30;zIr24 zPXZsg7Bx$JqwlVBRzghpUz3t<@&2Lfii zy5Bwdf>M-N$sUY`!{>YIK?P~PJ-(wWO*laEL_5_;Pz_GqX#-<1M2a#yea2Ip23hL7 z2c&=NbRwPbbXtaElUY8T{CgOSUkE9*T9`wda6)u-wpw;W+sAlk)9B?#Vzgm74U&bC z(?yzngRPZz@5w*x*@gLC7VWl*jk4U|(=+BzVbT0BwkNjvs=!aoUT25%l-9Kna?yG4 zT=7Y*!h~#Sv^Mul+9Ot*%6CbY+W5MChB8#m34fNEkHmrW=G!o1AQhZIl4+&Id%R+fxS&+`9 zv9%`=a(Ku$;IOC@Vw2}Dop8Wpxov#;GdB?$2K(d_{bAbDICllNvRH2+*01Q4L@wjs z^L!D{Yi{dWDLuG zJ*!o>*0G?;%qnV~U>rr|W`)ewW9M%HgA}^n>?OWz}*{5Lc zjHh~JGh$o@nM<14Pz;vfIq$@=iQKVoi;mFxbDVW^`9xz%RWGIDAt~%W-tM{j;B<-h z;?@9&HsZ%8Ke@)yNZl%oRDecUoE^I#pzYdx@pHi@0UmIVaC|v^lwNlT^t;$kO<+*V!Sm5!#qzO?Kg{De-K0zB#}l{7E}Z1ff;DT zIFlEp1Q!Z^hRUcp-v3sgoLVZ}pY?eGB`GYG>@jeWjS*z8&(GfHS93K0O@sV(J(sr8 zZA;3yWnSnO$hP=1&SR@Ju;k-NbJE;Y*3LGa_BLuaWB+^j{1{`xD!l*)~ zVpxV$TL^UZ6Z%P+(w=ScHu+n4IFOc3O^q6YGGpgEKgMRsv zbcZhmQ*!Qcr}u!|=9H1=AzLY7K16=PxYM}VXDa=ho)#MO$zIPc_G+Da#c*l+hA|N@@u@2Jfe8Qd7Eg)-v;I5h z3T!fnT0yJZFA36?th=IGs#&xfgKuKpA4*ZiWn3bt?E8JJ>uhPs1Qd3cRsZB@%2Hwl zamnhrJ`#cCVuwDYh+v%?%OxATX%AGB6Y{qu84J z@n>;M9QwcO^CjK-T^Idoh1Flf#bhm3siL3Ruq zhcW()@^c`eNwNJTi`4#I!$wsXpnWr9?|3YH<)i;?YJczWL-ojF?ekNrsY78d>Pu(y9N{4 zjoczTG5E_CN7?CVgh^B8^>3q9QN=ujIJ#p$$U4?j&I{th2}x2oA8C1;`}l{a{V%@% z{+HzSTyZ^V+W>|1PCq>4xoODbxXL&PmPjhX`wGHxNO5t!VrBd~e1f556yze56<)+t zk!C_WvKFN5NYf?ndw|(_rtGc{bNyf6g?|j)vt^aX8C0gqD3KL4jEiHMMG#O zmR@Jpt8J~crCzvF6g&c-a3WPnI$23Vu)K*B7tiw7SVDMltgZi`iu#_i(R4uA4?Ry| zwphu7!4$}t)^8BnN{>N5G<80FHc6e+S8TevTgzF$+G>60x}5qKA(RCtp0Rq%<;3peM56XI3_v z38B9rTPGcoSOUfND)l`m-!G%+#=%3GL9geXDDo-_H z&RViTZS4IBzs+QKx$^aZd&u#9fJpaY~`E)+6II&Qx}H09?Xg2dCiFnt_$hF!r4 zU+Q*uU>{nr(*8s4dyM5MJG=Azan_jZLvTm&vn+%zqmDLCj^aJ@^KDQR?SS%!q_}ZNxlxPT5dL)$pj4$8cveebESHYC_dUob} z+b@)kw%(V8FY4~YKTvRs%akcP1`(Ny6x>QE7<*zi;|NZ2eQSz$LkG#fDQwk@`};tV zW3O9&ClW0cjiUM|s8n7E#=G^HT@v?zz4bEQK5LHx?se+6mKWIuj9nMkEttpeQ!vqj z41DxxQhJr2MtQL5wJ;WCwHk)QHY8sJfERhfMnA9aos*QAczj{@@W1J9q$bg-* z=A}*$1rbjWi~F&UUp4|{Y93XsV6VfApm z!YoWuMTDaY(Vw(}bJ{4^Vu*DDG^50SR73Cw>dh;YB{7fhun4{_-+_rk`8i+FDqy0B zn8MeH&Mk>+djzbgt|*ryO-)yEpT{2B0yjJ!!$V?{UR35y?DSGgXBM_uU04EINJa)r zOm(Jo{L8q%%;4|vO%zR#h})w7^AFKAJ1Xxk&|p)w?mDAuHGdIpC6o0*wwy}yZpLF$ zK5#V!cX}Ug25aB_`?LEXZC4o8jpLXem@$i}o+jSVWRb{XW*jXQxc_(p`Kd&MWRYBp zs>1c18Vkn@yNU)h!-c?)XDhPRjat5IB)$R2X;42vH8@~80-xV=Fwf+>G_=j;{M$ZC z_3Y=^(X5%@d7;vp{7S{JMtZ4@#jv>pe}_eSo7XTu~ij@?P?Pqnl9v2&4TsQ0=- zMpFj2n0hM7HQ=x3qEFyCr@0$q(d_hO| z#ybDnt&Mx?x&G4;ZdRI)P#93oX3cnFO1d?*2jEL#c)dVv$S@JJYiWsb4P(H~YQhhV zZoXQ&4LiE#7e1L;0d`<2blf89US%sjsinMo6*Yv)NqH$JMGb~MYtA!GWlmLgCPF6^ zdce{Cc5o8|>l@0t>zqlrS8$Q|T!+a%kp`hJ!LY1+8sd8XbpRWKJSWvbn_t8TY`KGFwMocOkqo3}W>If1mJA zaJRMy8ORC{CywH0=?c&4IWmT{g+5UlcWP<+S8J5o|BW@42%nmWd zu{NsdX@Vd(ywkt$l*|`@I#`#tT_P!Kq1AmzuunZujIGQsC!6mV{2VtMQhj`pzZ|`P=sQjzR` zQ6M=yl&538*p|mz6FYBDF0K}nS|2y1U)NlW>dPUzSE%D3L3Ee=Zpw1&2c#MtrbS#z zif^RaI-|)N1~0T0_4q6-1~K_biZRmYYMUa7(uYOJ4?G{ABCP<&U&{#ydKE1bQ_xvJ z)F`#ye|*CiOM{;ld}AO)N9AL_LD=O(b|QK#dZ_87aw#s#?%pT(kQNKXXY8MouR zPW)4vc}Tl*KMhss+3Q3oPu6U|Imh@7NGv0|V3EJZIe*a^^jLC>hqB14*Kx7F%y1S! zT4YZ_VMvy_i@HfHK?`^%j|k35I$w4j5Nkx|6xL=+Hr@DV-P z(`=Hri;ZtLnkPLJo%(Vtw%wCpopfR<7 zg9;N!@jBk{-z6Oj!CG=zp{7rd-0E_;8|F^!;f=w0gJ;m*n9MQPO;x8L-# zwcn)u7)e*k*yMSJs{hUF;}shgK>o=1%ky#$R?=xcWQw+q2l8CL{K~-c z93XerRwX87-wlDCVQ?FDpP4H5jYE1`a0Kz;dZ~Sp7G8X!RTSuA5m~f@sUC9%ndhH7G(^D_a2q7MEcPCkGqruE^x~$!$irCXY z9aq4KxKs5qGQ-GD_+^B>FYOY?p+ z4tb)2Sj(X0nnGR9Ce;4BN!KTTef@V8X1{q>icDn27FXk!u+~$gv?zeA>P?cTU^v5? z33-JGI+9VFm(xd?KywcZ{#+*dCW&rrjW>IqE)+i?S_xj)PcY)j*Z0He$zhn^aunE4 zKYm2xAM)j>mlk6&!0(tV|0(_?G_b_xt3CUHR?xP0kC$`L3+*{q_US*F$TCE++hQb( z^^&er)(yzivd>*#4)EwY3`PGnP7Sd0yh={0bfLE4Ks`21gFGhKm}L#mMB9lUVA;eb z#M&p+B~#==SHsmQVrVu^)H z@deqor;bjj`c#BY8zzs4Fz?vR--CBU3U98|+CFzka2F+*9S7@oX`u$juDMfWM~S)W z)@D3wwyoeopI1=Fnz0(v0@Ih3wj$HSlJh*)D%1Ly#a4dW7Mx@8qD=nCg>CW|9_q?k z>J7}Gdh7ME0`&1CYzg=pC95ZAS4klZ7FSy~RsH4Bw>*){gzio7gfrctX^nmfj9ZJ3 zK`nUtre~pMxQ{!EybniY@AXu^;<8po)%F>O+RdL}ZI1PUu7JC~zjYe0FP7a$@+I%y z!c(T7W?5Y*sjE9S-<&UuHyX{h|E=yd@Hw&@yEFf6Pd}_LeEdv`?|8K?L$G9bKe;ky z_g+>D3pr|@OXROY*pqLloH60p7(SF5r`NsQRMF@W(-aUDN;6BEz98t(B_-V`-4fEGNJ$UfB`w|E-8rX4j(~W-7Th_6!K1l5czsGS<*b&9B3J!e} zG?=cd0~7jW7o73aD%jS9BA9Q;5NE-?AwS}9BPXEyTR5$KeA@(JWO4Q~oTj2EIHV_O^vy3i}r^nY-V9nj5a0=JU@0_e(I zk!%w9!;JovVDLEJE*WKs#1`xT01d>T(42ok92r3P3E;LI1+-g-xoU$oe9U;vVEk3r zr@}hf64YpacUV!De~o|std!DoBo7*ernjp@xbxohYVgA4j+dJ$BOXU~jq^MD>CObz zkJYO|{|v64N9c9?eozA10deDRBj0)aNf^oz5vTtrxcDgBYTIOO13(;)=XynEugO{7 z&@OK(Oj8ESGs?$E3+}mN1UKUBodG$BIuuHv5P96;V7E` z5B@Dg-=v{tCg?PNK&X~BU=ltvE7s?CO`7Ew#O^rkJ<02j8{O-wZ{;~_$T{D8*1!8( zFn7^J+Q@%c?mvDO5OptVooUS(65|v4{WMOePJ!4+`_QOSw zBm9p2hzFxshMvDDS0V#b%iwj%=9`#-53Kz^h(}^02$;0BaGJ9*4~w(Xu`1$M*RQda zgBQ48|C-^@#E%?Md&iMH5YHgtik^`Tgw27c%w9wTBhnfbS~TsXpE3a~ofWL5*5HLC zSshtY*Dcv>HeQ^gW-)4|J#D0xUcxU=el$cmrwQ@3b$oS#C~k&Q<>}HE~wcfz69JgIA4g)5x#0-Agwz7+)ZH z0bvH(9PfWxi(sG`DGrlF)1tiI`i``Sofr*}IA|a{HWVTyTxW^BNhyCR`Zg@Z3_`Et z-Err?EZ4~yfOfJbed#e3dzW7OG_{)1GbXt5 z^z>)-@QyYCOBO@}GRDyUs%eeJc3IDnGE-3Q7x|^U6srBbY3b`)S!XTF=L)ohPqcL> zcb@i-Q+M){PE$N?=Evi(jMjSZ$%9Fsruwd208W@Qb(3@A@dWuP+T8o=G$BpjT=Dk6 z$xidL1Y@*XK1=sD2P%C8^Q%xtwoO?0Pry9whNAru1y~=D^vo z31HzKe%Was@Q@^zqqj^l3?H^~HcJ z{#%$@JPsJ@7L%yU#ug_Z=?Zf9jnDriWgo*Gtq9+S z`TI@WRLX!{h~{rjbv)MtAc1M{*cWcp-saN>2PD7VrA11ON#1*-qmQ10;8X*j=W7H1L@92u+N`y?r!#j%ieWy3KjduzMBZY^p zedSeZ{dG4y69d<|&ACxBVkX59*F@VS`!`zXwoa+gGnc`oZ)dyq8D+gC3cHlWE73s{ zO`TI!79Ov2*&()F&n+M>sWGE&Sa<`rB}t-MfE6Ti!P26mJ+ zEcCSFbIA+}=qV zx&U6<72kSOI8Cv&G|s@c>A<>P;di*R2*){gWWdWcm&pi>)6Fg9HMyKOPNcBwcRbSgQL+`*_dU;rQ*+o)XSSuSDGfaq-8fX)v5%uX|E&b^+AlJue{n2@s5$=I68J;$EQyo$ z%f$#UHLY-MTP@BX=h3sx9t;$std8s(QJFHbZAbg{K`sjGLip8}VFb3zHSuh7SPl#F z0epEjGSt2PrX<_g;1TaNyyX~QE%SZY2Y|z3>So8W{bhZ zlfRPO-B@~2?dV6JN_x3(aD?F6TR}=E;T^s^y~0OfYtl=@CAC!;%q%Hcq0%n0O(%c@ z{|Cf*QY@D5Eron`lyV_cI#$!lEGx#+dFMjH2d{VbKQtCv>1g9ZF)w!5wRecsxen^L zbc2!;#jM>DaSai5Lv8}>0be=ZI=ts0cUN!olze}HUWgxYixr+*+uqiZX!o((%W17~ zzj|($#r&Km%9>|Y9QlVl<{MlW55=q86pvMx>rpkcS;wfn5g#b3kaX==*QzS~`M5RS zXqLavw%sCd0vbe^HjM{Dr1w_1gc8uoDgipmO6gnvDqS`B(`amwjXy`B~oc$!azdIpa26}8gez)xdvCwAHzcc%)haxSGB29gb zLa)7>W2GTz{IDLZ5K3&cF&;-l6lBLuN?Cvn4CYu@%F%@PV=B1?@)5lid1bP4ID>lv zcvKp@z*17qMx{&tGgnrTO(fTopStIeehrVv1j2#W~5A3CfBo_gxf@9*kO0 z=e4+=|1y6ZwZdF?y*I%XFFfpL+#qT}V-{)VhBr9aI3L3707KOech`#Y8~HZe$ZCMB z`vWZEx-T#wU%sbY6AGQHz>;1^4Io^c$(uD-Kc%oF4R5YRvq@$9fu+BihN=OsL=IrR z-8^~w)8~z505&Z$$DwyzHbX+L7)Kn+uE~s8>WC20VYrz$$>;>9a>W+>_#A&K>@M$u zIOnasPzECO#|Lh#H}QaK6zU~eXVk?mb{x}aSJ)$WTn&r5Ic;Ab__D889&qt<_@=v9 z0TYiM8b3ZGq~(K`0YCNXJBbmtSVTvGx#5cZBp`lv7NAJy%d&FK{`hV=LMZeGB3%

x%g%4lVZ#p@yl0!-j(B#YK52h%hxw2tTTbdTcw3wdd7lNU+;hbe z;1)a1ijyDjiCC*LF})yQQeV`)b_Q)MqYJVaDKN2U{vIr}&clJ@

gdbsiPkFXtS4u}3khA7+Zgj4`G+Dj$BR+AQ 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 f#|!rH=gF%M;s{8PWKqf!jJ|LFe!|LKLM literal 0 HcmV?d00001 diff --git a/keps/sig-api-machinery/20180731-crd-pruning.md b/keps/sig-api-machinery/20180731-crd-pruning.md index 96f9e8d3dc2e..599e4836fdbe 100644 --- a/keps/sig-api-machinery/20180731-crd-pruning.md +++ b/keps/sig-api-machinery/20180731-crd-pruning.md @@ -1,13 +1,10 @@ --- -kep-number: 24 title: Pruning for Custom Resources -status: provisional authors: - "@sttts" owning-sig: sig-api-machinery participating-sigs: - sig-api-machinery - - sig-architecture reviewers: - "@deads2k" - "@lavalamp" @@ -21,367 +18,359 @@ approvers: editor: name: "@sttts" creation-date: 2018-07-31 -last-updated: 2018-07-31 +last-updated: 2019-04-26 +status: implementable +see-also: + - "https://github.com/kubernetes/enhancements/pull/1002" --- # Pruning for Custom Resources - + ## Table of Contents -* [Pruning for Custom Resources](#pruning-for-custom-resources) - * [Table of Contents](#table-of-contents) - * [Overview](#overview) - * [Goals](#goals) - * [Non-Goals](#non-goals) - * [Motivation](#motivation) - * [Pruning](#pruning) - * [Mixing of Schema and Value Validation](#mixing-schema-and-value-validation) - * [Formal Proposal – following pruning option 1]() - * [Types and Formats](#types-and-formats) - * [Polymorphic Fields](#polymorphic-fields) - * [Excluding values from Pruning](#excluding-values-from-pruning) - * [References](#references) - * [Alternatives Considered](#alternatives-considered) -## Overview + * [Pruning for Custom Resources](#pruning-for-custom-resources) + * [Table of Contents](#table-of-contents) + * [Summary](#summary) + * [Motivation](#motivation) + * [Goals](#goals) + * [Non-Goals](#non-goals) + * [Proposal](#proposal) + * [Excluding values from Pruning](#excluding-values-from-pruning) + * [Examples](#examples) + * [Opt-in and Opt-out of Pruning on CRD Level](#opt-in-and-opt-out-of-pruning-on-crd-level) + * [References](#references) + * [Alternatives Considered](#alternatives-considered) + * [Test Plan](#test-plan) + * [Graduation Criteria](#graduation-criteria) + * [Upgrade / Downgrade Strategy](#upgrade--downgrade-strategy) + * [Version Skew Strategy](#version-skew-strategy) + * [Implementation History](#implementation-history) + +## Summary + +CustomResources store arbitrary JSON data without following the typical Kubernetes API behaviour to prune unknown fields. This makes CRDs different, but also leads to security and general data consistency concerns because it is unclear what is actually stored in etcd. + +This KEP proposed to add pruning of all fields which are not specified in the OpenAPI validation schemas given in the CRD. It requires _structural schemas_ (as described in [KEP Vanilla OpenAPI Subset: Structural Schema](https://github.com/kubernetes/enhancements/pull/1002)) for all defined versions. Validation will reject the CRD otherwise. + +Pruning will be opt-in in `v1beta1` of `apiextensions.k8s.io` via + +```yaml +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +spec: + pruneUnknownFields: true + ... +``` + +i.e. CRDs created in `v1beta1` default to disabled pruning. Pruning will enabled by default for CRDs created in `v1`. -Native Golang based resources do not persist JSON fields which are not part of the Golang structs which are backing them in the API server memory. This artifact of the use of typed Golang structs inside of the REST implementation has turned into an API convention. Major parts of the Kubernetes depend on this to ensure consistency of data persisted to etcd and returned from the REST API. +Pruning can be locally disabled for subtrees of CustomResources by setting the `x-kubernetes-preserve-unknown-fields: true` vendor extension. This allows to store arbitrary JSON or RawExtensions. -Without consistency of data in etcd, objects can suddenly render unaccessible on version upgrade because unexpected data may break decoding (e.g. in generated, typed clients which are not based on forgiving `unstructured.Unstructured`). Even if persisted data has correct format and decodes correctly, having it not gone through validation and admission when it was stored can break cluster-wide invariants. For example assume the `privileged: true/false` field is added to a type in Kubernetes version X+1. In version X, there is no security check around this. So every user could set that flag if we didn’t drop unknown fields. When the field is added in X+1, that user suddenly has escalated access (note: on read we do not run admission). This is a serious security risk. +## Motivation -CustomResources are persisted as JSON blobs today (with the exception of `ObjectMeta` which is pruned since Kubernetes 1.11), i.e. we do not drop unknown fields, with the described consequences. This proposal is about adding a decoding step named "pruning" into the decoder from JSON to `unstructured.Unstructured` inside the apiextensions-apiserver. This pruning step will drop fields not specified in the OpenAPI validation spec, leading to the same persistence semantics as for native types. +* Native Golang based resources do pruning as a consequence of the JSON unmarshalling algorithm. This is has become a fundamental behaviour of Kubernetes API semantics that CustomResources break. +* Pruning enforces consistency of data stored in etcd. Object cannot suddenly render unaccessible because unexpected data breaks decoding. +* Even if unexpected data is of the right type and does not break decoding, it has not gone through admission or validation. Pruning enforces this. +* Pruning is a counter-measure to security attacks which make use of knowledge of future versions of APIs with new security relevant fields. Without pruning an attacker can prepare CustomResources with privileged fields set. On version upgrade of the cluster, these fields can suddenly become alive and lead to unallowed behaviour. -## Goals +### Goals * Prune unknown fields from CustomResources silently. Unknown means not specified in the OpenAPI validation spec. -* Allow to opt-out of pruning via the OpenAPI validation spec for a whole subtree of the JSON objects. -* Have simple semantics for pruning. -* Be extensible to defaulting at a later point. +* Allow to opt-out of pruning via the OpenAPI validation spec for a whole subtree of JSON objects. -## Non-Goals +### Non-Goals * Add a strict mode to the REST API which rejects objects with unknown fields. -* Propose or decide anything about defaulting. -## Motivation -### Pruning -Pruning of a JSON value means to remove "unknown fields". A field (given as a JSON path) is unknown if it is not specified in the OpenAPI validation schema. - -A JSON path `.x` is specified in an OpenAPI validation schema if `"x"` is a key in a corresponding `properties` field in the schema. - -#### Example 1 - ->Assume the OpenAPI schema -> ->```json ->{"properties": {"a": {}, "b": {"type": "string"}, "c": {"not": {}}}} ->``` -> ->Then a JSON object `{"a":1, "c": 3, "d": 4}` is pruned to `{"a":1, "c":3}`. -> -> Note that the pruned object does not validate. +## Proposal -#### Example 2 +We assume the CRD has _structural schemas_ (as defined in [KEP Vanilla OpenAPI Subset: Structural Schema](https://github.com/kubernetes/enhancements/pull/1002)). -> Assume the OpenAPI schema -> ->```json ->{"anyOf": [{"properties": {"a": {}}}, {"properties": {"b": {}}}]} ->``` -> ->Then a JSON object `{"a":1, "b": 2, "c": 3}` is pruned to `{"a":1, "b":2}` with the given semantics. Note that also `{"a":1}`, `{"b":2}` would be natural pruning results if we defined "specified" in a different way. - -#### Example 3 - -> Assume the OpenAPI schema -> ->```json ->{ -> "properties": { -> "a": {}, -> "b": {"type": "string", "properties": {"x": {}}} -> }, -> "anyOf": [ -> { "properties": {"c":{}} }, -> { "properties": {"d":{"not":{}}}} -> ] ->} ->``` -> -> Then `a`, `b`, `b.x`, `c`, `d` are specified, `b.y` and `e` are not specified. - -**Question:** is it natural semantics to assume `d` to be specified and not to prune it? Note that there is no object with `d` that validates against `"d":{not:{}}`. But due to the `anyOf` there are objects which will validate against the complete schema. - -#### Pruning Options - -Motivated by the examples, we have different options to define the pruning semantics: -1. Use the described semantics of `specified`. -2. Only consider `properties` fields in the schema which actually successfully validate a given object (then `d` would be pruned in example 3). -3. Only consider `properties` fields outside of `anyOf`, `allOf`, `oneOf`, `not` during pruning. -4. Only consider `properties` fields outside of `anyOf`, `allOf`, `oneOf`, `not` during pruning, but enforce that every `properties` key inside `anyOf`, `allOf`, `oneOf`, `not` also appears outside all of those. - -From these options: -1. leads to fields being kept from pruning although they only appear in branches of the OpenAPI validation schema which do not contribute to validation of an object. -2. is ambiguous if you have multiple branches of `anyOf` validating. Should we drop the fields of the first or the second branch? -3. leads to surprising pruning of fields that the user forgot to specify outside of propositional logic of `anyOf`, `allOf`, `oneOf`, `not`. -4. forces the user to re-specify all those properties outside of `anyOf`, `allOf`, `oneOf`, `not` which appear inside of them. The outcome will match that of 1, with the difference that it makes the skeleton explicit. - -**Here we propose not to follow 2 and 3 due to ambiguity of 2 and the danger of user mistakes of 3. Both 1 and 4 lead to the same pruning behaviour and only differ in whether the user has to re-specify property keys or whether they are automatically derived.** - -### Mixing of Schema and Value Validation - -The OpenAPI validation schema mixes the actual structural schema validation (which is usually done by the Golang struct JSON decoding for native types) -and the value validation (usually done in the validation step of the API server handler pipeline for native types). - -For CRDs we cannot distinguish both. This was first noticed by @lavalamp in https://github.com/kubernetes/kubernetes/pull/64907#issuecomment-397015030. - -#### Example 4 - -> Assume -> ->```json ->{ -> "properties": { -> "a": {"type": "string", "pattern": "", "format": "ip"}, -> "b": {"properties": {"x": {}, "y": {}}} -> } ->} ->``` -> -> The type and properties are usually called schema validation, while regex patterns and formats are about values. The latter would be tested in the validation phase, the former would be checked during decoding for native types in the JSON decoder. - -**Remark:** the line between type and format is blurry. Format is optional to be processed by tools, and the value is open ended. In Kube we have some formats (like `date`) which correspond to custom JSON unmarshallers in the native types. That format would be verified during decoding, although technically a date is just a string. So we might want to replicate that behaviour at some point. - -For pruning (and possibly later defaulting) we have to apply the OpenAPI validation schema inside of the decoder step (the left box inside apiextensions-apiserver in the figure above). This is considerably earlier than for native types. This has a number of implications: -* We have to apply full OpenAPI value validation (e.g. regular expressions, propositional evaluation) during decoding. -* Our generic registry applies validation after defaulting. We need the other way around for CRDs. -* Our generic registry expects defaulting to always succeed (no error result type). CRD validation needed by OpenAPI defaulting would be able to fail. - -To avoid these and to get sane semantics, **we propose to split the CRD validation into two top-level steps:** - -1. During decoding we validate using a skeleton schema which lacks value validations and propositional logic (`anyOf`, `allOf`, `oneOf`, `not`). -2. During standard generic registry validation phase we validate using the full validation schema. - -Step 1 is extensible to defaulting based on the skeleton validation result. Step 2 would then catch wrong types of the used defaults. - -## Formal Proposal – following pruning option 1 - -The examples in the motivational section show that the semantics of full OpenAPI validation schemata are not trivial in respect to pruning. To simplify the algorithms and to enforce "sane" schemata which allow to split schema and value validation, we propose to derive a skeleton schema from the full user-given OpenAPI validation schema -* which does not contain value validations -* which is complete enough for pruning (and possibly later defaulting). - -**Remark:** we have two options to define and implement pruning: -1. directly on the full OpenAPI validation schema with two custom algorithms doing parallel recursion over the schema and the input object. -2. via an intermediate representation (the skeleton schema) and using go-openapi pruning. Both algorithms are ten-liners based on the go-openapi/validate output. With the skeleton schema the go-openapi pruning algorithm coincides with our pruning option 1. - -Both routes lead to the same algorithm: the intermediate representation of the skeleton schema makes merging of OpenAPI validation schema constraints explicit, while the custom algorithms would hide that in its recursion code. - -Moreover, the main reason for the intermediate schema: the custom algorithm would have to replicate a lot of the validation logic of go-openapi, e.g. the semantics of `properties`, `additionalPropoerties`, `patternProperties` and the same for items of an array. With route 2 we get all of this for free. - -### Definition: skeleton schema - -> For a given OpenAPI validation schema `s` the skeleton schema `skel(s)` is derived by -> 1. applying `skel` to all elements of `.allOf`, `.anyOf`, `.oneOf` and `.not` giving `s_1, …, s_n`, -> then dropping all fields from `s` other than -> * `type`, -> * `items`, -> * `additionalItems`, -> * `properties`, -> * `patternProperties`, -> * `additionalProperties` -> giving `drop(s)`, -> 2. then merging `s_i` into it’s containing object. -> -> I.e.: `skel(s) := merge(drop(s), s_1, …, s_n)` with -> ->``` ->merge(x_1, …, x_n) := { -> "type": t if all x_i agree on t as type, undefined otherwise -> "items": [ merge(x_i1, …, x_ik) ] where s_ij = s_j.items[i] if defined, -> "additionaItems": merge(p_1, …, p_i), -> for all x_i with defined additionalItems p_i -> "properties": { k_i: merge(v_i1, …, v_ik) for keys appearing in x_ij with values x_ij }, -> "patternProperties": { k_i: merge(v_i1, …, v_ik) for keys appearing in x_ij with values x_ij }, -> "additionalProperties": merge(p_1, …, p_i), -> for all x_i with defined additionalProperties p_i ->} ->``` - -The skeleton schema especially lacks: -* all value validations like `pattern`, `format`, `minValue`, `maxValue`, ... -* all propositional operators like `anyOf`, `allOf`, `oneOf`, `not`. - -The skeleton schema `skel(s)` puts -* less or equal constraints on `type` than `s`. -* every field specified by a `properties` key in `s` is specified in `skel(s)`. - -The computation of `skel(s)` is `O(size(s))` and `size(skel(s)) <= size(s)`. - -Note that a field might be constrained by the `type` construct in the full OpenAPI validation schema, but not in its skeleton. This is fine because we have to support polymorphic fields like `IntOrString`, but avoid `allOf`, `anyOf`, `oneOf`, `not` in the skeleton. - -**Property:** if the OpenAPI validation schema applies to an object, so does its skeleton schema. - -Pruning will be implemented based on the skeleton schema of the specified OpenAPI validation schema. - -Optionally for debugging, the skeleton schema derived from the validation schema by the apiextensions-apiserver can be stored in the CRD status. - -#### Example 5 - ->Assume -> ->``` ->s := { -> "anyOf": [ -> {"properties": {"a": {"type": "string"}}}, -> {"properties": {"a": {"type": "integer"}, "b": {"type": "string"}}} -> ], -> "properties": {"c": {}} ->} ->``` -> ->Then -> ->``` ->skel(s) = { -> "properties": { -> "a": {}, -> "b": {"type": "string"}, -> "c": {} -> } ->} ->``` -> -> The `type` of `a` does not match on all paths. Hence, it is omitted in the skeleton. In contrast, `b` has a unique `type` of `"string"`, so it stays in the skeleton. - -### Types and Formats - -Note, that having less `type` constraints in the skeleton than in the whole OpenAPI validation schema means that admission and conversion will see possibly wrong types. The final validation in the registry validation phase will check for the complete OpenAPI validation schema and catch those type errors. - -**Question:** we could extent the `skel` function to keep a list of `type` values. As long as all branches define the type, we can add `anyOf: [{type: "type1", type: "type2, ….}]` to the skeleton. If one branch does not define the type though, this is still not possible. - -In native types, we have custom unmarshallers for date / timestamps. In OpenAPI these would be rendered as `{type: "string", format: "date"}`. With the proposed skeleton algorithm, we would not verify these fields before full OpenAPI validation in the registry. We could move non-contradicting `format` constraints into the skeleton as well, like we do for `type` already. Then admission would be protected from invalid format (if admission uses Golang decoding, this might be relevant to get proper error messages). - -### Polymorphic Fields - -#### Example 6 - -> Assume -> ->``` ->s := { -> "anyOf": [ -> {"properties": {"a": {"type": "string"}}}, -> {"additionalProperties": {"type": "integer"}} -> ], ->} ->``` -> ->Then -> ->``` -> skel(s) = {"properties": {}, "additionalProperties": {}} ->``` -> -> In the CRD validation, we reject OpenAPI validation schemata like `skel(s)` with `properties` and one of `additionalProperties` or `patternProperties` being defined at the same time. Having `additionalProperties` or `patternProperties` defined there means to have a `map[string]T` like field where we don’t want to prune the unknown "keys". -> -> The schema `s` above means to either have a `map[string]int64` or a `struct` with `a` of type string. This is a special case of polymorphism because for the same JSON path is typed with two different types in the Golang sense (struct and `map[string]T`), but same types in the JSON sense (JSON object). - -Hence, we have to add the following restriction to OpenAPI validation schemata: - -**Restriction 1 on Object Polymorphism:** reject CRD OpenAPI validation schemata `s` with `skel(s)` having `properties` and one of `additionalProperties` or `patternProperties` being defined for the same JSON path. +We propose to -### Excluding values from Pruning - -There are cases where parts of an object are verbatim JSON, i.e. without any applied schema and especially without a complete specification which allows to apply pruning. +1. derive the value-validation-less variant of the structural schema (trivial by definition of _structural schema_) and +2. recursively follow the given CustomResource instance and the structural schema, removing fields from the former if they are not specified in the properties of the later +3. return a deserialization error if the CustomResource instance JSON value and the type in the structural schema do not match +4. fields of `metav1.TypeMeta` (`apiVersion` and `kind`) and `metav1.ObjectMeta` at the object root are implicitly specified. -Hence, we need a mechanism to express that in the OpenAPI validation schema (compare https://github.com/kubernetes/kubernetes/pull/64558#issuecomment-403564033). +We do this in the serializer just after the binary payload has been unmarshalled into an `map[string]interface{}`, compare the yellow boxes in the following figure: -**Raw JSON Option 1:** add a format `json`, e.g.: - -```json -{"properties": {"x": {"format": "json"}}} -``` +![Decoding steps which must prune](20180731-crd-pruning-decoding.png) -In this example "x" is excluded from pruning. Note that you can still use any kind of OpenAPI validation schema constructs to restrict `"x"` further. - -Note that we lose expressiveness of the existing `format` strings: we either apply the format to `"json"` or any other pre-defined format. I.e. we cannot express that pruning should be disabled, but if it is an integer, it should be an int32. - -**Question:** this feels like a reasonable loss of expressivity. Do we accept that? +### Excluding values from Pruning -**Raw JSON Option 2:** add an extension property, e.g. +There are cases where parts of an object are verbatim JSON, i.e. without any applied schema and especially without a complete specification which allows to apply pruning. -```json -{"properties": {"x": {"x-kubernetes-no-pruning": true}}} +The vendor extension `x-kubernetes-preserve-unknown-fields: true` proposed in (as defined in the [KEP Vanilla OpenAPI Subset: Structural Schema](https://github.com/kubernetes/enhancements/pull/1002)) serves exactly this purpose, with the following semantics: + +1. the whole JSON subtree at the level of `x-kubernetes-preserve-unknown-fields: true` and below is excluded from pruning +2. if `x-kubernetes-embedded-resource: true` is in the subtree of (1), pruning starts again in the `metadata` property below the level of `x-kubernetes-embedded-resource: true`. + + +If `x-kubernetes-preserve-unknown-fields` is not specified, the parent's pruning behaviour is followed (with the exception of the rule (2) +). + +### Examples + +1. arbitrary JSON + + ```yaml + type: object + properties: + json: + type: object + x-kubernetes-preserve-unknown-fields: true + nullable: true + ``` + + Inside of `.json` nothing is pruned, i.e. + + ```json + { + "foo": 42, + "json": {"bar": 43} + } + ``` + + is pruned to + + ```json + { + "json": {"bar": 43} + } + ``` + +2. partially restricted JSON + + ```yaml + type: object + properties: + json: + type: object + x-kubernetes-preserve-unknown-fields: true + nullable: true + property: + bar: + type: integer + ``` + + Inside of `.json` nothing is pruned, i.e. + + ```json + { + "foo": 42, + "json": { + "bar": 43, + "abc": 44 + } + } + ``` + + is pruned to + + ```json + { + "json": { + "bar": 43, + "abc": 44 + } + } + ``` + +3. embedded resource + + ```yaml + type: object + properties: + object: + type: object + nullable: true + x-kubernetes-embedded-resource: true + x-kubernetes-preserve-unknown-fields: true + ``` + + Here, inside of `.object` nothing is pruned with the exception of unknown fields under `.object.metadata`, i.e. + + ```json + { + "foo": 42, + "object": { + "bar": 43, + "abc": 44, + "metadata": { + "name": "example", + "garbage": 45 + } + } + } + ``` + + is pruned to + + ```json + { + "object": { + "bar": 43, + "abc": 44, + "metadata": { + "name": "example" + } + } + } + ``` + +4. implicit `metav1.TypeMeta` and `metav1.ObjectMeta` + + ```yaml + type: object + ``` + + Pruning takes place, but `apiVersion`, `kind`, `metadata` and known fields under `metadata` are preserved, i.e. + + ```json + { + "apiVersion": "example/v1", + "kind": "Foo", + "metadata": { + "name": "example", + "garbage": 43 + }, + "foo": 42, + } + ``` + + is pruned to + + ```json + { + "apiVersion": "example/v1", + "kind": "Foo", + "metadata": { + "name": "example" + } + } + ``` + + + +### Opt-in and Opt-out of Pruning on CRD Level + +We will add a `PruneUnknownFields` flag to `CustomResourceDefinitionSpec` of `apiextensions.k8s.io/v1beta1`: + +```go +type CustomResourceDefinitionSpec struct { + ... + + // pruneUnknownFields enables pruning of object fields which are not + // specified in the OpenAPI schema. apiVersion, kind, metadata and known + // fields inside metadata are excluded from pruning. + // Defaults to false. + // Setting this field to true is considered an alpha API. + // Note: this will default to true in version v1. + PruneUnknownFields bool +} ``` -This would not lead to a loss in expressivity. It is formulated negatively intentionally to have `false` as the default with `omitempty`. +I.e. for `apiextensions.k8s.io/v1beta1` this will default to `false` for backwards compatibility. -**We propose to follow the second option with `x-kubernetes-no-prune`, because it is more explicit, does not reduce expressivity and does not mangle with the already very vague `format` field definition.** +For `apiextensions.k8s.io/v1` we will change the default to `true` and forbid `false` during creation and updates if it has been `true` before. In `v1` the only way to opt-out from pruning is via setting `x-kubernetes-preserve-unknown-fields: true` in the schema. An empty or unspecified schema -### Nested x-no-pruning +## References -**Question:** should we support nested `x-kubernetes-no-prune`, i.e. disabling pruning for a sub-object, but re-enable it something deep inside of it? E.g. +* Old pruning implementation PR https://github.com/kubernetes/kubernetes/pull/64558, to be adapted +* [OpenAPI v3 specification](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md) +* [JSON Schema](http://json-schema.org/) -```json -{ - "properties": { - "x": { - "x-no-pruning": true, - "properties": { - "y": { - "x-kubernetes-no-pruning": false, - "properties": { "z": {} } - } - } - } - } -} -``` +## Alternatives Considered -If we do, the object +* in [GDoc which preceded this KEP](https://docs.google.com/document/d/1rBn6SZM7NsWxzBN41J2kO2Odf07PeGPygatM_1RwofY/edit#heading=h.4qdisqud6z3t) we considered a number of alternatives, including using a skeleton schema approach. We decided against that because of its complex semantics. In contrast, the _structural schema_ of the [KEP Vanilla OpenAPI Subset: Structural Schema](https://github.com/kubernetes/enhancements/pull/1002) is the natural output of schema generators deriving a schema from Golang structs. This matches the behavior of pruning through JSON unmarshalling, independently of any value validation the developer adds on top. +* we could allow nested `x-kubernetes-preserve-unknown-fields`, i.e. to switch on pruning again for a subtree. This might encourage non-Kubernetes-like API types. It is unclear whether there are use-cases we want to support which need this. We can add this in the future. +* we could allow per-version opt-in/out of pruning via `PruneUnknownFields` in `CustomResourceDefinitionVersion`. For the goal of data consistency and security a CRD with semi-enabled pruning does not make much sense. The main reason to not enable pruning will probably be the lack of a complete structural schema. If this is added for one version, it should be possible for all other versions as well as it is less a technical, but a CRD development life-cycle question. -```json -{ - "a": 1, - "x": { - "b": 2, - "y": { - "c": 3, - "z": 42 - } - } -} -``` +### Test Plan -would be pruned to `{"x":{"b": 2, "y":{"z": 42}}}`. +**blockers for alpha:** -**We propose to disallow nesting of `x-kubernetes-no-prune` and to disallow setting it to false, i.e. `x-kubernetes-no-prune: false`.** We can add nesting later if necessary. +We default `PruneUnknownFields` to false and hence switch off the whole code path doing pruning. This reduces risk for everybody not using this alpha feature. -## Opt-in and Opt-out of Pruning on CRD Level +* we add unit tests for the general pruning algorithm +* we add apiextensions-apiserver integration tests to + * verify that the pruning feature is actually off if `PruneUnknownFields` is false. + * verify that `PruneUnknownFields` is defaulted to false. + * verify that pruning happens if `PruneUnknownFields` is true, for all versions in the CRD according to the schema of the respective version. + * verify that `metadata`, `apiVersion`, `kind` are preserved if `PruneUnknownFields` is true and there is no schema given in the CRD. + +**blockers for beta:** -We will add a pruning flag to `CustomResourceDefinitionSpec` of `apiextensions.k8s.io/v1beta1`: +* we implement and verify that `x-kubernetes-embedded-resource` and `x-kubernetes-preserve-unknown-fields` work as expected. +* we add apiextensions-apiserver integration tests to + * verify that pruning happens on incoming request payloads, on read from storage and after calling mutating admission webhooks. -```golang -type CustomResourceDefinitionSpec struct { - ... - - // Prune enables pruning of unspecified fields. Defaults to false. - // Note: this will default to true in version v1. - Prune *bool -} -``` +**blockers for GA:** -I.e. for `apiextensions.k8s.io/v1beta1` this will default to `false`. +* we verified that performance of pruning is adequat and not considerably reducing throughput. -For `apiextensions.k8s.io/v1` we will change the default to `true` and forbid `false` during creation and updates. In `v1` the only way to opt-out from pruning is via setting `x-kubernetes-no-prune: true` in the schema. +### Graduation Criteria -When [CRD conversion](https://github.com/mbohlool/community/blob/master/contributors/design-proposals/api-machinery/customresource-conversion-webhook.md) is implemented before this KEP, we will add the pruning field to `type CustomResourceDefinitionVersion`, in analogy to subresources and `additionalPrinterColumns`. +* the test plan is fully implemented for the respective quality level -## References +### Upgrade / Downgrade Strategy -* Pruning implementation PR https://github.com/kubernetes/kubernetes/pull/64558 -* [OpenAPI v3 specification](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md) -* [JSON Schema](http://json-schema.org/) -* [pruning algorithm in go-openapi](https://github.com/go-openapi/validate/blob/master/post/prune.go) +* setting `PruneUnknownFields` to true is considered alpha quality in 1.15. +* downgrading to 1.14 will lose `pruneUnknownFields: true`, but that's acceptable. +* downgrading from 1.16 (where pruning might be beta) to 1.15 will keep the same behaviour as we don't feature gate `pruneUnknownFields: true`. +* upgrading from 1.14 will default to `pruneUnknownFields: false` and hence change no behaviour. +* upgrading from 1.15 will keep the value and hence change no behaviour. +* when `v1` of `apiextensions.k8s.io` is added, we will keep the old pruning behaviour for CRDs created in `v1beta1` with `pruneUnknownFields: false`, but enforce `pruneUnknownFields: true` for every newly create `v1` CRD. Hence, we keep backwards compatibility. -## Alternatives Considered +### Version Skew Strategy + +* kubectl is not aware of pruning in relevant way +* posting `pruneUnknownFields: true` alpha quality CRD to an old server will disable pruning. But that's acceptable. -* we have explored pruning option 4 in the [GDoc which preceded this KEP](https://docs.google.com/document/d/1rBn6SZM7NsWxzBN41J2kO2Odf07PeGPygatM_1RwofY/edit#heading=h.4qdisqud6z3t), but decided against it as it put a lot of burden on the CRD author. The approach shown in this KEP leads to the same final outcome, but derives the skeleton automatically. +## Implementation History \ No newline at end of file