From 9738c12cc990fb3ba571189bd8066ec928540487 Mon Sep 17 00:00:00 2001 From: squidfunk Date: Thu, 5 Mar 2020 17:17:15 +0100 Subject: [PATCH] Unified components and observable structure --- docs/assets/favicon.png | Bin 2996 -> 2252 bytes docs/assets/images/material.png | Bin 299544 -> 298150 bytes material/assets/images/favicon.png | Bin 1056 -> 1871 bytes .../assets/javascripts/bundle.8ceb0d66.min.js | 2 - .../javascripts/bundle.8ceb0d66.min.js.map | 1 - .../assets/javascripts/bundle.9330522f.min.js | 2 + .../javascripts/bundle.9330522f.min.js.map | 1 + material/assets/javascripts/bundle.js | 7560 +++++++++++++++++ material/assets/javascripts/bundle.js.map | 1 + .../javascripts/vendor.000c9aa0.min.js.map | 1 - ...000c9aa0.min.js => vendor.31a2e7b9.min.js} | 6 +- .../javascripts/vendor.31a2e7b9.min.js.map | 1 + .../worker/search.926ffd9e.min.js.map | 1 - ...926ffd9e.min.js => search.edc88caf.min.js} | 8 +- .../worker/search.edc88caf.min.js.map | 1 + material/assets/manifest.json | 16 +- .../assets/stylesheets/main.14bb5ffa.min.css | 1 + .../assets/stylesheets/main.c05f2dae.min.css | 1 - material/assets/stylesheets/main.css | 2940 +++++++ material/base.html | 80 +- material/mkdocs_theme.yml | 14 +- material/partials/hero.html | 3 +- material/partials/language.html | 4 +- material/partials/language/af.html | 2 +- material/partials/language/ar.html | 4 +- material/partials/language/ca.html | 1 - material/partials/language/cs.html | 2 +- material/partials/language/da.html | 2 +- material/partials/language/de.html | 2 +- material/partials/language/en.html | 7 +- material/partials/language/es.html | 2 +- material/partials/language/et.html | 4 +- material/partials/language/fa.html | 4 +- material/partials/language/fi.html | 2 +- material/partials/language/fr.html | 3 +- material/partials/language/gl.html | 2 +- material/partials/language/gr.html | 4 +- material/partials/language/he.html | 4 +- material/partials/language/hi.html | 4 +- material/partials/language/hr.html | 4 +- material/partials/language/hu.html | 2 +- material/partials/language/id.html | 4 +- material/partials/language/it.html | 2 +- material/partials/language/ja.html | 4 +- material/partials/language/kr.html | 2 +- material/partials/language/nl.html | 2 +- material/partials/language/nn.html | 2 +- material/partials/language/no.html | 2 +- material/partials/language/pl.html | 4 +- material/partials/language/pt.html | 2 +- material/partials/language/ro.html | 2 +- material/partials/language/ru.html | 2 +- material/partials/language/sh.html | 2 +- material/partials/language/si.html | 1 - material/partials/language/sk.html | 1 - material/partials/language/sr.html | 4 +- material/partials/language/sv.html | 2 +- material/partials/language/th.html | 2 - material/partials/language/tr.html | 3 +- material/partials/language/uk.html | 2 +- material/partials/language/zh-Hant.html | 4 +- material/partials/language/zh-TW.html | 4 +- material/partials/language/zh.html | 4 +- material/partials/nav.html | 6 +- material/partials/source-date.html | 15 + material/partials/source-link.html | 17 + material/partials/toc.html | 10 +- requirements.txt | 2 +- src/assets/images/favicon.png | Bin 1056 -> 1871 bytes .../agent => browser}/document/_/index.ts | 0 .../agent => browser}/document/index.ts | 0 .../document/switch/index.ts | 2 +- .../agent => browser}/element/_/index.ts | 2 +- .../agent => browser}/element/focus/index.ts | 4 +- .../agent => browser}/element/index.ts | 0 .../agent => browser}/element/offset/index.ts | 0 .../agent => browser}/element/select/index.ts | 0 .../{observables/agent => browser}/index.ts | 1 + .../agent => browser}/keyboard/index.ts | 2 +- .../agent => browser}/location/_/index.ts | 34 + .../agent => browser}/location/hash/index.ts | 16 + .../agent => browser}/location/index.ts | 0 .../agent => browser}/media/index.ts | 0 .../{observables => browser}/toggle/index.ts | 113 +- .../agent => browser}/viewport/_/index.ts | 9 +- .../agent => browser}/viewport/index.ts | 0 .../viewport/offset/index.ts | 0 .../agent => browser}/viewport/size/index.ts | 0 .../agent => browser}/worker/index.ts | 0 src/assets/javascripts/components/_/index.ts | 2 +- .../javascripts/components/header/_/index.ts | 10 +- .../javascripts/components/header/index.ts | 5 +- .../components/header/paint/index.ts | 63 - .../header/{watch => react}/index.ts | 51 +- .../components/header/{apply => set}/index.ts | 0 .../javascripts/components/hero/_/index.ts | 6 +- .../javascripts/components/hero/index.ts | 4 +- .../components/hero/{paint => react}/index.ts | 6 +- .../components/hero/{apply => set}/index.ts | 0 .../javascripts/components/main/_/index.ts | 10 +- .../javascripts/components/main/index.ts | 5 +- .../components/main/paint/index.ts | 63 - .../components/main/{watch => react}/index.ts | 50 +- .../components/main/{apply => set}/index.ts | 0 .../components/navigation/_/index.ts | 10 +- .../components/navigation/layer/index.ts | 5 +- .../navigation/layer/paint/index.ts | 83 - .../layer/{watch => react}/index.ts | 67 +- .../navigation/layer/{apply => set}/index.ts | 0 .../components/search/query/_/index.ts | 19 +- .../components/search/query/index.ts | 2 +- .../search/query/{watch => react}/index.ts | 2 +- .../components/search/reset/_/index.ts | 4 +- .../components/search/reset/index.ts | 2 +- .../search/reset/{watch => react}/index.ts | 0 .../components/search/result/_/index.ts | 11 +- .../components/search/result/index.ts | 4 +- .../search/result/{paint => react}/index.ts | 18 +- .../search/result/{apply => set}/index.ts | 0 .../components/shared/sidebar/index.ts | 5 +- .../components/shared/sidebar/paint/index.ts | 100 - .../shared/sidebar/{watch => react}/index.ts | 70 +- .../shared/sidebar/{apply => set}/index.ts | 0 .../javascripts/components/tabs/_/index.ts | 6 +- .../javascripts/components/tabs/index.ts | 4 +- .../components/tabs/{paint => react}/index.ts | 6 +- .../components/tabs/{apply => set}/index.ts | 0 .../javascripts/components/toc/_/index.ts | 14 +- .../components/toc/anchor/index.ts | 5 +- .../components/toc/anchor/paint/index.ts | 79 - .../toc/anchor/{watch => react}/index.ts | 62 +- .../toc/anchor/{apply => set}/index.ts | 0 src/assets/javascripts/index.ts | 332 +- .../integrations/clipboard/index.ts | 6 +- .../javascripts/integrations/instant/index.ts | 186 + .../integrations/keyboard/index.ts | 27 +- .../integrations/search/highlight/index.ts | 6 +- src/assets/javascripts/observables/index.ts | 24 - .../javascripts/patches/details/index.ts | 2 +- .../javascripts/patches/script/index.ts | 2 +- .../javascripts/patches/scrollfix/index.ts | 2 +- .../javascripts/patches/source/index.ts | 2 +- src/assets/javascripts/patches/table/index.ts | 2 +- .../javascripts/utilities/config/index.ts | 46 +- .../javascripts/utilities/string/index.ts | 22 +- .../javascripts/workers/search/_/index.ts | 41 +- src/assets/stylesheets/layout/_nav.scss | 12 +- tsconfig.json | 3 +- webpack.config.ts | 13 +- 149 files changed, 11475 insertions(+), 1095 deletions(-) delete mode 100644 material/assets/javascripts/bundle.8ceb0d66.min.js delete mode 100644 material/assets/javascripts/bundle.8ceb0d66.min.js.map create mode 100644 material/assets/javascripts/bundle.9330522f.min.js create mode 100644 material/assets/javascripts/bundle.9330522f.min.js.map create mode 100644 material/assets/javascripts/bundle.js create mode 100644 material/assets/javascripts/bundle.js.map delete mode 100644 material/assets/javascripts/vendor.000c9aa0.min.js.map rename material/assets/javascripts/{vendor.000c9aa0.min.js => vendor.31a2e7b9.min.js} (56%) create mode 100644 material/assets/javascripts/vendor.31a2e7b9.min.js.map delete mode 100644 material/assets/javascripts/worker/search.926ffd9e.min.js.map rename material/assets/javascripts/worker/{search.926ffd9e.min.js => search.edc88caf.min.js} (89%) create mode 100644 material/assets/javascripts/worker/search.edc88caf.min.js.map create mode 100644 material/assets/stylesheets/main.14bb5ffa.min.css delete mode 100644 material/assets/stylesheets/main.c05f2dae.min.css create mode 100644 material/assets/stylesheets/main.css create mode 100644 material/partials/source-date.html create mode 100644 material/partials/source-link.html rename src/assets/javascripts/{observables/agent => browser}/document/_/index.ts (100%) rename src/assets/javascripts/{observables/agent => browser}/document/index.ts (100%) rename src/assets/javascripts/{observables/agent => browser}/document/switch/index.ts (98%) rename src/assets/javascripts/{observables/agent => browser}/element/_/index.ts (98%) rename src/assets/javascripts/{observables/agent => browser}/element/focus/index.ts (96%) rename src/assets/javascripts/{observables/agent => browser}/element/index.ts (100%) rename src/assets/javascripts/{observables/agent => browser}/element/offset/index.ts (100%) rename src/assets/javascripts/{observables/agent => browser}/element/select/index.ts (100%) rename src/assets/javascripts/{observables/agent => browser}/index.ts (98%) rename src/assets/javascripts/{observables/agent => browser}/keyboard/index.ts (97%) rename src/assets/javascripts/{observables/agent => browser}/location/_/index.ts (72%) rename src/assets/javascripts/{observables/agent => browser}/location/hash/index.ts (80%) rename src/assets/javascripts/{observables/agent => browser}/location/index.ts (100%) rename src/assets/javascripts/{observables/agent => browser}/media/index.ts (100%) rename src/assets/javascripts/{observables => browser}/toggle/index.ts (53%) rename src/assets/javascripts/{observables/agent => browser}/viewport/_/index.ts (95%) rename src/assets/javascripts/{observables/agent => browser}/viewport/index.ts (100%) rename src/assets/javascripts/{observables/agent => browser}/viewport/offset/index.ts (100%) rename src/assets/javascripts/{observables/agent => browser}/viewport/size/index.ts (100%) rename src/assets/javascripts/{observables/agent => browser}/worker/index.ts (100%) delete mode 100644 src/assets/javascripts/components/header/paint/index.ts rename src/assets/javascripts/components/header/{watch => react}/index.ts (72%) rename src/assets/javascripts/components/header/{apply => set}/index.ts (100%) rename src/assets/javascripts/components/hero/{paint => react}/index.ts (97%) rename src/assets/javascripts/components/hero/{apply => set}/index.ts (100%) delete mode 100644 src/assets/javascripts/components/main/paint/index.ts rename src/assets/javascripts/components/main/{watch => react}/index.ts (79%) rename src/assets/javascripts/components/main/{apply => set}/index.ts (100%) delete mode 100644 src/assets/javascripts/components/navigation/layer/paint/index.ts rename src/assets/javascripts/components/navigation/layer/{watch => react}/index.ts (68%) rename src/assets/javascripts/components/navigation/layer/{apply => set}/index.ts (100%) rename src/assets/javascripts/components/search/query/{watch => react}/index.ts (98%) rename src/assets/javascripts/components/search/reset/{watch => react}/index.ts (100%) rename src/assets/javascripts/components/search/result/{paint => react}/index.ts (92%) rename src/assets/javascripts/components/search/result/{apply => set}/index.ts (100%) delete mode 100644 src/assets/javascripts/components/shared/sidebar/paint/index.ts rename src/assets/javascripts/components/shared/sidebar/{watch => react}/index.ts (70%) rename src/assets/javascripts/components/shared/sidebar/{apply => set}/index.ts (100%) rename src/assets/javascripts/components/tabs/{paint => react}/index.ts (97%) rename src/assets/javascripts/components/tabs/{apply => set}/index.ts (100%) delete mode 100644 src/assets/javascripts/components/toc/anchor/paint/index.ts rename src/assets/javascripts/components/toc/anchor/{watch => react}/index.ts (83%) rename src/assets/javascripts/components/toc/anchor/{apply => set}/index.ts (100%) create mode 100644 src/assets/javascripts/integrations/instant/index.ts delete mode 100644 src/assets/javascripts/observables/index.ts diff --git a/docs/assets/favicon.png b/docs/assets/favicon.png index c4b8dd43b3adefa9d502fa3abdb836762362cebb..011c8e35103551031d67c82e17fd90d2bda22522 100644 GIT binary patch delta 2241 zcmV;y2tN0;7t9fmBYy~!Nkl0+2_Oi94^Vs|C@T0CUkoo{ z7)AjVeBcYjY#{$YAQe*;Komv68J|&76*a%o64qLkpDuOftC)ql5q=a4t@Hbyd#7*H z_PsMEAxT$#>U+9RpYC&pd++phG^V2^e)Ux>@PN*QFTV^zM}MHtpyOelp+5p;UnlTz zjPY-_83_sTNTNRJ>#v8vL{dTmK}jeBKdT!P9E!miPMvON=jZ@N=gWj&CHoX1)47v%+kh{F)`0=jS$HDOUchl zP4%azrcOeMfz5CdP&uaf1en95t8wge8k4AVcyIroNT4=QX%jo0I}HDRmqY7V2&$T#-9IdfvbBS3CsemaJYw7wRj`Z9G} z;=V8Y9|HGBY}UMajahT&QsyUQNz6Xx(W?A>YCd+1wiXr1am%Olr45zwmO3y$Gn3X7 z6wunjLVwD1j%{#E9)WQn1jq&(K^0c7T173#k5kuAKT$X6`0hK(S+Yc%AB_cy4YIP# zqR8`{IQQ zbgr+D6L#hM&Q8i(woJxLcrDvzAOAIP|N1L^`0#-m_U^Sn()%pf<_|>Xz=(BZzs@dT z$$z3nLx9}4G&o4lpFgKFy}i_X`m`%8&CMdlmE*Ya-@JK4+&+H%NDce;IpW!|BidTG z3~smqW0x*oJOL%B32cSHrAx%^&h6V;5$G$FmXs*5Vm-b=IbJkTKx0FL#(q%h@l4G} zQ!oKyjb%%hdH@O72~|J=_J;lE&vT-#oPYY^2Y$p_>*VBcJpX0Hr>+%nps`Vd3n(io z;n-*t8@V|-oq(o-YuQ#N7zmJPFJ8Q$zO!fP?3pvJeAC)$#;;$uj_%&MBSM`E*uUSA z^0G1|2gV`K4kIr&H@G}Em!Jf7{mY<&0bT`t0vv!K1LO?>JR3pjM(fXP7}1H|M@(3f1fd|BK4<;$0J4oTwi>dN)&*P|A2xT(pei3!`4J9o;Q zkgSRZ@4rVZ;K<>_7D$>o z99C~tmB>NQNit>>tX@6N=Nl*$NVRSDUA=nMHG#pwLG#IU-hqCmzn?E9*Z8A2h8#U| zgjKP8vKC6UxrPGV+ACa27m#GXg-DvQ$A54B{IhET zI7cZQx0DZcytkT<&QoJeVc`gW$*f(ohF}BO60?8(+BJ&Q?%lh`$vT6Zo%QkK$BqT? zH*+&ix6M%4HvXC#-kb9hd0474Y~Umq1Z0DN^=kjKZbp3B@sr7wfr}Sue0*GsYi@3q zpb%m2^81w>pjsaqFz{v534dtA`t=0W;PD$bZcw!L>eVY67#N_7NR$~cRpr*rn_2<* zmgZx+rn`6T(sR=D>@YTN*x=cSK?b$}6J@`>y`A2^eM`~W{rmU12u^;gDm;1eL@A*4 z#0eWtycNLa0(kFe6dRj1Zj1#JfZW);X%lV3`Mj&E%cT&R5P#_nB7aeh!9iBO)c8`e z=byx}qcsfM$8h~ud%e7;*xN0y|A8+IZkRMww0ScL(AR9CJ8(|#j!?+!*RSaklEe|* zm0yO2>;k?yd6F@2+!~*cwiFeKy`yo<5Dh`~fVSW@4yvK~U>D=O-qX|LSjdA154ebk z@Lwbp3Yj;qA2;k)eSdFt3^w2~k&Aqx!C*Wtk@tWY^jS49uJubi9V<>?c28Ldud}DoU8hq0v2iq1o$%16gc_>c#+{394^GZl!C#a1rip@ zCsn>&_%EpJCv9avC*W%{K5bYq4vYd4>|j;lU{+W79N*j9Ykw9pGCa&THN&S>e!lak zF4kf6y`nP;oPP-M6c;!02A(h_VKDBDoGbeF{ECVS`-Q&+kH)gnQsEOS(8h~_PyAm2jLEQ>xB|+WU`!&->M;yu3UQOafvmfQv2B{90chvXntO+4a6D$RKp8L{O;Ym>%cA86Pyr~STUxc zj0qbt;X2q_XuR=nwz|5y*xK6KVrU060EWR+Fvf)K;jpiR=YnbZ?>7GjJqalZ6V3VF P00000NkvXXu0mjfciL8P delta 2991 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

iBmc zU4u#6qkD{izC#3nxAEmtIs)H9OrygAp9VDc9u@!8N^HbVSF68VgDf?Jan(-pp?iJfKkwF? zZl-AZ&S12|ohb^wnJOcl-CkRI&js8VK0B#!`k!S+qp8Q^9E)CW*Q7>!gn7_rW0+)h z(pl5?h6l0gAJg90+pd>O85SbO7E%@yC@rG)Y#U;*B_C&*6ub=7I$&dPh7nUE4F?s5 zEc)dEC1B8-ZD7ttHHofn?;*PW_(4pVfsIzD0AiL_{w|F}Z?DOlfP&}k_CAI3*FnOQW%a&9cjGe*bPk7>Pk^C{5 zQ}D%6=z=@TMAg@k*q+hK5@WcvKq_snMhY?CZK4i;C6C3vK=No+5AaclcEFW(nZxiG z*>LGbdwK`m!#4b>-Y&j5=rqlDa#*RHNn<%8IDeX^frkZoCJa`Aj)ZXF4|qtiC2Q~U zsnC%LHs|#bPxLRIc0lu#HyTr2qVRpCuxxi`vb-xUNC-=_8Wrj=lGT1h>GhuSQ0tCI zj3SgwhM&UEQro>H(fbmLKuyx012b$Z{#b%W_F7NncV%sa{!K@6*sV_u<_SOFW)){M z(soG7Xu^RLFj2RynxZ%0aqx8ToZ`?TCaPYBGojH4zW zH^eOvj~Ol4Eenhbeg!?HDofTodc)12tvgi%bc;>U#SVxNabKJT)?q)!o6$0&2t7g*b(%+kp8Et~ zFeJs`?DfF`c?3YG4jcNt-!ip>p+~!4T>dylTi{}^#k$NELLQ^YeRqEPA61^I6=C{} z9DZWMzNfR@KHsPEz{)=-Xlqc1cg`(1!S;9>K1q>v_SS5L?nw)diIjjV_oi#JIHIH> z5EQc#F}_F@hBcN=1gd4&oydwZ-QVm4W1rJCaOP4}aaJN7 zyYcEdC*rG19-!+VsoXAY4g&u7^IKxDn_2IzqD0QNiRO2D)E2g)OY>GO4GG1qk)iY^ zzK@Ik-uv2y^UKRxem9UZNF_)}BX6C4msNY&s7(!438@^-(s}(%LG*%|Y(*l-S?le$ zrB6L}>OV3ck0n2t>?H6~hP69plUSd!6RDAKXXt-&?zSrMgcG{RAuXddXFk%jTPNmZ9Do^!pegd0-`jd3n}+_cer)XY)IvX<|=_Nq{&#i*O|@q8}q zKZV-NJKkyTLxBI~*UItLqc0N|kJ-C0(`i*Sa!7>k^WjhTjK%M+g;^9rxH*U# zxnsW$N!E_tmdmQl1#|{gz8ND~ZksgLHo4W`U?Qgf)J{2C_f~8CyD^v0PG91)mABLG z+8ZWCkgXxy5!56}-(*Y6ufO7usI7WkksY~T;Dijj98(W?FHdTPe86vbwJRXLlMrY) zr@fOFqz4~emh;Ay`=h)+WRtCs)bCf|mn#GoK9~N>dk0JYdFM(fLNyQu=)FE3moaDO z)=;8$QtRD3`aSyFz!{2ib(uCz)m$EnTL86sc`dM8Y?+HnT*|Maz?2uyemQ?y6g)7p z?J^!W2_gPlSXTPG`tBS}1(zyPTF;CEZQ!!!`U9kT!mG0bOP!Hoq#as^!nB|P;c2uB z*8;h(*=`Slfrm7a7@N7!403IUT!We#=ws2E50dPXFjX1c09Jh&nUmw<5G{^(w1FlD}HsXz;lM?Pz$O9r!bAMc-7L4PCNx|?PO*2dPmr1FjdkrS5@Aqxjlkq(V!Cu;}S=K zqn<|223+W5AFNcluJcY#tH4k1fAnaAPZvV1Knob)RfjF)IKAJ0RvmlP(6R-eNUr{` zF>A7_SmQa%kPxPuJDQH+M6wwgD7^pUGL?}W;l+x_N-ixVZ*ay?gLmF%ENJ>Xk{yWq z)KHj*Lr+9wesEYz_;V|{^?Ta`LHUB&2(@1im3k5jLbb_Z4z@!Xa%7GAP!WG_LMuk8iKhsh(UXJL{^k zUuWff2WNQ2@=V~31pVv0L04Hb6=iz&;>Uh1N9T`!C4&3Dj2=NvO=!z;;P3&YS$;t~2t^o{Ec z1-K@+$WEGlLfZWJ0SN&ymfi8OeeAl$%MkttZOVV|oSocR0?zbnu6pauC>R_MoqkNE z1woPQ2&b}&(W_Ng0x(msKb7d}4S0F~4RD~xYI$8H8~Zs>C*S~SY5J9TuApb>hYA^% z^O384yW1M`(s?RyVVuPJFpk#Vp>1=?r4PV4lE}(@>m}BA^YR^5zfId;P&S~mD|oAk zWdbXe;M@d_08q@Z7NINuSerg@S-$JPpIQtlZQx30AwgTAH_(5ux#B9_7T-0w#CTrS9(LOB2CLa|WmKkE=t(2SSP^ouR>a0Oz9wVz3c*6zF#)_-ps0 z*SteZoTW`6Jhq^0$GEl#(oZlzN!#k@87OV5^$skqggenq_SIOtm|tc^P%SFKxQMV! zN7Qw5#lfhW+%o47zRlY7b+q?G^pz3n7-FcD(FyQwjg=QS>Y0~PeR7;#+fuic&0X|W z_Nut4jL~Q-WfQ2=ULvWp7~jzPPD^re;kjC(C22VW)4{h!g z^fG%!jy_6ikj6s5^Ak(^;gme!A`&z6jdUQ;Op84xBua9@_SK5>>LR(hUN2Qe(W!E* zuQQdytItJ#Y@+TT^%w$?3eJQp15_inR`2e&jy3p;kAGWpQ&Td^?JKA`?DzM$_abB?u2y-mE z+7hb7k;aP3vA}*r*127mZl;Q+a)ik*Jv98IIB4-a_le^PUWgb18YXhk{J{Wp$$T;G zzcW_|$*9f9s3$=O_53R_bptowEw6VcZ{g}+VEezDisv@SU-(<2P~;1V?VJj6n+)oO zq~yBw4-vU5^q5DRFQ3I!c;&kmh*=@IoldbEsUCS+<}E&TD$@ zG?XXxkK~X#IRQmJl!zyZK1*+7ZW?Vmq(c)O4yR4++y=ZQSaJJ&o_gZQp!B~S?yCT- zts|>LN0{chdT-HWa|Jr*E=jB_uJUEFQfQ%F;Rm^5B{M2{?z-AC=B+AjlW<<2L^nsB z-a(|}#qu_WXt;*tvSiNGHN{fwS|RZB$Jo*X=+NdIzV{VXKdZQ0UQnhS*V<8gN4vpo zb9!B$V$~~|_76EN{cPPeW#%MYE%|T57?wR;7qd-&y`!%P)4J<58sajS`oc{v?C|G{ zru7Xq`)ZzNyoJIiiB!)UON`Z5%C)))ZRV^=&vbR7fZ2q_L@0TU3EYrd33;NJIg+=c za#gBH{IlV$sNWvpXz86Urny(cy?3y~xshw>rlcKmfNubCcX^Am{C%HRQsSkC1S_<@ zGW5o%B(+!`iQwf=V<5pKB*2T(^W4+-Uft_|NU6U|)>OCCQNk$Bpdg!x^Y(^<^x)NQ z6Sl+l3HaH_U!oIj;Nvp}FAW>zuqo6rwfpL+!Z4#=h_HPaT_nI-b1;}Yn=7Ci`{*`j z8!^~J3h}sQLp1uef|#VAZ+lawZM|-Jz<@d2{`}zMM+=AI(pQW3R{m(I(uoOv^_Kep zZ2x@D#tAK6udIjImUcCKmC_2OFgh;HP+B~uc+G7^i!i%`?dq9FW)g|UD|t6E>`l{h zL9yp*cDg0#2gK+!BSl5SV+$f|VqSMy^3ky?6XLe1qT-77+FW4*(6fIRnC?;xhp2sR ztj6#^_IN*>41v(=NdwqmD1zs*^)+M$0zYrSy`ef!gFLhi7#eYxaShme=ExyN-X7*Ies<`ePRv(uTuTZX+cs$K z2-RC0#u&a6@JeWE0GKuL4D%C`cw9``5?t0^N>eT=l36BGcC z%L>1H%jNADGabTRcVmIw!s}>j2=-_-J#{8*mtWfHEAyej3DKS;W7{*mG~=xX!Fv>& zvweb2;;fA>UivVudfV%~gMv`certuligH)lm;QH!g#I?Rup`l|;K`t&Oq5{ca}{@k zL8HwUgk&P&mss%euHvnIO84n6`x~0mPrzarkg1ewBo?W(`XFDnNQ2iGs8*}dO>=n4 zrwy=(O7zzBR2``l!KdM=HUq$xdhs2wx()(LdWi7xIyc6Ml2)2+B=~hGQf7!ZV)i>W z4BtS%oMUatVvk5S2H_wx;SKb&?!)D?r-ks~kI&FyY5A!P9%dn2yHYFP3*HOc%6)&% z*7X_}E%c+eW+&#wsS-uI|B#7qGDVGC*y?z_@Qm%XB%ZY}OEWy!{Fg_CyY-VirEtlo zI&}9l&t`wDHl~i9!2SER0uNd2ue9G3x53*?=BgUwiBPWJ=TIxS&6u6+Ccg&j1%qAR zAV(|rvU_OC{0x^NRXZq8r-ZiRJW6mnUsa4I5*V2Cq-8}iQ4sVSJ#k`H9cFx6AARyLv%UjVeTGGS^(I( zgOy0sv(**Lhk;3Bmig&KX``?8@<_v}cu~ac_;d|2oo$SzBF!`sXu(5sJVqRj>_!5e z;7%PB!4hB@Jn_!4Jxms&j4+3a8~`i($~%ELD!Tse%3ebdQ1m7bB^ZXgKVS!bflPur z`z%^{O$^sLf2xbPzokRRfV)JusQ#rxE#L;Xasa>aQ*gWi?3f+4w{!8(tKPbA{3l!G zO<<6Xq>pI5K^xEmhdi)aGVqJl@>cefEa4}vf0!`NhU1dYU(}Z|r<=(K+kp*@m<}gp zL}NZ^k4HeUS?`a%O8KM7pF?L|BpUX}EW2k1AfJiDXHioax58KJe?R z#t(Z?tl8wWm8Y%^RyjHfy4%>~OTIx)cJ+%VedlJLs_Nii(Mzr>ub?v4)Y}|ZNWs3E4g(O~(H(d5{D+W!ccHlzXA=l|lL4KSNrg;vFtKjQ=q z9D$Ld^1hS z0R@<+;xCY3!tOK4BAAxC85R@w48v|#4(x8q)_{}y|IF^!PTDgm*2phkQWRr991~jn zrr@ZD^R5)>6M{3dAKer>Yy#h!4jBeAnZY;oy{6SiJa-%vZPlvZA)NMEnURueuhOF` z;^cox{U4Uj!=26d{ogHBqeg8?)TU->&Cse@d({@T#okd=Yj0}r*n5wN5vukkHi=YG z)QDEAMwR}a_vicj0~|*jN1oizb=|MmdCq`bc_lUNvl7G~AvsWWc|J3-M~*J^NjnM} zrCx}(H}${se}oFzpMxaui2KJC`M6A%6CmxZ44>64Prc9ARrN!LtU)T>6G>37My}NYW|RRiP(4R4SGUv zZf4f0vQ)*u9nyYI_8H>CAs~(q0}zx|3C=`5WYlv3qY5SNO6ns^0z9OG%%%Xe&6lX< zs1ambbU}d?DTb5iuC%(Y;GtD>!|twvji4P}R=nZ~Z5PZhZQA(%CXlpYWiF$U#unit zHN!BACUv3h#*$Q>zY?FLwOms`y6*S)nRiJU0UjSjg;&e2?)PtRyY5?o7?_DL($K+f z(t~~qfOZWk^Rj*S;%A$Tfohwz#E)=VzCeqx?Ixy)a3t3uNV9%BbI^9^w?@;93Cjum z+M%qPNRvwilujl?Ohh*A^%5uR7J+oP3fYv5%=akc(@mjE;V<&yagY8?Sl+;=g$+5M z*qS{$xRx* z^n5|ewY~=g2|rR#qKArEk0%_FB23ZTciIoEW3D_3^0Ub#}AC5e8`1Ad*2>D zlL^+q;vJXH-v>qCnHs(X30m}gRd3ZBoX#AMs@dPKSlhW2eCnBVxka^LD9U*H$gf4u zVok7z3VZ!jSviZ0KPs^4y*N6 zk3DPD;`N!;jk7pl_&_GPSLxWv_m-7KH6~MAf`x{6uDBvBZhihaHgpwHR?KGMls;q^ zc>3e`oGK;*{J@1i0%lw%&GbeiMq*)x6}*da<*VNYl4}wucLb@S$ zc?(PHa7tdZrAsc1%xA>D{{PloXz?Ot@`RsSJnq@ZDa zS+P|pj^Qx`{sF|~k8{&mFdk#{3OHDVq|FTJC!KlU80HIX%Z=c}a%3NjP1CNw@C}#E zK9;6U`;x4wZ_h_haeT-16Nr&pEjh)lT}b*~Q)_ex<7+m+0&GheCx4Q9mdq$8pV8zwd)IDz2{Y18Vvx_Q=7igC zs1U(%>|iZZCTAVq{n~!~^K0Wv+SM7dG6g5Sg10iy;;?Q&BL7ZwTg+x{j+=<{VG>97 zfbBQ!nt{j?9Q-6sZ1s4mX2DKT+B^xaZ)rSGp6*mt<6*BJH}^Gy^bL8-Ob`PR@%j97 zOtn4f;Dg=J#OH>I#+9sf9NH0FW4`u0#?Mbuj%4CX023yKFe^ThI||18g*?+xz>;Hd ziTSuA{J9t;mM`I(8-x~8YAsa87I>dw-}dD^~<8O>HpKn6@TAQXGv3ptk^y?bJrE`vyvzhDPM5P|(*v*X@j=3?ZZ zmKgW;qr=rZ)%{x$NNi(oLwo)KjCo0j4gWy61czC+wz<5y9xsX0F9Eq_yBf(cAh4xk zM9~b`BhxHowu*1q>C1{{76+qS0kzI1sNg1L;PCPy2eNCl1I%mJ*M^vFpNiLj%)W@>LxKWwb=?rC>+i;V5YADexct z5nNBQdSRX=xXDo1-v^8V$CUDjS7sIZTEarpGaIbJBzWlNiK$11Y@_TBxF(|Kq3Ninf#lTF8oOto9aF#t_YRi>nA05STqxoEU2&S zYUV7Q>~N(5a4Tu4lRUV}G$IBw?YME`<2@kci?y;(fH%t>y0Z~WxFNUL{++0{LGycJD=zTHyIHd?F`2(I*u8B?qGg4 zSKnCT2V_Wi%LnPHa||;!&Pn+l2mhpV{9CZ_&*bOQdr&7Kr$$^=vM&FSu1w;5!5(Mx zJvXP+)%Sm6fK}4HdH`(YYl)Dex=h;$Dep;w-YZN8LHQyxAI2RKUwv)UJ#90)8>Qk3 zd}@WaRW%pMh~yykx_U;juyXPcfCZV=w=C&j~dci)%ZjF*0*^s%E>`(|Ww zQkZ6+?X;Jmb)%4XL=a|1fHWRtYAq9)I67+2EV+zPDj%neY8{TNeAALkx0Yv`PV#+QYRahAW#66B|_Zx3NR4U6&o{OVi zdS+(H#(adkgI_d((Lu59o*`bSBJ+`2(E(U<3&H9LQeSO zQ+dic90gkE>D>=;M^<$yxP_!vXD8?$X{(&RL&kd=42W_}qZkxXhU@1E1G4kUu}9mQ zj5BsK&UHB2KgpmqV*Jar$19YGD{RF*-M*0Un;kKg6OlaE^K}=72-p|U>+>Bp>NSZ^ z!9G8a(O(A^!@qcVY-*P7r8lXnR@(){Ft9}gu;PbbYgC0EYoZOQ)Vc7OSRc=E4L*zC;U|xVnIw~eQhwlhHSXWm>RhFFuk!+4p zALN?`lazqu_>i=pqIO$vam~H9yiM{WsNF|^ro}xl=nK)&$l+4qzwRKosOf7_Y-1KZ z!kp@RDiBM%4)lnB2zmkL9Hxksrg6!B#LP27hL=`$WPWxhU<&~~ofyQpGM-pA zQ5y0-YSI?1<0kXWpk-H8hY^iLni>yBmYWizbcn%F3V-H*>baq?`hCmsKha>|vI%8S zCl&_s*Zm~xXzx*eDS>copm3{g(0*As+hacd!_f+6Q|(du#Z|}Rkb(o3<0(#+pv_&F{ggm@GCEs4Q<|-vg0`SsbDa9bW=3 zFQJY>oOv)#1pd{wA!het zq>@4r93$HgUxU5LT0D->X(&0035xeTzYG@eIA6Jh=Q{8h2!+9l2Xp~}PcHS#D4i_F zgeI$QTx*LcygmwH%~{%`yG1s;g>|k`EC|`x7XZ?lw*;P zOYW@hTng9v?tOm^*&a@%rnWrpZ@@C6kFUP-eIE!|md{FOIyyV+4JMz&uYX_1b`j@e z8o^AntI3MPR+mEon40%T6eVyil+#3na2ZZh4GhZ8c!cUW|K-|&w~}4{s?^p8CpPj<%`!c0pbMZoEEx`emjL7;FOnCaKz#~5z_x{`bkpJ95kqL!$L z3P&e@aC7y-CvLy0?gU%%G&t`*tuj4d9o3{CH3ekq^=%zDW#zS82tFHFvSF3Y6 zvt=puYp}5WXOb54Ycu%<1rN;Ieh8LJwozh*Z5*kET z9^N#6JdY90LL=P3zu6=3(b3UtdF}vcGFc+c-E;K9XmZYH@4nRX7a6*WZ+9Nw6fh)Tbq}N6WioLtmC> zuG>rUX)OZUmqb=VP<(wVR^P988m85eC6E5r`mV^1HF_L+5YOstn(`Q$V#Uk?yx^2X z+4SiY!0K4%C2?tuzncOo+l4(?{cv;cv(!I(C?Ck@2-ui+!?Hg~0-$P;*7?O3f}p{V zV4ktU=kM98x3^_3VqDKJ_J4W)1Nh+$t$e^*i~=vjK6&Z3y*9%3SV~HLZa2ox&ex=> z^J?>8U|^9BzG0Q*mbAfq6o;Pq$sYs-kIV&ILe)5xI1mq5=x|}MCbFHh;g4&SJ$B3a z&c7RAoU$b#+pXXuCZ5gpIOrf;XFg9pi6BoCdD>yn3!h;!jfV7I|FNhDhkdUWs4a%` ztJOOHA~(JC)5x6O>lC}=vf`eMf0HHPnjqe1Yqg={W)h7m6OcF>KB{&IFxb|~9g`DO&eKY6W3 z_ky5L3VS5WT3>LrQrbr_2(=4G~tg14yh;Jx2UKSq7D?X#3k7l{>Kf@5b`~F_5n(XG8X%G zJjuMR5%ZivK;QMMMin|>s$SmF>R|fK3}K^IDhgH!^vb|7U~}IvSXIHD!H$2C-#lD`K`RT zSc?i?HhhTcVL0sE!h`yQ5&PLQkKR1P9A`D5<$IWYz&!o}P?ivEYZEVsDBG>P#sXH| z+5I~SuRbu{_7Mmg_@N7EJ2Aa?FK>1%NQ{n4>-ZrVT#O7hOTc$A73j*ue}hWY{J@)$I+ff;ktOyRAHf zk}}K>n9|u?b2%(+<3=1`x!kW@C?|<6DG>20*kzTpTT}`DspoW0izjO2TKu;V-@tK- z*IbHdt^WXRC}ptHTfTjNb)j+76vQec+v?zH3O3+2KD4v^V~~b%30jBcmPN+p#PjBz zsrC-3idDOqMKj4}_>YD))o+xo+fn78k|QLV8^2 z0-Wm~4Xcu{%?R`BZ*Su!Nd+BhImq4?w)&J!ZS|-G&=>^`ixm7(o;Llta#ZIGIjUBA z@}23hb?gWWJs;nnC7=kBj8@gL5BbN1c(Qn^NjjV3R+R=NI8En-~*u)mcVbH{EqceOf6L6X+Hz8t4Q3{T#a3<83}WMd+KH>v)ud}j2k>huZB3uvs)CnD)2z)t&? zbD$7;nR>UPp6lQbMp->I+W8)G(+;Qq{w?aF+ju+zAjRIb_HKBU?yh7tYKgYD)=6F^ zZ!qJT@COH;?qx>-CfOypF=HDy`|!}ivDdG9bL3V_=-=p6#4dDrR!OZz2fTMTV^XUm z3ayIgD+OyNsemm5WVR=BU}#)o8{DPn{;Q}XAsJ&m200Y}L*q~YUY+H7F52Hth`%|M zpV-h=LBdru{S~5l5ZE`3Z|aHclfJS&?+bnW1GwE6o%w~HJGLmnRYXL1e!R|pe;fa@ zg1-z$t9tx%~O+YtV_$q;)-xwn9Imlf4vIBFL zT{}%mNQ{xbLleAtnv8+v56Q32c>IvZg}*tPJIhs8z4-}ao9uwOauBqJ-uQ2MeR>+Y zSUnojV{TvdbjcdCIZ-p#9OJaj`iD&Ipsu|mS*^!F6?{MW$|#P9pydL_=di(HWmhlt zu8rIL@27)Ku?oe3f*?&5JjV6zsoj=ZqsRB3y~6i}W+pqBHd}IM0_M7c26tub-+$k4 z={(l^Q-6|s^OM4U6c1H<@uc>v_q0 z96CubsrNNWkgvaF8SQ-adoMd&I@P5dTrX3kX<-EZLV0J=#)4|iVw8oP|50%HKY%RJa%1>93jH zB&^R6MHAqNg>Z4-!?=^;4UUkS673ZB!7ccD1SI|rJnQU2|5~ud{2y(il;l%hSO81% z(yNo%{Es(pYu&-P1;f=+J{4WvNrm7vEwU2a^0KmxtF8Ud-~<3!Xrec8w5#y3O3IUB z>^NVkO2<|eCjJf9rRc{Yx@g)C1f56tQqggG@kE`UL+0j0hE@F5E0GMa|aG^9CY&pq7%+4t^5^)I>XG zMWQKN>!mRvq(QGMJWiHz?O!n0UjEUCGlNs#n4nHZw_l(>8Ymk>t4<^v_CvJc1oM|mb2{;zB3d_;c%k5Wo@pu`#NpwgcIAKb zirRnokp@4K>!pkYqW3W+a!%mg%7Am!FO?YntGKCbhqG(g8{&Op=%ub%p%BUmbu zUIt<)BB+vz{JJBtk1wNGBH2U!})5zTh zJ0;{$?qe5cjUheax6STwf>>LAT@lmGcc`ivS43F4_a|(2*)dvaJ^`{Vy2T0@j_MvV zJ*uaZ67BoX&3HADQJ1i3=UaO1x_%Sz!CV^(Z_zMVAz#9SOtTUUp8)yTBIg#KC{O1t z`RwMR{CrFsh&u-0->@^ zZFpdU3wGgYrXUG_U7)*zSr}bV$>aox@^6Ci`t?5#{*<*WK}sMCE)8Xn=*QNRXO7){ zp00IePl8ba)~I0v`z3b=Temw13pQrv{M8^542}rT<{>QV)CxGK%{OY5PePsz`Lm)1 zzz`7L)c#`f|y2c|L=~z_aa089-0l)HbshD z5hka=r+gBNat-j`oD{8EGzzdUO@xguB`ZP$h=;aq8zGEv$o{k2m@r?!tR{d!)u`ax z4g1JcfMv~}hxg-?I9mz@>gXZ%OWx9}mz4neSR+@j351nj2Y-W}i=h5bfbc4RjL#PQ zh26%h%HgI_Eo{r)w?@Eg0Na#B@A@lzxH>7eKDo0~Cz5YVBV&#dx^2|Lz@rXq&QU?l z2CWS)-}iW1wcn=-d4!qUg!JU;p)b zgkjG7cSsLUD<`?y=GIlaV|}%=7o2`C#D4oC4L1vn`1|HSVkD%_%%??JWVYLM=}7iE zFNfb#@z&ne@mTs2zeF2NW|ym*j)XXeeFOa^@ag|iRTjvh)KUQMUctkn7B@2kJnOm;Ouo2jD_?8}ct^eEsQ?gJM7$end zD;6>CiirxXzs)@OUD2gJjL#ZK5yws4!$vXsQ>0BhxxRpH-(K@665~XN5nKX|21~g( z<(M4p!M$#QPeI5;*xf;z*Q0YfZdG}YGmhJY%tYN|-Z7i!Q$jnqk%P#5T<+_)lSqrt z=7C10l{e!@7@t~aBe>xSzOqvEb$^Ya5aS5YDglUKk?tKvPg}WCIpHp@eU}2dCi}0# z|K+BbrLStUHUN65kIw!962=QmSe(0CW39W}{?XB)Lj(?Hf$X!RRoKUm{|nv|bC~o< zO8!gK6D;x5%O~~^OniUwjjhk&CT2Oywi(PiiFp&S@n{CELxX+921ZTUv&<$BHhXk5 zQqDF~whjU>LA@uxT=hR&v7^woiMd0)XzfOLW;=@e<_W@(YRyL*Oxz7U`%5#dt0)=| z03)JCzv=*zTOGh`PVEQ?5tuQ!PQQ~&J2d4(s!a5;%m>0l84QFT1G)YH4e+<=di*n6 zEN|4DZP=SPg7rV#C=l*SD~8(==y+R0zMo{$Pi9f%15J5*Y=a&zDC$o9C%?r1$ODRC zh*C`k0MTB%>6lAqk0NLtpRhs&7}Fb}lgT4sGJb?3Faqh8lwF3*-+B#dPDEaH8ZRV1 z1G-tRA)_!!N2@+lo4GsId^`n*FUzV^EmR-VZIdGgEom3$?oOc_yAxprKG%@}q?#zS zxcg+It0r8WUpiiluj}Wyl5D=1u}R4v0f+TG8ttU6kzLih{>9Bg_X}h+3(?MVBu3Jk z4~$P=&NKa{+5SRb?ZQ(%7YjWBrG=+pg5$m0TLhuRT1d+t%g_aILF*u#IY0V>zgO;L|m&rCWDkeRdA>gN4I- zuif2!f@P7a$eUIPahR_?ErNyFaDM1KLx#i7Hjp-tc5PbQL&Vcl2{!*z-v5J9C=7d! znZEsw6RdMr02B4b4WtTcw+wArY3f~IGNawFUK5kM;j8>-+eODhckhhcY>YA}`0~kZ zKpQC1aO^FOE!ktC6N*D0Q&<32+u9IC^0U7Q5q)7Wy@C>4{|&`w?0t;J`r-yzon(mc}@Q$z={2zFHnjrk25a^XCtgwMf2EKw8w;ye&&Kx9(7du3(0J{^0(9 zvE+q}yF$SZlW9zgJNvBQy7MT+lpgP_0%u#iE#w8U1|KVi*K_}g7-L#|Oz!aSVMGuiU85TR1LmuU#rJ3IFkjS5{t);WEPH)$>hsJV8quiN~c=q9xJgw~4Y!TC@B1xgH z6ZaT=+sjFL$E|1fwV+_oW9;tW(@`?OfGUb6wn@t^lNQ{h;_QUlP6#nCbke7XN4J9!fWr3F9pEfIv$MyKB zmZjs(U5w9!Mxpv{>Dh7jr0GC=GL5@M+f4j1~2SF5I`$e~8Ex}5t zG-u+8-t~*ilacN3LcLpQmU3ONNV`Dx7k&?91{}dSx#yjJp{`W`hmmok;Qh_TWuQAC zF?iu!3~w*Fg{2I44e&a#2GZ8fUU&r=^l>gOzl#y=(U11934G^7R*5s&3%v!ah0IN1gzGK5qNmy1x_Z9M9_jI^(FLp-uGOQ=TA3ad zV~r9>Xgeqti2o$QfvAJMGt^=j&dk3(Ew-RdGQRvXB{E4_ZW)TR^NlVnt_5XjQWGjF zy^%~z(XTcXY88+4{q5E5=1tUZ75$oM(~39NLZ^j(9?tOdZeR`!nWJuS%I%l&dyma` z$JFLaY@rvI$b!w)Q3l)X@P2pXq)1KJeIa+YOOJ;B24BQBD3O7)b|^3GMTo1Na+noV zf;Z&}(lzSzh^LU3MkgeZ=ISVq^3Llp)A*ievPr{)YaE*8p=H2+kN%Ci zJ%yxIwMf8m!7brh5HXZ!P^8n}sWbjCoE+~Ke!WMOm>M)6lvi*4;nB3K4VcKrVTB?b zrnTed{gdfv!Af2qav@G$GEYhv{h(|CuHA0$48Tlc0*~>@w$zxlUQroL?geK?!LMwd zxpLLn(#Q4^h%33yH%|M#XKPOEk9?iL%S&&xbV2wrqswoGc5*IER8$eLKb!9_V{~~X z0r;FfR(tj+$2|bBMpFcT<5!y+spo`Bfi-27ZJoJ}konzj-5p7>9zhLn9Mp|I>@mC# zQi(o#+rp37HkjH;_~pmjSmW#x9|2R3ryZu@Hu&_Xz5VI;vh<_zgW9}kDp~Na+>dTS zzit%z>c47zL}RgQKH+!(Vh7#gg`TI3pHuCu+AM~-f)&A^rh`&&*}5HIuF~x$=E7+A zfO@>hp@+Z4ZOkp$6+<#4=E#E|L@;~&JLxyeD+yrBRQkBbSHEs`E?K0hzugxR+|_Z? z7JJ;X{8Vi7dw*;($OlnYkLyoQU=%4}#Po8!IJ><3^_~`^PAq;dvfkP9-fN$Q$o}>- zHLwuMi8UG4CyIgru0w`Mn5#+O-?YgiPP`1Vd)01bff!@PM&zD%a(H|PF&KJy42UN0 z+~-5E{5{yUfS$jEW^;Tf{V_2ovg&WucCm~H`0o+G{Y-kn31V&r-3a*FYTiZ%qbXTh zvV|IeUT@of>Oz;AgD!yL|A?OFvxt-7MKXB9C;PF9u4UC-I%G)0I^ZB*&lQRxNL%op zSEWdPck&=c*n^`RhINP$Hi=Nm})iC8H9A2=`DN2u`$m^=v^p7Z!cG>6Z zyDOQqCii$Gi&HZ1`R@vG*AKqOFo4`UX&eN6HKz|TYuXPx9+=tu^O3akV*LEXz?Y8e zoZ!!Vx3vp*pM;{DF%o1eliSg?kiXijN!97d)w*qu4q}U&=-eiHmjBi?6<&VFtdRQ& zB0x(ph5RDdvkLD&ezSWf`9(`?t-PNjLE0B1OR^s3>#(6CX8!BUN4oJ7d!6m`nsFLE z5-X|dEztRJxB=)^$4Lvyj@C|UG$vD)nkl*SDA;L+r1X}+Twy=cSq3bc)R>)P)<{8B z<~F|IfXN@|veHrwAJCr^y#+`5kA7}5wAxo5Rw%^`Zw6MsbIL6b%hGrq>3I{#Jjg_G zOn?d8FulHGIo0nA`ng+5YWHTyOynJB%{Q?=q5LbQ7_}i$bMZy;CoHoQ$SW;EGG{u< zx0r;z@`{pkb&mTH=z#nK<^F);Zd)!7d&ov$w#z9y@Zhw9&K1)Qj zgW4Hx^>6U=AI2w!3nq?LP5kN%_ZL6*$he_0F9S0Lb!0H9{Q2WZ#1glG*g)&JDK%m5 zgIZ1Qt@f5^{Kb(+&uxUO-e{iI`)+sqyJy&?mhmD##UMBw5J5F{AV)^l03S$=#51T= zN7>fUd1GrT5Opf#lD;>lK1o>bEWiv1w$>UTxCX4zifIX``-M=}i0zvdOH-h zG1e~F&K!J66aA}{--}hbqmjYRP%C9gz}UE+?Wef{YL7UWc$TtoYYlQAW5y7bi3lFJ zRD_-nk;@#Kx9DD{M~wcjm(^zy4=`2FEm`rE{O`nxF%ZZdeB}hRL;BRq&Gz(q`_=On zx%lk>lF`!b67qPX=Yi}9!ficL{GYKh1+7%JP0a5;1CU+C*qLdQSh0vA_;|u?1uw_v z-QEiWKuiE0@!CxAT^b?&&nLNd`jV(4aK5U(z6w3URTm%;{MhsMDMYdWN<857&Lm-tUcNjwjTtC>Q!CjyGF>FMnNCc6VdCWgj=)kQ6vo7B@=R z%3%uXl!z=M=`x5yR>{=vx|$TX--3`wC1U=ZJ6sI~U4MnUXn_-Wrt24SZBH+1&uhycG3~m)#cg-R<@s8FG%BV#;>~RHmvVY;t5Z0UUQ~~!{`3jIScz3cg~+T=s{{zK-Hbmn>77-KOjRH_f@SPGZ1H6il$ z871%vTwaaz$t=x^dQV<)8BN1{awvH3-XVp{<4QSzW5>Q0g?)9uO6^cjo^~%h^ zw>7EM`;DUAB4KGqY~l{;8GL1txUr$k$$JaFAto1p;g^E1IX596pZdH0*xe7aTlvBV z6ok`&b(k)o^$X}#TWj(yRNI6~1^A0%a$Twp_{^V&yAT7|15v=vkP0BM`M_e3oCw$o z2ygz65pnnwp}F)5WwPXAtb{TM>GeaQm9@y=wKQeR_`B2ClqW2cscU$rJ zOY2fpZH=>fk#w6jV2xS2f;Rms!!0!p7uh3^CHQ3`DDNeE__IEu#b!F8C=uO{V?D5&dd)SQMYT%|HZD_55FD(S55 z?0k54ce&rc({`Wn9=4^Sk>2Qc`8TM^Oz^d=KHSv9xGim07S2DzpxM^e5@FjdmI_}z zZVB4LF!E0ksDCxh$wKiI zekkD2{QUib8qdkDUF#MMfaO{v2i7d!E%<6bMQtv`Fo{1yZO;GeNYe3gVZLJb6BEyk zcja&6yFS-Fm$nDtFJ4o~{3rJH8<6QZEZNNI$l@WN^-hkM>AfKRwn7igO5iQ^5(p5& zaWQT)d5E|D&7jJMjHu?Gdt_+LW^OOTQM5YaaZ)kG~`dS_0Ih#1TafJ zz2#Xke-qJkJ0Lp1G!*3uz%O zBGZzeps$tM)_jv@l#yN{a~|=Kv7jCH1)J{$9IbSYua>tiax{Isob{yliqaOlTJ8N) zBkq3?ZX|1~7Op)gZDL;-lHEC=*2yRQ#3P~UIA2q~s#^-$&9?u`1745AKQQ!N(J7D* z{yC&pr9)Y$j0Cq3<3BIYy)9Bq|MEe8Q(|@Ik*+ZZRP{M0tA2s%U40NZ;vHv#55K)= zK!qOOR(t&w`EU|f(WM~7y8+$e)p4dy2N~VftD;UQs9|58C2Z)8goTj~PQlFXgxpY0 zzg+n7U^)%&H{6-*+i<{0h3HyIIUMpv7jPc=+5be&yxLU$Qnlg5h>zCYjAnc03?;^1 zpSO9QPn)tu$+e3AE-uQ;P3cmDl~YL-+N0tWyVld{6_mnD^$&{p6+Mqa{&r}j!3zTY z+C5d>7{_7bij698?Y#6gd(P}(j^Nn0-0`ZC4!@!~9zc2jg70G9Ou#I*id$j#sVh3S*3fI41`{B1l8R=(tJuwSlbDOPxlL(ck>8(!3K+@E<+!^IhiOvb zTJfx~F});0{*FFM#NeqSKafsK;}g66 z=rYjW;lZ*aXtBAHYqCFz>s+-WPQ@QXPw?$d?jl(( zo%}dAv4`sX<8x~|ub;pNt!3T6q9i7VJhhSznCz2bVR#x=BZTSg05Sj0 zmyqkVwGQ2a9{&UGCEdHk6!=7ZBqaI`(<|{QOQ+{o`;YmYrscFHi$NW?Xxr8pfKC zE?`F7-jF8}WAth?8TwhTEGLMc#~%FT9qoOp9*gYh0bizfrYFF+m1!iP@ENY=SnpPa zc?j7WDIR%z7lB>Bj|uGG0{OVy7Ub@u7@M&@36*69O7xpW5xDuYXaR=0uj8nVP*~0q zAf4-FLF<(G)rS1UcW5TV-p8VKYH`;wFIs6axPPbpTl~+U?Ik&R7AU!RmyWww{l8x$ zQg>XP?&@wtev5>$!^ax)%M9#KX1B_sI#}^~_(joWSB$esrY(cfG3DPU2rx$DUja+y zk{JR%TX0k?6AeKGKVfT6H>!vKHu6IxZ{WmPYwl`plPB4mW~7`O~1y=Rvb z{yQUVva1Bwv@|!6fI9(_Q1IgwA3!Mc4t<0ejSRw|_oex#bnXt7>~i4Ldr({$ED&Qb z{Bw-H3AwXT;h@+R`-AE6bfnFe?5ak}?q44Mw%jfo;xFA+si3`R+x6IXFoOAujqIF$ zooq|ZCtW*{s*W|8$>O~5Jvw`*Zb-a#k*A1xTcJq&@L{WWH7tj6OcP*2C37M^yG>!; z9>)_$x&It{F#IAQmp9OJJU-E~)qGh#Mm~2-ujbP05%#L>br@{1y=-GuJ;@eT9aVp_ zf=z}Q)9*O-aeu?Fn;Ad;Ht~oI@uWrPj1lD)^W2y>ZDHgNZEn~7PPNW9aempzAF`=z zKJcYZmUk9%Qi(8P{kuhtKjK~#0aQwHI6%AIjHx#X;hWAeCtf2tI0{wKl21XgE#@5*O#y!01utrEk58YbX_=*SeB)<}lvde`cOb%s`T2n+Id)~SppR^`NS>b+G!A@^Xq}@3jXWD=Y-(O! ziM!+RcwF54ghtB_G@#26x)Pmk3?IsR{^#478W+>Gq1tkF0Kvqg`I%qVYpScc5$=I+ zTIv!9M z-7~QcrnT`qz7vg1RN;_JKqiUJOX3*2?Hjoq@=JINDCmQsR7Aij~iL8;Zwm_;}uCQ$kl#o z;?ZG0OeuJ7rn50SqS=EA0|9HC;#ow?a1?KwJ)xzm-PLoZkuXeeBSi3@VX1P%n{{+@ zL3~!Be&Q;~NK=7gh;lBF1E4upFyt_B18Rv0Zu_zITT6k?7@W+`dHf|vY!@doThr>ul7iIlFk<7uWbW_0`{07w^ zL&uT0vwr>VTK(JzxTG-An=;1S61bbE=-Q9RD9K#5ZOY`Jg@8TS=7)e-%Ouvhqhb_0 zmiZI#y5{LB^*3Y6sXx~CO9utsz8K^f?EYOSzg@=G^Sq(3$UXVut@wU1ztF> zuIRB8xdk&!hQ$VuEoi;{>j>!)9(=!d=5X-wbBC@xVU2`|i)?{RBp#dnuFQ~I>b--5 zV`E*}Iw?lKvH=B0tbS;=V1laIi4{{;B)_v0pN#{}DF^f1o6GbMO9Z-Njw{Ok7!C4Y z*;@6qC1EhZ1wm;k>LdGr*K%g-;;re=fl@W?2GE3)BRca|Kv695FB?rJ@7Skm6FOn3 zG4g+RpPVI3R4Jgi5^S$-f$UG(!vhTPB-=ZuTf4O8V>dRs^|-3@XMy~U_iEvz7<#_S zurN-4AWk`l>Ds@5D9l|fK%5ITnCyp!QB9u(Frg!tcEL{(6g- z+3vMc*=``v=7R6@2w|P|yW$?2J%$dbG2ufmr>bGT%dcc_t0FS zPbw4qP}V;`L_=lVZ=VeLdps8tJIn}niMb6l?LB_-gMs6HFw%Yo7F<_!q=M4($ayrh zdu$pb0eX5azdo+?Zt+NWL#6J*>;(c>u-dfxTSL>I9uud}^L+RonR z{rTMYb-iARGN{A&1Bqn$FWp!uG(B^emWgI*I`Z{bG7A&$Tg|#>vOa!Tx7u;0X6P%}`~<)QL_zm4$G{y3=4I zrkd{IKu?2g|Ay8zW()t4u}){Cp+Rq?Z{w!XinUgRAX2(q8}94fM&4LAS(yyaT6GL0 zK(>ZLNVHGhW(x1#xRNXbl?#ti{OEM@;bETE={;{` zXeVpGTU4>6C-9YV(Fu=i5R4hN>N!i?O}5x5V&LIdj_IGXq9s5II4#<)5%PZYf&&MyO+WrO29q@jk2jdgdXaC z0qVol7*-M+0JCF4Vq3E1<279LJ17yIKjR{RyMBfNe048;YZ?KnI0#LYPa7?AY{BL; z78-7m13-GX!zaG7+?oDMkoG+jwf!qXhjm1}nHE$JPk=O<21MaZ_luDazQ@KKNy@4A_o-WSe?1_X0%8~xU8^+;kUwlNss!*1{*yf6TD z2G?UV@^hAJFHz1Ue?N~Yj95>%0TA};cZL_t7p_%VUt^^D&R-(zh9t}++X?w63fIfb%~N5KI}@KZE-rmatN|J ze{;_TY_j9-*6b(Kp<2*RkbLuCjVp&8W_5E+xA)@ckCA-AoV8$t zi3;NM-d(pXp9)>fd5_oa1-~E^8wl#wng};B0I-hGAfYsW$4*W0qxT+nPaY3_E3@_@ zT&P}fR&azVxJ9}od9UP>rlOqUH#u5f*$biQZ!?FI4hDXQpb7U_5_m`odp5rPs|AY$ zf6(l~ogSy;pGt!#*zg4Q&3!h*_DMR~x9KizI-^-!mt*lW=o7LZx{EaTyx>-fee$$1 zU;p#-tn3o0HvR=3%C?B#@xnWcqPlt6qO-%jpD{SP$rqDJkGa2|n~7t9ilA1eMMI1U zx!}s9xJ(LszeU8NQWTQcC6)T=qKs`HT2DH%`ckiLw^PM+Ka!iym3LpP%q)oQwsup^CH0M>%z@WLoD z#2a1;0ge&mH>r9=%`w0ywljaE4UIUr>eSWH`(i@ktH_3Cb&pyj>cmE|eC|mOYNTQA z(1l)}qQl+G^!o5K4@K=2M#xL>NHo>Ts?#V|XW8fBC=0|=A?6_x^V`^+Xsfpo3c{Fu z#qK4AZwx`iG{;mgJ>ZPI<=O8=+e;&}>UZAc^EkRxzVWhT3z)QjG2S$@rUudKM)6kW z(vei;7YpC!`f%p-ewKJHLcS7*dbXR6<10NI>94z07PBRa{d1?WW#?c_f3QaT<0=Tj z*bFUUxM6G{n>ID$k&E#%Vj1Mzb%g1)U>JOPlhyLNLHKxu(0ACo?U>@Dl|7(Mr*}F( z<#yzmtphamFRcVp4bQ9WBWIEVZZJ8!!v%0L*%TC@U_T$~|CBVy$>Bz+55T|SqJsjJ z{24R;Z1NqYU{mMiWbl^-xe@+Lg8I?samc?^YkLC+)i1fD`-};xh6W0BpFHk<=mlKr zp1oK%n(!T}z;8kbT?9^)-GqV>xz%Ye)B2wo6I5#i1_nQzDf`%ZJ3Ie@lBgz?yN}}v zP()VV4X5Bud#^O`XS$6uu2PsGka7sWf>L#;3$&=>0=Ezj(L6)g;mSU%!5lrRp&jF$`D>cZ72`fFhCJpR@0U0fV@q^N@Uu-+q_%rf##j2^U;O25&2 zk($+d9q#12fz^$9#{TjQ4+cH($?SWsw-cVasrKN z(x?~bY23zmMLWYcVP^RYa-<+>H#W|B?<@%#ilp?Z3vJ~QFDq}?i%oq`EG5OYQOz8cT z+EX@h)&?ZL^&HeL)=DaXO+67|1Aa*EmeGb^09CfGg^KJ{e+Xhtb$NFFO8icoXVeob)9 ze!cXU+f&Z<4;(DpTl9r2&N&>H6q@l@F&$QTGqtglnqXSdqzaZ=xkC}c0^egbluw6Ce?z!d<#z2}b0O#U#z=xU4 zt!@H=kn8UuG`*rB`xoCvEVasRPOq_6W_2L}p1Xs&W4$UP4Of~P%&WRUi43bJwx^>; z;_HmaV|r=WjU4N0SeRGGd#|UcbWQA?Uo37j)*>0P<_Y^QS0f&F<5WVdGYzRzOzT4j z7xd7I)t%HkFO}qNGcz0HE{AW_V&W?hv6J{8 z3~wlw#!^w+W0|I;hWbCZ#VqgjgPz{lhNpp%3ze;+&-24+9^U&$U4nI_AjX05#N4$-M z7>pkstBDLd*Q{|ni`JIVM;Ep3|CG-Q{pCvqnQ+rU`yvXu*MD+5~?EZnEx$F zUIS5yyJK7CtGM%7ehh`+xk&&dsg|oPJzk^3dtu!4)xqJJa)1U}q;6|Y`|d^h`4j0V zB)*6Tsc=@}dZ>M8t4KtpR|Wn!w8{tGfSYn% zG%A5b01X({keyJ{7{)NVyZz97V{=R9vF2vQdX2Yoj3P^hC@R*t`sNp9oW>M1BKtqJ z^F1*Lm*F;eVfHHlb>;2k{s-UnHWSV1Z_9YF(f(Xlr4j?IX_5cKTsMFGVaMp!Rz?DK z)P%_jpe&(B*jjKnjSL@`&LrcsGwL&S*oxxJn|ddH>@Z_eUz~S|f;eclwa{KB9N*bS zffW#^fjJs`kVl?-V<%2ZDP0rgC{o~PUvVo9$oBwVsh#75t{S=qfo@OVK)XcmiNWj& z7Z@BZ`WeoAt5f|DvRA>XV_hXBoz?yzMAlAn@<&Vo;dqzp_qJC-GWWqx^PztK9&!~X zEZ%{QRWCKm)Au!!nMU>-4#i*Gw)wGTxXt%Ht|vO2=Got>(1F?I>6>N5Q^#9v>B$A$ zBztWznI8s zL{4j2|0HeT20aW9QZ`J3L>~@~lL*MaW1u47oOLu@Y3<(rel;c3H)WEjptIWP+e3r{)1nsGcXx8Cv;c2i zHHALiiTyJfQqXJDYbV)!k{J!3g(c9zk|98iC`g@f-aZ|C{;|0P_>J^q6V&Kl8XrmT z0YBV#42+_OiPoCdgFGy=BwbvxU4^Dee+R(pI;Xm^9O(*MyCRzcL6xJ)L~}BL13`5(Ak^QSYXfc^SIn?E z0ZVWQ7jVy4_lLPei`$=a{o;jK#o`|S_y zsn{r+1|MPefJ0j?p z(YohV1({HiW#-QrYH;DUjJSQ55sXzy+^FhP{@*^kdv@dIJ%Uu)Pn90k4$RTZ1MP`m z@ac)qQK%rM)N^gzq%Jq`$mN?8A;_a0obW_w|9GI2kTTF=H*wbxMI8x&skSCaw>U)k zNI4DYBBq;)k-7KCcq(rBrCH+gKO)M$=vUsZO=GG@k-xL7iU`3B)O*03&36U(+QQdA z+qk0;FGb9hoI(Fl$jY)5OH0#DU6%wAvPW3VJV(Agp8~nFYc_L4u){gSmx*~6;JH$G zD86}nlW!FQr23W`bLOMc{R~NJ05E@@i7|2%AiKDle)t5n>3aLF;hGfu{f&TlHh0L` zP(AEO5#Q{T}Y!C12qC4Ck5yB4zLl_C5c!^sQALt9%a`a^PF zTxQ;Z4^2OSG`jr|ZS-1Zr6xR}kjdE;#?;bn&8mO2?}Q$gv5pC4*jGki zBTbdaXNWtGdwfSm`uy?!L%`lVd}#Z(=CFZYYvY;9a4)g0t zMucFSK#!OiFsJw9ttSQIyiW-%Ev{1^WtSLj!^kOxE=Um} zy<6EqQw%+`^O!4Z&yi|%7ti8>F+9WRZvkxRne!!jg|?{U31{w#z)EP_%~Nc%7Y($V zJ$~&Da<$2SSH^bqLF!pmsQ&Y83TDSoM(nRD?76IY6rW$9srS9fGi_Fe+E*tZ2*B(b z8DC=KeaQ}=LYk$bmKQm{5<3m5h8i{sC?a^sb_UN~KNX~@2$Lg8Mc5l%IZ2TF^~n&> zh!7h6uUcGHXXO4u-hVd<8>O0eBl@{;N7FC-C|JCgMDwIPY^<2Bmhd}93ckPRn@{-o zYQ*?oOvo+Ss}50i;#FQc-t7Ek`4hi&5jNuSO#;MfTW^WXE_^5axz$$;8+}Jc)o*2U zvt;A@GIPnuSxMfnjXMEv*tGi5opS;rR^ZAP?1a~w|!e_7kh(G3&zNi-H< z{vMrbafX(5*c7*o+y?v#zqfgKZTswKcq&k{eZr+716Xm7jjJUO(AqB@UT~jsyOI$} zePDf){+by^sOxj(Dw+nVY^-f?Q2^8ek9?c#YoK%N)X|f)0G^n-mNnmyyG50YmZFrG zs}yp8IaXy^_*()Y(1$c?z{RhH?S;kl^`!w;tp#j;b5pY)W+r}Zt<4_$P~Xrm8zB<9 zIk_s^`J80|Uf6XWTti7wJWAd|aVc-KKwBRkZ$_*_T!BNqk6p|~6z-y-kjwJR%*=NU zl?Y&5Gd*hO9iI=prPQwT-vPQYe)5Q7(c~}yr##vSEB$ST7gQPSt{KHQUs5;=wDsm) z+eZ(5w8SSDS{kc=eV*)X;jtDbC|px`%6v(fo76Q}<8}TA|9y-n?z~Lka3@=S(I_e5 z!W5+u1Fl*!gghXNow4(*{wzszGQ*~}cnx!nnN9@G9D)H~?Y&90hi%Nj&;{G|2Mv4} zHL)pvfUg`Pf#j2tJPSM_x8s)04BJyPV9qw^j^1c|NzMGnylTGyW?94cEAGz5Ik?)oVadv6KN# zek+~fsOUnSN|wWElCa?!Q7{M%a{bAFds0?FH3O_OQYXa(FkEQx{|OpO6b&)X8Xr*G zbHDL$$l2!-)Hl8$hoNF;pCjE3M7=-q`M@82Z2QYM+PUI;u1D-B-vK1A9kGeI(f%&&~_3@3D_@nikRiLDYR4-KFA@5bM0L98B7i0XyJ zv6+b$tB%3q^s4RA#)##~5{vWSFaL7-HJbI65Tif2TB?{$MuSrI*sF;h?4I8%kPx^Y z(L{OZetG|W-=drFq0c*czttM}k*%`Mldr#v?q8@@t~y19S6itA;L9}F2VajR&uc(# zreRhZW+_ABNoL1Jt`hT@rJiu>*GkuERR1l3QQRz`F5k~AWFi#G37&7_TIttEoz!J5GJNkWO)jrCVVb`s6hr=`xurn&&v{C?M%!9Mos>%nOc;pRBP>tk zUq@zXgx}Q<|DAWLwGm7xs)gxvoO-9vNOltrXPZ7bIe^x*`uhcozkymZo}K6vM(VS1 zNhIT^$FH+m?Rx*-@^bS12>-@|fl9CJ)@lrr5G0z>?0)0v?1WK%e9fHUT_u&Cm(y#o z&}Xii9`w<7tIx1V<~iC47AXrmp<-)NXbyFWNqeb&yE$wkcBU--IDGkPXd`hXq~KPN zll)9#04S@TZOU5Rf<9X>FOztEVZPgh)y!*lEQi7lcOixmVjc6syW zJ^oK`&NL#}$L>0Ay{n&_TMg{fNW)5z*7Y7Lh%+D>_|oTX18y%dK>$F*>74he>Mvs+07UO zTzK(VSq`1ZG_u`Jy^M?(%jAK;of9G;V}7*;2tNmQQoq(`D|w4YhRT4PDyB8Q{03tJ z1sO{TbrC$U@i+nK2R3^A|5B^722+ls{>X3Zki4bE%|-#C+A2Ji{IurtL{5T_DPK(P zF&XxF9fx2O8+`DcKc_FHbG9hFRsxw>*Ger_QVJZKo$hHIkot@g3F74ld~qVX^&Y<& z0}vxUTcO3If6UYHTVr@eIcbELorK*^E7+q5w~bHPV!nB6bqann7V=;)XY8V1=o zTFCP@#r8q^THt4>1mABxz5M06ha8sfj4+fOuLDmE06@L&|5S?TIL(gGo}JQtgy)nt zpJ4grSk#eTJ+1JVx6N}r&uUVW=c~&@enMWuIApVuT`vb7Y(CuMJIJq!E@Bb-{-$>@ zEKS+6gxhAAF8}cV0u770Vx-=iz@$QiBnb4_`K z7jrQ*Peip%pKVBb@u-6R%~6J8+lS~ZSYJ`z-`@w#os?#Jlf!>r!H(|cb~lH#+iOTD zsfO3l3QeVO2m3S>N9bH0_ozXegz0GIZQotn;fGMjo8udg?ybYV@sKrnkM24*y=Rf1 z&5X};EfQD|$H&Q67K};{8J;2kR3097%rA^97OkB%2Qw*J6O?i;CgViIpwx{beXw-? z?M#6pm3A-94?xAbR71I;yK!hUz&4A@nPG9H-hn{2}++;0`F3t26aHo&&c zA#qLq80Y$13m--$E{2I*Tk94-2DdZ9S1FNcDuE|ol+xW#WK23>%CnghCO#80$!JV7 zFB~B1UWd>Jt1M=WGAD$Jm(8)OxG@~kf4)&`bcEz=qOA?^{tEgx7~Z3{z^5p3=aF^n zmFn>3m!Ihm<(m^`l6z3LihzIwd=&CGPo;~gBH%O1=_UGAX{9z1vdw7ljt`w`d{_SL zmqT&>96P}_jOly%RTEH(9Zq&@S`5UVOaH_C&-pE+M#G_DIWY~&0`Sw4LmSWh#iIIk zHErvg;%=>z&N`F?j5ogW!6y#uUd$v{*W~}D30PG^jH5&0I!+Sr4SZ8Yl_^>kn+P@b zRCsEFD$j?^2q*4jK=Mf2Cj2|P1o#xLPrn>G@$*&|6D|7u)ST+o!&i;(VDeKO3KEhc zLD@yvuxkvGVi@QmB2_Cbw6zlmUR1(vKpEpg%_d*i==Kh{(wv0bF8(I$!h=i_b_2-T zF#{!ULD-JcVbw{ws`K%*m}Q0Z&WjaRjoBXJeRcNMP;>YDit;r(p`EOJhbIVYv_7bi zCi3|CF^GK`x<$^-miV;$E96Lojw~MB&&j<+YHh6m_(JbZrJAgQ?fGvPZGIgZb6NQ^ z`XMv}OM?dPlB}K@`>o}hM;F;2B?%?cj-FeRy>Ix3)A$o`+h2Meoa04JrS@0U5#|QG ztQIZ7HdWD+y!bg&v&4Ft;Hqjstjs^d4IPAra0&gXb4PTwbKSAsd_AR$_{Rfu6$bBn zv+iID#qq=VT|pS6iT-D)2EiCaLhk!gu~d0?I7B$8@6}6xZ=Wh(C!3wQ`y|fvvJ385 z%YUdZ>}76z-KBUv)MZ8mIln3evfm{fji#X@Hehint1p16zGvbalc3QrReu+)ex*&3 z!?3<&avi!H9+rO;(}JRi%@TczDcHNDCORK?HlFcBI5^K6S2Vt_t!*kWH@L@w&(p1> zB*Vu)$J+T=uVv*@7?gHDb>NZgIqIiZBN3rg3^0$JPFx4&n^S)9HP*R~LX080?Ov68FfAY$G zCN$SUmjN3WsV*%gCc@%J2;Sr65V@9L6`W}xD{6>69VJ0OWxx?7UN0rs;TgC7=x6}~ zO`mP8h=g#W^Uj}%;QByBAq{fze;H3}R-VT7=3Huaa<(}2%e1}LUY(OmEtY>0?4wiJ zd;+`+wfIpYfY~sUQAxZ8VM2q-o`$cp{(L$1f-lSCF4#t1u8g5sv4rm%)xIykM&O}9 zpQQ{NG4IL!(2QG6_e#3>^kEzkfOxH8H}_Oj>AB2-B<74I)w(XFsdEhG%svixG*e1N zx*8(`_d0h)MlRu%`wz1)>*}ifY!<*vV^7kV6+r{W=37tY(u~5%FIwr)4%3i7Y8F+> zLA-T#!V(}uM&;si4Da|hTjOu|KN~5!^eL5u_Ra#JD34kro-?gpL*0%oyHk>pv0Yci z+O2CnzNqIX9S1Mojq2yHm}k_VOB6*9f9FX3Mh|d&*pC^jbpLgn*pUny8r;pue8M_^ zmaRasGfgw{`|amX;Tu@yFyI>TNO`vO(;$J^ltV7pJ?}m2^Kcd6pPA`uJ`FxS*(qL5 z@iSU{+PMH=k4|&4(X`gbJ$oH?A;PZ}j8byIZ1!Xa-sWm;P3m&}cPN2MyGS~utEIE_nB3MjpEjE< z{-1}BJ&uKisZ~ICEIRFGMq~I2Sy>Ehr7=LzpFwAiduQB8!|$J>*7fVw9<&XXl5N

@KckEvSTkHDV|b{m(^o!k@CDF;R8RDWCJh_>-OdRe zE?`gu=%W_iEsYmPssif6Ajl|)d@EqCW-jOK6CEs%fl-~?SpR>00!mb!cCcbxo4iSd znhUO3911pLF2B;8lTEDF%n`@oDzjtAH%L1Yjx`b?ZnT>Rq?{tIn^+jzj-dFqC^#&g zpfJe>pYLjyx)|`G^H$nsN808#QqjQ*c}VYlj$Sk43etmd7x8tleTt#GUy;^qqt(-e zc*h;%-*d68lQ&-_N%iv0vsh#Xijke$Wl&pCbvN6)XOz%JmdiAm$8h^nr=(eMMKl^% zOqWULhS8r#PZDfcGeolUWC#%;NY%5)Qb|f|{5ECO%9jX}A&f?$Z1r#P3MZ)RJZLF& z$o;dolA?DO|<>w&V=`EhdzVFxs5JED-8j0{z$x*<%1hJ01n+P?p!1ojnMsBgjCwcU>Q zfeX*G;;?nUB`EDp6|R+?Gz9FuBht{6^Hyn2qkAJ?X6x`LqGU}QU(Y*AyFw4$dK3cT zY85dwS&}b}Tvsme?s~18(LT@>3d3phpChX`);l9Ml{wRi7THT&vC`3fKEKK?-8IdenH!hG{p*dsP?Q0IT?WQ5Vah-2 zv$d$9%eb_(4GM=F6U$!sS3oMt=u@0-4?>Xv$AVqsZL5BsOI13oL~_a+zg!p|=tl}~ zi67e9iiL1_!z7QvF^Ws4FW{>m1!RLi(7`W0qkrasuNRZQ`JLYW*)IRaUt*mH77w^p zS47}S%w*%@h5()*>77rm-vbD!HzH9AMS@8EQD*K%;zHX~a)J%PkF8uW;xp?(8em^d zFz$D3ID(-Xl749N;um&IT`6!owfxDuNCQuh{u6C+ILEFDQa zvVMg>v({W-AJV!~{9^k-CX7{2^W2x)M;t18T|NG6i{k12X-c+D%?nf)eO%AcSmKWc zPS)Fs=YMjzs@r>@PMq-(+w($~6=>!1%RexkV;8y%N{73ehn{y?E=*xcT|m_kMp|Y3 znfPP%wpLMY%#MH0*5%j{8SODRQIK>L{GS1_shZEGKyvCc3!BiPYM2xhMVAcnvr){$ zP zx{2_bwqQik#rNvSyzfpD++J+o#6JN+N5S64$EBHP7_;5GZI~S*Ag)y*_I7m!uQOW9 zbGW^t>33Yj z%wwmhZW}FugT0D(d+!@C#T-q6N`r2kdtUIDw7FJ9TE@$6HqrQRmI-hjAr~}Jo|*CW zb&atPZ1IOtE#bjkr?pbVNK*bv=~()L+%L3<>L-Z$gNu-xn7waS(#B~B z1R*UyC7(=CulsvjxP+%OC>W=?2{t#=)U*w54^@Y3oe@9vHFVKEK{KXSn|KJG{un}q zLQZFFGG7Cn)^U2K4PP~ffdxt>5Q;wbtlM2(Ix26C5fH2y|&?oK}EBNrW}{@Q>f8dIpKO^k5YU?Xz*zBA6JHR%zE;|y!Z zs+(}6@8wE31fdk9G%zdQeZ9$y?xA#LFEJnj(sH~RnS>eherK{?dC>$t z|3IkL8OEz(3?2RoDfs?9Vd~Pj!iqUI{;VTYNA0_VjH?2Fd+sI1be6j{!pi7Z5R=-( z!YEIX?nRJSU(S3 zdSPGxrT43JNKren*T6-#F78SJ+@bFt{WSwE2u#>VKf$7~s|J~1rAq>epaBs~tz1QV zl^8f4N+f%QHFupUCqsBivmN~Xy+t*VS!RmpN8b|q4ITx6#)MFPC}a-xBd#8E$~Fq3 z3PEZ?*~Ur9EUtsRH?O|_85Y^umo;XKiZ9YxO=crE-sMHQd4jgbkqamHOKuN4t@)Up zxBKd3lFNL?eUE+)Vr6)EQ~FD@Pi9aI%;{~K^T`KoLoU^a$cxMg=JqVF9e*|@pA=}0V8c9L z9_IE(3x_%b@|F>AyWrs&J|inwD?t6m_QWK_xJ@%sxzqOc*ArwAjI-9Qx^C_I-`1<5 zz8i+Fz%H-rv*r1b7Ikgk;bUpb{Fg6Za&js9Lj8z}iOtPSY}ns_>v#K6+)#tTx#T3K zhgwH)I8M(VZ|(-6i`7$st4*(Zzk5`D2#h;plD^p<(=VaFZOSjgT0CBNo1~|AKuaxX z4M8s>4r&&8zokCtp+~N3{U7c>KuGXV(cL~rsTR$`u^ZXpi!-efXx`86wBL?X zt&4R3O&hptk@9a+Ne~CCb~~S1-}Qrr+hR!#;3han@=|!lsTcy0aYuLq?dknp=%V!!i~VTWOR$;d6;tqplM^X~1~k6=-Zt}_iaZwT{9Uy>eCsv5)Qx@$jVO~2#DD|9 zlH`XPCMKpIItG7*maZWL)*W)3Gf1~l;>PtK%r;IVh9xOL&$)d(MyjXh6+mj3! zv351&N7A80UFgX-cfQKhF{*wPW%N_lOtJb8P~Q>*l#y8-wg5uhX< z{#-p!PR+o29G5?@Ijk9(;M! zC>tUcD)#ne1T*qDUjTfaQR9;_?bRUz{~q?(_%x{|CQxg<`*)epgMm$>%g2W#Y{%eq zRQ!docPPhXtC;C4)A1q=O;*BO17l+c2NK7|KQEYdm*`;hJ0E*zMwx4r4NB%U>ds$f zRPQ8Tk^96@Fs1TWX7xQ;H|i`kAz!D6@_d&_6b3nXPB`5OHr7*#_tDXAH#Fk9Z1&kd zCM4WV#Xg$(Qa5w1Wq7HMfvoNtBU|KMU+KJm_;*9{t?wU0_K`kU;gb;CLv?^Uk$QGQ zdnzhk_^1i!p`=Fcj@}KXJmp1~KayFdlxx<+!0kPb;Qvy0YxhM2sNwbz@u*L7^zEa( zge2>&_V(sm+k*uXRhD;wK^cbIq-D{70xY zp}t^k#_{!(y|Fw(g+;GvsTM>~0$grhUuRt7fa_yES47b6`cS}no(}2OEgK+uz#~$_ zOe&nd5QPkMuV|E1K_MU#B2Z|i+f90+2D02YLF6sgMMLfj0=V2W4;`242|ZOui_q`` zQ?pbs%j+@fAB?SW`&HQ(ljKi6)#EXwm4rPBI-&QBE*^Yf^m6~z)gvVITMBfbYQN;RrW?iqJ@+n(W8PiK} zbt21)H@cOQx*e2xdA+O^(EV;oQm;FP=K z+zj*z-O((iQ1->Y;B@hlLyG1Tro0xkE_k`O`Bgx?gAl|nd>r=-KJOF5B0HxxuEm4F z*H4Rno$6^udOrhGxy3C{yEgKRn{@Ek0VUY^S{tWF-0g2TwyLb;$>>pm6Vs2mad>un z(WujjqQW~=bq|)r5yQ&74!!vsB=Fyp;FT}Ic4~=}-EX4R(IuJ={mSO+YCj=i8SUUB zEDFuu4uyw|l%AUJt@tpV z4rt98@C%m>uVg^tC+kS+?_8shpBn_Uz4JctHKVqH{lV2yuA+X}{h_)qSm;objQ6-0 zDA3Qvgpj`^{HG&aZy+D{_Ay?C3i!W&IL|WxP-vi;KQEf-zwuYet=qOaU83VSi?ePY zKh&X9)gX5C2KGL5P}~9sxu#E+HY;g28w9+7XTpU(uJ$%=WgIjC~D#Dtp19 zEjHX12l+Ip!(ARRkAgl$buBn*tedzN(^sPN+)~|%kQ+C8R5CU4G89s;fFQR)rM)#~ zy5Ji5Z-mz>5?_pTtN;;&#Re!=Q78=@Q0U)j5ZRbE34PGPQ|%AOI1OXwDtaFS*@81Q zU69AS&};A7F*xjfa;O1TZ%!MZ{N*1f1XH2M+h}0P3{FKvDezf`V)fQsO|08PzZ4+j z1sEN`u5=*?78P7`nA;~l26UXXetR$LN>tFs&Uv zK-FMvw9oIXf9n}hjvZtXR{z(3I>I@-mTvKVmIG_K2lCnK;vnSId}#pH5&OMW6nECN zz5Us&mkr>@R|{r!F-&wl%iy<`LJ3>x@?>yKY>yZ!9ACyLrPqCr>3cT=6ka2 zSM0!?2Bv#kWypI#7O%)bzZYoZYEI>9ptHSSQp1I6^fPU>x3APfZgP3vo4%dWeQ#tzB+`(UQ_LSr~M&t>r%y`qB2}0#ZctwOngl8uvVl zo`#leR{%=Y?JYR_@R-fXE6BmY_Kf5@3B`xK(m*W@Q$QFHw5e;#|554kq=yS0qic3s zzaeibV8BjhV?HVlJ>zL}lKi=VW&x|ez|PVZ-t2!VwYeZ^t7Dx!mzNO5mVDn;b%+!) zH#S+G>^HYM@2AX6OkY(H(B#8UV}-WW(4%b$Y~@#P*6_jYrLV;^+1U6Y&KLOL>y&>t zfA6U_rI%fUlfJ*PG_mT`BVRpZA3D7BZ-Q>3-ujikcv8DPmE5Ih1a2Qo@ekSO7n9|i zO@07=%Phwjf4Elwc#ZP85k3r`NFjfvE&7rplin29HFNq#CngkGfwnK**F?}~X14y{ z>CVo?zds`rAzwuS0sG@0reCi@WyRdP5Iwd}vV`NbQil`u{cTc+o;8bz#H<|;$^jDJ zL3((+UeSTkTe=I5NQmorOwdb|NpnQ37CO?^1NQwolbp!=Zq=u@$c1jUp|YGiE!fBQ zzd-{Hnh}Eg^)2%GabnlPS3{2P3k5oxY>S!;N%0g)Kf>6#@~lA)*h>Af1knqGzvzw* zFjp2aA$s@kT#_NVauBJn-DcJOytK6jer=I%BX-j-$9hCryy4s>+s)a;7z_haSJdE2 z40E(Hn;cyWL z`|^bQR)k23c9B=gBPPR9k#d`z))CBo<3B&R&v~}|mf*!3ys~`%xKUpacQc*bdl=^q z^etNDUc-i846w`NJ!>a8atT;!cnOg@6C&8f7>APNvL^n{zuLP%dkjL|mQzJXA!S;z zzf~0|emT+|73Jt=FJJR(rX*EMLk$39kjQ0Cck85DZ(3T@3>R@lrlG}J-ieE^zj)hq zLisXO+Gxuk$1o`pw>W3qaNzj`MXG5kVc#~kcQNLd8Z2@tvFUG<->Ot7x`I}%0YaQJ zk;1CpEAM*YvTvG&tfooN7SqjvQ`;TQEqxZ2mde#FXs34pj>p>iSXXo5nm%XNl5xu+ zHxail<)}T-jK*1_|HIesv?G*J5W;8(z!NP=lQ;V;S@G{?^HpES-QQP*Ue*qd=%`zt zfK(d{E~OWZQqE$fI|n|IMdO^Ye2)@J7oi6>?xQaN4&Zjbz0EZbR$U2XQt3MV@*@_n z7HfL@r4NG}nR|PzC0c$cNo~Fr4O!reMw6&tJN#W=Ji|R7&T|qsd+>rYi(mb5^l=_! z4#a`c{(XvK2!o{HXtdED^sKG22eNbrM!pjVp(Cou39w2O8I6XYB7t_Q-I%CUGCCkz zvxtT|TEYhzYmw~0dS3jRSFapp(gQO82RJB!wg6Q>MU}7=a4IPz+D1)1A#{2XcVtHl^pr<-*MYEMSA}2v)1x>-?=qUKt%eqi6!~ zWw4An_V8IZtvyQRN@mr^pYV+j)n7*HXgF2~U7}{#1nW&l+03U$C(F5c3}oNYAX`{g zU;oXu$$lSYsyCcDOzz@Km!((#(?xbAZEn@%vLu$E^Iqv4W(J3sxDfTJ_AhZ7Vk zA;=~iDeI^1NRdQE9PzRGSfnh}^)>O$3~kY*Lb$uCXydpap@i6t!V z?{rtC*wmu+{UGtckW48YQ5*MR2 z$hcOTL1x1FHMYK;Svo&ogXC4=kx3tC@b?uN0d)V<@<*~MSoo^37-$>`2{Z(Z5~Cw) zl}PpvIw-y|t6T1P2s*?~gnDemDSwnZ*g<3aZE?giQmu0KUEhu z^Rd53y8K;#4zTThyj1jq+cMf3sZ5$1#j4}F6*0cK;>|d6o0q#vWFHNf5L5)@<|MFL zY*GqS^boS@3YZKxxiu=uFkl%iis_Z;+73fkn*0C}c5_=vn)X~o#cO|^dP@~QrjOv}bM8&-rT{5A@Yn1U zGQLm&82iuDAp_FpGiI#$dwngqj?x}yOny-qEAH=)rUP+_r9~Fqeh^a5rz&VDKV&#) zKc3<`+WY#JZJ<8>`(|aCmqRc7w^Xi4*4Mh)I>@oy&)L7sWO}82G^6ZHVh**P5Ovfq z$!+@4_?1o4FrS$$kKUS+PwK-FkYHJ+!!OkGU-4Q7g5Zm}8FIZh#nml5-Eg4`k$=6< z=Um-fr1zZ~&1l=loN+t+Qn@|mCW{VOp|7=voxT}I4fOS_F7&n1&aF|{(O1d3#mu+^jwVY&rAFK*%EjAp@YhJ zHFJDt3BR8md5Yp;II&F!C1D44g)36R)v@4*M>wcCbRjRZ9{uV=uzdVvn6yn_Apg+k zeF1`nHd9j`xqE1$FH@T|RVaTZ#SugQ_5tSJ8dUg!t9%?H0+7#NJ_-@?#Gy&Yl&22P zLa>`y&&`tv*sO_!&JH>b%7LqtfR@$;(b8kGn-3x7zqd_%t@IWR{~6R|%&M~>?yCR` zxR;Snp%^%YFL08T%0HRKW|^tyIrRFdu}TX2or-D*Rw3S;U*RCUYOeuxQVbG|k$v-W zT|A$hzxl$ftmS@S#mt0?)9|Fx;FPd2WsxWvf)rZ|2WL`GRe!U%^!fsD)q5BbM``t4 zkT#}9o27fEuzyB-w|1h(W89;EtvHzyOp3-*Aq4YhUbcg zB75Fcn)uARGG52XANw~E7<|-SD;+7 zt80lh5xn`9q~6_0vuUYAO5x$gdnF%fyaROlrgD34fC!W) zY5yjh{$(}6z2L9QC(nL2!Vb6;qPh#OR7ni`A9{J+b3;7-0JG z%G3dqHvDG=v@4V1ca7kThznnbUCbOD)3fCNX!`1~sJ`!OQIL{S8b(p1q@@`oB_*Uo zhRy*7sY|1jG=hMXE&URs`4_Rj-YCn*QpB-zo-~uW@SANg3aipT)kf?~OAU&1{wA;&(arjCe7ADBDDn zQ!f{OEOD!hFG}ajsJu~VS*yoJY>vy&tN_Hw1kiW3&)@ru*kow|7QX9UohEcgg z$CL3b@vCt4)>PrZ$>d(Um*IIQBHiLb^hWa$G^!718YiTv5bE@*=;)(%n#T zCLvUWyd3SHE1zcHm@)`MK-Ar559R4z&IS6rWbwupa=X)ArciaFOO^atih#zKjUx0& z7B8sd45h|g7saEx>|(%Hre`E+hO!n^j#;*7Q-m^{j}gs5UbvKU)8U2u_yDBxj=S-r z`$^!9mY08JmPXZIGwvzw{~(JcWSocmm1R11zgLuKgA#za8G+f^do70I%yns%{rA|A zdogHTw*iJ7l~0Og#`=2tCvP z`mk!|X;Z~<_Hg2i_Oqv;W=NJKqt<~&$~|$EJ0}~*y|*Sfzg@yfFuqU82sL-+rL0T) ztIGC9gkc)CQ9F&W9YdQU$>EZT*%d{A!jk!3kAgh3v^=NKz!+C1+NhE=WqpsKqwLKW zZx$wLT;pCLaNCo($)%YheFUN4aMm8-l%Mf^jX{%=&ySptZ|stJggqc|S{py68G-xA zy%aQ&jLtm=$02S&wc)mtM|#`nS4^~oohfdex*S4SZ;K?)@^GYpHhF64gO$rG(fkF9 z^j=H|d0f)spfwmkA-2Bb-lsGt{IX}N+2th7#>}M@rK#C%)htZlIYr5FMC@PB#EXGm zj#gS_-CTKG-8I*1)h_59JMtJTJDvEu-_A!S`Svs7Tn=Okjh))T<_smj&bq@?3E;tX zS^yZQ&prG4-%Lv63;+G;)0h;7fvLH({|@qxQj6)U+Z*slMVw2wvycjL3ai`rS~1+p z%uygE%EY{>22w_LByVsYHpyO)wP?@@*93-#KH?2*^^Ah*l zeuk2+j&<##2r#9sMOQ7y-jQ=cDB=Rz-xe1@jZJ9{Q8+wOk{2=dLBa%?LP|Y=SILD| zM1t}BAhZBi((PDuyLncQNlABd0QgJNC!~`>tp%3azZCdPr6Q z@~ut*EqEbW#-d-`?AE#k%2{ZdyU-8Q;fqcVyk6u?pS8xWQ zt$!Bvht0w9hr%IGMUEXndTOmdh}Bd~8kkTGTaOXge4T{$a5xk51iP1B(wE{#zP_52 zIr?t&q2qinu`C(Yd3(#uj?(om@juo5!=NPh&DcU2fv>=$gLh%mFrz1Xs@HyYGYCzb zLlkbm7+^1hFcOL&yM-1UZRFxkjm!;EyM<+FH$h6Lag+8$4KiJ@lI2|(aSNP^_)Sd} zZG+IKush&W)cp;Afl{ClSiZggffcPAf5wSa5;>6wD~`IM=WgWushs|yySxv-nljfP zu>DEs0>?uNU6jy~>M^v5JTJQ(gRR7v3@1w1DXHVu(~hSR_1RSiRZhn#WbiUHMPpNO zF(|Z}!}i|FH>}CNP~dIDI_=m{+WA1Al+=^ar}CTE=~}TbI)s1vJq5u3q^bdB*-XuC zue%SI8w>{AG2tWYZv$c^2bw&UbyNE_akA)xcTa|3G3b*dw6zj_&9^R`of5sb-5Wqg zA1rh3LG7RbAb>6}kNWz}%XV(_!{utIu`}KjdcnpaLG~tGYPiq4oBlt2NwC;lzAp%l z%$#tWg^0I$D9`*9n&9Ox#S@*49o8@%3;%{)5G0|LC9H z!6AAhZi1VI^Zj9u!8X@|9yPJMGWC8zCkTGUSkU&o2D=V? zP@wLweN?Gh(8z}niv5bo!O6MX>U2c3&R_X_Kw-l*aJR6=}o4RCkw z7@?%?5aOv-3&mR$4__f)4O17>3W4u|UQHQ6@4w-C^@$i6$fV(@`kK+!WUp1Qei?)5 z%=hU347VA@e!H05%=`sA>>G#0c?t}zbqa=Vg7(=P^=XxPLay@0a9fu*e-A9kMCHUdJ9|nZ#xyVP-=g=C8`Gmy0hNH39(d(r z_G{Gd+19U+UfqUjj8&k}>M}5WCo(^~cq={kUG9Foa#n6pvrx|Wj1NQFQHOPjWuP`n zZ&ZoP2Z#;v+-Ra9cys&w%L?7E$w4V#=MVMXj#SL9m!4^X<^ z>Bzwi|NAeUj@-X54wQaOES@*MGaNtbhQkC@POlgfRp1K`YFZZ^D0i9-`@T0P(m=&2 z`pvDLHnfMLb0B{`oniYX8R!vZXz7wb@PWnOyy-n|y@G|}WjIhCiY_NxSg478l2DF` z8M`*Gz#vrMm*^L*_n^K~e1-3iyM&rh$VYc2PI=i(1>&R@yxL~i-F;}U-sM8 zcZ$A>(dYLVJ_~wh4&AttX|vp}V#(KVZ+z^}nB2DlG%w#iP95LW&dm2xVxMVYRt6LvOXrbPrtEu_WD53D zer!C~MrKxN@wOV=lIab^maiCNmZcdqCt;2RT!hT5{USrsHa$2$84_DmW$hj5rYWb> zyG5AYjJoM#P52Cg2x6vj`s~Dx;{h!%Y)m_K{`GN+8cz0#R(g>KssE~WS3YgA1dwEe zg?I`YpmrQZti18;plFc#NFloTBNmFB!WY3%s=JcZEg&IEc^EN_LEy*t`+N;@U3a;g zv*)FuSW`i^!=Q)bb0F|Q;w)yvHI+4+oekWP~cqz&5 zg$|s$GQI5}WB;9}`VrA6|IM!wx=QyjeO;9!%F-|PWT_D)pCuyrxCC?s>iqk7tTVNS z-f0s_9A%r&h)>U{P7CZTf2iFWeFgnVntocL+~v%PzXsO+%y>6lyMxW2*ga*aDwcZs z?P|~JS{Xpj^zYr*HbH&c-+NhIsx~NWt`RsvMQJwymh%T&f-^X}Fp2{1sAg&PlYHh4 zQJKw-xL1x@Uz(hptnDO3f&m)=J(MVGx#(Y(Xh>%*$o%`v0u3_!(IbNF?2r$8wW_kQ zXmlj>YymsXg)+j4GFJiHJ`d8VWU?5IVZLmxq4x(tl;c>TMlf9#DE~Pa3xx3^bv-J{ zaI18-Q@rCQbxTv6ITRUZ46o~qA} z%-0()|JLScT0F)O8`VD`^evtt&B~e4QfQg^9cBpM>M*lAVcVuv8#~TL!;bP=n9kqG z{itIQz2cG)RSA;h$_-2z@;o}ZGeH?vbx`>YBYp7apH zidmennH$rGCUY02!bOh{GyAL=n5B3hdY>&^7rJzYyoETSg>zeEhI*@(0dMq`iGYqW`zOZkx;O2S=Gdn@~-;|{M z^T|xTIvMd?uU)(PZsvZ21}xY0iMAM*Lp#NqX8kUkHf1VSn!>gUvzvAH+;xmU{r~T@DCvH?hs>hNKxqrtL07251{p+zn^?G$MV~?mt;O0!{N^exjyQj(Pa;f965~ z-)c(u?9Ay|IS0p35+J?e<;x)`kxzIpe!D{+37#`XiB9W9xYVtY^Q58+CVHX1#EBi~ zkv^ydO9ezaEmt-kD$x=+qYa-BWWEId0yc;#wabW1hjBJAE!H-=07$3gDK~3A@cWvS z8kLfwRtCgwBrgy&vy!)9sCaqHfW=pK{P%SdA^>LuIXMt8j8aKu*w0~$M7#)4$MS95}k{AxS)+;=P(>!6R9_Y)23_py)&m6^`nE#@f z^Xsbf#vNjnCUqwcYlm=~5s~wOFzot5eOx}E3-!InYv-u%J6W!Vn=C*pb0fn|Q)LWL zff_iWg6y3A3J_&J(GP4+W_OgYFSK-G`*ZKRcTCSw9!o9~!q-=!hj-p;YW_jxYeqN_ z%M#l};dQGLA_K8~R{W@_~F`T~Z>}x!+@Nj~}eN-pj_+EV|t*i9Qw` z#y)3vaJ0+F7akgF`H(GitjunN>Jf2fJZb7(RW5g7DD!>bN)cb-gIsFmAE^r3`;;nP z26|AqM4shB&uA`XB6wk3IqTC^yIh!Kf&&gdhdb)c8vZjv%o&ft(f)C#0Xxc#Qtn+F z;aqk97MYJNQ_;nOLnDiyP7yT@71IGU<&cg{A7+1^I5DHaw_m3z!AwHT#em_W-Ioxy zMz7!VO0_vE@W*LnZ)!w_hiOo@46n#rVwK|cX3Fg8HN)w6l?0i=zNb4j&1~cxbz9oQ zJjhq!)x}ZM``VR&GwVy}nQ<*zi`_)Un<2R%Pu!+O-k zqxjrX=EZT75K_rWwKl(Nbc_D;8(1xlM}3{|yh&`Z&4=rp*x8W$wm`#4mA9F(1b$JG z%N1e2ZaR46=l6fqT_&eBKV!LR?-N3T9~aZfq;hUsUm$+HcoJ_Xxyxely}X- zez`5Pjla!O{;B)%?9E$fuBt~-&MW&fLA$H74zy2Qo5gyiK@n1h3YQ?ka6^O?8sMR+EC;o?tiCjGbK3DrS6;Ltu74Ve9m() zVFlL{RJVZd_#Z;qGC<$jgOBxc0-LyELTYR~fqjjGbyNT^YlDAWtX3!8W6}dp0FV^~ z3ijNxQtu>^@3LAt#(3=8SXP&j!Yt;I-(vf1sIdx?e74eP{BXsJz?FX?l)``bl|b5+ z(Nud3lnalA(vglyyh+L)G~&I8m|{#MwcI)>`8Dze57M;sFOX*HLZ>0yJnOv^X!KDI-210GSECorKa#Fv8LymrHivwWg_XC@XzIx2a z{^Gsz^c*6^_V7ys7KUVtn(P{#?p;g)RCa{g)3_(^29c}{!WyxeT{$(t7= zL&X}1Z=NnD5-tL-^myr*80=Agj|H9Lt)!w@{6{^B{Au zi^Ke{eOS22DH-~nFTG3{P$Q*_pNMX*#w6BalGba=cHL+-$!K^pUUJi|MZPMh z9E_wrmzc6drp)~vsyuqP0DiY3o+$pYY4anib5AsXG9^#;A6Rp;r|Z*;XQalgx0{oa z{*qUo(-znvIrk!YU0IRea!7>E_%h?FlvfK^>X#o!wB#>(2geGKg3<+p0{LsZBFI+ z%`l~dZw)sRyrL!ZVPW5@Y}23mrn}m*=G4TETx2R6lEo|8i0}=n zs*BHq5*k@D(w%Q%)(sV?2}^CUBD&8wUl(66FLMMi^D-9zxOB z8nNEm-ckK5kjbNw5Kl$qo44cp_qo%8itKh0Ggs{$w_1WT6J7vNE|Rb$80;kRW7Eym zTBr4>4Gzx(@E+YYSBXwY9}r*jevM*VUBl-I-}gG4BUxBaHFZj55RF)_9npJ0JfO_#^vH9?5TE8AH#4HJYxb`%e7sf`i6SwSe<3}Ej6R$*1;7k+>j%y82w=A}%DXZY@Ur4hyY;lSC zfQfi+gaLTdR?5Sp;&%U=7B9#DzWx;2)H&vlGkNN=BoIa5`wKRg1(8xkZYVTG59EyW zC8i=APB}qCnL77iMVP_DLSPF#$VJ%=yrWm3eu)d{Z+9!QOF)Y;zebgjA-i{{DHDig zq{Wy_a~1Kjo=pVx;pof=zElCS8q1jPW^Sf%APjGkRo!Gw^*(ih_B~iDfK!{ep1lb>~3?SP04>_{1qa z7G}MPG6+qwjx2J|JXrQ9ZpWUQ!++{5{&5KVnx2V{?jfXju}oAoK%}O;sJc`+|=OU;l=)_{X&AAPrZn8-RYv|48GULka14}Ak>V>A_}My?E!5)l#%V7%2u)kHmAsniU~Bv9^}GBQV0mOTm?VN@c{EB zH6JMx5w-6-pdbQ1ovh`Ms*rT5M9{1L`$cwpa92Kj6&lnK2#g!=6t4w!=E<6V8daet zRB$^DcoRJA+H_S@fNwrf!zq3Rbpu8?&GAtc90{+TmZCV``gfB)ib09tafNKr-_z2Z zsv6ty8|8U5gbCI}+_d-kY*ej$snOdj|J9%^93nLRUKfnH6}{kbloH@r1bobs4H@Ra z4Rm!;bz_g7zN1mGoWtE;%*cC+dOm;Bul6Ju@>ubR<|_MMC+@5<;Ht{448+ygUDW${ zTnsU@tA^9$ArglA+SygdCV_^y!-SxQW(l(oN&(3U*C#Bf`-quz6C9z!5AGjuKLnbX-zo*PM!wb+DOz2%P_CB)5}ST;e8vCSEv>HVEh3N+}SWSa)n5zQx#l#-u< zywd9ugQfUHTdrFRub;c9i`yrFs1`grvUGb1FN3`GE^CL;BEg<`j|hDvau>Pirx*I* zuG)YiE-XnGWo7UDzimKV#hWhGlbD*B5II8U*=n zJKz?)!EGgc%M{BjgS}!xs+J+ye*K5>iT|pPJMxCiv#*0o&wf$TPtHwW1^)RZ2yFOn zSssmD1Z#Fm{$fv&3K2wUURjC!JvtSEWgZ549GV?ppFU!1qeAYv?=0w;Pa|f?!qkih zmJ=zdq}+wA!r#nen$ejpI)y^dZE=b^IHLlP@Pzo5ILA`H&A1$w0uMpIvBlU^^0 zBMxjs82y6%`|JN6$)%%YLu5kkcm(wVW4VfSz11@ zH?v&2|{z#^VO(~HAhxkxbC;<{B5~DW__G)*6A` z02B3_uhZHTL<-chG9LdPPa{^qvMMoHm5mPnSnS=XA;U)zzeP#`>eeZ8BzRiJN%5=< zsBCo#)%aO~xq3YfYoRGpoPCMaXt{4t9HI+rK^N*z0!11|C`vgm?_uc)>J*ylDY~*)Xg^NtSQk4)Z3_w>Qgy4oOjw*k4yFz zQ|g_TIebg$Vi?MaHQ z>SNStS*~IQ1d|1!pk=Jx6Jl~18I?zMV*$Q2qyp-ue>YvXZSSVd+4#8_>oc!zJEVR$ zY1tY|xBDqbfb3+yv$CX9X=M9YuZ(C}Y_1*Z_ltYSCHb8q|EgCxQ4qD5`O{tWjKF3% z!IY@>zrVGb?OM-?e;nL{M%`cN&_xAuLg)TkR6rt_7xGDw;gc=3KxHx#e>SP=ZxcN) z<&tx*gd)j#c@4K8n&JzClPY+BI8FH=H&v}EPAhSYVQ+Gm5jDhw9AbYISpV7zN4N!k zeDW`$O&EO48hb)+!cATet`P`U7Z(k_H1O=G7s-E65*Ljwua)^xG<1B5 zBrF>Wf}ZTx?>>KCzPa2&#n4*`BHM5<~MKWFvu); zwbVPoK)((VWnA5{ap%o-|2}-K`XPt=LN@cizq`d7GeejrjDXfuPaCIPgwRM^8Dyml zvw7N0aamS7d$vM|KfOovO93INrT}2|U*pjA@SI3nS?Li` zchxR;-OX{9xjHCU-YwRcj!5MC#F2h&yL%tnx+-5{_Qc(IZak{BZ>*RTS=}jU?|b|w za!SyGLrF{+TAJG#a{TuKF5$l17H{Yo8gRInEgTY<*=~4HEw%NjsAIYOe5@#=)yxD&1GhQtK9+ehK%*XL4lpC*$^Z(rHE5(RifoxBVioTpvhhkJUE4(_^F0F;CcTZbB#D4rl2U_Q4pYO z&FCCSvbyrKz0H0UG!^=1Na}29=Npj3-5le$^sL3GYd;zYk$p!_UGuCZb?n`Xm-R<( zFIO4(KyEiN6eAYkYINSy_djyM?)i2kIH zFTrt4>dgEaa=U0;-TINMhl|QH$J2!}k2gn%XxE(&Bqe18^Abx2Q+vDd-VRluAmmc>c#4D5Zj02^>LgUnzLb#p}v{&(4) zzsVZO>o(Khn`Ur*gWgU|eyF+eruq?iQ%_Qd}7{PgrZBgjqF&i7oXJrnn&8pBIb zjd|r$jX8fc3`79^=L_|OUQ~}bzrkk@tN%>wTUFqvoMygu2(jCMk}guVlF+=|ON?i= z{>I(8^MNWe zyw*^fv7}dyoU=XegO`ufcv7bycltiFYk06?%L(7Cl&94T5ybpNrd$YLU_>pwbrc&t z4dnB~4xskl6ZjsQu!Z;3DYgK~ zSFrb$=S#6i3Ph4}za5xg`A!{A1=T)P;t`b?y(@NfUvI1gOl&}yrg$N1wMyQDHK(0S zh?_o|*FFR4avuqfF(qRp1Zt$&`CpB@UKY<4Q=$aP^VaI5YXr z7~cmI7GM=rI@AI@X+nqNB*ks3(;Mi-hg|7u6#G?v1c(iSPbT)q3;G1WKfW+JSb|Em z$Ma}BCn;tJ6UEAuf2!W<|9wVV(dR?xH+@07_4?%&x)%0n4-pDzprydS*@+4bKVAPG za<>JmrQOfMuEYBHIiv~gex3X{@w)ioOPxJVc}M8@fs>J%j(o?bYJ>e-vfU%14&|)) zF+661ZVufLaqI=YHI+a3;Jjbf*wfyB<=lMyN?uCgMX zpi#^@AsnP^tImv5VZ!y1{-Kn+9{BkaPJE_d8+rG-JYx6o$Hp z)`|Vcn4jVxd*5ir#PC|fl8O}2PC0|AF(a-4_K&?F2Z|LGu+xaV&&v?WZg$<2_Di25 zTlH;A(rtxLp-+7VlG+VpXsw=h>J2`ED12`boJ&z_vtCveCqbJo6TU4xqYZpoR8oY?>Owcs02WPQi4Vu;@YrI{$ruVeEhod+3!(+kxg z0vCYJBNN;LaU?iIUdN0)_!J%d4!Ya3y=~jiC5o=~tA>c6J=DJ$E8|;uIJtDbST%r4 zCidS(0923s?f$G5LM;FD7RQ>vJ;30R^q*V)yB``X_Y0oQQ&4^sy~L87JH5pNG7J~? zE5s%owF}rFPa8K_W3$bdoD{*oP*UzvG(5|(z;lw@SDW{09o8-sS^vyvJT9YjYBGrV zX=|wP(?x`7#6mH({>eKkU5Sr>WgnY2eu7E;duh}$Ix*kyH7Ih6|8+m;ZU@-m*K#c7 z9vL$iGtIJ_V(pyXeJ!BNqxLTY)-^Ekc5P=oMDgeM^CS|d@QHmbzFmSsuM$C16pe(+*>sORVWYnW&E62xNXY3q#i8pV4RKId%Q(9fu#8!`lzu@JQ~=&O5!gOW-*sgL zv^BP`@`{P`51#+wF%C!Em|>{2)$Li;-71pg@gUSu>ZG?1v~Q=@26T|(N?v7tZzawb zs#SM#7}pVukwhc0uJ%c&yoEX(Zhmc z#Br8Yuv|lQ3&0SHY!*9ex@Av zO>ks}k58~--vUfe{VieW$EyezlIh_UYr8<34!r`ky%&n88amvO4z%Gxyq~DxkBayI zR`j_d9SKYq?C3(tYUiVxMhL<<3=_xq)0uH~2Q?LMt!Ob+Q#5F|j+n@^TO(C+-;p+l zPr^Yy9TfM%S1I0eKNwBhe?}V*7>lAkn29LK?ZH^xo(9co` z;|pbEEVwX>{<1D?JYp^MqF=qR;lM^nQNNrN~!tVEQeN`ZVi={^og z{`1reH`0Tm0d9{%;4 zLD6$LwsvoFw0#vhtB()Z5BKjqnb^VoiDbM=_kPyzj1flMyi1c}eUXFsv*V1WD(zfGO1UHK7fVfk=VaE)A`In(h zzUq`1oqNkSIaW1}DW|e5)|LmndhY#$*na=unmBg`q5Z#G{5uPv=XPmA;%@TApZT5L zn3pUc)si#WfafOcwg~y1R13piEnIlWut~#nPSG9@iQt%p^7K-t(wtHF>X{@Q)Gj5o zI8el9`H)Ho?I90*T|>gV6Y=8n*WWj&bRN#L$6fALd<0genV%#iMelc9jE|2O5I?f} z%uhIuJZIr_Qv~!*C#*7@!|pvF#?7c$Z4nkHwXL0!GDJdOr1yv@LX6M1S6T}LbSv|ZM-O-pwxcGRBuTuT_vSz_KIN#J}Pj1S@Pwr){&z-rIcCB)z9fLzmQRgYl z3;}_+13^g|tF+bB2G8z&N!#A0RzWd&E>)2@3jayaB>BKVm`mWW>8uclD;n7rk24E1 z_g?jopXF@O@36kbI2Un5uauc%EALIs>WQZ%7m=k^CvJRRhaJaWrDXCo_#AD^4w zRa={A8}|Nzz#;V)q}VRo2tKyFHemuK5t*$zw;nUm%$GWir!P#ptt*`mk1KO^bp#iy@lg<-~yfm$Ww!8&c~p%TW39WK#-u6946rV&@AMG)HeTrDdks;GWH?~?VAxvI3@9qF&<;Q}PM zTpO_#YzCGQcP?zJqiomDu`?%kY08T}M9|1mTM=J`L}}Z!e#%kvBbpG50cHf6%ES=fzO% zbk))O(WGL7S-HosIJeXxa)%4uVaj`{2k9${w(KvtdmCpPuWw_T=7M43-Lf^E7?qA-DG?6+DC@c8Xo$=kF z8iW~THT)n1>aNFfE6u)wYbWFo*h@7E6PFclmpsn?ITEHe<+gZV^1$;$W!K=>nI)Pj>lQTL8=BzFdkxXVd< zf&@Z6MAhyzYUMj|_b^86=&enf5QEK1(TcjNV{Q3Y#=OfUM{F)YGcBHCpwyQ=WF^5*E!k{>DQ;= zn2O&iN~Y)TV=;1W2PNH$*m%l@xOa}B8s(w~+riG<_dk!#EH!iK+TD?~8aecnv zBQiQR!_%u(B9A>@PI_x%E>rv-HH7b+G7J^b_yyzW=14KK^S zFKf9U9zE+27ot({9Gcp9H#L|0YvVjCY0!c<0%Us2!Qi}I_O$VmT{%#KGH>E?cQgoN zo7a9I>Pmy{=J9(WuxK0ILHy>u!k-&0562dEbosC0%@3e4Hw0P_dGnOLlD+MCJ-(qZYcj1F@Mpw zPg0K&I%H+a|8%l5L-b&@_XXFLvk^()Jl$N5UO;n6 zIx*;5h|E)@y_5Sfk90%+T)f2qg2@K7@dc=~))j3yNZ}zoM;39e{-SI` zo7hg3OTAx}=f>vA5gH`*|D%fXWY8Yfhr1Wfb=`bV+KEZ_w#V3JqIR{xdZ`bF7^tTw zgnhj!Uc74j00?&YnZhB2zIdgueIi{AH^+u>H4|eb(ahMt@@3bcr=%07wrv49f7fm+ zZg?W@d@XjZ8=aDrCaXlxyibTUO-}n;0~>WmVBTpNs_rULC>8a&BG{YE(x>=teLd-y zBc^SY`>vrT5IoeVt&n0r4-lE>OYQ7SQH-01S*+=|=H{P8^jjns6SLPuITm*zs64>8 z!X9$shGtPOj&m9#S#Ejj$Kc8lGkNz5RTVDjB&Xz2nKzCHSnEacDanpqx{IUY&~Um} z*j^*`vS<<3rh3$i1`vB4E}*T-|M*tsw9RbW6XEH_bs5P+W^WLe*{Ho1 z#99OYS5?jUsM!vCCSYg0^c90$0H!I!pUswGD3iKKQP2DyAWk>OQr`7f_&~S#C@TlG z{=uk`EVi-O3aGCvbBLx514b7-oQQuqtFRWqSCM0nWbwHPi^Q4Wq;>HvTcC#_RwBBn zU}b6~uaHi>ZUL#*UI}Q{rG9~D#mNYavjO-3QB(RkUT>=i=IgCXSD>DUt$k{{aNcYh zMj>a3+qvn`Wp0mmf_y$cLe4~LB4(Fr zd%vqAu@=bw6l| z0F!@38ilPIZl4j;2y)~`8Aj-bYm=9^%@m?6hYeef*1d(m$V$HM%Xm#A1V-=4^V*ZR z#UIqqJ!Tm)1Y7|!oxJ@+$RQ@xx|X+LcI-2o>)Gc*fSa!)pr1tWCqFeIAG*N{`9>a> zd-GPj6AZ0f0kuZ(WuoWt+CTEKRA%nO<;=8#;(|P!3y(^ z$nHrW;uc|RrVotNiysy;SIIMSX0yOg&6Yr~!g~kyNIsrFXnK9#!^2(D z>lwEl;I4}MRxQ`*MW{f1eKs`ee|YD9UEJ1jeeXH~os&|PjP62D+O0mXYl5DM7UMzp z<&apH58aGN0B$_9|FbOczWsllKmx=+ zYS0CR`|>neLZm~SBn>b{i_OGd*n)WAFh5e3pw`QQxb}F>yTLgFWQ?(n;9J^1?u~0Y zTaj3!8VkJn_;jHEEFIGgm9YF5H?xmTL_dCRB#=X!#y|L^mqP~TOLOo+(`vq!9KPL3TU-{0OR?6R{_v?VKpWJ~rj_sI^A z`X)SRa)@##cWXFIn05N-z8{6*6i)P&aA zZRflt@dfj+>yJc*z!l>$cbW3%A^|fM9CSZP%YQmUA5}`HidzkkQ5GLv4;hB4vOOMx z&h02uNiUTCzbRn&G-oYRg6moilaJDpcTmL(rHE3c5#7CRyc0<&?wPrq!&^KQpW;4;~iQJjQ zFQdI!=nxX{U_G+|+acpp9;@OCmHr#MC6ZSin^hvLQoFFj#>bMlK-8DCNmCRgnG%I& zgOK}&&#sx$KGfeVK3dqR>AvmTgI$Op-ak4X(g~r(+kWGq9D~FuK5~0BIt?<9g(x` z&I`kZI7)P0?0vj$)EVBq6u(&xY`o1Y;+ekmD_C5aCcH^=V)V(RU zmT=a7xU3}yJ$}=);b^b#G*;RcU0t%Hb9%me)-!E3WGC1rM7QIu?9noO4sy-O1H_EYWpu9 z4jeBDCMTTi3^)@A2#hOx5Y(~@bY2{q{b%J5g^VaZ3=g+ZAY8K;J8Ed&DN*pNVixEZhaYd?)HET;}9Gp8z5 z;)1T^7^BBv*@NHPSgL+mSnqsNVqzr`PZ3YD^Xam#}I|F_2?0g8VYB=SOKUh*z3&*E;)XU{p z03BhLGJ^~nzLXF`acMbemc={o7%jr}&0O?9TTd}QN7+{67|=wxpw?PEXBw?5VA7re z=2pWx^#?tHHbDp#lFC5Sly`XgDuJ!Gb9K%5=fhO>uaI%~|Bt2XaD@8*|1GH$+4CYY zLT2XKGg%?qN#+^Z-pDF@&xAO$LiTaindiee&0Xf?)`o}$K&~Y zz22|qbZ8k>^Vs>mE#O{c zJKD$p87Zq`8*@?pn8~$ZTx-dcqi^&uDeQ~7sGlyKy>GxjFUfv9{UN`$<@%J@0G^cw z^HDj-D*;0G)ZVf?FdrKHyoqfMpTg_*w_1R*x82<8Y(%Go>J7U0{he808WYO~rZbp% z(@O^MY}C%nYj^E6hw^n)N)Td=QOH}^#kY4^tCH5$_5WUo3K)!8%H+Om{uPi$iNhHi zA{HP^e}4Y)bO$_qCG5Wjq^GXgf}$9M#IYEt1L`xET`fa>k;)3Gs>sCE%}yK3Gu@f# z#ilkJz;Qpi9owl&Mzu7j+*7F4h>s~HREMi`zQ>8fNkumGu4J*_qB4|nzh!^I`LR50 z4>#?0{r=W)l%SVT+;bZ)LW>FF3NOR^Z{K@@pn%8Ws2{=O7n9hH9=>)Z{yBO2249B% zvH6Sq{AZ*0w*%bVil9xCdl%t) zE}~>$FPU9IE(*(>jjGvUMxbh?pcjA8MHoW%- z@5-;=e?^__kL`gI>5=HSfbpA~L;VP2O#=k1-N8%Dbj*nH}AN1I_= zAiNCrV@+=9Ft}uZ@YPGBbNWJ+w=q*hEgSQbn+>>IO}%ewhi?#TXGHM}CLe6RuMQF( zY)T8jX`ySNakytou8p1(jbXn?)1-Qtd%+hlaMl8p!BjFWI^;*`*F?8B@7Z!IzMIod zlvrX`KEX`d>SuaOmOZEHC5!q#aofY$=YITrFy$UbZ694Z=+l+)Iq@p*s}PCXw!rz~ zKg|RzMdw0_IA+SEhxp*h>b%-^TNV);Lwjx zL$lkS8(}3wRY#)RR>buJnI_9}l;z1=MUoTyjiB$TQP`FZvD=nlq8k~;Zbh4Ro;4kp zcCA=lGH~yT0X!)CaSU%sS{Xi{GZt3|wVXFSrR|?&IXc}R7NY9nxw3G_ybLvXHtbTG z8fSdVMCDgp`1l^5G{l+{`n*#Ms|}Te---yvsA*$h$1WKw%;ReJ%QCNT);}6D2b~>c!3>Td2?(9QFLk@?uc=0FW@C+f2~0 zIwP8xPFFmPSl&2m{edUqbjz3ZLO#(pt?V_|BUo~((SZYh`8zim)!_FYK40aJG0b6O z5#?rRM=Ru(THjp@VWM&G$mV`!4Y9roj+0hak5^_BfxI+WI}4GR#Ddh!y!)N0=O+u% zlM_}a&BWWFnzGHoZBMR$xI~g$dNxsQT%oyzOFK5%Yp$NVn}(R^vv=Eey#uk&WFc3`2LfCg;Ke*FbKY%QO5i3jf19LW(%?G%LH@S(Wvdi) zb?F9g$kf$z7>{!hSsE-eiMTHd6O^1;b0s~{RPVfNt_DXF%DT;ButHw=W&ImpNQe8y z2z8IGnpU%pxe)L@TUD}RAzUjrhd({5s1xIIEQn->!PT~7bTeMwS`JF zcy5>UT8P}CK}6=thSfW_GBXN zl(&^C65FQ#?yxN_zuVLE)KNDlE7<)}Ci*^df+MeQCOVi{4J(3K2k-c+fU|wH5J}*Z zkIY}FvA5ruY3;p3sDQ4GC9?ER9*5*sE^eQYSv2TleP-eT6ER=jWEP4+2I6z`PJ4gv zhnsU3;5tAVm9${&aVv_TMV`^X{2}5aBJCIRwF~l`vXcxyex`ONTYg~Ajqk5Mw1i&( z7ardZU_P%&RZ7z^Xh&0L|5s}HGTv9ul1Va zt+$jKmrcX-ws!cNW!x(-kWBfrkrDo#np#v8uRp6?a*EJ$p4T?I_nL|ERW^BPAZED2 zv)rwJKeKP`Uxe`8hUe(~KuQI6vZS~m57UK}mR0L08d%$9SBCU2KNbaaI2*dYpa(D| zk%Z3OQg{j-(E{T#kvvfSofhjC^Z*#B-|`3l7Qtp&htP`$l8wwxPgAbZ^)^0eud3V? z-%1^)Jfp?6hmCF6wH!r^yC>O{5*=)0sGrg+iEHf2_M;~DALYnmNKw<*VKK3%)f37D5{SZgm3uxEK^sGcSp(2W*BKXo&5 zWofmE$^3?n@lwjWPHlr6DO#r^N5sfaIihw#`;YIfgwAg#R8|`LHS$?PETH{k<-@UA zX$Ch!j(#mB95y!@X}r?@T+?lC3D)L?iAljely_fSaqb+InC|KmvkuRT1kgaa$eL19R7!Y3&(;d=PyT2e2m z$=XJv!S1DPr9(CBb8XWFoaiiRceanJA&_LbXg$2HtLY~^DwWd*eJEk?)hZTu5@ z?*gtA(>roB+{H!3FnN;;?{*Irz3b^y0$=s_bH7l&dTY-m`#QZiZ{DrsSFZ*w{v7=M z&HJ{Frx4{E2yM01%XjXytE@S`8hWCl#PGar_g*dKwEm|6IZb7JyLJs;wGcn|tnW45 zd7`9tgDZyAlpL7I`F5Tfx|GTvK$K)oy@B)(ZrksfO?cxvTV@ae5cn^nk4blj@@ox6 z2X5rcUUt_1X+`#_sz%fVj7;yX2oCgv*&bS7Uzl9$=F!Ujkue$R=v zxrnI;+KOYYywT=gCA`g);MRYQ?v6Z_WmUZ45eIBC5igNvhO|n$Idk`oI(CWT0`(gb zYG3lO=!JT$m%2+YNLYiNKx2sBeOX0}`C;2-+v9eko(CxZ)o`?Q%tfPN3zioaeyQ!0 zehD$*T3XLM-3A!k(P2RB;m8^U^!sRt*K$S*5iZ8Be@io}fnPCPIEUU>75MRoaKSd1 z28UeM73Qbn+D*aIZbe=CU!}+tjcr=wlGFt+O;r0b%I1PlC3KGijQ2C{;!dco!I>FT zf+jT^&_sHsmw-xzSj@@Lc2wBe^TgA&p%_a@lB8fM=tQItpHL+n3YN71Nh}gbf0`dN z@?_YT-)Bs;fGwnehIsCy7X(i;z+XzIF8VWdLP@IQp#YtTf;MOkMKd?ijYlVlLJ?zj=Qi z+yB<&<#ePZf3MZ|2dv8xvqEDny?t|_8l3&9vrfZq6m$BqtplBj>9Oq{I;qwH7jL4@ z4D4~L|8FBDR^RDPtU1^;A}XXX=;XIT)-Vt6v(anBuQ_ag-Zcz5+sT^#$&cLFLS_vY zqDJg`BBd+7Jnjv6b=O}E_Cqcq;l9(b33DOB@gmOQ+T|jhWrsJ%S8?28c1+V{g2FTk zk6$Y0s(+Pnv;3-Aij3J7uM&&MNi##uWwQpVHyFukb7!4g7$>DD$@-?LKLTP}6Oe-K z0F@_QF5R@0tp`t^`NgRj9#jzjldn%>UVGqS(T?PL(OcHS9XV zTD8%Z>iJMQXC}=0n?fe9bPQG@MmwTc;sNcUN`IPuckcVlTr<=Jo<9^|(s@EPJ#mUJ z*LYC+J6jF@fn`sc1PhY)*@wq2sO!iL)F7SE<(TLep~pO(;i|e{Ek0 z`{=1bU;CRcB{C@_y-)8(rs2Z9*-34=bP!-H#hchM*GXz52qYctlThbQ#c^m)e zfBKG_NPbg{U!fre$SdvB1`zoh1jh7hPrBd!(TW3VBdy@ymmOVc6T)J8(cHLaA^ZD` z6bb)=yanI@x6La87VOO;vc#73;RXX^5qFlDIwzIM}WLfqUTyv}jzQ@n8N#LuqC zkI-QME694grs}trpESVFIxmClL%QT8Mw0vVJm(9^(>x_t$u(8oxEOgP?I8HTu8u{f zz|0)i;zELS?oI{)r=8)h2`5p7;*8S2<(PAQ5zP4}W z>S{PhnF8tebJRia^@If*Iw&(+@|fY}*O6H+VtEzgdS7WXCqLIqx$?zr>lPo(m&CY z#P~#*4=3R=Rfv#g8`5bl1v$WRX#jP-NgKUl?{}m0ZupmE$1D5#uT96{ulExQj1|E7 zCa0CUn$tf&gnu9AztC&|HPjDOUgKj5Q3pK2vHmW12BK%y%?*oD!$uSiw2-d(oVU7M z0?>(xsjG|1F2+ClmBA^Tz^~>o`1=y^iZ2hjpf|bH;}unU?>x{yVmdGN*@ij!cS&Tf zg&ae8NSNg^Q_oWmj~ZyuZ?~S**(rImW>%ivH|Y9$A2;scPBw{6Da$RY@N2CE$yk7({_Cj9 zBmqh8l3NVxua57(+~6AJNq`l@YWO*{8;-sI*Zp*V*`86!6@9*P0lQo%cvGkl|A)Gt zGF!8<)1}8n60&;Ej4&~dU5Qor=&@Cf7k;h z6LCWpyW5@j9_kA6Si^HRu5$ArHHD1Q3TLa60ZPFf#_)ryxbu6lp4>Qd^>f#sTK2_o z;ONg2`@_f*^Q$%St2q46Rv;q6z)?14zRPW@T=Vg9VlS}#YOCzol?iN@b&ROlI2$5x zZ+F7WUxaU>n$k*w6MP#+{2SbQB-ECo4tCdvF>+(}{*)rg;U0ACMk{OIwy^MmDaCJR zt|7i_x<4RE0wUp)>!CD6#LMe{Ysujmd`irDIgwDcGDEj@GgV$F#o*C-;tQ|Bj!D

OV_y*Jc_FEGo}gg{}t<|<5z(I?^0M;IGSgxQ0{S)<$P2??1fiNy;_^KE9&Pi zO@>4V5K7kGjYo!C^>w@m5R8EE=PIBEhIRD5sAP34a!&neSZebW_2X$P9$4GG@1ooocXXM@qM|)Wa8S(Ypw%+UaPjt zAy=jtlHA|VCbJN7uCw?ximUQ2Bpy)N9Kk7#*bW|jO6HhzEf5#cPG$8KEt(~9;t(<) za2rc(#TEL0Oeg2qVzLrqR;TnA{ATv5z%yYp zUHT)lHQYq;HctLBw)2^0E$HJ^;>YesJm-9#NXmSq`3dfBjO_ctTiCKPGc(hnFc)y{ z32cIL6QIXo8X4&S12EF2QTROQZ{PT&rY;XAk}S>G?|#EMpn@Blw&mH0>2tS}Q>lw= zCU_UN&bN`5sjkClNT+}JFWF-gzpdqNsevkJ`Y4)3XUg>w6vcye+Ugs~zDe`XkuThM z`mJ#ED(Z~mqi>6E0+Jja z<;Hjn4Vc8z0Jd1eT|A$^@Ttb{HdfW)zdrKw;$t{JSFJLP0j1_lpD8Uc5%q$G>$WiZ z0uA886aRf9Iv-O+`R}XR@?xx+_ZeLtzArwv)MESL!CiW-ss;l+&+EC+&ZjQrTe(v; z3)xeYR(wBS&tgs6N)}zIJKB0PoLxELR_Yox78XEcN`ryKN5iYPg^Ce@YOj&xQ2^a? zqTr7OYNBKuU`h40fx}V<94FK(0c!ACe8mO_DCJSjOtjj(X7HM7hIIm+UEmtSitycg6(@&j8M%<2 zWX5+Jobap}o1s4imFonjag}X8R?AOy55GX4*}Q73%j=7l>v} z0WsEKpT8t&;i~-8Qsm(q9n&;OUKq{VLr46MS+OXDX*7|@8Z4(;|4ZhWVA)hWm{GFy zf?(Dpt+c?;=Kn&jd9Toz33=(OC_9x^OxR0OtnVH8LcxUPVbD42IA9E`bZ}#DXKlz; zAXH`GPRF>DTPW43SH_w2hsnlwCeWMW=(edhJ_egEMw!$lmh5N`M!ocpn_P%KFm!Lb z=gyh-TgiLAd*IH5)@rYf+37h*q1oc?y2iguuD-0PxYESB2gbyZKcf`=ZtD0n!QKXB~B1J^1uHuZ0;o5A6Jdf&U9VQ4q`@kfJSyS@lD^3Q15bC&hg15hjyXPVmuK}gd z@ifhV`(dO4oPpc=1_$}z#bGiu*NpBC@mA5>Uz1LEK+P1hvsKCc8wjAu^a0R8Wl!E{ zM}bWzeC)7puyZ*OiFo|@H`QO;0}bO6ms^X|COQXaTDZmz-|ayYqR6f}lkPn!tE5?X zPBebmW=68`gR(^5igk^%n zZ+`2qFWmf+FIe^2!;4|3#8=2!{t3!+eO%~nS%rSTJzRTX2yNpCx!i5bVpuzns|J_e zExZiDw#5`JTJiKs{6%b08^UvVLi>=8Di!Y!g4+P|Yx%2RF#Fu`ynM<04JBiwTv6=3 z2tuzOXzG#Q5qKH{?Ta}+)-i7i5_xSqxO zBs2TsOSybWRKMt7|Bg}z`(A(^Fa13Hp=nx1PPB0~ViQAQ#n@l10{_0>j&32W_ePLE ziGD%o5}PGS7s9Z$%AiIP108YkHd8`FtG_4y{8!H)i!^+}*>!XYHN)K34ole!*rF)G z9iqw2lp8jOBi@@If*KP$p>1mzp+d?AoTed~p?|mT4<$NDy0if&J2h;f{QFxB*6h>> z;*-Y0(gu2(HF42I(_WzAIP8FA)AUSG`{K{nbb(rT zUk~zICTG4X7tpSI`b?+1ad9krT<+6#rW;meMfYQ?$cog**MLW?9_WLMz86uZTTb84 z6x+OM?mQ@^FgPbM>cPx;x5s#hYGc929XqxROCn?R+IOmVF#7B*+ zaGaK^3TN?Ibfw$D-6H}58E}M924r^VruUq`v zZA^>=uEYbHS0}gb2!9ZbN4SShYP|w1S&}BJDX|VzFBa|(y-$$8Yw_dr8?cUj zbz=MJo^V)N@=_Y`5bkR?+W=z;%MLtNO}~Du`VK#%QSwirW?FWTw4;jkdIoa^kb{nV-_+A`MmWHFrIhcetV5yULQuRMO{TY(Yi+YTuI!R!Fj2etn;~j?i&!PyQtT{ z)5^6mXfZkZIm%KS@*J;y%O}0}JYqS8N^c#r>R5B@d}GEu#Oa6{W#5iII=Qgrd`;%n zt*#HsDY0#;r;Rjh7}9REW2PepaP}lk>XjS?hX$Q^u-wCiNa5?pKyvnm0lpT{@_<|7r$OWi|9WPzpRsnS->?K%|G%5gR%<+JLuN_1z z##Cx&FY=vTn2_42N}~zym9S5dF-qI}9hZsMr+KeQSk6V^BWclH_ufIqY`D183>QU` zuXrIjO9*Dw5row1HPa4sV;Z6^fR{Z-tA>rvbS5fhq`nIPhjL8={>%<7_ppO@_?^p^b_SD_DP{~WK)kT#D)0| z)$bl})%pfcEFl!i*4-j~o9I6bW_M#v3fJfo&llFkX4Kbrv0IMZ@ zwa4oXUy#tR@h5!^+McaVrg&PUd}!@FM(a7(k2jrH6*4zIfTZ zG9>iYMQZA*d6HvLAD;-9Xy%IT8euLG9ps4~ij{9;9TciOvdKO3jdWd^b_qr9oTH^9 z;w2p&pm7riOYU;#+TIiOB~d{7sgv?ix+T(A1pQHu5Gqv>wqY=G?Z zKXl!@HsHb~xRcYEMb)PPl4HIq5G%UdF}yK*#r}|#`{kd3Ujc^;+pD)an9@Qr^OtCW zXHZUYxns zrT}Pojaot`=O^3t3sLPJJq59DC9rw<;2G3Lp!4VE57?K1XW|{uu<&A$=OOXGMLz_a zHl|6uc_lYjb%jFp3WhAe<jo^B%nbsMa- zjiT}s?wHmNxgbCVt2I)6t5@c86u|8eQ{eh9`6k>Ffld2wfMSkLt+S~2H5}?1(M=uv zJW(xnOLd)ovTTiycshQK_&OOtz55qZwopiMSWPEIZHpP?Ur9+>QUdDwg?1u1m?VP7 z0`j*rkIv7`!3d31pkfis^0fiM2=LrvCB;U3{SYK3X&ho`v3R`WsIMLn@DQ8C2O2c& z1kY7p#WJttig`4?8Hq4C{<-=UE6lqai%wYaTu1u*bV27hGq<<@RaTAq^EhK4y1D(; z=?dS^=H`<^x_zaSsSXU67Dcq!h?V2jt>xGQZ94B8yo}^6?T7TWV1Qyd3)*Bf<{m=|7djHQGFr}*3UoypgN*dV z*C5LFX;U`z#(MpO?|J==-Xz24msRXzx_=2KbF!loIKVel8|u{d8)Wbich^!ZA)oE9 zrNfjRx8d_pg#^nHC6XLV%pd-h=rlCy=%)&WhUsK-k4NT>iT{wYHyyi_Zx8xX@r15P-tH4+1EHvR1xR<`|dQQ3^V<9Tp!0p-nhv3=p`zC)m zwb$rlSaq&Rl^JvLeuX>Xn#U<}?hSou4c+Jf7$?H4r0({zoB>r&1 zU$YOuC77913_vtK!e0#8@tmb<>Y7#H+}GS$Nbc4=v()C@v*Km1E$J|Za!;G35xg>ohkdsV;_dFC`2 z<+Hj~syNL_^GQ9oLjfT*pb{s8ySm<-t^~Bv&Tfwt2n<0pshb+iht8`P}ZfRUOjF zN|B+1wfLWbzgvKZ4e&nvrJ0LFo|RV(cGJmz@Nm6#8yK;&1g5fYKIxA2F$Nuk%Rc}& z7iaz%=N=2034~YbwgrmBaeRJ1`bKbc_dVWnGO5xmsD@4QoWG?j92mBrNFLnarXm!8XN;(oh z&b$u)OSC52!F%fN1Mn?x>lT4B!PdVF^6qKpB6C-x*So;BweIIjB9@isg{AzjsHD9P zrn6GxY;S(p<2S^t#bHK3*K!=u*U_tSdJbzMR8#xlpU63{f7ghe`|v@ zyeC=dHtDRLSC_M@+|OiZGvIeFOnrukiZ~6gCc5bo*Ks zvis=wC9gJl)#zs%C8jlBfsSx2S<5*`r=0JXu3x66whh*{T%Q*zf+T_{7PU`4$;QheQ3?Eq9- zrhTPo_acEZkxOz)bj~YWjU;;rLesaI z{kNSZYn-ey5+t3ch4*VD@<+Ix?<;e)00+X9`_Ws7j%vO^a^($NAZEVohz9Fd19*a( z6=UqiA`_z(Ff`hl2;Bre*R<=x8&vnm)3v}R0^e@c`;C{p!}>AC2vYAcdo8e-m5o;# z7GhslwXLT^Ck1ZY;k>pW2VWT;{X__*U)7<+nhm)f+X5GzfT#J3X6Zjsw__d~+JJqL zZnCF!Io}?gdGVJ#{xk9#8f@ykopaxw@7P}UOu6gV+i4exjH#r_=--854*=h>GO2f2 zh<>3kX-NADV_Bmm#^4fjy3X>@z9K!fJrUQr{qUXbK$vf(D|fuV#OPcf}==GFqpLY@-45QXI}={$qb7yX%uN z2)xd|5mZkRu@HfvXzuuu?bjP+lTQ})uX5Q$H z<<`$oDJEuM?PXz9MtM2c`$if9wl(dwd`SMmK zO|?X#>jv#rGD%)VPy`J6XZH*mb1!&#i4s*1W?c-OscCjTs6Hp}W=cw;w&!LsGybCyBxfiJbEKZ!n zJ|qX8FGwp=o>FX7qkGf&DFH=Yb5Rre<`!lE4g`p4Tb5?r{p>g5>up_-q~Eg{JrIzm zcRIyFIp*~|eJTujk{RhnQBRC^_K|bbb&T_Gy_0kQ%S>}JhqVR!tW%W2a95}Z{lnbmzBb`wK1-@M9>%yvWT~wCO{zX&fN0W_ zL||fdWNyUbO6M4*r5~RmMX@rR0~y_%3QheAwR(ss7_5Z6SHk`HQ9%7gw<=;M;hXfW zZYQ}<)2GSV2q88#QSq0Qo-Y2r9xhq=dMsa--Ec0t+`<+fD5+BiF+Hb^m1R%wd>uXR z;#r-TuIDSkVo!)K3S3P!1>NPC-`~AMc{wIVr+Z_v*WQF(iW@PX*Uuw0Y%y~G*d{v!Jl(s~>82CJKl4+2aoZ(y_sz8Tv)#Y8;)sR&{ac>x9g`*Ok^oT5_ zE5AluvM6sOwZipahb!jAK)UBMp44V@yYvSvjS_TO8MNR0t%)=N1>L_%G!Sa9rsUv` zTIXh;gcwDv#o>$9B;`}5<5*KUZz>oc+usbkE|h_Ak5`F`O1gce~qd9!jp=F74e zwUaX33}(H=zF3NTcQ1go^4>F*tslhz4MtUuz8EM1nBK>3xA$4W_bg~I5g#4Uj=x(yeF53-i~V1#rSY3dxD0GYS8-1bhNKbbYHYcmzWQB@?5jcDzK?sO{bxngh7b_}!q=}M?4J?2to zpSSWfXf~T2m6ulMN;v@Kq_&oqXN95UT&Tmv%^yV)dKn+VeJ3hC9#c0~R99BM5{SiT zip*AfZu*T&X_ilEJQEb8n)kz~wvCqKhsgem6~yVL^`etq1U~J?$m;~`S~ga;f7M$f z{z)BqcWMiYGTmJ>Xab zck*Xc`kse%Fo5S-m_apPx1WS~gI}zM<l%QAyJrE`ceB{D zw5z}Ge;R9Y1qT35UvlmjFNI5fy38_QETeHSY0U9{F$BEGDU!27fj>Q+_6&*ikm2^?Bw|7JXP`l=47d@~*D23LDxvHMNO@cEM_xR;Q1w zZz2h`at5zJQ+QLA_FT2a@j^LFgB61r8H7YD&3^9JjglS;hfIym8cJh^Xwd5H7+Q>F z?`#93A={iUy_FIq$m%XP~gC!edvJp+}hjnpS)ZQO>2*mDB zEvgxzY=3#uPHa^L;EegF^vUO613YQ}__e_0qZ-2(lEM>m%*ciwaZunv|LehusPr;K zUC385eWcxxBYvQ{-O4Ru&4CStTeg3y4EgFY@pEdnjeECt5ZYRFJ6(PA;&3t*R*=~W zqWC1C+s=xQ?_B^wesqK=FKh+X+r`ITwI#1-O*Mk2|Cpn+T>g3Sjy=6P^e@4BjnORT zWr$}h`+v4wih;2L(_6+1A0TndwP_m1skm8uC4hXJ%$e{%Tcd6RqB6Vp*?-0+c{w^g z1!8!38FvFsA3V+JIBh)MKTWuG`>yuFc0nhhSenO*w!X{#`sKu=6iT>v?dJ#oVrYK%8q0@TnY8{np*_U4BeZiWWQf|kuCLD)psBCV8`DgSBwUHs zynYAC+iwL@{o6c14ogqNw~w z|9XgL%Ea#F@UJiHYyp$?e%Q%D<~tEKk=(qiR>R59@l9OtaIBwm?Tz}a&xCB}7d(Sh z-2`b3*Zw%zuseH=>d?Ux#YiYNp=P8i0XJ<$ywr-(Eq`65M0}+6Yi;n_1z>Hb>$CRV z=u8?j#tPS_x`c6zIL4=Z&g~cN1Do>#g@XUJ#V}gd6;7Y?LG{oeU9CNKq((g2Tf>Dv zwjJwrD9F-%6QrmYzc@IYJg)L@H!w8!@&g_L6^~I2qzW>vdn9+Q(xlBmeTvj#1WJ^l zrVJ`yt8L=GdIP9A7#||}^a+%6WjJb9&NBQL^6pW>otQs|RBhP(fmBhqD3ZU2h6uQF zYV*k!fUgdZs@V&TxSzXH+D+>IQCk8l|F^n@7F;JWv>K2o!&~^_%Mlnu^Oi^OX2if% zD{A2yfa&*43Xaio(5+3FB(m#lIW-B3I(lffA3q)LEj>HEulAVj@>b_28Z z7cVeMHcEJK%~2CzcZ^w4ICQ2G1xdet>FLa*U%_(}WZ59tihePL&s;t3|C+3j`v1dLinHJ+@T#y<9K{E{*nwvnCKyIix@fv5UKkpB59@GHt1K-wE>iArmaMo53E+^rb zdF=8pqmpIzXo-|(%hMB@BA~b1jBl!%V3^Y z&9BbiivTRAs>c-q+6rAtp}4>8gACWd-tNs!H}_;M*_%D4`bzkY2wYOQbt#F!I>d!b zcz&Y5&sSX5chLg~)an;2fpe%{hzQXbr!+Zq$7ru#UoUv$Z* zO3OX);sf`OQh_y6f&;BhM*|r$R3BjjOMlnzH2uAsKEIGQ%-V6r$h#dZ<#FmT((-zk zox9`blZ=I(!*r{yzq%e;JEu#e(a;Oajc2fpj*|g!X^rr3XKd+Q0BWk|PfE#eHb|0K zS%twB_spbX8Y5x;_tJTAniE}%ZS6)s_2hOj-E)a?Ji7Yl83g0zNQ_;w&hPto(x(ab zTdT3*a^^hm+2+sCfeNJ0goCEhfRrbMwz-bCMcPio51YL z(>usAMTsAIh-r-zi|WI8HP!6EJMVoeOEUXa|~iEE}fQZH}7G{%OB2z`~BDqzVS^qPIGMzLG3q zE>el~l`cM83z0Y$XtrgiA_JF23m^b*+yBn(>wkUnVLO1O8mq$EbSF9{&!m0(4#c@5)%C za3e(k-yj-?g1!+;K86ryT8PIx*^D@N_d|^vfcmu2%jC547vpdGWWhVYe+#v|I5#`? zEqjFWPp>s&#`4~%tZO2s(bd$5=zW#w{Tf_*66TWy8G=vo*=C zHtgGIpXgo# z-wUJ*#lKIn4UYWd>g(%6r=ADxmgrz=k3jiFS8|LiKe`xbUTZOdGdqzlR=`L@+Qwj# z`b1ifyD_UB}V4z+T6!H)p~71Z=$&Z(V^j)CxMrOpShx zfMBdjsoRlPp3c13#h(gVyj=VFB}0(Q0Ni3fP0i)|{ODFNTaN`%sU|0MawAvxsK`BO zEeEIsF87gqk1mlwhDbEF}4*AQqRPTFSkg*S+BRqV5+QXWSAXVk$wW&)S*nhh* zJo;D!6gKOzqW) zChoIku$r(v(X#1er?)>ts$H7OA#{~QVk}mj4@e9-sKC8`reF2KS=!sz9qGmGd1y&R z0a3%%>G5uBo~i^}^yoLSsh%Mj%Ur}d?Jc*a#~6_6-^tCz4u&Skmy?{96)-*(xm(-v z>jOYg;h4tkTVSXBtOz$pm5Ip0N_70S~vuD7NHLDny)sZE6q6@#7`x%?6SlM3lNB319iNy zTRa&|V}mksWi+UIwcrfxs$a~*lrAxBA_Lxq<^NkerVRhI3YcIz{Pp|K`kxGT4Gt?M zVzKQwq^9L=YMEDtViUhyYsfA!Qy@i#<*fw%I%2lUanGPc0Ms5^50Bs4l9y* zv*f+Lb!)0}Z*0+ed38?8gVz?I?{eu2MBJ37D5E4^am@NHcUSxWX!;I+D*yL?DcK}K zI7($@l|&qS%O2TB*&G}rZn7$~>^(d7J~jtAN|EgC7>ARP?IuZN{_ftN@9z&dkMp`; z*L6Lw=QUo}RWP=CJ!5cN1;PbL!9u5AtAcd-K({LpAl-OKf}9dLDgfk5-VID4CAy=^ zh{zgP!YW5vH?kB~A5~wDOqZG!r2y}Z4;_D3c$ViqdAnh0WLup4YkN?D&;I3n*nn_a z5ESGaMAL5dK||ubz_olIP@w8V#?53!f8(c_#p=>LT+eR1tRU@#^4+Cm4cL!A#bT4&vh>s zM6RaS?46XpxZ1hJgsaM zT*aUPD^=)~;a?%=PNg|;#S+em}=zdsQ4zf>E1WV4V(X!uEBVu#w-flnX)i=0aUFHRM2Kd~g{nNG->#tW`sLnmnu zZ_ez|>#}8Q)(8d=xwlgZ3pQC3)uqtKvR43K8~+?Q_R}DzX8vf(!7e9A4X3TpZVkz; znsxDYXHEOv#+#B0Qp2v-PhPGBOrb(uAmeDMEM{;!XX0P7zz|oWVtmAB3VKXT>tCXy zGX+&`bAm-b(S}}JO`q4t?a@!@{El-MEc<6R6~wTT0FfDnmlN_^|R+e za=XlnKS%qUCZ@eXWZ?n28-m#|<4PawOd|Kix+UYNq+Z8d41q`#L+OiIc z62uVu3)TM+gqWi}#O@Z|ggZ^>7{D)YOeX)K)Q1N;O;q#uR1n<6qjI=#xPU}Q-f!Mb zeRIB?uD)Gc@{~$@?lKYAUhWQjNfyw>&dlJs&C^SoyqYQ=z=w9_(*g`5f!vp80#9&o zHGL>=IgDb3#=tORsXG~llDepo^s z=3&I)Gne`LfSZ0lKJ32L5KTU&?5k_mFt?_>+l`;bkJ`k!Qn}jKnO=9d(fs;d=T{7E ze1Ba#X$5fb>R*(44nua!gSUR`E0bY}6wq=pe<@SJTdqw@6V>{-;C5&No2C0lwqP$w zQw#zTPqz158x&_z!N*C#kBili62xu4`RzuW<=fL5Rn>{i!#+RZZe!s;s(p3k19t)C zp+wsT+nNSfAmT2giLyoxJ892W9^gMR9hA=pf!mP$w6)&8Tr8Wy^Qe$>Whx= zJt?+R+`Xt; zFp#d{LCT$!jJ{*LzuQDiMHKI#DlTeyC?o2-cPCR#U*f?SjD2Z7Q&89Gu~@&Hnv;Zu z@V~%Ne>%61<=61tu5b7><2)r8H#i9~H3FMTPT)83q zo9lt{|NMLFm%9hgaPNHbfD&lh5UeY;J*ZhM4K1uKkZG-EN1K?R(q2@~eQ~i*n}^A8 zD;5h-HQ0J3loN>TQ3Y#O@LFgx)$PpSt19HtEa7j61;Raw3$N6nVs3XWfmRumJ<|il zu(Qt~+v1P5JosGOHvMAy zbN5%y^wvpbW!LsM0v{wf?;02#^F>`Vu)x2D$k5&~9=cX(Y7Zn4_GOK5JZ;B%V2($j zUQq=Xm0M0j)XeVzU5k8N75Q5Ct&fjj>Do9Fm=NhjJt=V?7$xm# zkmMhdWvQfJel*76Epa&{M(}rm5WT7f$sZOJ^}65o+AopD$8MZm+%@3$pgw7+E_GVP@C!iN8S z?C1pKH4_#Lzsg>Z@AkkIW*1TfmI01)l>I+HGj1B%eYTfjE{@;v!2LbxH3u7S;yyzV zG)Z^ETekhvPn!(%?!>nl$~Pg;SP$n~xY~v&C(V`8&TG}BYo=K_Lq%T%UsD2OIOJE_ z?Sa3dCQxcd<$XZTw+W;PeN!k=1)6KL<{zdjx0>JOxH*9;2DFdAYzRhS3FuA`G8tUx z9|(2?Ax-j?LT{twGJ-$GFLbd8xePENC5pE_T9(^Nf9qd)w3*R&6$4}Fx02!@v_!>L z4d5{l{zrT{o!(00`!&pn!cq=cY9&;n3i4oY+)y89^XcF^ zFnfR6*>|Q4-DV2b#wfbA&nMsh3TOwT4GlE8#7aQ4U7-JJCh=FPS;_xGta9RD zYdk60%zX%bk-kBLX}sk`Qu70wSL_bm-96RbIyt{g4!S2dgC?bJ<|EwcXpOM5Mv(1_ zPoNyly_|TFQ>sqB`atM2f$t-zjLWa+ue&J1XJM21u#ZO7zo0mqtAE3>MCV|Kx+t;`U2!Njh;3h>$=Rr%c4&25H?cQe4n z=L6XmP!SPkCI~XNjidZ8lz>A(^SjHRJ)9mj23)FP#6CBcdPe*HSw@MTtRtqyYXyHN z=N+r<-PN*psl8t7{RVw?q7yp*<)4TC-p3Fh$}9X~6RI!NjqA2Gh6lpw3cJ?(Kr6BC zp2r%%ljsj$7}ZU?&6}mvnvCI=Sp@#R2n=zk6Luf>hY2-Bm?v&)@xLONxraQ%F&62; zubXK_c+4^hkVXPSjz-*!58m$5$3%_^H4wJaUL-9a6#q*#>}zj=P96H{RecZSL9gE(NW&~S@}d=~>K7_FaRxX|V_eBCoH6{~ z|B*KSJ{}D5tZREn7K6YL6&xhcitA0JwykKy$V~O%kXgNwV-;;40Bt~v(OlAaqOHSo zU(#f`|4ut%h5P!S_c2Ov0JkOkf1m9M_k%sPErYo?u@fzyBb%L$__9JOTVM^3!A})Z z(LNBWGMkZLH=X}S{^4*ida{#vdJ5rO1i@!|tI1bNs528bPH9Qis%)9zqwvb6^4$%W zB6nu6j`yqiX1Z+X47ZWPUjYciespM2|5NRQ1cJhrhlZU*a1F4Oy{SI2o#L1qwpK`y zIP;;Ua+Z$`i?b{RXo8Uw+Zy!cut||&h=kbN;;Zolsh)eyg8OaJ_V!<+sgx(M0(Px>fx*L@0~j=YT;R7Yr_& zp3Tn8JQkuW{SIxx`?+TGdl*$Z>2-=vN4)_@!&Gq?`J^h4!HZ9 z@!c(fZhaEgdHbjTl+6evu(05c^N8QTt*uLw1o44tdvgoEZm3~}X_aHAx3V^oJ?PN&)oG_IFfcn$LXcdr( z|7#y{=i#csCos?BaEUtlL%cEwZBg3svV~;c7#q@G?PiSAdFDp)S*hLCMIhl`4XkL0 zHZza?88cO@1Flm|PsXLU*arA!;y2`=k@RMU;aPsa@|Hud;OP5*ka~~@>^uB}HumQV z;#8ftq@>tH=)MCBw=8=Um@HG5KLZI;6joJ$XyaiJvO5$yl3pU&4Qs?djWYrNnB*f$ zZTV?`F6Nl=eUn|gG*k?o?-{_?Q@|Eo^P1ZQR(rW<@~}RPkoY2panmY@mF)W+cX5cQ zKsit-m$E4vb$>#qB)66jURYSCC6}l}^`|wYH1`eRG}F#IXs!Ubv6S|Oj=p3#8_eLW zLH)~1GutU-uV4ClS%?la7qaucN}z@Oy>~J2jBj}wFAI0`kHM#EdOTTZkmZ83Dt~zH|gWogWye#1+Fd^ zPj+n4c*JRCu4ZbWp6a^_?Y^%|kosr_{<6^iFD8@1y3EnR>V2YJzXUNY+~PpQM}?Om zdiH0|kPR>#Yzi^+1LF7&+WroSGYdO`|D|s#fj8?R*3aB9SZZwOi~?B8ArHFVOHmYT z?%(zu=Sr^MDRu?w()}x~v6=&3W@>(394hPF4VpiN&N1$g4Si}q*>aRSj-Nl#_%-|V zWRd0R`F%s2IcRs(>t~5UFxB;6D@<3DK2@fwPc$W(gGckfTK4GibS?$J_uEk3YG!R5 zGIdQ%U(;bxoz4{x`tTH6Yrw(+Egs*JoXj5);^W-susZN1n^i<R)(shp(FWR|a+1mrJGta}P zp#U}d0!4HKi(>(>=o$10=?jUSrRKSNIFlWB)3HE<+9&mKb~813q-_)&j>Y`{}TiDIP(0s z6a&0GJ9w#ug{OSd;lvVDZs!Dd+=pfscv*75w!*teX`n%!$zWE9Ypx`@-g{N>s3p(; zl`Z_=jW}U3zId#lG%9-OJuvcm#@d-x-GLX`+)iCWeD>x8aFwvj)7Gc8*k>+k_sisE zFW`vY{l@M>Yhp`_fhy@G|Lz3JSF_lC9z;5LHX6X&;-fu&dogixNJkJ(Pg)+?VlB|O zEJ^{tUypEDLhsd>8h!Xk=RfX|Li+?R8F1@nf2p?oqTfdtX=`hw&Gfo=Qyy?!2@r3} zJ9Q&hi{d-F7@>@s-LH2}Z!O}A@BN?{uD=5{4FV$n{WZD*))x0v0LljNK@R)(@7*OE z2B9IU6g&M=h@O1+A}LSah4Ogn>P2Tz9YcYZ;+Mb3PydnXNR4gWq)^#V|L#J((mRa`dGq# zc9dX_G(B17e@N3r@N`-weJ3>e^+OkO>UD=%8Eha9OGnQcFB%wTFWe(Vx2;9iNnOOD znHFftaQ+E!Y_o1yddqi}Kn(p?&_|Xc$x$A#NhC`wSzqgj9GSq12>{QK1RNS2lsMW?B&b+a2D!y^ehXH+g;2sb)flU>(`{ zso1X(?k0|-?%fK>PqDqI4_Dg?1_(mWsd`wa^SRTbW*9QB`nmxJWst`#Ba{;^=zw%C zSPNzH=!Px^3~|wuRn@7G^$h`X+d;w~>27*{I71#$PN4AWTyi<>xxrrLkR`BVfH}I) z$Ziyiy4KWnI_|>cSRn7(Pu~n!LY7OGd0PYmj!t7iXnr+HZJ1b|?@9Qc4=qO z?v^1w?N2j{&*CGxwV6J9Jlc9Qvp{Yv^92wxh9{J?xcVO0NO6a3UblT)36@NjOkO$E zJQ5pzF5Ddg&0u#I525_3utP%Wdo_j~`q#+MUUWjvutB$v;A>N_P7?CNSM{|smtPn}0_SHYFPmR{ zE4=DMKUXdwkOfJi4o?|NfJG6)^>8~-;VTc&ztjM=W!s1eTQMz=&>iFx28$C5tX6zw zPA>ufHsE&u+YoE-gSdpXnYBw;wx7 zxA(iBue&_KMU+ao0)aP(@}Rt!?2r5|@&y~un`CBC=P))JiQR;fhKx`oQ%*$gw?#%< z*h#khpKA7J!d}f_O&q!z5agM#gnLkWs-#;^L$ayEmZ~9J2ZwMOIJeyql)p1oFB^Ah z+f;YIQ|`e1hsLN~U;@>t+0A*jkK3Yz;inH;s{h!Nhg_QPnpC=Zh2Pt~sFtz3NZ9P4 zi|97|USn|6DyM2v{j9A|8~wvL2eHz9{_c5$HUP7R72EP!9L~Iy2aa=37DRU3sl2o- zN=IvnF$4MU=)5mU{bqP69N{FMTgs#@O{>c}r*`pCljf8%lfA|a>9gsmTQ4u)@!3qg zLCkA$iM0OC{uiEeWv$liecda4-MfT!;Ky+yc%Uh4(d9?_O#IAW1!is=tuB6fWM-6m zD*o@nZ8Qh1Ot6z9@kSKr--z?u-Pl$MOm~e3aOtC1_{+2T(y7sIcmPTYJP^#uF(ir1 zeL&%PM-jL1#Fo|In3<7~sM^T>a3c{~GWyuaNzHBwipIrxsWuZ1)l-tXmP(E80s$dl zLn#G#Wt*q3G5h;+FY|j}Mw+r%-8Wn6H;!fwK9XkZn@?zy)|%pBPqPgb;3I^*+6NIk zZ?{CH_BT5$Kj~w!D~?rDhu+%+*sc@#BK#sDU)$1!|Gb4bHQ!L!{PzI@6B!BpXZU&hVJL>@*(`0p(W zFvUbIU=IDwz%KGeMdR&8r7r=yUGry0o9W`=faX^%5~ccxi+0i%uAs#YEt73-_9h#x z`K4VAw$s*dN*~Ik?j*iQ5;D46W-s`~^m9gzvj9n=o#r5V&?TO;5QXS8_}aD7GZc^L zGS4&%cc(y@wOoGBr*$kT9V%zuhF_?9DDA0?(|3;n0#{P9Tv%)K!jr{RZe1nGovF3b zFN#UtK{ce2ZVGfJyp>+!FWQspi-a52nSRe`_ED!E@8PtVic_8>z5=Egz!JlO4$dvB z&kj-Re_ytXb5Csx7Tc3IvVUU^xCH)8`7P$=>wEBL9JxN-ENdM zeOF}g-wz@u=X=?TxcYa#8dkz4qWA4$S{zIbE<1l&Npu}6Q~iY5Fq>pLs+ip41m7h+ znM*)_utO0h(2I?ajmN?&$}>`(o~J+5uu_lnEa62rnqX;#Fa-acl(Ao?jhWx(i?GM8 z4`2lwv9Fvxd$9cry392ke(XZ3Q`H2Fol1}RoVG^e zrcu+MSsCj?RT~409wL?DD!?1}-(KfSG93(kTr)D7Iq0J!CjI%+Ci2nC-9}DR&HC>Q zQURl|NV{gGztg7yxgR1=87(GMb{n1s?w&h8#cAiG1rSQAbxe7i4}M7S+0k)7?}}O% zrsl(Myt2LS1{0zHy`oqTJr$fVF=y&GpA5KFR61W&mYnHTm9H47woiMime3m_K`Vdd zr%uD6;Op3)N*ceLyiIu~iy3KkdR6UnyQHX}()azo4?fbJTK1yODP#A^>CAg)Q4*)` z$<$`hDGIxQq>~UZVeR$6ogKM8POy)2rqTVO^loKH)Kp+po4O_g{|3;lcWKTmPGL)9 zsK4pb%4Fk^F`!%I{b*+K)dd($6Dh`+&SUJM$V$&s+qVbu-cG4ToJbl(4)4j-pAPcPF0T{^Z%i{0@9U?ufLa3#y#*I zZj0fNfJP$$>fY)BGQYS8`HoYwz*1UQp{h))8`E8SO~e(u0sdOUUbDHsKQgGcwm1qI zQ$)cvX3?!lr^t`6*D#;%vEy!@38lK4vAUh(ALPNi<07Z$n%PRYI1!U4-6mP4M#Oq+ z<`hv)_A1xbq2HOBBP;ULOx)39C2H`ffrl5zs+sJQNz3hZro#;AA!!?@lZu7|&&8=T z$zF__5~R2Sw6H?8- zGy?iPVdmRy=8*=%d3M1zkD}lFz2s$CWBb#r@lhDS`5<7bT7&PB8_1e;&DnG_bJ9;R zqAh`xqpG)1sT%Ff6ZaV-HK#5MtzS5yl@hpXV)u3l%i+aEGt8_g&!hbPx}qS7pX;LK zXe(;%PNqjB+lM=qm6uk-&k~>F1+pE@Y_K`6!qqGLwEapJUnh>*-m4xNqQ5PiBz-+6 zL%{HU$9w5A@0;&E@BDOOnig}MNR9?HonJkv`NZAm;#D@S^&UXy48)NA)=YZfqqIXv zB`N8$_xyt0^Pkf3;KiFg%tJ#{zWhtCC&)!q6Kjtt^AS&7ebIp24Eh!koozEi{3cvt ze?V8}{6~71_&Ju{5x>c2rP>_#cq3tziI7MEu2JU`U;c4A_yu{n3RTEaSOn!0?G(vX zfK6tqJFOb=LESuIK96&y&L$}DK*XSliNG+)@V%VHaO4~BL0S0XkSu5W-~O7Q{bKD8 zO5%}?)^A6UFgERJ9~W^fB^fotfw8d#SIS=!PdC&3$4@5#g3t9IOrvjSPOj~-Fx`5B zB~yVdmhrl#c4Mpke9!P3r>sVJvaA zSVrh^btFgRG>HN87kxSxd#hTKBnGue7f|`(7ZuE+4kkD?rTVQIYHv(;!(`kMUs?3x*y+?LDoUt+_5Qy9{;y(Au%yD7Ioz3$ zP3{O?Q73e@+l#f^g?dg0&{PJ(sU1XI3OV%~;jwm+UuWfkZr@2btDymNzP99xs15bQ zji?1FFIXb6yvlHPb^;bH=kYj^cqa2}OV)F>>i|6ezB+$=HHla%k(z+0Y`wH%pCyug z$HI9qN@}fWMgC^_IeyBLME617SnCrO2bKJhp=7!;RooQ=szk*>Qi~xE?|R|Oqe7B8 z8^&KmjLS7d3{L|E;u!6l^Xbe+Tivhh;nS*rU?ew#pA`4>JDKv@eK6+ZuzFeJWc89* zl9)2ywXj-nk6V_V<5B7IX3JwLxXj$v8POg0q zhQ}giX#!OZpHdUe^<$~;w2w={$ql1liB&#i&~$T_FM9v1_ljSy>pgbuuQOWyH?t(~ zkR8JU97(Qgq7oGu+6s@^JLzA=yQ@({t3HCM8Ug zFeQP}l(e?Ye^@z|%=L|YZg7-WnA{Y0BJmX@*`_0zJ3l`1(FS|ISb1e$Ui~#gHvl z(18-ni*#0IPQUj?#jcbCY;0_FG3l#YPjg(V7TbQR<(mEg#shx@T&bm7WFUnfdX`Kad+}PN?T+&*~_<>H~Op#V`hp7 zAA8pRd+!4IL6_2q!|FR6H##%o^aGiH#m-$58Fvx5yY%yI9zr~btsx){dWEQhW4e%^ zkXxU@BWl-lv%lH?Oa#r>7;TgJS0RtsHMKf3AKoXg$vv;TrXj_J85Q1h*Z2^opYkz# zE;y;kN=@s+n|j)2d_RY^*n)57$6oi_AJ+Y{j;u`S2VE}U>(RMqy1L|W~C#@p} z_HP5ZG7YbRAG3*xQ}u3nFsl05oqQq?1vK6wQ>D+?(M!fVl@>q5-ltN9e_Q?9+L;W> z1GKGckEDm=Ms+eIt0&kZ6a>?=8C>Mywpzd;W5GB>fsn)GpM<#6RbP>*gPVEiNoaI^ z!4z+5FFW<(a}BBZS58pDV40k6C05ZV$8J=|zcZCjMsqYSMFpO)(0lAORZ4wFdM>ti zXWXfDbbHB#fPmM76x%vN9_ZMV%KfkrRNN@){rgwtzFlN*Mysch;x`m&yp-Mf3E&9D zTgUHig~dccXpy$2i}`4r7F-ctfJ;KUM;=~^eaN)t)<^koUB$?`JO&1utEm z-FN?ZzU}wngRf>a+Sq{;t(9a)FitnWkXPx4(@ zo>)%ZuzU@8-D4}-=r-Dg1V6g%Fjh_6E`ONg>ImlCZ47XosbZ$8Ukm=V$nP}Nlw0ra z_}mDw6U2-{49c^%O4k44m2+joVl5d)UPoT zR6gGf=#CfZ`7?KD(3mXU?7`jgvp|rbBIB))Xu@pA@0&O(01}9LY@iqc+G@po3p%Ea z$ZWqnj+Y8F|3e*}miGx+&y*+>XHuS#o6B2ydo_+kCm-##^Gyv7D;ycivTA$)OUS$h zDU1#L6 z+|`z&DRYZ8rev=OX*$SN-=sFiNprEQ1nM>AXk8ejPlBK%`+azkPR}=^e>aE*e0_0C zQG$iUt0Q!hRH`^*YNvx^W5!3_m65DuRR#)9-Pg^Q31FKNPE5^{#Jcp~5u--quEeGY zq97%(p@HrpMn({wH`<328CQ|eSA(4HFFF;G9PX8mSj!ku@&{Z~!k`PUXO03c>c(Cf zRa?CaFL!n*vdx#Dpds~Vg0TTpFuLO0h>H*-tcPrsXSu392NMcw%QM+}zwg z1hq_|*nNy_CBz6so8#o0TD%ROy+;0w4T9T@@+t}rrB7Y||p`r*2HljIJQgH1MqL@Fe~dj=9Ahg$i)I zn)n2x_bgXjs6-)Q{_|@qCFZfQqs8c#F9T0kcg_p{930S_9TzRhE$n3I&>fh>*TJe4 zyIBL?p9A|pe}bd4Pd>i(4ph%wyA`x}>UV;Ui;Iton>&L)VSbuAy!hjUH*s?2*^eU` zIo9{5rukVCUI8SH-!gJ_<`U!MlQM=6o?1UMwLTUCU3~Ae&a+xxl9`9S`|GSA9+V~L z#p0a6I<(I(c>MIw5NDI8z2-=Z)BMzndiu>AJN%eX(q+?6Y%XI#jMOyDq%@Bna7eby zGzgZByxN{UC|%97CpAR6K6gU$FV) z$6n%H=H3E!*p)*M9kflWlH6;y32taEiyLyN0HfOiSb~NTeA$3x`1re2Q%V_NmH%v(%p2Z$#r%g?B4PQLgU&!F zu=~XNhbhQsk+K*t|JJ)32jDX8+>#STJ-!bhJ3 zbMjg&FnG~*&cOVPa{S%(n`!M@59&X1(g`l+S2AKJkR4tOVjr{vT~{%pR0Rzdyq$)v$2TTXE7;546-B z`^8(mG>G3;V)~@inVfc-?Uqc?uumc^+hA`uE7fv;h^|?A&Q3~<>*vcbsq(S&5eXkY z9nB?t^q3#rW`lt}C(^Q=OF=IKMmE;e<|+^k8W@6jHsNPhDq8rS2+UkL+}f&u;2ADh zj&9JtZgw!PriMX}A=OZkA8fb$Z|H%p1$xs>G6wM1%#i^_z+b5F8Q@Q4B^!@Ch-z2; ze9!m8_TH+5d+_9mJwM!S$|e2>+u!t=t)r(Ng)nyMc%3)rO5NAbe!k&7`Wje>@ZG*w zc*@z}`Q_Qj4Q&g?D1wT=NkvhR-~CIqRF|kvUy{{6mo2eWc2Y z#QjFUN%1w`qutj{haH_YhqKVE>ta~$`?&mQC;vj@)LVWjxo#-n^@|r<4vVByNcxO) z3JlcxqTTdd9h8+E>V{gh_oc6;_c+w4Au0+JCgJ_h!H`H~=_=tZhvzSDR~8Xl4h#Zy zJDk!i$ECXsS$DhUxLc<3WlhXZI6Nq zT3Fi5V3v^C^k$>>^f72nc`b2ww=N*i)mGIQiS17!SPy%q9DNT`H(h~Syss9V9&%TE zOrh|)wPqrYZlcg2YCRJMC@HFAh?j+$HBwsl`J3P30GqXMZ zW{D9Q#dqoj6#0snDfqEtzI@{DGN&{z4F=Ipb>Q>_g-20kDzL1G@sg~=-dJOmstV`R zq76aIxn`NSKqOUZA+UGVY^O8wODjK(5l->*Y*T!Zf`g+?=v5XRu~$QEfsXwoP!QcF zi?z+j<-CG(SxH2xc}d8>7s#K(OV#>SOcipf{BMA<1;?8x%dQL|htY8Gne?ML@QJ91F? zxOT4owyz1Wx5V+bI1r_ph^t7$8C+)`D#8zwq#SpOhjr@P-lKf5I+4ihCM!wO+ z(~YugVW$c{QnNw($Vh8=74X)!JMGP{6@9o0(vknKf;nZsUSB=;dvv5jq%wwa9_^YA z=W1r;{oyU;e^4qPn$tSzfCP9L_>KsWIH_4N`j3u9RlVs%_Oa-RF`o3Ut8+#{5v7ssOeW8MU{Sox=GfR_7r_Z@!%I&0WlnMH< zkWIdDzZKdqPqQz4D^b0r3`k4SS2gD3U%n$)UKEZj)iN~awBo@gkEt(*y@|5c-7bf5 z+m%ONgx>z%e-{(fpk8NN!i`Q55;g^SMk-8H^)@c@So>-&X&b;_&Q(jWW!C27g)hcB z3ynWbBHX9pwOhx}f~8!QjhBnn!Hq)mVmT9BjvUM(Yf02-6)ADStCcer^AUwTR!2gN z@V6FDxx-*AZPyOhk?6&!@%phN@71e#opsl$s`_aLrmAsdq;wgeNFiMK%qnvx=?b5eo)TnugJ5>D^Fpn+*N!m;6ie9+Ko0{gWyHw@^uX4^aV~2ZJazyjW(* zl0P377tD`IB!p+0QFQIZ;;61onPZ3l^8gL0hvetn(B_P^SygYF>)%vxT#g&+;))7{D zfAMmy`E5mKXgwP$GUIf zzdWS0E^cXUjySKUi;jnR6C?W?@e?9DBf}FOu0B$NAx}ldH%}oI8$U6$RrZpx)^v8p zBtJ$4Bu&J5HAd`z6V+}rd~`Q&pTFTsIgD)0rn$ekpcZBo4FQPi=h~V3x(-!UMBxuH z@oOSCA{OXl$#xfx57v7$ncWi!lIGwDXvv$YWolrX-2S3Ttm?qKw?K-@`tCp6>^xpc zK^Iw3*3crF9oFY==~nM^aG}!Y)}6J=ESfKWm(& zG)O051ph4^0v$`p;UHpgTXJ>Qx!L9D(>)pt(HA<~Ek_H-W@Ng$GBQ$*e}D1ICZzzs z%Gl$LFu^QX1)4X$e)@q{6~HcuxT{G_e!py;KDYhkAHL6=Qbat|>UDT!4Z+k-2U6{k z)XzZV0sr=gxj z9%Czzb!C2fD_DK5nxNb~dm+Laa%YFO+_tB(rt14pQhUw8ih@B6 zyyOf^vUmZx!m_Z%_k(enRkTj62r}c#|4zv~e15_@rT+M7 zF)!O|@mOjfAY|BP@zU{!XEoxkh_@;;e(24_&`s>P zX!=#LP8|%f_iax!Q#o-%4Uz%9PWPGo*J6i;kCgKvkWk?|J;7r)5{X`og!~y84%LAz zR>o?YbC#pUw3i^&sDm~pQbX4m3D!IL@F!PT_ilz=nc(h+f3Ch+)p;Xb|6UE3)4__I zJJ9e(P9kFoa5-|RmpNpnfw;l$BJYiLTc)AO-O>l?8+?!rRG;|F@?iI0G+}+{ZnW4z$Smf$hR+rU6v(Ic#bS$kA{B8<2_I6U*T@L%yJV964 zio!P&acT8RznFTI7A!pf(Vm>NI5gMpLSm&*Zn06Xj-=~9x}bZ@^aWOFWJ4X~@T~@_ zS5G(cp^3=lKaN@xyWgO>!i?eJNE3((#HfP?FY>2q8J|wjDU^1OzZ>c;F-Cx_!ttjk zObxiNzDv1NWe1NsUtAZwjhgyYi@5%g?4NCOV2{i2Lw~)skgLx&?^v1?5PFM*QtPK^ zvs|0G!mQ28fS$x8MGWlQr_Ecws~2rEl8SF~!py)kC005DqHuatmDrt0oL%1ON$LQw zBsl|vf0t>UNL#pD##lm+eajB?aw!)7oNzGHLlW4Ry6~NuL?O~CzS^6Om}eB>egEV2 zW_1zp;;43LyzN>%Q~$Czg|8a%jQGR=*YJR976#8qDDDL)p}7)iDTz<|ZebaFeHBfg zV+A<)`|rglaz#sgdkf7}U_v5_0Dh@LO@BwM?IWiH8LUM%hDcZ{09-^unl&kB2ievD z6~DVI(2~!9bYJE8iLJ{gp*w3c_+^<=_`!nkF?p>YYXrVp5+pVkYYX{K6xBp8v{1&b zC?)MRRR^K`iF@SQ{snNhW;O8l2Ctnv6yUtm)gdhea=eAA0E23aKC$H9_XK^}ro1~9 zMECI9MmSmnoOCZolA70^d+hoeQ6sn*GMyahaa3#@UGu{&xe~n;KlX>3&XgNZMPBne z*gg2EJfu6!^+>w-3W9ZQPoSm4#eqBooC}*0d@}#HN5kU><(g)tS=o!$S`}7^B z%@z7(@TrJG?S!H z>s;cAP}LNe>dv$Z(0lFG-t+*eppSvg5Im}Kt~cgSx$lTidh;~Ru+ata#ciC%%@2Eb zKUrH0Wx5rgALb!a5{eVhs9;kJ z{5S4HOUiq|C1{{$yCeCh{#ZwJG_~BE5)3}A^#5r3>aZxk=WS9#N*Vzvk(5@DrCYjF zQgSH~Sh|!@x)E@Zlx}v3B?Lr3LSl(sSj3=tKuQDzevhB;`(D@c@9uTxoH;Z1%$a-U z=@Hj53N8KnVCI{`IopScYI9V?uAQx8bQ%@@z31ODpLa_C!E=FK&L-8)3W4Fc*q16; zt6p>@9X295;C6v`w39f+_76+In)1!+&}Yu^SsgW91`{@Yi|pDS!)0q z(I-p%L8~Zj!?2e4l2NI%!x~zdr|7rr9kjDM9!OKojmXlLl}LhW%8vzB2-BycZ4pba z{F{QuHzqoZ>OcePPV>6mXZcm2ug5a1}5pj-aH?@57GSV-VYXi%B_-b2vmYg9^!kTy^?2X$~5 z`aJAVLO|xAL9d}fsZpE`pwrp_`zi%-zRl(Q6?FS01$v1q`+Th_!~(dd3KmM=!h>s2 z@99tP&s4!K=bf>$Mv&;O^wMytnni=1ndA?m1~-JV(^LMrVx;_Y$if`dEdv`;4lDAo z-nacc5-N4mp!$UrQ4PCxkw?Mz$zxf12;H3i!bs+ReH&JMyiZ=7gLMdyN{iYP@f^FT z5^By)_PSm4@oaz7%VIJ8hpp`vIffN(lQKtD0o+IcqeMBGgwpgTZ71o!+QPS+e%ag}6{pb7 zVOO*Vyeqn44Gdh)j%}_`vQrh+C%*uJ`4{@kUuIVb)((`)v8TqRa2&f z@JAxANz9DX!OTf1miM5_aKFWs`vAXU@8u77MAkX#X`ISKPj2p-42E(T>Co;vG;d(# za}E38cqP_WG%YMtI&3|1*+zEGx`+0|Y)4l|2gR>oe?Pwp1K*~k^LV5t18wkq8O1)e zphD_TNzX!VIi3Dpm-w~u#V)3|c;D9P*!KWL*S3`uk)0&UU7-D+Z;G3+rbgxKV@{0< zKihr?Q}3R>pAal*awn&hM0FD&ni5Lr*H0i98-Q!OwBOWvBLF}TYUVb(m&*qet8w#; zSL+~0v*`Z)1=>;SmBww0YTa4AyK?dv{h7Q^t>W3=sh%rq^2zOkiHE>u5 zqcA``Wqh0Az2NSGa$Dd2C0MMU$P#~+a31f~*vo?cEX~=OQce>cYUJeFV zU4YV(wJ>9S;s=bcmILwB5{Ps~*xb0h zH)kX#+QumE;%H9`0(hoP`Fp|cYW27x*Iwy+!GEZ4)V_yR1(w6Q(w&z4pXm05HqbWk zwa(=7d%Zp-bMf&i2jO8GmZb`&nStFpB#RNzglhIfc1;3z$v{Ft-E#)wLYy&kUO@$w z97NgzUzh}hwP6H3PSmd~*btCeD3dxsx^VJDzI752yB2D-_E@q|6Va+WNGrgltIiy6 zH08rb6v|#7q5@@Vj2eIrcatM7#-Z(PvWeVc;CfGq%&mb*Lx6M`a~Pm8-^y;`l2a)4 z6j8Phnl(qXej&V?LQh!}(3MPcM-0j<+MnK4zYo$HK*fCnZS5tb?*Dh%c=)xpa+pcX z`%xIW7+cK)$!~p9-2x&{bM6fKa#-hIZ}cSpn|3IlF?Q#;VQw!Ln_~uvKYLlrpKH!6 zS2s8Ii{@V>;D=7-1oii=4ML~G_zs4QOSt;`n!ySmr70?_6Ptg-NG#(8C!$a^3Tyyi zW$Tke*Fw?SMquSyZ&vF&F!)cLVW@N(*84{+#5e2?!rvYK{ca7sq6{{phOm*=J$?`a z)$DcCB45gn-G_tG>}%;QGboOHs#`1gw!Y|Q%d=aMI*#X<<7pVaKMwh&@A%pc=#+`VO)dS-9actWe zh)qB+m`c~;k67aFIU3om1H*&t+#CsSi_%ZvBg@~sJ|9wJ$gGqAdo9>?z&VYan0#gJ zB$JPC5q!1y87<2L=F35V4joSZ7X|;@AQp9cMADoO#KUUmVGVpldm)RyO!AOmZnBs` zpQswHLUD6#@@~6iZ2p1|Q#E{KCwW)23YKIrA^`@xvu=p6e?iex1cV1Mo6^cq4Nrj7 zz+Hs$b@ShQ>d-$L`&@W^(#X0mMg!*PvmYzEkUG+*Y5^1ykeZ|lfglYk<@$>_bEHkM zO76eo$FIft)2U4)B{(8(y4w@=LwTKlB-gb98Ca`VdQdmA+2?`i$${iu$Pe6&0yvGJ zXX%2#Y_S1oneyooWzXOvMp?tko6*(iG2t=?FvK)RIXvizbCdytU`UJX1V)Za=Xrvw zTiusA{Vt?bc}sHL!Q|p1&7);qV~F-3xg)dYn~b>!Ey0ANMtp+h4&Y_{7uB;L9XqHu zYw4ZGl!)F0q4?&FDVx|waXk(QG?k*(H}`gbTZ2&Axyk49F1(bj4og+f-h;-vx!I94 zd8v9gJRZ&kW;o)_A>cDHRFf~n9L4mXHdy$Wddf@WaN=<*Of@f4l(C-r%p7oJ7Qc}n46IgSgzI;S)Yxh>|MvAq(CtqF6m-P;B})Qkh6571WyN!;v@IQ# zP5lp}F67D0QF$c)6g`iHLI;3tuwpI9ErjkdrN;ka9|)k{lY~1-?tZ;?Fp;ir)V)w( zf5QRZO}vW8)0Lcwdx);WB8EZbEcD)2le3HT_&==(C%JA*KE3V=^O#4d)=6!35Pu)f z@KII6y~n_$tlRBevFvhLaxRM5kKwzJmrnk{{ibc3uTuyqOuir`)zwld3_!bZKkwpt z7vAqvHqtdLoqI^Z*TY)j@=T|x={=;=?dea3%y$DiHucYr7|V=a>fe1RN8A!i^ntdx z``m;md1!XI@q@mszw4ft?Ch5QrIRXynX}tg<$i7B_FOewjeAbNhP{@XbA#(};NZ7I zw4|uAOf4I~B)v*y8MwKg2VlsWD+IvmB3VqIFnpTv8k= z{40Ewx2%Ac1>s*v%R<*@R{VxlDZg#y%+2#z!UOyk+7P2qmRI9KNwl$w9+F~jvgYy0 zzZC1BFDORVSrB70{GZvPxvr+W&#lmVS3hCLkE(Ge#;EzmhJY@8xBbf8imgP!D|GeY zH(Y`;aGZq|kX$q6(J51nBevB<6!vl)Ha8jocWJ9(#(?1*9vh#*YysaR8fn{hn)bGX zZ+vg00|!*4t7j;lc}x{It1g`Xxy4cnqli+EJU-BzX~oL(?dfRUy>7z}%_;0}m+NUW zdsxhMVtxl&v2`^R47#(M6EAj>qEr_Ols?RMktq?`G7t)H-6p9OSxe}#IAKQ=HXM92 z)7$R2b=c*3o6!I2s0w$v01eXfX@3H3WvRwh=Btod;buR^M)PixdwD)j}F zAyqi6xjIXn1cSL|VrAm;Zdl0F8?_qv&%hd7jrR+Rk@Iq?KlqVPIklVJ_12LtQv-6J zE*w-|_T21y-lTI&Z@jcYyNTlg)FNAHD}+~HrpSmQt!L%F{|$;k3;5s@vQ@(kyVW|H(_Qo}$a zt&S6xX#X-mtN1%I8T(xp808HK*8U{VG_<^0lX-uknvq&CTRS@upvH}*q)Wk zr?SXxXXc$LZ-Q!cZK(qIo^*L$S31&A4JOAL+tB+ach-h5jUnf7ZG=av_A?M z{)`WD{{qcZlR-z1CPhnfvZF=xQ$BtC*0f4R?&gTRwQiQ$Wb3j%{p1&IRglBkfKI_X z1E5z9Y{gf}YCGG|;5v`c2*FhQSQV6R*Yq%2VS@HW<_;*Va?q2;+2YW4E<_=D{)HI0 zB@e4`Vb!oky4R+VYM2tsacyQJUZ4LqQh)YtEsq%K!b|(LXR(!cZ|wwU!U9?DQPgge zm_yq2jK7M*=r|~n6s%-4q{xgyul(GY!?HbgAd`s}XOf^JJsI#DD7z_>q`DtQHT3{5 z@tB!4b<~DLX&@_fFL+|Q|0Y)k)FOb(a@kZ|bunjTTWb4{6)-~@NcqR?+k1+zZE}QX zV%22rqlp*{JItHZgyWG zAkb{F5ZZ_8F0Xo9u~WleWJpxw?TbX#Q;{S`7~YxF52=9iWoRL?pc@n=)j!j3hWQtk zHuRIns}eL3-&8}3XnrC=sH(gSi{I3=K&_UJDwi{`CfUDs|BmOf|B{sN2I&T~Vm0oL zOQA~B&d`{$O|+Kry_FNC?6z4g+U9TWWp*;tAYnK~JY zk4HIaF&deB8`2@j6PjmJxIK+B^%v7yB_D(SV>lSx>j#UoUogf0o0;X%QN?Y z)X#JE1H5kQ+cDJ-{4VxwqF+ng`-20DU8?BRJS`4_@r$}$o^=CmXu&fqvwnv?f+d|T z-L!M?QTJ7)5$fXN&6O4a!a&M6`g3ER>cWY(lk-fpK0?a76=$uo(KZ&uF@mKZYS99O zjZxIUKdn&sNW*Iej^7W?51Hy7Sj7Sg2KI355@mS^ZIY4vr+CuQg>z}Oqo=oM!o)o)T%o-ME32gc%Yc5#WV-r`sPsVg4Oknk5 zAg_6MwGC73yY*kS6n0ttz9BQQ{FyNPR%q2$;Mp&_pst5{GXtB4?=*nkbPUJ(~>I&C!k&xt&*xApl+<3b-d7~f!$+D@>@aVn-gJEWh>1~6n#*ReQb9R+AjJoGIg9KvZbPR zcxBW`Lfm+7Xi@A5fs38<98Ka%65ocs&)%*&>RG&w!e1LGWzX}!nu;k{;?v_0QmyDhvC1@RM3doNRn8bp;#BB4io}kq1 zoj6l7)7uQosXKe1!2e{f#foQV;QwZv^SSHKM;7+PlSx0Ebmn*m0Xwr4zgc;$ik_6$ z1T1s9OJnQQYS@!)yT*RO<|g~-STGLHASJLq5np}H6iOB=m#3bddKUL1tc z*;@PshL9z5`piDRX1Mlp&1X~6l>k9{gIhkQmx9i`|ABzJQ4KKl(KqfSbo+HMUPX$m zY0ys;OUDmSax7r$Q~jrxd3IDeGoXAS51`V&KF#?AK#X{F$gGSZnJAM*{n_0K>o8-; z(u&|qZ1rc|b}-&s@HD!Q!oA8GiTyII*MS27fMo6HV(V0-EFE+*k3q|4ajguz^?8u& ztZ7mOH<;*7;T*YeV`%YF>}4>x0^2YLC&v8R1WlwCBFqe|USfKSR6M&Y=Ig z!D2OmTqx*mi%;1V9y2%HIke|cYso=_3u|UGU|_+VnDXAJr=v4%CjM*+uKU05bQ|4J zg=PC#@+G?EYmAl}tA6N#E|6Tt>>OzTmChZa^&t81R&B7aP%Zu6FHS$BQ;nPPZ9h7p z_z*UkSiQ#ioiW6N*+89JTb7sIT{v{@*bR|HcpYA&a@Sj;AfXH8V)? zLZT*ND zF$O@>2!3`vVeyi?=;iCPkA1sM^8Y|+qdpLcf>gshGO_pbq+enuM4~ziY@yhSo_SZv zoMj(Wh$(8R8p)UhY&y--b@{X-xzYMu2-bF`P6oJi>%2bq+}?NP!_p^Oh>P5&;T@jc zt-!diu_>8CSMs^jg?Y&%(B^vOZAS)p-CsCV4%?d zzSnACS8g^0t3*qGUYb)gZZ+`OstBFhp#b?!iFO$w_>MR}BJ6c8$bi3<;ID(ue2<`7@S_hG(2{qoB;12jAgyS|a_zQ({_ zd=zsqGQn~L=Red>$j^sU5t#UrB{11LkaBjTyScgg0u7euuiU?Rt*Fl zKX^n-CJ+##jvhF}z5sd@zgn^EJ@`CwR!fsYw`Wk#ABYMb6n~Lx)w*-OY$KD!WCY=< zF0g&An7;8x@-N|_q@_7`t-M&c=s&He2x}$;69e!W^|4uMsXepPP zX+^=Lw-tL5ri|~ui}Y{5TVXT4<*A^XO5JqJd!}#0YL_J;$A|s)WkgP{ za#t?fj_S4Ap?n$aBII>n`SE9IuxTB~+}_xAs@>^9+oFE>wfFr8C9nVlFh)&Z+1j2f zc#4hVnAH{B;JEn&nP)PW7fU$sd~YhP4(x z8Z8{ageHEokv~m7vT>pEHyJKn1?#)Mhu%vP?biS4;!A1`Jr%M&W;I5wrDx2o7!m1L z!Clf=Fk67`Y@SmL++|5Mr7q(0$aWd%(1Ihv{_`MYpI@Ns`MXDd@JRpon~%L^0A0w! zlFgJxZFagJL`V|tGuAR0qFxMhGKMuiFnlP!EV$kAmg6U~ zs(P!MzoS$kqSO%^GU3Eo98}>{*KhW)4bf`cA&v;ikoe?_S2b1DpIc6+PEh64tERT5 zCsfRq*!}I5p_+-qUUJlYus<~D^df4H3>+}|7VUGk(fh}V6Cn;LanxWaWRSKqgEmyT19Mw%kp#sv&@l}9ba{=D#GT6`du zc7w70Nhn{&UrDG%{w7b;h=2{X9sybaHgPA?mlUx>%jtztsj|fjI4LwiUEualKMJr5 zDX8pzdg*-Mwu60c6q;LKFI`x@h<|IxTGhi3bzyccjy$#a}?%1*278)Y;;P zJO~mbsUwT#XP@)oy&;yyUBta{kHSZ|gRslZ)r|9p5NL--lWJ{w(UVLuzt8Tl*cT_o zhzZQli2W&sJ)IQ~F7l&(RY^PsR9=0Usz)OvHmnvZL`eA`< zR+H7dB@d*BH=Ft;1{{h=Ujmx{tdhtV%yWCKpoKO?wLfn9LcZV31hmflS*pT`A909? z+(`un zJ1gT7Su3g}U{}*gU^#WFzOdpdX%XM0)5`O=IlQJaxh_;kHwTROa_bj!H%Sq!L2ZS! z?-a+#t-zH_e@=XqRr$uY==wEw?Sc;>BsiliOflT?sx^T${+rCDswp#&vCFh-db_Ip@d zbf`rhtE(XWW5kBI7+#iP0ldEZTEHQU`0i-oQp=yKJ;lBh7AySvHdgeWpC{^iTEM;1 zeId68Il4Wvi=20DWsz(l?}YO2{k#->%qC2}S5kr6`m>#_zt0(=X#kO{Rs!wrq``b1NAe1;sU;IwBkF)!($= z+%@prdXoCbX#;g{3E>yuWoW9m)h6|hMEvwt8?RcPGIvHdSUKe^Cq6q$Zu>NT`IZa4 z8Ic+TBhc?V=|ZnOwHHgA8{wvLxeZj~LN4esGT3kNrQ9bG_Iy-mJ3((dTaW0$)V#!E z3Qf3%NG6bhfkMan2rti0dKOG0b$Sn6`#&69`$X=cpoqKZtD~|2&Tn6V;$}JR%xHX# z%#MbH89iFMksZP_SNNwe8J`;(JYs~w;zv8G@YoCP?ST&!kKk5aRF>&?6;?ZmpKoj5 z&15oz4CrhxK1fgSkkDjteYNpH5RWmCK9vk}mu$8vnvT)xBx)BIlkmiXe%NosK7*|I zWUq4&QU!-^;fZiBDmpwUd-9>@J3Ph>&vZIxG9`Zd+R!kCo1rFi;)WIjaXEq>ZSIJ- zDSx`=QM}t^0E0z-J%!Op;IIC88}v2&`WVyG6L$8v(BrgeO5Y{O!ZvR|Ur5jD?b_13 zKcI3L2NO?>y`CIt$>M(;%TMM{GrR_et>w*7-L#6OYq5z#R&F_^@G%9XMx15Qz`9}yp@%Qd&jL=e0r_Er_fjK98-2Rbo6`PfQWs><} zd16-DXMVIF`3M;0JEe01S^$G;2s5YCTHsD9&o!@Oc-qMQC z&YRdFw>*K7jcizXbkYD9Q3ZQO^KK?->r5(d`4dOm#~umQxO6UEKnW5{<6hbGXKz^3 zHwd|A0POOx{{Yy5R4j5X0XWo0c3-Gb8?(7$t9K6N_uVbR-n}?gF}nMS{`n_E)lag+ zk1f@-V)Bg1*|!hVW_+SjjX0vfagY)5gS88}go??diy^{F;)_*24m%8%dc)7~+s1=xH&A3ClILSI8$_Bih@u z=rt+*B?0xhXXs=-$|He>0I=Jl#IEHIcg}4)!-rv6A{98Vhe2y=FyW6*icNu-k4?CQtEX=7zLrN`?R*dYZ;`g#x`6p`?T}Mo z3tF^1cmXCdn~F>3O`Ms`P4Sw@u)G_eT~!8m)PIz5*Et*PWUa&yXr@PqEs-z9rDWo= z+S?!;yMm`{jT3vbRG`e1_9)By3ZqERIan5^=k@P{fNi#;CyS3N*mv4T&gnDVxQFaC zQGR9ufDG>%+|Wf=3%A(7RcZ-C%4ozWq1cPC)jcpTgNg+G#JavY}RX+=EUF(F-fPXC(rCCzm3lLsF=vuXWlC3?S(tgE#C0JX&gRWb~_ z{T@aNZl<7T>(1xPt>^V^CQDn7FqpcjR0#IK-3!V=uppw5s?2jcO?TFG_l=2`u!^(Z zuO2|~a+*3CM%uPCdNtB^aip?D5m37za=CRA?36UMXB-2wW?5oyxCxvyF@4!^@!}IF zw}54P@EN_mX{3^#KGw!6P08Yx0}~+4IN&-{L5W;`B5%$5Z&4eA3Z9hpw=5fHe4z&6%5&qMM!~K=L8xaP$xw!XyZ;HtM5MTRhwCyAIQfs!o*z{h^NVa=DLO1fjlS(dSbRd;@(pa4F=)8ee78JiL6U8}3uY1MW!VYZ~-Z%^k@ z($OoC?x05tAz@61CtNnG*r9N5qbKzEtC?pq(Ng7KncVqu-nZCSS`x|0YeMStUpOQ5 zW=q%uAB&;oN$&^boyQ~yebgCXHm)A=R?;R1WJqQlXTqdJ#~l?UhXUuOqU;(KvGSpR zHm3(0_defmq1NDOUi6W8Bv+23eK}h4Yr}`^^=k|K01`r3b6sHs9jjmwuGddB7g?xV zRU{5H&{P0LTAv^a38;Dv2rus%_9Ug9vUhW(XZ$oO^zuBV!)|@an;yu$|J3SMjA~8Q zqquz`s^kQl2V4*}`tkR5pWOuTPz^PquN*N@GnyA)T5HJb9<(J9GX1(4W@R=;%GR7` zG5+M7<~wtH9VLJCS9+ngBMCoE9EowUk1(FT)fzGJtL5&`jNM~q*(S!=SWhP6r+>49 zw<6IExSO(?zYqLt+%=KxCAe3v&ct=>+DrQBxCtBSAYv?Fpq6_Vsj~~LbogChRt}og zP@~hg@a@_)fB$h0oL@wi{&zS(!|SHD3g+ge=bgjj#swG@x4xd7%rKDm?q38I1_72d zm9RCK9o;Gk+v+X6u3uN`H&#bK_o--$@sng_{v6aqHO;jSjE!ct7S12pL_p6vKXnu7 z^w@QTGQ4WldjyS}prC6DlT-RfUMW~MTtI*d3NI;(VDkwiMAG0`(8Qr` zF4{opwUV@O@GFg2$` zE`#nCc#o|dEDJP%eizcQI5Q&B);NajSFIHcKOaB2$hGHN<(@9k-*J5N#mjuy9G)`d zFkBNcepoU)srZKsgN!#cA9^-wqU!E9Ep}suNNc8Ko!~?k+kB58u(=sM%&mPJmI@QW zC3FoRQ2}fz<2{mXI}MTTslL@VBSO%&T*j79cn)!f#$C6ukIY^*JvWpb^BpW_;r3*& zJaj}BO-K>4z1dhdb$$W!L5d_VwGIB{+>a_Cc$0a{V=EK@&s#7l5GuVE-@g)>uOB&3LRm6hhmC`-;Wc`9|)XX#72 znXz#LZp*;e+BRZEu{HE0Y&u}~6b>I&n-cYIcWe`~Ubt^X#P}>YWLx}?Rjh~SGof!s z4-;)Tn$Egg9NO-c*aG-tcy)NCpJO@jgtf%S==u_AZZE~ay1nQu^K(0A8)Dv2-V+*o zaxIRHi-mQiSZhoZV;SD;yjSba@31y2+q&_m%d=gERYaERhYzO*7K-o%6{W`A&6R6l zT+I#-?9=@et*|OdlwC#f?Bf~%vxqU0p7H_tjgOsKKTSS}lihSQ{}!l;(iBzTlV>C` zW(&VK{~E>X>b##E>n;6gSL)GwGEDzO|HNf~G*!7wIO6gzz*!_(Re)ltxIp7%)dx(~CI2jaKPLsy!Pmk~eGKMZ3f+awpJs7maS z)*0Y-Y!t&^iVNj24nQeFrFu9WB|nUi0Rzh#D6@6L zUhW;-Y}Wj}I%j|N%q$$c$AVk26NB6DyLix#o9_U7-;@`bwI?>Z;!b)O_JVHH)04Zz!Y)$_ z?LFJ;JXRjC+1y&jQ}<@kAeH2BDzJI=6v9s@Dyb%s+ki`+5~*jx`{F9aEs`{aER|ZD z=eGB{iA9LhMr%sS7vErI_SC_<6=9zWd+ukK=!`?CPGdt}Qvq1P0(dZJNhbRx#RIBY zv^qB(%0A;|q&OAfd01{r@(b890Ni&gUdlXNUe*?5MUec7A$qh!0mS2_nXJ=c50svK zkP~W;W=3ujlu0y5V_#p=*F9CktX*$mI)fAUCN-wXbC~=Cl)ZzO2K$WVt(=;~$2z@l4~#~H7gHSDZu}9;@Ry5) z;djf$%vyhpd*+$?jADThihSUn_dXE6bD{z#TfwVQBNYv>lfU7j%BiUeed)FI&=v?1|lMIZn z0|6-*m|jdoDQ_!AUHd?6QN3=UU0Q+6_I;^2abg`hMEu#K#{7Lq{wJiMNqA&E7G}Aw zyu~A2%jr3MEM)VkRL78s$$glHgqJcJLyub}ejhTSeKDwz;?#xJnEphnA3j#FrDJ8Y z_+qZ@y||~rgN?^qGXJ%%OtLdu`XrT zG@9{GbYv8B?H6GYs`reXV$O$MhsMLG6(PYVC%9?&bVLhq7aQ0M=MR1E`^=Mj-FE2X zPV92$UR9!eK}L={U&y}Jt0{dEfWXBjPd6((Cy27wBxULp!JlV7!%9-psyqbk8?($Gf)(^QKc>*M z*vP?IkHes!B-WKS$LqbVJ@e?Tm!Qf-vHAL93+{S*#$geio+LaAg%2&?r4z4rB|KQ5 zQmv1#_c*lYBj&u;ogG*5Hk*YC6VzG%-TJigpBLitV;f7vd%Aa5Ygk<5j^5zt{dDf( z*LXS)pOw#cQkG1K(}mo~`g4G`M>UQ6Ia$erp_)+)-M8@}XU0bltGGsjcq_inh z;=W~_k3vj59YlHyeaffkYBZI2OKqa{wg|$Q zo&7K}z7DV$s^52cd9=7l+RdVH?w^2ZFF&)=Q8CJ6so4-j%3u>F0x>I&Nk-+)f1 zU5}3wid%S&ljAG9J3%r;k+VLPLB>s3aRv)i)=rqJTXmluPiJ8wT3?9C&sysJ0@FOr zq=Jf`_`|<}u_98xH(EE+dRYav4r0(EVH*;XOz)@R3}cm7Lu|&2C2mj_S6Z}4YciXB z$ocoP7~s-tbCAIh1rBZ#+F4qsW)6*N$oF`Smj9*avWMoE|G|X0Y z68zLnS0Q)RcsMu5pS%RN!7wvNWkJGzM-92R?q-+6cxy(mlMSpr_vfGcMoudEoc_Rc z{Q8Sd72mVYq@X?wJDEUeUZ0(8j{jkvn}|nuGCzF-&W(I!Pt_6=V}io5KZWfq1^*>u z%$#Et5JM)>csXt7kVhy|5C|{~!8mz)wE&TMXsE`+P5kn7j;PGipD{E=V^9kZOJE#n z32C!}S6fO}%Rdg?MBEJcOZEwNCRP9Fis*Qh z@5Nk0OA~e)xj1dmiV=pKRpT&aTf$a_Ju9&fT3NG>xw^`h_cp#;_(M+*O6qyXW5Kb* z`9*Vk2{<@T{~fvkm08!ebo2&$dHNY-zMCpDn$ioHLRdsfv2n8XW$|{!AD`62`V*c2 zGt$tF5SwCpv-C9tOgC^Y6*+{>Pn>A!x*aEFTzV1XH7_nub~24ep-z zF&+WS6QR=V(1cxg1W&6D(g?uHaCo9c5_$RY>S2Nb;luV*=1f1T>;g%?=gzvLc}K!E z9_G@{r8+_IlsoERx@L2Glb5uGLZ|xoHu)kuBe}xZnEcgU{`LcP`Rvs%QfWeh&S;vhSE0U`-5uS$Axr+hBvR^aB2ewcnals)}eg+ssfbW2;>ZDtS5O>gYr_!P`$ zOBtbwfztmYDS%TpWKo5Mg{+Tfh8ef`cIcN7*5$DJdoO${NA^X8svv=Ubvo6>_v6eV ziF>^@ie7(2j$Pd%L@8fL5q~+APyTf{1j{jp#LrE#`MN=-d=5<@>`VE}b>UYJ@BLuS z!M`0ds1vq+N?m39katOi1?0YlKgc-^d)4Xzl9eTpCG|dZ{R&%l1@C zkTsc;bEk-d{TKAw(dDnP36#Txk039h3pb6oI(t={;UFapH%J}+?k-uE`uCbqdmEzbe9@iRhaknQIPg% zZzm2k>yusc4erBU8HgT9+1Xir_ua|g)zt5>?34>OGUX+YUxIo=MV+csv-FZ=|EUkA ze_G1CY%_g6&>Z3p(r4bC&{=!s725jeLyg^QXDMYAh=XXeDU>(M4Dhm_?JzHG$+svA z{#ZP%*e}Ko3DmGF{YR}+jTn40>6IJNlbaAc{BqPB@*Tqg_Eu>68KgSrTz^*NJzN`6 z&wfdCvIrjqCT)P!J72>*yVm}QvC3WDmu$Ck#d@YmY*Xxa!`V3scSNy=)>D{yRtZ#>mIvs2oNI19l zD}C5o!P!NxI`w(&o%E*dZo!Ryy8mDwmV9_UJ0WP!fJ(f3)J24@S&4`@3VbaEG{FV9c_3lfH+w;qITLRP@*%nRa!te z_i9p}s7a>|X2Qx^IE5vQLONFx+X(jkA-`(&0N%IiC1D;^7Dkpm!nn4v{+(F~UndBO z)?E8zzdPg?7_g1r+G)ZH9Dlyz8DXFt9B!jS^kziVy`6#m)m3%ZcorXBD2@*CNH+Id z-_@waS(VDtPP1pQe?dTg%|0^zku3k4P@5STk9^>SEnl+v3;QJM|-y60%ly`Nw+s+2af{JDSJQbGYeO)kTh;C@YUam`f zA(zClu5Dwpf&@+_>91sJByQT>VTnlps6DxT773;I9GFD6ilAUnI>D)2tD%AK|gNdr6ERAgZEE+wpJ|8o`8tic6 zw+uyR+ItuqCl{-6C+fbm62o@JnX33XK9MQ811PkGecPUk2lR_P>R_UF*IV3W?6bJ$ zeU6fGTH=Aj1mU2uuv7WKV8@v02D0~@4Nqrry_KUpsC`UCBRf{{V(%*NU4=|yy7L4i@u8s_VNQT!I*0uL%3-cE5^JT z=*{N?Cqa-=7%QI8Ygny+R>P|2Jc@q7U(;QuGSW?IEY!R+qx{n%hoirkR#D@h=+E2y z|6J3V&nK7>_B}m0T`JIM`2^J0TVwegNP=$ksrUZn3C0Vg(MGt3Vyb)`~r&X5zHYv^M|g z$;R8|SaGa=n~B(`n7l6?CT*=RiI4_s9-C)|VnR7f4sm5|+hxkAJBImw8n1=fOz*U{ ze2(~P`m6?R_MfB)FeEkchtDcKuO6ku$Gv!<3~@yoJ)wxUOM=Pr>bhE2;~PPbO_WC+ z2!Z(g*m>%i8-Rv_10!et7Cq2Wp94iv13s-2sS11;jLpVIN^%z3(jnHh)AL?{xj@+5fv~K?I}TYm~$UQek{ivTYZ2 zaC_;Tf^pQ+);U+1?U*U#hi_OtEJU1*>XKfAvE6+Gl*Wz`Qcdujqn9$1CffEBC6*-_ zrlrSO7gqHo77&*65IFWEA&1LGAhy8?!vvd;@83iiixpODPWea~$B-~%7~7I0G}?^C zutTh1Ta(CoLNS}RF@Fun9OH3|I~2j{JT0P%VsdZ5jgI+>Vd0N1TA8Sy$cdd!ehDdS z?&KLx<>31W>5yt~`xv|+{46N=>q;CZF3w5=(z2*WAW+1Wwrdg#OR%#EKAW?@oZV>m z{c6`2bxq~jql)rvm2G>9Flw$x-?fHq>@;vlJ!yX`g;i)Xp?P3`XHLViFhjm<@csoe zF}Vi2dOkbEg?jFl&31)IkFW+oy;StTVAF0~WCe{WEv!bpsH8>?sZ9b(I=4Ng?`$VG z&W#)}i*$EU?Wk61q!_eT-NFmOt9+0AyC2zsflio(=+}<${LMWIaFhXGTjBMYTr)e%uKtuMiiadk z#8xKZA?1R@)QJ0D%JgBJak_C@U_6sK#U>?%8gD$}l z?akjIAio<3U+7pOK6kt$#fb9d#^QHzsNxshOo*tFe^r{9N^*QjYHmnR_~Fir@_2P? zt8DJ$dgPR_u_96OjH*+mx=1mx$M(HVboH!73aqJyTdequz|pQ;WHp%{u5l~pkE}!J z@kF>HoniD^!f^`T7Q+_5iYWE14UO64oHrgui?`G`i(Pte|0Ivj(xGT|GCi4d|LGRe zJ(erHPKr5gj6D97CfetBHeSv2F6#38_vQa%>aG8xdY|`kI;0d3l#uR{kXpLC8!4%! zrIwTs0Ridm2I*RIX{5VhVF~G2I;Fn*e7`$`lN;jfCYxej(Nso!f$0U{}qJkJIHL$ z-aid?HJ(-qBm6wD44ly`D-kV?RIY@)iy1C zDFB`kJ@E6GbG^lN>zfpWw-h1g@>ez{Kh0&eZjj~2UuxbD@8O(hRsf#$Y%{U;*r}7( z`6eNrIHSkO#T^4fbPva|A67ek_inzKPM#!QKO7-0gAv$fTXntqb0P^D016yVRnLM# z3cDYRbpZ^}=L9>BU zmcvwjR|?V~c{_sT!qF&splxJdgWoMjJHKCWT}(%P16Z-Y;l=0F>}7ej=DDw_@W1yUwT}ed3lPGEwc~e;UNHD({%Lfa4dZ2!2)L+*2iNHJ{y<}GqueovxktI{!_5GzzE;Mwu;*`+{51W z6=QC<;!hsUhy(%g7e1YlTQ(jM`-!-?07^YktiA6XgoFAai4RO1|b%tFVd zGx&2BXn#X9IM^|NZxa+ydZp$GG&SKS6|3N9Ui|Usb{d6x7Zv~g91eo?(mV{H!6&jx zT0xh5&1#E2Ih3-4ALtS(xdNpe1=Ppn4}3BlZs#@^f%TNCU}Ir*8%VKN>aFO*n6~=M zyg010VdCF*qB>%?wLc8FSf(8g%9d_Qlrpd_If^wgSHei2940k93`5fkU)H-0FhCm-nE7;X~E9U2a|hyG4-}LA`h0fW|pzXZb$J9 zA#2AClP6DJUA|vklt8&EQzw1bFSm^a|L0^+;9|as5ZXspI;40K)LJDj&7e6ng*v4l zjul3lCWLg(lgU%WI>bp*$gho1x@%rv#wvBblL}&J{5hFMq$h5ioK!x)UQN#d71b$M zoP>2?&r}(|s@z`q(>{10Q-?-t^KV6!q8}Qoswlq|X!Nw`XE74%7^XcOhdmsBfrO#ljj>t-X; zDDPtYBH485qu=XW=#**vw!2joaO&B{mo}dz-)s|EI*tof+9&7`DE^y(eWA(`UCB?b zTP#ttkVK-6sidVLi!Wg#NjPdV=c=JSI@1fb=KJ;xpo9y9A^zzbF(i$CTNlGGcOxuv zkSGr5bUhQXgzNUc z+XE)5z(<+}ShXBPEn66TL~GT>4cz0=6|~F1r;c=mhwtm!WrS-qnOUPqm(NTyd*$oq zuvOeV-TnKXK*kAWH#VZ|I_dd;!Bb$c7CHWM&o7C_!P&9*m==Zxa&4vSUwcPd8+DN?9QKUB z0IyVqSS{u(NP_t_qD{d;-+6N(xzTv>qd8zlJ)4HNqC%IjEy>Q(|1 z=M|RiNHED9%@q^}1`X0(`C>rudu<`hHU6W)O?`Q6Z6)8x$0Nyw>pbxc7K{utoHUQp zlNQVdodxfr{Z;JCdh3};PF8ILOUjQn>{h%@`C*N8a&r>M6S%QXXfDTCkcG`TvX5EV zlCO?t>;`NWL#969=*HaH^wL-D3#|k}YoQ0cDg3-hGprwe!C$ZCXs*9UP;PUyQZezT zb!FY?$~Ca5_kb%oo{n6tVj=!dUIUnl+&y?ImrlH4Gfpe;dEnDI+hq1GjM>8^S3KbFo)v@+K#8tJA*65vk-cc+oZyJJVc|)ca<&M*Eif>! z0cUp9=Ay8gwzaA8Lof*z7Ee0@x3+G@{_S_%u05Ph{1f*=L~?0JjlRhbN83hn{r(mb zjRP!+cxjtHki%z#KZ3eQLvtA2m|EQSn{rg)zul=nC@i5Di=yKmeMNi_nthM&P4gABC*%acz08eS}yDb=W&p-JYGU!&!sTUv>?5sS}AG@z*r2H zKkgCMS0f6tUmd|)^TB`3@XMTZ$h(;n$5jO_r%i=M5)M3sd-iqj5(TtyK5`e>v%TLq zCcxc7)n*y56_0xbU592o1P@?{){cQ`i=F*!^z+E4jEA<#rTr`wHSx17KH4apSSF!- z_~v(w^s!}<;!#2O^6{Z@Iv*Be_E>a2Wcqx*qpv1@%j-6jWA1WX=e6YRwY_m}IS3Sp z^f7Hn8;X&#PPIjBj_C`>=lWp8IALr+{}&*l?0eg*+MjCmy@0^mYD9>58TKj)nb@(e7`eo{uAQ$MX;tw6@nKDbzuU zFuu2LMTg(%TYa*xjjXOmLT_}75mRxFjy^fDbpRUTZ}d8-xEUC0R#d=|sH#m3J7UT% zzPEly=IqIfdGM?WmFw@DLuS>m&c4hZDk!m7v@`J5NNfcuuy$>7qNn?EuxCgZ2nTJ1 z>|pl%!m$WYrw-txKOgLgA=d3I~u7uDTK$~fT&RE6HtIv2dB~pwK5n*c{Id)%;k^$ z6lXQ2sj>n+O1wS-qs&3wO`Rm(F!i%ltph>=CViZFd}?gNT^+fyh{&nx#w z9q&`>xCy;gs*r^I{HNoQjkU5@bLs&;nu@WsQqQ4p0=WNc-81d-4w{Zh70*{?!8(r- zh$5N%R7Z@^pG#rpxjD-Z-SHy9hLa4FLt1LvRUB^g;*Zwj+r)X3j?)?DoWrU^D=GM=8W(4gq%Fmccz$VXAPJ++6orq^kHlM8iB+~WzlE3RLGr(QD@%Oo2HI+p>}FyU zhE`=1z?SSQL7J3j*~V4#oEmkGnP?b9+1ZTy$pZ++H){9Z7=nsOFaXj(uZuZ%L>cqc zO}i=j{#fwG_qda#b4$!+US*p4qC$UjFrdA*eJYQVk`$p(eUtb!eab&|vUU4Hlny6D zh^Zs(+MJ;fp?LQPnjB6PemuTzIyla#1hP)HM_z5qspY!aOm+trz1BA@ zr}>ii!$h6Mod|lJCPuE?!^qY#b`}3L;M#FGr;jUZLs^{@9Vef zm7uh0bA6{gld|(Ef%e97Spc6%XFG|4X1^ zwDkiDHi41TEZ?Vuz|0ZxA?B%$Y4Y_-wvgxHReuyF3HIUcp3u+lW1fRCl$PCe98Xc+ z(~14oH$(OPF;gd#sqf(UtIx2IYdI=2+6q|lg8gEsrpMvb$&nr@%}SL+YIsKcC*Cv4 zvU}gHxKO>=zqLbF0GDw}f}$OAbL;y*^}IwQ!awQB5071`p6W;suLWi1ISngg(aT?{ zdRrSj#OsX#gX~$H;k;se?r`dwN{On<)i$4}6MK}#HaE8Xp;uqp-G{5#D%xoy+k9?? zF;Mw<0^c)tSKtY~gFKGb@w);e&;QtO{|eXIMtx_gANfY!0~dSF2rL~J`r32Ci&U}^ zJf}8G)EJU?95u})%HL+eM^fvMeX@!Y!Ij{{Vf}t;{5XBg;c}qu_`YM@l6*deB8Kv3 z9i{P(Ak?7#9n?TR;}yq}G?S+2EGF8M!7)@3u&5>-^7&PWXgXT&IkR2%azJnkZtqZy zbl5=3K}NN2eslO96oI6ua3TP2W+li){sP|2@OR0F?N{EnjqZQl-CF`=4M)%0Fs*?? zueCjLZG{;%6gF|FB8& zVeuhMF_c1bXFD)P4yponW4KWRrI5YZzph;ImPxDI52_6ij{}T+ z7#D~UQPI!ko9xBuYCeYBTgv$2hE^rKf@oL>Pt>!&4ssiJrA5E0QALr=# z7+AGH&1bs7Kh$3m>Gar|&Z|(l&^}+yq>8b~2_Yf}V!D=?i4k zKFsOJ)-%~UWE&br1{$U&|LmyqyFVsGMnfz=Y0_C7B7Mgv6O9pR*tB{>@0tGVcdiJ^ zsKP7{?>qkyT4wZDv0TlW7@314dpcIE-Hrnb1t!89bqD*_o+-Q{0w46y**KVR!oU`! z?4iG#B6o7M~^_X(hVSZ&M7ZXG*^N+c)}Mh6t?t8cPVd zbX@lsgV@EqSDw3*K8LKQ>Mcrbc~#hw73tfI1N4b*{n_|u>fh8afGaVt>cx_jZvm0{ z)`@$u;w;cI!4$253vRzudSAi((rtw9t{GZh#3O$m>^~ZFwGk*!TL^nYh(7coGcf!n z!5VB_&UuNWM4de?8cd77jZ||c8jtIHKh4FCn;ml?zj`Nz< zPadM^N|g{4YTqwB^&cY$<67M5{Uzp(m^S7PFIj%P9mQgw7(Ia1^|o~E-B5F=_G|L` zg4qb&#jE~yzI8dQZ>{6N1J{p7nhGiw(rb0gVOq>KNKhch!FSv)3V{!fZ<~UWRG=3Y zP&cD)rGG}WeX1^K84T7x%H}6`cDNq)dT!nwMb+%&2z>H)w|PaTE4>sQz6bjRke!27BER@oW$Q~92s@-~o{C$C?i zqg!UNo0;OSR*wTx0D_A`5MC1jI8gPcQRCOr10aKH}w5av6>x%m77PMa8y>TD^QigaVi? z`GKvvV-wyXMSTF0gcV7Wb0&@XwQm#4e65<_%tsYA9`oXfDWafhOg=id!DPm0tgzx0 zRCKJ#;{zH{^jyj|H$XUm1MUhNzeCw#ux`{L8# zFdn$FDQD>^F?<*(@G?=CoWCK#Z@{lCE z_H3OW2UO8^TY>t6+h5|aqfjJYeiPK8eAQw-O^DXj>q9;53J*W?t2qH&xT)=b8N;9) z1W`+7BKkP@zkV)lAR5H~z|fRQR{?wTZ-TpT`g=c4RMhF1cEI_^eAr(e)b;z&z&r7m zNAst(j#%>4iXWzs<>W?)Q<$FDlXO=t$Qr<0BMnH$lbrd|l73W*awB+a zZ_ERgwW9=vu)o>rt*U>WjF~38zmSZjjH>Ijcm0~SVinw!H&ssLr|`B(a+A7OO;-@B zjw8~ujjyTMLi?GGv@#<8)jc} zI~pRKw%Ts)7`s<$)(>|$B1wSQI!Q8ewd{vPsLUDByyix>tGY+sMnmLuIK~@aUa7>P z;fm}c?b1@vM-hjjye9iKR>SC|iho);5l1a6d!6??cnN)O!#B}p#ho*}DeX5QA$=qr zEb!ghW`}#M;F}+hUnfNOrZfSxfP7gGL`&I6)=U+xX6|xFd5c9w8AvoStElK$ylUK{ zvn5@8ON#f)DW-ake>>e&Ogkvm8P@KuUXVR^F9R6m?l)i+Eo7LbEG<>o;x4f>k5rB_ zG?NCfMREv*_0;1+!gK;v5zi-J1!ZkqdAtHHP7=7gqZSDWE0n&5dPY{7A=@Ya4gDD0 zy#3%lE{dL!90a{4c}NGX7iLUtT(1=Dsyn@=Mv08%y#MyO3Y+wK`4U=X60oB?68jAv zO}{q;qt5?XxRM}o^bb;yDO-yKrbsA_0C zgGvIfu;5tFc~e+Gej+smaAJb6D7dhkKZ#}a6;qOFRE!Q9W$3fVliSb~sy=M((i~6} zRJC~ND#{yd3|!|#p>bTyUvQANMpD|BZs1Kl*xmxiH-v#wxk=b!RyusQ1^~1aY*R66 zD=f;}^_ir=)b^h~#5ieE@g$wXQjlwp?*(-cW<_8B%!0c7Um6BuPwAjeP7yZ5wUO$CO&6D8vKYA}>`$IB{KjD7=c6>i|mnsF-P*XQ+g z8q?Y)LoP7U+llWOcGt7Qa_IFd&7b$)m~rr`?|s!-=T@B zfnI719UziWMH0wQZOuJQUBikPt;|I63 zNs{xRA7;+z^z!$Rd!83x8x6`+R~Dd}qFLF!?Q4BkEt-hDytwd@mMsg!WyS<1QiI6) zM-VUf?`+HVfE4GBw^hDuLBoc^RP)z48^xj(QkCe|Xy6eTlHM;tM7&|he!2z_^rcyC(~5b^kw-qKW7pIRqkyW?~vzwt=>VU zl!FGB02znIO@#(_1YR(7Soa}xWLdc|4|loolMF!E?$!o*I%X&a`~%qBo+g8sVdrAB zjX&lr;=%$eTYmczIn>Fg3Y1TVYbBY+oBAAWKB=RvIDPZR^gNnj7)$8zF`ZUZD#(s( z*|o(UYO!DG?AJvT!1EA2l3A4$qyrZQRc>L`P>xuW3B0c}EFxElo}S=;vo}TP9zBGd zwZjc9V^!M(9>xb3+9lCu^DEZChV4n)U_3DaRh^m08fU_04$_^bm!gkZWpyR`Yw!tV zv_{{4HeTk1w_PciE+~2Xn=nYS5_1PgORH4tk=`tiXStEzRL$e)1Af2rV#TL){py9X zx~e^Ch}Jsi->Uh4AX62vy^r~hvlq%&mqt@rBFX%fj7w^>z7^NEBPKPPm~-jU01+2? zCV2IFrz%h&0v}SmQ_S#1WF%jKb7B%3oY@`(w-l)6P$`wIsUtO0s^X%rHFEvJsA`n% zd$hS{7I5F+gIo`zbX&0??7x=3ye?cIe)xxht%kx9Al0}q_0oW zpbRBcBEDB=(}hfdPu}6rLX$uyhG{kL1Bvm2v5)Cahe5fL^4snzvokD3ti3gw*sbhj z^NsHDD=n12ZH5O;xS_Io6W7y(K5zq&Hm3G5VZXW(kb~7#p#C#nJ?Bz2nN=(9P|kN~ zWNJ87YmyPtWChPWe^#X)&U5CY&BsHk2a})il)HGZj?c2VcJ06Z8X-bt$!utYPrmIg z-7Hl~&nseSRDqfV1C2(O^4}^X8N4IelS!E6VWIYoxq&s5tXnK%S+X^-nnlwd@8e{0 z0W8D_G)d~ux=h1E1lC z^Xr`tYcXF}oSdDNz<|<(es$)a9v<%nSD%I3ss!tI{QIlyvRF10sd$UiEoAo$que^0 z8wO(=PMX`lS3UkVfEdU*l5wkrsyC^d4N00Gnd^bejc2`|z6KH>cqi*Gm%}r`?!aIfG9X3I)BnwrQF!9aEP;cM+hYFHaTg zIbnJ=!t5EE{`P@aa>Bb2e;)>Ni{ER3#!aQMHxB5w%S667)pYvKmE1i@btn-XpAq=_ zs(W_f9q+qH0{}gD`Z4g0yGGTxWj55ZdR>u!dR={-rLRsUK*&{g6n_5Le*d(;}(%Ay@!9>NL4e9xvsD)iUCJ;W}3 zJ)TfSe2n_(cah|b-ziMf?gmT}FZ+}QFOyeHvH&q{f4X{q*7EahU3kaAnAK#}6?f$; z;Zxyzx+A7U@3M--Z5}KH6yx9uV1__#`vpc1*a2P z^qB3-XW2yD&ft9-DCN#qyw|Jh)DX%K$h)w(FoU$FNH28xCkef=7v^?Qq4-wABJfz? z2dJwpAiKA`;A)r<6lXG!!4!o8Kl>Ex($GL0nN3ec8ABZZ?fk_|-Qq*PjxXV?Wg;&Q zx%kuYq`3FlhWK%|>Mz(r@}2+zv-woRVfx9kXKa#eLRe`~iBfsO>%~H)dWoPLdta1j zcB^zOp5ug-DWI=N3LT$0u6Zye4MAAz*Ft?gwD;6&L3jb4?1S4oJBR8s?ev)w1-5#U z{KK5tuq^j`9oAUZpG1S@_2Yq8LxT_BCM&wdv)s8(#n=5Vqnp=!!>3}FPvnW9su@!! zUSen0q+Kq{gAQt@5XIJXh?pgQ(Iz<|J#Rf)ExS8$7%J9^mk^Z>rvN%N`}(r}@^(f^ z0Qd@~SSIsI>oEFu?9z>ChdnoQVr-1(JdGk8;KgjbWJzFYA}Yc(D#AupXcZ%{?`UCD zO*2N!y!&3uwo=ZL&*#sOmJ%ucq>>agAVbK{8S=S5Xx*J#U)^|&w{v@naKT<~RcMmA zxgEE1>}^n1sl=gQD}S(Pc%rhjr`*87*WE%FWd%QlUs;)(O6a!2ovCouPqG_5irQ*! zbflH?Hn>Sa>FFs;yn?V+yBuXX;NI7=xn%R=&T+;7Vwt3^$pMo#cWc*3?Mae@wIVP= z&6IoR`H$m7vKGd|XJK07t2(-)G`Yt5pmiq36je16lVxU;M%_;!{+K{2Xw@&nmMm)} z(R;qFTstu}`8X$S+Y6}ZbjUys#A6GvSZxOR8a(CPCnyiGtirMNaX${l`yxCbEG&Ct zH?l(Awjw6YTsnPnSI0Kk>1ngIt*EqSXbbi`xP#pW{0lsR`9EEs2HZY}U=nzDzrWkZjQPuPrq&cYj@+&fkopkf`7{}_5!!)EgA9z?siS4vMjVuOjmot`y znJ*`=ejjBZ?bhngF3333)n_ID$TrU)jU-cE(MG(cf&b=%HU;Xwy@B*hSd;bikDO9| zT#NAC*GcHn{9s;Qr(aqr{1yo$%X<;r7759pL2`6!ZLQxdD`BT>kzSThzp#c842zu5 z%V?t}h+5O;;6;R)IRAO)cvo)6>X%i1Y`={H*T7>mnlEcY8Z}7g)(8a-xzREe;!Tfq zA`i6UMu@GvQ{>UpDxa0c3#(>VrB?pkZ-lg<;c4w6Ern6eB|7Hgh6BWQO5t431y%^j zq$?P(j$^EF_`M|_rI{v)3!1)?Hb6_t`%S-E?wC~N+6oV!2)m#17OB$ewgcYLSiMKV zQ5qdZQpJ%zr!qw=!i%-I-=1=o0x&{GNnehxj{<-#u>Z+Ri#7@uVP$ zOu1r`9s*%jlb?(ANvK|+$y)%x9}p=YG@Awt0NtMWiThpd9<9G*o~{MHJmo%a=LUHH zTw!KJfX^9915oTWaJXzgQT-8(3TfWB7Sl>LHyp`p4i+8;`;F$x&Xk2wC?;BR3zETY zJUI^=t<`=~zZpb9ww`l{{~AVO_f~?DVM-_F=YmvANNi>0W>upazSfETIJ$ue<`84a zv4+)foFqztF^K^_iVV}tA>F%g8bv1J!sy{695XZ=2V2J3A?C^=Ij}8-J?h7mX8{fGbf;l{;Tk_L}vn@kdpCut(KkeJlwG}C9KH+NB zK4FVP9m}jmaQiQJnYsD)TR!NyRfUnlStZ#N`>Rs3$gJ=MhOD$8otpc(r=M{og$k)}L*DGSirPzK&yA%?}pk_5PbtUd~9=V}w={YXwb0KkWIz{X>U(;&NvU zBMP!vz;nn^OTw!>5w4{4-RHo)K&G7JqpftLbwtuGkL^UIZ6{xuP)gzchlzq-%}+AA zq`->vz2i2D0`^uGmz_pbGT&YC@+P#lSX%o@3Ee(}DBd>&DCg!R3za!jClTmYxrkoH znVmf@F~97;b-zGia*#{n7*XyI(yqZ%Cw6VwR)6TKrqsBa0MEU4a*(QMRbRYUxw_}$ z5HGXGyR~uSX6KIc4SlMBJ2qduk^jM0ph z5q*G@Tng!LtCnPUUkn?nZ*3?sT`Zx*HH)x!jkTFQ=zAEyk)-GIB!~9rRxq**ij_dx1vc6}l z1UKnZP}7^G#7|==62FTz>6HQ7bvbR4v#bFJnSN(rvs>}EU6(rD7M2j1h<2)t%yDUS=MLMHnVMce!k z?#_bT_(LFL<^)!^S&bUIKK_99D^I6;+1O#Q_+SeK=#4~YQa_GcEsnyZG5E7>K$=KP z)&*>_TE$Ks{GFqdz152M=J+OTV$<#%E4V0xyC8dXfFid6oX_~ER9kgy`m$_wU%OGw z1om^oj5cZak2pKQ$ftCrME@c%F*`3jXg(M|n6uK7r@x{pc!P%eA)iv-N`G*u^Q*PH zWyn;_hkf%`Qji+)>pAVyr{np>uE3++5P}!32ADb{IFm0QwrOwVAdsJp^V1FceUb_9 z^EW$w>L(C+PABQe{stdj4%Ztz$aj~`HV_3VD2*aX%|0IKrf|3WU_3>gbm>4Nl4c8=rq$lzKKN-M{@IjwU znOE7g+V}qEYV|>lvL8Ze%X!L1aa+H(mxRWFALVxyzx-0;0O)es=R}cdH4Dgtx8g(g za?VT+Q=;4=>Si{CLVDnF<;6Lnj(WgBC;U01+@Rz}tFv@Kfk}5|5#9%C7v+i9^HP(= z62>Ig3YMMx%Ny=1ghJN~`>6hw7ND6%d?GVTZxJuz_ui| z#>uQt|Eq1%9EEU{R2%60el#^V@cEv6odyi)uIC^Wg71RoVzNNs>tv6U)!98@M>YsC zRx=Gy2Q>pjj>`b0e9)@dI!lPZPQO6R`qQPpSioN6q6@4&@U)LW-2X+t3z54-RVore z=Mmy_J;kx>6zO(lxbgVYIWP2C=(@N=Eqpj$wF6fQ5k6GoPJLr?HI#*veRx|2i|I3Z z{C`V=cFQf&N6eYAs^n@+KDULzg)=_Vf0(7KF%h0gh~XPh+r&elNJrWE7OBRhqyu#S z3V!@T1;_mu{c+OY4d=|@4Yio^dpO08q|`&Efls2~%&aLusDP5qlv6mkjpuU?&I4qi z#~$2}WVY-FWEy3Vn?Elg-rC6To!7aY;?!@ndv}?1gzYr&%@kmX$Tb~ydF;k|;dsOC zrQGux0SBk8TXCAP);QEh9pGloZmRm9(-X_#Ae`hA&1z<8Bn$LdqCr&x!b?sSEdlH{ zokB{Yt)EA*pP*Jbh}JKlfVcYx%01wh>txhnr|PK*vVlDcS8{nC{4FdgKlm;k^q`J` z2r9~r=&#SGwxBc=;kULvE{-*; z8cIq!i2Jd_(a{kEqW^N0%*OS6mEHUa`ZU_*fA{?GzpPT@Q&nT8)h&NvGQE*01rUde6g?$sVil^$LF zm+Qru@k(L=3C;OJ^%&^{t(n)KyH9767oCMLqzc7g(vZ&wc{_bUj@bI}OK5bbpdT(1 zQ?3N0X}gr0UWoX;`sjx@Kl{puR$B4L{)I$XO*&v=SA2B#oK)tgE}V*XKGI=&=+0WBs|b}#A>4-jlH(Ku4pAR_*EUNA; z;SAX`nQ8VDpw_dHYwK~}R#V7)+mhh(Gll5Xzn8h+Mya3Wk0e(?bhI#WL`_Y!)Ve{( z58OckF*n*DSL!BXPMLsZF#dcPK3CJqGVLU60Ry(M80!?^o=sTu+|TA!(|+4P)d@O6 z+!$k0wfne8K@j+$EH7yUC9WFU8J3S}65w>*GyfPibFy#xoN&p=Z?CDk^vLc zLDFZW?C7H45uuW7`mr+Iod0#XoKbR$_?R4cHp!5nbH4H(E1Uv2kHtGCrx@X}8*6TV zTlZ#yjKv6*ZC>ePHhvZP70!@VZF{6#O~|zL_JA~N`G_&D17`+CoXPii|G6<_8Er!l zVW0VpN*VG88kR@qcTwEHx8-Yo%dd=CT!xU!iOy_AbhFcw2)~9eT`QZV((`i8WklDe ze!)U!2lr6&jW9i2e6|OCc1Y_MFXt{l`Bp(kCs@w=m~U+vcA3Ix>M?SuWFKQa3B?`l z@dE4w?cCI<+Pnd>aK9grL8FrGzMvx@yT2&svtCumI~ZsLMY~PweIM4K{or4C;+8$@ z>4@wkLbTu*V>CQ}N%3`o72Cavylml1A9ufeL!9IEGxC($-#Gd%0|&VC=MpDk0nUIu zsA3dY*2C6kGRqSizFS1Jw`@EZ9vy9Ui#UMhVY~obZ({%e!7wun8LuOnotHZQMVAHy zJf4WZ+|3&Y`n`nsQLXxIwF>lgqEuaYcS$c{Y#CNL zPbKMDn03J+u90)$UuM_3&qxI^-rlVEU$Qd?_~~biJdwX$I`kBV^@U^%;(veb^W|#| zr+KRGk_V5A$S*P`tR<6S74-1k_il>kPO9TmeS?4D@Te=u$p4-r6>~R^{r!HItemMas0}(iA!(> zZG6MvU^jMrto{6cnJlWWQ>sml3>U{$8)7@{8wpS@kdt$pay5$gaCrB4)i-?Yh_0up4MA-3<13|8EwAPsw1a6L7EslC^Axg5l)pk2Gv zITvbZCf?Yp?8my`vvoZGa&}o--F~}8wf1ktYrV_sbX*|UFW`T`Y+|f|fu;FFQkan< zbitm*QZccFQpf1r45buB+?=-xJeYcTRv|UY+jrw+4?#6N+g+`iA`3F68_g_xDG;fvuwweh-OaVv2WEmpTZdcpgcm)S}1wFB(NiL9jp zFu=ULNVI&lQf8gUFJfy0wh!^6-Y=U?Hm|4!`dL3Uqi;WtSkjEvHw?yHCkJB=ed`#a z>x%w+(H})xV|EE%i4j}4cefqC&w6&sh1rxBPV#Oy@-Dl|D>VCg`q_poJ0DHJIeedn zh4W$mCK%y`g3`d-8SSp;264aBwQ;ldo0|{;E|WH&E0p^GGt>wEmn=?#c!Mp^=Yl0& zTE;|M?(W<69NwUSc-1leLx`ouhyA zfIkMwlHs%f_L&IA9R!wCa zemwp~vwDw+F#b2o4$Y#kLqi|Bb;8ls3GATk%A40O<)_xlM- zaWb#6QzFh4nMT0fq^3NnxotqkGe6eJvjg4ji_0`1<9REax@+Fdqx&iQB>p0Mt|Tq0 z7%D=c#mrh_?G7vH^6Vv#5TPb7doyH^{wi2!2nES(z%8_-Nv_ajr&0^2Z75uB+-;~% zE zah_jfSuLudT=Fz2m26>O!KGEo5FTCWtd{|nI7QN)wSGSCuDVqBhF2CvmV^sH}EW-oHeY>^kH9<`DOdObDa4;kg`WQ(iQ zmu{*7jy)7^{_r3Cxif-PfaAaTg-jGL6?70~a&^^85T_ZDwTh{W+4)SUc+b-S$$_ALvXkp*;o-;?L`lQrXzg36w@dv+|lae zcsVj!>QhJQbFx3-czYfAupmy+^`MQoFnc-)QBDmI%7+zU!%KpW5tcT|k)s~ax@6+6 z#mVA*)Hmcu^9Zj|NehWZ{Ku5#i`95EN~zQMdZ_H9#5WrT$$3TSqD(`xA}-1iGo|zd z7Pwu~8bVt_eoL{SvH*F3UELg3@_mvG{&vyNHGzg08Y=7Z1DWr9(;K{+Pqa%K~aNPH{U4-p;buHWlEcANt!Mml}J@) zB_+&7sL80N_2{;0w09T3DL{(R}aWxN-nPpCH5wqX!8}P9b9@{K`yiRro7w-K+0>SoE>tei|{Y zM7R9J^#y>qR0sH6OejL1MrNj$oJxe+Vw&Mywly%sJ%6IHF@QKuwDF$Df)ZZ1Bm{cQ zg!soCD+fLnn!Vg7BZhDnDqilp9_RnFNf_vLx{#`fVD-3K7dcaSQh}B-y066J1CnVP z<-yuz%R;rjgYR(_*arXe77@IS;fG2x0~=MR(xyH>k22uwf(Hfq&J~s3I+#^Lt$3qm zp3u~qwmGslo;q|ya_!IYbjae~Zk*7_d_Y?Z(Qn;OC{1Q)2%f$Vh2K2W0R{(=+2;|J z`yd7iPw@1_EYK@@>SPD-U#A6Z89L*5yRPQwvj0Rx5x>(?sc3$Ci>NRXjcu7}A&Okh zD~5Z812L2@(36viiTTv$yHl}%!#e`gdx+QCznkX3`;E2#=d}S<60_U&Tk(r%u7|{X z_n@0pp^p}o!>Lc-#PoLRB%e~&Zmw2e!4J8ZppD;B`CLf`UOT-P5Q}Vz97Qk8#vfYH z)e0ljOy={9`OmpzP{lDe(xNsS((J+vVvDz_n@sH>XI%!}beiLD+1t1t@fOKR%I{1t zv`n?D{%rbbVWicd)GG#o^Rtu+O$6vwEm6-#TRxKvB``XFrl)bUA1-g>9L_F0X`Hq4 zitawySxMP33~OxkgmXo}ht!)J>pCR8o+c7)mz?$laY0GF04o8t9Fc|wA7A&Q8~E&% z_2pQgupFYM73z4H>3Ufk47{QWJPSGPxQ-2cf)lKFi6i1l4KDOs`XAt}^$oPR+G44C zNK1k&2eqv=hb3Mp=quXxsyhSHATJuDqDqE`w<%avk$cSqdvoYJYtYIV9uw<(_{O`i%#a;#41J=e*CyJ|qxy?&bK|BAu8wz<`XF zgOLfuiSQ)KhU9&PxMWHnZgeZmmmiEsaAF1wXUe>6vRpORxOiRDyJ=q3AW*#7)9`&% z>9B5tYf~V&bxTz}6dR{68GHLD}W<{YZez&rsX2l!mYJdn0Eq_0>^*U%veS5pex& z+k{&@|CFHxuV5l3ShO7)*IK3dqpb9^b8^IZ4LNP)cnh28kyjL(oDj)+6HMWsY)c|7 zI@A&}_oLu9cOw$^vK2)&nYPZVW2!ezLHXgOxRBTROW^5PxIpLQA;S~w*&VL14XqQs zvkye9xt6Z#oMIATS`Gd}Y1!39CUw{GP!pjZSddMS+gV@sSOXuW6!nPs1(*qz0#J!> zPMlmmc63dt0+m-9ef>WlB5o@YZyl_sCwTgPkuwA+V8%hWY>f<;djr>S0+Umer^pBJ z|BT5dpBtftzWrleZ_g8atBD0>qd&8Pq=}qY=yT-+9u9@ZItN@kJngJMtDEIhMod*h z>`0v(5Tyy~CfAZ*{X+)G;cKec8uL zt{Zr7)NtsIpFM7mY7>LMn1SUHeK_#=IKe=%lvd;3m9a^$HJMNOJ9UZ^fSq|flIYDK z%dPkA94Pnd2eu*c+(^mnPf+ki8FP;f!236A9;{4TQ34`EgWY5zsfVBpF-a%Iza3u4 zo2@-t9Y?P}r%c7n#a5em&B8bP+m2U`crrt&2o9jvQlac+pl_C2|8PY%J!-Sb_QnTO zG8~MfUU$b-h&3&I{+?(ckb-YQq@4k9&*Cy&cdkaBzIR_F6=*`}Q;jVUCcS;|w+l&B z5Dfv0!secH>0n&Z7rtQ_`ptbjo5j?uORQhNIYT6*^mtMf!@_dZWg~PSXEF8u??ml8 zQPu?%sFRCZfE}LjQI-tt;z?d1%)_VC0L;GRKswqk_yu+0y(}8Q5f24gyfN_q(e#x8 zQFY(fq)1Blh%{0nC^djI3W6fi3?Vg0*QHBD8j%!XND=9pp@v4fL26(?Nr|BmlzOkf z=l_12Pjl}*=j>X0oxQ4Q!T`OF{_ZgFR5Cr`3zsDm_z?d!nuGEVMq4iEaG;a`=hBvS zz1(&a_ZYOeGPLulC9zSrEZRuQA|dF=!ttJcOY=;^%lQ&d^GBGkY4oP>@#AmL4nz6vJIhv0#Cdktyt+M`ZCB3&&oQ9_x#%X;rD3sAiOq3VK_XTwAOZ{mZn*Y3p*t9cmk&wdOors*7aex!H-bXoeqRmTyJZm!85ccw z2+4;;o1sZ&0V_XqwjG_6U0zTzq1nye{+=~NuX&7M`fAJ^eS31j4k1OoUU#1W`EZ5^ z^9LV;-$x9WB7_^l<`;}qkc9h3R`fG(ynRU3XX@+TD{X`oLBY4n!)8bj;6iZ&)keZ( z@Y5KZJJT|C6mb4oQF*S4Lbne%Y8=75PA+8C=2@@4n)cTL#pR5f`PkDD3%|q2B5?G= zC7LZchZ^$%UWpCA^&$Mdjmq({|A<6GfK+n)o(cX5%Zg7^%f)L^xFbVtg~-4IG$1U6JBhqYx99JS;6oH%g*mhU()jjaygd|66g`@8e@H;T!f$ zOtEXPp4Q>-n7~P#BGn-m-4niWcPKacOD4SA4M6l`b}bt^@gLY6uAkZ$XV8$7)epDc z2cE6r?(th}2_d;@Fx8TS4vk4OI-##+;<32sCqTk|y$SCYo7LuK{ekT=8y4D8t%dtX zjFS|T4?L1Op1Sy^=^wK9)*hyPUUR}u`c>HcGS{hL4F%E=_Hk>@W_@l+w!%E&4&P4|EB|kkY>T2;{)+a>IY3CfF zoWGWS>>MDyIa5)2hy!P(BYH&-aLyw^%xlBj`yrRsy_U|kb*+s9OdDrmjL~BWV=m(4 znLA?KP?#{m+7n3uMJS04iCT5|+U#S0fjiJZ29g|s2+LZSa(vDU@)$)lzJ40RTJN(~ zzr#7b9~f+_%pY-HoAZ}m;~(vhU@FXZ)DMbBL|k1zItZafXCCGlHk7(=mUN*svB_sH zh;30oTCZ00AZ0w;jWL*m;XU_{7L^YgNZ}j%S^bv`E&-xTYZFVX)QAbuz{<6- z2fOv_pPFm7GbK+&CYNC4=}sfggl(P9J2iN?&WKu)C6wt`5tj#lW@!5>U7T#Bzcy7% zFa3~{c<;=!@<%YI>7A6vh++fs`NklsFhfg1FQA~gwaN?kt5ZBXy57ii{i;)rA3WSt zk{IpQcsP>~;iBz(HbUTgS`2L;fVb`Rw(-~!$A-aFbjRLSP>iD!)h&8O0}4JOxsjRo znBH?peTM(Qu!I5?Z^3OLT}qY5%spoASHBDeSqIEDi6E!2_d zlizHYkpPb}Iy4z*9GyRGT){qk{jfo=<}#^%yKb!FMaR1Y(ah>dK!%y)RAxqg)ZOmk z(v2)3hlM`R-OOzCz(?1vq*BJ2#{1iTLnU3O>p~1qR>WrRb)=^*#0-|x*4xAO_gHTn zb18jF)r`oT&UPee+Gqq?LIEC&z&Af0U2K;BMDft(VLQ~(oBbY*X7LQ(m%e5RH{hqO z@m~F|B}PujU>tqo$o zm%y3n!KI0|N?n&NY+raQhqb>Ht~F4ab+ald*U>ZphIxakOe3xZ5XDb}s28xDDOM_3 z?-gk-oPk|l(3|=7Y{w$4{T9DnOZ<21^Gi)c`df056^ITW z!-hga%tJv|Db0l`!-vmSM354PA5Bu9nn#{w3yIg!s`jo5N!BNFx>t0Kqb3{4SDez> zzO-#gKFEySB8^7xTSIK=N!F;0m7%oJV=gBc`fml~3a3Fi1+pAx%{e!5BTqZ?x{oX| zEY|kkDxI{(raU%!;U7~XS^&2xBa>VR=pi2L5P)gi)MwU5l)q65*tFoMpn|wN}ywCKplA76kGX7OlqkSZv zo)oR*=2cbGDL)MJ(${#(iAs46=$yZD&m^dFL8y_L7?y~r$omS-H*tLUxb^!S=RJeg z)&_1tWmbw#c`*7hs(sNWLoVodWwbJWcnKf(fkRorV^yvwpymQ|dOEfXF2my>e;fBc zmHUIPzYM2hVS@^p>lG-3AX^#+_V|_2{o?E7zx%i!VpTy zdD5C#Wp5`o+;^K$Krk0ZFut2n3#P@OCe_Lg`k$da?emxU5H{@C$tB@gdt(F5x~=-~ zhO%Ki%72!ykBXl}JL>Cs7)QY4l5Oh$-ijTWxn#VKlF2TPCQp=rYWSV_zq>cp&?eKh zCsL9q(rJM1fAth}^dnc@?&P@@@XL!Jw$+A@i8xhsD2`|R>X_$4M8BV`SnxK zJq^jZ)CqBcm!EuGufbS*AS)$j_+7`Babu#a3yXd{;09Bvh0LdZT$Prk&BV29 zEx!44yIHxtZQ5(l8<(^x>#|sD)*E_|wJn{n{*(UwFsrDl*=)bd(+l#5vBGLj-H4sw zSn%YbzXd7O&i&9EMip8Gd!ZYv8v8P}M+~RM^`KhA-SK`oODb;x@*}nVotR{`CsMs5 zm&^CAhY~;I;j$PpKkd+XxOXOSsRv(G8N6^9xS;`gM_zY7{zF!X^f`V5;P$t_$PJ>l z^sipi`Pxa@F0(|mJkbcBH%DI}lO%*zc(px`zLXl{1>GLY*j#m&3u^XIj^xUz&tRz|Ok^$Jhwn_hz7fLRLoRI1Q^T z7%g|{W!-c6JI|IilQ!0~BD7slYMS9<57$$!i_))2I*vW?Y_c_q0^S|B9=EP6D52rP z@uYKb`Uaf_Kr<95?j#b(c&biYWUB~$NXwE)!WDBkFb7_>UEW_CRcQ4VI=_(zvxrF$ z{!Ov#Z--^P=ThjEKXT*);}QxB#dt+-CXjgb8ZD+i{UYO{Q%~u$U{ZaQV8s^aAY+v8 z7wWM{idCW&Zj@1l%Gw5r7&=5sVw+Ni!LT%8pj{>kzFv)b{RNu35i zFa)Ko5iovAP;hKyxGW(?7NOikZLrw%pPfJc|A$n#J9~OU2}d)AQQdc2n;Tm1&y*b% zWNHnc2wIdoyNs6a2Y@XeXI1DKJ>}(EZM%05PdK!N zlzrwS9|rjEmKfg`Vf!Vz*GXm|F47zNht(s^dRW|(UHW+gz(*(j%lOyXT9#Zcg8RP6 zJ<^#3?{+hEL8fhQABy|KW0IZx>c25d{vO{;MuW^P%-7PV@BQ2sY6qx0;D>k(vXU}JT2jkq0v?-6xvPZ_Y#bqh z+XRik=T>Dj8X@Dl;3kxc#bPzP??2cRje7M-=*h0MC(o@~?q%)!nxiDEt`gmf)c!*YEevCMC zF6<{2Ms3+0oGIUUCp;*!0-Nb7f3;Bjz8!^Dtbi0(j#Wso#qgH$>tx+z^@+`(-7S;o zVUeVy^b@?-!~;vF5K6CQ_WFT$laKYrA~T;cf38SI16j`-6mQqDM_PLQ1FeZJ0P>b3 z6BzqKW=tFHwLhNl4CXlEvjOIm%W_Gu`{(a$e-Yq>2L&)x`3Re$7m7eG+=<8;{a{+x zGNLT$1*QVV$r7zfd%%+mQ`TJ(=d&4AVj<4QmfsU)=SOa9jQ`}vNeTw8sNjKUa-)wf zbGQ#hc>*JM4B)67d;Fn`F{>mL*5>3Vfk`-~HV z^+$|V+*2c+bLl0%4(pbUqEhymOwf&RdiF2nF6eru7zG%2!Sf)C8e#rz5kPK-5vyed z`@9NN?E^6;S~li$iQr)dQ7*)(A^dF_nFeFqpIebR(379N^;h9z6&z}$#*B3Xx8wA# zBgL36uEMp^q6~~nFTk1^gyBGUot&6NIp$Im0n|yr3tk}LOj;}Y*17PPPr6?b;OL|7 zHB;-ZNgOD1(k^h73KBNV?26?=z>^3%0b!?9)Oja&hjk@nYma%yXwC&NcIWUV@7aG+ z0o(hBZE_=pZqy+nESY$0c%ie78x5hrGRCOADGx52)^je9xVs8}?Qi0c2Yb#1rA&aS z-ay9k+cc{%jwR66d=6Gci;a4taF}}t%bDP}?G@$J_W@y>TkZ&9gyW3kf4Omu@g1lt z6pL5JhE#G!hO@>fooQ(laB)IY(o#1i9(((YiPFjhv5tvya$|V8d?R;OBHvSEPEf!0 z>AttH+dRq)jZG;}{VTpxVMgWynfr@A&GiB?9&Dm8?Z zbro?DVzl7tXXUX0ueaO3Bp#zuA*y7JeO4Ml07Ap>2lqOh=?!m({JzO!mbVwMRmIsBPG21*ZZt_@J3tkhVZHV8c&nrOf!&CX%2A zJ&)4r%@6gd_IgSK+eFfe3?{~j2#6r{lHJ3A4+N{$76I!!8##~s&QcW7hW~QIHvqq8 z3lAuis1g4=#Egyp?yfx#GJt-7$cTTeLK{$X7)74X{kU^ykvgUCi_(2v4gBG+fgt*j z6#bd?nJOQbcrMH=2$!17VHS8%ydfG0od1>qm#Hlm%OA3FlBBtcIibfq{K3(vPJb$| z@b3(%)YJ-tdVs=7*wDUS%sBn8(ds*r4Qi6Cv1)^x^sR*j<8YZTg5|O?JddOKQiY)vD6=jO2Yhl`0)O7f#nSw9`?=UWpX0!14%Q&#wy1=DcZ+K#YPnV8+G=cMW9j)@ zV6Gm2PdF6X)n~`c3GM6cY?zo{59~f-x zA1eo(RBsAqd((c`Rh@@35%*XBGLLo&1zrpYL4|><u!2(~?Tu62h zL9}tP5m8M5@lPG65+OqkJRIIem1>=tj*7WKO5Ynt{=phI90Brt^BGtPykRw*Qe8&v zEuCEqtULqVBZybKf-~|#KLKuvx^f*j<;`2;K=+%vme1eTXvg}hx<*OETh;Rm2IYQn zKH~#o8%JykLqWM$=`BaG?(6pmLyO2pD&GCbLF>(sbaA{^s529iCTTQ`}w=cf4EG^D}XZcl22 z968TILj&h8Lws~hhod8NcUA8W=)N1hy6w2(EX%WGdQH)ABG(YmtPs)uX&K)*G8y*P zhu=c(53MY8NGoviRRW;VlAtFiZpKymnL$sNK4Vah2r9#WORCOv6`hk?H)w;*dgqni zuMR&w(+jjfhXnl5%|}EYP|y3z*Hf zoGl;SQp&I_u8#Q>w-L7+UnwtakuC7bVXGf3E2=qjrjhJ zaO$Sa^51qOn9RY}+V!q2lY*Ash%oZ8Utz69^ZPR-BOX!$6q53oE&MW{mbD7v%V8j( z_Mt8Olq(;?kCrm`Um@@T2V%?m{YsUR85s_seD;Xd)dXbz_KxceuO*(?6iS0XcTq35 zP&4L(b~#ga5~zt+I#UlG76fg#m_`BDw9dwXhq?v-x1L0pgDUqgY}2&UnLo^T^VfD4 zhxkIYQ_yXzOv|_E63ClLSQ1e)!ch}j?-czZzbZkKp!RZh^UrI$i+>C=av}8k`@?eY z`K@-$_m1rqt)Q_38veFa+pEQwdDz%{Y1TC>^BC9<8=sr?BEf1aaKmHS?4yNo8Uvr%6o*shq6p49$&6hNZhOUy?Gh+skM6yq-bvgN{jtZ(gEsVt z0*;zi{6^$eG5gBb^k%)5SD>**`p z&4WnNp6UICN>l-L8H>?h^M+RN_Cgtwi)G`KA^}jBYK{kP=R=aR9~s@7b(Gy`Ai~{v zdkTNbfRUk@yWIaHCEEO!B?+6C0XIee$^W^aj`j+SDJx#}Xf{~Ye<+pZln#y{H~Dg` z1dKlbSw>fPK^p>vAQNvo@*DK=HMuVP>7eTqi`rBT& zfA8eRo`h2mUKLh>@L9@^j-v*FP~7r)^l(rWL(L%JP78*xl1XuFyWNrk_eL86XBv0O zcvccSrn7`>k12zF*IiCN`72uXlmo*#bGaWGXpjCyH0P_x*lUeq&&S?Zh30ytvY|MmZ`r$o-;7BlR-H!-*O>%1S#bEG>>;-8$yH<}+a?M4?BA<)%5yX6RdgLU&GyFwvmuI4RAvP8Me@uY0q>6nAbw zoN_CT$(mi^!hW9K6s#U^cDIQNzpX&3%2YfcVdFOg83M2BCMUdMP44+?Y5%E{FqVq> z_Sls)%0Py)G}F3J*6glFBfxg6f4)s}8Dcaa-%k~NW}HP*1yDa&NQ;=Ms$IN^e@vig z9yxZ<;o;ljOksv+-%_xB_7>mB+0f%qu?3)Z4qh&+58O#75%?vh?TMq_IiodZPn7RB zeBtJN%Cl4>&FU?`j%4-se+zil7)vocOz-(rM*p57y|2d;mpvtJ|LCj3oTrIk=H+b- zbR}X9ej5JoW1rr|V9%p6BRk%7Vxkus@zP#?dN+C84rdH)(r0}J1#oMV2>V2EbMce{zP~y`>rB%wdq4GG&(f$rBrgi z4Sj~|OSA6?^{$L(gC1VrKMD(-G_e%GSjR<+4m)NS_Nk3Uj-KMeoxIr9*1g#i)sQQL z0*e6_xrnGL;Jr9_DwBw-6+uCvVC(N9;rbs!l^gMmfD($bFWrJvp?aj@Ux-3s0=w;R2FHNv7 zyQ=+lbwElFym#;R0%m+wigVEtwO4aMwGy;>oUMLvLj#?B6S(Q~7?6-)iQ^Lz&xd?E zPcUcCM;OPA>9FL%WYy91SI8p!hY!!6mP?k}+P~OpoN*2Ex4V|OKIFXp;P)bUQ=4lt z8Zh8&bfFQ9s1LXox!HU;6h8e-2v9eICX#%*=#X@q8zb7KY4W2knn0m zc*Gqk;knu96$g040kM@1qeEZ5&)L7`_41iZ0e-6>fphl?Y}@5#QDy5LP`E*M+-3hG z@kcl7^?gjx?@e0xqme$hgS@``k%BVx;@xu}bdimz3EIu6 z0>_Y&^ckMXCJf+ z-Hwu<8ce=I4%$7y?PQ!Tt-wzsug}Lz`TsMJ@(V|{{piz5d4evY0J4>!B+cL>Pvw7! zPY)I0*Cw9T$)D|K4XkcRM|~CLT-`OeJ>eS`PuTvSm(3n*zYv}{0dx>?akOjr)b}vv zz|iS`~V7_(sA{=CYE$ZvXxVQ)X|0n5@C#DDT+&7~82i z|MJgYzCRUIM;EoaUrqD7BBb44X^!it8lhe8ebZ{2=T%&ASt3NE$GddOU6%0R-Uic~ zO~hlr08{!ywwy;8Qb+zW2=A08`UNUfacswukfccyMQw^Mp-eL^Z&FYY#skG@a01~~ z6L`(c3_C9P4+fekF9g*|ri&kBrh44eDKt3{@WRlOP1z_Kd_`lQyIfkZBLTVl;6I-x zj#H&VP63)ZTdHDXFF>>0;6;jcT|9ilcf|8gK{uC$M#p%m{0Zbpx(prUwq(=oP~>_!%`ZU2{(XlmTRfh@jFano zN^GxL=FWY~psqS8jO8PCB;B+QMW25w&)M9sV@H}J8t zO3Z#u?LFzn-%}4pnRv+eE}Cr_gbBWH=r0bmePreUH>n(AD^o zZ|hM1ZajI`j(A2{NlWoG*h(w@tO4JUN$`5`9-c1xDGKmbMR!G7BUd!y3wITvwJ%>V zjbjR>F)b&kB87{Nm0l1Zc`AZAk*g%B+R@BR(KK5sS81>cL;WNyt5o!X+*wFz2MfBz z5frdpiYCK-Bb$q1lD`8K5~fi0npB4w?)QT7O{L9Cj8?*aGQqKiEA^4jRx&>`(5`WR z$L^*BzH~RN=#^J)I-ZVA+~uD6c~2ef=}jCqTsGs#@qHi)=uNqan*h`6niuT(u!I5x z7svFjB6`kAQm@ip4~}CTU8w^$+Uib+-czw(cYg=7|0+PF&gui@;4F{g^tlk5=quRm zWBJQn%YxWpJR21P_=%z9`7MwpfughTTTb=<3}>G9VIxXfv8ew1ptWbJL8t!d!p{V7 zK2NDg()1bMF7J1&OFG~*sPi-zs}glyw0!*a%+m0bAw#RLj0) ziqH>t)u9falORXtx|(`>I|^XDBEx$SSC0Kc$tK(GZ&;QXBmn0h6CL+)^Epj&a-uQp zy)yD>^x?bc8U^1AH<2(tUuR&1))1SixaeBXxju70dGiLIt~>MsGM-?Hem$J>c_Sr% z#ZOiPdU5y5&^!%p!sFAu5@t|N%wKyY87E%Is)5dMMf_Qvth|`C2=Us&t9UOj`oD#9 zafXBh-1H3)IG$z|dS8BLz?*ywGr8*oSPm24JY}wG9yh_(lK!^76$Nx+Q0ay zKfSiy>nP3I`DO;Lq8juWK_WX|sS>A~p;s4Sm7y1&wKt2_=nYFsju4@2Y-q01k1(z> zSOHE_aaG~4UeYCQ-gh^_DtTyrskwVO@ZBAjQ6ksgFN#=FhxE{EfTC~0ITz(13#agr zZ+w2~JIdjjw#{qC>L@5(W8!GwcyjD{q}FPC0D`EV8dcBVY1w?(nec?4Qf)NUsUWpD zF~fG;$U)nKkJYD3f4BY|o$J8l6Kqa*fB!4^q*cHjOT*_n%_v`g#H(f2YtpmF_w1wA zVvOTTjukhGu&R4O9&|Zqq?X_cq^=jEYlYiogfKmCc309J-Wq(dARB;p8vxE)j6Cw(V&^!q$KUCUOY*5tQYw5!u8?$N^83ElPa%+a~@ z+~p_};}^Pr+5C6|^QC|`>vG%YyA|Y)r;P;&MfBMNF~*wDj6^@-c#N?>Bj`I-n=i|Q zS3>eQ_!uLJgF`t{d@R?C@3_m^_$Z zoa<5B#|CKui&10krbl5|?K$Jjp0AZ_c!^Z_vhvd-4g2cYxA#p!C$UQc=E|Ykvpd2w*&bKuc7I)99WP;NSB@EE6v~*4%>_ zWp|V5;O$VIr2BNvpEU1EpP4TnL|ernxF3;$t8VfcD_NFUc*ofvZ}D9`!=v`jP3tG+ zVv8YAyx@p2lI*cpcm{^7zYB5M#DBj~9gt6g4cZ+sb8LA7Z>>3Y_Uoq;_~5dv272Rj zel*<2O97IH;F{5jd0o=DU={~#3D*P0lry?EXYTZP~;4D*B|e@>1O3>$Ci~v{i9!@t#yqRl};2+`|0O|L7HV);-fc_ zVumgTrKy^QbCtH@-U@3v(PJao8(>K0!VLGvaAop(z6E~mgV@3XrW<~WG%j_p=tVpW z{xj7Qa0-*}n0cOMPVM=>TKD5kBpuw)&1?R{1rd%QH>ran{C%g%_j<$|2E|`228*?K zzEfIEs8qEy7jl~>S1>us67j08Y z9luZ=o9~cquVpf2%k~`Tt0Ip5{T!SjWI^&~yWvZ<9WbiT6*@Bkk_VFVnrX1*lj=RM zT*ND`IsH$=ny7Vy^HhIHJ;AA`D1pIlKPZe{1zPCBNP}BnUk5YV9(a1pc*V=Vf8UD+ z{Y}3-Ki!QT+eJ(kb(=v!PAZh|RRvH($D)sG zuOmER|2ayT-pBZ-2VlqTm)PZKgDF#?oy4=10DFtz zy@|?@qobB{Dzg^aYB zsJ@DXIa_iBrwX_&SaWlz95b&iTMrs7JYJDyc6z_N9P5-;fc+yO zCE9W_wUqV97q5T!TW4pI;{W!ErxQ$@K{(OF348Y~H}VJ(>SJlS=_gP0=9Y5Q6G}Dq zRd2F8?%&uZ<{x)4(-H?u30A9IJo%B%iTT6HQ}LfQF=;{Tz|UEs@@;(0G~J+MP986M z^p_%cyoejQ9WXmVF4qdr?;Rg8nN$(FGsZ$K@I&vGS~f?GgCg{nH>~kx56v9w7xQH; z>utLh1BqLMHFB==k{W1kBR8ak?Oa)DOuu2@Vl?nta}snD_Kz-zPLcE1nL#AC*dHa( z;nEoQpMf>HA{s$sg#*L1dQkK%aeF2as9#Lm(#4@cw|f&Dlh|%2^!JGhlI>DYWRqvH zF@gTV=*qag^!vR#6Yh>1)S7;ka*JZJe$PzvcE2cMoO@dVda}SfsA{Y6UD?D`TQ`3m zqwUZo$9DfX;4}K^rX?}Pk;p(Qy3I~yiCBzmZ1c~!xq!ha;g|EtPyhkI?tUtK(ekYv z(GM~2e{g`Wf%YRE2WM*_K%e)hSSaRhkqjn-9cTB)n7;N?nlduru=v@dzsKno{uj~V zBq01A5ivOve3*Q%?thSTz2KOOR3600&+dE$F2$~VqI~u7NkVoJrv}uNz{HJ$f3(+z z&arptkX>bl+?T^wGDM~_`OLz-i`*JHNh-P3^waG)lLGIQ+;baHxYkGJ$4G^lUE*uGUsdBZVmDYbp~l!P#_W}4E{R!{jh`>|m- zxM@$6UX*fUepbF~tuQN15x2Xsse{leayG4T&&JX$obf;kU?#;vb|799Q#|nL(;B=t z#8@rpkfg2UB>gfVN7|RHpDNP25(W*j{Rz@9G?+n$0fIz4P7yO=Hk?*YFZq>(r|>o@ z?_ET@5?|ck8Ti^CJkv!WIbBKxr|nHKg)75%P~M7LM2`X=h;o=^mh5lvtWHn59tvieVS@sE%~ za7zni^I;;6b}#ksez{-AQ`m^oIx^8UNI|}O6~Z9nN@ekKiWz4I;$r&H>v^`EUF`K) zt6tIm*(@=8Jj}>wR_PoQ{m(hT`E?2&4?r21`=R*X9)>nVt37HLWaBUY;2*uW&ve}# zb|01Iwr1n#lasuC=FRjKdVg}aqYO*rY>6FcaUXaM5Kpuv70&v2N`@~_Rtv6VF_<{Se&(V>Cj54~B1~aAo7AjLB@LE(E zZExRD2lZMnU~B6U!6okOGsi>}YH7`+={%$RAK*DhBVwx<`)vNRq8i{j<*B!^^cLdn+SQuVo`#;@Xes|Gx_PXI z+17cCE{DERL`T}p1gPEF=Y1Rnp9c6-M z$(A|HSo|5;Q|Nw3f371RHnEG~9V#rGWDWz~OLBp+`lBO%XPtrflU=nCrR*aBp3(gVH_VdIig{tUZWB>} zD6!MWRefnaJlu1+V2!kHJGNCtuaGayUB2F2?v4PbHr{py%MTE85+Bi*8}B{^Rm`k} z?^Zqi`@U8AB9w2q;Qb`Y1aK;Z`*xoJt%Q;1apWJN^D#)&%v!0*W82-Gj^X z*5fsBpkTA-8ZHOcqfbw+CC!7b3NQP=-ru*hZbeenq~V%Zs@%t}lC4^Q56_JbewrTm zRPm&=b#KSf4sO8IhYx0YWOf%ZyA{(e7sH71f5F0d8tii=*TP`>ucb0GUP>nGPjO;6 zyNUyAux{4qtXG1y8Baxv93+erLbry5maaRl&vE4zyS+bW^_JvLIy>hdozJZmYLSzt zr-{bk8~-mm1hWpL3jHJ^VVnAnIoe9^M%qTopg|`P$3IsxJ9d{?r8k(ep6+=dY@!qr zh;>N!Ca@}4xQkct9G==j{n14lr;fMdDwBYn#9-Ct<0EjY-u$1jgm4f#y^V38CnG_t z7r)HWFOhOhdxeZ8vC$pvuJ?@csWBUZ7*KJHl+=_tm@u9@eDc3sy}tT2ZTc8kQgiTm z^%KX@77y?B{JUJr#VKOZ7;^E z@0R)gFof2b@=+VOrm@N5R|;-wlPDKW?%;(f7h1g>peWIPR+-ZK+=YOdr|~?Go=(P% zzZ8Tjm|N_@q!MXM9|%$N;)*DF`AJGkMkE=rCYPSfU6;&_)GFHWklXq>XROfSV#gPo zpjLVOnEKW?k=JsxyT&?`cHmt zgLvw^L_ocWQ~k6;^5wkmtd4=(Wqh*{qT?*=?J(^OJi(hFc29z zervEUpe*2=Q-c@TNl5rocRvc*IL!(CJ9udkOwhk8ShKL^_-ltTZL!tE_UDx05*pC{ zzsxNRc%{gAvxarG@k_V?+cxduga_ffSl)KgdJ_@yujVePYzmu=JV#=KG?~?8SY2ZlJ1(ZX$uyv0i0N^mgK!5>ih{ z%GCh%l98L^Cq^_f#3Ny}aqz&hSWS!HuEJ4p31bwn7SINob<6qqT+mT_X%P)h)M5qh zvxcotH*Yz+dI-8K)m-dIH0UYI5OkAF5$Y`PIKU+ikc+e2&sH@gNGnZu-uY<~@rHxz zo8N`w+qc9;Z|W6ghG_!Hth({)KjdPU3UNKZoW$=|A^v4y1<>FMnB_R^J&;fwCt0_m z`~CGB0F16bIj%rDh8+mt7LV9awY;Ij1&6E*fil3^tpLvOD^64d)_C}Pp4=$tb7oG| ze?E~cS*&y8+{9%i2PY6ZvV@J8>g z6d@Rr9!#F4!Xkl1Y8+RcP=-hO+=Zf+gRyq%ninWxrZd=W{M13>nL>sdGT>+|FJt@q zvgrD{;8|OZ&k|jO^zXK;s}Yo=RIoP=Q>f+I7O;jBdZZKycBf;&?&w{xJ8A^gEJ^i1 zy$G$+b&wPi`PTHhan90fnao&S=A1=Qz~SYBCRlb+#KmkIINw}&T^s$r(_^ZfS+Vzq z4c)#c%0d|9a|~)=fpLyLIsK5C(}Wmb4atJ zU6<&VF4jZTYM_@_@s2Y(_b$%{(1web{RH{ge{D7b9Pk`;8-oI5?{1~ge-2a-0$SCn=qCy3QRf;=WxP}4r^(Z25$>VUN1?GcE0OcLI3Nwl z76fOt!)V`V3z@~ZBME&ngk1q|G}{fw@RQwk7|eLG!-7S)QpVEtw?RuQl~Nlaa}j#M zf~w<}$Ss3FI49;|Q|YBX*>)!Oh9`Q^u^jsjfN0zwCf|ziZwcOAnDcC`<@i3LAVXK4 zyUV;?XmM;9N>jk~T4?CY!Uh8{5-^$*| zG8c3+&3j^|{c(F1-}>X+fS3JL-y6~QhtvC>;3e@Pf&xcMNlb6>`Lme%Oul?l zv@_haj=j7b=@`qJzP28%SoyRxQ+I14t5@`~{`vUEX+XBUiD4y3&%A?P+}unYT=QQU zDQ_&Y&|I6f_-#tSsAVI#4EW1%gd&nx7S6bk&M{Vl~oYDCf}X{b3>^THvX7pUc$H@1JLpIvTaeEiJ4XU_(2J&uCHQL!0OT6*jh0;9=_*OuXw~?E?Q2p#B z^VzOhP)o%O@k0#b47$Z%5pB-&?f%L5!lcHGh1{IOc3?oyt7 zHQh?c+H5}TtY>v~l?Ie}TR zvqJGhB=s=~%e=8|?uu$!RJW951YEXz7W2g|0P@g6nA|@4rSNb;JKeHzT~imcDa<~D zp`p6g>M<$G4i|iGstO&#TaD8xn#xa}+)Nmwnu1lTm*Qg_U1T;so9Tc?XGiW_$e71}QCT_CJ3@Wm4R| zNu%(4iku)TT_o?IOK#I9;h=@J9;747WIfN0_2W4Fnx9+?{E^YgcvA>jC`UGRrR-A* zzNtz3jQHAof*LP7ezRlJd9$j=eg+&N_uBfR$5|0g$+*z}ZH5L%OA(x4Km8FeuD(kv zQn)!|;;te(m7*&f3J$BYES^JX>y_tWcc@kQphKli{+80P%3by(*yNlKKCXSPuuLaGi=ThBH;WlDI5t68fVGae3#^OM~q;~Xm?8>65fjsYAit}sWHZo zeLf@nZ@--ooW5u)$_PH!*|Qcgx-N362EHY-!LmBbZ3>Co8u%XG%h(9FK1o-$Uh*SE zoge$819>VPj$M2WBMm=5P!TH+wCAi%u4c;G*5!y;0*y()?o^Z`;O!1e^k$&55LQeM@y6ZcDy& zGd6(@adb4@FZNYDj3b8v+7ou_V$_9r)=5z#Mf!cZKhlc+SFIcK?zg@8gV2P16G?{KzX~-7bz{wm{P?ua5qgnQ~X|V9jRlrTW$_P54 z6YVuHUT6yCe$Y$0|6{T?)EQm;&4pgfHPtE^i-RTmIU0)X@L7ibc~ob6W5M`Vj}p## zhsb(UdJNHCR3Bbzs{R?uh;2d`%{~3jh2dP7!OyJh6VAZ_co)E|4x z!lAj$Q^}Gw!hAAdgrVu8H)JuZ@$gbM5#T>p!Wbv+ESU3G=nKn0IU+M;(%>4L$oVei ztcsd;ZzQ*4dhADg!JV1NyM2lB5>M&LXJN|1J(#;T7JpE%Cj%v4 zU7t(9V)jaD9Ex66#Eci7VtB>X`Py~O?%%f?+V6jw7+re5=T&K(#gocPyB8fedWt75 zJsEdGUfFjI8F}z##;=HFv&_^&Z@Bq7Mk%q)#S5@I(&5_Y9q@5m+Ye7@F^wiB9`K?` zOhCZ3V?oOduSVsbxAyk++1dI+DjomgUvm|UHaffKUc_9CQZKDFY>_K`($V`|y^Q~i zKEPnx_oKFnbKM9(`A+C)=qz&x;n~o1^mh_5{yc~)!mC|PNtWCj!v`(wk^3fF<&BWc z^nTIQn~s`sIesEqfEbcA$!q~q>|5Ae?(hkgX9?`zy}jtU5xLXB|A#yN#%b~sUpkMD zVrfC*nNB2vHs*U`e$tj``f@9$>){mxiW8^0Cc=9dgl3CB&{%R^#AiAk(!aVX+$QVE zr5_N`SGO_dqBxKt(Ex|tdm1W#`iKPfVnk=w*K&KWS`|u`hroNxck{7zGQvvZ|IzdneocPw`=o?O z3rGk^r${QJQ&PG|3!|k*cQ=SMBc)-~2FfIq7Nv7A1O$;7h@|B2d4ImI-#@UO=RS8_ z_c`ajuIHR`DbQn4^b7JSa`>|6V!oeK5t)#m1umB0`mqX#C_GN&k&@%}ywgasxN^r? z6APP_ctPspXQt#!W?wT0qAqAN6u9j~3#bFR&h4^y8U&b+6=SH#RpC*%`UNfJh9Vn8N*4-550aBD`uVb(O1f z<-``%Lmwzi)~1`>v-*%R{Cek6)qbdA0P`V!nmWh*OozTjf;h@y2f)}Ste=lY zClLx9{*kLcZ=87OsH_|j5h~?FIL|M)^hc{E;5`cE=JE^g1Rb=h4rgLH{inAa#EyVt zo&myv@+4yR9ttkUKhuM7Bw7OQKWD|WjwbM0+d3PvBi+x=jD^1Xa$j=N&twnplTtcQ zBvgulK%VX~#RUGsx|F{hpR?jwQX8ArJbeB<^MRU!TK0ExmC^$8QWjDW-(;lNpT~!H<>nvY@1g$1Ah2jdFmT_)_`i>BYfI zRH&-kAktaQlng5}%z#CgKMsk7LYs7fQAW%%o}$YF8R6m?yR9q=tOoi}AFxyNc(owJ z5-ok^*DGcJ5fbIoIP=pl_){gb}2%4yEl_P}>E;Esm_Q1fn zN5IF*{r9oSrKP1^hTL~jwC|!r?)8dIAM8aK+-hAk@&Y3-ORwFW6Rbf^j~ii+^SH=i z9#JGT{a9goTF2Aw;9}D#h}8APago?l4W?9ZenG*`VTZQ4AP270c9tpP_}}wV86D`C zR}l4bS;ylzB5mau(=>KB(-=sC;CwFSgC{f;x-_kvKOLTLiM)P0Dg4!J_T7w+;3Ki* z&lkV|K(t!>=XZ|kLuzWMX(Tw@Fdz{1cNf0)h}r&gMs&p0ZXWbsBY0Ko@9EbvmU0$H zV3z9L=s0;d)I!KzrhHEo(VsSW?}yu=e;mc6Fl}^0OhjlXkB{oA^!%fp-JPAn-AASYR*EZ<78N)Wb)vsFZykNXr<;lFRQ>M zy?hgGk~v5KL7gco0B?3pIT1iD+g3ujd4>n9(dWH(qgO-3q`-yqm5fXIUrvN_X zHYiYTHUIdZC+WRKE>EzbU6_!G&|n2nH~AEtWXf}qTwW6fWv8#eR1KHLAVQ9MKi_j; zVSbA-SQxzhNK6!^isf`pur%nK0ptMD`o!4!CyrP^sSq3OB%h>VFAd=4sB!kvim5j=;Luxpi5qF)nZU7f+8;$t*7 zqryZ|0>oK#fb5O<;KnmUC6PgeU9JqeHmw2&ee25=3(AHL?sjwd@R0qR7a7PH+B&Qc z2Y)j*x%7Z^BEoX{;a!nwFQUKnzSVHc7eezkXe6{HWnW+oyBon<3A3&rd4k>{qQWX& z6p}wGw2BD4n8I{M+&;;~Xmk$ZIZF8-eJ@bJaUri6s6fQ9hB9xTzq%+ESI$*}m_B6x z&mn!HjJ5xcIDU+F7h%|3_Yui|NnlvPS4bcm@ZRAMi+}zISZQ4d!UR57w&7#$><_u{l#>BlpE4p+1Tx9Z>kM>h@p~ zVB4yT$d3E3N`Djt?e)&W+#$d73w90)EOsM&xi`oNaIi9ud56<4Bab+px6gGhK>rIK zV_=Yre}w<8S?C=7%u$>>F5?jwtkOKCxudkt!Go*JOWwESN=Wyl zePPpjuAkhe9z&LqK*j!%b@RNRmAtpv(IfA?qavaqdRLe0YlN*GU)`$~O(0}h9FCPe zxSCkZQHnQxTWUfol|g{i9EyBud~Wu#k{SIOZwOBD_;&ALCU5t>k2~j^R;I75^uO?Q zYlrPWJj;XzZiecmZ*faYUjihzu~1{`LUyfr-A7pySu{Rh*IjNC>wUo~3($WD{Ohk| zbLOE+&(QFJA0MQvz>i19?w-D^noMs5lVkTSK){@rTAG@C6L6c+;pXWPhM6sHhaUGv z`?zn8(debiVyF`RVi0@1BBIp9scGq{sezwfLVFrM>?fh{N5+Bl%Z_MB&qP)NgZleM z&+BZBOlk!zmbZvV6rVL3?CMha=L>Oe<*!;+P3w+i1SXHgLLX{0hP_lm;gVqYTU=Y! zmIFx(_b9P`!peK?kOk?ByT`W<2VYNt|Avtf2x4Tlz?i5(oC?fU36(pdKUuI0wtTqV z!n}7U31ljE04Y1$z9u#Y=?B5bdHBl=5glW%s3#1-<#ml60{Nh^f6FFmh%uW)90oB74;sAs1t2{Hmf}eCl)Px4JM@-3^c^dfmsSbX25mpeH@AHU z2oaFJee?17Z4>x2T9=TMfKbv%6Z5cnZPswy_+Py$x-R6?N@e4`r@vU$nay$sr=gnd zXQAxBzQ`14AM``gexCw|hD`cL98S0AAKRDR%Y-P~z zc6`JPK!DglLhT_6)E3eQ;ca&rRRV7jAl5{)_?lcn`d`0_UqTZDtjR}pl|W_E1^eR* z3W~W(KuL~+1cZd4^bmlLBwM2Jkg&_kzM!klS=O9c=q}%#6XP5w_I(P!b-Vk#a8K)7 zsx=0Tbw&!??@eX#_Qww2Xj5LBysg8^zkZ#Z^2^g{<5MhDNiZ8%L>&Gd{yr9&hJ`d) zf&jJ<;QYm~%UagRF=G-=GD-e8V)5?!_L~;ZZusOMElkcfAb`lHM762v>=Dn1FRQFcohLn|tv?G(?tZ-#9`LkTD0 z%@f#yz1=8);gza+0UwfpPXAf#(9=*^X&UC)X~RFP8;Jm^{TF^TW>}el!d574Yuh|L z(8IJ0*)Nb|7{Je0iV(ovuUAKZ-irR@^axO0C~zz=9-0?Rebn&}>pxT>pdn*9+BPTX z&?*%5T8Fx|$xF=1TH~OxFCU{KiW$P6$6ZbOg(0AklwuG=&eHjdE z=LCMs|0ZV0%)hoOqUh~Yo68gV+Mt8+jo>4+u7<(Z0#u0*0bY+8YsLaWlEgn^)AOjU zv$G=UR7Y_!mA(6D={XHS?&8YI>gu<@0t$h@#3#Ils^Fg*#kpHw+X^CGG^^4)cGxma zq#>)DkMeucmK=rX91|$9YaVZKrpOy%bR*-!<**eu=SVeB-U{U0_U^Fs%l=~Cm2T-K zTvaf)3NF>P{p9fk(hX?Wc!s^Hm;POcch2x>fqJikDp=x_2+enqmDkR-6$I_m0Gx>I zFl3A5f62Gh?gJ$Ft!yY)G}!+oXluAzL z0OG8KNYQ}sWN1_aZ-x`0Y9!bW9IQd0d`F4I{1fzp)q&gl{J5EYFV&1}omoL{N z#?~&RKS_*JrPNBz3;{_$ED77N>=F1^nn0x)NOxoK>HsyzQ7fYr^4ap=k7LfeQo-7r z(fnyCMlmnd?9T&g@g5E@{8i1CqWbwW2$zhM)KEetug1h2#r9GMO$PmC_PMinYBPJ% zQfhE+tIS-h(vmD29_}E;nD{L+u^(k(9eFA-k+D#bG`v)dcm+%a`X?4M6o32aZmqc& z$0gwMWOL-N(ZcNXA10~{Uq`B97HXF5W5s2b$2Z}ulIVZj(t0cZN(IpRK#6n2@+#%X z{8r3(JLMS`qiAoLwE622``w)G8@w4{Z1nbZkYLI)8%Gq`@1dOPo<6knE|3xsA>DO5Jn_}F<;DTCQjkidc&HvvzlTa5p;#>uE{cTD;0lF_hY-Q$!012Y=G_ zoZV*XCLJH=YYv%S$FD!;*f3`JU$p};P@KUPglCP$THTr7p~t0IuX5fq@S*|8RR^>c zu=`D5Enl~pSK)sx5U1TYfDq=*-+>hWnx?3&t-87^Lrhjt%9vgT*y^1H_6>#x((yBL ze^VEQ-&T}gOZLA#j|HBi#Wk|LrW}DgGgRvVZNn5AJYEiNPK7o#-<;HV9Q9)5FHW#D zlP(L}xg(x+Zohsp?+bMhLx_ktQRnJmrrqP=owF`PMnn*zs}U3O|E(KC_`-J6ERb9{TqK#*Xp_4e!O|95*@ z(*O88xkf}eHzLAycl^8C zW8NX*FR1f+FTob#zvND%U9c6?k@REWkm3KJ3Se4*YJ=%s2fkOps3&VnX)FG+gruZ& z8C!#L8)#vg?BUY9&0)mfg_;F#^1%t2&I8QVpWEqa3~Ed-HD^TEVs;$#q#Q<33`3Z; zvWh*6YSt|OFA&rLdjRGgL64&0H8*YG=1wUz(^Dz5xJ8rNVRW$@u7{NT$u?0$*d>=Z zdJg8d+I76%9f7gw3i0xM@=e!32(QIcR!-XcR-8ZktGJ+6OGop#NH(f_H^LvM0dJI|yLFYu;uo zV-cSRvkX3Pd||%GzKFZTVu+}uL=!%s^nF{$U1YRU0n4VX4q-nFc0ej*~0#t*8v~?{n ztKE2)wmhtb`SOF}9o3GIQ>muAkUJVS)YDfd5@vVuA2E4~l^_U%>bE8k@= zjYYYR*(`+SudUY-mEVqFf1bs6Rjx8$v4yQUd{cbC-M*>ABssdzSg#tf?0}wjY158& zU|0{^I&%yu*nYcnNw^|x>TiBM)4SVln(-1lvQK^vJx@m6N(Mjrn*e;CkB*YS~^7rLKc=5I55P?qX^Fnh^PLn0zg@ z__-m@kCZWTTPUt<3I?Y|2y_&x@YG>pIIUv2K2)Rtt-(oMfX0xSDPc#jxw$3-;iw!n ztlZ6#8us9N?kCS}fh+Io8MMCq`G<^o2S6=5v+nF74%?q8 zz4@ev0v%q@R}NDcK-8TAc3vH#UO7VVeC?qj8{UJ<@0Ro-oi7;N;pZLqif-bB>|0*u zF3^-?8tY*y_23tIoS$$~Wzujr`IS})8<|z_UHB@_?&8&F3@Gj=KUN+fEHjz3l(SX& zVCT2ZuUZYQp-ob$hdDift?Mbbk5#=873b0Q%qY@IP5=J-yM5HMB1YQ5H6Uxnv&0_t zuPUeN(CX6%!IcB$G=M2-JL7um$l(bhWcX_Jy!)nqY@qjcZ~gR}ZY}0)cbq(Dc-p|- z%hy-ouEQ0%Cq#;}WNR;4Cp1se#zwQ@#R#aRdEd8q=xlCX{zsuyBDLOK{GQMK6@|oE zRT(@ZIY8Qr&Xa*m@S~`VZyijQ!<8rNC6dXwuAo}F+AdMeF6`vv@fW{z#b*T*a|J7I z>aLwDwV1De<5K8zdqNLZYFrf09BeMmn&iFr7T}NNL(`N{=eH{%(DaeL*d-S1J`2lZ zl6IQ7R?rpb#0KbJ4(EyP-$yQ;#$ia>i|mluBcjP9<_#fWY-0y{UU!zfC+7&~BgejQ z?B2YC(PO;A?BSnGPEb4O>yzn+Z3ftJx&1U~=ug8o)7_CpKMn`41B~d)@iyQ@HSt+u z84a$WeHL}J`HC%D@h5z?U4m0C8@oi6&dCJ2PIJ!qI59J|sr?R)PShK_x>dLH@r1_5x=Qee@R-<}o(Dh+VZhphH)Lt=Te`^x zzjOgI-hAY-lPn_Do;Co+TvKCx6g`2}QJ1&50VxERp6pE~^id>KHYZH)U zGX(7bH|XR^Mj#3aSCia(L)C8FRn3mZOSo+59%io}F(s~ur`@j{X_G`BJbx*z#;C-H zTrvRZGiXghK}znOS4&RK7@h<7h@*w{X1VJ%r1R}gnEZKn2*t>*ic^45155;kkp_lX zG1Vd{>vm?4Sy`WFLuZHoLK)9jJ|{ygrvaAQv&gA_M~Kjz%+V@N+SDuvR|+4IEBUK+ z>u*=;m+g`qN3xG348D`UtQtPq)q#zQVA@zu`+U~*EqxDLh;3tB;3=ddBk#%Vkb>}M+d!vucGIfl=#%0?ko12UqR{GR5YH-OqFjJwM zUNi3|y!qJbyq%gq18;ZaVHaie_k19WdB)K>lAt}$PkjNUo7Rlbv*XT{v%w!hCl@4u zSi(8>@M`FGvO>{KR;wC(B|IeflaC0nhIVvP{O4g|DNjJc-FP z$L=}01{{B(%;oULabw)22zOp77U^q@9Ef>aYr6o_rf@-5%Zc3c*Nr&J)V0#0ZF#q> zIRoDW2!rHaBo`PHM?WW7K%c#5A^#=7gSvtbds(;Xq!UY zF`B$|A#V0B&L~1|bkHtRixy^P`yQwCgVT+~Slug-BNz2Qa`RFRB&xtJ@h|PuKFw-^ zk@2YKs*6c~c3qCit&?kM*f+@;fo+}<@C;*}&-toeSYG|@G(Be^>cgLD2xD~+3;2=W zYVH}7j?Pg`{;#r~Kbh0lPwciKdOn1B5=YOVnloD#`F@`bXhiJ&;?VwfD9!3`#b~NA ze^1k4sJsAlIqahUJ+$-2b?>4zxCV0-9-d*%3?jj%*T!$$#>8}kMNtw|XdzGGvtU}Z z$LVjclv&Rf6Zwl+hD81);DJ66PTYZZ&vs9i?mNWq%rIpbp^CD3pHb~*i5d;#gpTb* z?!1;biRxq6HFT{}(L;>95vMGyyq8R|@xB!5(<(MQmxSiq=>0(+1(l7ehL}+D|9oTg zkfn(Q_a}Vf-J9T+nY0sPTU*tfJzIu6nSxqy?d2aC9671Mfep{k1F{)oxg$OmFW(6@a#u8^9SWZD+y0a-zNe}2+G1JpT8rYs20aMG2>EL}auaF=A zFqO)!%vXKu0sH%s+}0UbuD_?nJHNb>&nTgBka8K29no z+#9whjr?fsjtAL}(?c+Nnp7&~er0~a} zUke@@aOJYs;-754Jd_aTmiR8(pr();^4j>`WDq?&#_T|ilK0tzm&zBf54@#Rvf?s} z<7b5j^2@&)GXxPW5sPR+KHZNhylVMC?yF1Ui_}LEU}Q*r?1F{v=eLR`ZygH0vVN)9 ziov{xZfjt3$HV>{Sl+hzpC%=gR%|Vv-za%N2L|@ZDaa415+0sQ2AoNa>`SUb7A$`^ zWsgx6xj90+Z%ulo7#clGeKG~mdb{qJ0Zkuu|)O@Dg(?hmKa#~*#)9GfvD&`NiKy+as z%6DAXu8A!tY$6-vp`OZ>2m1R;ncP%@@W?KRugl23303(T?ugtJeBS~aZ)yvZHU8yg zv4vHUB9g{aO8y5>_pAPU)D4yn7z5~_ABX=b=}l`Nu>NV=s$n+L;=q%E7%0HCu~uhY@$b^g#bXp(|I}r~WgBHBbZW2i(hr_#y!X z$}giFsmgT!OsYz2!SE;F88UPA1RhNK+$XbL51f9QhWp{MnmB{>q4xeaRjCEa5PgQ= zN2F83BM&d^HB+u$y88vvs}8a4e_yAnRV2b+s|r8RGd13Nf)s$PB%!@+nolnML|cC; zG?B%(XkcXsJ|*^r5`PgnK@P-Ce9xB5-cz7Vwww(_nMYuK2$M+4UY1P~w9>~r*nJ`+ z9@d}SQYI64nE2$SZUS1BiuUvXLV{&U10e1){d+pS>@d@L}9b5k0CaD z8y>x2~ z4{0Q5Gi1;Dwz|9f?=HRS-`*tH{5Uw5f(CSUnl1#N>VhoNG1RUL%lqebs-H5V0dm-b z%b)FC3;%`Yc6Ib#Lqqk8VIA*pKQBdGJcVJ!Gv)fAb~)IA*!PpU9g{k!7YuE#gzdr+ z7Z}GQJ6344y!`DGris-h`1Z9jdsaAAmeu3d-PL)hQ3Kmo_BtI@AqStILgKhoLTQR( z_t55x@1b_EzBFoSejOKn*xo10!WMp3mo3hn_gQaf5_u`?J7)2@D<0MgAC}az40V0? zAZCWAoA2Ne`)6l}e3oh(h%mthhG=5dl(2rB@amZ~F-n&T1+94dGK*iNoX%EQhIfIn z1%{}gX=#h}rXOnFooi#;FR>=McNyJc7aq%B&+g)Jq-F{tsv_^A0$utJICGq${U%G@ zQkPFU`Sdt>3l-Wp|B{qQ(e#)8!R^bW%V5CC{0mwI5EN_XY?un2&dT(%c>Cr% z;yQCux6oBZt>kr@0-2$pA+eS67t&2)thTtL?KG!>jPQ2=m+Ee=7OXn%Fwr7Sn8$9Ug{eov|~9h=yEghFh}nACrBe6hvF z=rTXQaz?n}zpp3^ON0`nWqs&*4L!YbR~ek;&@@ zHHPhirvSBC8>`A}QmM)g67G_r5t?>_{_U1zEW%jw5~8l~9GVCXR9PnZgBpsL|Ae$t zW{OSPlw_3fi=vqLw1{*I*gsB!npT&MnN}xZ*U&dd?K^kpuzGu*WFD#TW7HrK#U5=s z7JF*y$wEf1heN1$K6QP4Z7&Vew66NXNnJ(TKih1aRg50lj$q3 zE9_C4@Og&ja`iLX(HeZl>=zhloA@uXKOg~+q0Z76C5-jU?s%BPBgjuze!;{9ZZ=7q z9nIrP$y4;nU4CR=_-OtsIRm9@+OMoEIx(Y~y&Sg^QGnE5$G*w?X?|^xM4{N`pm&wF z%>mz9&uf_x&Q9UJY?iJU%y49-gy)t{nU#)thL;3RxT2Y0VR<5rLrV5$iL6f-&FeR& z=2Q+(p!ho`u^}-@q9Ykb(yp)q6)66#Ipxfbai{3};HSYvw}wDCEcR@^Hw10bRdtDH{j1K1 z4`KBtx6Hl9q9uP<_L=?Si9kL?A8Dg=?Rt$v@< zM5!ETSFofELU;tZ2qJJtjDDc~t`$y+JKt0P3$J}CZ@`6XO7PcLieob0`9t!6#N@bN zpHua2B93$6d*T&mm2!pVt%l^dVZuo1ne(X`2|VNJ0JC}rTXE!+*5R0eEXSCHhtW2B1Qp+Cw3Y*b!fV4vvn!wVzmh91 z=^>(A4!=F8kh^m~`mE^NL^K2c*ybbhn{}4e_IR;DYMZ{?@6#kabLLlWn=~-npZ?v+ zUkN1slnT8yUh6h&@2w#D$LLSKxS}ikNhlTh0-CSH4sR@$IoOlKibh;}-O`lnYd^sk zB}4uahNDuiWM#x2W0|Z=VZVATL0GI`&pIFEwhb_Fr`o_mb-$Z)6V1y9$7UG?0sCo9 zv#ZanXSXJ6*{SjJ%!+ z^Ly{bk?DYZSNIJ~Gr)tls z-l@8vP{&eYY#_&BZmMJ<&QZh+;uAb(*JsJys>y8ZL4WJ$^^yvRE(Hvd7pXG(^!)SZ zkS*ZN$b(TWf9o#j{3KHB%cK;Z54I~yQ);Ta^?ha(V-M+wv^bbKy}rbLx=h^4xWz3% z(@*gpt&Qx8(A^J%;gg~LN=7jhW_PsEJ{)@?PkmYv^bGwB4UXEdN-iiU81q(vUV2T; zI=8xMBikugPv8|^(E3q7CkN2 znK4C0&o8ZyPG^+1J|a;}Im8Ld=X{nlbwCUG$+EUkIlosL8m&Z-d)lB1QbR52#|x%A z0!$vA$bV!ztr2&-0a5}KMBi6Eo8@bN#JLb5+}`DC?ksoG9loFT-8q?av`hMm-V(P* zeOyGOj0%^|IJ9ZGO4G~R!B`Pj#&tjI>(%R8${96C;qe@Z6kl#yE9jtnB^W~BojE7& z?NUd+_SEQI{#}R4)%l_0^wP%@V^Qp{+6#?zGLYy2 zFP&C3_{n&>&aQNxpc9N|0gkDrV6o}Wu>N%Be<2qfH{o{p;^3&6{0tH*e%RvehtASZ zeBwfcs22HCp{{++Le-|go_(kbrPqnM z?wb!`gAM8Z8mUm8<}*;BN>OFWp-n0jAX;Qp6?~__zTkPOUhi`L^N0M!+F4A(U7`+3 zP8)@v$>PI%@Z_?v>rPf1#%Ae5lPz#H2el`n0gsWnm>_N;r?tm~@A>9Nd+u_B=OG zccI-}XRM-baD9>BBh+^^w!{{YKrk5$87X|b*_-zMZk{@~ek1^qAeb^}k8nVs$Pq;a zg||-0Dk<3N;E9qfm-9KVLz(wFyp$Op2U0*SYE#>3t@@{3uBR~w$s5u{eXROeu7BQs zvS=l&IBgIF-cB1bb2dqZQvZzz(zs8gh6>=MOPK-~L*lJaUiQoBR)8`zN856c&&^O? z&LvJYi{B(9)5SEw#dP#r9;pa+T5BZZ`(#kMp67=_GvSn&Tpk4K{a%tEqvJ4Oy=8ku z2nBU2RB*nRvJ&Hp^yvM_fR%%#W%Ks1k9jh}F%e!3Y$*DLyX&Ky1fs;@1J85v-L#wV zyT}n?No-%hj*&F%yHJ)(-W)L&;jRsRQE#EGK}&M;R<{~6sO9|eg5?lq8u-mOa4~Fp7rme?RL?z=BHib*}iJz3>yc6&KfmsUC9} zaG~W`IAAJcAzcnbU8QORA0cNMYWBlsPmy?FT8@^8HeCqJH6yHA4W^dBzI~^RyYnxw zoCSFt=)gg`sn02qiKz-rpE}t5Zyy)Z2c`Gy5pJXKLnErvQ$cxAkL7^S;g$@lN=(ip zehV2{|1D9uiJ#2L!wbR@M`7I`=l9QpW1PY~TBH)E4uI#Mm}d9TJ`IBg;^x=qH&rYfttkauMgrqTq8u~Aui{>{ z0gOZ+zWvH#ZrBUX0(;bA7mr1>smwamNoV}dMS;i+cTJ3{nB(Ew6~F2C2|a>|ZGh#2oYLNwK{ zG#_5b5iIvZBAxR{+js{9c9rZvWs_75$d9M@%V9ci`#wAfIL%67YxG*e>t?YC2{1~9 zE;uU<8@!?J(n!!k$~l{uvbRU@R~VWd}118^2wwAFP}8p5MwL;Ztl9etq7!# zd5)c7lIBL*=w%#M4&~Z1lBYcBLiE24JZihU`+JPR)V%7nvFiWTN>OMjf`yjaSAp+p zx^d$i1ggG)H$a=Z@3R!1m5zS<+%)#bj?t;#g4mqCx%wA$TXO#my33GdJ@Y%xGt6835)};zeQVr&7M*zcD@81?^ z8*t2!mkMTK^!mE2lwNTm38o$F*10B{0O*DQE!Qr18>?&nFn;%vRLn<7;;o#cns6b+ z@1bgIs7-J(pd$ZB)GsbWpwOAmb@QW=pSO!Bx|^xh?9-H43it0R_7;2)He1S38)s12+QYHb@2ew zS2c!98&=VRGQge%siNYx9$fjO1073!kPo!5nsd+kTyR(8sp6uoK(5mDUWH#ejRYQ( zJfTv{+Ne|~U4!*~5c!h0`h|d96b)-cUvDhz1a{*iVx+UxyfL?V_K2eBo}Ot=#8uW= zdF`Q8XJO3e15aNFT3@C^|Em$C3S5_|>CB%)_La_Njw+&R&VT8JJxVYONHQPam(;uw z1nTR-Q=k|Et?OR;wwkId@+YozsxG!eD7rs=iWjD~ZCKtxJS*JtEw5)ovsg713Y_Z3 z>}XFJE2&CM{pIRX_Mf4GMD`jH(*Dw#EYbUY*UeZgh;Bv0X4vT(ZgeNpPr2ck*_^uO z-et_v>S|E<)ewEo3OyUUA>uDqSr zyUM*_(Y%GHUl6ERzvO|#M_99M8Z2|e>!%H`uL6;h`-Z@f_Ho!;R-c&nZ}h(}23%@Y zs_P3>Xg=XL6B)ExUHrV-WK+Uz(S7fDm@;4cOJj9GbmLx6=a=sWTcu$?Lw-C!BX_0;>xkM z`0Db}N=}~MOC>8MXO1S=dSR+L+a+)KUfajs7Pn#PQh*H9s;|`oIhH+G_LAfEn9Z=u zv^dWjE99`7!*tgq^$`T+`iKeI@Z1{twT1}GY?BsC(ni^Csmdy`Pm=0vL534_!>(NLU>w z_u=ii-shkdur}{EZtl%ESuAbYB(DZg)d)iCVI;IllO1O9^)@e;3plh9`u-pwBdxzR zDOPgDUVDO@vQf5^E5&>tO}HAZu1Q=ZqOt*_1##h5~=cxY&w+#`?ElQn> zZ64~2XKih*a2dRVM^IuzPo$O`mRpJ7wQ?$*Y>31cmep7mIJ(0HmfHn|bA^qiboD$1 z&z$3n+b@i#;UOAF+L=?vv$(E3BiT(abvMo6v|o~0fS^#Pr6gy6X z2KP#eiGf1ALY$qq|D`NPTmbiP9$O~NSzyZ$38MG$8ZOWF*@*?)v_mwt-H-R zg|f1KihS6^vX~KZT=lMpa&vBqC`~_pza>RnI^*6B8P$}Aa(z0(YWNq(@NO~r|1EKq z9_TLtgq|c`j}PhRCUW89Xz9bnbj=Jy63Y-nCZk)6`-e$w*108_>g`pu>J*=-7Mki!wq`eKeWHBkQZB(Sv>-j%nMFWLa%EnL$oB?}l z3!xDo-;HpqRkHw?khy}z!htpt+0+MZ=;$t!vCxy2oF(CL53w4+U8?o{jn1iLr%)TK z8AXDi_st)TNUe*EwGvcf>g-U4>*!Xu;YV!%3Jy_3F|~`89(a0Tt`0_jy4lFp{;)8w z9E9q;Yh&8So?RhA-0M}wunK-!J4#iVic1>}wlBa%V}sQgEAl5Z2Upc%c@JKjm>Y@>)hl=V7u|G|1H=ftQT&`K zEtoa#)g|$8HECL~EZn5ng5M}{e_9Ip!KhX8TRF~P)INaE-`zuKO{&qFCl9+`27%p% zfqg{69X`kUzF$wI%aPiFy5;K+kqp;|eICxi8A~I%@ULKML<>dWDi0baLcN}@jQ-bn zqM(g5#3MeV_GOq-Xo%(c?PdSZ4Ef7&>`GY2GvxFY}!w)7l*|YHKziYT2>{k){ zFdeU-Y8~fN_YfgHWWA9H&a!QLnR)oL<(>VfBKP~>a=E6GYv6zTqQoW?T%LyenVy?; z?YD#nNQbV$WOxI?nL%ykciv4BoQ2ap`t7WwpMKOw@Hq_#x&rUzq6^xMduJ+t{mPi? zrpqah{NhQnK|u#ETvC8IK*B&9dTKzD;fN0Nw5?5dG&O+KoFIO%gC6%)8YM$J)e%3q z&~;(hd4|Bfv~FXf`>KRH@s7oxmMAPIa2Lp+Pw&5&vqD+kl02?{YalluN*V`^xQx<9 zdC6aIvu5qC9vt=_F!$ajjyW6=I>>MQU2N_dFinLquQ8JP?U8qV$NaK;@+CAP#CuW}doVrD19Y?Qk`M5s;F{IooZR6j=yg0&^c>s>J~PgPyxjIL zbTL(KGrU5}dh;!e3-!fl0;}o*^S=KiDd;J_K~Tm^uz(!;Bl>b%DjFwEX-lVa^t7_+ zd~@CnlS#3O4$~ZGJ6Hbfpb( zKydUWH?`eZ0-|(H=vi=>vxwbiWr;TK~ti!uSm_(;M3J5E|#Fa z!3~R{V37sg4r`5gi3QGJ=e{3)Z3EsPK;GAvY{72Z``m&dN=-F@>V*kvWT@`h_ zi}3yHATxDvB7i=AAA&$F%RVpjbN}~et;Olx6r$n17}fw$$p=L;U?ts#s`Z;Z9?f;> z8yA(z`12uXG8nM8;0}lVUn2(Es^M-Pl8cF#eQ6TWFP>}0i&RI+7`Ti_GJJ3uGH&fxk z^Eh#$E_a26@Djr;$$sfRY9&i8VO4ZU-}5!3Bfg-?U&IqNP?VjKrch0(oc$>WUI9{p2_!J1-$eH6KQ1V{}?1PY!1a{Xem8k=! z|ICm;@#EV2>UGUAoet^-y1oDV&t}a+vjbu|C@O`Q+=lsanM2#h@lvK7pb=PB zZqw31QRiBgdg=3bSm@}Wn$%OEnwq58_})zHle1q>3dwyx9z8)MHey8!+FzDqZYp53 z1~V%q+);ZEniWcNtli135rmH|9=!UgL@>fFBllM0n82$p|qNP;=G;sZQ zNzH>525jg8F7c=MbO=%U0}Y zKpV+i+O&PPPx)M~6`xwEd;6c+<>MUFzaN0>pr>>S#4?lJN2Bbsq^i|gWvnKYYZUi_ z6*|9BFbXva(VdixAAUg^!eOPw@Cw+chv+wlkP`!klI_vpob!|wBrvoJic zq*AM)X^zs5m|t)T3w(Pyc6HcuciW%vRQ{@Q=0&wEcD3Uigy}bxze#jVU@B!^`%5B@ zwPv1tLVAJ~;c;X8Hl>ZSC{CAf>qa)FMH&bpVYOT6DqQAI9);kieSXo8nzg7 z8_1{zstqIwYOq@8woQw($dF7!be%M`?RjlKG(=V=0adtPF5(sE%fiMu_`-^wi8L@+ zwD;<|S4ZeOt`W{qi6rSGT#43R1=ylD3rjMx;=`Qn1Z^0>Y-|JR6@ju>^TuIK?X#2koshnS|p`wtVPwu%UeV zf)asAef>VN0!xG5!TC18?+&NO`A{|WTu6m~NTE>?WGT-0ML51=*_K`5+5e;JtHYxD zqIL=C6p&6qS_DLDXr-lF7`i)$1_1%-4#A27@eSLFg3jU@+xMqucN~|WZ;UYq z7__rQOq~tN3LUkcAk04f9mB`1oA>>x^Nv$wC}Js`Nl4uixm~(eJku_9Fq7s zO^$xxxPwJyEYjn+J1Wz`GTvCL43Uu zKb>Q@kQIuAM5uRc_lIlZ{PkTCkj>w&3&>5Dys~dhS*0(C53`XEXZ%HrCV&5G_CfLb z6j75`Zh+s$3kK?p$VPe4rXy>**CE=Ad0TWzXHNR1X-)^JnI|dE2=^omwbBYTj3RT* zh!(K2kB3C;x^&E?d_`bH7QFqY)2a|r{wsGV+e~Fv6iiA-N09TOZtvw!D+zpgVVaZs zV!Nv#(R<#n6)Xx5Cb^R)dF1-Vw4@Hnzfcem?jn#Y?L>NQFuqky?RoLl0YF`q?EW_e z0+VVaEMSxDY{$?ly#!fTPQyg1rSs!T1@b#mXh8Co(e%asY+6hlR{xo zC`~yuifO1jFKw#LMbzm9&Ii9X8!w5lhr^r&^eRCwO3k0L@A9O;X zBx8K7of2*aI`wI5)c`#>p~dTygMH#)%y`Uwi4r-Cvw>sNu668n5=9Edk8a^0x<*Op zzfmBDpO|W$q-5|mCdnjj!vCkcW!`ik;?YQT2 zhKJXo-++AjH=s#?jW6s4!fF z3pf!E;h`Pj0AiwtpfB&YCZ9>FKz_pgVAF)@$gKpXJhv-r|0{_SaL>VV)sjFyr0UO# zxx@!2quLB7Bjv@0H=7L}e1Ki+bQ_o+n^H}0OC4~C>bref3dEdM>GGeRgcx4{}@em#RGZ!KWM|y2~4M=pjdiV7>@)IOkOb(~$ z0;!;bt4P}O6PpURejnc@I4YYuQr3}51dmmA?r~y_`7Ftn>cp#-!=8gwLG~LI3(I}S zjon`CS{q2RN`J0>Py(X-9%75wa*p3yf6{hv66L4y>xi34-LcaEQ9WD%1ri6lL!-5; zhb*ECsL*)X)Ekh#qKYzy%6yJuNuoa(UO9!v&;z0~WuKBxc@f1iUDt{zDZ z%0JBqIuYWHO%Nt8nLLFjb&O3VLb}FNc!l$zTREwUA79?TST}xH1N_yApgM4v)dJ&# zr@`iECH~pKtPlPR#(Dn>g$NrTEw1#8r;TIs3dXM+8fiAEZpMDowQ1uAiN@)m(2}fJ ze|iHVqZXem6IOcC{HyaBWwUxN%wR9P{k9VEj7kegsX{0IOgdQj&PZ}hjL97Onjbxe zLqmt+Ab21U2oEn7HvLlasKlvr@##(&XIlnTr=H_Ens>QZ(z({Wdc-5;#YtxNDE(52 zrcpj2I+MAQ3Nh`|>i98%v&%~4?+qcMdHn0>kni5&R*1NnJj_Z!tc=skwxEP5|L@&L zD_hZF50+-Z?y))2W{EKnUE-vYzRY~?#hW=RrXYZkS!YT9?k+MR2EO4smY z=1ttE9Z6MBr~C4)epv@-H9*zI@+9$-SJQ{sW$cvhPxETIE`{tB)2 z4tuCUp2_wpK|iv>U*u=LmqwL1`3KNe+Nj$imet$p!B5y=&eHJ3Wb(#7#gY$@HYw`! zX0PvLTG;4J;6wXQpJmy`QFsP?x}!z=Mm?lt!(- z17?(A-k7fn1k3@FVp}{4tkx zyWMH(PuDxpePb=1ruUMK!90J?nK|NPJq<*>H z(2WhfVr1_pNNpJ0In4VZ%)-dw#ia|f_M$s_x8er^x$Qv`5ao?N!bI!N9>EI>bOOC2 zE&aWNeBY^a=l$GZV)pY|xBi8m*kuwyzelN+zaeO?KkXaNOnyNujBeUMh|IO|4Of6$ z(uC5HD?cdTu+^5$X%>S;>{b=wFH4{cS(!Ws%+UONS14b^Z@F&zK6%|b9O7Ms^!pXL zP3a>Jh&FcsI-`{V4RZhlm+TK7LI4hqNJY_HBBx*cFp!8deSBcG z)-qQ9(~9w}UjsD6aaFSm!Z#l*2YT`xf)->*IQR&K`pxvoNGRkcj34dt6oaok9V+$R znKQ4PvwDN7Z8QA=3Oz~7IXE~*=f*|)gJEYE`0qwls#9mQ37kIWAUHpKO_*8sAGTRN z5-No*93(>C(D5}2Wo5WzjO1M@?j@h$jWt5NXN znSkJ>O4inc5J;@-?ctI{>r=RN22(xSz8Z(PQlUSNThO835dedQ@Y_Hf%L2R2>95ZEwcpi}E*G=b3SHmHdiR^B z2u_t9n=|waFf4rn|J^L_$g7DC&L5f55GOM*SkxC|{=`p;Os(iwZ!Z-pMuaNYAeHsU z2;11llgHd$Ec(OX8#-GLu#m{XA6uu-6**V5%}laYyPTwikgq5+%!@W-mc%XhCRRK}J3}X`c?=9{3u)Y!1~n^#7Q{H9~$} zF|#3vkJfIxfjz&LnL!Zzd$A&@Hd+NU!=S>6;OiDu2AvPP0?0B^(oA&4TJBbl;$zc! z9Ew-yk96rcTjf)6EvlU1wc!%ax-uyeu-MS>T0+8NSZ>gu=Nb-MMxam`v(CDE=NwUI zitZ3Ej_of?gEHQwpkouzAN=K`8*Q{qS)#()UqDXiZjUGpiJQQE9~gSImVvw=afawK zxo9SRaH9J$Bv`)~7;Y*Q2dVTKWgBVrLwfs8O18TWHj@nIX)>)3#EudVUYi5A-UK6n z*$G1~R1JH8tg6mySp%kLBQ+y-B)OyFVIxNh8eNCu^aRcgm8r@R8mCJ}uF9Sj0YXDH zL~#{7HTh@v8YU9EQ+gXXQA146Y(IXe%0qQYElaI}KY`lGs2*8gna4ypvp#NniEYHN zhGAO$$9>s->~T0=4PY^uZxhy}13!y}7Et%{m%Dt-9k81~pU|u8KU-cty@9}i22@}a zgo7fdVnUjK{>148Nv$Zq%LR!iIM>~O*mickNv?y zld`i-ez7|hXHGAwp$OLbIUFBj8%t?GV_A3R_)wuHIl{IrV2ahO$SB>z4z@PP_6*Y~ zDPmrq44ZLYAA{l?Ltg>3LB94FOJhfxq_4`ig*s{UeF*lDd?TV*OX@OSIk=6o23nPR zcco!w5(0agGVBBCG^PlSy*vpCzBxI$E))|pYSk-!mOR{IyqNoXhGbiefzS2^ZT?3rC6hB zvv~(`uH!#?@!2X1lbhGUd1`)#%%MUk1-xvx-=F=d+vc;yv(Y3PVrw%^B-@0qj%>tS z@>t?xDkrw!Gk7tyMLWy)wPUOj*mRk+w{BP@q8qPmXS)vYLD*uzz<8W+JWUHMG;9Q> z#T>R-BrWq8J}(5zpj>PcWH|ihU|)dHqg-tMwKBAvsMNH0DQ~oH(w)SfEYz-p z@R{RW>^~gMsD2_K`|vX7#p#@JlMPIP_pcnXq3Z7SA5XwqOvT`;rz16coY)8+0-#yQ zZ3QeK6|g_Z53UZ@s9oBBTyEYGkMq+e9WCEt=SjLqnf{ki*n(dOo3poVkZ z_hjx!t3%%V@od{rR$RsQ;Baz6;d z4>7Bda;3T=R^t94jG(wk1YJEjWD+chf$kt)mKXBYO1N^wzirnT!ew4hi}E6^)&ad;xZFU}#M!Knd8# zplK`I7%Hn)r!|>~rse04a1Q6D_r$TeXdSvsLAddd8DHx++r>gw;RckBt1tY(S$&0e ze(jg%{49Q$y5?dNt#x=USWdNHxL>Z67{b$(#Mz^(GPWHG~o9xJB>Hj{YzB*5E zM~BlQ;u87g5#k*82qSclu@X5$Fu}V5B|EC3fCiB~603??>23Z4b#y-d7}M$T%=`pKjGcI@cYz=L!l7 zSy*&>gF`;u>{r6aZJo``XerOJraz`DI2687f%xd3{2@wkd(|yN1M>g1C_%dZXQ=6C zI_&x3PnAMV;>Cvqa28--hN95z&E@6BU*?`6dBKC*Z`BtrJdK4d1~>Xy6dg*XEhXk{ zhP*!2X1ltEY9jubyXpE_?A2j$pm;CE4E5=npo0nOw1#xYDuJ>FI#tE_Fb)L4vOxT{ zAhUR6EP-f-U^xx9b@sPUQv*#}pLq$6rAznY9`pSS-gp1o2JWYOTD~t13WOVGzfA5W zv?0X(Bw03(KiC^CZGZQpE%==~jKPoVclq0ulFH~~Sr@L&ROzx-NQfM$+-bsqIK)IW ziAV>TnMAxJ_1#5+Ag^SK&MaHwXn3-r``zTD&!HXe`YQ27Gx;Z<4PeZulc>wdX93@m z$BxdmxEx|F@XcEXWfuTM0P1nEs@ULjDvFHM=G5kOKlvS zbHxSbj__VYKz4d+B5fO6Q^eJSl#`^%bjmTf7%E2iqszRjUrgPrv`t2Z=sPS_;g=OD zy>&4SUsmyB$Ki`lYhR%KxdAnUXy zGtas^vdGbhyu1g&GSK$JGSTz9?ZFA|AwUD4Hhle6@I}?yx7gFI6y>i!9YXhN?Q93# zZF^a|H*fprI9iGUmD{~V|0+ln!SYd)K8Q3y3iFfe_5j}d<#)>Q6t+eBR(URRgkUVE zfy_zG7)u=OC331Y3-hxn?5c!8B@l;XU6EWzFlWn6i#%*o4Uz#*6yO_4aiY}=buLxA z8kc~UMmkJuOmVb17fU#B0OH|vGY?CUuJ%N2H&z-&VCrvN>9!{n7^}kp z`!I5Fhf8ACvhWb|i=JO}0ez!vE8D;C&%B#0G4jIcFl$X27b)I+8hBzxVqkHj(#Dsd zBSU!BZ~$@K>yLoklcI%(Bnp+PY~HI@Ftlq39;mdhD}y%b(-GTRjj4~6s(zV@e%52@ z-CFz_rj*_HRb-JZAU|#4OaC%V_O@@8JI1RR!IbJ;3EUcA<$3$2XqD{ zkUqh&L}DCbh5LS>a{KYcS|3mRNbQ3~#}@?4_1ndT$5pLdB#{ufZ`?wg%abe-?d}l| zqf`i3MvI=Ebhcay2KmpSGW;gKZZfKe*$fo9WSkOpnnB%;6^YV;tFq_o_+`B<&ZgHp^f=odRR?j z#ADnN$`N7kJ}QA=HlgI`y4D0RshKW$-WpPquM%7ec*QKX0Su+bppXr z>P^T~DIEX8(7;z;Y5u)%e2V&5Um855lIonrU7_$RS0ceOfD~-&OgR#Vb$?yy}9Z zzTbMthW3dU7O?IiKNh_e^Yd-dqBi*Q_~*P{v%Z4YcguAJ5Ad{`WUNE(j86FJ`249* zJmkl(fFK~5DvLxw7zd0TX&!v*h@jCcSj280WOaTSDaLJtu_N%LO})4ZL*v2-O_3@3 zuFOy3j3xG#S@O|0;hVW&bfhzQ)y{Ag2OOsR$4~oF7?`b^4Ux9{G~&b8HaA(Gszc(a zBEn0XaAdnl_Kn@-bmmm33^tS(b2jzT*S6fk|5;AFmV|ATU# z)+cyjY~=Q50FLfd9!`5?$bySFw|4?Ev6xPjTeH#wLgZ~gMyD}_sJik50^ z^gCyN)*2=)g|>GKO~hjgPjHN?j`3r3_G{)EA~yZzI@mMx(OyDtQybIzFwGrEYB7 zI2p^I@!k*KDih&bCRB>2c&;KoX&-QQRi2lxFE5+-TVCQe-L!d^-TwL-jJ`X6s@eLo z8K%%0d^M{M?(ZMP@NoXwU0j6t5L3JmBFUShJ(?i|aZG2j2S&QnP1+3`wv?u+5{iHL zW6oaRl<^w9lP*=>$5Nj|YHfp5XJ zdD@-}!k!zWlPL{h^0P#E*VIL4>^DPrAJ5aMB*2{H-&cxGt>zOjTIel5t-tEU6zTHo zRw*f9=>NATM7ybDuk3T|-Vi=S5if)r z%r04s_z=L^x=1oD*ALQcw=qUrrWss2N4c3liYBTy+BGHmyjjoMa8Af#Vuz(&hpE}= zq#L7SZvVkJs`bqy=C_?0MT{7A=Ti7=B!4hE{?b)3k(4sWr=%i;oPsi|!4uWU)>{qH z*+SrB=eVh43fMIoeS75IJ!FTjSiA{0iyPBiBt~QP9{oYgy@My|*A$a`$7WHA&mJii zhw_ZXyVlfrYq}slv{=)Zs%P~z)*!qpAjGvyX=PfM`+7t5o6SCZRZ zQ_~%Z$>_{!cU6g{wEyO@@YoId1R9VYMzb)HuewWRb zLoOU@A$<$0aYq|}gGGd1ciqPvK6QJ?tmC1r7&%FdM zN5wqCLfm*;go8@CmrCH{W&e>Sp5iNVKWX&OcWRjin-E^kVi_{NcUYVnvMEtyGH;iU zEE5VhN)Q?zUwgyF3ZH#NTEq{dR8YSRQ6hKoqUlUqto&J@t<9COTP9ZbejKJ%o8=2X zwW}O^+@|;XrE=?Yl0V%I``x#v%gI*8Xk+vSn;`Kyg;hJ~vl*b5cHVhBk8*6@p5zk& zJ%nqlKT06+TgpSWN173}2A?b4|2aGi7Lgpxv_qJ@PJ2YD^ZNB~0TL8`JHv-qJy47l z;65ALnC0ZRXIO{ zaI=PMC~>Aq0kyK6oGV-i)!^J|s>#0`QQ+dw{l5#&qwX)x(X~!6`(`iE7b2ly5`|iR z8u`}vvF2hWW16{4%i6hXEJ@mXCxZH+3Qzw)t6z_lUVE2)D1%7e$8++<>im1Zouy`1ieJ?28u1fW~Mz&tq7=r7f4%W>tj~ z?ZNKuE`GavBu%%M{9tniO)Ug?LFJzRwPLa`?CLn@{Q9i$$`<19AVLd*&d#6wnqQW7 zqm79J6#varRQEjhDQ%_tIHUBwR@p)bKLFWkvlLF(VqHW;|2s5l<)s7=DgR^2Ty`B8 zhr5x>ZN|{uiSd%AEo73X!QskXVtE{O^y2~jrf*Q3%f`HMU8KF(K!kDgukm~_4hW~( zrlZtDd$F)2d$D=t+><0?9KV@QbFcjPKOnC$0S_6YKPhBe<=SY&A}rjI56UDX1S7~e zqXk>pq|*uEvElvw(AneToXKmtynm)ipVBmHJZkja*;deVZ}5^8qK{B)W^ZI4*=g=B zw69Fo`88x&*T6~%{^G$PsaEJdhNu1i{sG__f_%6M!YZX(1e;+>tvAmyf^5`KuU{XHp-#|U4Lm=C zC=Jp`?o6|k>@{|8F`P#Q>mYT22NAm*UGy#Av0#7213;PQ=Gt8wc|YxQ3&P zP)`)oQde3HLyN0rUaWm(=nZ;94*h%%mFzrj9kYDYiC4zr>)YFZ5=|DcI~eZYN*L1r zJFzMSj0X0nK(zeMFoux0ougP6wxJ2l?%RTo_KNdssSoaXGc40q{p_MzCl8G$jKY{X z19#o>hjoa@O4g*MdQ3Nw#cR;CHKet_p>dyPp_2t>{CSV8EGFchHoiV=I z5137zj`SMs-;BmM7_I!^HH>>|SKlrU|EB(ApP*1b#z!q=p91-lN74~UG&}72 z7vc1bw#duHC3U1ogNHk@U!D0PKELP>+sNKi1_}^;qJcsD$%z1D*F(Tl#HdnT7?waI z$vP=0#hT!3^!p?5_;ZPBrdKl^CQ*8X?L-XWqLUMuy0C>#_BGpG*B@eR{AOZApW!2O zv+QrhNz@678d4O{o4WR5G{wk|pIq?l8uf)i!?a-f80SrHs^t&D?W>#%oDf?Gx38OT z<(vpCj^71Wfv+U>Xxt+7!u!9Z+dbFdR@e?C4j??N9$*~urX!YSoC#O+N%Z7O;G!Un zR`iq)+IYe~RF)i(q#*(_c#)OQAR=`pNuT+oxHO6aCfzn)=k(J*=5b-hfsXCfvi~!w z{~kQnQ~+u#jrz|7bsIS-VGOR6qK24n`Y!98m?lOpJm;1=fx26ft91@AVheSQp4V^o z63VG`bdMM2i5Y!JTMEc6XNqUz_A2 zr&q<|g+#L;`;?NDlzt+`G&5OoYFo_l(1zmKExl_q>S|!v`ue01C}yh*GSr$ia&ORX zv+%3=oMrQ7QTA4z3`Tmf_^a{n3&{oQpA8XP(zYM^cUmARrOl2IV}^vE2%J3RU9UUs zM3QTjzHG!M1eu2nh^$vFRL$Sq`h95o>VmSnW;qaVBAx8}DIA=>T5DsWk< zDMRc^YJbNkhEx`P4OQN0-U|=jSEqgstO{LZ@{DIX{q@B{8^ozv;CugGJR*5G=-le2 z?Jt{GW~5~lG`bc3HL--`_G-Qn{! zlRkB{ZAR_0N3|$O+#>F((KU(UTyh$dO<+$i^Q=md6a`LEi+3H>n_}X^QvZr z)p(c4cx!e(!_PdsJVz?@V&CX5cc!Up>r_JV6EnP*Z$Hg+th;@%%6X6aj2p8|8X$MM z%ts$TymPr6qDn-~Q03b_hU$~(7aT)5+7R^AI+}>bWVapqU>X*qZN|mV-=+Gm?Xa1mURS=FYI>Jwb?6! zML-mw^YVZ1=WN8%ttR?25(a2gH6yZmSw~iCf)okKuiS`O-=H_}8#VW_2Ds@t^T`{< zezobr*3@tlsJ4qUG167;I1*XgbU#yuS*z5QX-UHhv4opW{k{Zswqknu!`N!TSf0-E zV5}l%>bD;e*pA`)@fgjhd)xkBGjSswYeYhLj4(eG`vL1ggd4h`$#H z^@5-Yl)Da^xc&v~xqf%!ILgs?MXpVtC1d!2%UW@J-0_ulWv-j8a_UzeUxijZ&WvX- zfx}D>RO}ba8%shc8?X(zu+RaGAaLR2x}L4|{Sk^Eva*tDmcBbG`xzJte6E?OnHy&h z$;(;pHUPDJsdEjH+B50H5TCAPm8(2c3;F5BHnVDJWXC=eNUm_OJ&W^@++8)Cp2I{( z^}FqF6S*|KbTJnNm3U`U;HK;2$%zn^qwL*soOd}O0@f&aP;bFS1a}9|+a=?4N$%r2am87B-MtI32>G zJ+u)-)TDUvrr5Nefx)fORtNoayywC<1*JMv)^=MRUzL?ak+mU}X^zZ*wJhyM{ug;&Ix~txd zTH9C7RysJ~+C#dX&EC%?&o#xqY;76)Nu|RFqEC861pzzV{v1wa%m1Em>|x)Zb#41YXOpZ8Xu#>DF@}))aGNT4r6{U|vjaWI&8Xpk0GGxH3Yr;M{k2WEm z6h9i7d)SbklaFAk6EU2tX4*dQhOk65d8-UyvD~^5j`I?EXNtiNq6}WxWupm0FuvPA zR5R?DE~sIu^AF74?cGX^c{#WdZIDcMNW6`^+(2lh_iLigRr_p%v+*f;!19RGwr3~4 zKgCoKm%cvRk~{VtlJ%8FqP(-h**FQSX4XyR$(WPpw!An8KWk*Y3K};R;@l}V_FMJe z>op_pZqL_eP!+VR8hbvW9uTUvIOrg`8mf&b@EN3{Zq5?bCusN{8mEERCk%fUTFJ8i zmVeNh26fhBg7zpE6eob~?c?#UYxREN@hzLpLo90v!?frS4_TxE#O02w*i_|uR_bdi zKmps2(trBd`Jj)3*cqGSs=#2-Lm5mu^d@b=t7& zdb<8@eMptPi_W+T;_i|4$jw`0anrAI9nR*;PP!YZcO z_8S%Fy@AKI9R$_jwG51y$L$PqA6GG&FxAj1z(f!w{TnSkkQWJgX(^mlYW^kO16db5 z+geYHF0~q^0t5GmBI2g8{B~{7v)C{)7HShh?#$tPEdgF*6g8D|ED?>$L)F#KE>c9P z;%ey}@e#&iDd962OYVk>b7{8B(f|(>(7@ykGt=Ayz;h;&?yIG}@|#XFw8*<`g?XxJ z5n}r2-X4+JX!!UZ{siOZ&`V2Aa-8Gp8Z~rU4HHlT#{E6Qc<0xo8IAZNctV3QcZH3Y zZ~N%I&KoXnepc$4fh(uaPV&#n+!q6ye@kM#Q~c&$(5!H&cg(pS`hZ2K-9{x!N+rr- z1;ccq+4ZMB7lot&Q$+7ME=2SltBX&E$SlX{k_$yKs`o&9i4rgy15C;zf#(w!DsN#2i&?3lY9 zwzzlPFe3TDnjAeaP6qNK;q|@b=q7uHD0@p*f{ftCaiWE#C|(eR4QdnGN(|tjJa?YXaz3MEPAw2 z*#N*X&ke^G<}YLeT~`gp&dgvb@>Jp&3oBU0%RKxooSxVWqMI`~o-I-q#gOHRQN>3%@C1YG&E(CYl$?O0at*9!T*iyuBB#)fQz@y>gIz5am_?V^B%RJ5n@dNVRf` z6GP-TAI~M2uq4xI0<4dx$mQ177E`p}pOC^ogqzw_@dj5=DyKy<$1(p(fzwwmQEJGviz z&mAFK5v(cuB&-eOFIIg`fz50Pv-J!L>Q?CvpMNF!{{CzDId~EPiyi=CzvXwbP%vfbu=qQyGLd(?8w!kq16+kGo*v{=ix6C(@~ z24PQYu3p)5DM%qxABlkUMwFo3^=so;yCB7fPnyg84~86vXI|~!d>sWyo!RzD!_*%U zJ2Q;Gx&!8XR*!=4TSuA=0}1CWUOZWYUAT6bw>jq!wyzVk=M%J3T6D5wRIfdXHG+Mm zZ2F@Y4NOOcRW8**3h}CGk<$Fcwa^?BRTUl|H5T%+#}~+N)hkS;T8 z&q|jG0BMujfP`Vy4NkZpnB?s%Q}m;z+!KNN{B;~t3HL9d)7+vBHeU;!%h_b3fAr{Z z9F8f4FmI{KHWK5#Gs!pord&){O=?3A>{mGmlHxBkCFU$4EUYIHsf-whLqQEo4a<#D z`lI&+OJ2@bbZMMIjQ^+#jK}SF^__7@J&f@$D=b8N%Wg&)m6 zY!F9Co*?M%bzwRpPB(sZN)x7?n5IVWkj&Lqp1Uy9LP@GD#AKe(yk>YYWNt&btAb}s zX9#nSUR`IbGjBHDwYG<@`}}bXQM8$bfJEAZ=L^@S3;d@>r-}6QZ2m z_FnJ@nN~aEes+$v@7%~on&l$(7k@n$1|_110W6tfU%AhY9j#G(?OWznaVH|gH+q5lYnR`53u2XfK{->j(2h%A#- zIClU>sMv&=Yt38@b?OgNAn>1q_|tlOLPS8|Td(j>u zT(En*dw$32>Hv9Mrzg2zs$*&hBL(8(?hfV~GG?^6r-m-Thga4l*B3g2{i#U+cynR~ z5(6b6g>f1i98zs5zEiLo_F=p~>&qg$bRIoKOh?0e^BMBO0_|u;DAZHuzAvih4on?EHsZZr_*OOfNVf&&>a;Nh{&-``-_W!K;+1yr=Zs77vW}GhBjl%w}g5y!=KFa2Fu!1aQ*7! zfwGJ_aod(v(Bj%xj{TR-H){8!!$(hYbOZrpH;$xCJFJp*3v@+71H}jds&!qCkkz2v zV)x-tAV%tUQe!*q98qGm{xJ^Pbi}TUc+mZ`V237zQp?5ZwCm1q@EKOA9V^8_W6&LX z{?D5%%&0cU#UbK$k^s99ugT`8)5ONQ!3LTQk8uV=qk}EB3Vh7y$ttF~ zEuW7`%GSba)CUe({x;}U_Ql#exNWWxw7$oJr3hJ;rH^!`MypR!Z#*C_#_&)-ni9}( z`W)*YG0GAW>3t>O*n$u`B&r45xn4Qe+t$8>5jL*d0{Gn!wkfZ=^X2|<^UF{d{bdg5 z^U*MugJ85(|BnsYz5xS6SV@!dD@-qFJ4M^f5X%?zDD(1J>!i@y*69v(d@;aPa# zBY|nD%1`ng@;x}fsb}#O9`Y#fKR|os2|v(#2RV=5eZ*%=7qi9O@;dbUw7|2bW!exG zbfRwa7fqW@)Ei(Hu4Y2sD5oXFztJWqnySgu0V1gDV=}*SBohlT&z}?^eT*!vS+0JL z%29tkON9XI2Y;fiuj3Z7Iar~NP8+dbOT~H)(g&4tn5Q{$J7p4TEX*r(LMT6RRpTEm zCA&-B`4|!Q;AlixucAesA1Ti7FZTfUwi7IuT&hx8P9awZW;{mcRiy9v92kP z5C*>G-v+h*bz83857;;Cjcj$Twc@2JrZj7++HG6~7=&}wI?7N#N$ns``BR#QWYNTdOOUq-18y<0B4RI~u;U;eTWg zxqEypM*IQH4f^}lseKLw8ApvB{Ay{;9eMJd<{|5J1*u=_I?00%$nJjuTnV|-?N)Yt za-;2N6nZc|@eFVW&=@*MieZ8)vCp3O4)!umYfgM>XRmgI%%aAqq2P^8wBubY{7dXW zw|+%6zRF<_{Q8U_9`!&28sAt*18)A;2W$8`CXWh} z-QZJlgm8*Z*rsK!(mFPsV zZqACfLXf8Ofd)sBYEuX&(sb~@j*6PUUk)M=88iTeoF9Zs?fv)1+~efIf$(YS&Z*-9+7Hj&asN1TS`}`{I(A#+b2yokK4!+qI;;B{_|~*rsEXq)tctm z{#y<(wf5(vsRnp&eIfokN6}8e)$Or-wtPu0_sEP`1|59^t&Jo;ApQYD{&lDbV^YlE zV=>N7rC}3W+f2LW^x{NoL0GoFEu=4CV09!$9of+AY3s~ukpc$Jf zn^}q>z3FLf;O-^NV3Pa4I1OWFrnZH2wRa`rr3vYz(LI>bR7%rTiydz<;m?E4sq!uT zO0=(xs$hj3LZajbDGf#-PR-Z+|2Gxgw-tkRx6&ujv1Oa#mz z5`pn0Z8_P*1K0xO^~$#9fkoh9Uz`6pdCh*NLS~lLqxz$Muh)+*wmdWQduZWdUrB{+ zO1{*?O$0%dd~8%ozDrN38#u}dcqJKAM zYl@+N(RXSld9MF;d61Qg`|mgNPrbQaES?DvSIyMYuXgx$(AO^Z-*I8FZ}&77oTs+-TC%ip*PS9cD*EmH*$Gsl5W%<=7I9F+RqE}XE}{lN9_Vb3Ae?3 z3j3He1ZW(NMrYe=^YxlwNi*n!KyzYOi*$G>Bk^PS?DqlIKa z4qwf?PE+tKWKxjZOIZn_L6FVa zSP5KFiRS}naoDpq+*b9s`eiV;ry=&0st4a9;|TS7fjNwide)EJ{qjvUz7MMd$5$v2 zjG_(7#OU|egT+Yi0U%#7+$ums1uDxye}lrpyf*Vgy2Qa|QHW6QUE*bTdFRe>A5sgJ zts4aVkVJO1Va(3_^W6%nguA6HQ`m!t2c-J=Gb+98rG2Fzmi-=?ys9rbe)oguV8j*u z;HI^PHi!yVZ|@(R4}`7*5V|rK--TeKGsn*irM-Y>_pG{y>2%jFgm(9ND;Ggp7t0az zWSTNpC+kjR*ge=r?kDD;y2Pi1`RiXW#MTvcs8yew_vscBz7&CJF6`f0LH6C`aai5w z-#Fe17wN@^HuIy~4@H5=TCh6E6k@>HC@}Zrz^|Dv2J-s^===Eq-5jg-o2zhUeb^5C zK|OkTwe)N`tSej(_7N%P>@VbJVZVczo??3Tk->sRE2wg3a@OJK!oC*FG&O^e>MWI~ z9u;l1gnUA3I^o!No}1$@%eM|Pw^%}a3&80E(^qurx}VbZgB$-3QCIyCWgBcoK~hAz zmQE?@SP%pxq#G2F?iARiLApDnyL)MtlJ2ermJWg4r36F-F5kUB+`nMootfv%dEaN| zoV#RLmreJ-qcUVV-0>;w_uFpB12uh`FM#=TV_+DJ?cwU-Uh-jCr}1%rEcG3Y5f7=g zlkdaT&cDJ#;{XXz*WlHy8EWd_3>hB{LwFv?SvA5k)+{y-mio%b;~a=Br7U6)H;-!G zjamRY+txMqOruW{7RgM?T`*gHMORU}5ybON)s|?hn{WR`{;Beeu4>yzSgJhYuk<|l zMq-D^t%%s_Sd!;-+yu{)N13O_&KFc_v$IsUtInIU|IluU-D8EnDvgUY(!hHu6bC6B z`LAlFRY8C$Ic=f2?{xp{G1TwYcu`idbU?w7O9dd8j z8(%c8VK*gd&abV+IR)5k4!N^|-zgq3qKn&mzffw1q`-fa2g1sJK#OSG8HPIpWGMB)_q zl*vCu#5@nZtd0SL2cE zn$5+Z&}Yt60jZpqXvK_Z68cm{O7$z|Tk-W$@8*7Cs0y(fGm-E7Tz=-mfMpX#Eb5OJ z>@0Tw@s;A6e{`bGI#t6-dXNIoYHJg<$B%+lKABwB0%-o_$H#wFEJxn!u-6$S`B=&d zvtr-@E04!MQT4kzK7+02SO+?0MUU)mm|>?menAOf%zz|tM>`ENC^Xf?iF}+6UAsVw zN7#_BFk3Lgf6I*Q?DxJtZYpumlatm~XV$t%g#T%S92r>?%t_W_cvk-d2oF^JA$=rH zOa{^p7}u|6f;v7Q)XnC<%aVq&z6}LYOuQT-xJflg!0XJmja3#&%nE*}+!uP~7z_~jq zY3|m3L>21<3n43VeSEWF*#rJ64q|J8X{_a4$;*NYqd0R^I61u)A-i0lB*e(xE@H)e z7-P8nQu!$^2JCeJ*1bb1?JvDzQij73%^0zmXUBLp;??7L6bx`_(xwj=S?Fn`T+O2I z9Qho4hotl8O=h2g5+vr@L0{G1U+*0^+`Xm+|EuVFS~mUksqC0GdGt%vXm?LnSGPa> zV&_(+$$|1Z=Iq2uW&?No!?bx! zPbJVaUOy9EIK!culVG#V0>!A7srKdE-p7*0n(P-Fk@_b592vucHa8@-J?AJhusf`9 zUzjVoWDMmOLB=6kfRM0Gnh?;ZsntHkx5rNs9p9N;&TT*H%ybJc&;6@D2n~G_feU=f zD(v?#S1=&l{A&*>H`KolczkV*s3}TIVnc_;MjVQWaqzPlzhZ_ZVjjcB3vx$b>%?~zubhmh zFHCtGeE!Cr--e+zz4w^C1d5zi6#W*!?GQWQq*(WlcIJMo^ep0R=wqNa(1A zc{V=f?u7I~LWDflxb!cPBAUrGHmxPgwe0psO10ywvSAbYX9EM*O}!D%WOrWF3lt6@ z=*yK=4!@swFTD)-Y%C1;-<-%pTiwmho9Un% zUr3cSH_VVdTm9@35AxS;L>@WH3nzNB1S+`wT)-^$ z!q?QWvQ1`vX85@X`Prlr!S4+DunYU$SN$ zb>bY2dtw8yryo!0c738AgQsrV@e=h_@a#rJvzASGq4G0XRUP{{aT4Z9D*jJmt7Ws? z#5QE7MMi0Lko>r9-YSx2BIcHsG#hK1@1{v&2AwiMs4+}~PsaufdU_Hf6Y$mFzt>g} zX6PuQQh4p9Ii`=rO;olAEg#$aU!wigWJ%2VKIf8i)=!i~5#)ZSQ2+(xYWWl%7Emz6Ati~$cw<2)_( zCP|QOgq-kJ;{bhsnDCkZinYAOFsb5`7F#RVesi+L)!D)d5h2@DE`8N=$Rr;}7P$hY zH1MnNlRDsWM@IlPQh=(3#;RBQ_4Ulu+pE=s4|2d`YlhpUgJy`->9Zd^1j|41k;-&$ zf5%A!nM?TJ%3OR+ujAQV@9gQ?js>kHaAKNc_H%b(?pQz@@>?6umfye{rd6%fBc357 zV3As<=rC6&&PXoM=96gIU#pTC6rL({I?qRQ^kmPDIK$yqY;{C;gWn734-&}*;N`gh zPO~3o`X!~iN5nk~=715$B$8>%><8XQKJ7x7%8)sWl5i)D%}}X=k3TlK5|%_g+~t5b zQ&PG|9KsI2O`zV}aR==gB{~wd7sr4)H=jSF?1@CcTRC)Mcf|REu?z$;M%~bw zf)?KjNPXVRBChE9e4BQHHvd)zXoE)LL3)BG#TtP&5#7m`B^WYig5Qhd@J!AIEwX3K zX#9pAr-ocyy;=yrzM7Oy^uyStUX>R|{;VAi^Ha8u${u|$)7nsZryJcqtp7j(e6Uvm z$ZO~xgle{6&^Fxmq2Kk4c_(tTcxo*p57mYZ2lo;||{0C>UTeuj-oJ-Kk(5e}BY&=Ui<~yYjVG zHJoS7$#GGLde|m96)^wqGuM1^!}N%gM|N6~BSP)IPltQcUQ-wAaai-8+5N|G|C^{M;O}X`ztc&i&-DuL3S2pan+MwO zSt`paA)dR_+O+2UudP=IY2?t zazxjWFrZV0Xr6bk`6GEfmDlRX^lCRYP&@t3&Zo^cD>`;Xu0_N!gQZ5v^wo1c zgixy-u|FDa1i{C5VHbGvt1m3t458rH-P}9=2yGi6?s~xpW4etU}jMnUtF zKU0D3HJ201EF^l*J=*=ZMz3$X+GUL65Q(ysd0YR6!pwJ399~)N%$R<{Y(oXTlMf9H zTscx!@Bg%{`K2+4Hv8K*r^qIqe)z;Wu3Ub*O3Db{ANba>GbS!K)Fbi|@?zxuhT7@r zX#jJ5$CIet?|CS=2^y_OMpnneV~qCC4ocPeedq7N@#NJjGtZH|OV&L-vddj_=0PZ{ z4Mq*^0Jqq@HFeuC`s)~?;1`2CB|trkJpp9$m`@M(+c zPQ1ZErk=)3AH9Uk0SYZ@_x|NIcKS8tMEE&Vab;DOh;B@u1j_`vc%$=9ti;z)bvRsN zLqZpgWUCT7JUk2x?DT$~mG)Ykmht6tirl$#nKsW#UcoH?- zd4drQC~1`Xn156)l)_ZZFZ1F0_rP$WosENyQDw|74VvFOkNamvEHCQvWSvE9{?=vq zM%rwD)L@GABhq6qX-DMTtAe78D1D=FthWXt+k0`xTq%#}sgM0e168&i(Ba*E@Al#f zEh~1B%GzrJh`nOFpEj7Rb;b*rQ;~k<;of>gU47*~j8;mz+-gYzLS8Q}ZGzmqr=OwY zW%a*#jja(N>t+J6w8K6vB*aj*zFzuE(1<(_5iaV(xP0zwTRTiR`LMFGiLxmjPQ!@4 z_snrDRo~xOQddVtW`VeBDqneivLhdwPckTzTCSJx$TGV{Sfq^4|B4 zRBP}m{m(V?pLfe-zPK3vuIGX=$V^%WAHUl$USM}{&>J9i46Hyb6Oj2>YlYd&F@dUk z^t`?IpIOP^w{GTuqo_71eZ1WZoC1jJfp41c#9tHF1-_U#0=@qI#Kmw0dXaCJzAPQN z;8cZw(}VkatG9kBEOEX5mA*o$R<|!s zOi9Efb|og8CL0(Vl`y;`n>phxXPaECw{ zaYg}2AK5VM_L&w|duKH)tP@z(8Ur)pwHQ{5DVeyRoIr(V={fJWlFFR8hp)Omp6`#J zUIhdax~=S_WenV$ag>$ zWw3^8ggD1XbNoBoc=50)gy=a-$CO6wScUT_-Va4_$LZ;tk#+{3A>;j5Z;fqz(_)INFLHxxYaHXsE?`5&4a4&NSU@?5k%bIL2qm z^D1Tu!I)n&6ixXDX(AMdF}=ECJ!6fl|J%hAb+DFq zI+@s^LNgG(CfWl8dA-3thF8aS2I?s?LE#a>iQe0x-^0)f$Z9^~Nrwe;e$G0wOGIZG zVF=`N8PXNQC4ojAD>puKifYbrn*w_}>lE?xQ^-n*Z_}S#JTMwKrvJ>F2A`H>1Am&< z=Kw-a^M42C*&$b)vtfSz+CJ zzSd=>PD(3fsNe+8dmK=?25fV`QvYPix%Hi~7Pw@@Ak0DVUEZTdH~hClvrGyC`x`)u z0vrUCmkvhy)`_FaIdCBW?It>C3rIn?1^)V*LfTxi;2Ow`3kHIXbJm%x9dUlh5G7?z zL?B|x1!b&&)MIEid*l*1jbG-Kb_?n@W$J(r&ji+{9cw4fewFjdtzn{YS$=C4dJ0@W5=YJH8O?h3C1@Phk ztfpQ2tOw*{qW@i1k9pI)K$PUx`P;c9G)#z$HmSpnJeC~%)N*~c-RCMwL%$Dzd60op z_Jq2GGvfLhI?MvLR9UTdRb7^`wzDmcHB}Xl#9AGdzp74E20|;%);buM$xqn&GgIu8 z%6lq)B{eHP06z9M9x}))#{|hwUe;lQEkwqqat7>ZM5yDpZTXW}fg>(Z43zq{)iW(& z3Eb3JrS%YC0{{{iKJPkSY)C0E{BQ`g}E;p5XZUf({+4@Jh$fmgF=6-TOx22q~jN?jzq z;hBGeuk0NlnCUUC0+T;o$hNXIj9d=iYp!@}750juVZGPgI>D^L$47rQE*G$Ze@eOb1YahG&w*WrcuRmX zRhyTgX^=aZgq->J0L*QeZI>CRcVBx06R>Y11eE;HU-j^GjjSO2I)z+2)GG_)?Sq1$n(xD7d!vfi-v%aqR3y*K4OF+d`kGED?I=x|5W zY3Lox6lDj*T2GgFbjsreY|3T0Hp}AbRgxbtqO7XdD9@;SSI0~2h&!wf`>Y!6$|6gs zR8^dCEAq%;d-A&%!}~rs)yshq6=|k0na1yydmX&+MfdarVs3fL-@(&1)@@ptO3Oo% zA(K`rN2Be(C4O84p5(8opT$cOtxX={)*JcNTvI14*4J2m!`JheC?09a@dN(O`bv^B zwGq*+ z)1c+N?_MA(2>Eu!W*WLQ6S44k3=9Ip}aYaFr z^ecWJmQm@iyQRGH+*tj;gJY0N+1R*{{x@dtu1C=}DSRHS!Swh&P*w=z>IYg)lMdRA zk2ot?Gbo=*#d&>bK-q);ENTh>G3o_W;JFXI0mUbb4ZoNzpq_$L{q^iAb7c)sb--kA zpKuBHP7U!G8*S726u6$jIetDv_?kf!@ae6!bYkNaj7_@nrGJF!hyz`g?|yq0JEJLE z&babE;or6`4PUXp8405wZcfsWCv|y2hzExb#-l{!uP=p>%q(?e>4u`x{ti&aUD(LD8|?ttqs4AAR&}fAKW`QJe6zMVm$*Tu0radH${-hHFkkBWu$eA-}+?v zRCqzT>tyt`4v%leqpsxe*-dzO*D1qpt$|mui83kyZc8xkPzLo}*8w}O$xHoCPvztt zH{9!lu9Qux59jPL)vm?%eHz2MOv|{&V!sHFxG<}mVkRl+pf5xEN{Fl|6YXf$in-Fy4F5YXfKO$^AmO2vdlopBLu z-)8P!qkNdp7pOok|BYy^L6M|(fdP!j>W2`kp8?I_H5>(;p`gQm1byP2v|a@{3sn7u z>J(2p*vC^A8x7H9rG>T_^b>@72a9|UgGcw=@S~^}tW=IF{yxC|dn}l2dolywx}e*t zn;NYjS1fM+1kY`ZL!CBWTQV&}H3V&!plZN-HzlopWT#U)9@qJw3pI9vhnyHKKitC% zC`z1C4dH5=hgm@FbW_$3E-8JwEQ-R{x=7X{*LReNklt~2IN8#m5=j{$6D{f~u|^}4 ze5|RT9jXH=uQgs@w9x^x9xT?+vz_FDB*CfgoLc25IQUZuN6r?=k5_AL6K#hnwQ~74 zZnsIN-iK=qDPxc7D{Q7$RVU#o|lIu_!`(pP?JD=qq+0;BHM)mD;ydFLm`M226x zC5#hOuvcDq@NlG(?qaDdOWB84Bg^zw85}*#X`R61x$n1A9NZ{ z>3tKoA;)X`l1@@%@8eZC zq#r+6H?yak1AGN@XM8%CxR=_4EZ3+(;CiM@J;MdY=x~k_u)G z7M(ZJ2YU@c!h4P?wLwU6oiBtov-YS9UmTw3$vk3kduj*1qarewYw%-YvG^{#Xdt>U z)zd795ma>CqBRlrRU-sCzgvX)5*TKV4f;9<@u_cpWY&H1vU#Le1`e5>Mk9WZ!JbTh z@ouj45Utx*@M@-S<8xxR`TYKcj*&)34ra~fvTys6 zu(hx!>k_Ww`->Mm_hs=d9aWI4{2-R(`_NBwsWk#nP$@7dODky^&wx-b|8pIwV>N14 z3ag*3-L&TCEW%=q8y4{GHp2Duj?}-U%jdOnTmnTnHddWlf>X;O!5`Q7T&V2oxVvAj z-`^fB_uxiF|E^s0l}n;^<@pKE(Wh1}{SpQhXIFPA%O3Dw?{ug#Gt|w`vj}GRSeVAq zVL?r-dh@N{Ix_}17HCJF3__}Ps*SpoP5He)j>ox*X9-?M}RpL%SDq~zKTF0SwyYpT9+vh%k@4y$Xs8W7%^>R> ze4CJFM?5sB+NtHpV=+MA4)!`YsikB$Zh4bv@GL8V>(#$?&3r*$E(DCCIF^1o z70+SkJ@;h8!;+F>(oEMFA0aZR@veI{N%)#%ulL{&$pQ_~UdM|X&56##AwFuK8-52H zDY*k`%XyT{WWI|F2xmk!a|UH(^9{K%KxmFPo`l2$CvBl-cZXTuM(i+fp72=@XgX1T z)uG>YdLtM&_BjlC`ok!JmVbRezj`2e1;uROB!@~G&^r)epguv=P3p5Bna#|Nd3;Q~YRwt?QPEpNbdRS|1nP6t2EVlTMc*0~5lau|(y88LkH`Ta{?-mN(C zZfn>Fuh$soWK11bPq@elI(ElYC}OsLfieg0s$lP{Soq%loSe-wMhm^*d;1BKvU6lE zsL{7{j(YQku1gtQy9irnuk&E+{656&(@bLl!`a~5IH#@~GrO4rqz$p4g#DlzLp{B~ zu_;FunTD;tjhtqcNdNfo_63_ms=IR8O8~mZzoKBICM&=B9}w?^x+LoJl>OIL1=jTv z4D^!bmi@6%5vVUOERJjq>b9o9mQ6D{%4Js7r9h zv^p7TuGg+H^%&?V`_wRAp4AH1T!Lp$(zwZs3V3i~qnLu@mLK@mO`#1qVQAAtXfn^m z*uH>sVt_XJKNMY9Qv}wo8h2r?t{xs9-+LfVgliQ!mrRZmf`WAw1|wlb-7-G!*zor; z7$7N5A5Lc-I@^Vr0SHV8IRLJ2d9Nf>89xP;O{i8_BYaGU76*POU))gPXz}+MJSH;#_Y2$Oa?z@jmW8H@fP^89Oiv z1EvwJ59)XSsn5`Wfwrw0jClTvNxuFXJ7Cd=TP-st@lh$+hjq1aWkk%OPYBcChfaVI z=ZreT%#7J@Rk`bCpe7h}Mr>zwEM~oE{bEE$1?} z6NPm#+fm9;x3dRmy-&=TTDMZRXDk?SSXVF$6BD4CD5s~L_Qst!RUUO?rxq_Ov$(1b z!9mMn8lQkf%Q;Tp^iI#g;cm;3%7$4QdTt*h6^BaOs;hz1yuv?iCoL5%1>fqWh47AR zS#!l@GQt*vpkX}ZZi1py8vu_C%=^$e0*$LhHGwYT>S&`Lti``+4@le#4Di)ZV~4~J zK3q#Z4YS)XC}xGCL2zx9zdUTr+$fmS=2o^6qL-O z@?@IR9IfaoLWn}Kz2$h9H7&XoC#`?I90D}iz{czR!NKuu-j2OoC$y3c)2yi6Bi3=b z!atE{CZ`ahIp4%=k^7u`Qk!^bn{ju-*;Bxey})>?cqherA6F!9jNbb2$ya%#^7AqW zMtHYuFZ}!nk4znNU8y#|&azu8ukhJ+MY6nMG_ET{AB1t;0H<&2i$qdZShDRS5op8h zTdi?%if?2+7aOsmHOip0f|#XO_FD+BXjb1;3^L*sC6Ix1LF}(vo;bl$|9pvy{{Rjj z#L)izifVptM8(aqDLTPnIUTB{b>%s9(}Tk2v9p5drJo@p1jv#cz^bp`0Es-=w0AvB zEOefxEJRRQ3mM1W4*np$lq|mq!rIUTifqfU*fIU*0<;EoY)-nwe~Y8e4(9#3Ev49) zuanj*){?@0eZap=vyx8Oa`Y^#9-LE%g4n9)ra8*OwMh%~d?HmHzF`UpQ=piBxLW}& z$g&g9trG7g7>(pw7faSCM~JlLPn|e8aR;+Tm`GpTGVKw;MTZQ5V#n#}`AR`RnqlCm zDDp}&P+O{jK1Lc}%50vxy=?zKo1*JOTvKl1QPo{j#oRSv3{%+i!)2tADe z8Hc@JLE*#jDNL6QJLT%|r{Hyu`{zY^nZnV8RSP2_Ljb!Z*RoP6Vbc2poTZhvM(bhO z>-;Tz0||!T*|_CF#xHj$TI(4b+N~;>G{-GVCKL*RpTQHy`Bn{P9SQMe+7=g!eq4Eq zLE>S z$WS+Z?C}&{_eEz>@O}QQQ?|+6XggIp4Mo&0492^S+S$SJF}RC0y&$>mU94#~=A-Sd zN4iL;@TWQ++9tM{o{Q?XjCbe2oMLf*O^<(onG%&7)WsHN*u{bpGUOt)LkU0W;AdR4 zaR5C^1*2rk*#(tj>?*jTbccSHgYCQ`3^hc4*c}zOmB@Qm!dPM-uu|-XWEQw4P)N(1seU_&McV@Q3*)3O5Kait4o><7XF`Kw*F7mh*f0gGx`L zz}gy;Y>)Ya2xj{pqmgJ;C3D8MNn!A966*A%i)-Xqmt1 zdA0&DrelFpZ~9oRO}#N$0d;zReff>z!sR68lE(H4hlqIYWE%m8f~HT=Odz^y4u zz*hQ6ys7*C`V}4bPrw}QyWn0<4pJ8W;{j8c`~(4thCZ^L$VzOR&YwVkP>g0AKA zGdN|b^{!~EcG6*(Mn$XjUW5&`uwa$K2s3Rg3wvuZ`OOK>5(oF)?r13x@CuA(`D>^1 ztxh=SO`q4bOO_qyHvBLz_$-cHo7zY{;O{REsT>$SHyk4dDzH_VbNPz&QmKn#(@jCI z6v~CEL@-==#`E0QVV#{``skdkA&zR{8OrV=g%VHa^RM_h87`Ib{5)Nnyq9Z$pN%pK zLdKuAUHvV%xac|TXNr)rR9%ih!35-3k#yOwFFQYAsxHFda@%3JiR*_y4X z0alXiS*q$mzFhG6OR&(w08q0mcXvkfRz1?W@%I%G)N`_Le zHpoYlT){b8abGbPT9@)n$?_gQ=;^4vl=Hpg{L!_EPA?5PX1b?pFesxnBLI9g493H# z=UJ=n|h zwgKS5I=dmX=2{KdLM;bEiLfc6)L94SXT`kyE^G8W zE(FF#&Hr8`^dWbD1`UcNQ5f1$BEfN_7moKWD=MGD94kHu;;(#~0%Ymvcgoem)UAS< z-Tq;#28x1HVxYK`;2aN_T@6&2+Eu=d|Mjhe<^eAcrCD3maP!tm?FdJ6F+*Tv{97s( z?{7gB)fO3!Q-dHXJh5VPs{jHAu)@=Fj*-E`&p zJV3RHe{DM(>zB0G`|6AS_U=H7ua=0Nc1XiFIeBbk@y}s#EABftPB_EOS%vPiocJS1 z@VK>X@cNr97SjW=%>o0YkWaO~!7DqsFncgt-SCBO@DmZre7Ur*&&}!u)y-ix8rJkv z@ksh78JTZ@i=x|9sWo;#t>}e%l|qf$v{cO77f(ny?yl3)=dC*2Y=mmd)V%Gh^{a@M zhV+#d#@pvfFm6BFsjg3(@u4V7ItHWYVH>r66Pa_8V)6CNqh%U757-GC=z+Qy=T~mO z-EYX|3`_vOQ0Bk%wmQRoeDcKqU2L=VigH=VkE6CC3mYyFbbC#jyd!ana8-Qug|TfVll}F#p&=u@)?nk=j$k+N1#)y$m=DFY z_HCj*3i{hybr;_yeWxu5sC2UkCo?8=7C^NbV(q!g%vF1`*GHdK4-ZguOWUYVHqOsm z4>n4(P~NEr0sCm(QV-?+C^u$padoUsQBC9hQ^L<*t!B)r$c}gF>VUWjQ-Zg;mbw9l z0PX|NMMThJ$gOr-uvK1M$iX1(^DsQHp^&V`iX1&`hIH+G@d|$|3L(_I3>T)&L`s1c zMO`sq%@yC+UjHm6=xacdNJF^#D{M6gHI_fo!%AkHKtekU26^&oZ;&n@x=5ph1=i2I zb8=@y*{B@I)U*va{;d?a61UN3dV_5CJ*x%ue~Nu#+IabSlL;s)B5WaWce>x^To<#q zS@_8F{gbPdo%q5^WG=-{VODLvf5l|k5{>R5a}1`a6AfO6<3@v9l-f-(;p^8ip^+F7 z%0ciy>=nx3pYGBeR&a7u&R4yk#Rc3{I&Dqg@|QaH@Q*%vGBp~#tFG9C9~nj(&F3+6 z%v&&25QZ%$Ub^wz zPZ(Z2A3eSy*mmH<-n4^t{@txNTl5=L<5-;QVi6YLEi{nA_To{h+1n%pby&%d%W|L> zh`2ZI2#$?>NMcc`g*!hSwIGo1yctwwPMQ|H|hH!&Iw!GX`60pl}(++YL4OD|~XD}p_&c2W1E{;R~Bw%RjPemmKOtmNZm5?1{ zt@*1#T1R}VJL~hWh#VE=FNYmZ;`eRAev1;ch}+_#i4wkQZ6jpm1ZpqNi2^yBJLq)j zYUA-OA)k<>FqZSmiJiK$v6)dxP`&=A5Vom>@;h=?F`TA^2+C2SYzxpM?a4V``CN^= zTdEK7gRwE~>EE-Uj_R)u(|6)L@nGsD3)acA!GDp}KT#*s&Ijt(Atv&W7po0_u}4s~ zd~AlO5D`oW^ns#v9v{SQCO^&13>5s?ad$i)c|(k>bq@t;RZSw91tku|)4pUm+52{` z{VBgc>r;%cKV3zUuD!dB89v2B>OS2f$+vNIR|Rs)(f?t_NygjZ_Ihod5D!ty7){pwkhxo{TM3;;jV_(x7|C}OXx$&Ix$_`x+lpYuhTzru4AzV^>QKhS3+-6r4M zC@KBTm0!LHiHKnGdoL5e5ZIbqkm&sE2c0CW6PKz27zjM4mo1JCG3^7OL5xSzA&q-l z^?*OM;ZQ|Kp!>nj(L}k(Zdt0*0JTR))$b0Q#QFJ}Nm3UAFYd6!dmSn>sCO@bB00OG z1;696%d;&;WT1a;$LXXW8$IP<6-%@?rc}Yp&`q)(EpYMQuchNty#T4e0yY!BihJo& zP{>17OV~T3nP*LHge${WTYEX z`Otq_0IdogtD1EIN;U{wVxK(N+OY)JmLt@NmX<+!67xk)`b1c@n#I zdJV3Zil(0!UROg42>&c{Va2IjtzpZaxa(wz{zcgEJ~a(-;gBAMnHc{Pq=@n zkZ9z(rAg(*F`Hq)2ajx5t5@*(oiNrLeqIg?Fs_z(ZOEj?i1t$4kJon3xrPQpX)tnc zge6jYgoZjAs0|$DBw^U z6gid)Tb`bp-u3=-IP50^5)CnHeCzp*Dh{p^2*6#VK+X){;S8F61c^l5BT~3c=coSC z(*E0i9q@1K1%1vpbJu71-Cm&}J#Wcbr+~aaLKhlE=V!z5AKbEvzT}CoIEWjL{cCC$ z?6@^Cx34_cu-;9^TxsRSN%?EzX4mZDcrvSPZts2qr4^%k%<2_>-?pzKE*l^r4nt zh1@Ip0dsWlN|M^}TV0#R87yoHm4MWLeSeOQ{`?Wa?NQ;0;o%goS#ZH1*z7|Dxmh$e zngOxC%t!3~(Ihv#t_z^(1q_vn9LZ@A-U52)sPPHJ=85vI<;ct8@|W(_cg2LyLVyPxrPHB-z{pxJqrR2r^s9pqOWfCmrdoLUSm z3X^o8?{a_qnsOL$2+)xW4|A#@feDX(w*SHmyu)b7W$Y=nfG`W0V~YwKDP19!m+ zTt{V4KtQSG^6lz5rEW|(;(NcR2{DWIH#_%2hya_BFCJ-w8=FxiNSUQx0$ z;9Dw(o4#A}{{fFcaKF5J+II5TIetVw`IlM>c9xgeGi>zZcu5;ruCJrJ#`@y=;{AF4 z$tbPsGVtyorpS&>I3<<>*`d508k{IgzzedohnM!V!;EW6q4)#d$fJmYcJ%CS-M)3> z3hl1+UZUM*TiYLRG(K+cZ?~oz-(~h!Tb)POn(gh;jZCxs(SvqlG_$+fYHc)@n>^v# zPo4Ja*2kH~!}jiKvkk=CZ}0DB9`HKv!nNCnYX_ooz?I9QmP0LC<1t#*W~}dzxc&0k z5a(|L?HG~)+npHh(An*nhD#D?;l$;OK~&ao2cE;cxLo|Vy`tbQ>1JoTGyd^t9C*ML z^{$gIcL2D1c3`%nMHf`ZB@Y1HiS3@BknxhJY}ap0l(P2(e9W7z792v&GoS7LBKywW zFPZD`#*D}^KTEO$Zq1+#Rvf1QIsN0E+q{U5W)B;P?pzXnefboo-T3J^=32qp%a?E7 zECBKVcOW`hb=fTFj@BJVCCX)aA;x9LQ@F#xW8vHx?)0Ox$6dEax$_%P`iv3~3GR$! zGBMWH)(h2hK1f}`uFsHGjNQP4>LkRdIzejc)gvH^vxfTIIbgM3DdU)Kw=$atpF-1< zg$meC2JTUyUEP(*z;-MbTgl7G>SJE%5$!l;dzA^Y9$<_=L!`$hm_`SNIuEw9ac9@f zWM>Tmw@ECx?v8Y?1Ux}@shh@@P>G;rP$}<>x<`&OG zL1V%>(OCt|Yz$ z_>zk41_L20n2)Pz_>#fUulz27?Q}C|*)TM*OH+Jv&6dWOm=JnO2Cee-3=@qoaMr0iW!V$p<;M;U(vHO*~N%r$ruzL zXwxxTk{z;azqmrXE4`O!x6%G681LIgW2M;`9eL2$>imQt>_eD&X#26HwnlTMv9yij zI-fL_v3$^JY-X0xyw~^%@!F4g-FJd^d!5ytl~%jGT1+CW?am57uGQ|Kh1zYmn`m#L zZMTzY?zA$UmEsE4+uMn2x7}{1G&rUf8%}D?suDGTT{Q zk)0K6cSu#?;8hr6nVF|;$2D@@JdsXxl?AYYytH1L$wSDs5X~9)NO$H#x1j?y8~rTc za{+t?kbC*&^wey3`ua82&;$o>e0%{K|9l$NuNa?Qz>91L<+2cmc^Ln9!`=6QyO(tC z9CZ!2)2Om|RKZHavpS##FeVJsQl5o)>>P`AbRthE4H*|uMEeABa_GYN>(|+g!zdTW zL$gDoHKNrzJd3p&*se5dw0k=Hv{FEIJKhG1DnrV@J;QW#F59k_&znIicm&Ff;y7cI zUB_b2%y#McX=c0gVYc&Djc^Bn#qhGix${NN>PP&62zPR_NI;iJ%%nriwM>cbNxwD# zwKcqqb`%$7&o0RaEk-QwV!rGp(hF<|d3`aZ3pc1cm=qr{qWG zcj{XJTtpmus{XLaS#MXx))@- z!mdZ`OH9v_ljk^qkkxO1O1Rzg7=rY`1YM4d-Ml-RwfQeNwwy~3{ta5~NKGQJMg zE^i`9<-l_kIEuh8;$n4BMP;_4WCg?^3q1zh&QKh$r*Jaa4xdBY4kE-|V7s+6C@bHv z%w!6zT@ZeNw96ef{BvFCaW}ALG#cuKQPt?%3F-po5`+t&Gq?q4@lx2r6e{sW4M7`a zkh~0fVFdcjONR$^MfF7oaXqirE&*Ps7AY2nR!f-&yppqmU{yz6MJPV1Tqwva6rF`k zc1FAlY-bG>ND&`ahUtzR=V+|GJ1B;jV55a)V%{gypc~)P0VId=)v9%i!hg6#g~#@tmv z_Db(-K=vB9H%M@g0c%rAnb;1rn-bEEVx27a?IpA$7Ot!i1RGoL5bai1o@_5IHw|a| z%gd`HD?1~*XaU+0)0UT3o5fwA-3WHJGesYO_0|XjvMVF2OG}+LDK0sCZ=|`jyuDw1 zI{{gCcwzP_*{;BGULBT=95^n_b}zto==lFnA{klD>8^JGci;T$H()zez`FyH?+AZE zf9zd{6Nqj+=7ewuwgcQfyYmd^k?d3sg$HnflMx^W-PyTIP|gd|+<@)^?$p%7U-6lF z#8BAj?*0rNJ7^wGlqWJCUs(Vkg#C!W=udgTT`fB0NN65gSYWa%yUc;%%yd|un(eq) zz}oeD3y{0n0q;O`SYr z?Z9^VLiLQcozafZQPKrCONooMe5pn;pQP$OWRr#SsA{J&$1kj7d`=`&aEvhs*mh>N zbbmkaB|SECt0|9ttIh`L6l7DC>0=_SQOxgko)N#AsLOnAI}i#FjzZ)uq$oQ9AeAvL z<+%ctj!Rr%17}?KjuhTf$}_SN42LZ`%8X%E90D|34w9G!P(YQyG)ccNjm4(AA>BS% zI0?++f7gVQSfY-Kkrhm)`AN~4btsTC-bGrhcSqK4HCkW^*2>=C8*8L5(VHiyxl&%b zNOq8&fs7h-85P^5aK{aP`3-h;+migr)j+-z+C_r+nZLGS+yM#UBy%rqyFRN7MpjfQ znB36_e}$cDGc|j=Xo{ z7NW1pjs@3!^(h*$;UH|FU4&!Zs>E2=Liy_U&D*#B<<=K-S7{XQsjku}w)X^hqf>O| zMl+9yc7(O>Ita)T>B6=9wxxjV7SV1u&`z%1>dL!z?OG#@xjLjuqFODcEvxY9R*Ocv zRghk%xJR_ZI=OCtWN&|jzn0AK*-f0iQ+!JqvbG3_b_Gn;6T=-$w4-qD40jX}59D<~ zymPih0(bukxO@Kda|oMg#Ty4`$vJW-0CEGkgVA>I3_9SP#+{uz?n~K@PzS){B6aQX zg31H5I|{Zl?^R03ZJT3^RZ>vJI0x5mHk(9cL4V*nzhbON91OVQDpO*UC-EW_K-*%uu0bkjx{2<{Zicn9a~uICBE9t7u~c@PtFu3yKYTkFs^zt*bbpv3TNu}aaxQ)+p`a6?lISe6NzhR|Bx6X6=`u{ zq$`EOXiHza6>OSOWGTyW(MnuH9%J?r z1HZL0BP&Vxb#)hTR#b~nYiGMN(po0ku^skY@gmyclxA}q7ePauz0xG%y`2o%TG_=H z_`ISMaQF+^4u$6MSNDQ*$9Yob4w&}8F2LQLBH51EM&r&3=MJTdpFM+f=fZd7HwICK zbq7kQV5?-~PT3ST?u>PwOI@&CjW{>hrg%NGT@`FMmxTatB)qIq4s@6MT8R#LV~PIJ z?3Oo=f5p$kxTDf?rMb^@d6qye^U0q_N4e|Q6^(rfn1fD(?L>MDr>FO@#=Ht7%ubA7 zr(s87$+a=T9nHUT`S9h_zy9UJ4+VFBRX)X8YHyhBUa(%p8cm&7eeRWWhc=DOK-%F` ztqU6B6Q3vqxC`r!IPjUbA07wyP*}vcoIJ~6QT9TE7V#s`XJ^Jf2ii?f(zq*h ziDs;LLgTMTwmTx*(YC`cM;uhD^gtJAn4BcD5#kbz!>ZT$*=%M|_S}_DdUbJT0(a}s z8dt)%3)KVe?A*zD#OX;cY~KO8L`UaDhczP<0d5gWP)bgXAN5`-M9lP3bk&N@7&cxn zim-Q4hM`bEVoG=yA$rxV~t_O!b~yZ2RBt{u^>)mnXsnCxz|wYu5(t_8GP{kHLVCG*L{4g;~_ zv%Q1UcG}IA)_16R*V(+*YCLR#{PuQW=(Srb?ROZEMRB^N;z*Y?s9$Ze&wm$dA) zc9)j6M~VZq>lp1KAj{^JrRCzzUV8QpuD6`&yrqCF|IAW+8qfzo^yX)0O(dCbN3JRV zB7r+qLV;}uIbi}~t-5c%`8U{d6gN}2;}Rj`ngx_yyBr0$`enfATnbp6 z6Oq*DEddo+5+GD7XORw=Q!y8^ox0m;U^5ggCc-i7Tjl7THQRPr6hIi{pV^AoOF%~< zb{y*};}>@Uwv+Xi8h7YxXSTCxr|J9x-0?)9qL3B82j{@z&D>cY1hdlM5S`}8bxGiD z1{w@AOzgTOd1H7<34f)DuRZ{?;W1p(717rK@c_eCN$7YvVK!t3ZwT+w$Spr43j8K{ zF+GV8L>*E1J%Hl)*=3e!{F)K;$vlf1^EVJ5z_p67Zc;MVVXhTkm?O>7y&I5UICoNH z%?6UXkW0TF_d&3;>>1OaQ=|V_F#pOza)qO}`pmvBOIp-V3$Yn*{Ji*tnnSinX4xZ5 z_|G3~mwdzZwLV8nuSOQFz_!c5kIw_nayhcyEX!1)Cxi+j<+*S+6}>$FZj#|9FyS48 ziZN*-m&1gGsSe7{$;G=t!!CqPX2{+}-#URE$S%efqh-eh&`!bFG*K3l$EWy|Azq># z1}?iQS^Qq=3hk(^C`q@mK_BlCW{|*>H{y^-kFkI1F^}8iDt6<5$L(wH z&b3<^$?PVH5ZfcIX6DK2-bg!IS|iQfOxtM`=swq`Yxe|bm)UM6X%rnMS~Q2x#`T&b zyT#61$&iis6&}<47e3vZ!t*1soy2U}le)(XVwXEAg*%TvA-ZFxtl^G4XSPe>j#1ed ziUI{_d?>CtW@2oiu0=@!GR^E;9IX7tJ-&osvkDgK!Ba>k#R#R}J%0c<0)R zg$lcA2897inJ+7}vjlIcEmw#1n^Rl5i;81x=%=?>U8~t`OG2@sGqW9ovYh-+Kt|>* z9>J(SG)VcdgJ`$WH$%$v=P>xM4-gajKfbumzZilZL$XfqRRR_Lc%`&vq1hb&Z89J> z(%v-6h$~F1Zgr+Qz#lc2o#VzB#R#mML3MLfmR#p-3JXgnP=Mz?y9=^oExQSm-5(io z{jWqhuKp>&&SOu2^gNR6XJccC_TGZ#zPNSe+P$Z`Lc6!1(dL7x{U)#aPKuwjSNB#r znfCskw4Lefw^oZQohWF+(k87P6+h{$fZn!?I2^eX%}!=}56v!q(!?S?o5fFd_gMVo zt&}X*LlGVf20kqSjQ-nyFBF(8OL2e-kLz=i{9_!%2Ld779SZFLWrjP`U6et&6EfUE z2M2^ZZewDHJLn*~-0`$9>>$-EKEduJor1@vY$ruyO_R~iaCeBm>Oi|3;LY}3PMYRy z45j5sZ`z9~QFfkU=$0BA6OmoN&KwEWuY<^R|K&B706S0}gawT|z+E_bKM?LncNkgn z?%jKL#}{xNTnWMz)#0E=5LWrC*yY@h;9?-GpRkcV*z=o%!>~cDyIqZf3jW2T@cO(jF}>8-c!6 zQ!T8!U^|#Uj^R;did46_7%XzRTnUelLd8|?kAu>@)wHpk)>#p^MTF8a;o&`;*&6jj z6v4cdqv4XqsXs_vDxu=`Mj)@*IB-|1y)`B78)OqX_Cl z%zBZu;V+Zf4l~-=$StX}->GhrYzL^rMAJQsm1(RR>y+q{#lUPN$q*{j<8 z&9nJ_8v~7z?V@f1-3oQzK_!&qV}Ts%1KYU6@;Iv8Np$X#5n}`HT;onbS#P)kN>bkL z4wGeFJ>@xc=zI#X9We3vP*m2OC%9t?&TJ+X3E)Z(LBUGKV?X zPAgf1T^28k2HyOa48~-^HWYyD-n|8~-O~kS#wIXls`K1Y*}n_!6q~&#=Z9NNKnLRen>^Y6y&)#$I4k3`IoBZg4y2@&G-IwIH`ibgLn0JMI>fTk#E^tSg+Ah$Y%NlDL73Wg8 zzy$cM+0(wdN{*sJA_16Aoy{Wlm^^=q&7d_~kA|K4Zz6&jQ+_a2*cd28H(MB<|3EYs zS+Jfv7F%&68@gRac%{SY|7P!fV&lB?GtbKc+ZbTFvv(kuz9tv<0()s-(8mVi9$RE@ zU^`0BVZ&krg9Yp{I-U|s6h+fqyBRc{aJrzFDz_xtw91mzPB6t_yIEwB9a%n2CYViD zOL-#EB3rN}gcp+5ZJ*Ec{NA@{P0t`Rv)*o}>tWUVx9Y7DMX^45zW-o5z^*0DvnW*8 za3f(B#=cfzIwj$GOK6Amz_}XkM0NLii<7XO^v=7m98@Q$p%)1-B(E`}{-w2?qPSA+zHJ75g-ulY~w{P`XH@dNOENw27y5;KBTn zH&_J+?Ey)&wj?OY^iMuovwz#8^*-dC$B@Il@w zr4*%9R%~Z!Q*l~JTf-`d;e@GL!K?Ua<QJSv{(u#d=t-UM{ABt#AcIhr`lLLs1&pl zf&?hUp|QLKWn zL}l;pB#S0uoj!Lp-2Jq`o#-xb$0n(Eb+X;9t8(t(IO%r6sOn&xf(qcSV!J)1<7sn` z>t7?x8nFe$=eU_ z2~Q92yPkAdQ2|Zw(?nId;A>cSbdg|eW_oR`M^zAWpO4ruU8NfCL`tG9*JHRz+K%=R zy~Wt%an{zBV3NT~vh6xTJ0&pfJ0z)LO?G81VeXzFLoLIE&BwAYNmbW7?tJp4p z35pSi)tA7MXzi}Mpg4{!d4^Qj4z#BcE`3*7wz=T0@Z6y36$;@M+V=W(vR zM+2k7Qi)!r)K1dO8sz}1JPBnPs3}*dXeevGl8oooP~b1BX)aH#kGd&~ZmFXv;z_Q8 zJ}k8`86e_kitc>TYUb=Ar3ok*kacLbZql-lRc+q27l6OeUpZA$?v9&xuvNZKK7xBE z5i1SdrJz>rtL?2xRVD!1(LGz02+mq@?kxHvBPbLn8cvLHXSP%O9d`7CjT`76*V1;| zjZXkx#_sj|@asZ*37o^N6Wg_%J2$n|Mr0PG1Im;{O@vMd?I5~{Ky7ZOx*2p9yAEO1 zNno6a&P?ZxS$lXT%`WAy9x7(AW2h`u6(tzU;x~U|ma7Hr)F$uj$h8~k3$BrC_g_n3 zS$+O!cd@u&f;;9Dwr0}ywz#RV-AB%P*-MIa)#gqFq7HZ$Z=ySayH`wemtMUT zxHIadG*;WixRb7uaEEti9NYHnF?76~!fLp9U-8l@IRo31AsBbRi6Kl>6THQQI>x*DRVFecx z1cCf92>nDtLu2?j+f7_fbXtyNkhYhB)mMm9MrN+Tj=XQ4E=~4{Xp^EGPyEAjzD`|G%9qDyhYXi@Y z9iUH3cPbta*#+%z?nY=g(id1Gw1e$_HS}me_9C`dDio?u#TXi0X<>We-W`Qu(+Y*+ zHx2$un>$rf*uT^IZW&N2f0ZX-hJ&I96Yn#y8^lk;yOxZweu;?9dfa354!vE`7fV` z?-HJc?51kC>-FzF{NMkH$nNW^sQ6fLcX(d~sqPywjLYtB4fL^3sI4#Kiis1nhzJnS zx%i-lB)5gd;t)o0tF>G5^z7B8vt5u*yO?0rjEaQ*_WM(fCbnI>t(cbjg&oQ?fg1O_ zn_aWr{e3O_Yht?zI{(Qc-4YTGD_zZ8T(B5-W=9FO(~F1r>V!LjxPErfP7>T@oLZE1 zHC+}D&>!&}>G>e1o^?!6ir zr9tiA)e58>O4_JZ>TEeR91K>+hl747wG!+WhD_(;^d^?zKQ!o9;whV9J}Y=fQxy2^ zm;gOUkN>-om&fV4Ahx1oFZ{ruUG+Y@`U*A2(ez>9>p*B1085u*;4XQ0b?du2`>tX? zqN@7SY?dKxRYT}%+HH(GDL>Sx6gHUrJYJbQL|4{&r|)&Jx`T?TEt$?q=uo;3^mk%zO z>s_9FM`R~`igPEpgL@p!bS1K^JCg2b)Fvxwtx7V3?Ih+%R9ScX1?~qvPx?(%B?b`aN)#tI6`xthMi*ESe&D(

~aS-CGOgW;mfx9c2)jl-ts&;o?=oUk;9xVI7sOqP0CPglDfDLo3 z4QYIJbc+dR3$zNsMcJJ?{w2)QL$z4#aW3~tJ*!*MjTF-ISAWQN(w+d1hQr4@_U>id zfR;SGsE*K96DrbevJL{1=g3`)LV-RzoNfX1rG_`unCNR&77M?1%xm`LeX_my%%V;k ztLh=LED&@@C>m^jG##-9(#_Ca+AW9fV7s*J(Y|i5omG|2a?5x;{*WO>UP__g9`(07 zTdu4KUD{8~WD3bl?_${Va z;gPW`=TbQ}&Wwq18+*>Ri(xmHK&)zFb=MNd4%2RKoO8^gfZVDPv556cAv@Q{N~|C| zJtt^)R$}Y(LA#Mg8lm0DwW|pUj0)TJ-H*0C(e8KK3dY!}>jc zS~YRY%a>uhPpP4BI$fBK@(El!S5n~HvDBVU@rd^XcQWbpA<}WuU93Cla-}(aoo-!j zP2KzWORpiEyN3*yErCqF;k9$Ozh=1W3gr$w&H=XTb^3|Q9v&RZw-Vf`83dfqa7w51XBC?JtnAlKRg0{}caO{~V6c4M0vWR7{s{4)!LY<)Z=bumdZ4tW<0h5h>#*mY zvc{N0VxV&$@d9^+-`1GsiqiY!2rF+r4qXPL+WC{)=UHfjJX6qP)wy;kk=C3O+qHex z%DUv;9h&a?VL_u@;<9Cg#?ZWzs<`X{C|8$Nq?s|=VQW}V8*#{g62)F6UEdSJ_UW7$ z$V{prjZq5Q0dxmRJz(>2e_b!HAHwc}{unS^qtOc6H5={r)$&7JOK}c=uj0Bf$PT|w+mM}7?X(ox>8LEbmkQH4BAXrRC%#;HcG|P6 zr_&STVmYwxjP5M8JIb{iX@qwFpK9dV@y-6fUy*BvXBJ!Kj-=csJwTWtk7EW)z- zU>4lLb@?5=`%yK0?6YtuB`RCNUBa;$EvtG7Gu%+6>hf9#Wox)|TsClL=T6R^ z!Lt~5B;4uY0k}kBxoOKgHQR|pf_BBUn^8U;NY|Wg2=5vt`_BDQ#uJMX+nry&JSD8T z4BO2rnXlL2w1~wErnZvP5fPI}sqeX!7#IUe9p%-g|~SZR$3c zu&k`R*5xz0_@_i=kviuIR9)-(NtzfJx;qw@-8{^Y{K3E>M)yiPq8Nb~AVif|yAdi`^Y)MtD z)=^lTt^1|qv%uZ3#Dcp}&8Wm?bX3-b8VA)b3wM91Ouxdj8MhF+E4E$*bV;p?v`H1j zptyQ%R$VcbX{s*v^~!YDuhlIzCRLZa7=~r&uFPPjzarsX((1%?rNMEmHsFrC}Z*+^KrPxpvKl%44zU19cuf z)2}ePbhpzlgIPh=_-Pl%mJY>IizuwQ4zEr(bKR5C*xZ;3UB}sf0(#>XInBbD%%s=sfq%28^&W@(BPT@l>HxC`8| zMs;DWfl*s!T17fB3k+6K-%Er+_lO*EMNk||8*=qnji%f~1PjPj?Xxj$!*(>y zHr*iw0d`U@%M86WgB_-!C;G1|OHtcZY9Pkl0Jf7T^WNV=1J}~Z>+E%S)HB;mq9IRK zY$t4+Y?$p_F5B`T3NjdD>u{s zWZY#mh2pWIMcB?ugJ7wbsFk{kvbnaGQ`;Ru9md@_a(?v8OmkLWXB!PgVOp>qg>W;F z%-OkdBbeB3*`C_zx#d~0oq+F&%l9ab4cs}iPFt@P=T2+m9E-4>Hq3TBmLM!;wleOF zcju{=h3%rZY~D>#EDPOn|Mb?Kz59HMA-=uJy0dY&wTbOyn%ji!93|6UKFNuHVqHlB zG<09q9c%|(neu{pB8r;sbk`zfvM`t{5{?enTEbct$qp7KoB9?m_V(}VX@|@!=?DPy z+5)^mr?WV*sGpARp(`5d325={V%!~sAfY%TUf9k^mZOQZB0aRQ9Whx=2LbXnYPiee zjz3%)vK??oGmPGqD*jqk!0HxNoY#Zw0(WL1lJRP-249N$tHbSZ9=p1RsjeIp@S(h# zR>PM=w)*_HR29#LZIWuXUn}iX9Bd_E=;&ZZENsVnfjdQQIwo*S znZ&W!Y!2vnw);AfhAF~3j?{R!Un|qhq{68^ixOI?@(m#;>(E|sV6K{iazBop_KCu} z3icxxW+9!f8=-XX3^3s|ae1GpEbIx{>Be`?mA2&DZCR?+KH66_cLSK#&jT{w2$ileJf-Lf0V&w*XV?D^%XgHhP%HW!ri56=-4ILPSO$A%<9xFM`hKX zSU3j!ZEHh>cn7qLsJAHfvD$&{fV-mY1ua}!Q5_>HOQg9&3lzx_SN*41cP(b9q-dNa zX*$!sX9RIBnz;Oy=u5_$B<4DEdU<(n*;pnPyC7r(+%C9mf;}Ug9lX-Qm0Nv3HbJ6yYP>>iVN<)W2l=l89s$h`U=Bhr?78e%>vh5~C z#iZML7(!e5ckO{a!#jHm3)pr-J$kMkNGe$bE{nr zYmsKgB0JztpR`NDyiHw2*8}nf($)~}!iL`9TD;EggQJaJ(&d+EU8Ys9vhAQeA%M&_ zt<8LiyxMFdyRJN}7iUiZ=&d@t&Wkk4d$fITarUBWaB0;9H_|R|##C;?(**qJa4UXY z#)b_dBpaOxc@V<;-V%L|%b!+AQ&Q#lc!1&$n>-7jpEbh*G?W!y!!?s}@3ZCBo% z%OYrWIT*5?QPS90cYvuW(_+70f#%UxbRVP(+(`l2K;CU*8h4~4`Yx;sXa_FhrTJ2i z)B^|;3@yeTGxOZCM^Et2`5`|IeV10ROm{jJ+qnv;EtB4Gr=|S8Elf-|x0`W~I+ZX? zfpx+;`F7`Yvt4J+RZ5;6L?@OLve~q&n-u>>Y`a<<64@os&X(O*1bFIg*PNR8=l|Rp zzGuvJAv-ktd7#}$BaP5*R3UrQY==Ohs-{A=OuxWgzqCQ!?siGJ`#X0kzMFiZI&Ve} zn~)DrPtKg+PV>a7;@BGQN+;u+S1(<)ZwKxHf`L284YniWPQ|h|?rsv5)lE`9o=&>6 z-R;{VJ;z;dZkz1%B~@`+#g=>b`Z}#`1!(l^R8kSe%-M#%&T?;RnVAza5)J3)aO(I? z{?_?7VY~BhiRuJhl+6mg&Wpz$n&#lQ3oe3X_qAf&z41=zh9Y6zrF=Gx?u3GX+*|2l zZ0n8#HQUJ`W2FHV7ZR5J>TBw+vV8}-%VgMmdok|Z<70Knol_XS;Et_eL=W_GRS)7}RF-Or&#;}GyDJ-<)5R8^`p&b@ zKKs3s>&Ps)_4Dov4?fYxC&}WACHToEY}4-(W?RyLl^&F3+zQh5ruahUtpZ*}9PzDQ zRhY)zG-yF`$6}Io;#uOk*71VciY>!J{lF8_y2d+LMS^BT=2BAcYIZ6ac~wzqV3Unb z#diTPls8GpRfh+~q0?FT#yhNsc;~m?wt#ifUEQ{2u$krNAao}M?U3I<5LY*Qc*uXQ z1I1Z!gORZtf)meHbT_P;bv!>IXZ%DPgB{Ub|4_yq3W*}3mYxifJho*ieg?9#JX8_nMQiEod|J)~t``C{P&PAVeFr1!Y6`tm$)^s?Y7!TagoVg#CpqWt zna7^}!`EMb{n^KUw~W1j?H+%eAo7FTuYCWne|r1pe|P)hwcV{}p6PD(7f$|flf9*L zz3u1!RohfW2-f!{-B-^|oinw?**mQsW;~)+#*$=(rgCHJQ5kiho2c+k$9GO4ABuSx z9LzHD)Iq_!1H4cK;OQVWBvPr6t@&{iaU8tEhRPI;`d#RT!bYgm%YkmfuNfXT9K_Qp@H3#Pm6xSjx4ae_4(hP76|@5mw+^xHs=}Ql*5TZ_tDTghS?wk~4c^JK zEA<*Ub)C&wfn8$eW>;WwZ>#!FAj`GIqAw57@orrQ@&}CZ;W=*`2DQv5cjF z_}4s!Tf;A-m5h*KVYdMrb$cYey*dINJetp*woTC-NgLbQZ|Q>1rYc z3I6VHM<*1s-A7TvvbS$uv~hB(oi9a__wRrqE4`ceM4+g?HGi;7&5zMdCRkv+j}NiVCyc!(!bT?&94g zC>zRCy~UTrb~5j@d|Q9^JwEhl^KXKdakn$jN7<(Gix?EqGu*kJ0+`6(6irZ|Ip$U* zMNPa^;$k)0l`OXn-6S3)k_cNQ@ouxNNR$dG2KN+_ZRxcJIBeMmb0{{D_WX%`kw zOd9RNc0sePx_dE|5Vdjlpz4Cc`!HQ@8SZf0b_vH;aL3aHcZsq|hPwyd$6kKjB?RUe%o$MbC3nabRi@q825WU_1BjKzAap(y$8r3f(b$jEVnHn@5Zhk|iqp+%V_v6~mpx&@nw$ z#j@HeYfW6vd|rHcMIcAN=yGkvE9$N24b4cO-E&wPh~@^G&k!kRoyQFQ}+*G zH@rLVmeA~Ofjb?j5DdQSOKznmB80Pgt+`o^YEn~)$w{1$c5jVAQ0f-grw`hlJ>@P* z6BF(B#!;CS0GOd8i3=OwbWeh)6be%<=RYu~*7jsNS)2@UHl!TCz1mgck&>b+tZ`EP3v$m$vaUnF-zTjQ6L7nW9``n4^hG6Hva@S6) zZKV!@btKyg=#Y&$Ntyd6&kObLiQMkwx-sr9DkSU47n(e#v^yJjSM>zg zj+J=tGljGLPOCA4LU+iycCg(nLD^Y&Z*Ept_tHzt4!jEO-W1X)GK+UdGF)ZcT_|j) zTjkzmeZd45xZ?<$72JvYNWEiEcxQ;y%g`xL_ebE4iVMLVw%u31{#E9W1@8D*ysz)E zcxW)lhr66Rmyr^h)b46}^d|pHfmn|RNVAi{dZMxsU^Sdkv0v~G;7C%u$dIzfDft*m zM(_2NwKRE|&c&PhjPLh6mveB(Y&Ymmo@lipuT;XO0ZO_TBL`NG6mKQV?h&?wFM&au zc+|QoQ821UTeuC%3SrreZ~buL;*Y-e&2RkM_aEDO>gf$%`sn0i3rFi)ThD%Q{c9&* z`R3~{48Hk+&`$jK;rIWaAAIoGpx=HB82p|vxa04R3t*Qji!B(#I!J_D9qs&2<$$ zmioI&?-L{ww_oVaxDVbKyOMwB7e;yn-R$~eIXDk~I#yYcE&Bf22%PF5KTAcksOo3T zeX}mtJrtc~K$CA9#YLn;>2fHDbo>FOMk6BK-5@<0HW~o|X_Su9-OXS$(%rSu4I6@l zg221?`#wA$_FT_>pL4F?VT{=i66YK*)MD1^HC^Tv{CswXSo)sL^z?;Yrh8MQONvP> zaP|{aEVF(6{<5{7$hL2^$G){Bv5K*?z2)7)Sr}NUO?x5Kt)_FH^>s`F+aSXMkg>)y z=;Pn!*LD64tYR!bly~2OyTSbdxWcTeKO2a)6pyr3uy7JABE`jLPjk|p*~4W%mkKGj z>x~dNTx>V;O&%X&v`KoL&r*1CoS)6zwX#lV#=%Lg)HJO`Yxyp(iaB{-(MvpS42Ano znN!^ppj)n4s$0NHaPl;rQ{>MkxSyi^M@tY1gpZ5Y2}W@_gNsv6LHPR5wJQANb|wXRmW|}w}sCqG@SbEHK(nV z&?r@lzkZ!aRcav7caNKRQy?{GnOh-Tu9xiIWyJZV$i0dpxKcm$9qZAk7@gs!LN-v+ z5N|k%1AMexd++szbOlA-Ab><}aK8TdY`$K3s$1U`Xu~K(?e5B|u4-1IqQ_p3yUfGQ zd*~Vz!@jZ|H8|h#WNs4RrcVbsVIPFT)N@hI?uX;IQ+1{l9Pw^Mao&deBbB!BI9I98 ztG>wKTj0i@^Sjy&Gary8^sMJ$F2O0#4R!V0EO@UM143dm4*t_C{Lnd#zJDI{OL*hY z=1N#tQf=_Bu-w33Y%!GvZuDvm?7K#w>F3tx={md(`2EBGq6p{hi2=qdT>l`T_zwLt zH)QO+xUOA+{EJ$i@IC2$fsWd_m6pI#e~Fhnqg22h!sybDZT8+3PRU90ygzD2o-47h zac$65r3qvM#7(S{*;0db&)&ho2E5# z5V=3~ns@qg!=ho+{H$7F44aVz%1OJ>S|6#dVB|Pc3EOYk^Lk?jMuNyxzb6Je9X>N* z3-PWZkBXa3r)}7YRrA%44F3JxjGkfcwef&;mJB@OBBr!=aCteVP#_v}n!RbWpI<_k z*5YS>&_Wa&U#4KAHDn51mL$}Ff6sj!#)jNnx8!#FsjD0~8Vakdte)#U_5d^usZC!ac~*7~M3 z2a)lax+YAqM(Pu*%PKm0mPUarcY;#6b=b@SH_k|cC(xsaKJf5c{(zQHEv>fKi-Ry^ z46cKIsoI2tw7gTwHU>@h+5DL*?|xU_=FboQel~uXhy%8rn|{7-^(z~=I=i(5=OA>l z&$l?(9XB)rHM_WLpgBO>Lb@z$udUqUEI91cVO5fYqKWBvP6D7zzq=l zp$3^x)>c%RQJGEF#xYr+;4-tZ`=95KS2DgUe9;PPRur7Zir zwvf_wRoot^Z>hj}F!Bu1-plCEt*x&)kkgj*Vzg|hdKLgwqQkNBOaQaz14#jg>f+KL zlHYdHhHS~`vUA~z8!g?0FRt8Qy;&J@94j=kzgN$jb2@SLZU}K*%F(iDnIrqmS5>|B zYu85T8;_<;U`LvSCB7}mB!w{GafH6LKT+fOU{h&jiuz1Xm$34Qfs)bWHV>9* zwNrk^9q@bbZqn@j0X38pLW3!1oSzvSZS&4Y3P1FR;f00c8Oy?B9`^^Y9)AxN^e}Av z^S#MM{u%53bAH7T?BTKfGszlrMadEY^Cq|reH5YnK%TwwE5k@W+LhPfR@=M1lYOB2 z3u)3p_uKcf;iQ!xwG)`vO*Tm>Y6rPBhCb*V>nK~pNCMlG^8tpX;z~bT1^rqsncb(a z@%z-A;LZ5ETm-(BjY>RWPG(^TI(ECr`X!EVDlyTr7+Y;lC*L=W7G*EmlW@sd@TgNc z>`mT!9psMrx!`U~yrR>5!$$iPwpPE5K!&fp0A{A0=*W4NEt9fHihq^@r7`*5dD)_0 zeW$O3EgKtWb}>7-l=F~7mXac9sdikVumW#~8cIT=StF2i9D;1HDaEL9j{tFqVV#{s z9P`_HoYT~~%4Hct!ne$*{I7Q1eM+4gIU-E9*%{8@l1yt=lb$@JA=1{%|9pz0kQVc| zHP?xoMzcx%Juzpxp9t3aXjx@V23zZT+n{YCBxJxzfq$c8C=&wAhC3fEUPIwk||AeJ=o}D7T1ERi0dfVa5C43cu+mFb zrm3Ccf$5OfeR@H+#QSS)3O}z{#plWKFs5H}PR5|Ivm$@38JO5cyXB*)~II#G8n#hQD1_ zpWXSKe9+{}i4W25hb5!UnrXnpXLT##MQCmY2>5Dh2Np{7C6I)V)|9%v^2t;lr>+fU z;7D8B5RqLHn5K(M19|#kGZaqE+B+l`%*#rC`o{kMHoMyTN^;^ zdvJ#b7HJM_Zr);>A%J=63MyVJrPW9Z3O^<72;}U)4~>+XML{R>wN&wdHt?H3_xG~! z?t8@naPaT3?tA7YIOf_!8cdc#wRVL2)?vvjjrK*ZsRX@i(_i~9|61gA{NX)-3m^R% zD8>U`Uhk}AZpo?$UeJQ+ZSq>KC|{s1+S8WVxGO_fvoI%R_Oi0%-iD4g2^#HZXlY=F zL@ZFj!m`~AwMNEYwOli&y<-IgPkcnJaIhzJ{T{nLyYa*0Ue1furPP?#AdQmm8K_04o%q0}^}yTuC8>X#w~@k<9S@}m(0{x3&VgGu!H|1G z!=Mw4@-T=eb+;0SnZPslY=7478=t!({+ugxd+yvz-OowgW8Q-)v}?_ehO{;6EdiYx|DH$)O_xE+1Q@^X_J9r^^IjebtRhX$ z7@fiJWc5Sg`6iY56jGc9{NHLoikMqtPjjmW>g*7*mFhW?iBdUoFw~za%;}TP!G)oO zat>6c#?d*=!_Ww+m=2F~e``@%N|GdMYO#Y6t$7j{3(N^P=RyNj8gC_s2@%+;44i5Gtuo6SX!ih_lD`YD$?XrvED8^rE**|Wi zYsXPoy+$#->~cH2X>Mmbc4m)BN$L_0eGs!h>j{h}oRE_wnjlym(_H+MeQl{9z*1H= z!r`u<^SzTL^M}8aH+5m4-ZHAeIV`; ixH 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 GdH1y)MS^ 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 aTHiaD{4?iOV4!qaO-UXqS0-cp@qYpCauL4( literal 299544 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 z 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 G#{M6)z@Lu* diff --git a/material/assets/images/favicon.png b/material/assets/images/favicon.png index 23ccc2bac7294c857add8e40e27c5c4e4d8e6397..00025610d241d1688bb104b54f594de8f0b6c564 100644 GIT binary patch literal 1871 zcmV-V2e9~wP)?7M-VnLpVG(@LT3>Bq6K%AyiM5(o`!6V~))-A} zqCP=ltc^q)8=DA-iWk=B#gbJYrr-H>kLTz7_6Mu7I>{&BIWu$4%whMpyQujv&%%X? zpb?x%S+F1g9fpoUUqu+hdKenunn-P;`jWOdB_$a{>`Yy>=rWi|O-UgrX=RXSbz_G2 zqJ97*f6l>^!1rJ}&Ep{r)^=Z`V-kCwH3U5fl2p7bJvB7}d<}x>ix-myYlB$}-_)i7 zw>@AA?B-r-J}omXEftJpq@@wmA_I-}TByCoUaK*Amvgum@XXKf>FM6A^zCev03`2>5&+rgX9TPbXYOFf3PuGf=M%Hj|zxo)< z&dT!VWMvVPyJQKg6U4KP@5pCsHNF#(bLsP8m&nb|_G0KTl=5uk#t7G9zl?KC=FGXG zkJujuvAvy^=H#S;U|voRF-w`;Tm#2VPOmu!H9jyka-TR?o}uGnhAHUm5B9RWyaX@; z$c^PPhDLI|-s`2afdEZROjrcYoFVVpwVcyuNZ;Vzm-DxQ`$ug4vSqvTmoBB{f_#Iu zMxBm3v~2x)dKnCowCB&C^CjedC&*cd{!qPlmx^X9mM>2NK|t@oL97y)FR-nDJAaXo~lP9UIr6u~F;$qjc+S}Ub*HfqH z&s(>wi%w5Z(}M>OM87#{P$k91Cji;uzl2uC9^=8I84vNp;ltJ|q-*uQwGp4c;C?)E z#PvZR9UXO@fr&Ebapf&330O@5bWV8C+3X4O-|pMz*!SK3{q*$dQ<5exAZ9Us^w^-n zUuC#--8xzy0c*Q2W8wnt#_#*e@^Y%ggM0DfMT*77@I6r)>1U|`agB}*DSY*h0b)vR zlnHPkYs?p5`}^KK`se-%wICqRaFEZz&DsR^3eESK=(vHt!57B`wXcK)ztw& z@4$u{v9{}Ed@o@7${C{1G^lDeY&ZdEV@(aQN;uAFpTC6SWe*=d)P3w~aK?_SO&d2h zZbFcOui-*gNxUzh=ZKXCwRzK~L@)!$jV+ruYd`K6Krgr6l7GQhiVa1Vw{F=&8mxtH z^l2O~Fo6r8N32{@+G@9M-3h3+ww72W_T10Mj?vk(XX)CtYxLLMyY%|?Yx-CVhr@K| z&K>KlKp;Rr9XkuhW}1 zZ)htzo@l@4JK_B#78b#*c(34vr~x9xRx2LUnl+qX+KzEC>@{r%Q(Z{NNpX&n3g z$`#tNV~5;l&N98^`Lh0ilGadPp9H1=Y3f-8*vvXBd-v|8XV0FIHvaPaX3rjZ4kLQS z#1u$U(X6qdVRutwBQ-`~pFuo2rZ%!R^_`uabmPVi8X6j+j*brdS@KLrya7bioN4y& zQf}7N)RX{5_`L}wsG+&pQfm-aQ6ua08C);Vv#*hN=1g94n`czBSxa-Xr=_JO2#CR& zS|iGE%vu{v-t2L%q0OuY-sjlUENYug|0&>6u~=(ss~3a;F>N5KFA#aTcE9xX>w-FTxM7 zg|n9Pb|30~F3t$U?^T~-U0q$?uFlRN)EcS_z-P2?;GuO)Dr3%&$T-(dK}*zpSWkDi zr@Om*1dyE`R*9@(?CYK$_kE`JHt?wVG&D{CyL)?kgMfN5h*s^}5V6^FJ?4xl=q_l2 zikJEQ{v>~I??Gq?5YyM!$7*oK=E{e_0g$9Vm+k25OUCb-0dNWa3=ae)R>bVQAJabe zME3SWlhv2Bfq{X<{{H?3=yB*E7y_eUnqi+~ksQ}FfW-Oe{U0~mofS2Ph{*r|002ov JPDHLkV1j>GtsnpZ literal 1056 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UEa{HEjtq=#3k+XOiwE+VlDyqr z82-2SpV<%OaTa()76WMyFm^kcZO6dCc)`=fF~sBe-K+5#y@fJtAI{&lymfQKwqr2~ zCt6K)HCrDwC3%)PcB-t_tS?fYGKKrp)FS6~VQY2-dr2vsGT6H4XK{CbKb{VJ-6tv z`N9hwdeTYJqKX$@btNXswa09W3h1oa`Ppu!-h_6i%XU`FHRJBQXsHYS-&uU7;_VF9 zi;tq%ZKmpJo-4eR{QHdlyzhSHe|5Ca6`qmJT~+kSH1Aj3MvLQuvDYTKxJ6l9wvAqK zdB%3mo~lLnWlsN#UBy#ZvCMI+dDW-(9mfxMwN=FL4x8V)&NX(mep&BcE0cuQgBr{k zMYq~dDC{l1G$|*PvpMZ7$Ce!_D;)kEbzRNEq#HKP%p&W6WcS1^_evK#EnL4YO1*LE zxvKXGnaz)#_V2y0Qcm;sool(PwM;A)`5)Wj{E=t_3#|VxqKu$ENSsedl>&so{FHT&Co_$S0K>llS_qPdW8u zfu7wmU%#m*4m!l~B?(S#KA6L&Kd7c7#Uj`TLO``fq|8Q!QsPte^E5# z=BH$)RpQpLY2GwPpawUP4aNCsCFO}lsSKXEiRr1niRqci*$QTQ=6V*omI^>CO>_-R zbq$Ra0u9X+GD=Dctn~HE%ggmLL8^fms9G<-DE&^`TcCjq5+D;pGD>rktgKw}lS^|` z^Gd9&0)R@384Q>I->r|P25hI5RYq!NdPWI@p`{T&Ls2VGjX07yP&MJ1DJ2;oC70JI zasZV`A}R6B%uOw+EJ$SlyGp+xFWr7qm>-%sz9B$W42C8arlw{F#^#o8MbqyAmGC2( z6P#I<%3$E+G-Z+98=zDel2mArCqr6hPAbs*`nh=}Ir-`OX^CZ-$@zK3`iO|pPc|G%zu?NJ~mFH!-tJvPd-q+M1H42h^bla^IYl8-X@3c)I$ztaD0e0sse~ BmzDqk diff --git a/material/assets/javascripts/bundle.8ceb0d66.min.js b/material/assets/javascripts/bundle.8ceb0d66.min.js deleted file mode 100644 index f4bacb81b..000000000 --- a/material/assets/javascripts/bundle.8ceb0d66.min.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(t,e){for(var n in e)t[n]=e[n]}(window,function(t){function e(e){for(var r,o,i=e[0],u=e[1],b=e[2],s=0,O=[];s0})),Object(l.a)())}function w(t){return t.location$.pipe(Object(b.a)("pathname"),Object(f.a)(1),Object(s.a)((function(t){return Object(u.a)({url:t.href,responseType:"document",withCredentials:!0}).pipe(Object(O.a)("response"),Object(j.a)((function(){return function(t){location.href=t.href}(t),a.a})))})),Object(l.a)())}function $(t){var e=(void 0===t?{}:t).location$;return Object(r.a)(Object(c.a)(document,"DOMContentLoaded").pipe(Object(o.a)(document)),void 0!==e?w({location$:e}):a.a).pipe(Object(i.a)(1))}function x(t,e){return void 0===e&&(e=document),e.querySelector(t)||void 0}function S(t,e){void 0===e&&(e=document);var n=x(t,e);if(void 0===n)throw new ReferenceError('Missing element: expected "'+t+'" to be present');return n}function T(){return document.activeElement instanceof HTMLElement?document.activeElement:void 0}function k(t,e){return void 0===e&&(e=document),Array.from(e.querySelectorAll(t))}function C(t,e){void 0===e&&(e=!0),e?t.focus():t.blur()}function _(t){var e=Object(c.a)(t,"focus"),n=Object(c.a)(t,"blur");return Object(r.a)(e.pipe(Object(o.a)(!0)),n.pipe(Object(o.a)(!1))).pipe(Object(h.a)(t===T()),Object(i.a)(1))}function L(t){return{x:t.scrollLeft,y:t.scrollTop}}function A(t){return Object(r.a)(Object(c.a)(t,"scroll"),Object(c.a)(window,"resize")).pipe(Object(v.a)((function(){return L(t)})),Object(h.a)(L(t)),Object(i.a)(1))}function N(t){if(!(t instanceof HTMLInputElement))throw new Error("Not implemented");t.select()}function E(t){switch(t.tagName){case"INPUT":case"SELECT":case"TEXTAREA":return!0;default:return t.isContentEditable}}function R(){return Object(c.a)(window,"keydown").pipe(Object(m.a)((function(t){return!(t.metaKey||t.ctrlKey)})),Object(v.a)((function(t){return{type:t.key,claim:function(){t.preventDefault(),t.stopPropagation()}}})),Object(l.a)())}var M=n(107);function P(t){var e=matchMedia(t);return Object(M.a)((function(t){return e.addListener((function(){return t(e.matches)}))})).pipe(Object(h.a)(e.matches),Object(i.a)(1))}var H=n(0),U=n(62);function q(){return{x:Math.max(0,pageXOffset),y:Math.max(0,pageYOffset)}}function Q(t){var e=t.x,n=t.y;window.scrollTo(e||0,n||0)}function z(){return{width:innerWidth,height:innerHeight}}function I(){return Object(U.a)([Object(r.a)(Object(c.a)(window,"scroll"),Object(c.a)(window,"resize")).pipe(Object(v.a)(q),Object(h.a)(q())),Object(c.a)(window,"resize").pipe(Object(v.a)(z),Object(h.a)(z()))]).pipe(Object(v.a)((function(t){var e=Object(H.c)(t,2);return{offset:e[0],size:e[1]}})),Object(i.a)(1))}function D(t,e){var n=e.header$,r=e.viewport$,c=r.pipe(Object(b.a)("size"),Object(v.a)((function(){return{x:t.offsetLeft,y:t.offsetTop}})));return Object(U.a)([n,r,c]).pipe(Object(v.a)((function(t){var e=Object(H.c)(t,3),n=e[0].height,r=e[1],c=r.offset,a=r.size,o=e[2],i=o.x,u=o.y;return{offset:{x:c.x-i,y:c.y-u+n},size:a}})),Object(i.a)(1))}var W=n(108),J=n(58),F=n(109);function B(t,e){var n=e.tx$,r=Object(M.a)((function(e){return t.addEventListener("message",e)})).pipe(Object(O.a)("data"));return n.pipe(Object(W.a)((function(){return r}),{leading:!0,trailing:!0}),Object(J.a)((function(e){return t.postMessage(e)})),Object(F.a)(r),Object(l.a)())}var K,Y=n(45),V=n(115),X=n(36);function G(t,e){var n=e.document$;K=n.pipe(Object(V.a)(1),Object(v.a)((function(e){return t.reduce((function(t,n){var r,c=x("[data-md-toggle="+n+"]",e);return Object(H.a)(Object(H.a)({},t),void 0!==c?((r={})[n]=c,r):{})}),{})})),Object(i.a)(1))}function Z(t){return K.pipe(Object(s.a)((function(e){return void 0!==e[t]?Object(Y.a)(e[t]):a.a})),Object(X.a)())}function tt(t,e){t.checked!==e&&t.click()}function et(t){return Object(c.a)(t,"change").pipe(Object(v.a)((function(){return t.checked})),Object(h.a)(t.checked))}n.d(e,"l",(function(){return $})),n.d(e,"e",(function(){return E})),n.d(e,"o",(function(){return R})),n.d(e,"r",(function(){return P})),n.d(e,"v",(function(){return B})),n.d(e,"b",(function(){return x})),n.d(e,"c",(function(){return S})),n.d(e,"a",(function(){return T})),n.d(e,"d",(function(){return k})),n.d(e,"f",(function(){return C})),n.d(e,"m",(function(){return _})),n.d(e,"n",(function(){return A})),n.d(e,"g",(function(){return N})),n.d(e,"p",(function(){return p})),n.d(e,"q",(function(){return g})),n.d(e,"t",(function(){return I})),n.d(e,"u",(function(){return D})),n.d(e,"i",(function(){return Q})),n.d(e,"j",(function(){return G})),n.d(e,"k",(function(){return Z})),n.d(e,"h",(function(){return tt})),n.d(e,"s",(function(){return et}))},,,,function(t,e,n){"use strict";function r(t){return"object"==typeof t&&"string"==typeof t.base&&"object"==typeof t.worker&&"string"==typeof t.worker.search}var c=n(0),a=n(86);function o(t,e,n){switch(e){case"xmlns":break;case"viewBox":case"d":"boolean"!=typeof n?t.setAttributeNS(null,e,n):n&&t.setAttributeNS(null,e,"");break;default:"boolean"!=typeof n?t.setAttribute(e,n):n&&t.setAttribute(e,"")}}function i(t,e){var n,r;if("string"==typeof e||"number"==typeof e)t.innerHTML+=e.toString();else if(e instanceof Node)t.appendChild(e);else if(Array.isArray(e))try{for(var a=Object(c.f)(e),o=a.next();!o.done;o=a.next()){i(t,o.value)}}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=a.return)&&r.call(a)}finally{if(n)throw n.error}}}function u(t,e){for(var n,r,u,b,f=[],s=2;sn){for(;" "!==t[n]&&--n>0;);return t.substring(0,n)+"..."}return t}function p(t){return t>999?((t+1)/1e3).toFixed(+((t-950)%1e3>99))+"k":t.toString()}function v(t){for(var e=0,n=0,r=t.length;n=e[2].offset+c})),Object(i.a)());return Object(c.a)([s,O]).pipe(Object(o.a)((function(t){var e=Object(r.c)(t,2);return{height:e[0],lock:e[1]}})))}},function(t,e){},function(t,e,n){"use strict";n.d(e,"a",(function(){return O}));var r=n(0),c=n(35),a=n(59),o=n(46),i=n(58),u=n(98),b=n(65),f=n(1),s=n(39);function O(t){return Object(c.a)(Object(o.b)(a.a),Object(i.a)((function(t){var e=t.prev;e&&Object(s.a)(e)})),Object(u.a)(250),Object(o.b)(a.a),Object(i.a)((function(t){var e=t.next;Object(s.b)(e)})),Object(b.a)((function(){var e,n;try{for(var c=Object(r.f)(t),a=c.next();!a.done;a=c.next()){var o=a.value;Object(s.a)(Object(f.c)(".md-nav__list",o))}}catch(t){e={error:t}}finally{try{a&&!a.done&&(n=c.return)&&n.call(c)}finally{if(e)throw e.error}}})))}},function(t,e,n){"use strict";n.d(e,"a",(function(){return f}));var r=n(0),c=n(95),a=n(93),o=n(92),i=n(8),u=n(64),b=n(1);function f(t){var e,n,f=new Map;try{for(var s=Object(r.f)(t),O=s.next();!O.done;O=s.next()){var j=O.value,l=Object(b.b)("label",j);if(void 0!==l){var d=Object(b.c)("#"+l.htmlFor);f.set(d,j)}}}catch(t){e={error:t}}finally{try{O&&!O.done&&(n=s.return)&&n.call(s)}finally{if(e)throw e.error}}return a.a.apply(void 0,Object(r.e)(Object(r.e)(f.keys()).map((function(t){return Object(o.a)(t,"change")})))).pipe(Object(i.a)((function(){return Object(b.c)(".md-nav__list",f.get(Object(c.a)((function(t){return t.checked}),Object(r.e)(f.keys()))))}))).pipe(Object(i.a)((function(t){return{next:t}})),Object(u.a)((function(t,e){return{prev:t.next,next:e.next}})))}},function(t,e,n){"use strict";var r=n(76);n.d(e,"mountTableOfContents",(function(){return r.a}));var c=n(49);n.o(c,"mountNavigation")&&n.d(e,"mountNavigation",(function(){return c.mountNavigation}))},function(t,e,n){"use strict";n.d(e,"a",(function(){return O}));var r=n(0),c=n(35),a=n(62),o=n(45),i=n(24),u=n(8),b=n(1),f=n(30),s=n(49);function O(t){var e=t.header$,n=t.main$,O=t.viewport$,j=t.tablet$;return Object(c.a)(Object(i.a)((function(t){return j.pipe(Object(i.a)((function(c){if(c){var i=Object(b.d)(".md-nav__link",t),j=Object(f.watchSidebar)(t,{main$:n,viewport$:O}).pipe(Object(f.paintSidebar)(t,{header$:e})),l=Object(s.watchAnchorList)(i,{header$:e,viewport$:O}).pipe(Object(s.paintAnchorList)(i));return Object(a.a)([j,l]).pipe(Object(u.a)((function(t){var e=Object(r.c)(t,2);return{sidebar:e[0],anchors:e[1]}})))}return Object(o.a)({})})))})))}},function(t,e){},function(t,e,n){"use strict";n.d(e,"a",(function(){return f}));var r=n(0),c=n(35),a=n(59),o=n(46),i=n(58),u=n(65),b=n(23);function f(t){return Object(c.a)(Object(o.b)(a.a),Object(i.a)((function(t){var e,n,c,a,o=t.prev,i=t.next;try{for(var u=Object(r.f)(i),f=u.next();!f.done;f=u.next()){var s=Object(r.c)(f.value,1)[0];Object(b.a)(s),Object(b.b)(s)}}catch(t){e={error:t}}finally{try{f&&!f.done&&(n=u.return)&&n.call(u)}finally{if(e)throw e.error}}try{for(var O=Object(r.f)(o.entries()),j=O.next();!j.done;j=O.next()){var l=Object(r.c)(j.value,2),d=l[0];s=Object(r.c)(l[1],1)[0];Object(b.c)(s,d===o.length-1),Object(b.d)(s,!0)}}catch(t){c={error:t}}finally{try{j&&!j.done&&(a=O.return)&&a.call(O)}finally{if(c)throw c.error}}})),Object(u.a)((function(){var e,n;try{for(var c=Object(r.f)(t),a=c.next();!a.done;a=c.next()){var o=a.value;Object(b.a)(o),Object(b.b)(o)}}catch(t){e={error:t}}finally{try{a&&!a.done&&(n=c.return)&&n.call(c)}finally{if(e)throw e.error}}})))}},function(t,e,n){"use strict";n.d(e,"a",(function(){return l}));var r=n(0),c=n(99),a=n(62),o=n(8),i=n(87),u=n(24),b=n(64),f=n(36),s=n(97),O=n(94),j=n(1);function l(t,e){var n,l,d=e.header$,p=e.viewport$,v=new Map;try{for(var h=Object(r.f)(t),m=h.next();!m.done;m=h.next()){var y=m.value,g=decodeURIComponent(y.hash.substring(1)),w=Object(j.b)('[id="'+g+'"]');void 0!==w&&v.set(y,w)}}catch(t){n={error:t}}finally{try{m&&!m.done&&(l=h.return)&&l.call(h)}finally{if(n)throw n.error}}var $=d.pipe(Object(o.a)((function(t){return 18+t.height})));return p.pipe(Object(i.a)("size"),Object(o.a)((function(){var t=[];return Object(r.e)(v).reduce((function(e,n){for(var a=Object(r.c)(n,2),o=a[0],i=a[1];t.length;){if(!(v.get(t[t.length-1]).tagName>=i.tagName))break;t.pop()}for(var u=i.offsetTop;!u&&i.parentElement;)u=(i=i.parentElement).offsetTop;return e.set(Object(c.a)(t=Object(r.e)(t,[o])),u)}),new Map)})),Object(u.a)((function(t){return Object(a.a)([$,p]).pipe(Object(b.a)((function(t,e){for(var n=Object(r.c)(t,2),c=n[0],a=n[1],o=Object(r.c)(e,2),i=o[0],u=o[1].offset.y;a.length;){if(!(Object(r.c)(a[0],2)[1]-i=u))break;a=Object(r.e)([c.pop()],a)}return[c,a]}),[[],Object(r.e)(t)]),Object(f.a)((function(t,e){return t[0]===e[0]&&t[1]===e[1]})))}))).pipe(Object(o.a)((function(t){var e=Object(r.c)(t,2),n=e[0],c=e[1];return{prev:n.map((function(t){return Object(r.c)(t,1)[0]})),next:c.map((function(t){return Object(r.c)(t,1)[0]}))}})),Object(s.a)({prev:[],next:[]}),Object(O.a)(2,1),Object(o.a)((function(t){var e=Object(r.c)(t,2),n=e[0],c=e[1];return n.prev.length16)););return n}),0),Object(w.a)(e),Object(A.a)((function(){!function(t){t.innerHTML=""}(u)})))})))}function P(t,e){var n=t.rx$,r=e.query$;return Object(c.a)(Object(o.a)((function(t){var e=t.parentElement,c=Object(s.n)(e).pipe(Object(i.a)((function(t){return t.y>=e.scrollHeight-e.offsetHeight-16})),Object(v.a)(),Object(T.a)(S.a));return n.pipe(Object(T.a)(O.b),Object(k.a)("data"),M(t,{query$:r,fetch$:c}))})))}n.d(e,"a",(function(){return u})),n.d(e,"b",(function(){return m})),n.d(e,"c",(function(){return x})),n.d(e,"d",(function(){return P}))},function(t,e,n){"use strict";var r=n(0),c=n(35),a=n(62),o=n(24),i=n(8),u=n(101),b=n(63),f=n(36),s=n(97),O=n(96),j=n(1),l=n(21),d=n(59),p=n(46),v=n(58),h=n(65);var m=n(45),y=n(87);function g(t){var e=t.viewport$;return Object(c.a)(Object(o.a)((function(t){var n=function(t,e){return e.viewport$.pipe(Object(y.a)("size"),Object(o.a)((function(){var e=getComputedStyle(t),n=["sticky","-webkit-sticky"].includes(e.position);return Object(m.a)({sticky:n,height:n?t.offsetHeight:0})})))}(t,{viewport$:e}),g=Object(l.b)("main").pipe(Object(i.a)((function(t){return Object(j.b)("h1, h2, h3, h4, h5, h6",t)})),Object(u.a)((function(t){return void 0!==t})),Object(b.a)(Object(l.b)("header-title")),Object(o.a)((function(t){var a=Object(r.c)(t,2),o=a[0],u=a[1];return Object(j.u)(o,{header$:n,viewport$:e}).pipe(Object(i.a)((function(t){return t.offset.y>=o.offsetHeight?"page":"site"})),Object(f.a)(),function(t){return Object(c.a)(Object(p.b)(d.a),Object(v.a)((function(e){!function(t,e){t.setAttribute("data-md-state",e?"active":"")}(t,"page"===e)})),Object(h.a)((function(){!function(t){t.removeAttribute("data-md-state")}(t)})))}(u))})),Object(s.a)("site"));return Object(a.a)([n,g]).pipe(Object(i.a)((function(t){var e=Object(r.c)(t,2),n=e[0],c=e[1];return Object(r.a)({type:c},n)})),Object(O.a)(1))})))}n.d(e,"a",(function(){return g}))},function(t,e,n){"use strict";var r=n(25),c=n(35),a=n(24),o=n(87),i=n(58),u=n(21),b=n(59),f=n(46),s=n(65);var O=n(0),j=n(62),l=n(103),d=n(8),p=n(36);function v(t){var e=t.header$,n=t.viewport$,v=new r.a;return Object(u.b)("header").pipe(Object(a.a)((function(t){return v.pipe(Object(o.a)("active"),(e=t,Object(c.a)(Object(f.b)(b.a),Object(i.a)((function(t){var n=t.active;!function(t,e){t.setAttribute("data-md-state",e?"shadow":"")}(e,n)})),Object(s.a)((function(){!function(t){t.removeAttribute("data-md-state")}(e)})))));var e}))).subscribe(),Object(c.a)(Object(a.a)((function(t){return function(t,e){var n=e.header$,r=e.viewport$,c=n.pipe(Object(l.a)("height")),a=Object(j.a)([c,r]).pipe(Object(d.a)((function(e){var n=Object(O.c)(e,2),r=n[0],c=n[1],a=c.offset.y,o=c.size.height,i=t.offsetTop,u=t.offsetHeight+i;return o-Math.max(0,i-a,r)-Math.max(0,o+a-u)})),Object(d.a)((function(t){return Math.max(0,t)})),Object(p.a)()),o=Object(j.a)([c,r]).pipe(Object(d.a)((function(e){var n=Object(O.c)(e,2),r=n[0];return n[1].offset.y>=t.offsetTop-r})),Object(p.a)());return Object(j.a)([c,a,o]).pipe(Object(d.a)((function(e){var n=Object(O.c)(e,3),r=n[0],c=n[1],a=n[2];return{offset:t.offsetTop-r,height:c,active:a}})))}(t,{header$:e,viewport$:n})})),Object(i.a)((function(t){return v.next(t)})))}n.d(e,"a",(function(){return v}))},function(t,e,n){"use strict";var r=n(35),c=n(24),a=n(8),o=n(36),i=n(1),u=n(59),b=n(46),f=n(58),s=n(65);function O(t){var e=t.header$,n=t.viewport$;return Object(r.a)(Object(c.a)((function(t){return Object(i.u)(t,{header$:e,viewport$:n}).pipe(Object(a.a)((function(t){return{hidden:t.offset.y>=20}})),Object(o.a)(),function(t){return Object(r.a)(Object(b.b)(u.a),Object(f.a)((function(e){var n=e.hidden;!function(t,e){t.setAttribute("data-md-state",e?"hidden":"")}(t,n)})),Object(s.a)((function(){!function(t){t.removeAttribute("data-md-state")}(t)})))}(t))})))}n.d(e,"a",(function(){return O}))},function(t,e,n){"use strict";var r=n(35),c=n(45),a=n(24),o=n(8),i=n(36),u=n(1),b=n(59),f=n(46),s=n(58),O=n(65);function j(t){var e=t.header$,n=t.viewport$,j=t.screen$;return Object(r.a)(Object(a.a)((function(t){return j.pipe(Object(a.a)((function(a){return a?Object(u.u)(t,{header$:e,viewport$:n}).pipe(Object(o.a)((function(t){return{hidden:t.offset.y>=10}})),Object(i.a)(),function(t){return Object(r.a)(Object(f.b)(b.a),Object(s.a)((function(e){var n=e.hidden;!function(t,e){t.setAttribute("data-md-state",e?"hidden":"")}(t,n)})),Object(O.a)((function(){!function(t){t.removeAttribute("data-md-state")}(t)})))}(t)):Object(c.a)({hidden:!0})})))})))}n.d(e,"a",(function(){return j}))},,,,,,,function(t,e,n){"use strict";n.r(e);var r=n(0),c=n(113),a=n(62),o=n(59),i=n(92),u=n(45),b=n(105),f=n(93),s=n(96),O=n(24),j=n(101),l=n(58),d=n(98),p=n(106),v=n(63),h=n(46),m=n(36),y=n(8),g=n(114),w=n(103),$=n(94),x=n(111),S=n(87),T=n(112),k=n(115),C=n(1),_=n(41),L=n(7),A=n(61),N=n(107),E=n(31),R=n(5);var M=n(116),P=n(109);var H=n(102);var U=n(110);function q(){return/(iPad|iPhone|iPod)/.test(navigator.userAgent)}var Q=n(104),z=n(117);function I(t){switch(Object(r.c)(t.match(/(git(?:hub|lab))/i)||[],1)[0].toLowerCase()){case"github":var e=Object(r.c)(t.match(/^.+github\.com\/([^\/]+)\/?([^\/]+)/i),3);return function(t,e){return Object(z.a)({url:void 0!==e?"https://api.github.com/repos/"+t+"/"+e:"https://api.github.com/users/"+t,responseType:"json"}).pipe(Object(j.a)((function(t){return 200===t.status})),Object(w.a)("response"),Object(O.a)((function(t){if(void 0!==e){var n=t.stargazers_count,r=t.forks_count;return Object(u.a)([Object(R.e)(n||0)+" Stars",Object(R.e)(r||0)+" Forks"])}var c=t.public_repos;return Object(u.a)([Object(R.e)(c||0)+" Repositories"])})))}(e[1],e[2]);case"gitlab":var n=Object(r.c)(t.match(/^.+?([^\/]*gitlab[^\/]+)\/(.+)/i),3);return function(t,e){return Object(z.a)({url:"https://"+t+"/api/v4/projects/"+encodeURIComponent(e),responseType:"json"}).pipe(Object(j.a)((function(t){return 200===t.status})),Object(w.a)("response"),Object(y.a)((function(t){var e=t.star_count,n=t.forks_count;return[Object(R.e)(e)+" Stars",Object(R.e)(n)+" Forks"]})))}(n[1],n[2]);default:return b.a}}var D=n(25);function W(t,e){t.setAttribute("data-md-state","lock"),t.style.top="-"+e+"px"}function J(t){var e=-1*parseInt(t.style.top,10);t.removeAttribute("data-md-state"),t.style.top="",e&&window.scrollTo(0,e)}function F(t){var e,n,z,F;if(!Object(R.d)(t))throw new SyntaxError("Invalid configuration: "+JSON.stringify(t));var B=Object(C.p)(),K=Object(C.q)(),Y=Object(C.t)(),V=Object(C.r)("(min-width: 960px)"),X=Object(C.r)("(min-width: 1220px)"),G=t.feature.instant?Object(C.l)({location$:B}):Object(C.l)();Object(C.j)(["drawer","search"],{document$:G}),Object(L.setupComponents)(["container","header","header-title","hero","main","navigation","search","search-query","search-reset","search-result","tabs","toc"],{document$:G});var Z=Object(_.c)(t.worker.search,{base:t.base,location$:B}),tt=Object(L.useComponent)("header").pipe(Object(L.mountHeader)({viewport$:Y}),Object(s.a)(1)),et=Object(L.useComponent)("main").pipe(Object(L.mountMain)({header$:tt,viewport$:Y}),Object(s.a)(1)),nt=Object(L.useComponent)("search-query").pipe(Object(L.mountSearchQuery)(Z),Object(s.a)(1)),rt=Object(L.useComponent)("search-reset").pipe(Object(L.mountSearchReset)(),Object(s.a)(1)),ct=Object(L.useComponent)("search-result").pipe(Object(L.mountSearchResult)(Z,{query$:nt}),Object(s.a)(1)),at=Object(L.useComponent)("search").pipe(Object(L.mountSearch)({query$:nt,reset$:rt,result$:ct}),Object(s.a)(1)),ot=Object(L.useComponent)("navigation").pipe(Object(L.mountNavigation)({header$:tt,main$:et,viewport$:Y,screen$:X}),Object(s.a)(1)),it=Object(L.useComponent)("toc").pipe(Object(L.mountTableOfContents)({header$:tt,main$:et,viewport$:Y,tablet$:V}),Object(s.a)(1)),ut=Object(L.useComponent)("tabs").pipe(Object(L.mountTabs)({header$:tt,viewport$:Y,screen$:X}),Object(s.a)(1)),bt=Object(L.useComponent)("hero").pipe(Object(L.mountHero)({header$:tt,viewport$:Y}),Object(s.a)(1)),ft=function(){var t=Object(C.k)("search"),e=t.pipe(Object(O.a)(C.s)),n=Object(C.o)().pipe(Object(v.a)(e),Object(y.a)((function(t){var e=Object(r.c)(t,2),n=e[0],c=e[1];return Object(r.a)({mode:c?"search":"global"},n)})),Object(g.a)());return n.pipe(Object(j.a)((function(t){return"search"===t.mode})),Object(v.a)(t,Object(L.useComponent)("search-query"),Object(L.useComponent)("search-result"))).subscribe((function(t){var e=Object(r.c)(t,4),n=e[0],c=e[1],a=e[2],o=e[3],i=Object(C.a)();switch(n.type){case"Enter":i===a&&n.claim();break;case"Escape":case"Tab":Object(C.h)(c,!1),Object(C.f)(a,!1);break;case"ArrowUp":case"ArrowDown":if(void 0===i)Object(C.f)(a);else{var u=Object(r.e)([a],Object(C.d)("[href]",o)),b=Math.max(0,(Math.max(0,u.indexOf(i))+u.length+("ArrowUp"===n.type?-1:1))%u.length);Object(C.f)(u[b])}n.claim();break;default:a!==Object(C.a)()&&Object(C.f)(a)}})),n.pipe(Object(j.a)((function(t){if("global"===t.mode){var e=Object(C.a)();if(void 0!==e)return!Object(C.e)(e)}return!1})),Object(v.a)(Object(L.useComponent)("search-query"))).subscribe((function(t){var e=Object(r.c)(t,2),n=e[0],c=e[1];switch(n.type){case"f":case"s":Object(C.f)(c),Object(C.g)(c),n.claim();break;case"p":case",":var a=Object(C.b)("[href][rel=prev]");void 0!==a&&a.click();break;case"n":case".":var o=Object(C.b)("[href][rel=next]");void 0!==o&&o.click()}})),n}();!function(t){var e=t.document$,n=t.hash$,c=e.pipe(Object(y.a)((function(){return Object(C.d)("details")})));Object(f.a)(Object(C.r)("print").pipe(Object(j.a)(M.a)),Object(i.a)(window,"beforeprint")).pipe(Object(P.a)(c)).subscribe((function(t){var e,n;try{for(var c=Object(r.f)(t),a=c.next();!a.done;a=c.next()){a.value.setAttribute("open","")}}catch(t){e={error:t}}finally{try{a&&!a.done&&(n=c.return)&&n.call(c)}finally{if(e)throw e.error}}})),n.pipe(Object(y.a)((function(t){return Object(C.b)('[id="'+t+'"]')})),Object(j.a)((function(t){return void 0!==t})),Object(l.a)((function(t){var e=t.closest("details");e&&!e.open&&e.setAttribute("open","")}))).subscribe((function(t){return t.scrollIntoView()}))}({document$:G,hash$:K}),function(t){t.document$.pipe(Object(H.a)(1),Object(v.a)(Object(L.useComponent)("container")),Object(y.a)((function(t){var e=Object(r.c)(t,2)[1];return Object(C.d)("script",e)}))).subscribe((function(t){var e,n;try{for(var c=Object(r.f)(t),a=c.next();!a.done;a=c.next()){var o=a.value;if(o.src||/(^|\/javascript)$/i.test(o.type)){var i=document.createElement("script"),u=o.src?"src":"innerText";i[u]=o[u],o.replaceWith(i)}}}catch(t){e={error:t}}finally{try{a&&!a.done&&(n=c.return)&&n.call(c)}finally{if(e)throw e.error}}}))}({document$:G}),function(t){t.document$.pipe(Object(y.a)((function(){return Object(C.c)(".md-source[href]")})),Object(O.a)((function(t){var e=t.href;return Object(R.a)(""+Object(R.c)(e),(function(){return I(e)}))})),Object(Q.a)((function(){return b.a}))).subscribe((function(t){var e,n;try{for(var c=Object(r.f)(Object(C.d)(".md-source__repository")),a=c.next();!a.done;a=c.next()){var o=a.value;o.hasAttribute("data-md-state")||(o.setAttribute("data-md-state","done"),o.appendChild(Object(E.c)(t)))}}catch(t){e={error:t}}finally{try{a&&!a.done&&(n=c.return)&&n.call(c)}finally{if(e)throw e.error}}}))}({document$:G}),function(t){var e=t.document$,n=document.createElement("table");e.pipe(Object(y.a)((function(){return Object(C.d)("table:not([class])")}))).subscribe((function(t){var e,c;try{for(var a=Object(r.f)(t),o=a.next();!o.done;o=a.next()){var i=o.value;i.replaceWith(n),n.replaceWith(Object(E.d)(i))}}catch(t){e={error:t}}finally{try{o&&!o.done&&(c=a.return)&&c.call(a)}finally{if(e)throw e.error}}}))}({document$:G}),function(t){var e=t.document$.pipe(Object(y.a)((function(){return Object(C.d)("[data-md-scrollfix]")})),Object(s.a)(1));e.subscribe((function(t){var e,n;try{for(var c=Object(r.f)(t),a=c.next();!a.done;a=c.next()){a.value.removeAttribute("data-md-scrollfix")}}catch(t){e={error:t}}finally{try{a&&!a.done&&(n=c.return)&&n.call(c)}finally{if(e)throw e.error}}})),Object(U.a)(q,e,b.a).pipe(Object(O.a)((function(t){return f.a.apply(void 0,Object(r.e)(t.map((function(t){return Object(i.a)(t,"touchstart").pipe(Object(p.a)(t))}))))}))).subscribe((function(t){var e=t.scrollTop;0===e?t.scrollTop=1:e+t.offsetHeight===t.scrollHeight&&(t.scrollTop=e-1)}))}({document$:G});var st=function(t){var e=(void 0===t?{}:t).duration,n=new D.a,r=document.createElement("div");return r.classList.add("md-dialog","md-typeset"),n.pipe(Object(O.a)((function(t){return Object(u.a)(document.body).pipe(Object(y.a)((function(t){return t.appendChild(r)})),Object(h.b)(o.a),Object(d.a)(1),Object(l.a)((function(e){e.innerHTML=t,e.setAttribute("data-md-state","open")})),Object(d.a)(e||2e3),Object(l.a)((function(t){return t.removeAttribute("data-md-state")})),Object(d.a)(400),Object(l.a)((function(t){t.innerHTML="",t.remove()})))}))).subscribe(),n}(),Ot=function(t){var e=t.document$,n=t.dialog$;if(!A.isSupported())return b.a;e.subscribe((function(){var t,e,n=Object(C.d)("pre > code");try{for(var c=Object(r.f)(n.entries()),a=c.next();!a.done;a=c.next()){var o=Object(r.c)(a.value,2),i=o[0],u=o[1],b=u.parentElement;b.id="__code_"+i,b.insertBefore(Object(E.a)(b.id),u)}}catch(e){t={error:e}}finally{try{a&&!a.done&&(e=c.return)&&e.call(c)}finally{if(t)throw t.error}}}));var c=Object(N.a)((function(t){new A(".md-clipboard").on("success",t)})).pipe(Object(g.a)());return c.pipe(Object(l.a)((function(t){return t.clearSelection()})),Object(p.a)(Object(R.f)("clipboard.copied"))).subscribe(n),c}({document$:G,dialog$:st});K.subscribe((function(){Object(C.k)("drawer").subscribe((function(t){Object(C.h)(t,!1)}))})),K.pipe(Object(O.a)((function(t){return Object(C.k)("search").pipe(Object(j.a)((function(t){return t.checked})),Object(l.a)((function(t){return Object(C.h)(t,!1)})),Object(d.a)(125),Object(p.a)(t))}))).subscribe((function(t){Object(C.b)('[id="'+t+'"]').scrollIntoView()}));var jt=Object(C.k)("search");function lt(t){return t.pathname===location.pathname&&t.hash.length>0}if(Object(a.a)([jt.pipe(Object(O.a)(C.s)),V]).pipe(Object(v.a)(Y),Object(O.a)((function(t){var e=Object(r.c)(t,2),n=Object(r.c)(e[0],2),c=n[0],a=n[1],i=e[1].offset.y,u=c&&!a;return G.pipe(Object(d.a)(u?400:100),Object(h.b)(o.a),Object(l.a)((function(t){var e=t.body;return u?W(e,i):J(e)})))}))).subscribe(),t.feature.instant){"scrollRestoration"in history&&(history.scrollRestoration="manual");try{for(var dt=Object(r.f)(['link[rel="shortcut icon"]','link[rel="stylesheet"]']),pt=dt.next();!pt.done;pt=dt.next()){var vt=pt.value;try{for(var ht=(z=void 0,Object(r.f)(Object(C.d)(vt))),mt=ht.next();!mt.done;mt=ht.next()){var yt=mt.value;yt.href=yt.href}}catch(t){z={error:t}}finally{try{mt&&!mt.done&&(F=ht.return)&&F.call(ht)}finally{if(z)throw z.error}}}}catch(t){e={error:t}}finally{try{pt&&!pt.done&&(n=dt.return)&&n.call(dt)}finally{if(e)throw e.error}}var gt=Object(i.a)(document.body,"click").pipe(Object(j.a)((function(t){return!(t.metaKey||t.ctrlKey)})),Object(O.a)((function(t){if(t.target instanceof HTMLElement){var e=t.target.closest("a");if(e&&function(t){return t.host===location.host&&(!t.pathname||"/"===t.pathname||/\/[\w-]+(?:\/?|\.html)$/i.test(t.pathname))}(e))return lt(e)||t.preventDefault(),Object(u.a)(e.href)}return b.a})),Object(m.a)(),Object(y.a)((function(t){return{url:new URL(t)}})),Object(g.a)()),wt=gt.pipe(Object(j.a)((function(t){return!lt(t.url)})),Object(g.a)()),$t=Object(i.a)(window,"popstate").pipe(Object(j.a)((function(t){return null!==t.state})),Object(y.a)((function(t){return{url:new URL(location.href),data:t.state}})),Object(g.a)());Object(f.a)(wt,$t).pipe(Object(w.a)("url")).subscribe(B),gt.pipe(Object(m.a)((function(t,e){var n=t.url,r=e.url;return n.href===r.href})),Object(j.a)((function(t){return!lt(t.url)}))).subscribe((function(t){var e=t.url;history.pushState({},"",e.toString())})),Object(f.a)(gt,$t).pipe(Object($.a)(2,1)).subscribe((function(t){var e=Object(r.c)(t,2),n=e[0],c=e[1];console.log("<- "+n.url),console.log("-> "+c.url),null!==n.url.href.match(c.url.href)&<(n.url)&&Object(C.i)(c.data||{y:0})})),Y.pipe(Object(x.a)(250),Object(S.a)("offset")).subscribe((function(t){var e=t.offset;history.replaceState(e,"")})),Object(f.a)(wt,$t).pipe(Object(T.a)(G),Object(v.a)(G)).subscribe((function(t){var e,n,c=Object(r.c)(t,2),a=c[0],o=a.url,i=a.data,u=c[1],b=u.title,f=u.head;console.log("Done",o.href,i),document.dispatchEvent(new CustomEvent("DOMContentSwitch")),document.title=b;try{for(var s=Object(r.f)(['link[rel="canonical"]','meta[name="author"]','meta[name="description"]']),O=s.next();!O.done;O=s.next()){var j=O.value,l=Object(C.b)(j,f),d=Object(C.b)(j,document.head);void 0!==l&&void 0!==d&&d.replaceWith(l)}}catch(t){e={error:t}}finally{try{O&&!O.done&&(n=s.return)&&n.call(s)}finally{if(e)throw e.error}}if(Object(C.k)("search").subscribe((function(t){Object(C.h)(t,!1)})),o.hash){console.log("hash data?",i);var p=document.createElement("a");p.href=o.hash,p.click()}else Object(C.i)(i||{y:0})})),$t.subscribe((function(t){var e=t.url;console.log("Popstate "+e.href,e)}))}ft.pipe(Object(j.a)((function(t){return"global"===t.mode&&["Tab"].includes(t.type)})),Object(k.a)(1)).subscribe((function(){var t,e;try{for(var n=Object(r.f)(Object(C.d)(".headerlink")),c=n.next();!c.done;c=n.next()){c.value.style.visibility="visible"}}catch(e){t={error:e}}finally{try{c&&!c.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}}));var xt={search$:at,clipboard$:Ot,location$:B,hash$:K,keyboard$:ft,dialog$:st,main$:et,navigation$:ot,toc$:it,tabs$:ut,hero$:bt},St=Object(r.d)(xt,[]);return f.a.apply(void 0,Object(r.e)(Object(c.a)(St))).subscribe(),{state:xt}}n.d(e,"setScrollLock",(function(){return W})),n.d(e,"resetScrollLock",(function(){return J})),n.d(e,"initialize",(function(){return F})),document.documentElement.classList.remove("no-js"),document.documentElement.classList.add("js"),navigator.userAgent.match(/(iPad|iPhone|iPod)/g)&&document.documentElement.classList.add("ios")}])); -//# sourceMappingURL=bundle.8ceb0d66.min.js.map \ No newline at end of file diff --git a/material/assets/javascripts/bundle.8ceb0d66.min.js.map b/material/assets/javascripts/bundle.8ceb0d66.min.js.map deleted file mode 100644 index 03b87d5c4..000000000 --- a/material/assets/javascripts/bundle.8ceb0d66.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/assets/javascripts/observables/agent/location/_/index.ts","webpack:///./src/assets/javascripts/observables/agent/location/hash/index.ts","webpack:///./src/assets/javascripts/observables/agent/document/switch/index.ts","webpack:///./src/assets/javascripts/observables/agent/document/_/index.ts","webpack:///./src/assets/javascripts/observables/agent/element/_/index.ts","webpack:///./src/assets/javascripts/observables/agent/element/focus/index.ts","webpack:///./src/assets/javascripts/observables/agent/element/offset/index.ts","webpack:///./src/assets/javascripts/observables/agent/element/select/index.ts","webpack:///./src/assets/javascripts/observables/agent/keyboard/index.ts","webpack:///./src/assets/javascripts/observables/agent/media/index.ts","webpack:///./src/assets/javascripts/observables/agent/viewport/offset/index.ts","webpack:///./src/assets/javascripts/observables/agent/viewport/size/index.ts","webpack:///./src/assets/javascripts/observables/agent/viewport/_/index.ts","webpack:///./src/assets/javascripts/observables/agent/worker/index.ts","webpack:///./src/assets/javascripts/observables/toggle/index.ts","webpack:///./src/assets/javascripts/observables/index.ts","webpack:///./src/assets/javascripts/utilities/config/index.ts","webpack:///./src/assets/javascripts/utilities/jsx/index.ts","webpack:///./src/assets/javascripts/utilities/rxjs/index.ts","webpack:///./src/assets/javascripts/utilities/string/index.ts","webpack:///./src/assets/javascripts/utilities/index.ts","webpack:///./src/assets/javascripts/components/index.ts","webpack:///./src/assets/javascripts/components/shared/sidebar/apply/index.ts","webpack:///./src/assets/javascripts/components/_/index.ts","webpack:///./src/assets/javascripts/components/toc/anchor/apply/index.ts","webpack:///./src/assets/javascripts/components/shared/index.ts","webpack:///./src/assets/javascripts/templates/clipboard/index.tsx","webpack:///./src/assets/javascripts/templates/search/index.tsx","webpack:///./src/assets/javascripts/templates/source/index.tsx","webpack:///./src/assets/javascripts/templates/table/index.tsx","webpack:///./src/assets/javascripts/templates/index.ts","webpack:///./src/assets/javascripts/components/navigation/layer/apply/index.ts","webpack:///./src/assets/javascripts/workers/search/message/index.ts","webpack:///./src/assets/javascripts/workers/search/_/index.ts","webpack:///./src/assets/javascripts/workers/index.ts","webpack:///./src/assets/javascripts/components/navigation/layer/index.ts","webpack:///./src/assets/javascripts/components/toc/anchor/index.ts","webpack:///./src/assets/javascripts/components/navigation/index.ts","webpack:///./src/assets/javascripts/components/navigation/_/index.ts","webpack:///./src/assets/javascripts/components/shared/sidebar/index.ts","webpack:///./src/assets/javascripts/components/shared/sidebar/paint/index.ts","webpack:///./src/assets/javascripts/components/shared/sidebar/watch/index.ts","webpack:///./src/assets/javascripts/components/navigation/layer/paint/index.ts","webpack:///./src/assets/javascripts/components/navigation/layer/watch/index.ts","webpack:///./src/assets/javascripts/components/toc/index.ts","webpack:///./src/assets/javascripts/components/toc/_/index.ts","webpack:///./src/assets/javascripts/components/toc/anchor/paint/index.ts","webpack:///./src/assets/javascripts/components/toc/anchor/watch/index.ts","webpack:///./src/assets/javascripts/components/search/_/index.ts","webpack:///./src/assets/javascripts/components/search/query/watch/index.ts","webpack:///./src/assets/javascripts/components/search/query/_/index.ts","webpack:///./src/assets/javascripts/components/search/reset/_/index.ts","webpack:///./src/assets/javascripts/components/search/reset/watch/index.ts","webpack:///./src/assets/javascripts/components/search/result/apply/index.ts","webpack:///./src/assets/javascripts/components/search/result/paint/index.ts","webpack:///./src/assets/javascripts/components/search/result/_/index.ts","webpack:///./src/assets/javascripts/components/search/index.ts","webpack:///./src/assets/javascripts/components/header/_/index.ts","webpack:///./src/assets/javascripts/components/header/watch/index.ts","webpack:///./src/assets/javascripts/components/header/paint/index.ts","webpack:///./src/assets/javascripts/components/header/apply/index.ts","webpack:///./src/assets/javascripts/components/header/index.ts","webpack:///./src/assets/javascripts/components/main/_/index.ts","webpack:///./src/assets/javascripts/components/main/paint/index.ts","webpack:///./src/assets/javascripts/components/main/apply/index.ts","webpack:///./src/assets/javascripts/components/main/watch/index.ts","webpack:///./src/assets/javascripts/components/main/index.ts","webpack:///./src/assets/javascripts/components/hero/_/index.ts","webpack:///./src/assets/javascripts/components/hero/paint/index.ts","webpack:///./src/assets/javascripts/components/hero/apply/index.ts","webpack:///./src/assets/javascripts/components/hero/index.ts","webpack:///./src/assets/javascripts/components/tabs/_/index.ts","webpack:///./src/assets/javascripts/components/tabs/paint/index.ts","webpack:///./src/assets/javascripts/components/tabs/apply/index.ts","webpack:///./src/assets/javascripts/components/tabs/index.ts","webpack:///./src/assets/javascripts/patches/scrollfix/index.ts","webpack:///./src/assets/javascripts/patches/source/index.ts","webpack:///./src/assets/javascripts/patches/source/github/index.ts","webpack:///./src/assets/javascripts/patches/source/gitlab/index.ts","webpack:///./src/assets/javascripts/index.ts","webpack:///./src/assets/javascripts/integrations/keyboard/index.ts","webpack:///./src/assets/javascripts/patches/details/index.ts","webpack:///./src/assets/javascripts/patches/script/index.ts","webpack:///./src/assets/javascripts/patches/table/index.ts","webpack:///./src/assets/javascripts/integrations/dialog/index.ts","webpack:///./src/assets/javascripts/integrations/clipboard/index.ts"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","0","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","watchLocation","BehaviorSubject","URL","location","href","getLocationHash","hash","substring","watchLocationHash","fromEvent","pipe","map","startWith","filter","share","watchDocumentSwitch","location$","distinctUntilKeyChanged","skip","switchMap","url","ajax","responseType","withCredentials","pluck","catchError","setLocation","watchDocument","merge","document","mapTo","shareReplay","getElement","selector","node","querySelector","undefined","getElementOrThrow","el","ReferenceError","getActiveElement","activeElement","HTMLElement","getElements","Array","from","querySelectorAll","setElementFocus","focus","blur","watchElementFocus","focus$","blur$","getElementOffset","x","scrollLeft","y","scrollTop","watchElementOffset","setElementSelection","HTMLInputElement","Error","select","isSusceptibleToKeyboard","tagName","isContentEditable","watchKeyboard","ev","metaKey","ctrlKey","type","claim","preventDefault","stopPropagation","watchMedia","query","media","matchMedia","fromEventPattern","next","addListener","matches","getViewportOffset","Math","max","pageXOffset","pageYOffset","setViewportOffset","scrollTo","getViewportSize","width","innerWidth","height","innerHeight","watchViewport","combineLatest","offset","size","watchViewportAt","header$","viewport$","offset$","offsetLeft","offsetTop","watchWorker","worker","tx$","rx$","addEventListener","throttle","leading","trailing","tap","message","postMessage","switchMapTo","toggles$","setupToggles","names","document$","take","reduce","toggles","useToggle","of","distinctUntilChanged","setToggle","checked","click","watchToggle","isConfig","config","base","search","setAttribute","setAttributeNS","appendChild","child","innerHTML","toString","Node","isArray","h","tag","attributes","createElementNS","createElement","keys","attr","children","cache","factory","defer","sessionStorage","getItem","JSON","parse","value$","subscribe","setItem","stringify","err","lang","translate","innerText","replace","truncate","round","toFixed","len","charCodeAt","setSidebarOffset","style","top","resetSidebarOffset","setSidebarHeight","resetSidebarHeight","setSidebarLock","resetSidebarLock","removeAttribute","components$","setupComponents","components","prev","replaceWith","useComponent","setAnchorBlur","resetAnchorBlur","setAnchorActive","classList","toggle","resetAnchorActive","remove","css","container","renderClipboard","id","path","class","title","xmlns","viewBox","item","link","article","section","teaser","renderSearchResult","sections","text","tabIndex","facts","fact","renderSource","wrapper","table","renderTable","setOverflowScrolling","webkitOverflowScrolling","resetOverflowScrolling","SearchMessageType","isSearchResultMessage","RESULT","setupSearchWorker","index","Worker","origin$","Subject","withLatestFrom","origin","SETUP","mountNavigation","main$","screen$","screen","sidebar","els","layer","paintSidebar","lock","watchSidebar","adjust$","parseFloat","getComputedStyle","parentElement","getPropertyValue","height$","adjust","min","lock$","paintNavigationLayer","watchNavigationLayer","Map","label","input","htmlFor","set","mountTableOfContents","tablet$","tablet","sidebar$","anchors$","anchors","paintAnchorList","entries","watchAnchorList","decodeURIComponent","target","header","anchor","pop","a","b","mountSearch","query$","reset$","result$","defaultTransform","trim","mountSearchQuery","options","toggle$","fn","transform","delay","watchSearchQuery","QUERY","mountSearchReset","watchSearchReset","addToSearchResultList","paintSearchResult","fetch$","list","meta","textContent","setSearchResultMeta","resetSearchResultMeta","observeOn","animationFrame","scan","scrollHeight","offsetHeight","finalize","resetSearchResultList","mountSearchResult","identity","mountHeader","styles","sticky","includes","position","watchHeader","type$","main","hx","setHeaderTitleActive","resetHeaderTitleActive","paintHeaderType","mountMain","active","setHeaderShadow","resetHeaderShadow","bottom","active$","watchMain","mountHero","hidden","setHeroHidden","resetHeroHidden","paintHero","mountTabs","setTabsHidden","resetTabsHidden","paintTabs","isAppleDevice","test","navigator","userAgent","fetchSourceFacts","toLowerCase","user","repo","status","stargazers_count","forks_count","public_repos","fetchSourceFactsFromGitHub","project","encodeURIComponent","star_count","fetchSourceFactsFromGitLab","setScrollLock","resetScrollLock","parseInt","initialize","SyntaxError","hash$","feature","instant","search$","navigation$","toc$","tabs$","hero$","keyboard$","indexOf","setupKeyboard","els$","details","closest","open","scrollIntoView","patchDetails","src","script","patchScripts","hasAttribute","patchSource","sentinel","patchTables","iif","patchScrollfix","dialog$","duration","dialog","add","body","setupDialog","clipboard$","blocks","block","parent","insertBefore","on","clearSelection","setupClipboard","isAnchorLink","pathname","history","scrollRestoration","internal$","host","isInternalLink","dispatch$","popstate$","state","pushState","bufferCount","console","log","match","debounceTime","replaceState","sample","head","dispatchEvent","CustomEvent","visibility","values","rest","documentElement"],"mappings":"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","file":"assets/javascripts/bundle.8ceb0d66.min.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t0: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([91,1]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { BehaviorSubject } from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve location\n *\n * This function will return a `URL` object (and not `Location`) in order to\n * normalize typings across the application. Furthermore, locations need to be\n * tracked without setting them and `Location` is a singleton which represents\n * the current location.\n *\n * @return URL\n */\nexport function getLocation(): URL {\n return new URL(location.href)\n}\n\n/**\n * Set location\n *\n * @param url - URL to change to\n */\nexport function setLocation(url: URL): void {\n location.href = url.href\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch location\n *\n * @return Location subject\n */\nexport function watchLocation(): BehaviorSubject {\n return new BehaviorSubject(getLocation())\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent } from \"rxjs\"\nimport { filter, map, share, startWith } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve location hash\n *\n * @return Location hash\n */\nexport function getLocationHash(): string {\n return location.hash.substring(1)\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch location hash\n *\n * @return Location hash observable\n */\nexport function watchLocationHash(): Observable {\n return fromEvent(window, \"hashchange\")\n .pipe(\n map(getLocationHash),\n startWith(getLocationHash()),\n filter(hash => hash.length > 0),\n share()\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { NEVER, Observable } from \"rxjs\"\nimport { ajax } from \"rxjs/ajax\"\nimport {\n catchError,\n distinctUntilKeyChanged,\n pluck,\n share,\n skip,\n switchMap\n} from \"rxjs/operators\"\n\nimport { setLocation } from \"../../location\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n location$: Observable /* Location observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch document switch\n *\n * This function returns an observables that fetches a document if the provided\n * location observable emits a new value (i.e. URL). If the emitted URL points\n * to the same page, the request is effectively ignored (i.e. when only the\n * fragment identifier changes).\n *\n * In case the request fails, the location change is dispatched regularly.\n *\n * @param options - Options\n *\n * @return Document switch observable\n */\nexport function watchDocumentSwitch(\n { location$ }: WatchOptions\n): Observable {\n return location$\n .pipe(\n distinctUntilKeyChanged(\"pathname\"),\n skip(1),\n\n /* Fetch document */\n switchMap(url => ajax({\n url: url.href,\n responseType: \"document\",\n withCredentials: true\n })\n .pipe(\n pluck(\"response\"),\n catchError(() => {\n setLocation(url)\n return NEVER\n })\n )\n ),\n share()\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { NEVER, Observable, fromEvent, merge } from \"rxjs\"\nimport { mapTo, shareReplay } from \"rxjs/operators\"\n\nimport { watchDocumentSwitch } from \"../switch\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n location$?: Observable /* Location observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch document\n *\n * If the location observable is passed, instant loading will be enabled which\n * means that new values will be emitted every time the location changes.\n *\n * @return Document observable\n */\nexport function watchDocument(\n { location$ }: WatchOptions = {}\n): Observable {\n return merge(\n fromEvent(document, \"DOMContentLoaded\")\n .pipe(\n mapTo(document)\n ),\n typeof location$ !== \"undefined\"\n ? watchDocumentSwitch({ location$ })\n : NEVER\n )\n .pipe(\n shareReplay(1)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve an element matching the query selector\n *\n * @template T - Element type\n *\n * @param selector - Query selector\n * @param node - Node of reference\n *\n * @return Element or nothing\n */\nexport function getElement(\n selector: string, node: ParentNode = document\n): T | undefined {\n return node.querySelector(selector) || undefined\n}\n\n/**\n * Retrieve an element matching a query selector or throw a reference error\n *\n * @template T - Element type\n *\n * @param selector - Query selector\n * @param node - Node of reference\n *\n * @return Element\n */\nexport function getElementOrThrow(\n selector: string, node: ParentNode = document\n): T {\n const el = getElement(selector, node)\n if (typeof el === \"undefined\")\n throw new ReferenceError(\n `Missing element: expected \"${selector}\" to be present`\n )\n return el\n}\n\n/**\n * Retrieve the currently active element\n *\n * @return Element\n */\nexport function getActiveElement(): HTMLElement | undefined {\n return document.activeElement instanceof HTMLElement\n ? document.activeElement\n : undefined\n}\n\n/**\n * Retrieve all elements matching the query selector\n *\n * @template T - Element type\n *\n * @param selector - Query selector\n * @param node - Node of reference\n *\n * @return Elements\n */\nexport function getElements(\n selector: string, node: ParentNode = document\n): T[] {\n return Array.from(node.querySelectorAll(selector))\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent, merge } from \"rxjs\"\nimport { mapTo, shareReplay, startWith } from \"rxjs/operators\"\n\nimport { getActiveElement } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set element focus\n *\n * @param el - Element\n * @param value - Whether the element should be focused\n *\n * @return Element offset\n */\nexport function setElementFocus(\n el: HTMLElement, value: boolean = true\n): void {\n if (value)\n el.focus()\n else\n el.blur()\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch element focus\n *\n * @param el - Element\n *\n * @return Element focus observable\n */\nexport function watchElementFocus(\n el: HTMLElement\n): Observable {\n const focus$ = fromEvent(el, \"focus\")\n const blur$ = fromEvent(el, \"blur\")\n\n /* Map events to boolean state */\n return merge(\n focus$.pipe(mapTo(true)),\n blur$.pipe(mapTo(false))\n )\n .pipe(\n startWith(el === getActiveElement()),\n shareReplay(1)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent, merge } from \"rxjs\"\nimport { map, shareReplay, startWith } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Element offset\n */\nexport interface ElementOffset {\n x: number /* Horizontal offset */\n y: number /* Vertical offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve element offset\n *\n * @param el - Element\n *\n * @return Element offset\n */\nexport function getElementOffset(el: HTMLElement): ElementOffset {\n return {\n x: el.scrollLeft,\n y: el.scrollTop\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch element offset\n *\n * @param el - Element\n *\n * @return Element offset observable\n */\nexport function watchElementOffset(\n el: HTMLElement\n): Observable {\n return merge(\n fromEvent(el, \"scroll\"),\n fromEvent(window, \"resize\")\n )\n .pipe(\n map(() => getElementOffset(el)),\n startWith(getElementOffset(el)),\n shareReplay(1)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set element text selection\n *\n * @param el - Element\n */\nexport function setElementSelection(\n el: HTMLElement\n): void {\n if (el instanceof HTMLInputElement)\n el.select()\n else\n throw new Error(\"Not implemented\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent } from \"rxjs\"\nimport { filter, map, share } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Key\n */\nexport interface Key {\n type: string /* Key type */\n claim(): void /* Key claim */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Check whether an element may receive keyboard input\n *\n * @param el - Element\n *\n * @return Test result\n */\nexport function isSusceptibleToKeyboard(el: HTMLElement) {\n switch (el.tagName) {\n\n /* Form elements */\n case \"INPUT\":\n case \"SELECT\":\n case \"TEXTAREA\":\n return true\n\n /* Everything else */\n default:\n return el.isContentEditable\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch keyboard\n *\n * @return Keyboard observable\n */\nexport function watchKeyboard(): Observable {\n return fromEvent(window, \"keydown\")\n .pipe(\n filter(ev => !(ev.metaKey || ev.ctrlKey)),\n map(ev => ({\n type: ev.key,\n claim() {\n ev.preventDefault()\n ev.stopPropagation()\n }\n })),\n share()\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEventPattern } from \"rxjs\"\nimport { shareReplay, startWith } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch media query\n *\n * @param query - Media query\n *\n * @return Media observable\n */\nexport function watchMedia(query: string): Observable {\n const media = matchMedia(query)\n return fromEventPattern(next =>\n media.addListener(() => next(media.matches))\n )\n .pipe(\n startWith(media.matches),\n shareReplay(1)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent, merge } from \"rxjs\"\nimport { map, startWith } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Viewport offset\n */\nexport interface ViewportOffset {\n x: number /* Horizontal offset */\n y: number /* Vertical offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve viewport offset\n *\n * On iOS Safari, viewport offset can be negative due to overflow scrolling.\n * As this may induce strange behaviors downstream, we'll just limit it to 0.\n *\n * @return Viewport offset\n */\nexport function getViewportOffset(): ViewportOffset {\n return {\n x: Math.max(0, pageXOffset),\n y: Math.max(0, pageYOffset)\n }\n}\n\n/**\n * Set viewport offset\n *\n * @param offset - Viewport offset\n */\nexport function setViewportOffset(\n { x, y }: Partial\n): void {\n window.scrollTo(x || 0, y || 0)\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport offset\n *\n * @return Viewport offset observable\n */\nexport function watchViewportOffset(): Observable {\n return merge(\n fromEvent(window, \"scroll\"),\n fromEvent(window, \"resize\")\n )\n .pipe(\n map(getViewportOffset),\n startWith(getViewportOffset())\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent } from \"rxjs\"\nimport { map, startWith } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Viewport size\n */\nexport interface ViewportSize {\n width: number /* Viewport width */\n height: number /* Viewport height */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve viewport size\n *\n * @return Viewport size\n */\nexport function getViewportSize(): ViewportSize {\n return {\n width: innerWidth,\n height: innerHeight\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport size\n *\n * @return Viewport size observable\n */\nexport function watchViewportSize(): Observable {\n return fromEvent(window, \"resize\")\n .pipe(\n map(getViewportSize),\n startWith(getViewportSize())\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, combineLatest } from \"rxjs\"\nimport {\n distinctUntilKeyChanged,\n map,\n shareReplay\n} from \"rxjs/operators\"\n\nimport { Header } from \"../../../header\"\nimport {\n ViewportOffset,\n watchViewportOffset\n} from \"../offset\"\nimport {\n ViewportSize,\n watchViewportSize\n} from \"../size\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Viewport\n */\nexport interface Viewport {\n offset: ViewportOffset /* Viewport offset */\n size: ViewportSize /* Viewport size */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch relative options\n */\ninterface WatchRelativeOptions {\n header$: Observable

/* Header observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport\n *\n * @return Viewport observable\n */\nexport function watchViewport(): Observable {\n return combineLatest([\n watchViewportOffset(),\n watchViewportSize()\n ])\n .pipe(\n map(([offset, size]) => ({ offset, size })),\n shareReplay(1)\n )\n}\n\n/**\n * Watch viewport relative to element\n *\n * @param el - Element\n * @param options - Options\n *\n * @return Viewport observable\n */\nexport function watchViewportAt(\n el: HTMLElement, { header$, viewport$ }: WatchRelativeOptions\n): Observable {\n const offset$ = viewport$\n .pipe(\n distinctUntilKeyChanged(\"size\"),\n map((): ViewportOffset => ({\n x: el.offsetLeft,\n y: el.offsetTop\n }))\n )\n\n /* Compute relative viewport, return hot observable */\n return combineLatest([header$, viewport$, offset$])\n .pipe(\n map(([{ height }, { offset, size }, { x, y }]) => ({\n offset: {\n x: offset.x - x,\n y: offset.y - y + height\n },\n size\n })),\n shareReplay(1)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, Subject, fromEventPattern } from \"rxjs\"\nimport {\n pluck,\n share,\n switchMapTo,\n tap,\n throttle\n} from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Worker message\n */\nexport interface WorkerMessage {\n type: unknown /* Message type */\n data: unknown /* Message data */\n}\n\n/**\n * Worker handler\n *\n * @template T - Message type\n */\nexport interface WorkerHandler<\n T extends WorkerMessage\n> {\n tx$: Subject /* Message transmission subject */\n rx$: Observable /* Message receive observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n *\n * @template T - Worker message type\n */\ninterface WatchOptions {\n tx$: Observable /* Message transmission observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch a web worker\n *\n * This function returns an observable that will send all values emitted by the\n * message observable to the web worker. Web worker communication is expected\n * to be bidirectional (request-response) and synchronous. Messages that are\n * emitted during a pending request are throttled, the last one is emitted.\n *\n * @param worker - Web worker\n * @param options - Options\n *\n * @return Worker message observable\n */\nexport function watchWorker(\n worker: Worker, { tx$ }: WatchOptions\n): Observable {\n\n /* Intercept messages from worker-like objects */\n const rx$ = fromEventPattern(next =>\n worker.addEventListener(\"message\", next)\n )\n .pipe(\n pluck(\"data\")\n )\n\n /* Send and receive messages, return hot observable */\n return tx$\n .pipe(\n throttle(() => rx$, { leading: true, trailing: true }),\n tap(message => worker.postMessage(message)),\n switchMapTo(rx$),\n share()\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { NEVER, Observable, fromEvent, of } from \"rxjs\"\nimport {\n distinctUntilChanged,\n map,\n shareReplay,\n startWith,\n switchMap,\n take\n} from \"rxjs/operators\"\n\nimport { getElement } from \"../agent\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Toggle\n */\nexport type Toggle =\n | \"drawer\" /* Toggle for drawer */\n | \"search\" /* Toggle for search */\n\n/**\n * Toggle map\n */\nexport type ToggleMap = {\n [P in Toggle]?: HTMLInputElement\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Toggle map observable\n */\nlet toggles$: Observable\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup bindings to toggles with given names\n *\n * @param names - Toggle names\n * @param options - Options\n */\nexport function setupToggles(\n names: Toggle[], { document$ }: WatchOptions\n): void {\n toggles$ = document$\n .pipe(\n\n /* Ignore document switches */\n take(1),\n\n /* Build toggle map */\n map(document => names.reduce((toggles, name) => {\n const el = getElement(`[data-md-toggle=${name}]`, document)\n return {\n ...toggles,\n ...typeof el !== \"undefined\" ? { [name]: el } : {}\n }\n }, {})),\n\n /* Convert to hot observable */\n shareReplay(1)\n )\n}\n\n/**\n * Retrieve a toggle\n *\n * The returned observable will only re-emit if the element changed, i.e. if\n * it was replaced from a document which was switched to.\n *\n * @param name - Toggle name\n *\n * @return Element observable\n */\nexport function useToggle(\n name: Toggle\n): Observable {\n return toggles$\n .pipe(\n switchMap(toggles => (\n typeof toggles[name] !== \"undefined\"\n ? of(toggles[name]!)\n : NEVER\n )),\n distinctUntilChanged()\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Set toggle\n *\n * Simulating a click event seems to be the most cross-browser compatible way\n * of changing the value while also emitting a `change` event. Before, Material\n * used `CustomEvent` to programmatically change the value of a toggle, but this\n * is a much simpler and cleaner solution which doesn't require a polyfill.\n *\n * @param el - Toggle element\n * @param value - Toggle value\n */\nexport function setToggle(\n el: HTMLInputElement, value: boolean\n): void {\n if (el.checked !== value)\n el.click()\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch toggle\n *\n * @param el - Toggle element\n *\n * @return Toggle observable\n */\nexport function watchToggle(\n el: HTMLInputElement\n): Observable {\n return fromEvent(el, \"change\")\n .pipe(\n map(() => el.checked),\n startWith(el.checked)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./agent\"\nexport * from \"./toggle\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Configuration\n */\nexport interface Config {\n base: string /* Base URL */\n worker: {\n search: string /* Search worker URL */\n }\n feature: {\n instant: true /* Instant loading */\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Ensure that the given value is a valid configuration\n *\n * We could use `jsonschema` or any other schema validation framework, but that\n * would just add more bloat to the bundle, so we'll keep it plain and simple.\n *\n * @param config - Configuration\n *\n * @return Test result\n */\nexport function isConfig(config: any): config is Config {\n return typeof config === \"object\"\n && typeof config.base === \"string\"\n && typeof config.worker === \"object\"\n && typeof config.worker.search === \"string\"\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n// tslint:disable no-null-keyword\n\nimport { JSX as JSXInternal } from \"preact\"\nimport { keys } from \"ramda\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * HTML and SVG attributes\n */\ntype Attributes =\n & JSXInternal.HTMLAttributes\n & JSXInternal.SVGAttributes\n & Record\n\n/**\n * Child element\n */\ntype Child =\n | HTMLElement\n | SVGElement\n | Text\n | string\n | number\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Create an element\n *\n * @param tag - HTML or SVG tag\n *\n * @return Element\n */\nfunction createElement(tag: string): HTMLElement | SVGElement {\n switch (tag) {\n\n /* SVG elements */\n case \"svg\":\n case \"path\":\n return document.createElementNS(\"http://www.w3.org/2000/svg\", tag)\n\n /* HTML elements */\n default:\n return document.createElement(tag)\n }\n}\n\n/**\n * Set an attribute\n *\n * @param el - Element\n * @param name - Attribute name\n * @param value - Attribute value\n */\nfunction setAttribute(\n el: HTMLElement | SVGElement, name: string, value: string) {\n switch (name) {\n\n /* Attributes to be ignored */\n case \"xmlns\":\n break\n\n /* Attributes of SVG elements */\n case \"viewBox\":\n case \"d\":\n if (typeof value !== \"boolean\")\n el.setAttributeNS(null, name, value)\n else if (value)\n el.setAttributeNS(null, name, \"\")\n break\n\n /* Attributes of HTML elements */\n default:\n if (typeof value !== \"boolean\")\n el.setAttribute(name, value)\n else if (value)\n el.setAttribute(name, \"\")\n }\n}\n\n/**\n * Append a child node to an element\n *\n * @param el - Element\n * @param child - Child node(s)\n */\nfunction appendChild(\n el: HTMLElement | SVGElement, child: Child | Child[]\n): void {\n\n /* Handle primitive types (including raw HTML) */\n if (typeof child === \"string\" || typeof child === \"number\") {\n el.innerHTML += child.toString()\n\n /* Handle nodes */\n } else if (child instanceof Node) {\n el.appendChild(child)\n\n /* Handle nested children */\n } else if (Array.isArray(child)) {\n for (const node of child)\n appendChild(el, node)\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * JSX factory\n *\n * @param tag - HTML or SVG tag\n * @param attributes - HTML attributes\n * @param children - Child elements\n *\n * @return Element\n */\nexport function h(\n tag: string, attributes: Attributes | null, ...children: Child[]\n): HTMLElement | SVGElement {\n const el = createElement(tag)\n\n /* Set attributes, if any */\n if (attributes)\n for (const attr of keys(attributes))\n setAttribute(el, attr, attributes[attr])\n\n /* Append child nodes */\n for (const child of children)\n appendChild(el, child)\n\n /* Return element */\n return el\n}\n\n/* ----------------------------------------------------------------------------\n * Namespace\n * ------------------------------------------------------------------------- */\n\nexport declare namespace h {\n namespace JSX {\n type Element = HTMLElement | SVGElement\n type IntrinsicElements = JSXInternal.IntrinsicElements\n }\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, defer, of } from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Cache the last value emitted by an observable in session storage\n *\n * If the key is not found in session storage, the factory is executed and the\n * latest value emitted will automatically be persisted to sessions storage.\n * Note that the values emitted by the returned observable must be serializable\n * as `JSON`, or data will be lost.\n *\n * @template T - Value type\n *\n * @param key - Cache key\n * @param factory - Observable factory\n *\n * @return Value observable\n */\nexport function cache(\n key: string, factory: () => Observable\n): Observable {\n return defer(() => {\n const data = sessionStorage.getItem(key)\n if (data) {\n return of(JSON.parse(data) as T)\n\n /* Retrieve value from observable factory and write to storage */\n } else {\n const value$ = factory()\n value$.subscribe(value => {\n try {\n sessionStorage.setItem(key, JSON.stringify(value))\n } catch (err) {\n /* Uncritical, just swallow */\n }\n })\n\n /* Return value */\n return value$\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { getElementOrThrow } from \"observables\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Translations\n */\nlet lang: Record\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Translate the given key\n *\n * @param key - Key to be translated\n * @param value - Value to be replaced\n *\n * @return Translation\n */\nexport function translate(key: string, value?: string): string {\n if (typeof lang === \"undefined\") {\n const el = getElementOrThrow(\"#__lang\")\n lang = JSON.parse(el.innerText)\n }\n if (typeof lang[key] === \"undefined\") {\n throw new ReferenceError(`Invalid translation: ${key}`)\n }\n return typeof value !== \"undefined\"\n ? lang[key].replace(\"#\", value)\n : lang[key]\n}\n\n/**\n * Truncate a string after the given number of characters\n *\n * This is not a very reasonable approach, since the summaries kind of suck.\n * It would be better to create something more intelligent, highlighting the\n * search occurrences and making a better summary out of it, but this note was\n * written three years ago, so who knows if we'll ever fix it.\n *\n * @param value - Value to be truncated\n * @param n - Number of characters\n *\n * @return Truncated value\n */\nexport function truncate(value: string, n: number): string {\n let i = n\n if (value.length > i) {\n while (value[i] !== \" \" && --i > 0); // tslint:disable-line\n return `${value.substring(0, i)}...`\n }\n return value\n}\n\n/**\n * Round a number for display with source facts\n *\n * This is a reverse engineered version of GitHub's weird rounding algorithm\n * for stars, forks and all other numbers. While all numbers below `1,000` are\n * returned as-is, bigger numbers are converted to fixed numbers:\n *\n * - `1,049` => `1k`\n * - `1,050` => `1.1k`\n * - `1,949` => `1.9k`\n * - `1,950` => `2k`\n *\n * @param value - Original value\n *\n * @return Rounded value\n */\nexport function round(value: number): string {\n if (value > 999) {\n const digits = +((value - 950) % 1000 > 99)\n return `${((value + 1) / 1000).toFixed(digits)}k`\n } else {\n return value.toString()\n }\n}\n\n/**\n * Simple hash function\n *\n * @see https://bit.ly/2wsVjJ4 - Original source\n *\n * @param value - Value to be hashed\n *\n * @return Hash as 32bit integer\n */\nexport function hash(value: string): number {\n let h = 0\n for (let i = 0, len = value.length; i < len; i++) {\n h = ((h << 5) - h) + value.charCodeAt(i)\n h |= 0 // Convert to 32bit integer\n }\n return h\n }\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./config\"\nexport * from \"./jsx\"\nexport * from \"./rxjs\"\nexport * from \"./string\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./header\"\nexport * from \"./hero\"\nexport * from \"./main\"\nexport * from \"./navigation\"\nexport * from \"./search\"\nexport * from \"./shared\"\nexport * from \"./tabs\"\nexport * from \"./toc\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set sidebar offset\n *\n * @param el - Sidebar element\n * @param value - Sidebar offset\n */\nexport function setSidebarOffset(\n el: HTMLElement, value: number\n): void {\n el.style.top = `${value}px`\n}\n\n/**\n * Reset sidebar offset\n *\n * @param el - Sidebar element\n */\nexport function resetSidebarOffset(\n el: HTMLElement\n): void {\n el.style.top = \"\"\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Set sidebar height\n *\n * @param el - Sidebar element\n * @param value - Sidebar height\n */\nexport function setSidebarHeight(\n el: HTMLElement, value: number\n): void {\n el.style.height = `${value}px`\n}\n\n/**\n * Reset sidebar height\n *\n * @param el - Sidebar element\n */\nexport function resetSidebarHeight(\n el: HTMLElement\n): void {\n el.style.height = \"\"\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Set sidebar lock\n *\n * @param el - Sidebar element\n * @param value - Whether the sidebar is locked\n */\nexport function setSidebarLock(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"lock\" : \"\")\n}\n\n/**\n * Reset sidebar lock\n *\n * @param el - Sidebar element\n */\nexport function resetSidebarLock(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { EMPTY, Observable, of } from \"rxjs\"\nimport {\n distinctUntilChanged,\n map,\n scan,\n shareReplay,\n switchMap\n} from \"rxjs/operators\"\n\nimport { getElement } from \"observables\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Component\n */\nexport type Component =\n | \"container\" /* Container */\n | \"header\" /* Header */\n | \"header-title\" /* Header title */\n | \"hero\" /* Hero */\n | \"main\" /* Main area */\n | \"navigation\" /* Navigation */\n | \"search\" /* Search */\n | \"search-query\" /* Search input */\n | \"search-reset\" /* Search reset */\n | \"search-result\" /* Search results */\n | \"tabs\" /* Tabs */\n | \"toc\" /* Table of contents */\n\n/**\n * Component map\n */\nexport type ComponentMap = {\n [P in Component]?: HTMLElement\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Component map observable\n */\nlet components$: Observable\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup bindings to components with given names\n *\n * This function will maintain bindings to the elements identified by the given\n * names in-between document switches and update the elements in-place.\n *\n * @param names - Component names\n * @param options - Options\n */\nexport function setupComponents(\n names: Component[], { document$ }: WatchOptions\n): void {\n components$ = document$\n .pipe(\n\n /* Build component map */\n map(document => names.reduce((components, name) => {\n const el = getElement(`[data-md-component=${name}]`, document)\n return {\n ...components,\n ...typeof el !== \"undefined\" ? { [name]: el } : {}\n }\n }, {})),\n\n /* Re-compute component map on document switch */\n scan((prev, next) => {\n for (const name of names) {\n switch (name) {\n\n /* Top-level components: update */\n case \"header-title\":\n case \"container\":\n if (name in prev && typeof prev[name] !== \"undefined\") {\n prev[name]!.replaceWith(next[name]!)\n prev[name] = next[name]\n }\n break\n\n /* All other components: rebind */\n default:\n if (typeof next[name] !== \"undefined\")\n prev[name] = getElement(`[data-md-component=${name}]`)\n else\n delete prev[name]\n }\n }\n return prev\n }),\n\n /* Convert to hot observable */\n shareReplay(1)\n )\n}\n\n/**\n * Retrieve a component\n *\n * The returned observable will only re-emit if the element changed, i.e. if\n * it was replaced from a document which was switched to.\n *\n * @template T - Element type\n *\n * @param name - Component name\n *\n * @return Element observable\n */\nexport function useComponent(\n name: \"search-query\"\n): Observable\nexport function useComponent(\n name: Component\n): Observable\nexport function useComponent(\n name: Component\n): Observable {\n return components$\n .pipe(\n switchMap(components => (\n typeof components[name] !== \"undefined\"\n ? of(components[name] as T)\n : EMPTY\n )),\n distinctUntilChanged()\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set anchor blur\n *\n * @param el - Anchor element\n * @param value - Whether the anchor is blurred\n */\nexport function setAnchorBlur(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"blur\" : \"\")\n}\n\n/**\n * Reset anchor blur\n *\n * @param el - Anchor element\n */\nexport function resetAnchorBlur(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Set anchor active\n *\n * @param el - Anchor element\n * @param value - Whether the anchor is active\n */\nexport function setAnchorActive(\n el: HTMLElement, value: boolean\n): void {\n el.classList.toggle(\"md-nav__link--active\", value)\n}\n\n/**\n * Reset anchor active\n *\n * @param el - Anchor element\n */\nexport function resetAnchorActive(\n el: HTMLElement\n): void {\n el.classList.remove(\"md-nav__link--active\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./sidebar\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { h, translate } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * CSS classes\n */\nconst css = {\n container: \"md-clipboard md-icon\"\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a 'copy-to-clipboard' button\n *\n * @param id - Unique identifier\n *\n * @return Element\n */\nexport function renderClipboard(\n id: string\n) {\n const path = require(\"material-design-icons-svg/paths/content-copy.json\")\n return (\n \n \n \n \n \n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SearchResult } from \"integrations/search\"\nimport { h, truncate } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * CSS classes\n */\nconst css = {\n item: \"md-search-result__item\",\n link: \"md-search-result__link\",\n article: \"md-search-result__article md-search-result__article--document\",\n section: \"md-search-result__article\",\n title: \"md-search-result__title\",\n teaser: \"md-search-result__teaser\"\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a search result\n *\n * @param result - Search result\n *\n * @return Element\n */\nexport function renderSearchResult(\n { article, sections }: SearchResult\n) {\n\n // create page with icon\n const path = require(\"material-design-icons-svg/paths/file-search-outline.json\")\n\n const children = [article, ...sections].map(document => {\n const { location, title, text } = document\n return (\n \n
\n {!(\"parent\" in document)\n ?
\n \n \n \n
\n : null\n }\n

{title}

\n {text.length\n ?

{truncate(text, 320)}

\n : undefined\n }\n
\n
\n )\n })\n return (\n
  • \n {children}\n
  • \n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SourceFacts } from \"patches/source\"\nimport { h } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * CSS classes\n */\nconst css = {\n facts: \"md-source__facts\",\n fact: \"md-source__fact\"\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render source facts\n *\n * @param facts - Source facts\n *\n * @return Element\n */\nexport function renderSource(\n facts: SourceFacts\n) {\n const children = facts.map(fact => (\n
  • {fact}
  • \n ))\n return (\n
      \n {children}\n
    \n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { h } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * CSS classes\n */\nconst css = {\n wrapper: \"md-typeset__scrollwrap\",\n table: \"md-typeset__table\"\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a table inside a wrapper to improve scrolling on mobile\n *\n * @param table - Table element\n *\n * @return Element\n */\nexport function renderTable(\n table: HTMLTableElement\n) {\n return (\n
    \n
    \n {table}\n
    \n
    \n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./clipboard\"\nexport * from \"./search\"\nexport * from \"./source\"\nexport * from \"./table\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Global augmentations\n */\ndeclare global {\n interface CSSStyleDeclaration {\n webkitOverflowScrolling: \"touch\" | \"\"\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set overflow scrolling\n *\n * @param el - Scrollable element\n */\nexport function setOverflowScrolling(\n el: HTMLElement\n): void {\n el.style.webkitOverflowScrolling = \"touch\"\n}\n\n/**\n * Reset overflow scrolling\n *\n * @param el - Scrollable element\n */\nexport function resetOverflowScrolling(\n el: HTMLElement\n): void {\n el.style.webkitOverflowScrolling = \"\"\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SearchIndexOptions, SearchResult } from \"integrations/search\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search message type\n */\nexport const enum SearchMessageType {\n SETUP, /* Search index setup */\n DUMP, /* Search index dump */\n QUERY, /* Search query */\n RESULT /* Search results */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * A message containing the data necessary to setup the search index\n */\nexport interface SearchSetupMessage {\n type: SearchMessageType.SETUP /* Message type */\n data: SearchIndexOptions /* Message data */\n}\n\n/**\n * A message containing the a dump of the search index\n */\nexport interface SearchDumpMessage {\n type: SearchMessageType.DUMP /* Message type */\n data: string /* Message data */\n}\n\n/**\n * A message containing a search query\n */\nexport interface SearchQueryMessage {\n type: SearchMessageType.QUERY /* Message type */\n data: string /* Message data */\n}\n\n/**\n * A message containing results for a search query\n */\nexport interface SearchResultMessage {\n type: SearchMessageType.RESULT /* Message type */\n data: SearchResult[] /* Message data */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * A message exchanged with the search worker\n */\nexport type SearchMessage =\n | SearchSetupMessage\n | SearchDumpMessage\n | SearchQueryMessage\n | SearchResultMessage\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Type guard for search setup messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchSetupMessage(\n message: SearchMessage\n): message is SearchSetupMessage {\n return message.type === SearchMessageType.SETUP\n}\n\n/**\n * Type guard for search dump messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchDumpMessage(\n message: SearchMessage\n): message is SearchDumpMessage {\n return message.type === SearchMessageType.DUMP\n}\n\n/**\n * Type guard for search query messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchQueryMessage(\n message: SearchMessage\n): message is SearchQueryMessage {\n return message.type === SearchMessageType.QUERY\n}\n\n/**\n * Type guard for search result messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchResultMessage(\n message: SearchMessage\n): message is SearchResultMessage {\n return message.type === SearchMessageType.RESULT\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, Subject, from } from \"rxjs\"\nimport { ajax } from \"rxjs/ajax\"\nimport {\n map,\n pluck,\n shareReplay,\n switchMap,\n take,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport { SearchIndexOptions } from \"integrations/search\"\nimport {\n WorkerHandler,\n watchWorker\n} from \"observables\"\n\nimport {\n SearchMessage,\n SearchMessageType,\n SearchSetupMessage,\n isSearchResultMessage\n} from \"../message\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n base: string /* Base url */\n index?: Promise /* Promise resolving with index */\n location$: Observable /* Location observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup search web worker\n *\n * This function will create a web worker to setup and query the search index\n * which is done using `lunr`. The index can be passed explicitly in order to\n * enable hacks like _localsearch_ via search index embedding as JSON. If no\n * index is given, this function will load it from the default location.\n *\n * @param url - Worker url\n * @param options - Options\n *\n * @return Worker handler\n */\nexport function setupSearchWorker(\n url: string, { base, index, location$ }: SetupOptions\n): WorkerHandler {\n const worker = new Worker(url)\n\n /* Ensure stable base URL */\n const origin$ = location$\n .pipe(\n take(1),\n map(({ href }) => new URL(base, href)\n .toString()\n .replace(/\\/$/, \"\")\n )\n )\n\n /* Create communication channels and resolve relative links */\n const tx$ = new Subject()\n const rx$ = watchWorker(worker, { tx$ })\n .pipe(\n withLatestFrom(origin$),\n map(([message, origin]) => {\n if (isSearchResultMessage(message)) {\n for (const { article, sections } of message.data) {\n article.location = `${origin}/${article.location}`\n for (const section of sections)\n section.location = `${origin}/${section.location}`\n }\n }\n return message\n }),\n shareReplay(1)\n )\n\n /* Fetch index if it wasn't passed explicitly */\n const index$ = typeof index !== \"undefined\"\n ? from(index)\n : origin$\n .pipe(\n switchMap(origin => ajax({\n url: `${origin}/search/search_index.json`,\n responseType: \"json\",\n withCredentials: true\n })\n .pipe(\n pluck(\"response\")\n ))\n )\n\n /* Send index to worker */\n index$\n .pipe(\n map(data => ({\n type: SearchMessageType.SETUP,\n data\n }))\n )\n .subscribe(tx$.next.bind(tx$))\n\n /* Return worker handler */\n return { tx$, rx$ }\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./search\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./apply\"\nexport * from \"./paint\"\nexport * from \"./watch\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./apply\"\nexport * from \"./paint\"\nexport * from \"./watch\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./layer\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, pipe } from \"rxjs\"\nimport { map, switchMap } from \"rxjs/operators\"\n\nimport { Viewport, getElements } from \"observables\"\n\nimport { Header } from \"../../header\"\nimport { Main } from \"../../main\"\nimport {\n Sidebar,\n paintSidebar,\n watchSidebar\n} from \"../../shared\"\nimport {\n NavigationLayer,\n paintNavigationLayer,\n watchNavigationLayer\n} from \"../layer\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Navigation for [screen -]\n */\ninterface NavigationBelowScreen {\n layer: NavigationLayer /* Active layer */\n}\n\n/**\n * Navigation for [screen +]\n */\ninterface NavigationAboveScreen {\n sidebar: Sidebar /* Sidebar */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Navigation\n */\nexport type Navigation =\n | NavigationBelowScreen\n | NavigationAboveScreen\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n header$: Observable
    /* Header observable */\n main$: Observable
    /* Main area observable */\n viewport$: Observable /* Viewport observable */\n screen$: Observable /* Screen media observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount navigation from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountNavigation(\n { header$, main$, viewport$, screen$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => screen$\n .pipe(\n switchMap(screen => {\n\n /* [screen +]: Mount navigation in sidebar */\n if (screen) {\n return watchSidebar(el, { main$, viewport$ })\n .pipe(\n paintSidebar(el, { header$ }),\n map(sidebar => ({ sidebar }))\n )\n\n /* [screen -]: Mount navigation in drawer */\n } else {\n const els = getElements(\"nav\", el)\n return watchNavigationLayer(els)\n .pipe(\n paintNavigationLayer(els),\n map(layer => ({ layer }))\n )\n }\n })\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./apply\"\nexport * from \"./paint\"\nexport * from \"./watch\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n pipe\n} from \"rxjs\"\nimport {\n finalize,\n map,\n observeOn,\n tap,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport { Header } from \"../../../header\"\nimport { Sidebar } from \"../_\"\nimport {\n resetSidebarHeight,\n resetSidebarLock,\n resetSidebarOffset,\n setSidebarHeight,\n setSidebarLock,\n setSidebarOffset\n} from \"../apply\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Paint options\n */\ninterface PaintOptions {\n header$: Observable
    /* Header observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Paint sidebar\n *\n * @param el - Sidebar element\n * @param options - Options\n *\n * @return Operator function\n */\nexport function paintSidebar(\n el: HTMLElement, { header$ }: PaintOptions\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n withLatestFrom(header$),\n tap(([{ height, lock }, { height: offset }]) => {\n setSidebarHeight(el, height)\n setSidebarLock(el, lock)\n\n /* Set offset in locked state depending on header height */\n if (lock)\n setSidebarOffset(el, offset)\n else\n resetSidebarOffset(el)\n }),\n\n /* Re-map to sidebar */\n map(([sidebar]) => sidebar),\n\n /* Reset on complete or error */\n finalize(() => {\n resetSidebarOffset(el)\n resetSidebarHeight(el)\n resetSidebarLock(el)\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, combineLatest } from \"rxjs\"\nimport {\n distinctUntilChanged,\n distinctUntilKeyChanged,\n map,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport { Viewport } from \"observables\"\n\nimport { Main } from \"../../../main\"\nimport { Sidebar } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n main$: Observable
    /* Main area observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch sidebar\n *\n * This function returns an observable that computes the visual parameters of\n * the sidebar which depends on the vertical viewport offset, as well as the\n * height of the main area. When the page is scrolled beyond the header, the\n * sidebar is locked and fills the remaining space.\n *\n * @param el - Sidebar element\n * @param options - Options\n *\n * @return Sidebar observable\n */\nexport function watchSidebar(\n el: HTMLElement, { main$, viewport$ }: WatchOptions\n): Observable {\n\n /* Adjust for internal main area offset */\n const adjust$ = viewport$\n .pipe(\n distinctUntilKeyChanged(\"size\"),\n map(() => parseFloat(\n getComputedStyle(el.parentElement!)\n .getPropertyValue(\"padding-top\")\n )),\n distinctUntilChanged()\n )\n\n /* Compute the sidebar's available height */\n const height$ = viewport$\n .pipe(\n withLatestFrom(adjust$, main$),\n map(([{ offset: { y } }, adjust, { offset, height }]) => (\n height\n + Math.min(adjust, Math.max(0, y - offset))\n - adjust\n )),\n distinctUntilChanged()\n )\n\n /* Compute whether the sidebar should be locked */\n const lock$ = viewport$\n .pipe(\n withLatestFrom(adjust$, main$),\n map(([{ offset: { y } }, adjust, { offset }]) => (\n y >= offset + adjust\n )),\n distinctUntilChanged()\n )\n\n /* Combine into single observable */\n return combineLatest([height$, lock$])\n .pipe(\n map(([height, lock]) => ({ height, lock }))\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n animationFrameScheduler,\n pipe\n} from \"rxjs\"\nimport {\n delay,\n finalize,\n observeOn,\n tap\n} from \"rxjs/operators\"\n\nimport { getElementOrThrow } from \"observables\"\n\nimport { NavigationLayer } from \"../_\"\nimport {\n resetOverflowScrolling,\n setOverflowScrolling\n} from \"../apply\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Paint navigation layer\n *\n * @param els - Navigation elements\n *\n * @return Operator function\n */\nexport function paintNavigationLayer(\n els: HTMLElement[]\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ prev }) => {\n if (prev)\n resetOverflowScrolling(prev)\n }),\n\n /* Wait until transition has finished */\n delay(250),\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ next }) => {\n setOverflowScrolling(next)\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n for (const el of els)\n resetOverflowScrolling(\n getElementOrThrow(\".md-nav__list\", el)\n )\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { findLast } from \"ramda\"\nimport { Observable, fromEvent, merge } from \"rxjs\"\nimport { map, scan } from \"rxjs/operators\"\n\nimport {\n getElement,\n getElementOrThrow\n} from \"observables\"\n\nimport { NavigationLayer } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch navigation layer\n *\n * On iOS we want to add `-webkit-overflow-scrolling: touch` for the menus\n * contained in the drawer, but as the navigational layers are nested, we can\n * only add it to the topmost layer or extremely weird cropping will occur.\n * This implementation keeps track of the previous and current layer.\n *\n * @param els - Navigation elements\n *\n * @return Navigation layer observable\n */\nexport function watchNavigationLayer(\n els: HTMLElement[]\n): Observable {\n const table = new Map()\n for (const el of els) {\n const label = getElement(\"label\", el)\n if (typeof label !== \"undefined\") {\n const input = getElementOrThrow(`#${label.htmlFor}`)\n table.set(input, el)\n }\n }\n\n /* Determine topmost layer */\n const layer$ = merge(...[...table.keys()].map(input => (\n fromEvent(input, \"change\")\n )))\n .pipe(\n map(() => getElementOrThrow(\".md-nav__list\", table.get(\n findLast(({ checked }) => checked, [...table.keys()])!\n )))\n )\n\n /* Return previous and next layer */\n return layer$\n .pipe(\n map(next => ({ next })),\n scan(({ next: prev }, { next }) => ({ prev, next }))\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./anchor\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n OperatorFunction,\n combineLatest,\n of,\n pipe\n} from \"rxjs\"\nimport { map, switchMap } from \"rxjs/operators\"\n\nimport { Viewport, getElements } from \"observables\"\n\nimport { Header } from \"../../header\"\nimport { Main } from \"../../main\"\nimport {\n Sidebar,\n paintSidebar,\n watchSidebar\n} from \"../../shared\"\nimport {\n AnchorList,\n paintAnchorList,\n watchAnchorList\n} from \"../anchor\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Table of contents for [tablet -]\n */\ninterface TableOfContentsBelowTablet {} // tslint:disable-line\n\n/**\n * Table of contents for [tablet +]\n */\ninterface TableOfContentsAboveTablet {\n sidebar: Sidebar /* Sidebar */\n anchors: AnchorList /* Anchor list */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Table of contents\n */\nexport type TableOfContents =\n | TableOfContentsBelowTablet\n | TableOfContentsAboveTablet\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n header$: Observable
    /* Header observable */\n main$: Observable
    /* Main area observable */\n viewport$: Observable /* Viewport observable */\n tablet$: Observable /* Tablet media observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount table of contents from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountTableOfContents(\n { header$, main$, viewport$, tablet$}: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => tablet$\n .pipe(\n switchMap(tablet => {\n\n /* [tablet +]: Mount table of contents in sidebar */\n if (tablet) {\n const els = getElements(\".md-nav__link\", el)\n\n /* Watch and paint sidebar */\n const sidebar$ = watchSidebar(el, { main$, viewport$ })\n .pipe(\n paintSidebar(el, { header$ })\n )\n\n /* Watch and paint anchor list (scroll spy) */\n const anchors$ = watchAnchorList(els, { header$, viewport$ })\n .pipe(\n paintAnchorList(els)\n )\n\n /* Combine into a single hot observable */\n return combineLatest([sidebar$, anchors$])\n .pipe(\n map(([sidebar, anchors]) => ({ sidebar, anchors }))\n )\n\n /* [tablet -]: Unmount table of contents */\n } else {\n return of({})\n }\n })\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n animationFrameScheduler,\n pipe\n} from \"rxjs\"\nimport { finalize, observeOn, tap } from \"rxjs/operators\"\n\nimport { AnchorList } from \"../_\"\nimport {\n resetAnchorActive,\n resetAnchorBlur,\n setAnchorActive,\n setAnchorBlur\n} from \"../apply\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Paint anchor list\n *\n * @param els - Anchor elements\n *\n * @return Operator function\n */\nexport function paintAnchorList(\n els: HTMLAnchorElement[]\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ prev, next }) => {\n\n /* Look forward */\n for (const [el] of next) {\n resetAnchorActive(el)\n resetAnchorBlur(el)\n }\n\n /* Look backward */\n for (const [index, [el]] of prev.entries()) {\n setAnchorActive(el, index === prev.length - 1)\n setAnchorBlur(el, true)\n }\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n for (const el of els) {\n resetAnchorActive(el)\n resetAnchorBlur(el)\n }\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { reverse } from \"ramda\"\nimport { Observable, combineLatest } from \"rxjs\"\nimport {\n bufferCount,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n map,\n scan,\n startWith,\n switchMap\n} from \"rxjs/operators\"\n\nimport { Viewport, getElement } from \"observables\"\n\nimport { Header } from \"../../../header\"\nimport { AnchorList } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch anchor list\n *\n * This is effectively a scroll-spy implementation which will account for the\n * fixed header and automatically re-calculate anchor offsets when the viewport\n * is resized. The returned observable will only emit if the anchor list needs\n * to be repainted.\n *\n * This implementation tracks an anchor element's entire path starting from its\n * level up to the top-most anchor element, e.g. `[h3, h2, h1]`. Although the\n * Material theme currently doesn't make use of this information, it enables\n * the styling of the entire hierarchy through customization.\n *\n * Note that the current anchor is the last item of the `prev` anchor list.\n *\n * @param els - Anchor elements\n * @param options - Options\n *\n * @return Anchor list observable\n */\nexport function watchAnchorList(\n els: HTMLAnchorElement[], { header$, viewport$ }: WatchOptions\n): Observable {\n const table = new Map()\n for (const el of els) {\n const id = decodeURIComponent(el.hash.substring(1))\n const target = getElement(`[id=\"${id}\"]`)\n if (typeof target !== \"undefined\")\n table.set(el, target)\n }\n\n /* Compute necessary adjustment for header */\n const adjust$ = header$\n .pipe(\n map(header => 18 + header.height)\n )\n\n /* Compute partition of previous and next anchors */\n const partition$ = viewport$\n .pipe(\n distinctUntilKeyChanged(\"size\"),\n\n /* Build index to map anchor paths to vertical offsets */\n map(() => {\n let path: HTMLAnchorElement[] = []\n return [...table].reduce((index, [anchor, target]) => {\n while (path.length) {\n const last = table.get(path[path.length - 1])!\n if (last.tagName >= target.tagName) {\n path.pop()\n } else {\n break\n }\n }\n\n /* If the current anchor is hidden, continue with its parent */\n let offset = target.offsetTop\n while (!offset && target.parentElement) {\n target = target.parentElement\n offset = target.offsetTop\n }\n\n /* Map reversed anchor path to vertical offset */\n return index.set(\n reverse(path = [...path, anchor]),\n offset\n )\n }, new Map())\n }),\n\n /* Re-compute partition when viewport offset changes */\n switchMap(index => combineLatest([adjust$, viewport$])\n .pipe(\n scan(([prev, next], [adjust, { offset: { y } }]) => {\n\n /* Look forward */\n while (next.length) {\n const [, offset] = next[0]\n if (offset - adjust < y) {\n prev = [...prev, next.shift()!]\n } else {\n break\n }\n }\n\n /* Look backward */\n while (prev.length) {\n const [, offset] = prev[prev.length - 1]\n if (offset - adjust >= y) {\n next = [prev.pop()!, ...next]\n } else {\n break\n }\n }\n\n /* Return partition */\n return [prev, next]\n }, [[], [...index]]),\n distinctUntilChanged((a, b) => {\n return a[0] === b[0]\n && a[1] === b[1]\n })\n )\n )\n )\n\n /* Compute and return anchor list migrations */\n return partition$\n .pipe(\n map(([prev, next]) => ({\n prev: prev.map(([path]) => path),\n next: next.map(([path]) => path)\n })),\n\n /* Extract anchor list migrations */\n startWith({ prev: [], next: [] }),\n bufferCount(2, 1),\n map(([a, b]) => {\n\n /* Moving down */\n if (a.prev.length < b.prev.length) {\n return {\n prev: b.prev.slice(Math.max(0, a.prev.length - 1), b.prev.length),\n next: []\n }\n\n /* Moving up */\n } else {\n return {\n prev: b.prev.slice(-1),\n next: b.next.slice(0, b.next.length - a.next.length)\n }\n }\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, combineLatest, pipe } from \"rxjs\"\nimport { map, switchMap } from \"rxjs/operators\"\n\nimport { SearchResult } from \"integrations/search\"\n\nimport { SearchQuery } from \"../query\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search\n */\nexport interface Search {\n query: SearchQuery /* Search query */\n result: SearchResult[] /* Search result list */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n query$: Observable /* Search query observable */\n reset$: Observable /* Search reset observable */\n result$: Observable /* Search result observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountSearch(\n { query$, reset$, result$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(() => combineLatest([query$, result$, reset$])\n .pipe(\n map(([query, result]) => ({ query, result }))\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, combineLatest, fromEvent, merge } from \"rxjs\"\nimport {\n delay,\n distinctUntilChanged,\n map,\n startWith\n} from \"rxjs/operators\"\n\nimport { watchElementFocus } from \"observables\"\n\nimport { SearchQuery } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n transform?(value: string): string /* Transformation function */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Default transformation function\n *\n * Rogue control characters are filtered before handing the query to the\n * search index, as `lunr` will throw otherwise.\n *\n * @param value - Query value\n *\n * @return Transformed query value\n */\nfunction defaultTransform(value: string): string {\n return value\n .replace(/(?:^|\\s+)[*+-:^~]+(?=\\s+|$)/g, \"\")\n .trim()\n .replace(/\\s+|\\b$/g, \"* \")\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch search query\n *\n * Note that the focus event which triggers re-reading the current query value\n * is delayed by `1ms` so the input's empty state is allowed to propagate.\n *\n * @param el - Search query element\n * @param options - Options\n *\n * @return Search query observable\n */\nexport function watchSearchQuery(\n el: HTMLInputElement, { transform }: WatchOptions = {}\n): Observable {\n const fn = transform || defaultTransform\n\n /* Intercept keyboard events */\n const value$ = merge(\n fromEvent(el, \"keyup\"),\n fromEvent(el, \"focus\").pipe(delay(1))\n )\n .pipe(\n map(() => fn(el.value)),\n startWith(fn(el.value)),\n distinctUntilChanged()\n )\n\n /* Intercept focus events */\n const focus$ = watchElementFocus(el)\n\n /* Combine into a single observable */\n return combineLatest([value$, focus$])\n .pipe(\n map(([value, focus]) => ({ value, focus }))\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { OperatorFunction, pipe } from \"rxjs\"\nimport {\n distinctUntilKeyChanged,\n map,\n switchMap,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport {\n WorkerHandler,\n setToggle,\n useToggle\n} from \"observables\"\nimport {\n SearchMessage,\n SearchMessageType,\n SearchQueryMessage\n} from \"workers\"\n\nimport { watchSearchQuery } from \"../watch\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search query\n */\nexport interface SearchQuery {\n value: string /* Query value */\n focus: boolean /* Query focus */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n transform?(value: string): string /* Transformation function */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search query from source observable\n *\n * @param handler - Worker handler\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountSearchQuery(\n { tx$ }: WorkerHandler, options: MountOptions = {}\n): OperatorFunction {\n const toggle$ = useToggle(\"search\")\n return pipe(\n switchMap(el => {\n const query$ = watchSearchQuery(el, options)\n\n /* Subscribe worker to search query */\n query$\n .pipe(\n distinctUntilKeyChanged(\"value\"),\n map(({ value }): SearchQueryMessage => ({\n type: SearchMessageType.QUERY,\n data: value\n }))\n )\n .subscribe(tx$.next.bind(tx$))\n\n /* Toggle search on focus */\n query$\n .pipe(\n distinctUntilKeyChanged(\"focus\"),\n withLatestFrom(toggle$)\n )\n .subscribe(([{ focus }, toggle]) => {\n if (focus)\n setToggle(toggle, focus)\n })\n\n /* Return search query */\n return query$\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { OperatorFunction, pipe } from \"rxjs\"\nimport {\n mapTo,\n startWith,\n switchMap,\n switchMapTo,\n tap\n} from \"rxjs/operators\"\n\nimport { setElementFocus } from \"observables\"\n\nimport { useComponent } from \"../../../_\"\nimport { watchSearchReset } from \"../watch\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search reset from source observable\n *\n * @return Operator function\n */\nexport function mountSearchReset(): OperatorFunction {\n return pipe(\n switchMap(el => watchSearchReset(el)\n .pipe(\n switchMapTo(useComponent(\"search-query\")),\n tap(setElementFocus),\n mapTo(undefined)\n )\n ),\n startWith(undefined)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent } from \"rxjs\"\nimport { mapTo } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch search reset\n *\n * @param el - Search reset element\n *\n * @return Search reset observable\n */\nexport function watchSearchReset(\n el: HTMLElement\n): Observable {\n return fromEvent(el, \"click\")\n .pipe(\n mapTo(undefined)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { translate } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set number of search results\n *\n * @param el - Search result metadata element\n * @param value - Number of results\n */\nexport function setSearchResultMeta(\n el: HTMLElement, value: number\n): void {\n switch (value) {\n\n /* No results */\n case 0:\n el.textContent = translate(\"search.result.none\")\n break\n\n /* One result */\n case 1:\n el.textContent = translate(\"search.result.one\")\n break\n\n /* Multiple result */\n default:\n el.textContent = translate(\"search.result.other\", value.toString())\n }\n}\n\n/**\n * Reset number of search results\n *\n * @param el - Search result metadata element\n */\nexport function resetSearchResultMeta(\n el: HTMLElement\n): void {\n el.textContent = translate(\"search.result.placeholder\")\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Add an element to the search result list\n *\n * @param el - Search result list element\n * @param child - Search result element\n */\nexport function addToSearchResultList(\n el: HTMLElement, child: HTMLElement\n): void {\n el.appendChild(child)\n}\n\n/**\n * Reset search result list\n *\n * @param el - Search result list element\n */\nexport function resetSearchResultList(\n el: HTMLElement\n): void {\n el.innerHTML = \"\"\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n pipe\n} from \"rxjs\"\nimport {\n finalize,\n map,\n mapTo,\n observeOn,\n scan,\n switchMap,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport { SearchResult } from \"integrations/search\"\nimport { getElementOrThrow } from \"observables\"\nimport { renderSearchResult } from \"templates\"\n\nimport { SearchQuery } from \"../../query\"\nimport {\n addToSearchResultList,\n resetSearchResultList,\n resetSearchResultMeta,\n setSearchResultMeta\n} from \"../apply\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Paint options\n */\ninterface PaintOptions {\n query$: Observable /* Search query observable */\n fetch$: Observable /* Result fetch observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Paint search results\n *\n * This function will perform a lazy rendering of the search results, depending\n * on the vertical offset of the search result container. When the scroll offset\n * reaches the bottom of the element, more results are fetched and rendered.\n *\n * @param el - Search result element\n * @param options - Options\n *\n * @return Operator function\n */\nexport function paintSearchResult(\n el: HTMLElement, { query$, fetch$ }: PaintOptions\n): MonoTypeOperatorFunction {\n const list = getElementOrThrow(\".md-search-result__list\", el)\n const meta = getElementOrThrow(\".md-search-result__meta\", el)\n return pipe(\n\n /* Paint search result metadata */\n withLatestFrom(query$),\n map(([result, query]) => {\n if (query.value) {\n setSearchResultMeta(meta, result.length)\n } else {\n resetSearchResultMeta(meta)\n }\n return result\n }),\n\n /* Paint search result list */\n switchMap(result => fetch$\n .pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n scan(index => {\n const container = el.parentElement!\n while (index < result.length) {\n addToSearchResultList(list, renderSearchResult(result[index++]))\n if (container.scrollHeight - container.offsetHeight > 16)\n break\n }\n return index\n }, 0),\n\n /* Re-map to search result */\n mapTo(result),\n\n /* Reset on complete or error */\n finalize(() => {\n resetSearchResultList(list)\n })\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { identity } from \"ramda\"\nimport { Observable, OperatorFunction, pipe } from \"rxjs\"\nimport {\n distinctUntilChanged,\n filter,\n map,\n pluck,\n switchMap\n} from \"rxjs/operators\"\n\nimport { SearchResult } from \"integrations/search\"\nimport {\n WorkerHandler,\n watchElementOffset\n} from \"observables\"\nimport {\n SearchMessage,\n isSearchResultMessage\n} from \"workers\"\n\nimport { SearchQuery } from \"../../query\"\nimport { paintSearchResult } from \"../paint\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n query$: Observable /* Search query observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search result from source observable\n *\n * @param handler - Worker handler\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountSearchResult(\n { rx$ }: WorkerHandler, { query$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => {\n const container = el.parentElement!\n\n /* Compute whether there are more search results to fetch */\n const fetch$ = watchElementOffset(container)\n .pipe(\n map(({ y }) => {\n return y >= container.scrollHeight - container.offsetHeight - 16\n }),\n distinctUntilChanged(),\n filter(identity)\n )\n\n /* Paint search results */\n return rx$\n .pipe(\n filter(isSearchResultMessage),\n pluck(\"data\"),\n paintSearchResult(el, { query$, fetch$ })\n )\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./query\"\nexport * from \"./reset\"\nexport * from \"./result\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, combineLatest, pipe } from \"rxjs\"\nimport {\n distinctUntilChanged,\n filter,\n map,\n shareReplay,\n startWith,\n switchMap,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport {\n Viewport,\n getElement,\n watchViewportAt\n} from \"observables\"\n\nimport { useComponent } from \"../../_\"\nimport { paintHeaderType } from \"../paint\"\nimport { watchHeader } from \"../watch\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Header type\n */\nexport type HeaderType =\n | \"site\" /* Header shows site title */\n | \"page\" /* Header shows page title */\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Header\n */\nexport interface Header {\n type: HeaderType /* Header type */\n sticky: boolean /* Header stickyness */\n height: number /* Header visible height */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount header from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountHeader(\n { viewport$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => {\n const header$ = watchHeader(el, { viewport$ })\n\n /* Compute whether the header should switch to page header */\n const type$ = useComponent(\"main\")\n .pipe(\n map(main => getElement(\"h1, h2, h3, h4, h5, h6\", main)!),\n filter(hx => typeof hx !== \"undefined\"),\n withLatestFrom(useComponent(\"header-title\")),\n switchMap(([hx, title]) => watchViewportAt(hx, { header$, viewport$ })\n .pipe(\n map(({ offset: { y } }) => {\n return y >= hx.offsetHeight ? \"page\" : \"site\"\n }),\n distinctUntilChanged(),\n paintHeaderType(title)\n )\n ),\n startWith(\"site\")\n )\n\n /* Combine into single observable */\n return combineLatest([header$, type$])\n .pipe(\n map(([header, type]): Header => ({ type, ...header })),\n shareReplay(1)\n )\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, of } from \"rxjs\"\nimport { distinctUntilKeyChanged, switchMap } from \"rxjs/operators\"\n\nimport { Viewport } from \"observables\"\n\nimport { Header } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch header\n *\n * The header is wrapped in an observable to pave the way for auto-hiding or\n * other dynamic behaviors that may be implemented later on.\n *\n * @param el - Header element\n * @param options - Options\n *\n * @return Header observable\n */\nexport function watchHeader(\n el: HTMLElement, { viewport$ }: WatchOptions\n): Observable> {\n return viewport$\n .pipe(\n distinctUntilKeyChanged(\"size\"),\n switchMap(() => {\n const styles = getComputedStyle(el)\n const sticky = [\n \"sticky\", /* Modern browsers */\n \"-webkit-sticky\" /* Old Safari */\n ].includes(styles.position)\n return of({\n sticky,\n height: sticky ? el.offsetHeight : 0\n })\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n animationFrameScheduler,\n pipe\n} from \"rxjs\"\nimport { finalize, observeOn, tap } from \"rxjs/operators\"\n\nimport { HeaderType } from \"../_\"\nimport {\n resetHeaderTitleActive,\n setHeaderTitleActive\n} from \"../apply\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Paint header title type\n *\n * @param el - Header title element\n *\n * @return Operator function\n */\nexport function paintHeaderType(\n el: HTMLElement\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(type => {\n setHeaderTitleActive(el, type === \"page\")\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n resetHeaderTitleActive(el)\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set header title active\n *\n * @param el - Header title element\n * @param value - Whether the title is shown\n */\nexport function setHeaderTitleActive(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"active\" : \"\")\n}\n\n/**\n * Reset header title active\n *\n * @param el - Header title element\n */\nexport function resetHeaderTitleActive(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./apply\"\nexport * from \"./paint\"\nexport * from \"./watch\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, Subject, pipe } from \"rxjs\"\nimport { distinctUntilKeyChanged, switchMap, tap } from \"rxjs/operators\"\n\nimport { Viewport } from \"observables\"\n\nimport { useComponent } from \"../../_\"\nimport { Header } from \"../../header\"\nimport { paintHeaderShadow } from \"../paint\"\nimport { watchMain } from \"../watch\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Main area\n */\nexport interface Main {\n offset: number /* Main area top offset */\n height: number /* Main area visible height */\n active: boolean /* Scrolled past top offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount main area from source observable\n *\n * The header must be connected to the main area observable outside of the\n * operator function, as the header will persist in-between document switches\n * while the main area is replaced. However, the header observable must be\n * passed to this function, so we connect both via a long-living subject.\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountMain(\n { header$, viewport$ }: MountOptions\n): OperatorFunction {\n const main$ = new Subject
    ()\n\n /* Connect to main area observable via long-living subject */\n useComponent(\"header\")\n .pipe(\n switchMap(header => main$\n .pipe(\n distinctUntilKeyChanged(\"active\"),\n paintHeaderShadow(header)\n )\n )\n )\n .subscribe()\n\n /* Return operator */\n return pipe(\n switchMap(el => watchMain(el, { header$, viewport$ })),\n tap(main => main$.next(main))\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n animationFrameScheduler,\n pipe\n} from \"rxjs\"\nimport { finalize, observeOn, tap } from \"rxjs/operators\"\n\nimport { Main } from \"../_\"\nimport {\n resetHeaderShadow,\n setHeaderShadow\n} from \"../apply\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Paint header shadow\n *\n * @param el - Header element\n *\n * @return Operator function\n */\nexport function paintHeaderShadow(\n el: HTMLElement\n): MonoTypeOperatorFunction
    {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ active }) => {\n setHeaderShadow(el, active)\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n resetHeaderShadow(el)\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set header shadow\n *\n * @param el - Header element\n * @param value - Whether the shadow is shown\n */\nexport function setHeaderShadow(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"shadow\" : \"\")\n}\n\n/**\n * Reset header shadow\n *\n * @param el - Header element\n */\nexport function resetHeaderShadow(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, combineLatest } from \"rxjs\"\nimport { distinctUntilChanged, map, pluck } from \"rxjs/operators\"\n\nimport { Viewport } from \"observables\"\n\nimport { Header } from \"../../header\"\nimport { Main } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch main area\n *\n * This function returns an observable that computes the visual parameters of\n * the main area which depends on the viewport vertical offset and height, as\n * well as the height of the header element, if the header is fixed.\n *\n * @param el - Main area element\n * @param options - Options\n *\n * @return Main area observable\n */\nexport function watchMain(\n el: HTMLElement, { header$, viewport$ }: WatchOptions\n): Observable
    {\n\n /* Compute necessary adjustment for header */\n const adjust$ = header$\n .pipe(\n pluck(\"height\")\n )\n\n /* Compute the main area's visible height */\n const height$ = combineLatest([adjust$, viewport$])\n .pipe(\n map(([adjust, { offset: { y }, size: { height } }]) => {\n const top = el.offsetTop\n const bottom = el.offsetHeight + top\n return height\n - Math.max(0, top - y, adjust)\n - Math.max(0, height + y - bottom)\n }),\n map(height => Math.max(0, height)),\n distinctUntilChanged()\n )\n\n /* Compute whether the viewport offset is past the main area's top */\n const active$ = combineLatest([adjust$, viewport$])\n .pipe(\n map(([adjust, { offset: { y } }]) => y >= el.offsetTop - adjust),\n distinctUntilChanged()\n )\n\n /* Combine into a single observable */\n return combineLatest([adjust$, height$, active$])\n .pipe(\n map(([adjust, height, active]) => ({\n offset: el.offsetTop - adjust,\n height,\n active\n }))\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./apply\"\nexport * from \"./paint\"\nexport * from \"./watch\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, pipe } from \"rxjs\"\nimport { distinctUntilChanged, map, switchMap } from \"rxjs/operators\"\n\nimport { Viewport, watchViewportAt } from \"observables\"\n\nimport { Header } from \"../../header\"\nimport { paintHero } from \"../paint\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Hero\n */\nexport interface Hero {\n hidden: boolean /* Whether the hero is hidden */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount hero from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountHero(\n { header$, viewport$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => watchViewportAt(el, { header$, viewport$ })\n .pipe(\n map(({ offset: { y } }) => ({ hidden: y >= 20 })),\n distinctUntilChanged(),\n paintHero(el)\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n animationFrameScheduler,\n pipe\n} from \"rxjs\"\nimport { finalize, observeOn, tap } from \"rxjs/operators\"\n\nimport { Hero } from \"../_\"\nimport {\n resetHeroHidden,\n setHeroHidden\n} from \"../apply\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Paint hero\n *\n * @param el - Hero element\n *\n * @return Operator function\n */\nexport function paintHero(\n el: HTMLElement\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ hidden }) => {\n setHeroHidden(el, hidden)\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n resetHeroHidden(el)\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set hero hidden\n *\n * @param el - Hero element\n * @param value - Whether the element is hidden\n */\nexport function setHeroHidden(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"hidden\" : \"\")\n}\n\n/**\n * Reset hero hidden\n *\n * @param el - Hero element\n */\nexport function resetHeroHidden(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./apply\"\nexport * from \"./paint\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, of, pipe } from \"rxjs\"\nimport { distinctUntilChanged, map, switchMap } from \"rxjs/operators\"\n\nimport { Viewport, watchViewportAt } from \"observables\"\n\nimport { Header } from \"../../header\"\nimport { paintTabs } from \"../paint\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Tabs\n */\nexport interface Tabs {\n hidden: boolean /* Whether the tabs are hidden */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n screen$: Observable /* Media screen observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount tabs from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountTabs(\n { header$, viewport$, screen$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => screen$\n .pipe(\n switchMap(screen => {\n\n /* [screen +]: Mount tabs above screen breakpoint */\n if (screen) {\n return watchViewportAt(el, { header$, viewport$ })\n .pipe(\n map(({ offset: { y } }) => ({ hidden: y >= 10 })),\n distinctUntilChanged(),\n paintTabs(el)\n )\n\n /* [screen -]: Unmount tabs below screen breakpoint */\n } else {\n return of({ hidden: true })\n }\n })\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n animationFrameScheduler,\n pipe\n} from \"rxjs\"\nimport { finalize, observeOn, tap } from \"rxjs/operators\"\n\nimport { Tabs } from \"../_\"\nimport {\n resetTabsHidden,\n setTabsHidden\n} from \"../apply\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Paint tabs\n *\n * @param el - Tabs element\n *\n * @return Operator function\n */\nexport function paintTabs(\n el: HTMLElement\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ hidden }) => {\n setTabsHidden(el, hidden)\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n resetTabsHidden(el)\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set tabs hidden\n *\n * @param el - Tabs element\n * @param value - Whether the element is hidden\n */\nexport function setTabsHidden(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"hidden\" : \"\")\n}\n\n/**\n * Reset tabs hidden\n *\n * @param el - Tabs element\n */\nexport function resetTabsHidden(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./apply\"\nexport * from \"./paint\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { NEVER, Observable, fromEvent, iif, merge } from \"rxjs\"\nimport { map, mapTo, shareReplay, switchMap } from \"rxjs/operators\"\n\nimport { getElements } from \"observables\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Check whether the given device is an Apple device\n *\n * @return Test result\n */\nfunction isAppleDevice(): boolean {\n return /(iPad|iPhone|iPod)/.test(navigator.userAgent)\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch all elements with `data-md-scrollfix` attributes\n *\n * This is a year-old patch which ensures that overflow scrolling works at the\n * top and bottom of containers on iOS by ensuring a `1px` scroll offset upon\n * the start of a touch event.\n *\n * @see https://bit.ly/2SCtAOO - Original source\n *\n * @param options - Options\n */\nexport function patchScrollfix(\n { document$ }: PatchOptions\n): void {\n const els$ = document$\n .pipe(\n map(() => getElements(\"[data-md-scrollfix]\")),\n shareReplay(1)\n )\n\n /* Remove marker attribute, so we'll only add the fix once */\n els$.subscribe(els => {\n for (const el of els)\n el.removeAttribute(\"data-md-scrollfix\")\n })\n\n /* Patch overflow scrolling on touch start */\n iif(isAppleDevice, els$, NEVER)\n .pipe(\n switchMap(els => merge(...els.map(el => (\n fromEvent(el, \"touchstart\")\n .pipe(\n mapTo(el)\n )\n ))))\n )\n .subscribe(el => {\n const top = el.scrollTop\n\n /* We're at the top of the container */\n if (top === 0) {\n el.scrollTop = 1\n\n /* We're at the bottom of the container */\n } else if (top + el.offsetHeight === el.scrollHeight) {\n el.scrollTop = top - 1\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { NEVER, Observable } from \"rxjs\"\nimport { catchError, map, switchMap } from \"rxjs/operators\"\n\nimport { getElementOrThrow, getElements } from \"observables\"\nimport { renderSource } from \"templates\"\nimport { cache, hash } from \"utilities\"\n\nimport { fetchSourceFactsFromGitHub } from \"./github\"\nimport { fetchSourceFactsFromGitLab } from \"./gitlab\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Source facts\n */\nexport type SourceFacts = string[]\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch source facts\n *\n * @param url - Source repository URL\n *\n * @return Source facts observable\n */\nfunction fetchSourceFacts(\n url: string\n): Observable {\n const [type] = url.match(/(git(?:hub|lab))/i) || []\n switch (type.toLowerCase()) {\n\n /* GitHub repository */\n case \"github\":\n const [, user, repo] = url.match(/^.+github\\.com\\/([^\\/]+)\\/?([^\\/]+)/i)\n return fetchSourceFactsFromGitHub(user, repo)\n\n /* GitLab repository */\n case \"gitlab\":\n const [, base, project] = url.match(/^.+?([^\\/]*gitlab[^\\/]+)\\/(.+)/i)\n return fetchSourceFactsFromGitLab(base, project)\n\n /* Everything else */\n default:\n return NEVER\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch elements containing repository information\n *\n * This function will retrieve the URL from the repository link and try to\n * query data from integrated source code platforms like GitHub or GitLab.\n *\n * @param options - Options\n */\nexport function patchSource(\n { document$ }: PatchOptions\n): void {\n document$\n .pipe(\n map(() => getElementOrThrow(\".md-source[href]\")),\n switchMap(({ href }) => (\n cache(`${hash(href)}`, () => fetchSourceFacts(href))\n )),\n catchError(() => NEVER)\n )\n .subscribe(facts => {\n for (const el of getElements(\".md-source__repository\")) {\n if (!el.hasAttribute(\"data-md-state\")) {\n el.setAttribute(\"data-md-state\", \"done\")\n el.appendChild(renderSource(facts))\n }\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Repo, User } from \"github-types\"\nimport { Observable, of } from \"rxjs\"\nimport { ajax } from \"rxjs/ajax\"\nimport { filter, pluck, switchMap } from \"rxjs/operators\"\n\nimport { round } from \"utilities\"\n\nimport { SourceFacts } from \"..\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch GitHub source facts\n *\n * @param user - GitHub user\n * @param repo - GitHub repository\n *\n * @return Source facts observable\n */\nexport function fetchSourceFactsFromGitHub(\n user: string, repo?: string\n): Observable {\n return ajax({\n url: typeof repo !== \"undefined\"\n ? `https://api.github.com/repos/${user}/${repo}`\n : `https://api.github.com/users/${user}`,\n responseType: \"json\"\n })\n .pipe(\n filter(({ status }) => status === 200),\n pluck(\"response\"),\n switchMap(data => {\n\n /* GitHub repository */\n if (typeof repo !== \"undefined\") {\n const { stargazers_count, forks_count }: Repo = data\n return of([\n `${round(stargazers_count || 0)} Stars`,\n `${round(forks_count || 0)} Forks`\n ])\n\n /* GitHub user/organization */\n } else {\n const { public_repos }: User = data\n return of([\n `${round(public_repos || 0)} Repositories`\n ])\n }\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { ProjectSchema } from \"gitlab\"\nimport { Observable } from \"rxjs\"\nimport { ajax } from \"rxjs/ajax\"\nimport { filter, map, pluck } from \"rxjs/operators\"\n\nimport { round } from \"utilities\"\n\nimport { SourceFacts } from \"..\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch GitLab source facts\n *\n * @param base - GitLab base\n * @param project - GitLab project\n *\n * @return Source facts observable\n */\nexport function fetchSourceFactsFromGitLab(\n base: string, project: string\n): Observable {\n return ajax({\n url: `https://${base}/api/v4/projects/${encodeURIComponent(project)}`,\n responseType: \"json\"\n })\n .pipe(\n filter(({ status }) => status === 200),\n pluck(\"response\"),\n map(({ star_count, forks_count }: ProjectSchema) => ([\n `${round(star_count)} Stars`,\n `${round(forks_count)} Forks`\n ]))\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n// TODO: remove this after we finished refactoring\n// tslint:disable\n\nimport \"../stylesheets/main.scss\"\nimport \"../stylesheets/palette.scss\"\n\nimport { values } from \"ramda\"\nimport {\n merge,\n combineLatest,\n animationFrameScheduler,\n fromEvent,\n of,\n NEVER\n} from \"rxjs\"\nimport {\n delay,\n switchMap,\n tap,\n filter,\n withLatestFrom,\n observeOn,\n take,\n mapTo,\n shareReplay,\n sample,\n share,\n map,\n pluck,\n debounceTime,\n distinctUntilKeyChanged,\n distinctUntilChanged,\n bufferCount\n} from \"rxjs/operators\"\n\nimport {\n watchToggle,\n setToggle,\n getElements,\n watchMedia,\n watchDocument,\n watchLocation,\n watchLocationHash,\n watchViewport,\n setupToggles,\n useToggle,\n getElement,\n setViewportOffset,\n ViewportOffset\n} from \"./observables\"\nimport { setupSearchWorker } from \"./workers\"\n\nimport {\n mountHeader,\n mountHero,\n mountMain,\n mountNavigation,\n mountSearch,\n mountTableOfContents,\n mountTabs,\n useComponent,\n setupComponents,\n mountSearchQuery,\n mountSearchReset,\n mountSearchResult\n} from \"components\"\nimport { setupClipboard } from \"./integrations/clipboard\"\nimport { setupKeyboard } from \"./integrations/keyboard\"\nimport {\n patchTables,\n patchDetails,\n patchScrollfix,\n patchSource,\n patchScripts\n} from \"patches\"\nimport { isConfig } from \"utilities\"\nimport { setupDialog } from \"integrations/dialog\"\n\n/* ------------------------------------------------------------------------- */\n\ndocument.documentElement.classList.remove(\"no-js\")\ndocument.documentElement.classList.add(\"js\")\n\n/* Test for iOS */\nif (navigator.userAgent.match(/(iPad|iPhone|iPod)/g))\n document.documentElement.classList.add(\"ios\")\n\n/**\n * Set scroll lock\n *\n * @param el - Scrollable element\n * @param value - Vertical offset\n */\nexport function setScrollLock(\n el: HTMLElement, value: number\n): void {\n el.setAttribute(\"data-md-state\", \"lock\")\n el.style.top = `-${value}px`\n}\n\n/**\n * Reset scroll lock\n *\n * @param el - Scrollable element\n */\nexport function resetScrollLock(\n el: HTMLElement\n): void {\n const value = -1 * parseInt(el.style.top, 10)\n el.removeAttribute(\"data-md-state\")\n el.style.top = \"\"\n if (value)\n window.scrollTo(0, value)\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Initialize Material for MkDocs\n *\n * @param config - Configuration\n */\nexport function initialize(config: unknown) {\n if (!isConfig(config))\n throw new SyntaxError(`Invalid configuration: ${JSON.stringify(config)}`)\n\n /* Setup user interface observables */\n const location$ = watchLocation()\n const hash$ = watchLocationHash()\n const viewport$ = watchViewport()\n const tablet$ = watchMedia(\"(min-width: 960px)\")\n const screen$ = watchMedia(\"(min-width: 1220px)\")\n\n /* Setup document observable */\n const document$ = config.feature.instant\n ? watchDocument({ location$ })\n : watchDocument()\n\n /* Setup toggle bindings */\n setupToggles([\n \"drawer\", /* Toggle for drawer */\n \"search\" /* Toggle for search */\n ], { document$ })\n\n /* Setup component bindings */\n setupComponents([\n \"container\", /* Container */\n \"header\", /* Header */\n \"header-title\", /* Header title */\n \"hero\", /* Hero */\n \"main\", /* Main area */\n \"navigation\", /* Navigation */\n \"search\", /* Search */\n \"search-query\", /* Search input */\n \"search-reset\", /* Search reset */\n \"search-result\", /* Search results */\n \"tabs\", /* Tabs */\n \"toc\" /* Table of contents */\n ], { document$ })\n\n /* ----------------------------------------------------------------------- */\n\n const worker = setupSearchWorker(config.worker.search, {\n base: config.base, location$\n })\n\n /* ----------------------------------------------------------------------- */\n\n /* Create header observable */\n const header$ = useComponent(\"header\")\n .pipe(\n mountHeader({ viewport$ }),\n shareReplay(1)\n )\n\n const main$ = useComponent(\"main\")\n .pipe(\n mountMain({ header$, viewport$ }),\n shareReplay(1)\n )\n\n /* ----------------------------------------------------------------------- */\n\n /* Mount search query */\n const query$ = useComponent(\"search-query\")\n .pipe(\n mountSearchQuery(worker),\n shareReplay(1) // TODO: this must be put onto EVERY component!\n )\n\n /* Mount search reset */\n const reset$ = useComponent(\"search-reset\")\n .pipe(\n mountSearchReset(),\n shareReplay(1)\n )\n\n /* Mount search result */\n const result$ = useComponent(\"search-result\")\n .pipe(\n mountSearchResult(worker, { query$ }),\n shareReplay(1)\n )\n\n /* ----------------------------------------------------------------------- */\n\n const search$ = useComponent(\"search\")\n .pipe(\n mountSearch({ query$, reset$, result$ }),\n shareReplay(1)\n )\n\n /* ----------------------------------------------------------------------- */\n\n const navigation$ = useComponent(\"navigation\")\n .pipe(\n mountNavigation({ header$, main$, viewport$, screen$ }),\n shareReplay(1) // shareReplay because there might be late subscribers\n )\n\n const toc$ = useComponent(\"toc\")\n .pipe(\n mountTableOfContents({ header$, main$, viewport$, tablet$ }),\n shareReplay(1)\n )\n\n const tabs$ = useComponent(\"tabs\")\n .pipe(\n mountTabs({ header$, viewport$, screen$ }),\n shareReplay(1)\n )\n\n const hero$ = useComponent(\"hero\")\n .pipe(\n mountHero({ header$, viewport$ }),\n shareReplay(1)\n )\n\n /* ----------------------------------------------------------------------- */\n\n const keyboard$ = setupKeyboard()\n\n patchDetails({ document$, hash$ })\n patchScripts({ document$ })\n patchSource({ document$ })\n patchTables({ document$ })\n\n /* Force 1px scroll offset to trigger overflow scrolling */\n patchScrollfix({ document$ })\n\n /* Setup clipboard and dialog */\n const dialog$ = setupDialog()\n const clipboard$ = setupClipboard({ document$, dialog$ })\n\n /* ----------------------------------------------------------------------- */\n\n // Close drawer and search on hash change\n // put into navigation...\n // TODO: replace with popstate?\n hash$.subscribe(() => {\n useToggle(\"drawer\").subscribe(el => {\n setToggle(el, false)\n })\n })\n\n // put into search...\n hash$\n .pipe(\n switchMap(hash => useToggle(\"search\")\n .pipe(\n filter(x => x.checked), // only active\n tap(toggle => setToggle(toggle, false)),\n delay(125), // ensure that it runs after the body scroll reset...\n mapTo(hash)\n )\n )\n )\n .subscribe(hash => {\n getElement(`[id=\"${hash}\"]`)!.scrollIntoView()\n })\n\n // Scroll lock // document -> document$ => { body } !?\n // put into search...\n const toggle$ = useToggle(\"search\")\n combineLatest([\n toggle$.pipe(switchMap(watchToggle)),\n tablet$,\n ])\n .pipe(\n withLatestFrom(viewport$),\n switchMap(([[toggle, tablet], { offset: { y }}]) => {\n const active = toggle && !tablet\n return document$\n .pipe(\n delay(active ? 400 : 100), // TOOD: directly combine this with the hash!\n observeOn(animationFrameScheduler),\n tap(({ body }) => active\n ? setScrollLock(body, y)\n : resetScrollLock(body)\n )\n )\n })\n )\n .subscribe()\n\n /* ----------------------------------------------------------------------- */\n\n /**\n * Location change\n */\n interface State {\n url: URL\n data?: ViewportOffset\n }\n\n function isInternalLink(el: HTMLAnchorElement | URL) {\n return el.host === location.host && (\n // TODO: Improve regex\n !el.pathname || el.pathname === \"/\" || /\\/[\\w-]+(?:\\/?|\\.html)$/i.test(el.pathname) // TODO: provide some test cases\n )\n }\n\n // on same page!\n function isAnchorLink(el: HTMLAnchorElement | URL) {\n return el.pathname === location.pathname && el.hash.length > 0\n }\n\n function compareState(\n { url: a }: State, { url: b }: State\n ) {\n return a.href === b.href\n }\n\n // instant loading\n if (config.feature.instant) {\n\n /* Disable automatic scroll restoration, as it doesn't work nicely */\n if (\"scrollRestoration\" in history)\n history.scrollRestoration = \"manual\"\n\n /* Resolve relative links for stability */\n for (const selector of [\n `link[rel=\"shortcut icon\"]`,\n `link[rel=\"stylesheet\"]`\n ])\n for (const el of getElements(selector))\n el.href = el.href\n\n /* Intercept internal link clicks */\n const internal$ = fromEvent(document.body, \"click\")\n .pipe(\n filter(ev => !(ev.metaKey || ev.ctrlKey)),\n switchMap(ev => {\n if (ev.target instanceof HTMLElement) {\n const el = ev.target.closest(\"a\")\n if (el && isInternalLink(el)) {\n if (!isAnchorLink(el))\n ev.preventDefault()\n return of(el.href)\n }\n }\n return NEVER\n }),\n distinctUntilChanged(),\n map(href => ({ url: new URL(href) })),\n share()\n )\n\n /* Intercept internal links to dispatch */\n const dispatch$ = internal$\n .pipe(\n filter(({ url }) => !isAnchorLink(url)),\n share()\n )\n\n /* Intercept popstate events (history back and forward) */\n const popstate$ = fromEvent(window, \"popstate\")\n .pipe(\n filter(ev => ev.state !== null),\n map(ev => ({\n url: new URL(location.href),\n data: ev.state\n })),\n share()\n )\n\n /* Emit location change */\n merge(dispatch$, popstate$)\n .pipe(\n pluck(\"url\")\n )\n .subscribe(location$)\n\n /* Add dispatched link to history */\n internal$\n .pipe(\n // TODO: must start with the current location and ignore the first emission\n distinctUntilChanged(compareState),\n filter(({ url }) => !isAnchorLink(url))\n )\n .subscribe(({ url }) => {\n // console.log(`History.Push ${url}`)\n history.pushState({}, \"\", url.toString())\n })\n\n // special case\n merge(internal$, popstate$)\n .pipe(\n bufferCount(2, 1),\n // filter(([prev, next]) => {\n // return prev.url.href.match(next.url.href) !== null\n // && isAnchorLink(prev.url)\n // })\n )\n .subscribe(([prev, next]) => {\n console.log(`<- ${prev.url}`)\n console.log(`-> ${next.url}`)\n\n if (\n prev.url.href.match(next.url.href) !== null &&\n isAnchorLink(prev.url)\n ) {\n // dialog$.next(`Potential Candidate: ${JSON.stringify(next.data)}`, ) // awesome debugging.\n setViewportOffset(next.data || { y: 0 })\n }\n // console.log(\"Potential Candidate\")\n })\n // .subscribe((x) => console.log(x[0].url.toString(), x[1].url.toString()))\n // filter(([prev, next]) => {\n // return prev.url.href.match(next.url.href) !== null\n // && isAnchorLink(prev.url)\n // }),\n // map(([, next]) => next)\n // // distinctUntilChanged(compareLocationChange),\n // // filter(({ url }) => !isAnchorLink(url))\n // )\n // .subscribe(({ url }) => {\n // console.log(`Restore ${url}`)\n // })\n\n /* Persist viewport offset in history before hash change */\n viewport$\n .pipe(\n debounceTime(250),\n distinctUntilKeyChanged(\"offset\"),\n )\n .subscribe(({ offset }) => {\n // console.log(\"Update\", offset)\n history.replaceState(offset, \"\")\n })\n\n /* */\n merge(dispatch$, popstate$)\n .pipe(\n sample(document$),\n withLatestFrom(document$),\n )\n .subscribe(([{ url, data }, { title, head }]) => {\n console.log(\"Done\", url.href, data)\n\n // trigger custom event\n document.dispatchEvent(new CustomEvent(\"DOMContentSwitch\"))\n\n // setDocumentTitle\n document.title = title\n\n // replace meta tags\n for (const selector of [\n `link[rel=\"canonical\"]`,\n `meta[name=\"author\"]`,\n `meta[name=\"description\"]`\n ]) {\n const next = getElement(selector, head)\n const prev = getElement(selector, document.head)\n if (\n typeof next !== \"undefined\" &&\n typeof prev !== \"undefined\"\n ) {\n prev.replaceWith(next)\n }\n }\n\n // search drawer close\n useToggle(\"search\").subscribe(el => {\n setToggle(el, false)\n })\n\n // // TODO: this doesnt work as expected\n if (url.hash) {\n console.log(\"hash data?\", data)\n const a = document.createElement(\"a\")\n a.href = url.hash\n a.click()\n } else {\n setViewportOffset(data || { y: 0 }) // push state!\n }\n })\n\n // internal$.subscribe(({ url }) => {\n // console.log(`Internal ${url}`)\n // })\n\n // dispatch$.subscribe(({ url }) => {\n // console.log(`Dispatch ${url}`)\n // })\n\n popstate$.subscribe(({ url }) => {\n console.log(`Popstate ${url.href}`, url)\n })\n }\n\n /* ----------------------------------------------------------------------- */\n\n // if we use a single tab outside of search, unhide all permalinks.\n // TODO: experimental. necessary!?\n keyboard$\n .pipe(\n filter(key => key.mode === \"global\" && [\"Tab\"].includes(key.type)),\n take(1)\n )\n .subscribe(() => {\n for (const link of getElements(\".headerlink\"))\n link.style.visibility = \"visible\"\n })\n\n /* ----------------------------------------------------------------------- */\n\n const state = {\n search$,\n clipboard$,\n location$,\n hash$,\n keyboard$,\n dialog$,\n main$,\n navigation$,\n toc$,\n tabs$,\n hero$,\n // title$ // TODO: header title\n }\n\n const { ...rest } = state\n merge(...values(rest))\n .subscribe() // potential memleak <-- use takeUntil\n\n return {\n // agent,\n state\n }\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable } from \"rxjs\"\nimport {\n filter,\n map,\n share,\n switchMap,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport { useComponent } from \"components\"\nimport {\n Key,\n getActiveElement,\n getElement,\n getElements,\n isSusceptibleToKeyboard,\n setElementFocus,\n setElementSelection,\n setToggle,\n useToggle,\n watchKeyboard,\n watchToggle\n} from \"observables\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Keyboard mode\n */\nexport type KeyboardMode =\n | \"global\" /* Global */\n | \"search\" /* Search is open */\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Keyboard\n */\nexport interface Keyboard extends Key {\n mode: KeyboardMode /* Keyboard mode */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup keyboard\n *\n * This function will setup the keyboard handlers and ensure that keys are\n * correctly propagated. Currently there are two modes:\n *\n * - `global`: This mode is active when the search is closed. It is intended\n * to assign hotkeys to specific functions of the site. Currently the search,\n * previous and next page can be triggered.\n *\n * - `search`: This mode is active when the search is open. It maps certain\n * navigational keys to offer search results that can be entirely navigated\n * through keyboard input.\n *\n * The keyboard observable is returned and can be used to monitor the keyboard\n * in order toassign further hotkeys to custom functions.\n *\n * @return Keyboard observable\n */\nexport function setupKeyboard(): Observable {\n const toggle$ = useToggle(\"search\")\n const search$ = toggle$\n .pipe(\n switchMap(watchToggle)\n )\n\n /* Setup keyboard and determine mode */\n const keyboard$ = watchKeyboard()\n .pipe(\n withLatestFrom(search$),\n map(([key, toggle]): Keyboard => ({\n mode: toggle ? \"search\" : \"global\",\n ...key\n })),\n share()\n )\n\n /* Setup search keyboard handlers */\n keyboard$\n .pipe(\n filter(({ mode }) => mode === \"search\"),\n withLatestFrom(\n toggle$,\n useComponent(\"search-query\"),\n useComponent(\"search-result\")\n )\n )\n .subscribe(([key, toggle, query, result]) => {\n const active = getActiveElement()\n switch (key.type) {\n\n /* Enter: prevent form submission */\n case \"Enter\":\n if (active === query)\n key.claim()\n break\n\n /* Escape or Tab: close search */\n case \"Escape\":\n case \"Tab\":\n setToggle(toggle, false)\n setElementFocus(query, false)\n break\n\n /* Vertical arrows: select previous or next search result */\n case \"ArrowUp\":\n case \"ArrowDown\":\n if (typeof active === \"undefined\") {\n setElementFocus(query)\n } else {\n const els = [query, ...getElements(\"[href]\", result)]\n const i = Math.max(0, (\n Math.max(0, els.indexOf(active)) + els.length + (\n key.type === \"ArrowUp\" ? -1 : +1\n )\n ) % els.length)\n setElementFocus(els[i])\n }\n\n /* Prevent scrolling of page */\n key.claim()\n break\n\n /* All other keys: hand to search query */\n default:\n if (query !== getActiveElement())\n setElementFocus(query)\n }\n })\n\n /* Setup global keyboard handlers */\n keyboard$\n .pipe(\n filter(({ mode }) => {\n if (mode === \"global\") {\n const active = getActiveElement()\n if (typeof active !== \"undefined\")\n return !isSusceptibleToKeyboard(active)\n }\n return false\n }),\n withLatestFrom(useComponent(\"search-query\"))\n )\n .subscribe(([key, query]) => {\n switch (key.type) {\n\n /* Open search and select query */\n case \"f\":\n case \"s\":\n setElementFocus(query)\n setElementSelection(query)\n key.claim()\n break\n\n /* Go to previous page */\n case \"p\":\n case \",\":\n const prev = getElement(\"[href][rel=prev]\")\n if (typeof prev !== \"undefined\")\n prev.click()\n break\n\n /* Go to next page */\n case \"n\":\n case \".\":\n const next = getElement(\"[href][rel=next]\")\n if (typeof next !== \"undefined\")\n next.click()\n break\n }\n })\n\n /* Return keyboard */\n return keyboard$\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { identity } from \"ramda\"\nimport { Observable, fromEvent, merge } from \"rxjs\"\nimport {\n filter,\n map,\n switchMapTo,\n tap\n} from \"rxjs/operators\"\n\nimport {\n getElement,\n getElements,\n watchMedia\n} from \"observables\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n document$: Observable /* Document observable */\n hash$: Observable /* Location hash observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch all `details` elements\n *\n * This function will ensure that all `details` tags are opened prior to\n * printing, so the whole content of the page is included, and on anchor jumps.\n *\n * @param options - Options\n */\nexport function patchDetails(\n { document$, hash$ }: PatchOptions\n): void {\n const els$ = document$\n .pipe(\n map(() => getElements(\"details\"))\n )\n\n /* Open all details before printing */\n merge(\n watchMedia(\"print\").pipe(filter(identity)), /* Webkit */\n fromEvent(window, \"beforeprint\") /* IE, FF */\n )\n .pipe(\n switchMapTo(els$)\n )\n .subscribe(els => {\n for (const el of els)\n el.setAttribute(\"open\", \"\")\n })\n\n /* Open parent details and fix anchor jump */\n hash$\n .pipe(\n map(id => getElement(`[id=\"${id}\"]`)!),\n filter(el => typeof el !== \"undefined\"),\n tap(el => {\n const details = el.closest(\"details\")\n if (details && !details.open)\n details.setAttribute(\"open\", \"\")\n })\n )\n .subscribe(el => el.scrollIntoView())\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable } from \"rxjs\"\nimport { map, skip, withLatestFrom } from \"rxjs/operators\"\n\nimport { useComponent } from \"components\"\nimport { getElements } from \"observables\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch all `script` elements\n *\n * This function must be run after a document switch, which means the first\n * emission must be ignored.\n *\n * @param options - Options\n */\nexport function patchScripts(\n { document$ }: PatchOptions\n): void {\n const els$ = document$\n .pipe(\n skip(1),\n withLatestFrom(useComponent(\"container\")),\n map(([, el]) => getElements(\"script\", el))\n )\n\n /* Evaluate all scripts via replacement */\n els$.subscribe(els => {\n for (const el of els) {\n if (el.src || /(^|\\/javascript)$/i.test(el.type)) {\n const script = document.createElement(\"script\")\n const key = el.src ? \"src\" : \"innerText\"\n script[key] = el[key]\n el.replaceWith(script)\n }\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable } from \"rxjs\"\nimport { map } from \"rxjs/operators\"\n\nimport { getElements } from \"observables\"\nimport { renderTable } from \"templates\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch all `table` elements\n *\n * This function will re-render all tables by wrapping them to improve overflow\n * scrolling on smaller screen sizes.\n *\n * @param options - Options\n */\nexport function patchTables(\n { document$ }: MountOptions\n): void {\n const sentinel = document.createElement(\"table\")\n document$\n .pipe(\n map(() => getElements(\"table:not([class])\"))\n )\n .subscribe(els => {\n for (const el of els) {\n el.replaceWith(sentinel)\n sentinel.replaceWith(renderTable(el))\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Subject, animationFrameScheduler, of } from \"rxjs\"\nimport {\n delay,\n map,\n observeOn,\n switchMap,\n tap\n} from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n duration?: number /* Display duration (default: 2s) */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup dialog\n *\n * @param options - Options\n *\n * @return Dialog observable\n */\nexport function setupDialog(\n { duration }: SetupOptions = {}\n): Subject {\n const dialog$ = new Subject()\n\n /* Create dialog */\n const dialog = document.createElement(\"div\") // TODO: improve scoping\n dialog.classList.add(\"md-dialog\", \"md-typeset\")\n\n /* Display dialog */\n dialog$\n .pipe(\n switchMap(text => of(document.body) // useComponent(\"container\")\n .pipe(\n map(container => container.appendChild(dialog)),\n observeOn(animationFrameScheduler),\n delay(1), // Strangley it doesnt work when we push things to the new animation frame...\n tap(el => {\n el.innerHTML = text\n el.setAttribute(\"data-md-state\", \"open\")\n }),\n delay(duration || 2000),\n tap(el => el.removeAttribute(\"data-md-state\")),\n delay(400),\n tap(el => {\n el.innerHTML = \"\"\n el.remove()\n })\n )\n )\n )\n .subscribe()\n\n /* Return dialog subject */\n return dialog$\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport * as ClipboardJS from \"clipboard\"\nimport { NEVER, Observable, Subject, fromEventPattern } from \"rxjs\"\nimport { mapTo, share, tap } from \"rxjs/operators\"\n\nimport { getElements } from \"observables\"\nimport { renderClipboard } from \"templates\"\nimport { translate } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n document$: Observable /* Document observable */\n dialog$: Subject /* Dialog subject */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup clipboard\n *\n * This function implements the Clipboard.js integration and injects a button\n * into all code blocks when the document changes.\n *\n * @param options - Options\n *\n * @return Clipboard observable\n */\nexport function setupClipboard(\n { document$, dialog$ }: SetupOptions\n): Observable {\n if (!ClipboardJS.isSupported())\n return NEVER\n\n /* Inject 'copy-to-clipboard' buttons */\n document$.subscribe(() => {\n const blocks = getElements(\"pre > code\")\n for (const [index, block] of blocks.entries()) {\n const parent = block.parentElement!\n parent.id = `__code_${index}`\n parent.insertBefore(renderClipboard(parent.id), block)\n }\n })\n\n /* Initialize and setup clipboard */\n const clipboard$ = fromEventPattern(next => {\n new ClipboardJS(\".md-clipboard\").on(\"success\", next)\n })\n .pipe(\n share()\n )\n\n /* Display notification for clipboard event */\n clipboard$\n .pipe(\n tap(ev => ev.clearSelection()),\n mapTo(translate(\"clipboard.copied\"))\n )\n .subscribe(dialog$)\n\n /* Return clipboard */\n return clipboard$\n}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/material/assets/javascripts/bundle.9330522f.min.js b/material/assets/javascripts/bundle.9330522f.min.js new file mode 100644 index 000000000..958639cb9 --- /dev/null +++ b/material/assets/javascripts/bundle.9330522f.min.js @@ -0,0 +1,2 @@ +!function(t,e){for(var n in e)t[n]=e[n]}(window,function(t){function e(e){for(var r,o,i=e[0],u=e[1],b=e[2],s=0,l=[];s0}function h(){return new d.a(new URL(location.href))}var m=n(8),y=n(94),g=n(98);function w(){return location.hash.substring(1)}function $(t){var e=document.createElement("a");e.href=t,e.click()}function x(){return Object(c.a)(window,"hashchange").pipe(Object(m.a)(w),Object(y.a)(w()),Object(g.a)((function(t){return t.length>0})),Object(j.a)())}function S(t){return t.location$.pipe(Object(b.a)("pathname"),Object(f.a)(1),Object(s.a)((function(t){return Object(u.a)({url:t.href,responseType:"document",withCredentials:!0}).pipe(Object(l.a)("response"),Object(O.a)((function(){return function(t){location.href=t.href}(t),a.a})))})),Object(j.a)())}function T(t){var e=(void 0===t?{}:t).location$;return Object(r.a)(Object(c.a)(document,"DOMContentLoaded").pipe(Object(o.a)(document)),void 0!==e?S({location$:e}):a.a).pipe(Object(i.a)(1))}function k(t,e){return void 0===e&&(e=document),e.querySelector(t)||void 0}function C(t,e){void 0===e&&(e=document);var n=k(t,e);if(void 0===n)throw new ReferenceError('Missing element: expected "'+t+'" to be present');return n}function _(){return document.activeElement instanceof HTMLElement?document.activeElement:void 0}function L(t,e){return void 0===e&&(e=document),Array.from(e.querySelectorAll(t))}function A(t,e){void 0===e&&(e=!0),e?t.focus():t.blur()}function N(t){var e=Object(c.a)(t,"focus"),n=Object(c.a)(t,"blur");return Object(r.a)(e.pipe(Object(o.a)(!0)),n.pipe(Object(o.a)(!1))).pipe(Object(y.a)(t===_()),Object(i.a)(1))}function E(t){return{x:t.scrollLeft,y:t.scrollTop}}function R(t){return Object(r.a)(Object(c.a)(t,"scroll"),Object(c.a)(window,"resize")).pipe(Object(m.a)((function(){return E(t)})),Object(y.a)(E(t)),Object(i.a)(1))}function M(t){if(!(t instanceof HTMLInputElement))throw new Error("Not implemented");t.select()}function H(t){switch(t.tagName){case"INPUT":case"SELECT":case"TEXTAREA":return!0;default:return t.isContentEditable}}function P(){return Object(c.a)(window,"keydown").pipe(Object(g.a)((function(t){return!(t.metaKey||t.ctrlKey)})),Object(m.a)((function(t){return{type:t.key,claim:function(){t.preventDefault(),t.stopPropagation()}}})),Object(j.a)())}var U=n(104);function q(t){var e=matchMedia(t);return Object(U.a)((function(t){return e.addListener((function(){return t(e.matches)}))})).pipe(Object(y.a)(e.matches),Object(i.a)(1))}var Q={drawer:C("[data-md-toggle=drawer]"),search:C("[data-md-toggle=search]")};function z(t){return Q[t].checked}function I(t,e){Q[t].checked!==e&&Q[t].click()}function D(t){var e=Q[t];return Object(c.a)(e,"change").pipe(Object(m.a)((function(){return e.checked})),Object(y.a)(e.checked))}var W=n(0),J=n(62);function B(){return{x:Math.max(0,pageXOffset),y:Math.max(0,pageYOffset)}}function F(t){var e=t.x,n=t.y;window.scrollTo(e||0,n||0)}function K(){return{width:innerWidth,height:innerHeight}}function Y(){return Object(J.a)([Object(r.a)(Object(c.a)(window,"scroll"),Object(c.a)(window,"resize")).pipe(Object(m.a)(B),Object(y.a)(B())),Object(c.a)(window,"resize").pipe(Object(m.a)(K),Object(y.a)(K()))]).pipe(Object(m.a)((function(t){var e=Object(W.c)(t,2);return{offset:e[0],size:e[1]}})),Object(i.a)(1))}function V(t,e){var n=e.header$,r=e.viewport$,c=r.pipe(Object(b.a)("size"),Object(m.a)((function(){return{x:t.offsetLeft,y:t.offsetTop}})));return Object(J.a)([n,r,c]).pipe(Object(m.a)((function(t){var e=Object(W.c)(t,3),n=e[0].height,r=e[1],c=r.offset,a=r.size,o=e[2],i=o.x,u=o.y;return{offset:{x:c.x-i,y:c.y-u+n},size:a}})),Object(i.a)(1))}var X=n(105),G=n(58),Z=n(106);function tt(t,e){var n=e.tx$,r=Object(U.a)((function(e){return t.addEventListener("message",e)})).pipe(Object(l.a)("data"));return n.pipe(Object(X.a)((function(){return r}),{leading:!0,trailing:!0}),Object(G.a)((function(e){return t.postMessage(e)})),Object(Z.a)(r),Object(j.a)())}n.d(e,"n",(function(){return T})),n.d(e,"b",(function(){return k})),n.d(e,"c",(function(){return C})),n.d(e,"a",(function(){return _})),n.d(e,"d",(function(){return L})),n.d(e,"i",(function(){return A})),n.d(e,"o",(function(){return N})),n.d(e,"p",(function(){return R})),n.d(e,"j",(function(){return M})),n.d(e,"h",(function(){return H})),n.d(e,"q",(function(){return P})),n.d(e,"g",(function(){return p})),n.d(e,"f",(function(){return v})),n.d(e,"r",(function(){return h})),n.d(e,"k",(function(){return $})),n.d(e,"s",(function(){return x})),n.d(e,"t",(function(){return q})),n.d(e,"e",(function(){return z})),n.d(e,"l",(function(){return I})),n.d(e,"u",(function(){return D})),n.d(e,"v",(function(){return Y})),n.d(e,"w",(function(){return V})),n.d(e,"m",(function(){return F})),n.d(e,"x",(function(){return tt}))},,,function(t,e,n){"use strict";function r(t){return"object"==typeof t&&"object"==typeof t.url&&"string"==typeof t.url.base&&"object"==typeof t.url.worker&&"string"==typeof t.url.worker.search}var c=n(0),a=n(83);function o(t,e,n){switch(e){case"xmlns":break;case"viewBox":case"d":"boolean"!=typeof n?t.setAttributeNS(null,e,n):n&&t.setAttributeNS(null,e,"");break;default:"boolean"!=typeof n?t.setAttribute(e,n):n&&t.setAttribute(e,"")}}function i(t,e){var n,r;if("string"==typeof e||"number"==typeof e)t.innerHTML+=e.toString();else if(e instanceof Node)t.appendChild(e);else if(Array.isArray(e))try{for(var a=Object(c.f)(e),o=a.next();!o.done;o=a.next()){i(t,o.value)}}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=a.return)&&r.call(a)}finally{if(n)throw n.error}}}function u(t,e){for(var n,r,u,b,f=[],s=2;sn){for(;" "!==t[n]&&--n>0;);return t.substring(0,n)+"..."}return t}function p(t){return t>999?((t+1)/1e3).toFixed(+((t-950)%1e3>99))+"k":t.toString()}function v(t){for(var e=0,n=0,r=t.length;n=e[2].offset+c})),Object(b.a)());return Object(c.a)([s,l]).pipe(Object(u.a)((function(t){var e=Object(r.c)(t,2);return{height:e[0],lock:e[1]}})))}function p(t,e){var n=e.header$;return Object(a.a)(Object(s.b)(o.a),Object(f.a)(n),Object(l.a)((function(e){var n=Object(r.c)(e,2),c=n[0],a=c.height,o=c.lock,i=n[1].height;Object(j.d)(t,a),Object(j.e)(t,o),o?Object(j.f)(t,i):Object(j.c)(t)})),Object(u.a)((function(t){return Object(r.c)(t,1)[0]})),Object(O.a)((function(){Object(j.c)(t),Object(j.a)(t),Object(j.b)(t)})))}},function(t,e){},function(t,e,n){"use strict";n.d(e,"b",(function(){return v})),n.d(e,"a",(function(){return h}));var r=n(0),c=n(92),a=n(90),o=n(89),i=n(35),u=n(59),b=n(8),f=n(64),s=n(46),l=n(58),O=n(95),j=n(65),d=n(1),p=n(39);function v(t){var e,n,i=new Map;try{for(var u=Object(r.f)(t),s=u.next();!s.done;s=u.next()){var l=s.value,O=Object(d.b)("label",l);if(void 0!==O){var j=Object(d.c)("#"+O.htmlFor);i.set(j,l)}}}catch(t){e={error:t}}finally{try{s&&!s.done&&(n=u.return)&&n.call(u)}finally{if(e)throw e.error}}return a.a.apply(void 0,Object(r.e)(Object(r.e)(i.keys()).map((function(t){return Object(o.a)(t,"change")})))).pipe(Object(b.a)((function(){return Object(d.c)(".md-nav__list",i.get(Object(c.a)((function(t){return t.checked}),Object(r.e)(i.keys()))))}))).pipe(Object(b.a)((function(t){return{next:t}})),Object(f.a)((function(t,e){return{prev:t.next,next:e.next}})))}function h(t){return Object(i.a)(Object(s.b)(u.a),Object(l.a)((function(t){var e=t.prev;e&&Object(p.a)(e)})),Object(O.a)(250),Object(s.b)(u.a),Object(l.a)((function(t){var e=t.next;Object(p.b)(e)})),Object(j.a)((function(){var e,n;try{for(var c=Object(r.f)(t),a=c.next();!a.done;a=c.next()){var o=a.value;Object(p.a)(Object(d.c)(".md-nav__list",o))}}catch(t){e={error:t}}finally{try{a&&!a.done&&(n=c.return)&&n.call(c)}finally{if(e)throw e.error}}})))}},function(t,e,n){"use strict";var r=n(74);n.d(e,"mountTableOfContents",(function(){return r.a}));var c=n(49);n.o(c,"mountNavigation")&&n.d(e,"mountNavigation",(function(){return c.mountNavigation}))},function(t,e,n){"use strict";n.d(e,"a",(function(){return l}));var r=n(0),c=n(35),a=n(62),o=n(45),i=n(24),u=n(8),b=n(1),f=n(30),s=n(49);function l(t){var e=t.header$,n=t.main$,l=t.viewport$,O=t.tablet$;return Object(c.a)(Object(i.a)((function(t){return O.pipe(Object(i.a)((function(c){if(c){var i=Object(b.d)(".md-nav__link",t),O=Object(f.watchSidebar)(t,{main$:n,viewport$:l}).pipe(Object(f.applySidebar)(t,{header$:e})),j=Object(s.watchAnchorList)(i,{header$:e,viewport$:l}).pipe(Object(s.applyAnchorList)(i));return Object(a.a)([O,j]).pipe(Object(u.a)((function(t){var e=Object(r.c)(t,2);return{sidebar:e[0],anchors:e[1]}})))}return Object(o.a)({})})))})))}},function(t,e){},function(t,e,n){"use strict";n.d(e,"b",(function(){return y})),n.d(e,"a",(function(){return g}));var r=n(0),c=n(96),a=n(62),o=n(35),i=n(59),u=n(8),b=n(84),f=n(24),s=n(64),l=n(36),O=n(94),j=n(91),d=n(46),p=n(58),v=n(65),h=n(1),m=n(23);function y(t,e){var n,o,i=e.header$,d=e.viewport$,p=new Map;try{for(var v=Object(r.f)(t),m=v.next();!m.done;m=v.next()){var y=m.value,g=decodeURIComponent(y.hash.substring(1)),w=Object(h.b)('[id="'+g+'"]');void 0!==w&&p.set(y,w)}}catch(t){n={error:t}}finally{try{m&&!m.done&&(o=v.return)&&o.call(v)}finally{if(n)throw n.error}}var $=i.pipe(Object(u.a)((function(t){return 18+t.height})));return d.pipe(Object(b.a)("size"),Object(u.a)((function(){var t=[];return Object(r.e)(p).reduce((function(e,n){for(var a=Object(r.c)(n,2),o=a[0],i=a[1];t.length;){if(!(p.get(t[t.length-1]).tagName>=i.tagName))break;t.pop()}for(var u=i.offsetTop;!u&&i.parentElement;)u=(i=i.parentElement).offsetTop;return e.set(Object(c.a)(t=Object(r.e)(t,[o])),u)}),new Map)})),Object(f.a)((function(t){return Object(a.a)([$,d]).pipe(Object(s.a)((function(t,e){for(var n=Object(r.c)(t,2),c=n[0],a=n[1],o=Object(r.c)(e,2),i=o[0],u=o[1].offset.y;a.length;){if(!(Object(r.c)(a[0],2)[1]-i=u))break;a=Object(r.e)([c.pop()],a)}return[c,a]}),[[],Object(r.e)(t)]),Object(l.a)((function(t,e){return t[0]===e[0]&&t[1]===e[1]})))}))).pipe(Object(u.a)((function(t){var e=Object(r.c)(t,2),n=e[0],c=e[1];return{prev:n.map((function(t){return Object(r.c)(t,1)[0]})),next:c.map((function(t){return Object(r.c)(t,1)[0]}))}})),Object(O.a)({prev:[],next:[]}),Object(j.a)(2,1),Object(u.a)((function(t){var e=Object(r.c)(t,2),n=e[0],c=e[1];return n.prev.length16)););return n}),0),Object(g.a)(e),Object(A.a)((function(){!function(t){t.innerHTML=""}(u)})))})))}function H(t,e){var n=t.rx$,r=e.query$;return Object(c.a)(Object(o.a)((function(t){var e=t.parentElement,c=Object(f.p)(e).pipe(Object(i.a)((function(t){return t.y>=e.scrollHeight-e.offsetHeight-16})),Object(p.a)(),Object(S.a)(x.a));return n.pipe(Object(S.a)(s.b),Object(T.a)("data"),M(t,{query$:r,fetch$:c}))})))}n.d(e,"a",(function(){return u})),n.d(e,"b",(function(){return h})),n.d(e,"c",(function(){return $})),n.d(e,"d",(function(){return H}))},function(t,e,n){"use strict";var r=n(0),c=n(35),a=n(62),o=n(24),i=n(8),u=n(98),b=n(63),f=n(36),s=n(94),l=n(93),O=n(1),j=n(21),d=n(45),p=n(59),v=n(84),h=n(46),m=n(58),y=n(65);function g(t){var e=t.viewport$;return Object(c.a)(Object(o.a)((function(t){var n=function(t,e){return e.viewport$.pipe(Object(v.a)("size"),Object(o.a)((function(){var e=getComputedStyle(t),n=["sticky","-webkit-sticky"].includes(e.position);return Object(d.a)({sticky:n,height:n?t.offsetHeight:0})})))}(t,{viewport$:e}),g=Object(j.b)("main").pipe(Object(i.a)((function(t){return Object(O.b)("h1, h2, h3, h4, h5, h6",t)})),Object(u.a)((function(t){return void 0!==t})),Object(b.a)(Object(j.b)("header-title")),Object(o.a)((function(t){var a=Object(r.c)(t,2),o=a[0],u=a[1];return Object(O.w)(o,{header$:n,viewport$:e}).pipe(Object(i.a)((function(t){return t.offset.y>=o.offsetHeight?"page":"site"})),Object(f.a)(),function(t){return Object(c.a)(Object(h.b)(p.a),Object(m.a)((function(e){!function(t,e){t.setAttribute("data-md-state",e?"active":"")}(t,"page"===e)})),Object(y.a)((function(){!function(t){t.removeAttribute("data-md-state")}(t)})))}(u))})),Object(s.a)("site"));return Object(a.a)([n,g]).pipe(Object(i.a)((function(t){var e=Object(r.c)(t,2),n=e[0],c=e[1];return Object(r.a)({type:c},n)})),Object(l.a)(1))})))}n.d(e,"a",(function(){return g}))},function(t,e,n){"use strict";var r=n(35),c=n(24),a=n(8),o=n(36),i=n(1),u=n(59),b=n(46),f=n(58),s=n(65);function l(t){var e=t.header$,n=t.viewport$;return Object(r.a)(Object(c.a)((function(t){return Object(i.w)(t,{header$:e,viewport$:n}).pipe(Object(a.a)((function(t){return{hidden:t.offset.y>=20}})),Object(o.a)(),function(t){return Object(r.a)(Object(b.b)(u.a),Object(f.a)((function(e){var n=e.hidden;!function(t,e){t.setAttribute("data-md-state",e?"hidden":"")}(t,n)})),Object(s.a)((function(){!function(t){t.removeAttribute("data-md-state")}(t)})))}(t))})))}n.d(e,"a",(function(){return l}))},function(t,e,n){"use strict";var r=n(25),c=n(35),a=n(24),o=n(84),i=n(58),u=n(21),b=n(0),f=n(62),s=n(59),l=n(100),O=n(8),j=n(36),d=n(46),p=n(65);function v(t){var e=t.header$,n=t.viewport$,v=new r.a;return Object(u.b)("header").pipe(Object(a.a)((function(t){return v.pipe(Object(o.a)("active"),(e=t,Object(c.a)(Object(d.b)(s.a),Object(i.a)((function(t){var n=t.active;!function(t,e){t.setAttribute("data-md-state",e?"shadow":"")}(e,n)})),Object(p.a)((function(){!function(t){t.removeAttribute("data-md-state")}(e)})))));var e}))).subscribe(),Object(c.a)(Object(a.a)((function(t){return function(t,e){var n=e.header$,r=e.viewport$,c=n.pipe(Object(l.a)("height")),a=Object(f.a)([c,r]).pipe(Object(O.a)((function(e){var n=Object(b.c)(e,2),r=n[0],c=n[1],a=c.offset.y,o=c.size.height,i=t.offsetTop,u=t.offsetHeight+i;return o-Math.max(0,i-a,r)-Math.max(0,o+a-u)})),Object(O.a)((function(t){return Math.max(0,t)})),Object(j.a)()),o=Object(f.a)([c,r]).pipe(Object(O.a)((function(e){var n=Object(b.c)(e,2),r=n[0];return n[1].offset.y>=t.offsetTop-r})),Object(j.a)());return Object(f.a)([c,a,o]).pipe(Object(O.a)((function(e){var n=Object(b.c)(e,3),r=n[0],c=n[1],a=n[2];return{offset:t.offsetTop-r,height:c,active:a}})))}(t,{header$:e,viewport$:n})})),Object(i.a)((function(t){return v.next(t)})))}n.d(e,"a",(function(){return v}))},function(t,e,n){"use strict";var r=n(35),c=n(45),a=n(24),o=n(8),i=n(36),u=n(1),b=n(59),f=n(46),s=n(58),l=n(65);function O(t){var e=t.header$,n=t.viewport$,O=t.screen$;return Object(r.a)(Object(a.a)((function(t){return O.pipe(Object(a.a)((function(a){return a?Object(u.w)(t,{header$:e,viewport$:n}).pipe(Object(o.a)((function(t){return{hidden:t.offset.y>=10}})),Object(i.a)(),function(t){return Object(r.a)(Object(f.b)(b.a),Object(s.a)((function(e){var n=e.hidden;!function(t,e){t.setAttribute("data-md-state",e?"hidden":"")}(t,n)})),Object(l.a)((function(){!function(t){t.removeAttribute("data-md-state")}(t)})))}(t)):Object(c.a)({hidden:!0})})))})))}n.d(e,"a",(function(){return O}))},,,,,,,function(t,e,n){"use strict";n.r(e);var r=n(0),c=n(110),a=n(62),o=n(59),i=n(89),u=n(45),b=n(102),f=n(90),s=n(93),l=n(63),O=n(24),j=n(95),d=n(46),p=n(58),v=n(98),h=n(111),m=n(112),y=n(1),g=n(41),w=n(7),$=n(61),x=n(104),S=n(103),T=n(31),k=n(4);var C=n(25),_=n(8);var L=n(36),A=n(100),N=n(107),E=n(84),R=n(91),M=n(108);var H=n(113),P=n(106);var U=n(99);var q=n(109);function Q(){return/(iPad|iPhone|iPod)/.test(navigator.userAgent)}var z=n(101),I=n(114);function D(t){switch(Object(r.c)(t.match(/(git(?:hub|lab))/i)||[],1)[0].toLowerCase()){case"github":var e=Object(r.c)(t.match(/^.+github\.com\/([^\/]+)\/?([^\/]+)/i),3);return function(t,e){return Object(I.a)({url:void 0!==e?"https://api.github.com/repos/"+t+"/"+e:"https://api.github.com/users/"+t,responseType:"json"}).pipe(Object(v.a)((function(t){return 200===t.status})),Object(A.a)("response"),Object(O.a)((function(t){if(void 0!==e){var n=t.stargazers_count,r=t.forks_count;return Object(u.a)([Object(k.e)(n||0)+" Stars",Object(k.e)(r||0)+" Forks"])}var c=t.public_repos;return Object(u.a)([Object(k.e)(c||0)+" Repositories"])})))}(e[1],e[2]);case"gitlab":var n=Object(r.c)(t.match(/^.+?([^\/]*gitlab[^\/]+)\/(.+)/i),3);return function(t,e){return Object(I.a)({url:"https://"+t+"/api/v4/projects/"+encodeURIComponent(e),responseType:"json"}).pipe(Object(v.a)((function(t){return 200===t.status})),Object(A.a)("response"),Object(_.a)((function(t){var e=t.star_count,n=t.forks_count;return[Object(k.e)(e)+" Stars",Object(k.e)(n)+" Forks"]})))}(n[1],n[2]);default:return b.a}}function W(t,e){t.setAttribute("data-md-state","lock"),t.style.top="-"+e+"px"}function J(t){var e=-1*parseInt(t.style.top,10);t.removeAttribute("data-md-state"),t.style.top="",e&&window.scrollTo(0,e)}function B(t){var e,n,I,B;if(!Object(k.d)(t))throw new SyntaxError("Invalid configuration: "+JSON.stringify(t));var F=Object(y.r)(),K=Object(y.s)(),Y=Object(y.v)(),V=Object(y.t)("(min-width: 960px)"),X=Object(y.t)("(min-width: 1220px)"),G=t.features.includes("instant")?Object(y.n)({location$:F}):Object(y.n)();Object(w.setupComponents)(["container","header","header-title","hero","main","navigation","search","search-query","search-reset","search-result","skip","tabs","toc"],{document$:G});var Z=t.search&&t.search.index?t.search.index:void 0,tt=Object(g.c)(t.url.worker.search,{base:t.url.base,index:Z,location$:F}),et=Object(w.useComponent)("header").pipe(Object(w.mountHeader)({viewport$:Y}),Object(s.a)(1)),nt=Object(w.useComponent)("main").pipe(Object(w.mountMain)({header$:et,viewport$:Y}),Object(s.a)(1)),rt=Object(w.useComponent)("search-query").pipe(Object(w.mountSearchQuery)(tt),Object(s.a)(1)),ct=Object(w.useComponent)("search-reset").pipe(Object(w.mountSearchReset)(),Object(s.a)(1)),at=Object(w.useComponent)("search-result").pipe(Object(w.mountSearchResult)(tt,{query$:rt}),Object(s.a)(1)),ot=Object(w.useComponent)("search").pipe(Object(w.mountSearch)({query$:rt,reset$:ct,result$:at}),Object(s.a)(1)),it=Object(w.useComponent)("navigation").pipe(Object(w.mountNavigation)({header$:et,main$:nt,viewport$:Y,screen$:X}),Object(s.a)(1)),ut=Object(w.useComponent)("toc").pipe(Object(w.mountTableOfContents)({header$:et,main$:nt,viewport$:Y,tablet$:V}),Object(s.a)(1)),bt=Object(w.useComponent)("tabs").pipe(Object(w.mountTabs)({header$:et,viewport$:Y,screen$:X}),Object(s.a)(1)),ft=Object(w.useComponent)("hero").pipe(Object(w.mountHero)({header$:et,viewport$:Y}),Object(s.a)(1)),st=function(){var t=Object(y.q)().pipe(Object(_.a)((function(t){return Object(r.a)({mode:Object(y.e)("search")?"search":"global"},t)})),Object(h.a)());return t.pipe(Object(v.a)((function(t){return"search"===t.mode})),Object(l.a)(Object(w.useComponent)("search-query"),Object(w.useComponent)("search-result"))).subscribe((function(t){var e=Object(r.c)(t,3),n=e[0],c=e[1],a=e[2],o=Object(y.a)();switch(n.type){case"Enter":o===c&&n.claim();break;case"Escape":case"Tab":Object(y.l)("search",!1),Object(y.i)(c,!1);break;case"ArrowUp":case"ArrowDown":if(void 0===o)Object(y.i)(c);else{var i=Object(r.e)([c],Object(y.d)("[href]",a)),u=Math.max(0,(Math.max(0,i.indexOf(o))+i.length+("ArrowUp"===n.type?-1:1))%i.length);Object(y.i)(i[u])}n.claim();break;default:c!==Object(y.a)()&&Object(y.i)(c)}})),t.pipe(Object(v.a)((function(t){if("global"===t.mode){var e=Object(y.a)();if(void 0!==e)return!Object(y.h)(e)}return!1})),Object(l.a)(Object(w.useComponent)("search-query"))).subscribe((function(t){var e=Object(r.c)(t,2),n=e[0],c=e[1];switch(n.type){case"f":case"s":Object(y.i)(c),Object(y.j)(c),n.claim();break;case"p":case",":var a=Object(y.b)("[href][rel=prev]");void 0!==a&&a.click();break;case"n":case".":var o=Object(y.b)("[href][rel=next]");void 0!==o&&o.click()}})),t}();!function(t){var e=t.document$,n=t.hash$,c=e.pipe(Object(_.a)((function(){return Object(y.d)("details")})));Object(f.a)(Object(y.t)("print").pipe(Object(v.a)(H.a)),Object(i.a)(window,"beforeprint")).pipe(Object(P.a)(c)).subscribe((function(t){var e,n;try{for(var c=Object(r.f)(t),a=c.next();!a.done;a=c.next()){a.value.setAttribute("open","")}}catch(t){e={error:t}}finally{try{a&&!a.done&&(n=c.return)&&n.call(c)}finally{if(e)throw e.error}}})),n.pipe(Object(_.a)((function(t){return Object(y.b)('[id="'+t+'"]')})),Object(v.a)((function(t){return void 0!==t})),Object(p.a)((function(t){var e=t.closest("details");e&&!e.open&&e.setAttribute("open","")}))).subscribe((function(t){return t.scrollIntoView()}))}({document$:G,hash$:K}),function(t){t.document$.pipe(Object(U.a)(1),Object(l.a)(Object(w.useComponent)("container")),Object(_.a)((function(t){var e=Object(r.c)(t,2)[1];return Object(y.d)("script",e)}))).subscribe((function(t){var e,n;try{for(var c=Object(r.f)(t),a=c.next();!a.done;a=c.next()){var o=a.value;if(o.src||/(^|\/javascript)$/i.test(o.type)){var i=document.createElement("script"),u=o.src?"src":"innerText";i[u]=o[u],o.replaceWith(i)}}}catch(t){e={error:t}}finally{try{a&&!a.done&&(n=c.return)&&n.call(c)}finally{if(e)throw e.error}}}))}({document$:G}),function(t){t.document$.pipe(Object(_.a)((function(){return Object(y.c)(".md-source[href]")})),Object(O.a)((function(t){var e=t.href;return Object(k.a)(""+Object(k.c)(e),(function(){return D(e)}))})),Object(z.a)((function(){return b.a}))).subscribe((function(t){var e,n;try{for(var c=Object(r.f)(Object(y.d)(".md-source__repository")),a=c.next();!a.done;a=c.next()){var o=a.value;o.hasAttribute("data-md-state")||(o.setAttribute("data-md-state","done"),o.appendChild(Object(T.c)(t)))}}catch(t){e={error:t}}finally{try{a&&!a.done&&(n=c.return)&&n.call(c)}finally{if(e)throw e.error}}}))}({document$:G}),function(t){var e=t.document$,n=document.createElement("table");e.pipe(Object(_.a)((function(){return Object(y.d)("table:not([class])")}))).subscribe((function(t){var e,c;try{for(var a=Object(r.f)(t),o=a.next();!o.done;o=a.next()){var i=o.value;i.replaceWith(n),n.replaceWith(Object(T.d)(i))}}catch(t){e={error:t}}finally{try{o&&!o.done&&(c=a.return)&&c.call(a)}finally{if(e)throw e.error}}}))}({document$:G}),function(t){var e=t.document$.pipe(Object(_.a)((function(){return Object(y.d)("[data-md-scrollfix]")})),Object(s.a)(1));e.subscribe((function(t){var e,n;try{for(var c=Object(r.f)(t),a=c.next();!a.done;a=c.next()){a.value.removeAttribute("data-md-scrollfix")}}catch(t){e={error:t}}finally{try{a&&!a.done&&(n=c.return)&&n.call(c)}finally{if(e)throw e.error}}})),Object(q.a)(Q,e,b.a).pipe(Object(O.a)((function(t){return f.a.apply(void 0,Object(r.e)(t.map((function(t){return Object(i.a)(t,"touchstart").pipe(Object(S.a)(t))}))))}))).subscribe((function(t){var e=t.scrollTop;0===e?t.scrollTop=1:e+t.offsetHeight===t.scrollHeight&&(t.scrollTop=e-1)}))}({document$:G});var lt=function(t){var e=(void 0===t?{}:t).duration,n=new C.a,r=document.createElement("div");return r.classList.add("md-dialog","md-typeset"),n.pipe(Object(O.a)((function(t){return Object(u.a)(document.body).pipe(Object(_.a)((function(t){return t.appendChild(r)})),Object(d.b)(o.a),Object(j.a)(1),Object(p.a)((function(e){e.innerHTML=t,e.setAttribute("data-md-state","open")})),Object(j.a)(e||2e3),Object(p.a)((function(t){return t.removeAttribute("data-md-state")})),Object(j.a)(400),Object(p.a)((function(t){t.innerHTML="",t.remove()})))}))).subscribe(),n}(),Ot=function(t){var e=t.document$,n=t.dialog$;if(!$.isSupported())return b.a;e.subscribe((function(){Object(y.d)("pre > code").forEach((function(t,e){var n=t.parentElement;n.id="__code_"+e,n.insertBefore(Object(T.a)(n.id),t)}))}));var r=Object(x.a)((function(t){new $(".md-clipboard").on("success",t)})).pipe(Object(h.a)());return r.pipe(Object(p.a)((function(t){return t.clearSelection()})),Object(S.a)(Object(k.f)("clipboard.copied"))).subscribe(n),r}({document$:G,dialog$:lt});Object(a.a)([Object(y.u)("search"),V]).pipe(Object(l.a)(Y),Object(O.a)((function(t){var e=Object(r.c)(t,2),n=Object(r.c)(e[0],2),c=n[0],a=n[1],i=e[1].offset.y,u=c&&!a;return G.pipe(Object(j.a)(u?400:100),Object(d.b)(o.a),Object(p.a)((function(t){var e=t.body;return u?W(e,i):J(e)})))}))).subscribe();var jt=Object(i.a)(document.body,"click").pipe(Object(v.a)((function(t){return!(t.metaKey||t.ctrlKey)})),Object(O.a)((function(t){if(t.target instanceof HTMLElement){var e=t.target.closest("a");if(e&&Object(y.g)(e))return Object(y.f)(e)||t.preventDefault(),Object(u.a)(e)}return b.a})),Object(h.a)());if(jt.subscribe((function(){Object(y.l)("drawer",!1)})),t.features.includes("instant")){"scrollRestoration"in history&&(history.scrollRestoration="manual");try{for(var dt=Object(r.f)(['link[rel="shortcut icon"]','link[rel="stylesheet"]']),pt=dt.next();!pt.done;pt=dt.next()){var vt=pt.value;try{for(var ht=(I=void 0,Object(r.f)(Object(y.d)(vt))),mt=ht.next();!mt.done;mt=ht.next()){var yt=mt.value;yt.href=yt.href}}catch(t){I={error:t}}finally{try{mt&&!mt.done&&(B=ht.return)&&B.call(ht)}finally{if(I)throw I.error}}}}catch(t){e={error:t}}finally{try{pt&&!pt.done&&(n=dt.return)&&n.call(dt)}finally{if(e)throw e.error}}!function(t){var e=t.document$,n=t.viewport$,c=t.link$,a=t.location$,o=c.pipe(Object(_.a)((function(t){return{url:new URL(t.href)}})),Object(h.a)()),u=o.pipe(Object(L.a)((function(t,e){return t.url.href===e.url.href})),Object(v.a)((function(t){var e=t.url;return!Object(y.f)(e)})),Object(h.a)()),b=Object(i.a)(window,"popstate").pipe(Object(v.a)((function(t){return null!==t.state})),Object(_.a)((function(t){return{url:new URL(location.href),offset:t.state}})),Object(h.a)());Object(f.a)(u,b).pipe(Object(A.a)("url")).subscribe(a),u.subscribe((function(t){var e=t.url;history.pushState({},"",e.toString())})),n.pipe(Object(N.a)(250),Object(E.a)("offset")).subscribe((function(t){var e=t.offset;history.replaceState(e,"")})),Object(f.a)(o,b).pipe(Object(R.a)(2,1),Object(v.a)((function(t){var e=Object(r.c)(t,2),n=e[0],c=e[1];return n.url.pathname===c.url.pathname&&!Object(y.f)(c.url)})),Object(_.a)((function(t){return Object(r.c)(t,2)[1]}))).subscribe((function(t){var e=t.offset;Object(y.m)(e||{y:0})}));var s=Object(f.a)(u,b).pipe(Object(M.a)(e));s.subscribe((function(t){var e=t.url,n=t.offset;e.hash&&!n?(console.log("set hash!"),Object(y.k)(e.hash)):Object(y.m)(n||{y:0})})),s.pipe(Object(l.a)(e)).subscribe((function(t){var e,n,c=Object(r.c)(t,2)[1],a=c.title,o=c.head;document.dispatchEvent(new CustomEvent("DOMContentSwitch")),document.title=a;try{for(var i=Object(r.f)(['link[rel="canonical"]','meta[name="author"]','meta[name="description"]']),u=i.next();!u.done;u=i.next()){var b=u.value,f=Object(y.b)(b,o),s=Object(y.b)(b,document.head);void 0!==f&&void 0!==s&&s.replaceWith(f)}}catch(t){e={error:t}}finally{try{u&&!u.done&&(n=i.return)&&n.call(i)}finally{if(e)throw e.error}}}))}({document$:G,link$:jt,location$:F,viewport$:Y})}st.pipe(Object(v.a)((function(t){return"global"===t.mode&&["Tab"].includes(t.type)})),Object(m.a)(1)).subscribe((function(){var t,e;try{for(var n=Object(r.f)(Object(y.d)(".headerlink")),c=n.next();!c.done;c=n.next()){c.value.style.visibility="visible"}}catch(e){t={error:e}}finally{try{c&&!c.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}}));var gt={document$:G,viewport$:Y,header$:et,hero$:ft,main$:nt,navigation$:it,search$:ot,tabs$:bt,toc$:ut,clipboard$:Ot,keyboard$:st,dialog$:lt};return f.a.apply(void 0,Object(r.e)(Object(c.a)(gt))).subscribe(),gt}n.d(e,"setScrollLock",(function(){return W})),n.d(e,"resetScrollLock",(function(){return J})),n.d(e,"initialize",(function(){return B})),document.documentElement.classList.remove("no-js"),document.documentElement.classList.add("js"),navigator.userAgent.match(/(iPad|iPhone|iPod)/g)&&document.documentElement.classList.add("ios")}])); +//# sourceMappingURL=bundle.9330522f.min.js.map \ No newline at end of file diff --git a/material/assets/javascripts/bundle.9330522f.min.js.map b/material/assets/javascripts/bundle.9330522f.min.js.map new file mode 100644 index 000000000..0473223c3 --- /dev/null +++ b/material/assets/javascripts/bundle.9330522f.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/assets/javascripts/browser/location/_/index.ts","webpack:///./src/assets/javascripts/browser/location/hash/index.ts","webpack:///./src/assets/javascripts/browser/document/switch/index.ts","webpack:///./src/assets/javascripts/browser/document/_/index.ts","webpack:///./src/assets/javascripts/browser/element/_/index.ts","webpack:///./src/assets/javascripts/browser/element/focus/index.ts","webpack:///./src/assets/javascripts/browser/element/offset/index.ts","webpack:///./src/assets/javascripts/browser/element/select/index.ts","webpack:///./src/assets/javascripts/browser/keyboard/index.ts","webpack:///./src/assets/javascripts/browser/media/index.ts","webpack:///./src/assets/javascripts/browser/toggle/index.ts","webpack:///./src/assets/javascripts/browser/viewport/offset/index.ts","webpack:///./src/assets/javascripts/browser/viewport/size/index.ts","webpack:///./src/assets/javascripts/browser/viewport/_/index.ts","webpack:///./src/assets/javascripts/browser/worker/index.ts","webpack:///./src/assets/javascripts/browser/index.ts","webpack:///./src/assets/javascripts/utilities/config/index.ts","webpack:///./src/assets/javascripts/utilities/jsx/index.ts","webpack:///./src/assets/javascripts/utilities/rxjs/index.ts","webpack:///./src/assets/javascripts/utilities/string/index.ts","webpack:///./src/assets/javascripts/utilities/index.ts","webpack:///./src/assets/javascripts/components/index.ts","webpack:///./src/assets/javascripts/components/shared/sidebar/set/index.ts","webpack:///./src/assets/javascripts/components/_/index.ts","webpack:///./src/assets/javascripts/components/toc/anchor/set/index.ts","webpack:///./src/assets/javascripts/components/shared/index.ts","webpack:///./src/assets/javascripts/templates/clipboard/index.tsx","webpack:///./src/assets/javascripts/templates/search/index.tsx","webpack:///./src/assets/javascripts/templates/source/index.tsx","webpack:///./src/assets/javascripts/templates/table/index.tsx","webpack:///./src/assets/javascripts/templates/index.ts","webpack:///./src/assets/javascripts/components/navigation/layer/set/index.ts","webpack:///./src/assets/javascripts/workers/search/message/index.ts","webpack:///./src/assets/javascripts/workers/search/_/index.ts","webpack:///./src/assets/javascripts/workers/index.ts","webpack:///./src/assets/javascripts/components/navigation/layer/index.ts","webpack:///./src/assets/javascripts/components/toc/anchor/index.ts","webpack:///./src/assets/javascripts/components/navigation/index.ts","webpack:///./src/assets/javascripts/components/navigation/_/index.ts","webpack:///./src/assets/javascripts/components/shared/sidebar/index.ts","webpack:///./src/assets/javascripts/components/shared/sidebar/react/index.ts","webpack:///./src/assets/javascripts/components/navigation/layer/react/index.ts","webpack:///./src/assets/javascripts/components/toc/index.ts","webpack:///./src/assets/javascripts/components/toc/_/index.ts","webpack:///./src/assets/javascripts/components/toc/anchor/react/index.ts","webpack:///./src/assets/javascripts/components/search/_/index.ts","webpack:///./src/assets/javascripts/components/search/query/react/index.ts","webpack:///./src/assets/javascripts/components/search/query/_/index.ts","webpack:///./src/assets/javascripts/components/search/reset/_/index.ts","webpack:///./src/assets/javascripts/components/search/reset/react/index.ts","webpack:///./src/assets/javascripts/components/search/result/set/index.ts","webpack:///./src/assets/javascripts/components/search/result/react/index.ts","webpack:///./src/assets/javascripts/components/search/result/_/index.ts","webpack:///./src/assets/javascripts/components/search/index.ts","webpack:///./src/assets/javascripts/components/header/_/index.ts","webpack:///./src/assets/javascripts/components/header/react/index.ts","webpack:///./src/assets/javascripts/components/header/set/index.ts","webpack:///./src/assets/javascripts/components/header/index.ts","webpack:///./src/assets/javascripts/components/hero/_/index.ts","webpack:///./src/assets/javascripts/components/hero/react/index.ts","webpack:///./src/assets/javascripts/components/hero/set/index.ts","webpack:///./src/assets/javascripts/components/hero/index.ts","webpack:///./src/assets/javascripts/components/main/_/index.ts","webpack:///./src/assets/javascripts/components/main/react/index.ts","webpack:///./src/assets/javascripts/components/main/set/index.ts","webpack:///./src/assets/javascripts/components/main/index.ts","webpack:///./src/assets/javascripts/components/tabs/_/index.ts","webpack:///./src/assets/javascripts/components/tabs/react/index.ts","webpack:///./src/assets/javascripts/components/tabs/set/index.ts","webpack:///./src/assets/javascripts/components/tabs/index.ts","webpack:///./src/assets/javascripts/patches/scrollfix/index.ts","webpack:///./src/assets/javascripts/patches/source/index.ts","webpack:///./src/assets/javascripts/patches/source/github/index.ts","webpack:///./src/assets/javascripts/patches/source/gitlab/index.ts","webpack:///./src/assets/javascripts/index.ts","webpack:///./src/assets/javascripts/integrations/keyboard/index.ts","webpack:///./src/assets/javascripts/patches/details/index.ts","webpack:///./src/assets/javascripts/patches/script/index.ts","webpack:///./src/assets/javascripts/patches/table/index.ts","webpack:///./src/assets/javascripts/integrations/dialog/index.ts","webpack:///./src/assets/javascripts/integrations/clipboard/index.ts","webpack:///./src/assets/javascripts/integrations/instant/index.ts"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","0","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","isLocationInternal","url","ref","host","test","pathname","isLocationAnchor","hash","watchLocation","BehaviorSubject","URL","location","href","getLocationHash","substring","setLocationHash","el","document","createElement","click","watchLocationHash","fromEvent","pipe","map","startWith","filter","share","watchDocumentSwitch","location$","distinctUntilKeyChanged","skip","switchMap","ajax","responseType","withCredentials","pluck","catchError","setLocation","watchDocument","merge","mapTo","shareReplay","getElement","selector","node","querySelector","undefined","getElementOrThrow","ReferenceError","getActiveElement","activeElement","HTMLElement","getElements","Array","from","querySelectorAll","setElementFocus","focus","blur","watchElementFocus","focus$","blur$","getElementOffset","x","scrollLeft","y","scrollTop","watchElementOffset","setElementSelection","HTMLInputElement","Error","select","isSusceptibleToKeyboard","tagName","isContentEditable","watchKeyboard","ev","metaKey","ctrlKey","type","claim","preventDefault","stopPropagation","watchMedia","query","media","matchMedia","fromEventPattern","next","addListener","matches","toggles","drawer","search","getToggle","checked","setToggle","watchToggle","getViewportOffset","Math","max","pageXOffset","pageYOffset","setViewportOffset","scrollTo","getViewportSize","width","innerWidth","height","innerHeight","watchViewport","combineLatest","offset","size","watchViewportAt","header$","viewport$","offset$","offsetLeft","offsetTop","watchWorker","worker","tx$","rx$","addEventListener","throttle","leading","trailing","tap","message","postMessage","switchMapTo","isConfig","config","base","setAttribute","setAttributeNS","appendChild","child","innerHTML","toString","Node","isArray","h","tag","attributes","createElementNS","keys","attr","children","cache","factory","defer","sessionStorage","getItem","of","JSON","parse","value$","subscribe","setItem","stringify","err","lang","translate","innerText","replace","truncate","round","toFixed","len","charCodeAt","setSidebarOffset","style","top","resetSidebarOffset","setSidebarHeight","resetSidebarHeight","setSidebarLock","resetSidebarLock","removeAttribute","components$","setupComponents","names","document$","reduce","components","prev","replaceWith","useComponent","setAnchorBlur","resetAnchorBlur","setAnchorActive","classList","toggle","resetAnchorActive","remove","css","container","renderClipboard","id","path","class","title","xmlns","viewBox","item","link","article","section","teaser","renderSearchResult","sections","text","tabIndex","facts","fact","renderSource","wrapper","table","renderTable","setOverflowScrolling","webkitOverflowScrolling","resetOverflowScrolling","SearchMessageType","isSearchResultMessage","RESULT","setupSearchWorker","index","Worker","origin$","take","Subject","withLatestFrom","origin","index$","isConfigDefaultLang","isConfigDefaultSeparator","separator","pipeline","split","Boolean","rest","console","log","SETUP","mountNavigation","main$","screen$","screen","sidebar","els","layer","watchSidebar","adjust$","parseFloat","getComputedStyle","parentElement","getPropertyValue","height$","adjust","min","lock$","lock","applySidebar","watchNavigationLayer","Map","label","input","htmlFor","set","applyNavigationLayer","mountTableOfContents","tablet$","tablet","sidebar$","anchors$","anchors","watchAnchorList","decodeURIComponent","target","header","anchor","pop","a","b","applyAnchorList","forEach","mountSearch","query$","reset$","result$","defaultTransform","trim","mountSearchQuery","options","fn","transform","delay","distinctUntilChanged","watchSearchQuery","QUERY","mountSearchReset","watchSearchReset","addToSearchResultList","applySearchResult","fetch$","list","meta","textContent","setSearchResultMeta","resetSearchResultMeta","observeOn","animationFrame","scan","scrollHeight","offsetHeight","finalize","resetSearchResultList","mountSearchResult","identity","mountHeader","styles","sticky","includes","position","watchHeader","type$","main","hx","setHeaderTitleActive","resetHeaderTitleActive","applyHeaderType","mountHero","hidden","setHeroHidden","resetHeroHidden","applyHero","mountMain","active","setHeaderShadow","resetHeaderShadow","bottom","active$","watchMain","mountTabs","setTabsHidden","resetTabsHidden","applyTabs","isAppleDevice","navigator","userAgent","fetchSourceFacts","toLowerCase","user","repo","status","stargazers_count","forks_count","public_repos","fetchSourceFactsFromGitHub","project","encodeURIComponent","star_count","fetchSourceFactsFromGitLab","setScrollLock","resetScrollLock","parseInt","initialize","SyntaxError","hash$","features","search$","navigation$","toc$","tabs$","hero$","keyboard$","indexOf","setupKeyboard","els$","details","closest","open","scrollIntoView","patchDetails","src","script","patchScripts","hasAttribute","patchSource","sentinel","patchTables","iif","patchScrollfix","dialog$","duration","dialog","add","body","setupDialog","clipboard$","block","parent","insertBefore","on","clearSelection","setupClipboard","link$","history","scrollRestoration","state$","push$","pop$","state","pushState","debounceTime","replaceState","bufferCount","instant$","sample","head","dispatchEvent","CustomEvent","setupInstantLoading","visibility","values","documentElement","match"],"mappings":"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","file":"assets/javascripts/bundle.9330522f.min.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t0: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([88,1]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { BehaviorSubject } from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve location\n *\n * This function will return a `URL` object (and not `Location`) in order to\n * normalize typings across the application. Furthermore, locations need to be\n * tracked without setting them and `Location` is a singleton which represents\n * the current location.\n *\n * @return URL\n */\nexport function getLocation(): URL {\n return new URL(location.href)\n}\n\n/**\n * Set location\n *\n * @param url - URL to change to\n */\nexport function setLocation(url: URL): void {\n location.href = url.href\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Check whether a URL is an internal link or a file (except `.html`)\n *\n * @param url - URL or HTML anchor element\n * @param ref - Reference URL\n *\n * @return Test result\n */\nexport function isLocationInternal(\n url: URL | HTMLAnchorElement,\n ref: URL | Location = location\n): boolean {\n return url.host === ref.host\n && /^(?:\\/[\\w-]+)*(?:\\/?|\\.html)$/i.test(url.pathname)\n}\n\n/**\n * Check whether a URL is an anchor link on the current page\n *\n * @param url - URL or HTML anchor element\n * @param ref - Reference URL\n *\n * @return Test result\n */\nexport function isLocationAnchor(\n url: URL | HTMLAnchorElement,\n ref: URL | Location = location\n): boolean {\n return url.pathname === ref.pathname\n && url.hash.length > 0\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch location\n *\n * @return Location subject\n */\nexport function watchLocation(): BehaviorSubject {\n return new BehaviorSubject(getLocation())\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent } from \"rxjs\"\nimport { filter, map, share, startWith } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve location hash\n *\n * @return Location hash\n */\nexport function getLocationHash(): string {\n return location.hash.substring(1)\n}\n\n/**\n * Set location hash\n *\n * Setting a new fragment identifier via `location.hash` will have no effect\n * if the value doesn't change. However, when a new fragment identifier is set,\n * we want the browser to target the respective element at all times, which is\n * why we use this dirty little trick.\n *\n * @param hash - Location hash\n */\nexport function setLocationHash(hash: string): void {\n const el = document.createElement(\"a\")\n el.href = hash\n el.click()\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch location hash\n *\n * @return Location hash observable\n */\nexport function watchLocationHash(): Observable {\n return fromEvent(window, \"hashchange\")\n .pipe(\n map(getLocationHash),\n startWith(getLocationHash()),\n filter(hash => hash.length > 0),\n share()\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { NEVER, Observable } from \"rxjs\"\nimport { ajax } from \"rxjs/ajax\"\nimport {\n catchError,\n distinctUntilKeyChanged,\n pluck,\n share,\n skip,\n switchMap\n} from \"rxjs/operators\"\n\nimport { setLocation } from \"../../location\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n location$: Observable /* Location observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch document switch\n *\n * This function returns an observables that fetches a document if the provided\n * location observable emits a new value (i.e. URL). If the emitted URL points\n * to the same page, the request is effectively ignored (i.e. when only the\n * fragment identifier changes).\n *\n * In case the request fails, the location change is dispatched regularly.\n *\n * @param options - Options\n *\n * @return Document observable\n */\nexport function watchDocumentSwitch(\n { location$ }: WatchOptions\n): Observable {\n return location$\n .pipe(\n distinctUntilKeyChanged(\"pathname\"),\n skip(1),\n\n /* Fetch document */\n switchMap(url => ajax({\n url: url.href,\n responseType: \"document\",\n withCredentials: true\n })\n .pipe(\n pluck(\"response\"),\n catchError(() => {\n setLocation(url)\n return NEVER\n })\n )\n ),\n share()\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { NEVER, Observable, fromEvent, merge } from \"rxjs\"\nimport { mapTo, shareReplay } from \"rxjs/operators\"\n\nimport { watchDocumentSwitch } from \"../switch\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n location$?: Observable /* Location observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch document\n *\n * If the location observable is passed, instant loading will be enabled which\n * means that new values will be emitted every time the location changes.\n *\n * @return Document observable\n */\nexport function watchDocument(\n { location$ }: WatchOptions = {}\n): Observable {\n return merge(\n fromEvent(document, \"DOMContentLoaded\")\n .pipe(\n mapTo(document)\n ),\n typeof location$ !== \"undefined\"\n ? watchDocumentSwitch({ location$ })\n : NEVER\n )\n .pipe(\n shareReplay(1)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve an element matching the query selector\n *\n * @template T - Element type\n *\n * @param selector - Query selector\n * @param node - Node of reference\n *\n * @return Element or nothing\n */\nexport function getElement(\n selector: string, node: ParentNode = document\n): T | undefined {\n return node.querySelector(selector) || undefined\n}\n\n/**\n * Retrieve an element matching a query selector or throw a reference error\n *\n * @template T - Element type\n *\n * @param selector - Query selector\n * @param node - Node of reference\n *\n * @return Element\n */\nexport function getElementOrThrow(\n selector: string, node: ParentNode = document\n): T {\n const el = getElement(selector, node)\n if (typeof el === \"undefined\")\n throw new ReferenceError(\n `Missing element: expected \"${selector}\" to be present`\n )\n return el\n}\n\n/**\n * Retrieve the currently active element\n *\n * @return Element or nothing\n */\nexport function getActiveElement(): HTMLElement | undefined {\n return document.activeElement instanceof HTMLElement\n ? document.activeElement\n : undefined\n}\n\n/**\n * Retrieve all elements matching the query selector\n *\n * @template T - Element type\n *\n * @param selector - Query selector\n * @param node - Node of reference\n *\n * @return Elements\n */\nexport function getElements(\n selector: string, node: ParentNode = document\n): T[] {\n return Array.from(node.querySelectorAll(selector))\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent, merge } from \"rxjs\"\nimport { mapTo, shareReplay, startWith } from \"rxjs/operators\"\n\nimport { getActiveElement } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set element focus\n *\n * @param el - Element\n * @param value - Whether the element should be focused\n */\nexport function setElementFocus(\nel: HTMLElement, value: boolean = true\n): void {\n if (value)\n el.focus()\n else\n el.blur()\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch element focus\n *\n * @param el - Element\n *\n * @return Element focus observable\n */\nexport function watchElementFocus(\n el: HTMLElement\n): Observable {\n const focus$ = fromEvent(el, \"focus\")\n const blur$ = fromEvent(el, \"blur\")\n\n /* Map events to boolean state */\n return merge(\n focus$.pipe(mapTo(true)),\n blur$.pipe(mapTo(false))\n )\n .pipe(\n startWith(el === getActiveElement()),\n shareReplay(1)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent, merge } from \"rxjs\"\nimport { map, shareReplay, startWith } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Element offset\n */\nexport interface ElementOffset {\n x: number /* Horizontal offset */\n y: number /* Vertical offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve element offset\n *\n * @param el - Element\n *\n * @return Element offset\n */\nexport function getElementOffset(el: HTMLElement): ElementOffset {\n return {\n x: el.scrollLeft,\n y: el.scrollTop\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch element offset\n *\n * @param el - Element\n *\n * @return Element offset observable\n */\nexport function watchElementOffset(\n el: HTMLElement\n): Observable {\n return merge(\n fromEvent(el, \"scroll\"),\n fromEvent(window, \"resize\")\n )\n .pipe(\n map(() => getElementOffset(el)),\n startWith(getElementOffset(el)),\n shareReplay(1)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set element text selection\n *\n * @param el - Element\n */\nexport function setElementSelection(\n el: HTMLElement\n): void {\n if (el instanceof HTMLInputElement)\n el.select()\n else\n throw new Error(\"Not implemented\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent } from \"rxjs\"\nimport { filter, map, share } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Key\n */\nexport interface Key {\n type: string /* Key type */\n claim(): void /* Key claim */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Check whether an element may receive keyboard input\n *\n * @param el - Element\n *\n * @return Test result\n */\nexport function isSusceptibleToKeyboard(el: HTMLElement): boolean {\n switch (el.tagName) {\n\n /* Form elements */\n case \"INPUT\":\n case \"SELECT\":\n case \"TEXTAREA\":\n return true\n\n /* Everything else */\n default:\n return el.isContentEditable\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch keyboard\n *\n * @return Keyboard observable\n */\nexport function watchKeyboard(): Observable {\n return fromEvent(window, \"keydown\")\n .pipe(\n filter(ev => !(ev.metaKey || ev.ctrlKey)),\n map(ev => ({\n type: ev.key,\n claim() {\n ev.preventDefault()\n ev.stopPropagation()\n }\n })),\n share()\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEventPattern } from \"rxjs\"\nimport { shareReplay, startWith } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch media query\n *\n * @param query - Media query\n *\n * @return Media observable\n */\nexport function watchMedia(query: string): Observable {\n const media = matchMedia(query)\n return fromEventPattern(next =>\n media.addListener(() => next(media.matches))\n )\n .pipe(\n startWith(media.matches),\n shareReplay(1)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent } from \"rxjs\"\nimport { map, startWith } from \"rxjs/operators\"\n\nimport { getElementOrThrow } from \"../element\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Toggle\n */\nexport type Toggle =\n | \"drawer\" /* Toggle for drawer */\n | \"search\" /* Toggle for search */\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Toggle map\n */\nconst toggles: Record = {\n drawer: getElementOrThrow(`[data-md-toggle=drawer]`),\n search: getElementOrThrow(`[data-md-toggle=search]`)\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve the value of a toggle\n *\n * @param name - Toggle\n *\n * @return Toggle value\n */\nexport function getToggle(name: Toggle): boolean {\n return toggles[name].checked\n}\n\n/**\n * Set toggle\n *\n * Simulating a click event seems to be the most cross-browser compatible way\n * of changing the value while also emitting a `change` event. Before, Material\n * used `CustomEvent` to programmatically change the value of a toggle, but this\n * is a much simpler and cleaner solution which doesn't require a polyfill.\n *\n * @param name - Toggle\n * @param value - Toggle value\n */\nexport function setToggle(name: Toggle, value: boolean): void {\n if (toggles[name].checked !== value)\n toggles[name].click()\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch toggle\n *\n * @param name - Toggle\n *\n * @return Toggle value observable\n */\nexport function watchToggle(name: Toggle): Observable {\n const el = toggles[name]\n return fromEvent(el, \"change\")\n .pipe(\n map(() => el.checked),\n startWith(el.checked)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent, merge } from \"rxjs\"\nimport { map, startWith } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Viewport offset\n */\nexport interface ViewportOffset {\n x: number /* Horizontal offset */\n y: number /* Vertical offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve viewport offset\n *\n * On iOS Safari, viewport offset can be negative due to overflow scrolling.\n * As this may induce strange behaviors downstream, we'll just limit it to 0.\n *\n * @return Viewport offset\n */\nexport function getViewportOffset(): ViewportOffset {\n return {\n x: Math.max(0, pageXOffset),\n y: Math.max(0, pageYOffset)\n }\n}\n\n/**\n * Set viewport offset\n *\n * @param offset - Viewport offset\n */\nexport function setViewportOffset(\n { x, y }: Partial\n): void {\n window.scrollTo(x || 0, y || 0)\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport offset\n *\n * @return Viewport offset observable\n */\nexport function watchViewportOffset(): Observable {\n return merge(\n fromEvent(window, \"scroll\"),\n fromEvent(window, \"resize\")\n )\n .pipe(\n map(getViewportOffset),\n startWith(getViewportOffset())\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent } from \"rxjs\"\nimport { map, startWith } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Viewport size\n */\nexport interface ViewportSize {\n width: number /* Viewport width */\n height: number /* Viewport height */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve viewport size\n *\n * @return Viewport size\n */\nexport function getViewportSize(): ViewportSize {\n return {\n width: innerWidth,\n height: innerHeight\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport size\n *\n * @return Viewport size observable\n */\nexport function watchViewportSize(): Observable {\n return fromEvent(window, \"resize\")\n .pipe(\n map(getViewportSize),\n startWith(getViewportSize())\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, combineLatest } from \"rxjs\"\nimport {\n distinctUntilKeyChanged,\n map,\n shareReplay\n} from \"rxjs/operators\"\n\nimport { Header } from \"components\"\n\nimport {\n ViewportOffset,\n watchViewportOffset\n} from \"../offset\"\nimport {\n ViewportSize,\n watchViewportSize\n} from \"../size\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Viewport\n */\nexport interface Viewport {\n offset: ViewportOffset /* Viewport offset */\n size: ViewportSize /* Viewport size */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch at options\n */\ninterface WatchAtOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport\n *\n * @return Viewport observable\n */\nexport function watchViewport(): Observable {\n return combineLatest([\n watchViewportOffset(),\n watchViewportSize()\n ])\n .pipe(\n map(([offset, size]) => ({ offset, size })),\n shareReplay(1)\n )\n}\n\n/**\n * Watch viewport relative to element\n *\n * @param el - Element\n * @param options - Options\n *\n * @return Viewport observable\n */\nexport function watchViewportAt(\n el: HTMLElement, { header$, viewport$ }: WatchAtOptions\n): Observable {\n const offset$ = viewport$\n .pipe(\n distinctUntilKeyChanged(\"size\"),\n map((): ViewportOffset => ({\n x: el.offsetLeft,\n y: el.offsetTop\n }))\n )\n\n /* Compute relative viewport, return hot observable */\n return combineLatest([header$, viewport$, offset$])\n .pipe(\n map(([{ height }, { offset, size }, { x, y }]) => ({\n offset: {\n x: offset.x - x,\n y: offset.y - y + height\n },\n size\n })),\n shareReplay(1)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, Subject, fromEventPattern } from \"rxjs\"\nimport {\n pluck,\n share,\n switchMapTo,\n tap,\n throttle\n} from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Worker message\n */\nexport interface WorkerMessage {\n type: unknown /* Message type */\n data: unknown /* Message data */\n}\n\n/**\n * Worker handler\n *\n * @template T - Message type\n */\nexport interface WorkerHandler<\n T extends WorkerMessage\n> {\n tx$: Subject /* Message transmission subject */\n rx$: Observable /* Message receive observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n *\n * @template T - Worker message type\n */\ninterface WatchOptions {\n tx$: Observable /* Message transmission observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch a web worker\n *\n * This function returns an observable that will send all values emitted by the\n * message observable to the web worker. Web worker communication is expected\n * to be bidirectional (request-response) and synchronous. Messages that are\n * emitted during a pending request are throttled, the last one is emitted.\n *\n * @param worker - Web worker\n * @param options - Options\n *\n * @return Worker message observable\n */\nexport function watchWorker(\n worker: Worker, { tx$ }: WatchOptions\n): Observable {\n\n /* Intercept messages from worker-like objects */\n const rx$ = fromEventPattern(next =>\n worker.addEventListener(\"message\", next)\n )\n .pipe(\n pluck(\"data\")\n )\n\n /* Send and receive messages, return hot observable */\n return tx$\n .pipe(\n throttle(() => rx$, { leading: true, trailing: true }),\n tap(message => worker.postMessage(message)),\n switchMapTo(rx$),\n share()\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./document\"\nexport * from \"./element\"\nexport * from \"./keyboard\"\nexport * from \"./location\"\nexport * from \"./media\"\nexport * from \"./toggle\"\nexport * from \"./viewport\"\nexport * from \"./worker\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SearchIndexConfig, SearchIndexOptions } from \"integrations/search\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Feature flags\n */\nexport type Feature =\n | \"tabs\" /* Tabs navigation */\n | \"instant\" /* Instant loading\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * URL configuration\n */\nexport interface UrlConfig {\n base: string /* Base URL */\n worker: {\n search: string /* Search worker URL */\n }\n}\n\n/**\n * Search configuration\n */\nexport interface SearchConfig {\n index?: Promise\n query?: (value: string) => string\n}\n\n/**\n * Configuration\n */\nexport interface Config {\n url: UrlConfig\n features: Feature[] /* Feature flags */\n search?: SearchConfig\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Ensure that the given value is a valid configuration\n *\n * We could use `jsonschema` or any other schema validation framework, but that\n * would just add more bloat to the bundle, so we'll keep it plain and simple.\n *\n * @param config - Configuration\n *\n * @return Test result\n */\nexport function isConfig(config: any): config is Config {\n return typeof config === \"object\"\n && typeof config.url === \"object\"\n && typeof config.url.base === \"string\"\n && typeof config.url.worker === \"object\"\n && typeof config.url.worker.search === \"string\"\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n// tslint:disable no-null-keyword\n\nimport { JSX as JSXInternal } from \"preact\"\nimport { keys } from \"ramda\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * HTML and SVG attributes\n */\ntype Attributes =\n & JSXInternal.HTMLAttributes\n & JSXInternal.SVGAttributes\n & Record\n\n/**\n * Child element\n */\ntype Child =\n | HTMLElement\n | SVGElement\n | Text\n | string\n | number\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Create an element\n *\n * @param tag - HTML or SVG tag\n *\n * @return Element\n */\nfunction createElement(tag: string): HTMLElement | SVGElement {\n switch (tag) {\n\n /* SVG elements */\n case \"svg\":\n case \"path\":\n return document.createElementNS(\"http://www.w3.org/2000/svg\", tag)\n\n /* HTML elements */\n default:\n return document.createElement(tag)\n }\n}\n\n/**\n * Set an attribute\n *\n * @param el - Element\n * @param name - Attribute name\n * @param value - Attribute value\n */\nfunction setAttribute(\n el: HTMLElement | SVGElement, name: string, value: string) {\n switch (name) {\n\n /* Attributes to be ignored */\n case \"xmlns\":\n break\n\n /* Attributes of SVG elements */\n case \"viewBox\":\n case \"d\":\n if (typeof value !== \"boolean\")\n el.setAttributeNS(null, name, value)\n else if (value)\n el.setAttributeNS(null, name, \"\")\n break\n\n /* Attributes of HTML elements */\n default:\n if (typeof value !== \"boolean\")\n el.setAttribute(name, value)\n else if (value)\n el.setAttribute(name, \"\")\n }\n}\n\n/**\n * Append a child node to an element\n *\n * @param el - Element\n * @param child - Child node(s)\n */\nfunction appendChild(\n el: HTMLElement | SVGElement, child: Child | Child[]\n): void {\n\n /* Handle primitive types (including raw HTML) */\n if (typeof child === \"string\" || typeof child === \"number\") {\n el.innerHTML += child.toString()\n\n /* Handle nodes */\n } else if (child instanceof Node) {\n el.appendChild(child)\n\n /* Handle nested children */\n } else if (Array.isArray(child)) {\n for (const node of child)\n appendChild(el, node)\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * JSX factory\n *\n * @param tag - HTML or SVG tag\n * @param attributes - HTML attributes\n * @param children - Child elements\n *\n * @return Element\n */\nexport function h(\n tag: string, attributes: Attributes | null, ...children: Child[]\n): HTMLElement | SVGElement {\n const el = createElement(tag)\n\n /* Set attributes, if any */\n if (attributes)\n for (const attr of keys(attributes))\n setAttribute(el, attr, attributes[attr])\n\n /* Append child nodes */\n for (const child of children)\n appendChild(el, child)\n\n /* Return element */\n return el\n}\n\n/* ----------------------------------------------------------------------------\n * Namespace\n * ------------------------------------------------------------------------- */\n\nexport declare namespace h {\n namespace JSX {\n type Element = HTMLElement | SVGElement\n type IntrinsicElements = JSXInternal.IntrinsicElements\n }\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, defer, of } from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Cache the last value emitted by an observable in session storage\n *\n * If the key is not found in session storage, the factory is executed and the\n * latest value emitted will automatically be persisted to sessions storage.\n * Note that the values emitted by the returned observable must be serializable\n * as `JSON`, or data will be lost.\n *\n * @template T - Value type\n *\n * @param key - Cache key\n * @param factory - Observable factory\n *\n * @return Value observable\n */\nexport function cache(\n key: string, factory: () => Observable\n): Observable {\n return defer(() => {\n const data = sessionStorage.getItem(key)\n if (data) {\n return of(JSON.parse(data) as T)\n\n /* Retrieve value from observable factory and write to storage */\n } else {\n const value$ = factory()\n value$.subscribe(value => {\n try {\n sessionStorage.setItem(key, JSON.stringify(value))\n } catch (err) {\n /* Uncritical, just swallow */\n }\n })\n\n /* Return value */\n return value$\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { getElementOrThrow } from \"browser\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Translation keys\n */\ntype TranslateKey =\n | \"clipboard.copy\" /* Copy to clipboard */\n | \"clipboard.copied\" /* Copied to clipboard */\n | \"search.config.lang\" /* Search language */\n | \"search.config.pipeline\" /* Search pipeline */\n | \"search.config.separator\" /* Search separator */\n | \"search.result.placeholder\" /* Type to start searching */\n | \"search.result.none\" /* No matching documents */\n | \"search.result.one\" /* 1 matching document */\n | \"search.result.other\" /* # matching documents */\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Translations\n */\nlet lang: Record\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Translate the given key\n *\n * @param key - Key to be translated\n * @param value - Value to be replaced\n *\n * @return Translation\n */\nexport function translate(key: TranslateKey, value?: string): string {\n if (typeof lang === \"undefined\") {\n const el = getElementOrThrow(\"#__lang\")\n lang = JSON.parse(el.innerText)\n }\n if (typeof lang[key] === \"undefined\") {\n throw new ReferenceError(`Invalid translation: ${key}`)\n }\n return typeof value !== \"undefined\"\n ? lang[key].replace(\"#\", value)\n : lang[key]\n}\n\n/**\n * Truncate a string after the given number of characters\n *\n * This is not a very reasonable approach, since the summaries kind of suck.\n * It would be better to create something more intelligent, highlighting the\n * search occurrences and making a better summary out of it, but this note was\n * written three years ago, so who knows if we'll ever fix it.\n *\n * @param value - Value to be truncated\n * @param n - Number of characters\n *\n * @return Truncated value\n */\nexport function truncate(value: string, n: number): string {\n let i = n\n if (value.length > i) {\n while (value[i] !== \" \" && --i > 0); // tslint:disable-line\n return `${value.substring(0, i)}...`\n }\n return value\n}\n\n/**\n * Round a number for display with source facts\n *\n * This is a reverse engineered version of GitHub's weird rounding algorithm\n * for stars, forks and all other numbers. While all numbers below `1,000` are\n * returned as-is, bigger numbers are converted to fixed numbers:\n *\n * - `1,049` => `1k`\n * - `1,050` => `1.1k`\n * - `1,949` => `1.9k`\n * - `1,950` => `2k`\n *\n * @param value - Original value\n *\n * @return Rounded value\n */\nexport function round(value: number): string {\n if (value > 999) {\n const digits = +((value - 950) % 1000 > 99)\n return `${((value + 1) / 1000).toFixed(digits)}k`\n } else {\n return value.toString()\n }\n}\n\n/**\n * Simple hash function\n *\n * @see https://bit.ly/2wsVjJ4 - Original source\n *\n * @param value - Value to be hashed\n *\n * @return Hash as 32bit integer\n */\nexport function hash(value: string): number {\n let h = 0\n for (let i = 0, len = value.length; i < len; i++) {\n h = ((h << 5) - h) + value.charCodeAt(i)\n h |= 0 // Convert to 32bit integer\n }\n return h\n }\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./config\"\nexport * from \"./jsx\"\nexport * from \"./rxjs\"\nexport * from \"./string\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./header\"\nexport * from \"./hero\"\nexport * from \"./main\"\nexport * from \"./navigation\"\nexport * from \"./search\"\nexport * from \"./shared\"\nexport * from \"./tabs\"\nexport * from \"./toc\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set sidebar offset\n *\n * @param el - Sidebar element\n * @param value - Sidebar offset\n */\nexport function setSidebarOffset(\n el: HTMLElement, value: number\n): void {\n el.style.top = `${value}px`\n}\n\n/**\n * Reset sidebar offset\n *\n * @param el - Sidebar element\n */\nexport function resetSidebarOffset(\n el: HTMLElement\n): void {\n el.style.top = \"\"\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Set sidebar height\n *\n * @param el - Sidebar element\n * @param value - Sidebar height\n */\nexport function setSidebarHeight(\n el: HTMLElement, value: number\n): void {\n el.style.height = `${value}px`\n}\n\n/**\n * Reset sidebar height\n *\n * @param el - Sidebar element\n */\nexport function resetSidebarHeight(\n el: HTMLElement\n): void {\n el.style.height = \"\"\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Set sidebar lock\n *\n * @param el - Sidebar element\n * @param value - Whether the sidebar is locked\n */\nexport function setSidebarLock(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"lock\" : \"\")\n}\n\n/**\n * Reset sidebar lock\n *\n * @param el - Sidebar element\n */\nexport function resetSidebarLock(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { EMPTY, Observable, of } from \"rxjs\"\nimport {\n distinctUntilChanged,\n map,\n scan,\n shareReplay,\n switchMap\n} from \"rxjs/operators\"\n\nimport { getElement } from \"browser\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Component\n */\nexport type Component =\n | \"container\" /* Container */\n | \"header\" /* Header */\n | \"header-title\" /* Header title */\n | \"hero\" /* Hero */\n | \"main\" /* Main area */\n | \"navigation\" /* Navigation */\n | \"search\" /* Search */\n | \"search-query\" /* Search input */\n | \"search-reset\" /* Search reset */\n | \"search-result\" /* Search results */\n | \"skip\" /* Skip link */\n | \"tabs\" /* Tabs */\n | \"toc\" /* Table of contents */\n\n/**\n * Component map\n */\nexport type ComponentMap = {\n [P in Component]?: HTMLElement\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Component map observable\n */\nlet components$: Observable\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup bindings to components with given names\n *\n * This function will maintain bindings to the elements identified by the given\n * names in-between document switches and update the elements in-place.\n *\n * @param names - Component names\n * @param options - Options\n */\nexport function setupComponents(\n names: Component[], { document$ }: WatchOptions\n): void {\n components$ = document$\n .pipe(\n\n /* Build component map */\n map(document => names.reduce((components, name) => {\n const el = getElement(`[data-md-component=${name}]`, document)\n return {\n ...components,\n ...typeof el !== \"undefined\" ? { [name]: el } : {}\n }\n }, {})),\n\n /* Re-compute component map on document switch */\n scan((prev, next) => {\n for (const name of names) {\n switch (name) {\n\n /* Top-level components: update */\n case \"header-title\":\n case \"container\":\n case \"skip\":\n if (name in prev && typeof prev[name] !== \"undefined\") {\n prev[name]!.replaceWith(next[name]!)\n prev[name] = next[name]\n }\n break\n\n /* All other components: rebind */\n default:\n if (typeof next[name] !== \"undefined\")\n prev[name] = getElement(`[data-md-component=${name}]`)\n else\n delete prev[name]\n }\n }\n return prev\n }),\n\n /* Convert to hot observable */\n shareReplay(1)\n )\n}\n\n/**\n * Retrieve a component\n *\n * The returned observable will only re-emit if the element changed, i.e. if\n * it was replaced from a document which was switched to.\n *\n * @template T - Element type\n *\n * @param name - Component name\n *\n * @return Element observable\n */\nexport function useComponent(\n name: \"search-query\"\n): Observable\nexport function useComponent(\n name: Component\n): Observable\nexport function useComponent(\n name: Component\n): Observable {\n return components$\n .pipe(\n switchMap(components => (\n typeof components[name] !== \"undefined\"\n ? of(components[name] as T)\n : EMPTY\n )),\n distinctUntilChanged()\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set anchor blur\n *\n * @param el - Anchor element\n * @param value - Whether the anchor is blurred\n */\nexport function setAnchorBlur(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"blur\" : \"\")\n}\n\n/**\n * Reset anchor blur\n *\n * @param el - Anchor element\n */\nexport function resetAnchorBlur(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Set anchor active\n *\n * @param el - Anchor element\n * @param value - Whether the anchor is active\n */\nexport function setAnchorActive(\n el: HTMLElement, value: boolean\n): void {\n el.classList.toggle(\"md-nav__link--active\", value)\n}\n\n/**\n * Reset anchor active\n *\n * @param el - Anchor element\n */\nexport function resetAnchorActive(\n el: HTMLElement\n): void {\n el.classList.remove(\"md-nav__link--active\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./sidebar\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { h, translate } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * CSS classes\n */\nconst css = {\n container: \"md-clipboard md-icon\"\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a 'copy-to-clipboard' button\n *\n * @param id - Unique identifier\n *\n * @return Element\n */\nexport function renderClipboard(\n id: string\n) {\n const path = require(\"material-design-icons-svg/paths/content-copy.json\")\n return (\n \n \n \n \n \n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SearchResult } from \"integrations/search\"\nimport { h, truncate } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * CSS classes\n */\nconst css = {\n item: \"md-search-result__item\",\n link: \"md-search-result__link\",\n article: \"md-search-result__article md-search-result__article--document\",\n section: \"md-search-result__article\",\n title: \"md-search-result__title\",\n teaser: \"md-search-result__teaser\"\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a search result\n *\n * @param result - Search result\n *\n * @return Element\n */\nexport function renderSearchResult(\n { article, sections }: SearchResult\n) {\n\n // create page with icon\n const path = require(\"material-design-icons-svg/paths/file-search-outline.json\")\n\n const children = [article, ...sections].map(document => {\n const { location, title, text } = document\n return (\n \n
    \n {!(\"parent\" in document)\n ?
    \n \n \n \n
    \n : null\n }\n

    {title}

    \n {text.length\n ?

    {truncate(text, 320)}

    \n : undefined\n }\n
    \n
    \n )\n })\n return (\n
  • \n {children}\n
  • \n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SourceFacts } from \"patches/source\"\nimport { h } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * CSS classes\n */\nconst css = {\n facts: \"md-source__facts\",\n fact: \"md-source__fact\"\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render source facts\n *\n * @param facts - Source facts\n *\n * @return Element\n */\nexport function renderSource(\n facts: SourceFacts\n) {\n const children = facts.map(fact => (\n
  • {fact}
  • \n ))\n return (\n
      \n {children}\n
    \n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { h } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * CSS classes\n */\nconst css = {\n wrapper: \"md-typeset__scrollwrap\",\n table: \"md-typeset__table\"\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a table inside a wrapper to improve scrolling on mobile\n *\n * @param table - Table element\n *\n * @return Element\n */\nexport function renderTable(\n table: HTMLTableElement\n) {\n return (\n
    \n
    \n {table}\n
    \n
    \n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./clipboard\"\nexport * from \"./search\"\nexport * from \"./source\"\nexport * from \"./table\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Global augmentations\n */\ndeclare global {\n interface CSSStyleDeclaration {\n webkitOverflowScrolling: \"touch\" | \"\"\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set overflow scrolling\n *\n * @param el - Scrollable element\n */\nexport function setOverflowScrolling(\n el: HTMLElement\n): void {\n el.style.webkitOverflowScrolling = \"touch\"\n}\n\n/**\n * Reset overflow scrolling\n *\n * @param el - Scrollable element\n */\nexport function resetOverflowScrolling(\n el: HTMLElement\n): void {\n el.style.webkitOverflowScrolling = \"\"\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SearchIndexOptions, SearchResult } from \"integrations/search\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search message type\n */\nexport const enum SearchMessageType {\n SETUP, /* Search index setup */\n DUMP, /* Search index dump */\n QUERY, /* Search query */\n RESULT /* Search results */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * A message containing the data necessary to setup the search index\n */\nexport interface SearchSetupMessage {\n type: SearchMessageType.SETUP /* Message type */\n data: SearchIndexOptions /* Message data */\n}\n\n/**\n * A message containing the a dump of the search index\n */\nexport interface SearchDumpMessage {\n type: SearchMessageType.DUMP /* Message type */\n data: string /* Message data */\n}\n\n/**\n * A message containing a search query\n */\nexport interface SearchQueryMessage {\n type: SearchMessageType.QUERY /* Message type */\n data: string /* Message data */\n}\n\n/**\n * A message containing results for a search query\n */\nexport interface SearchResultMessage {\n type: SearchMessageType.RESULT /* Message type */\n data: SearchResult[] /* Message data */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * A message exchanged with the search worker\n */\nexport type SearchMessage =\n | SearchSetupMessage\n | SearchDumpMessage\n | SearchQueryMessage\n | SearchResultMessage\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Type guard for search setup messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchSetupMessage(\n message: SearchMessage\n): message is SearchSetupMessage {\n return message.type === SearchMessageType.SETUP\n}\n\n/**\n * Type guard for search dump messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchDumpMessage(\n message: SearchMessage\n): message is SearchDumpMessage {\n return message.type === SearchMessageType.DUMP\n}\n\n/**\n * Type guard for search query messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchQueryMessage(\n message: SearchMessage\n): message is SearchQueryMessage {\n return message.type === SearchMessageType.QUERY\n}\n\n/**\n * Type guard for search result messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchResultMessage(\n message: SearchMessage\n): message is SearchResultMessage {\n return message.type === SearchMessageType.RESULT\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, Subject, from } from \"rxjs\"\nimport { ajax } from \"rxjs/ajax\"\nimport {\n map,\n pluck,\n shareReplay,\n switchMap,\n take,\n tap,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport { WorkerHandler, watchWorker } from \"browser\"\nimport { SearchIndexConfig, SearchIndexOptions } from \"integrations/search\"\n\nimport { translate } from \"utilities\"\nimport {\n SearchMessage,\n SearchMessageType,\n SearchSetupMessage,\n isSearchResultMessage\n} from \"../message\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n base: string /* Base url */\n index?: Promise /* Promise resolving with index */\n location$: Observable /* Location observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup search web worker\n *\n * This function will create a web worker to setup and query the search index\n * which is done using `lunr`. The index can be passed explicitly in order to\n * enable hacks like _localsearch_ via search index embedding as JSON. If no\n * index is given, this function will load it from the default location.\n *\n * @param url - Worker url\n * @param options - Options\n *\n * @return Worker handler\n */\nexport function setupSearchWorker(\n url: string, { base, index, location$ }: SetupOptions\n): WorkerHandler {\n const worker = new Worker(url)\n\n /* Ensure stable base URL */\n const origin$ = location$\n .pipe(\n take(1),\n map(({ href }) => new URL(base, href)\n .toString()\n .replace(/\\/$/, \"\")\n )\n )\n\n /* Create communication channels and resolve relative links */\n const tx$ = new Subject()\n const rx$ = watchWorker(worker, { tx$ })\n .pipe(\n withLatestFrom(origin$),\n map(([message, origin]) => {\n if (isSearchResultMessage(message)) {\n for (const { article, sections } of message.data) {\n article.location = `${origin}/${article.location}`\n for (const section of sections)\n section.location = `${origin}/${section.location}`\n }\n }\n return message\n }),\n shareReplay(1)\n )\n\n /* Fetch index if it wasn't passed explicitly */\n const index$ = typeof index !== \"undefined\"\n ? from(index)\n : origin$\n .pipe(\n switchMap(origin => ajax({\n url: `${origin}/search/search_index.json`,\n responseType: \"json\",\n withCredentials: true\n })\n .pipe(\n pluck(\"response\")\n )\n )\n )\n\n function isConfigDefaultLang(config: SearchIndexConfig) {\n return config.lang.length === 1 && config.lang[0] === \"en\"\n }\n\n function isConfigDefaultSeparator(config: SearchIndexConfig) {\n return config.separator === \"[\\s\\-]+\"\n }\n\n index$\n .pipe(\n map(({ config, ...rest }) => ({\n config: {\n lang: isConfigDefaultLang(config)\n ? [translate(\"search.config.lang\")]\n : config.lang,\n pipeline: translate(\"search.config.pipeline\")\n .split(/\\s*,\\s*/)\n .filter(Boolean),\n separator: isConfigDefaultSeparator(config)\n ? translate(\"search.config.separator\")\n : config.separator\n },\n ...rest\n }))\n )\n .subscribe(console.log)\n\n /* Send index to worker */\n index$\n .pipe(\n map(data => ({\n type: SearchMessageType.SETUP,\n data\n }))\n )\n .subscribe(tx$.next.bind(tx$))\n\n /* Return worker handler */\n return { tx$, rx$ }\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./search\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./layer\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, pipe } from \"rxjs\"\nimport { map, switchMap } from \"rxjs/operators\"\n\nimport { Viewport, getElements } from \"browser\"\n\nimport { Header } from \"../../header\"\nimport { Main } from \"../../main\"\nimport {\n Sidebar,\n applySidebar,\n watchSidebar\n} from \"../../shared\"\nimport {\n NavigationLayer,\n applyNavigationLayer,\n watchNavigationLayer\n} from \"../layer\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Navigation for [screen -]\n */\ninterface NavigationBelowScreen {\n layer: NavigationLayer /* Active layer */\n}\n\n/**\n * Navigation for [screen +]\n */\ninterface NavigationAboveScreen {\n sidebar: Sidebar /* Sidebar */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Navigation\n */\nexport type Navigation =\n | NavigationBelowScreen\n | NavigationAboveScreen\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n header$: Observable
    /* Header observable */\n main$: Observable
    /* Main area observable */\n viewport$: Observable /* Viewport observable */\n screen$: Observable /* Screen media observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount navigation from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountNavigation(\n { header$, main$, viewport$, screen$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => screen$\n .pipe(\n switchMap(screen => {\n\n /* [screen +]: Mount navigation in sidebar */\n if (screen) {\n return watchSidebar(el, { main$, viewport$ })\n .pipe(\n applySidebar(el, { header$ }),\n map(sidebar => ({ sidebar }))\n )\n\n /* [screen -]: Mount navigation in drawer */\n } else {\n const els = getElements(\"nav\", el)\n return watchNavigationLayer(els)\n .pipe(\n applyNavigationLayer(els),\n map(layer => ({ layer }))\n )\n }\n })\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n combineLatest,\n pipe\n} from \"rxjs\"\nimport {\n distinctUntilChanged,\n distinctUntilKeyChanged,\n finalize,\n map,\n observeOn,\n tap,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport { Viewport } from \"browser\"\n\nimport { Header } from \"../../../header\"\nimport { Main } from \"../../../main\"\nimport { Sidebar } from \"../_\"\nimport {\n resetSidebarHeight,\n resetSidebarLock,\n resetSidebarOffset,\n setSidebarHeight,\n setSidebarLock,\n setSidebarOffset\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n main$: Observable
    /* Main area observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/**\n * Apply options\n */\ninterface ApplyOptions {\n header$: Observable
    /* Header observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch sidebar\n *\n * This function returns an observable that computes the visual parameters of\n * the sidebar which depends on the vertical viewport offset, as well as the\n * height of the main area. When the page is scrolled beyond the header, the\n * sidebar is locked and fills the remaining space.\n *\n * @param el - Sidebar element\n * @param options - Options\n *\n * @return Sidebar observable\n */\nexport function watchSidebar(\n el: HTMLElement, { main$, viewport$ }: WatchOptions\n): Observable {\n\n /* Adjust for internal main area offset */\n const adjust$ = viewport$\n .pipe(\n distinctUntilKeyChanged(\"size\"),\n map(() => parseFloat(\n getComputedStyle(el.parentElement!)\n .getPropertyValue(\"padding-top\")\n )),\n distinctUntilChanged()\n )\n\n /* Compute the sidebar's available height */\n const height$ = viewport$\n .pipe(\n withLatestFrom(adjust$, main$),\n map(([{ offset: { y } }, adjust, { offset, height }]) => (\n height\n + Math.min(adjust, Math.max(0, y - offset))\n - adjust\n )),\n distinctUntilChanged()\n )\n\n /* Compute whether the sidebar should be locked */\n const lock$ = viewport$\n .pipe(\n withLatestFrom(adjust$, main$),\n map(([{ offset: { y } }, adjust, { offset }]) => (\n y >= offset + adjust\n )),\n distinctUntilChanged()\n )\n\n /* Combine into single observable */\n return combineLatest([height$, lock$])\n .pipe(\n map(([height, lock]) => ({ height, lock }))\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Apply sidebar\n *\n * @param el - Sidebar element\n * @param options - Options\n *\n * @return Operator function\n */\nexport function applySidebar(\n el: HTMLElement, { header$ }: ApplyOptions\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n withLatestFrom(header$),\n tap(([{ height, lock }, { height: offset }]) => {\n setSidebarHeight(el, height)\n setSidebarLock(el, lock)\n\n /* Set offset in locked state depending on header height */\n if (lock)\n setSidebarOffset(el, offset)\n else\n resetSidebarOffset(el)\n }),\n\n /* Re-map to sidebar */\n map(([sidebar]) => sidebar),\n\n /* Reset on complete or error */\n finalize(() => {\n resetSidebarOffset(el)\n resetSidebarHeight(el)\n resetSidebarLock(el)\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { findLast } from \"ramda\"\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n fromEvent,\n merge,\n pipe\n} from \"rxjs\"\nimport {\n delay,\n finalize,\n map,\n observeOn,\n scan,\n tap\n} from \"rxjs/operators\"\n\nimport { getElement, getElementOrThrow } from \"browser\"\n\nimport { NavigationLayer } from \"../_\"\nimport {\n resetOverflowScrolling,\n setOverflowScrolling\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch navigation layer\n *\n * On iOS we want to add `-webkit-overflow-scrolling: touch` for the menus\n * contained in the drawer, but as the navigational layers are nested, we can\n * only add it to the topmost layer or extremely weird cropping will occur.\n * This implementation keeps track of the previous and current layer.\n *\n * @param els - Navigation elements\n *\n * @return Navigation layer observable\n */\nexport function watchNavigationLayer(\n els: HTMLElement[]\n): Observable {\n const table = new Map()\n for (const el of els) {\n const label = getElement(\"label\", el)\n if (typeof label !== \"undefined\") {\n const input = getElementOrThrow(`#${label.htmlFor}`)\n table.set(input, el)\n }\n }\n\n /* Determine topmost layer */\n const layer$ = merge(...[...table.keys()].map(input => (\n fromEvent(input, \"change\")\n )))\n .pipe(\n map(() => getElementOrThrow(\".md-nav__list\", table.get(\n findLast(({ checked }) => checked, [...table.keys()])!\n )))\n )\n\n /* Return previous and next layer */\n return layer$\n .pipe(\n map(next => ({ next })),\n scan(({ next: prev }, { next }) => ({ prev, next }))\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Apply navigation layer\n *\n * @param els - Navigation elements\n *\n * @return Operator function\n */\nexport function applyNavigationLayer(\n els: HTMLElement[]\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ prev }) => {\n if (prev)\n resetOverflowScrolling(prev)\n }),\n\n /* Wait until transition has finished */\n delay(250),\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ next }) => {\n setOverflowScrolling(next)\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n for (const el of els)\n resetOverflowScrolling(\n getElementOrThrow(\".md-nav__list\", el)\n )\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./anchor\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n OperatorFunction,\n combineLatest,\n of,\n pipe\n} from \"rxjs\"\nimport { map, switchMap } from \"rxjs/operators\"\n\nimport { Viewport, getElements } from \"browser\"\n\nimport { Header } from \"../../header\"\nimport { Main } from \"../../main\"\nimport {\n Sidebar,\n applySidebar,\n watchSidebar\n} from \"../../shared\"\nimport {\n AnchorList,\n applyAnchorList,\n watchAnchorList\n} from \"../anchor\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Table of contents for [tablet -]\n */\ninterface TableOfContentsBelowTablet {} // tslint:disable-line\n\n/**\n * Table of contents for [tablet +]\n */\ninterface TableOfContentsAboveTablet {\n sidebar: Sidebar /* Sidebar */\n anchors: AnchorList /* Anchor list */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Table of contents\n */\nexport type TableOfContents =\n | TableOfContentsBelowTablet\n | TableOfContentsAboveTablet\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n header$: Observable
    /* Header observable */\n main$: Observable
    /* Main area observable */\n viewport$: Observable /* Viewport observable */\n tablet$: Observable /* Tablet media observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount table of contents from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountTableOfContents(\n { header$, main$, viewport$, tablet$}: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => tablet$\n .pipe(\n switchMap(tablet => {\n\n /* [tablet +]: Mount table of contents in sidebar */\n if (tablet) {\n const els = getElements(\".md-nav__link\", el)\n\n /* Watch and apply sidebar */\n const sidebar$ = watchSidebar(el, { main$, viewport$ })\n .pipe(\n applySidebar(el, { header$ })\n )\n\n /* Watch and apply anchor list (scroll spy) */\n const anchors$ = watchAnchorList(els, { header$, viewport$ })\n .pipe(\n applyAnchorList(els)\n )\n\n /* Combine into a single hot observable */\n return combineLatest([sidebar$, anchors$])\n .pipe(\n map(([sidebar, anchors]) => ({ sidebar, anchors }))\n )\n\n /* [tablet -]: Unmount table of contents */\n } else {\n return of({})\n }\n })\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { reverse } from \"ramda\"\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n combineLatest,\n pipe\n} from \"rxjs\"\nimport {\n bufferCount,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n finalize,\n map,\n observeOn,\n scan,\n startWith,\n switchMap,\n tap\n} from \"rxjs/operators\"\n\nimport { Viewport, getElement } from \"browser\"\n\nimport { Header } from \"../../../header\"\nimport { AnchorList } from \"../_\"\nimport {\n resetAnchorActive,\n resetAnchorBlur,\n setAnchorActive,\n setAnchorBlur\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch anchor list\n *\n * This is effectively a scroll-spy implementation which will account for the\n * fixed header and automatically re-calculate anchor offsets when the viewport\n * is resized. The returned observable will only emit if the anchor list needs\n * to be repainted.\n *\n * This implementation tracks an anchor element's entire path starting from its\n * level up to the top-most anchor element, e.g. `[h3, h2, h1]`. Although the\n * Material theme currently doesn't make use of this information, it enables\n * the styling of the entire hierarchy through customization.\n *\n * Note that the current anchor is the last item of the `prev` anchor list.\n *\n * @param els - Anchor elements\n * @param options - Options\n *\n * @return Anchor list observable\n */\nexport function watchAnchorList(\n els: HTMLAnchorElement[], { header$, viewport$ }: WatchOptions\n): Observable {\n const table = new Map()\n for (const el of els) {\n const id = decodeURIComponent(el.hash.substring(1))\n const target = getElement(`[id=\"${id}\"]`)\n if (typeof target !== \"undefined\")\n table.set(el, target)\n }\n\n /* Compute necessary adjustment for header */\n const adjust$ = header$\n .pipe(\n map(header => 18 + header.height)\n )\n\n /* Compute partition of previous and next anchors */\n const partition$ = viewport$\n .pipe(\n distinctUntilKeyChanged(\"size\"),\n\n /* Build index to map anchor paths to vertical offsets */\n map(() => {\n let path: HTMLAnchorElement[] = []\n return [...table].reduce((index, [anchor, target]) => {\n while (path.length) {\n const last = table.get(path[path.length - 1])!\n if (last.tagName >= target.tagName) {\n path.pop()\n } else {\n break\n }\n }\n\n /* If the current anchor is hidden, continue with its parent */\n let offset = target.offsetTop\n while (!offset && target.parentElement) {\n target = target.parentElement\n offset = target.offsetTop\n }\n\n /* Map reversed anchor path to vertical offset */\n return index.set(\n reverse(path = [...path, anchor]),\n offset\n )\n }, new Map())\n }),\n\n /* Re-compute partition when viewport offset changes */\n switchMap(index => combineLatest([adjust$, viewport$])\n .pipe(\n scan(([prev, next], [adjust, { offset: { y } }]) => {\n\n /* Look forward */\n while (next.length) {\n const [, offset] = next[0]\n if (offset - adjust < y) {\n prev = [...prev, next.shift()!]\n } else {\n break\n }\n }\n\n /* Look backward */\n while (prev.length) {\n const [, offset] = prev[prev.length - 1]\n if (offset - adjust >= y) {\n next = [prev.pop()!, ...next]\n } else {\n break\n }\n }\n\n /* Return partition */\n return [prev, next]\n }, [[], [...index]]),\n distinctUntilChanged((a, b) => {\n return a[0] === b[0]\n && a[1] === b[1]\n })\n )\n )\n )\n\n /* Compute and return anchor list migrations */\n return partition$\n .pipe(\n map(([prev, next]) => ({\n prev: prev.map(([path]) => path),\n next: next.map(([path]) => path)\n })),\n\n /* Extract anchor list migrations */\n startWith({ prev: [], next: [] }),\n bufferCount(2, 1),\n map(([a, b]) => {\n\n /* Moving down */\n if (a.prev.length < b.prev.length) {\n return {\n prev: b.prev.slice(Math.max(0, a.prev.length - 1), b.prev.length),\n next: []\n }\n\n /* Moving up */\n } else {\n return {\n prev: b.prev.slice(-1),\n next: b.next.slice(0, b.next.length - a.next.length)\n }\n }\n })\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Apply anchor list\n *\n * @param els - Anchor elements\n *\n * @return Operator function\n */\nexport function applyAnchorList(\n els: HTMLAnchorElement[]\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ prev, next }) => {\n\n /* Look forward */\n for (const [el] of next) {\n resetAnchorActive(el)\n resetAnchorBlur(el)\n }\n\n /* Look backward */\n prev.forEach(([el], index) => {\n setAnchorActive(el, index === prev.length - 1)\n setAnchorBlur(el, true)\n })\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n for (const el of els) {\n resetAnchorActive(el)\n resetAnchorBlur(el)\n }\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, combineLatest, pipe } from \"rxjs\"\nimport { map, switchMap } from \"rxjs/operators\"\n\nimport { SearchResult } from \"integrations/search\"\n\nimport { SearchQuery } from \"../query\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search\n */\nexport interface Search {\n query: SearchQuery /* Search query */\n result: SearchResult[] /* Search result list */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n query$: Observable /* Search query observable */\n reset$: Observable /* Search reset observable */\n result$: Observable /* Search result observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountSearch(\n { query$, reset$, result$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(() => combineLatest([query$, result$, reset$])\n .pipe(\n map(([query, result]) => ({ query, result }))\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, combineLatest, fromEvent, merge } from \"rxjs\"\nimport {\n delay,\n distinctUntilChanged,\n map,\n startWith\n} from \"rxjs/operators\"\n\nimport { watchElementFocus } from \"browser\"\n\nimport { SearchQuery } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n transform?(value: string): string /* Transformation function */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Default transformation function\n *\n * Rogue control characters are filtered before handing the query to the\n * search index, as `lunr` will throw otherwise.\n *\n * @param value - Query value\n *\n * @return Transformed query value\n */\nfunction defaultTransform(value: string): string {\n return value\n .replace(/(?:^|\\s+)[*+-:^~]+(?=\\s+|$)/g, \"\")\n .trim()\n .replace(/\\s+|\\b$/g, \"* \")\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch search query\n *\n * Note that the focus event which triggers re-reading the current query value\n * is delayed by `1ms` so the input's empty state is allowed to propagate.\n *\n * @param el - Search query element\n * @param options - Options\n *\n * @return Search query observable\n */\nexport function watchSearchQuery(\n el: HTMLInputElement, { transform }: WatchOptions = {}\n): Observable {\n const fn = transform || defaultTransform\n\n /* Intercept keyboard events */\n const value$ = merge(\n fromEvent(el, \"keyup\"),\n fromEvent(el, \"focus\").pipe(delay(1))\n )\n .pipe(\n map(() => fn(el.value)),\n startWith(fn(el.value)),\n distinctUntilChanged()\n )\n\n /* Intercept focus events */\n const focus$ = watchElementFocus(el)\n\n /* Combine into a single observable */\n return combineLatest([value$, focus$])\n .pipe(\n map(([value, focus]) => ({ value, focus }))\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { OperatorFunction, pipe } from \"rxjs\"\nimport {\n distinctUntilKeyChanged,\n map,\n switchMap\n} from \"rxjs/operators\"\n\nimport { WorkerHandler, setToggle } from \"browser\"\nimport {\n SearchMessage,\n SearchMessageType,\n SearchQueryMessage\n} from \"workers\"\n\nimport { watchSearchQuery } from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search query\n */\nexport interface SearchQuery {\n value: string /* Query value */\n focus: boolean /* Query focus */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n transform?(value: string): string /* Transformation function */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search query from source observable\n *\n * @param handler - Worker handler\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountSearchQuery(\n { tx$ }: WorkerHandler, options: MountOptions = {}\n): OperatorFunction {\n return pipe(\n switchMap(el => {\n const query$ = watchSearchQuery(el, options)\n\n /* Subscribe worker to search query */\n query$\n .pipe(\n distinctUntilKeyChanged(\"value\"),\n map(({ value }): SearchQueryMessage => ({\n type: SearchMessageType.QUERY,\n data: value\n }))\n )\n .subscribe(tx$.next.bind(tx$))\n\n /* Toggle search on focus */\n query$\n .pipe(\n distinctUntilKeyChanged(\"focus\")\n )\n .subscribe(({ focus }) => {\n if (focus)\n setToggle(\"search\", focus)\n })\n\n /* Return search query */\n return query$\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { OperatorFunction, pipe } from \"rxjs\"\nimport {\n mapTo,\n startWith,\n switchMap,\n switchMapTo,\n tap\n} from \"rxjs/operators\"\n\nimport { setElementFocus } from \"browser\"\n\nimport { useComponent } from \"../../../_\"\nimport { watchSearchReset } from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search reset from source observable\n *\n * @return Operator function\n */\nexport function mountSearchReset(): OperatorFunction {\n return pipe(\n switchMap(el => watchSearchReset(el)\n .pipe(\n switchMapTo(useComponent(\"search-query\")),\n tap(setElementFocus),\n mapTo(undefined)\n )\n ),\n startWith(undefined)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent } from \"rxjs\"\nimport { mapTo } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch search reset\n *\n * @param el - Search reset element\n *\n * @return Search reset observable\n */\nexport function watchSearchReset(\n el: HTMLElement\n): Observable {\n return fromEvent(el, \"click\")\n .pipe(\n mapTo(undefined)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { translate } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set number of search results\n *\n * @param el - Search result metadata element\n * @param value - Number of results\n */\nexport function setSearchResultMeta(\n el: HTMLElement, value: number\n): void {\n switch (value) {\n\n /* No results */\n case 0:\n el.textContent = translate(\"search.result.none\")\n break\n\n /* One result */\n case 1:\n el.textContent = translate(\"search.result.one\")\n break\n\n /* Multiple result */\n default:\n el.textContent = translate(\"search.result.other\", value.toString())\n }\n}\n\n/**\n * Reset number of search results\n *\n * @param el - Search result metadata element\n */\nexport function resetSearchResultMeta(\n el: HTMLElement\n): void {\n el.textContent = translate(\"search.result.placeholder\")\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Add an element to the search result list\n *\n * @param el - Search result list element\n * @param child - Search result element\n */\nexport function addToSearchResultList(\n el: HTMLElement, child: HTMLElement\n): void {\n el.appendChild(child)\n}\n\n/**\n * Reset search result list\n *\n * @param el - Search result list element\n */\nexport function resetSearchResultList(\n el: HTMLElement\n): void {\n el.innerHTML = \"\"\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n pipe\n} from \"rxjs\"\nimport {\n finalize,\n map,\n mapTo,\n observeOn,\n scan,\n switchMap,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport { getElementOrThrow } from \"browser\"\nimport { SearchResult } from \"integrations/search\"\nimport { renderSearchResult } from \"templates\"\n\nimport { SearchQuery } from \"../../query\"\nimport {\n addToSearchResultList,\n resetSearchResultList,\n resetSearchResultMeta,\n setSearchResultMeta\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Apply options\n */\ninterface ApplyOptions {\n query$: Observable /* Search query observable */\n fetch$: Observable /* Result fetch observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Apply search results\n *\n * This function will perform a lazy rendering of the search results, depending\n * on the vertical offset of the search result container. When the scroll offset\n * reaches the bottom of the element, more results are fetched and rendered.\n *\n * @param el - Search result element\n * @param options - Options\n *\n * @return Operator function\n */\nexport function applySearchResult(\n el: HTMLElement, { query$, fetch$ }: ApplyOptions\n): MonoTypeOperatorFunction {\n const list = getElementOrThrow(\".md-search-result__list\", el)\n const meta = getElementOrThrow(\".md-search-result__meta\", el)\n return pipe(\n\n /* Apply search result metadata */\n withLatestFrom(query$),\n map(([result, query]) => {\n if (query.value) {\n setSearchResultMeta(meta, result.length)\n } else {\n resetSearchResultMeta(meta)\n }\n return result\n }),\n\n /* Apply search result list */\n switchMap(result => fetch$\n .pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n scan(index => {\n const container = el.parentElement!\n while (index < result.length) {\n addToSearchResultList(list, renderSearchResult(result[index++]))\n if (container.scrollHeight - container.offsetHeight > 16)\n break\n }\n return index\n }, 0),\n\n /* Re-map to search result */\n mapTo(result),\n\n /* Reset on complete or error */\n finalize(() => {\n resetSearchResultList(list)\n })\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { identity } from \"ramda\"\nimport { Observable, OperatorFunction, pipe } from \"rxjs\"\nimport {\n distinctUntilChanged,\n filter,\n map,\n pluck,\n switchMap\n} from \"rxjs/operators\"\n\nimport { WorkerHandler, watchElementOffset } from \"browser\"\nimport { SearchResult } from \"integrations/search\"\nimport {\n SearchMessage,\n isSearchResultMessage\n} from \"workers\"\n\nimport { SearchQuery } from \"../../query\"\nimport { applySearchResult } from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n query$: Observable /* Search query observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search result from source observable\n *\n * @param handler - Worker handler\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountSearchResult(\n { rx$ }: WorkerHandler, { query$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => {\n const container = el.parentElement!\n\n /* Compute whether there are more search results to fetch */\n const fetch$ = watchElementOffset(container)\n .pipe(\n map(({ y }) => {\n return y >= container.scrollHeight - container.offsetHeight - 16\n }),\n distinctUntilChanged(),\n filter(identity)\n )\n\n /* Apply search results */\n return rx$\n .pipe(\n filter(isSearchResultMessage),\n pluck(\"data\"),\n applySearchResult(el, { query$, fetch$ })\n )\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./query\"\nexport * from \"./reset\"\nexport * from \"./result\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, combineLatest, pipe } from \"rxjs\"\nimport {\n distinctUntilChanged,\n filter,\n map,\n shareReplay,\n startWith,\n switchMap,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport {\n Viewport,\n getElement,\n watchViewportAt\n} from \"browser\"\n\nimport { useComponent } from \"../../_\"\nimport {\n applyHeaderType,\n watchHeader\n} from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Header type\n */\nexport type HeaderType =\n | \"site\" /* Header shows site title */\n | \"page\" /* Header shows page title */\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Header\n */\nexport interface Header {\n type: HeaderType /* Header type */\n sticky: boolean /* Header stickyness */\n height: number /* Header visible height */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount header from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountHeader(\n { viewport$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => {\n const header$ = watchHeader(el, { viewport$ })\n\n /* Compute whether the header should switch to page header */\n const type$ = useComponent(\"main\")\n .pipe(\n map(main => getElement(\"h1, h2, h3, h4, h5, h6\", main)!),\n filter(hx => typeof hx !== \"undefined\"),\n withLatestFrom(useComponent(\"header-title\")),\n switchMap(([hx, title]) => watchViewportAt(hx, { header$, viewport$ })\n .pipe(\n map(({ offset: { y } }) => {\n return y >= hx.offsetHeight ? \"page\" : \"site\"\n }),\n distinctUntilChanged(),\n applyHeaderType(title)\n )\n ),\n startWith(\"site\")\n )\n\n /* Combine into single observable */\n return combineLatest([header$, type$])\n .pipe(\n map(([header, type]): Header => ({ type, ...header })),\n shareReplay(1)\n )\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n of,\n pipe\n} from \"rxjs\"\nimport {\n distinctUntilKeyChanged,\n finalize,\n observeOn,\n switchMap,\n tap\n} from \"rxjs/operators\"\n\nimport { Viewport } from \"browser\"\n\nimport { Header, HeaderType } from \"../_\"\nimport {\n resetHeaderTitleActive,\n setHeaderTitleActive\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch header\n *\n * The header is wrapped in an observable to pave the way for auto-hiding or\n * other dynamic behaviors that may be implemented later on.\n *\n * @param el - Header element\n * @param options - Options\n *\n * @return Header observable\n */\nexport function watchHeader(\n el: HTMLElement, { viewport$ }: WatchOptions\n): Observable> {\n return viewport$\n .pipe(\n distinctUntilKeyChanged(\"size\"),\n switchMap(() => {\n const styles = getComputedStyle(el)\n const sticky = [\n \"sticky\", /* Modern browsers */\n \"-webkit-sticky\" /* Old Safari */\n ].includes(styles.position)\n return of({\n sticky,\n height: sticky ? el.offsetHeight : 0\n })\n })\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Apply header title type\n *\n * @param el - Header title element\n *\n * @return Operator function\n */\nexport function applyHeaderType(\n el: HTMLElement\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(type => {\n setHeaderTitleActive(el, type === \"page\")\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n resetHeaderTitleActive(el)\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set header title active\n *\n * @param el - Header title element\n * @param value - Whether the title is shown\n */\nexport function setHeaderTitleActive(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"active\" : \"\")\n}\n\n/**\n * Reset header title active\n *\n * @param el - Header title element\n */\nexport function resetHeaderTitleActive(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, pipe } from \"rxjs\"\nimport { distinctUntilChanged, map, switchMap } from \"rxjs/operators\"\n\nimport { Viewport, watchViewportAt } from \"browser\"\n\nimport { Header } from \"../../header\"\nimport { applyHero } from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Hero\n */\nexport interface Hero {\n hidden: boolean /* Whether the hero is hidden */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount hero from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountHero(\n { header$, viewport$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => watchViewportAt(el, { header$, viewport$ })\n .pipe(\n map(({ offset: { y } }) => ({ hidden: y >= 20 })),\n distinctUntilChanged(),\n applyHero(el)\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n animationFrameScheduler,\n pipe\n} from \"rxjs\"\nimport { finalize, observeOn, tap } from \"rxjs/operators\"\n\nimport { Hero } from \"../_\"\nimport {\n resetHeroHidden,\n setHeroHidden\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Apply hero\n *\n * @param el - Hero element\n *\n * @return Operator function\n */\nexport function applyHero(\n el: HTMLElement\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ hidden }) => {\n setHeroHidden(el, hidden)\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n resetHeroHidden(el)\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set hero hidden\n *\n * @param el - Hero element\n * @param value - Whether the element is hidden\n */\nexport function setHeroHidden(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"hidden\" : \"\")\n}\n\n/**\n * Reset hero hidden\n *\n * @param el - Hero element\n */\nexport function resetHeroHidden(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, Subject, pipe } from \"rxjs\"\nimport { distinctUntilKeyChanged, switchMap, tap } from \"rxjs/operators\"\n\nimport { Viewport } from \"browser\"\n\nimport { useComponent } from \"../../_\"\nimport { Header } from \"../../header\"\nimport {\n applyHeaderShadow,\n watchMain\n} from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Main area\n */\nexport interface Main {\n offset: number /* Main area top offset */\n height: number /* Main area visible height */\n active: boolean /* Scrolled past top offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount main area from source observable\n *\n * The header must be connected to the main area observable outside of the\n * operator function, as the header will persist in-between document switches\n * while the main area is replaced. However, the header observable must be\n * passed to this function, so we connect both via a long-living subject.\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountMain(\n { header$, viewport$ }: MountOptions\n): OperatorFunction {\n const main$ = new Subject
    ()\n\n /* Connect to main area observable via long-living subject */\n useComponent(\"header\")\n .pipe(\n switchMap(header => main$\n .pipe(\n distinctUntilKeyChanged(\"active\"),\n applyHeaderShadow(header)\n )\n )\n )\n .subscribe()\n\n /* Return operator */\n return pipe(\n switchMap(el => watchMain(el, { header$, viewport$ })),\n tap(main => main$.next(main))\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n combineLatest,\n pipe\n} from \"rxjs\"\nimport {\n distinctUntilChanged,\n finalize,\n map,\n observeOn,\n pluck,\n tap\n} from \"rxjs/operators\"\n\nimport { Viewport } from \"browser\"\n\nimport { Header } from \"../../header\"\nimport { Main } from \"../_\"\nimport {\n resetHeaderShadow,\n setHeaderShadow\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch main area\n *\n * This function returns an observable that computes the visual parameters of\n * the main area which depends on the viewport vertical offset and height, as\n * well as the height of the header element, if the header is fixed.\n *\n * @param el - Main area element\n * @param options - Options\n *\n * @return Main area observable\n */\nexport function watchMain(\n el: HTMLElement, { header$, viewport$ }: WatchOptions\n): Observable
    {\n\n /* Compute necessary adjustment for header */\n const adjust$ = header$\n .pipe(\n pluck(\"height\")\n )\n\n /* Compute the main area's visible height */\n const height$ = combineLatest([adjust$, viewport$])\n .pipe(\n map(([adjust, { offset: { y }, size: { height } }]) => {\n const top = el.offsetTop\n const bottom = el.offsetHeight + top\n return height\n - Math.max(0, top - y, adjust)\n - Math.max(0, height + y - bottom)\n }),\n map(height => Math.max(0, height)),\n distinctUntilChanged()\n )\n\n /* Compute whether the viewport offset is past the main area's top */\n const active$ = combineLatest([adjust$, viewport$])\n .pipe(\n map(([adjust, { offset: { y } }]) => y >= el.offsetTop - adjust),\n distinctUntilChanged()\n )\n\n /* Combine into a single observable */\n return combineLatest([adjust$, height$, active$])\n .pipe(\n map(([adjust, height, active]) => ({\n offset: el.offsetTop - adjust,\n height,\n active\n }))\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Apply header shadow\n *\n * @param el - Header element\n *\n * @return Operator function\n */\nexport function applyHeaderShadow(\n el: HTMLElement\n): MonoTypeOperatorFunction
    {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ active }) => {\n setHeaderShadow(el, active)\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n resetHeaderShadow(el)\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set header shadow\n *\n * @param el - Header element\n * @param value - Whether the shadow is shown\n */\nexport function setHeaderShadow(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"shadow\" : \"\")\n}\n\n/**\n * Reset header shadow\n *\n * @param el - Header element\n */\nexport function resetHeaderShadow(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, of, pipe } from \"rxjs\"\nimport { distinctUntilChanged, map, switchMap } from \"rxjs/operators\"\n\nimport { Viewport, watchViewportAt } from \"browser\"\n\nimport { Header } from \"../../header\"\nimport { applyTabs } from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Tabs\n */\nexport interface Tabs {\n hidden: boolean /* Whether the tabs are hidden */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n screen$: Observable /* Media screen observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount tabs from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountTabs(\n { header$, viewport$, screen$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => screen$\n .pipe(\n switchMap(screen => {\n\n /* [screen +]: Mount tabs above screen breakpoint */\n if (screen) {\n return watchViewportAt(el, { header$, viewport$ })\n .pipe(\n map(({ offset: { y } }) => ({ hidden: y >= 10 })),\n distinctUntilChanged(),\n applyTabs(el)\n )\n\n /* [screen -]: Unmount tabs below screen breakpoint */\n } else {\n return of({ hidden: true })\n }\n })\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n animationFrameScheduler,\n pipe\n} from \"rxjs\"\nimport { finalize, observeOn, tap } from \"rxjs/operators\"\n\nimport { Tabs } from \"../_\"\nimport {\n resetTabsHidden,\n setTabsHidden\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Apply tabs\n *\n * @param el - Tabs element\n *\n * @return Operator function\n */\nexport function applyTabs(\n el: HTMLElement\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ hidden }) => {\n setTabsHidden(el, hidden)\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n resetTabsHidden(el)\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set tabs hidden\n *\n * @param el - Tabs element\n * @param value - Whether the element is hidden\n */\nexport function setTabsHidden(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"hidden\" : \"\")\n}\n\n/**\n * Reset tabs hidden\n *\n * @param el - Tabs element\n */\nexport function resetTabsHidden(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { NEVER, Observable, fromEvent, iif, merge } from \"rxjs\"\nimport { map, mapTo, shareReplay, switchMap } from \"rxjs/operators\"\n\nimport { getElements } from \"browser\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Check whether the given device is an Apple device\n *\n * @return Test result\n */\nfunction isAppleDevice(): boolean {\n return /(iPad|iPhone|iPod)/.test(navigator.userAgent)\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch all elements with `data-md-scrollfix` attributes\n *\n * This is a year-old patch which ensures that overflow scrolling works at the\n * top and bottom of containers on iOS by ensuring a `1px` scroll offset upon\n * the start of a touch event.\n *\n * @see https://bit.ly/2SCtAOO - Original source\n *\n * @param options - Options\n */\nexport function patchScrollfix(\n { document$ }: PatchOptions\n): void {\n const els$ = document$\n .pipe(\n map(() => getElements(\"[data-md-scrollfix]\")),\n shareReplay(1)\n )\n\n /* Remove marker attribute, so we'll only add the fix once */\n els$.subscribe(els => {\n for (const el of els)\n el.removeAttribute(\"data-md-scrollfix\")\n })\n\n /* Patch overflow scrolling on touch start */\n iif(isAppleDevice, els$, NEVER)\n .pipe(\n switchMap(els => merge(...els.map(el => (\n fromEvent(el, \"touchstart\")\n .pipe(\n mapTo(el)\n )\n ))))\n )\n .subscribe(el => {\n const top = el.scrollTop\n\n /* We're at the top of the container */\n if (top === 0) {\n el.scrollTop = 1\n\n /* We're at the bottom of the container */\n } else if (top + el.offsetHeight === el.scrollHeight) {\n el.scrollTop = top - 1\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { NEVER, Observable } from \"rxjs\"\nimport { catchError, map, switchMap } from \"rxjs/operators\"\n\nimport { getElementOrThrow, getElements } from \"browser\"\nimport { renderSource } from \"templates\"\nimport { cache, hash } from \"utilities\"\n\nimport { fetchSourceFactsFromGitHub } from \"./github\"\nimport { fetchSourceFactsFromGitLab } from \"./gitlab\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Source facts\n */\nexport type SourceFacts = string[]\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch source facts\n *\n * @param url - Source repository URL\n *\n * @return Source facts observable\n */\nfunction fetchSourceFacts(\n url: string\n): Observable {\n const [type] = url.match(/(git(?:hub|lab))/i) || []\n switch (type.toLowerCase()) {\n\n /* GitHub repository */\n case \"github\":\n const [, user, repo] = url.match(/^.+github\\.com\\/([^\\/]+)\\/?([^\\/]+)/i)\n return fetchSourceFactsFromGitHub(user, repo)\n\n /* GitLab repository */\n case \"gitlab\":\n const [, base, project] = url.match(/^.+?([^\\/]*gitlab[^\\/]+)\\/(.+)/i)\n return fetchSourceFactsFromGitLab(base, project)\n\n /* Everything else */\n default:\n return NEVER\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch elements containing repository information\n *\n * This function will retrieve the URL from the repository link and try to\n * query data from integrated source code platforms like GitHub or GitLab.\n *\n * @param options - Options\n */\nexport function patchSource(\n { document$ }: PatchOptions\n): void {\n document$\n .pipe(\n map(() => getElementOrThrow(\".md-source[href]\")),\n switchMap(({ href }) => (\n cache(`${hash(href)}`, () => fetchSourceFacts(href))\n )),\n catchError(() => NEVER)\n )\n .subscribe(facts => {\n for (const el of getElements(\".md-source__repository\")) {\n if (!el.hasAttribute(\"data-md-state\")) {\n el.setAttribute(\"data-md-state\", \"done\")\n el.appendChild(renderSource(facts))\n }\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Repo, User } from \"github-types\"\nimport { Observable, of } from \"rxjs\"\nimport { ajax } from \"rxjs/ajax\"\nimport { filter, pluck, switchMap } from \"rxjs/operators\"\n\nimport { round } from \"utilities\"\n\nimport { SourceFacts } from \"..\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch GitHub source facts\n *\n * @param user - GitHub user\n * @param repo - GitHub repository\n *\n * @return Source facts observable\n */\nexport function fetchSourceFactsFromGitHub(\n user: string, repo?: string\n): Observable {\n return ajax({\n url: typeof repo !== \"undefined\"\n ? `https://api.github.com/repos/${user}/${repo}`\n : `https://api.github.com/users/${user}`,\n responseType: \"json\"\n })\n .pipe(\n filter(({ status }) => status === 200),\n pluck(\"response\"),\n switchMap(data => {\n\n /* GitHub repository */\n if (typeof repo !== \"undefined\") {\n const { stargazers_count, forks_count }: Repo = data\n return of([\n `${round(stargazers_count || 0)} Stars`,\n `${round(forks_count || 0)} Forks`\n ])\n\n /* GitHub user/organization */\n } else {\n const { public_repos }: User = data\n return of([\n `${round(public_repos || 0)} Repositories`\n ])\n }\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { ProjectSchema } from \"gitlab\"\nimport { Observable } from \"rxjs\"\nimport { ajax } from \"rxjs/ajax\"\nimport { filter, map, pluck } from \"rxjs/operators\"\n\nimport { round } from \"utilities\"\n\nimport { SourceFacts } from \"..\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch GitLab source facts\n *\n * @param base - GitLab base\n * @param project - GitLab project\n *\n * @return Source facts observable\n */\nexport function fetchSourceFactsFromGitLab(\n base: string, project: string\n): Observable {\n return ajax({\n url: `https://${base}/api/v4/projects/${encodeURIComponent(project)}`,\n responseType: \"json\"\n })\n .pipe(\n filter(({ status }) => status === 200),\n pluck(\"response\"),\n map(({ star_count, forks_count }: ProjectSchema) => ([\n `${round(star_count)} Stars`,\n `${round(forks_count)} Forks`\n ]))\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n// TODO: remove this after we finished refactoring\n// tslint:disable\n\nimport \"../stylesheets/main.scss\"\nimport \"../stylesheets/palette.scss\"\n\nimport { values } from \"ramda\"\nimport {\n merge,\n combineLatest,\n animationFrameScheduler,\n fromEvent,\n of,\n NEVER,\n from\n} from \"rxjs\"\nimport {\n delay,\n switchMap,\n tap,\n filter,\n withLatestFrom,\n observeOn,\n take,\n shareReplay,\n share\n} from \"rxjs/operators\"\n\nimport {\n watchToggle,\n setToggle,\n getElements,\n watchMedia,\n watchDocument,\n watchLocation,\n watchLocationHash,\n watchViewport,\n isLocationInternal,\n isLocationAnchor\n} from \"./browser\"\nimport { setupSearchWorker } from \"./workers\"\n\nimport {\n mountHeader,\n mountHero,\n mountMain,\n mountNavigation,\n mountSearch,\n mountTableOfContents,\n mountTabs,\n useComponent,\n setupComponents,\n mountSearchQuery,\n mountSearchReset,\n mountSearchResult\n} from \"components\"\nimport { setupClipboard } from \"./integrations/clipboard\"\nimport { setupDialog } from \"integrations/dialog\"\nimport { setupKeyboard } from \"./integrations/keyboard\"\nimport { setupInstantLoading } from \"integrations/instant\"\nimport {\n patchTables,\n patchDetails,\n patchScrollfix,\n patchSource,\n patchScripts\n} from \"patches\"\nimport { isConfig } from \"utilities\"\n\n/* ------------------------------------------------------------------------- */\n\ndocument.documentElement.classList.remove(\"no-js\")\ndocument.documentElement.classList.add(\"js\")\n\n/* Test for iOS */\nif (navigator.userAgent.match(/(iPad|iPhone|iPod)/g))\n document.documentElement.classList.add(\"ios\")\n\n/**\n * Set scroll lock\n *\n * @param el - Scrollable element\n * @param value - Vertical offset\n */\nexport function setScrollLock(\n el: HTMLElement, value: number\n): void {\n el.setAttribute(\"data-md-state\", \"lock\")\n el.style.top = `-${value}px`\n}\n\n/**\n * Reset scroll lock\n *\n * @param el - Scrollable element\n */\nexport function resetScrollLock(\n el: HTMLElement\n): void {\n const value = -1 * parseInt(el.style.top, 10)\n el.removeAttribute(\"data-md-state\")\n el.style.top = \"\"\n if (value)\n window.scrollTo(0, value)\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Initialize Material for MkDocs\n *\n * @param config - Configuration\n */\nexport function initialize(config: unknown) {\n if (!isConfig(config))\n throw new SyntaxError(`Invalid configuration: ${JSON.stringify(config)}`)\n\n /* Setup user interface observables */\n const location$ = watchLocation()\n const hash$ = watchLocationHash()\n const viewport$ = watchViewport()\n const tablet$ = watchMedia(\"(min-width: 960px)\")\n const screen$ = watchMedia(\"(min-width: 1220px)\")\n\n /* Setup document observable */\n const document$ = config.features.includes(\"instant\")\n ? watchDocument({ location$ })\n : watchDocument()\n\n /* Setup component bindings */\n setupComponents([\n \"container\", /* Container */\n \"header\", /* Header */\n \"header-title\", /* Header title */\n \"hero\", /* Hero */\n \"main\", /* Main area */\n \"navigation\", /* Navigation */\n \"search\", /* Search */\n \"search-query\", /* Search input */\n \"search-reset\", /* Search reset */\n \"search-result\", /* Search results */\n \"skip\", /* Skip link */\n \"tabs\", /* Tabs */\n \"toc\" /* Table of contents */\n ], { document$ })\n\n /* ----------------------------------------------------------------------- */\n\n // External index\n const index = config.search && config.search.index\n ? config.search.index\n : undefined\n\n // TODO: pass URL config as first parameter, options as second\n const worker = setupSearchWorker(config.url.worker.search, {\n base: config.url.base, index, location$\n })\n\n /* ----------------------------------------------------------------------- */\n\n /* Create header observable */\n const header$ = useComponent(\"header\")\n .pipe(\n mountHeader({ viewport$ }),\n shareReplay(1)\n )\n\n const main$ = useComponent(\"main\")\n .pipe(\n mountMain({ header$, viewport$ }),\n shareReplay(1)\n )\n\n /* ----------------------------------------------------------------------- */\n\n /* Mount search query */\n const query$ = useComponent(\"search-query\")\n .pipe(\n mountSearchQuery(worker),\n shareReplay(1)\n )\n\n /* Mount search reset */\n const reset$ = useComponent(\"search-reset\")\n .pipe(\n mountSearchReset(),\n shareReplay(1)\n )\n\n /* Mount search result */\n const result$ = useComponent(\"search-result\")\n .pipe(\n mountSearchResult(worker, { query$ }),\n shareReplay(1)\n )\n\n /* ----------------------------------------------------------------------- */\n\n const search$ = useComponent(\"search\")\n .pipe(\n mountSearch({ query$, reset$, result$ }),\n shareReplay(1)\n )\n\n /* ----------------------------------------------------------------------- */\n\n const navigation$ = useComponent(\"navigation\")\n .pipe(\n mountNavigation({ header$, main$, viewport$, screen$ }),\n shareReplay(1) // shareReplay because there might be late subscribers\n )\n\n const toc$ = useComponent(\"toc\")\n .pipe(\n mountTableOfContents({ header$, main$, viewport$, tablet$ }),\n shareReplay(1)\n )\n\n const tabs$ = useComponent(\"tabs\")\n .pipe(\n mountTabs({ header$, viewport$, screen$ }),\n shareReplay(1)\n )\n\n const hero$ = useComponent(\"hero\")\n .pipe(\n mountHero({ header$, viewport$ }),\n shareReplay(1)\n )\n\n /* ----------------------------------------------------------------------- */\n\n const keyboard$ = setupKeyboard()\n\n patchDetails({ document$, hash$ })\n patchScripts({ document$ })\n patchSource({ document$ })\n patchTables({ document$ })\n\n /* Force 1px scroll offset to trigger overflow scrolling */\n patchScrollfix({ document$ })\n\n /* Setup clipboard and dialog */\n const dialog$ = setupDialog()\n const clipboard$ = setupClipboard({ document$, dialog$ })\n\n /* ----------------------------------------------------------------------- */\n\n // // put into search...\n // hash$\n // .pipe(\n // switchMap(hash => useToggle(\"search\")\n // .pipe(\n // filter(x => x.checked), // only active\n // tap(toggle => setToggle(toggle, false)),\n // delay(125), // ensure that it runs after the body scroll reset...\n // mapTo(hash)\n // )\n // )\n // )\n // .subscribe(hash => {\n // getElement(`[id=\"${hash}\"]`)!.scrollIntoView()\n // })\n\n // Scroll lock // document -> document$ => { body } !?\n // put into search...\n combineLatest([\n watchToggle(\"search\"),\n tablet$,\n ])\n .pipe(\n withLatestFrom(viewport$),\n switchMap(([[toggle, tablet], { offset: { y }}]) => {\n const active = toggle && !tablet\n return document$\n .pipe(\n delay(active ? 400 : 100), // TOOD: directly combine this with the hash!\n observeOn(animationFrameScheduler),\n tap(({ body }) => active\n ? setScrollLock(body, y)\n : resetScrollLock(body)\n )\n )\n })\n )\n .subscribe()\n\n /* ----------------------------------------------------------------------- */\n\n /* Intercept internal link clicks */\n const link$ = fromEvent(document.body, \"click\")\n .pipe(\n filter(ev => !(ev.metaKey || ev.ctrlKey)),\n switchMap(ev => {\n if (ev.target instanceof HTMLElement) {\n const el = ev.target.closest(\"a\") // TODO: abstract as link click?\n if (el && isLocationInternal(el)) {\n if (!isLocationAnchor(el))\n ev.preventDefault()\n return of(el)\n }\n }\n return NEVER\n }),\n share()\n )\n\n /* Always close drawer on click */\n link$.subscribe(() => {\n setToggle(\"drawer\", false)\n })\n\n // somehow call this setupNavigation ?\n\n // instant loading\n if (config.features.includes(\"instant\")) {\n\n /* Disable automatic scroll restoration, as it doesn't work nicely */\n if (\"scrollRestoration\" in history)\n history.scrollRestoration = \"manual\"\n\n /* Resolve relative links for stability */\n for (const selector of [\n `link[rel=\"shortcut icon\"]`,\n `link[rel=\"stylesheet\"]`\n ])\n for (const el of getElements(selector))\n el.href = el.href\n\n setupInstantLoading({\n document$, link$, location$, viewport$\n })\n\n }\n\n /* ----------------------------------------------------------------------- */\n\n // if we use a single tab outside of search, unhide all permalinks.\n // TODO: experimental. necessary!?\n keyboard$\n .pipe(\n filter(key => key.mode === \"global\" && [\"Tab\"].includes(key.type)),\n take(1)\n )\n .subscribe(() => {\n for (const link of getElements(\".headerlink\"))\n link.style.visibility = \"visible\"\n })\n\n /* ----------------------------------------------------------------------- */\n\n const state = {\n\n /* Browser observables */\n document$,\n viewport$,\n\n /* Component observables */\n header$,\n hero$,\n main$,\n navigation$,\n search$,\n tabs$,\n toc$,\n\n /* Integation observables */\n clipboard$,\n keyboard$,\n dialog$\n }\n\n /* Subscribe to all observables */\n merge(...values(state))\n .subscribe()\n return state\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable } from \"rxjs\"\nimport {\n filter,\n map,\n share,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport {\n Key,\n getActiveElement,\n getElement,\n getElements,\n getToggle,\n isSusceptibleToKeyboard,\n setElementFocus,\n setElementSelection,\n setToggle,\n watchKeyboard\n} from \"browser\"\nimport { useComponent } from \"components\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Keyboard mode\n */\nexport type KeyboardMode =\n | \"global\" /* Global */\n | \"search\" /* Search is open */\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Keyboard\n */\nexport interface Keyboard extends Key {\n mode: KeyboardMode /* Keyboard mode */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup keyboard\n *\n * This function will setup the keyboard handlers and ensure that keys are\n * correctly propagated. Currently there are two modes:\n *\n * - `global`: This mode is active when the search is closed. It is intended\n * to assign hotkeys to specific functions of the site. Currently the search,\n * previous and next page can be triggered.\n *\n * - `search`: This mode is active when the search is open. It maps certain\n * navigational keys to offer search results that can be entirely navigated\n * through keyboard input.\n *\n * The keyboard observable is returned and can be used to monitor the keyboard\n * in order toassign further hotkeys to custom functions.\n *\n * @return Keyboard observable\n */\nexport function setupKeyboard(): Observable {\n const keyboard$ = watchKeyboard()\n .pipe(\n map(key => ({\n mode: getToggle(\"search\") ? \"search\" : \"global\",\n ...key\n })),\n share()\n )\n\n /* Setup search keyboard handlers */\n keyboard$\n .pipe(\n filter(({ mode }) => mode === \"search\"),\n withLatestFrom(\n useComponent(\"search-query\"),\n useComponent(\"search-result\")\n )\n )\n .subscribe(([key, query, result]) => {\n const active = getActiveElement()\n switch (key.type) {\n\n /* Enter: prevent form submission */\n case \"Enter\":\n if (active === query)\n key.claim()\n break\n\n /* Escape or Tab: close search */\n case \"Escape\":\n case \"Tab\":\n setToggle(\"search\", false)\n setElementFocus(query, false)\n break\n\n /* Vertical arrows: select previous or next search result */\n case \"ArrowUp\":\n case \"ArrowDown\":\n if (typeof active === \"undefined\") {\n setElementFocus(query)\n } else {\n const els = [query, ...getElements(\"[href]\", result)]\n const i = Math.max(0, (\n Math.max(0, els.indexOf(active)) + els.length + (\n key.type === \"ArrowUp\" ? -1 : +1\n )\n ) % els.length)\n setElementFocus(els[i])\n }\n\n /* Prevent scrolling of page */\n key.claim()\n break\n\n /* All other keys: hand to search query */\n default:\n if (query !== getActiveElement())\n setElementFocus(query)\n }\n })\n\n /* Setup global keyboard handlers */\n keyboard$\n .pipe(\n filter(({ mode }) => {\n if (mode === \"global\") {\n const active = getActiveElement()\n if (typeof active !== \"undefined\")\n return !isSusceptibleToKeyboard(active)\n }\n return false\n }),\n withLatestFrom(useComponent(\"search-query\"))\n )\n .subscribe(([key, query]) => {\n switch (key.type) {\n\n /* Open search and select query */\n case \"f\":\n case \"s\":\n setElementFocus(query)\n setElementSelection(query)\n key.claim()\n break\n\n /* Go to previous page */\n case \"p\":\n case \",\":\n const prev = getElement(\"[href][rel=prev]\")\n if (typeof prev !== \"undefined\")\n prev.click()\n break\n\n /* Go to next page */\n case \"n\":\n case \".\":\n const next = getElement(\"[href][rel=next]\")\n if (typeof next !== \"undefined\")\n next.click()\n break\n }\n })\n\n /* Return keyboard */\n return keyboard$\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { identity } from \"ramda\"\nimport { Observable, fromEvent, merge } from \"rxjs\"\nimport {\n filter,\n map,\n switchMapTo,\n tap\n} from \"rxjs/operators\"\n\nimport {\n getElement,\n getElements,\n watchMedia\n} from \"browser\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n document$: Observable /* Document observable */\n hash$: Observable /* Location hash observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch all `details` elements\n *\n * This function will ensure that all `details` tags are opened prior to\n * printing, so the whole content of the page is included, and on anchor jumps.\n *\n * @param options - Options\n */\nexport function patchDetails(\n { document$, hash$ }: PatchOptions\n): void {\n const els$ = document$\n .pipe(\n map(() => getElements(\"details\"))\n )\n\n /* Open all details before printing */\n merge(\n watchMedia(\"print\").pipe(filter(identity)), /* Webkit */\n fromEvent(window, \"beforeprint\") /* IE, FF */\n )\n .pipe(\n switchMapTo(els$)\n )\n .subscribe(els => {\n for (const el of els)\n el.setAttribute(\"open\", \"\")\n })\n\n /* Open parent details and fix anchor jump */\n hash$\n .pipe(\n map(id => getElement(`[id=\"${id}\"]`)!),\n filter(el => typeof el !== \"undefined\"),\n tap(el => {\n const details = el.closest(\"details\")\n if (details && !details.open)\n details.setAttribute(\"open\", \"\")\n })\n )\n .subscribe(el => el.scrollIntoView())\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable } from \"rxjs\"\nimport { map, skip, withLatestFrom } from \"rxjs/operators\"\n\nimport { getElements } from \"browser\"\nimport { useComponent } from \"components\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch all `script` elements\n *\n * This function must be run after a document switch, which means the first\n * emission must be ignored.\n *\n * @param options - Options\n */\nexport function patchScripts(\n { document$ }: PatchOptions\n): void {\n const els$ = document$\n .pipe(\n skip(1),\n withLatestFrom(useComponent(\"container\")),\n map(([, el]) => getElements(\"script\", el))\n )\n\n /* Evaluate all scripts via replacement */\n els$.subscribe(els => {\n for (const el of els) {\n if (el.src || /(^|\\/javascript)$/i.test(el.type)) {\n const script = document.createElement(\"script\")\n const key = el.src ? \"src\" : \"innerText\"\n script[key] = el[key]\n el.replaceWith(script)\n }\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable } from \"rxjs\"\nimport { map } from \"rxjs/operators\"\n\nimport { getElements } from \"browser\"\nimport { renderTable } from \"templates\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch all `table` elements\n *\n * This function will re-render all tables by wrapping them to improve overflow\n * scrolling on smaller screen sizes.\n *\n * @param options - Options\n */\nexport function patchTables(\n { document$ }: MountOptions\n): void {\n const sentinel = document.createElement(\"table\")\n document$\n .pipe(\n map(() => getElements(\"table:not([class])\"))\n )\n .subscribe(els => {\n for (const el of els) {\n el.replaceWith(sentinel)\n sentinel.replaceWith(renderTable(el))\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Subject, animationFrameScheduler, of } from \"rxjs\"\nimport {\n delay,\n map,\n observeOn,\n switchMap,\n tap\n} from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n duration?: number /* Display duration (default: 2s) */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup dialog\n *\n * @param options - Options\n *\n * @return Dialog observable\n */\nexport function setupDialog(\n { duration }: SetupOptions = {}\n): Subject {\n const dialog$ = new Subject()\n\n /* Create dialog */\n const dialog = document.createElement(\"div\") // TODO: improve scoping\n dialog.classList.add(\"md-dialog\", \"md-typeset\")\n\n /* Display dialog */\n dialog$\n .pipe(\n switchMap(text => of(document.body) // useComponent(\"container\")\n .pipe(\n map(container => container.appendChild(dialog)),\n observeOn(animationFrameScheduler),\n delay(1), // Strangley it doesnt work when we push things to the new animation frame...\n tap(el => {\n el.innerHTML = text\n el.setAttribute(\"data-md-state\", \"open\")\n }),\n delay(duration || 2000),\n tap(el => el.removeAttribute(\"data-md-state\")),\n delay(400),\n tap(el => {\n el.innerHTML = \"\"\n el.remove()\n })\n )\n )\n )\n .subscribe()\n\n /* Return dialog subject */\n return dialog$\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport * as ClipboardJS from \"clipboard\"\nimport { NEVER, Observable, Subject, fromEventPattern } from \"rxjs\"\nimport { mapTo, share, tap } from \"rxjs/operators\"\n\nimport { getElements } from \"browser\"\nimport { renderClipboard } from \"templates\"\nimport { translate } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n document$: Observable /* Document observable */\n dialog$: Subject /* Dialog subject */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup clipboard\n *\n * This function implements the Clipboard.js integration and injects a button\n * into all code blocks when the document changes.\n *\n * @param options - Options\n *\n * @return Clipboard observable\n */\nexport function setupClipboard(\n { document$, dialog$ }: SetupOptions\n): Observable {\n if (!ClipboardJS.isSupported())\n return NEVER\n\n /* Inject 'copy-to-clipboard' buttons */\n document$.subscribe(() => {\n const blocks = getElements(\"pre > code\")\n blocks.forEach((block, index) => {\n const parent = block.parentElement!\n parent.id = `__code_${index}`\n parent.insertBefore(renderClipboard(parent.id), block)\n })\n })\n\n /* Initialize and setup clipboard */\n const clipboard$ = fromEventPattern(next => {\n new ClipboardJS(\".md-clipboard\").on(\"success\", next)\n })\n .pipe(\n share()\n )\n\n /* Display notification for clipboard event */\n clipboard$\n .pipe(\n tap(ev => ev.clearSelection()),\n mapTo(translate(\"clipboard.copied\"))\n )\n .subscribe(dialog$)\n\n /* Return clipboard */\n return clipboard$\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, Subject, fromEvent, merge } from \"rxjs\"\nimport {\n bufferCount,\n debounceTime,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n filter,\n map,\n pluck,\n sample,\n share,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport {\n Viewport,\n ViewportOffset,\n getElement,\n isLocationAnchor,\n setLocationHash,\n setViewportOffset\n} from \"browser\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * History state\n */\ninterface State {\n url: URL /* State URL */\n offset?: ViewportOffset /* State viewport offset */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n document$: Observable /* Document observable */\n viewport$: Observable /* Viewport observable */\n link$: Observable /* Internal link observable */\n location$: Subject /* Location subject */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup instant loading\n *\n * @param options - Options\n *\n * @return TODO ?\n */\nexport function setupInstantLoading(\n { document$, viewport$, link$, location$ }: SetupOptions\n) { // TODO: add return type\n const state$ = link$\n .pipe(\n map(el => ({ url: new URL(el.href) })),\n share()\n )\n\n /* Intercept internal links to dispatch */\n const push$ = state$\n .pipe(\n distinctUntilChanged((prev, next) => prev.url.href === next.url.href),\n filter(({ url }) => !isLocationAnchor(url)),\n share()\n )\n\n /* Intercept popstate events (history back and forward) */\n const pop$ = fromEvent(window, \"popstate\")\n .pipe(\n filter(ev => ev.state !== null),\n map(ev => ({\n url: new URL(location.href),\n offset: ev.state\n })),\n share()\n )\n\n /* Emit location change */\n merge(push$, pop$)\n .pipe(\n pluck(\"url\")\n )\n .subscribe(location$)\n\n /* History: dispatch internal link */\n push$.subscribe(({ url }) => {\n history.pushState({}, \"\", url.toString())\n })\n\n /* History: debounce update of viewport offset */\n viewport$\n .pipe(\n debounceTime(250),\n distinctUntilKeyChanged(\"offset\")\n )\n .subscribe(({ offset }) => {\n history.replaceState(offset, \"\")\n })\n\n /* Apply viewport offset from history */\n merge(state$, pop$)\n .pipe(\n bufferCount(2, 1),\n filter(([prev, next]) => {\n return prev.url.pathname === next.url.pathname\n && !isLocationAnchor(next.url)\n }),\n map(([, state]) => state)\n )\n .subscribe(({ offset }) => {\n setViewportOffset(offset || { y: 0 })\n })\n\n /* Intercept actual instant loading */\n const instant$ = merge(push$, pop$)\n .pipe(\n sample(document$)\n )\n\n // TODO: from here on, everything is beta.... ###############################\n\n instant$.subscribe(({ url, offset }) => {\n if (url.hash && !offset) {\n console.log(\"set hash!\")\n setLocationHash(url.hash) // must delay, if search is open!\n } else {\n setViewportOffset(offset || { y: 0 })\n }\n })\n\n instant$\n .pipe(\n withLatestFrom(document$)\n )\n .subscribe(([, { title, head }]) => {\n document.dispatchEvent(new CustomEvent(\"DOMContentSwitch\"))\n document.title = title\n\n /* Replace meta tags */\n for (const selector of [\n `link[rel=\"canonical\"]`,\n `meta[name=\"author\"]`,\n `meta[name=\"description\"]`\n ]) {\n const next = getElement(selector, head)\n const prev = getElement(selector, document.head)\n if (\n typeof next !== \"undefined\" &&\n typeof prev !== \"undefined\"\n ) {\n prev.replaceWith(next)\n }\n }\n })\n}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/material/assets/javascripts/bundle.js b/material/assets/javascripts/bundle.js new file mode 100644 index 000000000..3dfbbd3b0 --- /dev/null +++ b/material/assets/javascripts/bundle.js @@ -0,0 +1,7560 @@ +(function(e, a) { for(var i in a) e[i] = a[i]; }(window, /******/ (function(modules) { // webpackBootstrap +/******/ // install a JSONP callback for chunk loading +/******/ function webpackJsonpCallback(data) { +/******/ var chunkIds = data[0]; +/******/ var moreModules = data[1]; +/******/ var executeModules = data[2]; +/******/ +/******/ // add "moreModules" to the modules object, +/******/ // then flag all "chunkIds" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0, resolves = []; +/******/ for(;i < chunkIds.length; i++) { +/******/ chunkId = chunkIds[i]; +/******/ if(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) { +/******/ resolves.push(installedChunks[chunkId][0]); +/******/ } +/******/ installedChunks[chunkId] = 0; +/******/ } +/******/ for(moduleId in moreModules) { +/******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) { +/******/ modules[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(parentJsonpFunction) parentJsonpFunction(data); +/******/ +/******/ while(resolves.length) { +/******/ resolves.shift()(); +/******/ } +/******/ +/******/ // add entry modules from loaded chunk to deferred list +/******/ deferredModules.push.apply(deferredModules, executeModules || []); +/******/ +/******/ // run deferred modules when all chunks ready +/******/ return checkDeferredModules(); +/******/ }; +/******/ function checkDeferredModules() { +/******/ var result; +/******/ for(var i = 0; i < deferredModules.length; i++) { +/******/ var deferredModule = deferredModules[i]; +/******/ var fulfilled = true; +/******/ for(var j = 1; j < deferredModule.length; j++) { +/******/ var depId = deferredModule[j]; +/******/ if(installedChunks[depId] !== 0) fulfilled = false; +/******/ } +/******/ if(fulfilled) { +/******/ deferredModules.splice(i--, 1); +/******/ result = __webpack_require__(__webpack_require__.s = deferredModule[0]); +/******/ } +/******/ } +/******/ +/******/ return result; +/******/ } +/******/ +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // Promise = chunk loading, 0 = chunk loaded +/******/ var installedChunks = { +/******/ "assets/javascripts/bundle": 0 +/******/ }; +/******/ +/******/ var deferredModules = []; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ var jsonpArray = window["webpackJsonp"] = window["webpackJsonp"] || []; +/******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray); +/******/ jsonpArray.push = webpackJsonpCallback; +/******/ jsonpArray = jsonpArray.slice(); +/******/ for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]); +/******/ var parentJsonpFunction = oldJsonpFunction; +/******/ +/******/ +/******/ // add entry module to deferred list +/******/ deferredModules.push(["./src/assets/javascripts/index.ts","assets/javascripts/vendor"]); +/******/ // run deferred modules when ready +/******/ return checkDeferredModules(); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ "./src/assets/javascripts/browser/document/_/index.ts": +/*!************************************************************!*\ + !*** ./src/assets/javascripts/browser/document/_/index.ts ***! + \************************************************************/ +/*! exports provided: watchDocument */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchDocument", function() { return watchDocument; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var _switch__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../switch */ "./src/assets/javascripts/browser/document/switch/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Watch document + * + * If the location observable is passed, instant loading will be enabled which + * means that new values will be emitted every time the location changes. + * + * @return Document observable + */ +function watchDocument(_a) { + var location$ = (_a === void 0 ? {} : _a).location$; + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["merge"])(Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["fromEvent"])(document, "DOMContentLoaded") + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["mapTo"])(document)), typeof location$ !== "undefined" + ? Object(_switch__WEBPACK_IMPORTED_MODULE_2__["watchDocumentSwitch"])({ location$: location$ }) + : rxjs__WEBPACK_IMPORTED_MODULE_0__["NEVER"]) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["shareReplay"])(1)); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/browser/document/index.ts": +/*!**********************************************************!*\ + !*** ./src/assets/javascripts/browser/document/index.ts ***! + \**********************************************************/ +/*! exports provided: watchDocument, watchDocumentSwitch */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/browser/document/_/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchDocument", function() { return ___WEBPACK_IMPORTED_MODULE_0__["watchDocument"]; }); + +/* harmony import */ var _switch__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./switch */ "./src/assets/javascripts/browser/document/switch/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchDocumentSwitch", function() { return _switch__WEBPACK_IMPORTED_MODULE_1__["watchDocumentSwitch"]; }); + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + +/***/ }), + +/***/ "./src/assets/javascripts/browser/document/switch/index.ts": +/*!*****************************************************************!*\ + !*** ./src/assets/javascripts/browser/document/switch/index.ts ***! + \*****************************************************************/ +/*! exports provided: watchDocumentSwitch */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchDocumentSwitch", function() { return watchDocumentSwitch; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_ajax__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/ajax */ "./node_modules/rxjs/_esm5/ajax/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var _location__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../location */ "./src/assets/javascripts/browser/location/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Watch document switch + * + * This function returns an observables that fetches a document if the provided + * location observable emits a new value (i.e. URL). If the emitted URL points + * to the same page, the request is effectively ignored (i.e. when only the + * fragment identifier changes). + * + * In case the request fails, the location change is dispatched regularly. + * + * @param options - Options + * + * @return Document observable + */ +function watchDocumentSwitch(_a) { + var location$ = _a.location$; + return location$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["distinctUntilKeyChanged"])("pathname"), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["skip"])(1), + /* Fetch document */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])(function (url) { return Object(rxjs_ajax__WEBPACK_IMPORTED_MODULE_1__["ajax"])({ + url: url.href, + responseType: "document", + withCredentials: true + }) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["pluck"])("response"), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["catchError"])(function () { + Object(_location__WEBPACK_IMPORTED_MODULE_3__["setLocation"])(url); + return rxjs__WEBPACK_IMPORTED_MODULE_0__["NEVER"]; + })); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["share"])()); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/browser/element/_/index.ts": +/*!***********************************************************!*\ + !*** ./src/assets/javascripts/browser/element/_/index.ts ***! + \***********************************************************/ +/*! exports provided: getElement, getElementOrThrow, getActiveElement, getElements */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getElement", function() { return getElement; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getElementOrThrow", function() { return getElementOrThrow; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getActiveElement", function() { return getActiveElement; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getElements", function() { return getElements; }); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Retrieve an element matching the query selector + * + * @template T - Element type + * + * @param selector - Query selector + * @param node - Node of reference + * + * @return Element or nothing + */ +function getElement(selector, node) { + if (node === void 0) { node = document; } + return node.querySelector(selector) || undefined; +} +/** + * Retrieve an element matching a query selector or throw a reference error + * + * @template T - Element type + * + * @param selector - Query selector + * @param node - Node of reference + * + * @return Element + */ +function getElementOrThrow(selector, node) { + if (node === void 0) { node = document; } + var el = getElement(selector, node); + if (typeof el === "undefined") + throw new ReferenceError("Missing element: expected \"" + selector + "\" to be present"); + return el; +} +/** + * Retrieve the currently active element + * + * @return Element or nothing + */ +function getActiveElement() { + return document.activeElement instanceof HTMLElement + ? document.activeElement + : undefined; +} +/** + * Retrieve all elements matching the query selector + * + * @template T - Element type + * + * @param selector - Query selector + * @param node - Node of reference + * + * @return Elements + */ +function getElements(selector, node) { + if (node === void 0) { node = document; } + return Array.from(node.querySelectorAll(selector)); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/browser/element/focus/index.ts": +/*!***************************************************************!*\ + !*** ./src/assets/javascripts/browser/element/focus/index.ts ***! + \***************************************************************/ +/*! exports provided: setElementFocus, watchElementFocus */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setElementFocus", function() { return setElementFocus; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchElementFocus", function() { return watchElementFocus; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../_ */ "./src/assets/javascripts/browser/element/_/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Set element focus + * + * @param el - Element + * @param value - Whether the element should be focused + */ +function setElementFocus(el, value) { + if (value === void 0) { value = true; } + if (value) + el.focus(); + else + el.blur(); +} +/* ------------------------------------------------------------------------- */ +/** + * Watch element focus + * + * @param el - Element + * + * @return Element focus observable + */ +function watchElementFocus(el) { + var focus$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["fromEvent"])(el, "focus"); + var blur$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["fromEvent"])(el, "blur"); + /* Map events to boolean state */ + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["merge"])(focus$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["mapTo"])(true)), blur$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["mapTo"])(false))) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["startWith"])(el === Object(___WEBPACK_IMPORTED_MODULE_2__["getActiveElement"])()), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["shareReplay"])(1)); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/browser/element/index.ts": +/*!*********************************************************!*\ + !*** ./src/assets/javascripts/browser/element/index.ts ***! + \*********************************************************/ +/*! exports provided: getElement, getElementOrThrow, getActiveElement, getElements, setElementFocus, watchElementFocus, getElementOffset, watchElementOffset, setElementSelection */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/browser/element/_/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getElement", function() { return ___WEBPACK_IMPORTED_MODULE_0__["getElement"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getElementOrThrow", function() { return ___WEBPACK_IMPORTED_MODULE_0__["getElementOrThrow"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getActiveElement", function() { return ___WEBPACK_IMPORTED_MODULE_0__["getActiveElement"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getElements", function() { return ___WEBPACK_IMPORTED_MODULE_0__["getElements"]; }); + +/* harmony import */ var _focus__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./focus */ "./src/assets/javascripts/browser/element/focus/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setElementFocus", function() { return _focus__WEBPACK_IMPORTED_MODULE_1__["setElementFocus"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchElementFocus", function() { return _focus__WEBPACK_IMPORTED_MODULE_1__["watchElementFocus"]; }); + +/* harmony import */ var _offset__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./offset */ "./src/assets/javascripts/browser/element/offset/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getElementOffset", function() { return _offset__WEBPACK_IMPORTED_MODULE_2__["getElementOffset"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchElementOffset", function() { return _offset__WEBPACK_IMPORTED_MODULE_2__["watchElementOffset"]; }); + +/* harmony import */ var _select__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./select */ "./src/assets/javascripts/browser/element/select/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setElementSelection", function() { return _select__WEBPACK_IMPORTED_MODULE_3__["setElementSelection"]; }); + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + + +/***/ }), + +/***/ "./src/assets/javascripts/browser/element/offset/index.ts": +/*!****************************************************************!*\ + !*** ./src/assets/javascripts/browser/element/offset/index.ts ***! + \****************************************************************/ +/*! exports provided: getElementOffset, watchElementOffset */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getElementOffset", function() { return getElementOffset; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchElementOffset", function() { return watchElementOffset; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Retrieve element offset + * + * @param el - Element + * + * @return Element offset + */ +function getElementOffset(el) { + return { + x: el.scrollLeft, + y: el.scrollTop + }; +} +/* ------------------------------------------------------------------------- */ +/** + * Watch element offset + * + * @param el - Element + * + * @return Element offset observable + */ +function watchElementOffset(el) { + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["merge"])(Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["fromEvent"])(el, "scroll"), Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["fromEvent"])(window, "resize")) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(function () { return getElementOffset(el); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["startWith"])(getElementOffset(el)), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["shareReplay"])(1)); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/browser/element/select/index.ts": +/*!****************************************************************!*\ + !*** ./src/assets/javascripts/browser/element/select/index.ts ***! + \****************************************************************/ +/*! exports provided: setElementSelection */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setElementSelection", function() { return setElementSelection; }); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Set element text selection + * + * @param el - Element + */ +function setElementSelection(el) { + if (el instanceof HTMLInputElement) + el.select(); + else + throw new Error("Not implemented"); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/browser/index.ts": +/*!*************************************************!*\ + !*** ./src/assets/javascripts/browser/index.ts ***! + \*************************************************/ +/*! exports provided: isSusceptibleToKeyboard, watchKeyboard, watchMedia, getToggle, setToggle, watchToggle, watchWorker, watchDocument, watchDocumentSwitch, getElement, getElementOrThrow, getActiveElement, getElements, setElementFocus, watchElementFocus, getElementOffset, watchElementOffset, setElementSelection, getLocation, setLocation, isLocationInternal, isLocationAnchor, watchLocation, getLocationHash, setLocationHash, watchLocationHash, watchViewport, watchViewportAt, getViewportOffset, setViewportOffset, watchViewportOffset, getViewportSize, watchViewportSize */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _document__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./document */ "./src/assets/javascripts/browser/document/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchDocument", function() { return _document__WEBPACK_IMPORTED_MODULE_0__["watchDocument"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchDocumentSwitch", function() { return _document__WEBPACK_IMPORTED_MODULE_0__["watchDocumentSwitch"]; }); + +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./element */ "./src/assets/javascripts/browser/element/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getElement", function() { return _element__WEBPACK_IMPORTED_MODULE_1__["getElement"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getElementOrThrow", function() { return _element__WEBPACK_IMPORTED_MODULE_1__["getElementOrThrow"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getActiveElement", function() { return _element__WEBPACK_IMPORTED_MODULE_1__["getActiveElement"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getElements", function() { return _element__WEBPACK_IMPORTED_MODULE_1__["getElements"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setElementFocus", function() { return _element__WEBPACK_IMPORTED_MODULE_1__["setElementFocus"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchElementFocus", function() { return _element__WEBPACK_IMPORTED_MODULE_1__["watchElementFocus"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getElementOffset", function() { return _element__WEBPACK_IMPORTED_MODULE_1__["getElementOffset"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchElementOffset", function() { return _element__WEBPACK_IMPORTED_MODULE_1__["watchElementOffset"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setElementSelection", function() { return _element__WEBPACK_IMPORTED_MODULE_1__["setElementSelection"]; }); + +/* harmony import */ var _keyboard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./keyboard */ "./src/assets/javascripts/browser/keyboard/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isSusceptibleToKeyboard", function() { return _keyboard__WEBPACK_IMPORTED_MODULE_2__["isSusceptibleToKeyboard"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchKeyboard", function() { return _keyboard__WEBPACK_IMPORTED_MODULE_2__["watchKeyboard"]; }); + +/* harmony import */ var _location__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./location */ "./src/assets/javascripts/browser/location/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getLocation", function() { return _location__WEBPACK_IMPORTED_MODULE_3__["getLocation"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setLocation", function() { return _location__WEBPACK_IMPORTED_MODULE_3__["setLocation"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isLocationInternal", function() { return _location__WEBPACK_IMPORTED_MODULE_3__["isLocationInternal"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isLocationAnchor", function() { return _location__WEBPACK_IMPORTED_MODULE_3__["isLocationAnchor"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchLocation", function() { return _location__WEBPACK_IMPORTED_MODULE_3__["watchLocation"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getLocationHash", function() { return _location__WEBPACK_IMPORTED_MODULE_3__["getLocationHash"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setLocationHash", function() { return _location__WEBPACK_IMPORTED_MODULE_3__["setLocationHash"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchLocationHash", function() { return _location__WEBPACK_IMPORTED_MODULE_3__["watchLocationHash"]; }); + +/* harmony import */ var _media__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./media */ "./src/assets/javascripts/browser/media/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchMedia", function() { return _media__WEBPACK_IMPORTED_MODULE_4__["watchMedia"]; }); + +/* harmony import */ var _toggle__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./toggle */ "./src/assets/javascripts/browser/toggle/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getToggle", function() { return _toggle__WEBPACK_IMPORTED_MODULE_5__["getToggle"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setToggle", function() { return _toggle__WEBPACK_IMPORTED_MODULE_5__["setToggle"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchToggle", function() { return _toggle__WEBPACK_IMPORTED_MODULE_5__["watchToggle"]; }); + +/* harmony import */ var _viewport__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./viewport */ "./src/assets/javascripts/browser/viewport/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchViewport", function() { return _viewport__WEBPACK_IMPORTED_MODULE_6__["watchViewport"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchViewportAt", function() { return _viewport__WEBPACK_IMPORTED_MODULE_6__["watchViewportAt"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getViewportOffset", function() { return _viewport__WEBPACK_IMPORTED_MODULE_6__["getViewportOffset"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setViewportOffset", function() { return _viewport__WEBPACK_IMPORTED_MODULE_6__["setViewportOffset"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchViewportOffset", function() { return _viewport__WEBPACK_IMPORTED_MODULE_6__["watchViewportOffset"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getViewportSize", function() { return _viewport__WEBPACK_IMPORTED_MODULE_6__["getViewportSize"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchViewportSize", function() { return _viewport__WEBPACK_IMPORTED_MODULE_6__["watchViewportSize"]; }); + +/* harmony import */ var _worker__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./worker */ "./src/assets/javascripts/browser/worker/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchWorker", function() { return _worker__WEBPACK_IMPORTED_MODULE_7__["watchWorker"]; }); + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + + + + + + +/***/ }), + +/***/ "./src/assets/javascripts/browser/keyboard/index.ts": +/*!**********************************************************!*\ + !*** ./src/assets/javascripts/browser/keyboard/index.ts ***! + \**********************************************************/ +/*! exports provided: isSusceptibleToKeyboard, watchKeyboard */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isSusceptibleToKeyboard", function() { return isSusceptibleToKeyboard; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchKeyboard", function() { return watchKeyboard; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Check whether an element may receive keyboard input + * + * @param el - Element + * + * @return Test result + */ +function isSusceptibleToKeyboard(el) { + switch (el.tagName) { + /* Form elements */ + case "INPUT": + case "SELECT": + case "TEXTAREA": + return true; + /* Everything else */ + default: + return el.isContentEditable; + } +} +/* ------------------------------------------------------------------------- */ +/** + * Watch keyboard + * + * @return Keyboard observable + */ +function watchKeyboard() { + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["fromEvent"])(window, "keydown") + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["filter"])(function (ev) { return !(ev.metaKey || ev.ctrlKey); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(function (ev) { return ({ + type: ev.key, + claim: function () { + ev.preventDefault(); + ev.stopPropagation(); + } + }); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["share"])()); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/browser/location/_/index.ts": +/*!************************************************************!*\ + !*** ./src/assets/javascripts/browser/location/_/index.ts ***! + \************************************************************/ +/*! exports provided: getLocation, setLocation, isLocationInternal, isLocationAnchor, watchLocation */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLocation", function() { return getLocation; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setLocation", function() { return setLocation; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isLocationInternal", function() { return isLocationInternal; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isLocationAnchor", function() { return isLocationAnchor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchLocation", function() { return watchLocation; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Retrieve location + * + * This function will return a `URL` object (and not `Location`) in order to + * normalize typings across the application. Furthermore, locations need to be + * tracked without setting them and `Location` is a singleton which represents + * the current location. + * + * @return URL + */ +function getLocation() { + return new URL(location.href); +} +/** + * Set location + * + * @param url - URL to change to + */ +function setLocation(url) { + location.href = url.href; +} +/* ------------------------------------------------------------------------- */ +/** + * Check whether a URL is an internal link or a file (except `.html`) + * + * @param url - URL or HTML anchor element + * @param ref - Reference URL + * + * @return Test result + */ +function isLocationInternal(url, ref) { + if (ref === void 0) { ref = location; } + return url.host === ref.host + && /^(?:\/[\w-]+)*(?:\/?|\.html)$/i.test(url.pathname); +} +/** + * Check whether a URL is an anchor link on the current page + * + * @param url - URL or HTML anchor element + * @param ref - Reference URL + * + * @return Test result + */ +function isLocationAnchor(url, ref) { + if (ref === void 0) { ref = location; } + return url.pathname === ref.pathname + && url.hash.length > 0; +} +/* ------------------------------------------------------------------------- */ +/** + * Watch location + * + * @return Location subject + */ +function watchLocation() { + return new rxjs__WEBPACK_IMPORTED_MODULE_0__["BehaviorSubject"](getLocation()); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/browser/location/hash/index.ts": +/*!***************************************************************!*\ + !*** ./src/assets/javascripts/browser/location/hash/index.ts ***! + \***************************************************************/ +/*! exports provided: getLocationHash, setLocationHash, watchLocationHash */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLocationHash", function() { return getLocationHash; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setLocationHash", function() { return setLocationHash; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchLocationHash", function() { return watchLocationHash; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Retrieve location hash + * + * @return Location hash + */ +function getLocationHash() { + return location.hash.substring(1); +} +/** + * Set location hash + * + * Setting a new fragment identifier via `location.hash` will have no effect + * if the value doesn't change. However, when a new fragment identifier is set, + * we want the browser to target the respective element at all times, which is + * why we use this dirty little trick. + * + * @param hash - Location hash + */ +function setLocationHash(hash) { + var el = document.createElement("a"); + el.href = hash; + el.click(); +} +/* ------------------------------------------------------------------------- */ +/** + * Watch location hash + * + * @return Location hash observable + */ +function watchLocationHash() { + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["fromEvent"])(window, "hashchange") + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(getLocationHash), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["startWith"])(getLocationHash()), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["filter"])(function (hash) { return hash.length > 0; }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["share"])()); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/browser/location/index.ts": +/*!**********************************************************!*\ + !*** ./src/assets/javascripts/browser/location/index.ts ***! + \**********************************************************/ +/*! exports provided: getLocation, setLocation, isLocationInternal, isLocationAnchor, watchLocation, getLocationHash, setLocationHash, watchLocationHash */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/browser/location/_/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getLocation", function() { return ___WEBPACK_IMPORTED_MODULE_0__["getLocation"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setLocation", function() { return ___WEBPACK_IMPORTED_MODULE_0__["setLocation"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isLocationInternal", function() { return ___WEBPACK_IMPORTED_MODULE_0__["isLocationInternal"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isLocationAnchor", function() { return ___WEBPACK_IMPORTED_MODULE_0__["isLocationAnchor"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchLocation", function() { return ___WEBPACK_IMPORTED_MODULE_0__["watchLocation"]; }); + +/* harmony import */ var _hash__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./hash */ "./src/assets/javascripts/browser/location/hash/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getLocationHash", function() { return _hash__WEBPACK_IMPORTED_MODULE_1__["getLocationHash"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setLocationHash", function() { return _hash__WEBPACK_IMPORTED_MODULE_1__["setLocationHash"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchLocationHash", function() { return _hash__WEBPACK_IMPORTED_MODULE_1__["watchLocationHash"]; }); + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + +/***/ }), + +/***/ "./src/assets/javascripts/browser/media/index.ts": +/*!*******************************************************!*\ + !*** ./src/assets/javascripts/browser/media/index.ts ***! + \*******************************************************/ +/*! exports provided: watchMedia */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchMedia", function() { return watchMedia; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Watch media query + * + * @param query - Media query + * + * @return Media observable + */ +function watchMedia(query) { + var media = matchMedia(query); + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["fromEventPattern"])(function (next) { + return media.addListener(function () { return next(media.matches); }); + }) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["startWith"])(media.matches), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["shareReplay"])(1)); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/browser/toggle/index.ts": +/*!********************************************************!*\ + !*** ./src/assets/javascripts/browser/toggle/index.ts ***! + \********************************************************/ +/*! exports provided: getToggle, setToggle, watchToggle */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getToggle", function() { return getToggle; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setToggle", function() { return setToggle; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchToggle", function() { return watchToggle; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../element */ "./src/assets/javascripts/browser/element/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + +/* ---------------------------------------------------------------------------- + * Data + * ------------------------------------------------------------------------- */ +/** + * Toggle map + */ +var toggles = { + drawer: Object(_element__WEBPACK_IMPORTED_MODULE_2__["getElementOrThrow"])("[data-md-toggle=drawer]"), + search: Object(_element__WEBPACK_IMPORTED_MODULE_2__["getElementOrThrow"])("[data-md-toggle=search]") +}; +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Retrieve the value of a toggle + * + * @param name - Toggle + * + * @return Toggle value + */ +function getToggle(name) { + return toggles[name].checked; +} +/** + * Set toggle + * + * Simulating a click event seems to be the most cross-browser compatible way + * of changing the value while also emitting a `change` event. Before, Material + * used `CustomEvent` to programmatically change the value of a toggle, but this + * is a much simpler and cleaner solution which doesn't require a polyfill. + * + * @param name - Toggle + * @param value - Toggle value + */ +function setToggle(name, value) { + if (toggles[name].checked !== value) + toggles[name].click(); +} +/* ------------------------------------------------------------------------- */ +/** + * Watch toggle + * + * @param name - Toggle + * + * @return Toggle value observable + */ +function watchToggle(name) { + var el = toggles[name]; + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["fromEvent"])(el, "change") + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(function () { return el.checked; }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["startWith"])(el.checked)); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/browser/viewport/_/index.ts": +/*!************************************************************!*\ + !*** ./src/assets/javascripts/browser/viewport/_/index.ts ***! + \************************************************************/ +/*! exports provided: watchViewport, watchViewportAt */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchViewport", function() { return watchViewport; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchViewportAt", function() { return watchViewportAt; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var _offset__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../offset */ "./src/assets/javascripts/browser/viewport/offset/index.ts"); +/* harmony import */ var _size__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../size */ "./src/assets/javascripts/browser/viewport/size/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Watch viewport + * + * @return Viewport observable + */ +function watchViewport() { + return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["combineLatest"])([ + Object(_offset__WEBPACK_IMPORTED_MODULE_3__["watchViewportOffset"])(), + Object(_size__WEBPACK_IMPORTED_MODULE_4__["watchViewportSize"])() + ]) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), offset = _b[0], size = _b[1]; + return ({ offset: offset, size: size }); + }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["shareReplay"])(1)); +} +/** + * Watch viewport relative to element + * + * @param el - Element + * @param options - Options + * + * @return Viewport observable + */ +function watchViewportAt(el, _a) { + var header$ = _a.header$, viewport$ = _a.viewport$; + var offset$ = viewport$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["distinctUntilKeyChanged"])("size"), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function () { return ({ + x: el.offsetLeft, + y: el.offsetTop + }); })); + /* Compute relative viewport, return hot observable */ + return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["combineLatest"])([header$, viewport$, offset$]) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 3), height = _b[0].height, _c = _b[1], offset = _c.offset, size = _c.size, _d = _b[2], x = _d.x, y = _d.y; + return ({ + offset: { + x: offset.x - x, + y: offset.y - y + height + }, + size: size + }); + }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["shareReplay"])(1)); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/browser/viewport/index.ts": +/*!**********************************************************!*\ + !*** ./src/assets/javascripts/browser/viewport/index.ts ***! + \**********************************************************/ +/*! exports provided: watchViewport, watchViewportAt, getViewportOffset, setViewportOffset, watchViewportOffset, getViewportSize, watchViewportSize */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/browser/viewport/_/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchViewport", function() { return ___WEBPACK_IMPORTED_MODULE_0__["watchViewport"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchViewportAt", function() { return ___WEBPACK_IMPORTED_MODULE_0__["watchViewportAt"]; }); + +/* harmony import */ var _offset__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./offset */ "./src/assets/javascripts/browser/viewport/offset/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getViewportOffset", function() { return _offset__WEBPACK_IMPORTED_MODULE_1__["getViewportOffset"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setViewportOffset", function() { return _offset__WEBPACK_IMPORTED_MODULE_1__["setViewportOffset"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchViewportOffset", function() { return _offset__WEBPACK_IMPORTED_MODULE_1__["watchViewportOffset"]; }); + +/* harmony import */ var _size__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./size */ "./src/assets/javascripts/browser/viewport/size/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getViewportSize", function() { return _size__WEBPACK_IMPORTED_MODULE_2__["getViewportSize"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchViewportSize", function() { return _size__WEBPACK_IMPORTED_MODULE_2__["watchViewportSize"]; }); + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + +/***/ }), + +/***/ "./src/assets/javascripts/browser/viewport/offset/index.ts": +/*!*****************************************************************!*\ + !*** ./src/assets/javascripts/browser/viewport/offset/index.ts ***! + \*****************************************************************/ +/*! exports provided: getViewportOffset, setViewportOffset, watchViewportOffset */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getViewportOffset", function() { return getViewportOffset; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setViewportOffset", function() { return setViewportOffset; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchViewportOffset", function() { return watchViewportOffset; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Retrieve viewport offset + * + * On iOS Safari, viewport offset can be negative due to overflow scrolling. + * As this may induce strange behaviors downstream, we'll just limit it to 0. + * + * @return Viewport offset + */ +function getViewportOffset() { + return { + x: Math.max(0, pageXOffset), + y: Math.max(0, pageYOffset) + }; +} +/** + * Set viewport offset + * + * @param offset - Viewport offset + */ +function setViewportOffset(_a) { + var x = _a.x, y = _a.y; + window.scrollTo(x || 0, y || 0); +} +/* ------------------------------------------------------------------------- */ +/** + * Watch viewport offset + * + * @return Viewport offset observable + */ +function watchViewportOffset() { + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["merge"])(Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["fromEvent"])(window, "scroll"), Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["fromEvent"])(window, "resize")) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(getViewportOffset), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["startWith"])(getViewportOffset())); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/browser/viewport/size/index.ts": +/*!***************************************************************!*\ + !*** ./src/assets/javascripts/browser/viewport/size/index.ts ***! + \***************************************************************/ +/*! exports provided: getViewportSize, watchViewportSize */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getViewportSize", function() { return getViewportSize; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchViewportSize", function() { return watchViewportSize; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Retrieve viewport size + * + * @return Viewport size + */ +function getViewportSize() { + return { + width: innerWidth, + height: innerHeight + }; +} +/* ------------------------------------------------------------------------- */ +/** + * Watch viewport size + * + * @return Viewport size observable + */ +function watchViewportSize() { + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["fromEvent"])(window, "resize") + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(getViewportSize), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["startWith"])(getViewportSize())); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/browser/worker/index.ts": +/*!********************************************************!*\ + !*** ./src/assets/javascripts/browser/worker/index.ts ***! + \********************************************************/ +/*! exports provided: watchWorker */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchWorker", function() { return watchWorker; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Watch a web worker + * + * This function returns an observable that will send all values emitted by the + * message observable to the web worker. Web worker communication is expected + * to be bidirectional (request-response) and synchronous. Messages that are + * emitted during a pending request are throttled, the last one is emitted. + * + * @param worker - Web worker + * @param options - Options + * + * @return Worker message observable + */ +function watchWorker(worker, _a) { + var tx$ = _a.tx$; + /* Intercept messages from worker-like objects */ + var rx$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["fromEventPattern"])(function (next) { + return worker.addEventListener("message", next); + }) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["pluck"])("data")); + /* Send and receive messages, return hot observable */ + return tx$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["throttle"])(function () { return rx$; }, { leading: true, trailing: true }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["tap"])(function (message) { return worker.postMessage(message); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["switchMapTo"])(rx$), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["share"])()); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/_/index.ts": +/*!******************************************************!*\ + !*** ./src/assets/javascripts/components/_/index.ts ***! + \******************************************************/ +/*! exports provided: setupComponents, useComponent */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setupComponents", function() { return setupComponents; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "useComponent", function() { return useComponent; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + +/* ---------------------------------------------------------------------------- + * Data + * ------------------------------------------------------------------------- */ +/** + * Component map observable + */ +var components$; +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Setup bindings to components with given names + * + * This function will maintain bindings to the elements identified by the given + * names in-between document switches and update the elements in-place. + * + * @param names - Component names + * @param options - Options + */ +function setupComponents(names, _a) { + var document$ = _a.document$; + components$ = document$ + .pipe( + /* Build component map */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (document) { return names.reduce(function (components, name) { + var _a; + var el = Object(browser__WEBPACK_IMPORTED_MODULE_3__["getElement"])("[data-md-component=" + name + "]", document); + return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__assign"])({}, components), typeof el !== "undefined" ? (_a = {}, _a[name] = el, _a) : {}); + }, {}); }), + /* Re-compute component map on document switch */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["scan"])(function (prev, next) { + var e_1, _a; + try { + for (var names_1 = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(names), names_1_1 = names_1.next(); !names_1_1.done; names_1_1 = names_1.next()) { + var name = names_1_1.value; + switch (name) { + /* Top-level components: update */ + case "header-title": + case "container": + case "skip": + if (name in prev && typeof prev[name] !== "undefined") { + prev[name].replaceWith(next[name]); + prev[name] = next[name]; + } + break; + /* All other components: rebind */ + default: + if (typeof next[name] !== "undefined") + prev[name] = Object(browser__WEBPACK_IMPORTED_MODULE_3__["getElement"])("[data-md-component=" + name + "]"); + else + delete prev[name]; + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (names_1_1 && !names_1_1.done && (_a = names_1.return)) _a.call(names_1); + } + finally { if (e_1) throw e_1.error; } + } + return prev; + }), + /* Convert to hot observable */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["shareReplay"])(1)); +} +function useComponent(name) { + return components$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])(function (components) { return (typeof components[name] !== "undefined" + ? Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["of"])(components[name]) + : rxjs__WEBPACK_IMPORTED_MODULE_1__["EMPTY"]); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["distinctUntilChanged"])()); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/header/_/index.ts": +/*!*************************************************************!*\ + !*** ./src/assets/javascripts/components/header/_/index.ts ***! + \*************************************************************/ +/*! exports provided: mountHeader */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mountHeader", function() { return mountHeader; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../_ */ "./src/assets/javascripts/components/_/index.ts"); +/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../react */ "./src/assets/javascripts/components/header/react/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Mount header from source observable + * + * @param options - Options + * + * @return Operator function + */ +function mountHeader(_a) { + var viewport$ = _a.viewport$; + return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["pipe"])(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])(function (el) { + var header$ = Object(_react__WEBPACK_IMPORTED_MODULE_5__["watchHeader"])(el, { viewport$: viewport$ }); + /* Compute whether the header should switch to page header */ + var type$ = Object(___WEBPACK_IMPORTED_MODULE_4__["useComponent"])("main") + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (main) { return Object(browser__WEBPACK_IMPORTED_MODULE_3__["getElement"])("h1, h2, h3, h4, h5, h6", main); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["filter"])(function (hx) { return typeof hx !== "undefined"; }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["withLatestFrom"])(Object(___WEBPACK_IMPORTED_MODULE_4__["useComponent"])("header-title")), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), hx = _b[0], title = _b[1]; + return Object(browser__WEBPACK_IMPORTED_MODULE_3__["watchViewportAt"])(hx, { header$: header$, viewport$: viewport$ }) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { + var y = _a.offset.y; + return y >= hx.offsetHeight ? "page" : "site"; + }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["distinctUntilChanged"])(), Object(_react__WEBPACK_IMPORTED_MODULE_5__["applyHeaderType"])(title)); + }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["startWith"])("site")); + /* Combine into single observable */ + return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["combineLatest"])([header$, type$]) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), header = _b[0], type = _b[1]; + return (Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__assign"])({ type: type }, header)); + }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["shareReplay"])(1)); + })); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/header/index.ts": +/*!***********************************************************!*\ + !*** ./src/assets/javascripts/components/header/index.ts ***! + \***********************************************************/ +/*! exports provided: mountHeader, watchHeader, applyHeaderType, setHeaderTitleActive, resetHeaderTitleActive */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/components/header/_/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountHeader", function() { return ___WEBPACK_IMPORTED_MODULE_0__["mountHeader"]; }); + +/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./react */ "./src/assets/javascripts/components/header/react/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchHeader", function() { return _react__WEBPACK_IMPORTED_MODULE_1__["watchHeader"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "applyHeaderType", function() { return _react__WEBPACK_IMPORTED_MODULE_1__["applyHeaderType"]; }); + +/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./set */ "./src/assets/javascripts/components/header/set/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setHeaderTitleActive", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["setHeaderTitleActive"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetHeaderTitleActive", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["resetHeaderTitleActive"]; }); + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + +/***/ }), + +/***/ "./src/assets/javascripts/components/header/react/index.ts": +/*!*****************************************************************!*\ + !*** ./src/assets/javascripts/components/header/react/index.ts ***! + \*****************************************************************/ +/*! exports provided: watchHeader, applyHeaderType */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchHeader", function() { return watchHeader; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "applyHeaderType", function() { return applyHeaderType; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../set */ "./src/assets/javascripts/components/header/set/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Watch header + * + * The header is wrapped in an observable to pave the way for auto-hiding or + * other dynamic behaviors that may be implemented later on. + * + * @param el - Header element + * @param options - Options + * + * @return Header observable + */ +function watchHeader(el, _a) { + var viewport$ = _a.viewport$; + return viewport$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["distinctUntilKeyChanged"])("size"), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["switchMap"])(function () { + var styles = getComputedStyle(el); + var sticky = [ + "sticky", + "-webkit-sticky" /* Old Safari */ + ].includes(styles.position); + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["of"])({ + sticky: sticky, + height: sticky ? el.offsetHeight : 0 + }); + })); +} +/* ------------------------------------------------------------------------- */ +/** + * Apply header title type + * + * @param el - Header title element + * + * @return Operator function + */ +function applyHeaderType(el) { + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["pipe"])( + /* Defer repaint to next animation frame */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["observeOn"])(rxjs__WEBPACK_IMPORTED_MODULE_0__["animationFrameScheduler"]), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["tap"])(function (type) { + Object(_set__WEBPACK_IMPORTED_MODULE_2__["setHeaderTitleActive"])(el, type === "page"); + }), + /* Reset on complete or error */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["finalize"])(function () { + Object(_set__WEBPACK_IMPORTED_MODULE_2__["resetHeaderTitleActive"])(el); + })); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/header/set/index.ts": +/*!***************************************************************!*\ + !*** ./src/assets/javascripts/components/header/set/index.ts ***! + \***************************************************************/ +/*! exports provided: setHeaderTitleActive, resetHeaderTitleActive */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setHeaderTitleActive", function() { return setHeaderTitleActive; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resetHeaderTitleActive", function() { return resetHeaderTitleActive; }); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Set header title active + * + * @param el - Header title element + * @param value - Whether the title is shown + */ +function setHeaderTitleActive(el, value) { + el.setAttribute("data-md-state", value ? "active" : ""); +} +/** + * Reset header title active + * + * @param el - Header title element + */ +function resetHeaderTitleActive(el) { + el.removeAttribute("data-md-state"); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/hero/_/index.ts": +/*!***********************************************************!*\ + !*** ./src/assets/javascripts/components/hero/_/index.ts ***! + \***********************************************************/ +/*! exports provided: mountHero */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mountHero", function() { return mountHero; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../react */ "./src/assets/javascripts/components/hero/react/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Mount hero from source observable + * + * @param options - Options + * + * @return Operator function + */ +function mountHero(_a) { + var header$ = _a.header$, viewport$ = _a.viewport$; + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["pipe"])(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["switchMap"])(function (el) { return Object(browser__WEBPACK_IMPORTED_MODULE_2__["watchViewportAt"])(el, { header$: header$, viewport$: viewport$ }) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(function (_a) { + var y = _a.offset.y; + return ({ hidden: y >= 20 }); + }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["distinctUntilChanged"])(), Object(_react__WEBPACK_IMPORTED_MODULE_3__["applyHero"])(el)); })); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/hero/index.ts": +/*!*********************************************************!*\ + !*** ./src/assets/javascripts/components/hero/index.ts ***! + \*********************************************************/ +/*! exports provided: mountHero, applyHero, setHeroHidden, resetHeroHidden */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/components/hero/_/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountHero", function() { return ___WEBPACK_IMPORTED_MODULE_0__["mountHero"]; }); + +/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./react */ "./src/assets/javascripts/components/hero/react/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "applyHero", function() { return _react__WEBPACK_IMPORTED_MODULE_1__["applyHero"]; }); + +/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./set */ "./src/assets/javascripts/components/hero/set/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setHeroHidden", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["setHeroHidden"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetHeroHidden", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["resetHeroHidden"]; }); + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + +/***/ }), + +/***/ "./src/assets/javascripts/components/hero/react/index.ts": +/*!***************************************************************!*\ + !*** ./src/assets/javascripts/components/hero/react/index.ts ***! + \***************************************************************/ +/*! exports provided: applyHero */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "applyHero", function() { return applyHero; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../set */ "./src/assets/javascripts/components/hero/set/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Apply hero + * + * @param el - Hero element + * + * @return Operator function + */ +function applyHero(el) { + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["pipe"])( + /* Defer repaint to next animation frame */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["observeOn"])(rxjs__WEBPACK_IMPORTED_MODULE_0__["animationFrameScheduler"]), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["tap"])(function (_a) { + var hidden = _a.hidden; + Object(_set__WEBPACK_IMPORTED_MODULE_2__["setHeroHidden"])(el, hidden); + }), + /* Reset on complete or error */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["finalize"])(function () { + Object(_set__WEBPACK_IMPORTED_MODULE_2__["resetHeroHidden"])(el); + })); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/hero/set/index.ts": +/*!*************************************************************!*\ + !*** ./src/assets/javascripts/components/hero/set/index.ts ***! + \*************************************************************/ +/*! exports provided: setHeroHidden, resetHeroHidden */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setHeroHidden", function() { return setHeroHidden; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resetHeroHidden", function() { return resetHeroHidden; }); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Set hero hidden + * + * @param el - Hero element + * @param value - Whether the element is hidden + */ +function setHeroHidden(el, value) { + el.setAttribute("data-md-state", value ? "hidden" : ""); +} +/** + * Reset hero hidden + * + * @param el - Hero element + */ +function resetHeroHidden(el) { + el.removeAttribute("data-md-state"); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/index.ts": +/*!****************************************************!*\ + !*** ./src/assets/javascripts/components/index.ts ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/components/_/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setupComponents", function() { return ___WEBPACK_IMPORTED_MODULE_0__["setupComponents"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "useComponent", function() { return ___WEBPACK_IMPORTED_MODULE_0__["useComponent"]; }); + +/* harmony import */ var _header__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./header */ "./src/assets/javascripts/components/header/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountHeader", function() { return _header__WEBPACK_IMPORTED_MODULE_1__["mountHeader"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchHeader", function() { return _header__WEBPACK_IMPORTED_MODULE_1__["watchHeader"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "applyHeaderType", function() { return _header__WEBPACK_IMPORTED_MODULE_1__["applyHeaderType"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setHeaderTitleActive", function() { return _header__WEBPACK_IMPORTED_MODULE_1__["setHeaderTitleActive"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetHeaderTitleActive", function() { return _header__WEBPACK_IMPORTED_MODULE_1__["resetHeaderTitleActive"]; }); + +/* harmony import */ var _hero__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./hero */ "./src/assets/javascripts/components/hero/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountHero", function() { return _hero__WEBPACK_IMPORTED_MODULE_2__["mountHero"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "applyHero", function() { return _hero__WEBPACK_IMPORTED_MODULE_2__["applyHero"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setHeroHidden", function() { return _hero__WEBPACK_IMPORTED_MODULE_2__["setHeroHidden"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetHeroHidden", function() { return _hero__WEBPACK_IMPORTED_MODULE_2__["resetHeroHidden"]; }); + +/* harmony import */ var _main__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./main */ "./src/assets/javascripts/components/main/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountMain", function() { return _main__WEBPACK_IMPORTED_MODULE_3__["mountMain"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchMain", function() { return _main__WEBPACK_IMPORTED_MODULE_3__["watchMain"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "applyHeaderShadow", function() { return _main__WEBPACK_IMPORTED_MODULE_3__["applyHeaderShadow"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setHeaderShadow", function() { return _main__WEBPACK_IMPORTED_MODULE_3__["setHeaderShadow"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetHeaderShadow", function() { return _main__WEBPACK_IMPORTED_MODULE_3__["resetHeaderShadow"]; }); + +/* harmony import */ var _navigation__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./navigation */ "./src/assets/javascripts/components/navigation/index.ts"); +/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _navigation__WEBPACK_IMPORTED_MODULE_4__) if(["setupComponents","useComponent","mountHeader","watchHeader","applyHeaderType","setHeaderTitleActive","resetHeaderTitleActive","mountHero","applyHero","setHeroHidden","resetHeroHidden","mountMain","watchMain","applyHeaderShadow","setHeaderShadow","resetHeaderShadow","default"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _navigation__WEBPACK_IMPORTED_MODULE_4__[key]; }) }(__WEBPACK_IMPORT_KEY__)); +/* harmony import */ var _search__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./search */ "./src/assets/javascripts/components/search/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountSearch", function() { return _search__WEBPACK_IMPORTED_MODULE_5__["mountSearch"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountSearchQuery", function() { return _search__WEBPACK_IMPORTED_MODULE_5__["mountSearchQuery"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchSearchQuery", function() { return _search__WEBPACK_IMPORTED_MODULE_5__["watchSearchQuery"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountSearchReset", function() { return _search__WEBPACK_IMPORTED_MODULE_5__["mountSearchReset"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchSearchReset", function() { return _search__WEBPACK_IMPORTED_MODULE_5__["watchSearchReset"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountSearchResult", function() { return _search__WEBPACK_IMPORTED_MODULE_5__["mountSearchResult"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "applySearchResult", function() { return _search__WEBPACK_IMPORTED_MODULE_5__["applySearchResult"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setSearchResultMeta", function() { return _search__WEBPACK_IMPORTED_MODULE_5__["setSearchResultMeta"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetSearchResultMeta", function() { return _search__WEBPACK_IMPORTED_MODULE_5__["resetSearchResultMeta"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "addToSearchResultList", function() { return _search__WEBPACK_IMPORTED_MODULE_5__["addToSearchResultList"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetSearchResultList", function() { return _search__WEBPACK_IMPORTED_MODULE_5__["resetSearchResultList"]; }); + +/* harmony import */ var _shared__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./shared */ "./src/assets/javascripts/components/shared/index.ts"); +/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _shared__WEBPACK_IMPORTED_MODULE_6__) if(["setupComponents","useComponent","mountHeader","watchHeader","applyHeaderType","setHeaderTitleActive","resetHeaderTitleActive","mountHero","applyHero","setHeroHidden","resetHeroHidden","mountMain","watchMain","applyHeaderShadow","setHeaderShadow","resetHeaderShadow","mountSearch","mountSearchQuery","watchSearchQuery","mountSearchReset","watchSearchReset","mountSearchResult","applySearchResult","setSearchResultMeta","resetSearchResultMeta","addToSearchResultList","resetSearchResultList","default"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _shared__WEBPACK_IMPORTED_MODULE_6__[key]; }) }(__WEBPACK_IMPORT_KEY__)); +/* harmony import */ var _tabs__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./tabs */ "./src/assets/javascripts/components/tabs/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountTabs", function() { return _tabs__WEBPACK_IMPORTED_MODULE_7__["mountTabs"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "applyTabs", function() { return _tabs__WEBPACK_IMPORTED_MODULE_7__["applyTabs"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setTabsHidden", function() { return _tabs__WEBPACK_IMPORTED_MODULE_7__["setTabsHidden"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetTabsHidden", function() { return _tabs__WEBPACK_IMPORTED_MODULE_7__["resetTabsHidden"]; }); + +/* harmony import */ var _toc__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./toc */ "./src/assets/javascripts/components/toc/index.ts"); +/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _toc__WEBPACK_IMPORTED_MODULE_8__) if(["setupComponents","useComponent","mountHeader","watchHeader","applyHeaderType","setHeaderTitleActive","resetHeaderTitleActive","mountHero","applyHero","setHeroHidden","resetHeroHidden","mountMain","watchMain","applyHeaderShadow","setHeaderShadow","resetHeaderShadow","mountSearch","mountSearchQuery","watchSearchQuery","mountSearchReset","watchSearchReset","mountSearchResult","applySearchResult","setSearchResultMeta","resetSearchResultMeta","addToSearchResultList","resetSearchResultList","mountTabs","applyTabs","setTabsHidden","resetTabsHidden","default"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _toc__WEBPACK_IMPORTED_MODULE_8__[key]; }) }(__WEBPACK_IMPORT_KEY__)); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + + + + + + + +/***/ }), + +/***/ "./src/assets/javascripts/components/main/_/index.ts": +/*!***********************************************************!*\ + !*** ./src/assets/javascripts/components/main/_/index.ts ***! + \***********************************************************/ +/*! exports provided: mountMain */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mountMain", function() { return mountMain; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../_ */ "./src/assets/javascripts/components/_/index.ts"); +/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../react */ "./src/assets/javascripts/components/main/react/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Mount main area from source observable + * + * The header must be connected to the main area observable outside of the + * operator function, as the header will persist in-between document switches + * while the main area is replaced. However, the header observable must be + * passed to this function, so we connect both via a long-living subject. + * + * @param options - Options + * + * @return Operator function + */ +function mountMain(_a) { + var header$ = _a.header$, viewport$ = _a.viewport$; + var main$ = new rxjs__WEBPACK_IMPORTED_MODULE_0__["Subject"](); + /* Connect to main area observable via long-living subject */ + Object(___WEBPACK_IMPORTED_MODULE_2__["useComponent"])("header") + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["switchMap"])(function (header) { return main$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["distinctUntilKeyChanged"])("active"), Object(_react__WEBPACK_IMPORTED_MODULE_3__["applyHeaderShadow"])(header)); })) + .subscribe(); + /* Return operator */ + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["pipe"])(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["switchMap"])(function (el) { return Object(_react__WEBPACK_IMPORTED_MODULE_3__["watchMain"])(el, { header$: header$, viewport$: viewport$ }); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["tap"])(function (main) { return main$.next(main); })); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/main/index.ts": +/*!*********************************************************!*\ + !*** ./src/assets/javascripts/components/main/index.ts ***! + \*********************************************************/ +/*! exports provided: mountMain, watchMain, applyHeaderShadow, setHeaderShadow, resetHeaderShadow */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/components/main/_/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountMain", function() { return ___WEBPACK_IMPORTED_MODULE_0__["mountMain"]; }); + +/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./react */ "./src/assets/javascripts/components/main/react/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchMain", function() { return _react__WEBPACK_IMPORTED_MODULE_1__["watchMain"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "applyHeaderShadow", function() { return _react__WEBPACK_IMPORTED_MODULE_1__["applyHeaderShadow"]; }); + +/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./set */ "./src/assets/javascripts/components/main/set/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setHeaderShadow", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["setHeaderShadow"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetHeaderShadow", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["resetHeaderShadow"]; }); + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + +/***/ }), + +/***/ "./src/assets/javascripts/components/main/react/index.ts": +/*!***************************************************************!*\ + !*** ./src/assets/javascripts/components/main/react/index.ts ***! + \***************************************************************/ +/*! exports provided: watchMain, applyHeaderShadow */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchMain", function() { return watchMain; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "applyHeaderShadow", function() { return applyHeaderShadow; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../set */ "./src/assets/javascripts/components/main/set/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Watch main area + * + * This function returns an observable that computes the visual parameters of + * the main area which depends on the viewport vertical offset and height, as + * well as the height of the header element, if the header is fixed. + * + * @param el - Main area element + * @param options - Options + * + * @return Main area observable + */ +function watchMain(el, _a) { + var header$ = _a.header$, viewport$ = _a.viewport$; + /* Compute necessary adjustment for header */ + var adjust$ = header$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["pluck"])("height")); + /* Compute the main area's visible height */ + var height$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["combineLatest"])([adjust$, viewport$]) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), adjust = _b[0], _c = _b[1], y = _c.offset.y, height = _c.size.height; + var top = el.offsetTop; + var bottom = el.offsetHeight + top; + return height + - Math.max(0, top - y, adjust) + - Math.max(0, height + y - bottom); + }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (height) { return Math.max(0, height); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["distinctUntilChanged"])()); + /* Compute whether the viewport offset is past the main area's top */ + var active$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["combineLatest"])([adjust$, viewport$]) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), adjust = _b[0], y = _b[1].offset.y; + return y >= el.offsetTop - adjust; + }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["distinctUntilChanged"])()); + /* Combine into a single observable */ + return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["combineLatest"])([adjust$, height$, active$]) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 3), adjust = _b[0], height = _b[1], active = _b[2]; + return ({ + offset: el.offsetTop - adjust, + height: height, + active: active + }); + })); +} +/* ------------------------------------------------------------------------- */ +/** + * Apply header shadow + * + * @param el - Header element + * + * @return Operator function + */ +function applyHeaderShadow(el) { + return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["pipe"])( + /* Defer repaint to next animation frame */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["observeOn"])(rxjs__WEBPACK_IMPORTED_MODULE_1__["animationFrameScheduler"]), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["tap"])(function (_a) { + var active = _a.active; + Object(_set__WEBPACK_IMPORTED_MODULE_3__["setHeaderShadow"])(el, active); + }), + /* Reset on complete or error */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["finalize"])(function () { + Object(_set__WEBPACK_IMPORTED_MODULE_3__["resetHeaderShadow"])(el); + })); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/main/set/index.ts": +/*!*************************************************************!*\ + !*** ./src/assets/javascripts/components/main/set/index.ts ***! + \*************************************************************/ +/*! exports provided: setHeaderShadow, resetHeaderShadow */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setHeaderShadow", function() { return setHeaderShadow; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resetHeaderShadow", function() { return resetHeaderShadow; }); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Set header shadow + * + * @param el - Header element + * @param value - Whether the shadow is shown + */ +function setHeaderShadow(el, value) { + el.setAttribute("data-md-state", value ? "shadow" : ""); +} +/** + * Reset header shadow + * + * @param el - Header element + */ +function resetHeaderShadow(el) { + el.removeAttribute("data-md-state"); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/navigation/_/index.ts": +/*!*****************************************************************!*\ + !*** ./src/assets/javascripts/components/navigation/_/index.ts ***! + \*****************************************************************/ +/*! exports provided: mountNavigation */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mountNavigation", function() { return mountNavigation; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* harmony import */ var _shared__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../shared */ "./src/assets/javascripts/components/shared/index.ts"); +/* harmony import */ var _layer__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../layer */ "./src/assets/javascripts/components/navigation/layer/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Mount navigation from source observable + * + * @param options - Options + * + * @return Operator function + */ +function mountNavigation(_a) { + var header$ = _a.header$, main$ = _a.main$, viewport$ = _a.viewport$, screen$ = _a.screen$; + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["pipe"])(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["switchMap"])(function (el) { return screen$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["switchMap"])(function (screen) { + /* [screen +]: Mount navigation in sidebar */ + if (screen) { + return Object(_shared__WEBPACK_IMPORTED_MODULE_3__["watchSidebar"])(el, { main$: main$, viewport$: viewport$ }) + .pipe(Object(_shared__WEBPACK_IMPORTED_MODULE_3__["applySidebar"])(el, { header$: header$ }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(function (sidebar) { return ({ sidebar: sidebar }); })); + /* [screen -]: Mount navigation in drawer */ + } + else { + var els = Object(browser__WEBPACK_IMPORTED_MODULE_2__["getElements"])("nav", el); + return Object(_layer__WEBPACK_IMPORTED_MODULE_4__["watchNavigationLayer"])(els) + .pipe(Object(_layer__WEBPACK_IMPORTED_MODULE_4__["applyNavigationLayer"])(els), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(function (layer) { return ({ layer: layer }); })); + } + })); })); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/navigation/index.ts": +/*!***************************************************************!*\ + !*** ./src/assets/javascripts/components/navigation/index.ts ***! + \***************************************************************/ +/*! no static exports found */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/components/navigation/_/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountNavigation", function() { return ___WEBPACK_IMPORTED_MODULE_0__["mountNavigation"]; }); + +/* harmony import */ var _layer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./layer */ "./src/assets/javascripts/components/navigation/layer/index.ts"); +/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _layer__WEBPACK_IMPORTED_MODULE_1__) if(["mountNavigation","default"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _layer__WEBPACK_IMPORTED_MODULE_1__[key]; }) }(__WEBPACK_IMPORT_KEY__)); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + +/***/ }), + +/***/ "./src/assets/javascripts/components/navigation/layer/_/index.ts": +/*!***********************************************************************!*\ + !*** ./src/assets/javascripts/components/navigation/layer/_/index.ts ***! + \***********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + +/***/ }), + +/***/ "./src/assets/javascripts/components/navigation/layer/index.ts": +/*!*********************************************************************!*\ + !*** ./src/assets/javascripts/components/navigation/layer/index.ts ***! + \*********************************************************************/ +/*! no static exports found */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/components/navigation/layer/_/index.ts"); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_0__); +/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in ___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return ___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__)); +/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./react */ "./src/assets/javascripts/components/navigation/layer/react/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchNavigationLayer", function() { return _react__WEBPACK_IMPORTED_MODULE_1__["watchNavigationLayer"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "applyNavigationLayer", function() { return _react__WEBPACK_IMPORTED_MODULE_1__["applyNavigationLayer"]; }); + +/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./set */ "./src/assets/javascripts/components/navigation/layer/set/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setOverflowScrolling", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["setOverflowScrolling"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetOverflowScrolling", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["resetOverflowScrolling"]; }); + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + +/***/ }), + +/***/ "./src/assets/javascripts/components/navigation/layer/react/index.ts": +/*!***************************************************************************!*\ + !*** ./src/assets/javascripts/components/navigation/layer/react/index.ts ***! + \***************************************************************************/ +/*! exports provided: watchNavigationLayer, applyNavigationLayer */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchNavigationLayer", function() { return watchNavigationLayer; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "applyNavigationLayer", function() { return applyNavigationLayer; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); +/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ramda */ "./node_modules/ramda/es/index.js"); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../set */ "./src/assets/javascripts/components/navigation/layer/set/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Watch navigation layer + * + * On iOS we want to add `-webkit-overflow-scrolling: touch` for the menus + * contained in the drawer, but as the navigational layers are nested, we can + * only add it to the topmost layer or extremely weird cropping will occur. + * This implementation keeps track of the previous and current layer. + * + * @param els - Navigation elements + * + * @return Navigation layer observable + */ +function watchNavigationLayer(els) { + var e_1, _a; + var table = new Map(); + try { + for (var els_1 = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(els), els_1_1 = els_1.next(); !els_1_1.done; els_1_1 = els_1.next()) { + var el = els_1_1.value; + var label = Object(browser__WEBPACK_IMPORTED_MODULE_4__["getElement"])("label", el); + if (typeof label !== "undefined") { + var input = Object(browser__WEBPACK_IMPORTED_MODULE_4__["getElementOrThrow"])("#" + label.htmlFor); + table.set(input, el); + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (els_1_1 && !els_1_1.done && (_a = els_1.return)) _a.call(els_1); + } + finally { if (e_1) throw e_1.error; } + } + /* Determine topmost layer */ + var layer$ = rxjs__WEBPACK_IMPORTED_MODULE_2__["merge"].apply(void 0, Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__spread"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__spread"])(table.keys()).map(function (input) { return (Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(input, "change")); }))).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function () { return Object(browser__WEBPACK_IMPORTED_MODULE_4__["getElementOrThrow"])(".md-nav__list", table.get(Object(ramda__WEBPACK_IMPORTED_MODULE_1__["findLast"])(function (_a) { + var checked = _a.checked; + return checked; + }, Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__spread"])(table.keys())))); })); + /* Return previous and next layer */ + return layer$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (next) { return ({ next: next }); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["scan"])(function (_a, _b) { + var prev = _a.next; + var next = _b.next; + return ({ prev: prev, next: next }); + })); +} +/* ------------------------------------------------------------------------- */ +/** + * Apply navigation layer + * + * @param els - Navigation elements + * + * @return Operator function + */ +function applyNavigationLayer(els) { + return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["pipe"])( + /* Defer repaint to next animation frame */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["observeOn"])(rxjs__WEBPACK_IMPORTED_MODULE_2__["animationFrameScheduler"]), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])(function (_a) { + var prev = _a.prev; + if (prev) + Object(_set__WEBPACK_IMPORTED_MODULE_5__["resetOverflowScrolling"])(prev); + }), + /* Wait until transition has finished */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["delay"])(250), + /* Defer repaint to next animation frame */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["observeOn"])(rxjs__WEBPACK_IMPORTED_MODULE_2__["animationFrameScheduler"]), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])(function (_a) { + var next = _a.next; + Object(_set__WEBPACK_IMPORTED_MODULE_5__["setOverflowScrolling"])(next); + }), + /* Reset on complete or error */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["finalize"])(function () { + var e_2, _a; + try { + for (var els_2 = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(els), els_2_1 = els_2.next(); !els_2_1.done; els_2_1 = els_2.next()) { + var el = els_2_1.value; + Object(_set__WEBPACK_IMPORTED_MODULE_5__["resetOverflowScrolling"])(Object(browser__WEBPACK_IMPORTED_MODULE_4__["getElementOrThrow"])(".md-nav__list", el)); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (els_2_1 && !els_2_1.done && (_a = els_2.return)) _a.call(els_2); + } + finally { if (e_2) throw e_2.error; } + } + })); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/navigation/layer/set/index.ts": +/*!*************************************************************************!*\ + !*** ./src/assets/javascripts/components/navigation/layer/set/index.ts ***! + \*************************************************************************/ +/*! exports provided: setOverflowScrolling, resetOverflowScrolling */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setOverflowScrolling", function() { return setOverflowScrolling; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resetOverflowScrolling", function() { return resetOverflowScrolling; }); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Set overflow scrolling + * + * @param el - Scrollable element + */ +function setOverflowScrolling(el) { + el.style.webkitOverflowScrolling = "touch"; +} +/** + * Reset overflow scrolling + * + * @param el - Scrollable element + */ +function resetOverflowScrolling(el) { + el.style.webkitOverflowScrolling = ""; +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/search/_/index.ts": +/*!*************************************************************!*\ + !*** ./src/assets/javascripts/components/search/_/index.ts ***! + \*************************************************************/ +/*! exports provided: mountSearch */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mountSearch", function() { return mountSearch; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Mount search from source observable + * + * @param options - Options + * + * @return Operator function + */ +function mountSearch(_a) { + var query$ = _a.query$, reset$ = _a.reset$, result$ = _a.result$; + return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["pipe"])(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])(function () { return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["combineLatest"])([query$, result$, reset$]) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), query = _b[0], result = _b[1]; + return ({ query: query, result: result }); + })); })); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/search/index.ts": +/*!***********************************************************!*\ + !*** ./src/assets/javascripts/components/search/index.ts ***! + \***********************************************************/ +/*! exports provided: mountSearch, mountSearchQuery, watchSearchQuery, mountSearchReset, watchSearchReset, mountSearchResult, applySearchResult, setSearchResultMeta, resetSearchResultMeta, addToSearchResultList, resetSearchResultList */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/components/search/_/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountSearch", function() { return ___WEBPACK_IMPORTED_MODULE_0__["mountSearch"]; }); + +/* harmony import */ var _query__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./query */ "./src/assets/javascripts/components/search/query/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountSearchQuery", function() { return _query__WEBPACK_IMPORTED_MODULE_1__["mountSearchQuery"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchSearchQuery", function() { return _query__WEBPACK_IMPORTED_MODULE_1__["watchSearchQuery"]; }); + +/* harmony import */ var _reset__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./reset */ "./src/assets/javascripts/components/search/reset/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountSearchReset", function() { return _reset__WEBPACK_IMPORTED_MODULE_2__["mountSearchReset"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchSearchReset", function() { return _reset__WEBPACK_IMPORTED_MODULE_2__["watchSearchReset"]; }); + +/* harmony import */ var _result__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./result */ "./src/assets/javascripts/components/search/result/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountSearchResult", function() { return _result__WEBPACK_IMPORTED_MODULE_3__["mountSearchResult"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "applySearchResult", function() { return _result__WEBPACK_IMPORTED_MODULE_3__["applySearchResult"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setSearchResultMeta", function() { return _result__WEBPACK_IMPORTED_MODULE_3__["setSearchResultMeta"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetSearchResultMeta", function() { return _result__WEBPACK_IMPORTED_MODULE_3__["resetSearchResultMeta"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "addToSearchResultList", function() { return _result__WEBPACK_IMPORTED_MODULE_3__["addToSearchResultList"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetSearchResultList", function() { return _result__WEBPACK_IMPORTED_MODULE_3__["resetSearchResultList"]; }); + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + + +/***/ }), + +/***/ "./src/assets/javascripts/components/search/query/_/index.ts": +/*!*******************************************************************!*\ + !*** ./src/assets/javascripts/components/search/query/_/index.ts ***! + \*******************************************************************/ +/*! exports provided: mountSearchQuery */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mountSearchQuery", function() { return mountSearchQuery; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* harmony import */ var workers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! workers */ "./src/assets/javascripts/workers/index.ts"); +/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../react */ "./src/assets/javascripts/components/search/query/react/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Mount search query from source observable + * + * @param handler - Worker handler + * @param options - Options + * + * @return Operator function + */ +function mountSearchQuery(_a, options) { + var tx$ = _a.tx$; + if (options === void 0) { options = {}; } + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["pipe"])(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["switchMap"])(function (el) { + var query$ = Object(_react__WEBPACK_IMPORTED_MODULE_4__["watchSearchQuery"])(el, options); + /* Subscribe worker to search query */ + query$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["distinctUntilKeyChanged"])("value"), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(function (_a) { + var value = _a.value; + return ({ + type: workers__WEBPACK_IMPORTED_MODULE_3__["SearchMessageType"].QUERY, + data: value + }); + })) + .subscribe(tx$.next.bind(tx$)); + /* Toggle search on focus */ + query$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["distinctUntilKeyChanged"])("focus")) + .subscribe(function (_a) { + var focus = _a.focus; + if (focus) + Object(browser__WEBPACK_IMPORTED_MODULE_2__["setToggle"])("search", focus); + }); + /* Return search query */ + return query$; + })); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/search/query/index.ts": +/*!*****************************************************************!*\ + !*** ./src/assets/javascripts/components/search/query/index.ts ***! + \*****************************************************************/ +/*! exports provided: mountSearchQuery, watchSearchQuery */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/components/search/query/_/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountSearchQuery", function() { return ___WEBPACK_IMPORTED_MODULE_0__["mountSearchQuery"]; }); + +/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./react */ "./src/assets/javascripts/components/search/query/react/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchSearchQuery", function() { return _react__WEBPACK_IMPORTED_MODULE_1__["watchSearchQuery"]; }); + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + +/***/ }), + +/***/ "./src/assets/javascripts/components/search/query/react/index.ts": +/*!***********************************************************************!*\ + !*** ./src/assets/javascripts/components/search/query/react/index.ts ***! + \***********************************************************************/ +/*! exports provided: watchSearchQuery */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchSearchQuery", function() { return watchSearchQuery; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + +/* ---------------------------------------------------------------------------- + * Helper functions + * ------------------------------------------------------------------------- */ +/** + * Default transformation function + * + * Rogue control characters are filtered before handing the query to the + * search index, as `lunr` will throw otherwise. + * + * @param value - Query value + * + * @return Transformed query value + */ +function defaultTransform(value) { + return value + .replace(/(?:^|\s+)[*+-:^~]+(?=\s+|$)/g, "") + .trim() + .replace(/\s+|\b$/g, "* "); +} +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Watch search query + * + * Note that the focus event which triggers re-reading the current query value + * is delayed by `1ms` so the input's empty state is allowed to propagate. + * + * @param el - Search query element + * @param options - Options + * + * @return Search query observable + */ +function watchSearchQuery(el, _a) { + var transform = (_a === void 0 ? {} : _a).transform; + var fn = transform || defaultTransform; + /* Intercept keyboard events */ + var value$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["merge"])(Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["fromEvent"])(el, "keyup"), Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["fromEvent"])(el, "focus").pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["delay"])(1))) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function () { return fn(el.value); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["startWith"])(fn(el.value)), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["distinctUntilChanged"])()); + /* Intercept focus events */ + var focus$ = Object(browser__WEBPACK_IMPORTED_MODULE_3__["watchElementFocus"])(el); + /* Combine into a single observable */ + return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["combineLatest"])([value$, focus$]) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), value = _b[0], focus = _b[1]; + return ({ value: value, focus: focus }); + })); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/search/reset/_/index.ts": +/*!*******************************************************************!*\ + !*** ./src/assets/javascripts/components/search/reset/_/index.ts ***! + \*******************************************************************/ +/*! exports provided: mountSearchReset */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mountSearchReset", function() { return mountSearchReset; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../_ */ "./src/assets/javascripts/components/_/index.ts"); +/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../react */ "./src/assets/javascripts/components/search/reset/react/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Mount search reset from source observable + * + * @return Operator function + */ +function mountSearchReset() { + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["pipe"])(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["switchMap"])(function (el) { return Object(_react__WEBPACK_IMPORTED_MODULE_4__["watchSearchReset"])(el) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["switchMapTo"])(Object(___WEBPACK_IMPORTED_MODULE_3__["useComponent"])("search-query")), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["tap"])(browser__WEBPACK_IMPORTED_MODULE_2__["setElementFocus"]), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["mapTo"])(undefined)); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["startWith"])(undefined)); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/search/reset/index.ts": +/*!*****************************************************************!*\ + !*** ./src/assets/javascripts/components/search/reset/index.ts ***! + \*****************************************************************/ +/*! exports provided: mountSearchReset, watchSearchReset */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/components/search/reset/_/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountSearchReset", function() { return ___WEBPACK_IMPORTED_MODULE_0__["mountSearchReset"]; }); + +/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./react */ "./src/assets/javascripts/components/search/reset/react/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchSearchReset", function() { return _react__WEBPACK_IMPORTED_MODULE_1__["watchSearchReset"]; }); + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + +/***/ }), + +/***/ "./src/assets/javascripts/components/search/reset/react/index.ts": +/*!***********************************************************************!*\ + !*** ./src/assets/javascripts/components/search/reset/react/index.ts ***! + \***********************************************************************/ +/*! exports provided: watchSearchReset */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchSearchReset", function() { return watchSearchReset; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Watch search reset + * + * @param el - Search reset element + * + * @return Search reset observable + */ +function watchSearchReset(el) { + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["fromEvent"])(el, "click") + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["mapTo"])(undefined)); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/search/result/_/index.ts": +/*!********************************************************************!*\ + !*** ./src/assets/javascripts/components/search/result/_/index.ts ***! + \********************************************************************/ +/*! exports provided: mountSearchResult */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mountSearchResult", function() { return mountSearchResult; }); +/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ramda */ "./node_modules/ramda/es/index.js"); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* harmony import */ var workers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! workers */ "./src/assets/javascripts/workers/index.ts"); +/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../react */ "./src/assets/javascripts/components/search/result/react/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Mount search result from source observable + * + * @param handler - Worker handler + * @param options - Options + * + * @return Operator function + */ +function mountSearchResult(_a, _b) { + var rx$ = _a.rx$; + var query$ = _b.query$; + return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["pipe"])(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])(function (el) { + var container = el.parentElement; + /* Compute whether there are more search results to fetch */ + var fetch$ = Object(browser__WEBPACK_IMPORTED_MODULE_3__["watchElementOffset"])(container) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { + var y = _a.y; + return y >= container.scrollHeight - container.offsetHeight - 16; + }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["distinctUntilChanged"])(), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["filter"])(ramda__WEBPACK_IMPORTED_MODULE_0__["identity"])); + /* Apply search results */ + return rx$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["filter"])(workers__WEBPACK_IMPORTED_MODULE_4__["isSearchResultMessage"]), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["pluck"])("data"), Object(_react__WEBPACK_IMPORTED_MODULE_5__["applySearchResult"])(el, { query$: query$, fetch$: fetch$ })); + })); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/search/result/index.ts": +/*!******************************************************************!*\ + !*** ./src/assets/javascripts/components/search/result/index.ts ***! + \******************************************************************/ +/*! exports provided: mountSearchResult, applySearchResult, setSearchResultMeta, resetSearchResultMeta, addToSearchResultList, resetSearchResultList */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/components/search/result/_/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountSearchResult", function() { return ___WEBPACK_IMPORTED_MODULE_0__["mountSearchResult"]; }); + +/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./react */ "./src/assets/javascripts/components/search/result/react/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "applySearchResult", function() { return _react__WEBPACK_IMPORTED_MODULE_1__["applySearchResult"]; }); + +/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./set */ "./src/assets/javascripts/components/search/result/set/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setSearchResultMeta", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["setSearchResultMeta"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetSearchResultMeta", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["resetSearchResultMeta"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "addToSearchResultList", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["addToSearchResultList"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetSearchResultList", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["resetSearchResultList"]; }); + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + +/***/ }), + +/***/ "./src/assets/javascripts/components/search/result/react/index.ts": +/*!************************************************************************!*\ + !*** ./src/assets/javascripts/components/search/result/react/index.ts ***! + \************************************************************************/ +/*! exports provided: applySearchResult */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "applySearchResult", function() { return applySearchResult; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* harmony import */ var templates__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! templates */ "./src/assets/javascripts/templates/index.ts"); +/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../set */ "./src/assets/javascripts/components/search/result/set/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Apply search results + * + * This function will perform a lazy rendering of the search results, depending + * on the vertical offset of the search result container. When the scroll offset + * reaches the bottom of the element, more results are fetched and rendered. + * + * @param el - Search result element + * @param options - Options + * + * @return Operator function + */ +function applySearchResult(el, _a) { + var query$ = _a.query$, fetch$ = _a.fetch$; + var list = Object(browser__WEBPACK_IMPORTED_MODULE_3__["getElementOrThrow"])(".md-search-result__list", el); + var meta = Object(browser__WEBPACK_IMPORTED_MODULE_3__["getElementOrThrow"])(".md-search-result__meta", el); + return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["pipe"])( + /* Apply search result metadata */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["withLatestFrom"])(query$), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), result = _b[0], query = _b[1]; + if (query.value) { + Object(_set__WEBPACK_IMPORTED_MODULE_5__["setSearchResultMeta"])(meta, result.length); + } + else { + Object(_set__WEBPACK_IMPORTED_MODULE_5__["resetSearchResultMeta"])(meta); + } + return result; + }), + /* Apply search result list */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])(function (result) { return fetch$ + .pipe( + /* Defer repaint to next animation frame */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["observeOn"])(rxjs__WEBPACK_IMPORTED_MODULE_1__["animationFrameScheduler"]), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["scan"])(function (index) { + var container = el.parentElement; + while (index < result.length) { + Object(_set__WEBPACK_IMPORTED_MODULE_5__["addToSearchResultList"])(list, Object(templates__WEBPACK_IMPORTED_MODULE_4__["renderSearchResult"])(result[index++])); + if (container.scrollHeight - container.offsetHeight > 16) + break; + } + return index; + }, 0), + /* Re-map to search result */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["mapTo"])(result), + /* Reset on complete or error */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["finalize"])(function () { + Object(_set__WEBPACK_IMPORTED_MODULE_5__["resetSearchResultList"])(list); + })); })); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/search/result/set/index.ts": +/*!**********************************************************************!*\ + !*** ./src/assets/javascripts/components/search/result/set/index.ts ***! + \**********************************************************************/ +/*! exports provided: setSearchResultMeta, resetSearchResultMeta, addToSearchResultList, resetSearchResultList */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setSearchResultMeta", function() { return setSearchResultMeta; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resetSearchResultMeta", function() { return resetSearchResultMeta; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addToSearchResultList", function() { return addToSearchResultList; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resetSearchResultList", function() { return resetSearchResultList; }); +/* harmony import */ var utilities__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! utilities */ "./src/assets/javascripts/utilities/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Set number of search results + * + * @param el - Search result metadata element + * @param value - Number of results + */ +function setSearchResultMeta(el, value) { + switch (value) { + /* No results */ + case 0: + el.textContent = Object(utilities__WEBPACK_IMPORTED_MODULE_0__["translate"])("search.result.none"); + break; + /* One result */ + case 1: + el.textContent = Object(utilities__WEBPACK_IMPORTED_MODULE_0__["translate"])("search.result.one"); + break; + /* Multiple result */ + default: + el.textContent = Object(utilities__WEBPACK_IMPORTED_MODULE_0__["translate"])("search.result.other", value.toString()); + } +} +/** + * Reset number of search results + * + * @param el - Search result metadata element + */ +function resetSearchResultMeta(el) { + el.textContent = Object(utilities__WEBPACK_IMPORTED_MODULE_0__["translate"])("search.result.placeholder"); +} +/* ------------------------------------------------------------------------- */ +/** + * Add an element to the search result list + * + * @param el - Search result list element + * @param child - Search result element + */ +function addToSearchResultList(el, child) { + el.appendChild(child); +} +/** + * Reset search result list + * + * @param el - Search result list element + */ +function resetSearchResultList(el) { + el.innerHTML = ""; +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/shared/index.ts": +/*!***********************************************************!*\ + !*** ./src/assets/javascripts/components/shared/index.ts ***! + \***********************************************************/ +/*! no static exports found */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _sidebar__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sidebar */ "./src/assets/javascripts/components/shared/sidebar/index.ts"); +/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _sidebar__WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _sidebar__WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__)); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + +/***/ }), + +/***/ "./src/assets/javascripts/components/shared/sidebar/_/index.ts": +/*!*********************************************************************!*\ + !*** ./src/assets/javascripts/components/shared/sidebar/_/index.ts ***! + \*********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + +/***/ }), + +/***/ "./src/assets/javascripts/components/shared/sidebar/index.ts": +/*!*******************************************************************!*\ + !*** ./src/assets/javascripts/components/shared/sidebar/index.ts ***! + \*******************************************************************/ +/*! no static exports found */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/components/shared/sidebar/_/index.ts"); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_0__); +/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in ___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return ___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__)); +/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./react */ "./src/assets/javascripts/components/shared/sidebar/react/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchSidebar", function() { return _react__WEBPACK_IMPORTED_MODULE_1__["watchSidebar"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "applySidebar", function() { return _react__WEBPACK_IMPORTED_MODULE_1__["applySidebar"]; }); + +/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./set */ "./src/assets/javascripts/components/shared/sidebar/set/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setSidebarOffset", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["setSidebarOffset"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetSidebarOffset", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["resetSidebarOffset"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setSidebarHeight", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["setSidebarHeight"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetSidebarHeight", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["resetSidebarHeight"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setSidebarLock", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["setSidebarLock"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetSidebarLock", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["resetSidebarLock"]; }); + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + +/***/ }), + +/***/ "./src/assets/javascripts/components/shared/sidebar/react/index.ts": +/*!*************************************************************************!*\ + !*** ./src/assets/javascripts/components/shared/sidebar/react/index.ts ***! + \*************************************************************************/ +/*! exports provided: watchSidebar, applySidebar */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchSidebar", function() { return watchSidebar; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "applySidebar", function() { return applySidebar; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../set */ "./src/assets/javascripts/components/shared/sidebar/set/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Watch sidebar + * + * This function returns an observable that computes the visual parameters of + * the sidebar which depends on the vertical viewport offset, as well as the + * height of the main area. When the page is scrolled beyond the header, the + * sidebar is locked and fills the remaining space. + * + * @param el - Sidebar element + * @param options - Options + * + * @return Sidebar observable + */ +function watchSidebar(el, _a) { + var main$ = _a.main$, viewport$ = _a.viewport$; + /* Adjust for internal main area offset */ + var adjust$ = viewport$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["distinctUntilKeyChanged"])("size"), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function () { return parseFloat(getComputedStyle(el.parentElement) + .getPropertyValue("padding-top")); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["distinctUntilChanged"])()); + /* Compute the sidebar's available height */ + var height$ = viewport$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["withLatestFrom"])(adjust$, main$), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 3), y = _b[0].offset.y, adjust = _b[1], _c = _b[2], offset = _c.offset, height = _c.height; + return (height + + Math.min(adjust, Math.max(0, y - offset)) + - adjust); + }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["distinctUntilChanged"])()); + /* Compute whether the sidebar should be locked */ + var lock$ = viewport$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["withLatestFrom"])(adjust$, main$), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 3), y = _b[0].offset.y, adjust = _b[1], offset = _b[2].offset; + return (y >= offset + adjust); + }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["distinctUntilChanged"])()); + /* Combine into single observable */ + return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["combineLatest"])([height$, lock$]) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), height = _b[0], lock = _b[1]; + return ({ height: height, lock: lock }); + })); +} +/* ------------------------------------------------------------------------- */ +/** + * Apply sidebar + * + * @param el - Sidebar element + * @param options - Options + * + * @return Operator function + */ +function applySidebar(el, _a) { + var header$ = _a.header$; + return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["pipe"])( + /* Defer repaint to next animation frame */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["observeOn"])(rxjs__WEBPACK_IMPORTED_MODULE_1__["animationFrameScheduler"]), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["withLatestFrom"])(header$), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["tap"])(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), _c = _b[0], height = _c.height, lock = _c.lock, offset = _b[1].height; + Object(_set__WEBPACK_IMPORTED_MODULE_3__["setSidebarHeight"])(el, height); + Object(_set__WEBPACK_IMPORTED_MODULE_3__["setSidebarLock"])(el, lock); + /* Set offset in locked state depending on header height */ + if (lock) + Object(_set__WEBPACK_IMPORTED_MODULE_3__["setSidebarOffset"])(el, offset); + else + Object(_set__WEBPACK_IMPORTED_MODULE_3__["resetSidebarOffset"])(el); + }), + /* Re-map to sidebar */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 1), sidebar = _b[0]; + return sidebar; + }), + /* Reset on complete or error */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["finalize"])(function () { + Object(_set__WEBPACK_IMPORTED_MODULE_3__["resetSidebarOffset"])(el); + Object(_set__WEBPACK_IMPORTED_MODULE_3__["resetSidebarHeight"])(el); + Object(_set__WEBPACK_IMPORTED_MODULE_3__["resetSidebarLock"])(el); + })); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/shared/sidebar/set/index.ts": +/*!***********************************************************************!*\ + !*** ./src/assets/javascripts/components/shared/sidebar/set/index.ts ***! + \***********************************************************************/ +/*! exports provided: setSidebarOffset, resetSidebarOffset, setSidebarHeight, resetSidebarHeight, setSidebarLock, resetSidebarLock */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setSidebarOffset", function() { return setSidebarOffset; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resetSidebarOffset", function() { return resetSidebarOffset; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setSidebarHeight", function() { return setSidebarHeight; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resetSidebarHeight", function() { return resetSidebarHeight; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setSidebarLock", function() { return setSidebarLock; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resetSidebarLock", function() { return resetSidebarLock; }); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Set sidebar offset + * + * @param el - Sidebar element + * @param value - Sidebar offset + */ +function setSidebarOffset(el, value) { + el.style.top = value + "px"; +} +/** + * Reset sidebar offset + * + * @param el - Sidebar element + */ +function resetSidebarOffset(el) { + el.style.top = ""; +} +/* ------------------------------------------------------------------------- */ +/** + * Set sidebar height + * + * @param el - Sidebar element + * @param value - Sidebar height + */ +function setSidebarHeight(el, value) { + el.style.height = value + "px"; +} +/** + * Reset sidebar height + * + * @param el - Sidebar element + */ +function resetSidebarHeight(el) { + el.style.height = ""; +} +/* ------------------------------------------------------------------------- */ +/** + * Set sidebar lock + * + * @param el - Sidebar element + * @param value - Whether the sidebar is locked + */ +function setSidebarLock(el, value) { + el.setAttribute("data-md-state", value ? "lock" : ""); +} +/** + * Reset sidebar lock + * + * @param el - Sidebar element + */ +function resetSidebarLock(el) { + el.removeAttribute("data-md-state"); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/tabs/_/index.ts": +/*!***********************************************************!*\ + !*** ./src/assets/javascripts/components/tabs/_/index.ts ***! + \***********************************************************/ +/*! exports provided: mountTabs */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mountTabs", function() { return mountTabs; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../react */ "./src/assets/javascripts/components/tabs/react/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Mount tabs from source observable + * + * @param options - Options + * + * @return Operator function + */ +function mountTabs(_a) { + var header$ = _a.header$, viewport$ = _a.viewport$, screen$ = _a.screen$; + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["pipe"])(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["switchMap"])(function (el) { return screen$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["switchMap"])(function (screen) { + /* [screen +]: Mount tabs above screen breakpoint */ + if (screen) { + return Object(browser__WEBPACK_IMPORTED_MODULE_2__["watchViewportAt"])(el, { header$: header$, viewport$: viewport$ }) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(function (_a) { + var y = _a.offset.y; + return ({ hidden: y >= 10 }); + }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["distinctUntilChanged"])(), Object(_react__WEBPACK_IMPORTED_MODULE_3__["applyTabs"])(el)); + /* [screen -]: Unmount tabs below screen breakpoint */ + } + else { + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["of"])({ hidden: true }); + } + })); })); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/tabs/index.ts": +/*!*********************************************************!*\ + !*** ./src/assets/javascripts/components/tabs/index.ts ***! + \*********************************************************/ +/*! exports provided: mountTabs, applyTabs, setTabsHidden, resetTabsHidden */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/components/tabs/_/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountTabs", function() { return ___WEBPACK_IMPORTED_MODULE_0__["mountTabs"]; }); + +/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./react */ "./src/assets/javascripts/components/tabs/react/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "applyTabs", function() { return _react__WEBPACK_IMPORTED_MODULE_1__["applyTabs"]; }); + +/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./set */ "./src/assets/javascripts/components/tabs/set/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setTabsHidden", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["setTabsHidden"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetTabsHidden", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["resetTabsHidden"]; }); + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + +/***/ }), + +/***/ "./src/assets/javascripts/components/tabs/react/index.ts": +/*!***************************************************************!*\ + !*** ./src/assets/javascripts/components/tabs/react/index.ts ***! + \***************************************************************/ +/*! exports provided: applyTabs */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "applyTabs", function() { return applyTabs; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../set */ "./src/assets/javascripts/components/tabs/set/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Apply tabs + * + * @param el - Tabs element + * + * @return Operator function + */ +function applyTabs(el) { + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["pipe"])( + /* Defer repaint to next animation frame */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["observeOn"])(rxjs__WEBPACK_IMPORTED_MODULE_0__["animationFrameScheduler"]), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["tap"])(function (_a) { + var hidden = _a.hidden; + Object(_set__WEBPACK_IMPORTED_MODULE_2__["setTabsHidden"])(el, hidden); + }), + /* Reset on complete or error */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["finalize"])(function () { + Object(_set__WEBPACK_IMPORTED_MODULE_2__["resetTabsHidden"])(el); + })); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/tabs/set/index.ts": +/*!*************************************************************!*\ + !*** ./src/assets/javascripts/components/tabs/set/index.ts ***! + \*************************************************************/ +/*! exports provided: setTabsHidden, resetTabsHidden */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setTabsHidden", function() { return setTabsHidden; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resetTabsHidden", function() { return resetTabsHidden; }); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Set tabs hidden + * + * @param el - Tabs element + * @param value - Whether the element is hidden + */ +function setTabsHidden(el, value) { + el.setAttribute("data-md-state", value ? "hidden" : ""); +} +/** + * Reset tabs hidden + * + * @param el - Tabs element + */ +function resetTabsHidden(el) { + el.removeAttribute("data-md-state"); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/toc/_/index.ts": +/*!**********************************************************!*\ + !*** ./src/assets/javascripts/components/toc/_/index.ts ***! + \**********************************************************/ +/*! exports provided: mountTableOfContents */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mountTableOfContents", function() { return mountTableOfContents; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* harmony import */ var _shared__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../shared */ "./src/assets/javascripts/components/shared/index.ts"); +/* harmony import */ var _anchor__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../anchor */ "./src/assets/javascripts/components/toc/anchor/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Mount table of contents from source observable + * + * @param options - Options + * + * @return Operator function + */ +function mountTableOfContents(_a) { + var header$ = _a.header$, main$ = _a.main$, viewport$ = _a.viewport$, tablet$ = _a.tablet$; + return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["pipe"])(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])(function (el) { return tablet$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])(function (tablet) { + /* [tablet +]: Mount table of contents in sidebar */ + if (tablet) { + var els = Object(browser__WEBPACK_IMPORTED_MODULE_3__["getElements"])(".md-nav__link", el); + /* Watch and apply sidebar */ + var sidebar$ = Object(_shared__WEBPACK_IMPORTED_MODULE_4__["watchSidebar"])(el, { main$: main$, viewport$: viewport$ }) + .pipe(Object(_shared__WEBPACK_IMPORTED_MODULE_4__["applySidebar"])(el, { header$: header$ })); + /* Watch and apply anchor list (scroll spy) */ + var anchors$ = Object(_anchor__WEBPACK_IMPORTED_MODULE_5__["watchAnchorList"])(els, { header$: header$, viewport$: viewport$ }) + .pipe(Object(_anchor__WEBPACK_IMPORTED_MODULE_5__["applyAnchorList"])(els)); + /* Combine into a single hot observable */ + return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["combineLatest"])([sidebar$, anchors$]) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), sidebar = _b[0], anchors = _b[1]; + return ({ sidebar: sidebar, anchors: anchors }); + })); + /* [tablet -]: Unmount table of contents */ + } + else { + return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["of"])({}); + } + })); })); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/toc/anchor/_/index.ts": +/*!*****************************************************************!*\ + !*** ./src/assets/javascripts/components/toc/anchor/_/index.ts ***! + \*****************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + +/***/ }), + +/***/ "./src/assets/javascripts/components/toc/anchor/index.ts": +/*!***************************************************************!*\ + !*** ./src/assets/javascripts/components/toc/anchor/index.ts ***! + \***************************************************************/ +/*! no static exports found */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/components/toc/anchor/_/index.ts"); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_0__); +/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in ___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return ___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__)); +/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./react */ "./src/assets/javascripts/components/toc/anchor/react/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchAnchorList", function() { return _react__WEBPACK_IMPORTED_MODULE_1__["watchAnchorList"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "applyAnchorList", function() { return _react__WEBPACK_IMPORTED_MODULE_1__["applyAnchorList"]; }); + +/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./set */ "./src/assets/javascripts/components/toc/anchor/set/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setAnchorBlur", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["setAnchorBlur"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetAnchorBlur", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["resetAnchorBlur"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setAnchorActive", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["setAnchorActive"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetAnchorActive", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["resetAnchorActive"]; }); + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + +/***/ }), + +/***/ "./src/assets/javascripts/components/toc/anchor/react/index.ts": +/*!*********************************************************************!*\ + !*** ./src/assets/javascripts/components/toc/anchor/react/index.ts ***! + \*********************************************************************/ +/*! exports provided: watchAnchorList, applyAnchorList */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchAnchorList", function() { return watchAnchorList; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "applyAnchorList", function() { return applyAnchorList; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); +/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ramda */ "./node_modules/ramda/es/index.js"); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../set */ "./src/assets/javascripts/components/toc/anchor/set/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Watch anchor list + * + * This is effectively a scroll-spy implementation which will account for the + * fixed header and automatically re-calculate anchor offsets when the viewport + * is resized. The returned observable will only emit if the anchor list needs + * to be repainted. + * + * This implementation tracks an anchor element's entire path starting from its + * level up to the top-most anchor element, e.g. `[h3, h2, h1]`. Although the + * Material theme currently doesn't make use of this information, it enables + * the styling of the entire hierarchy through customization. + * + * Note that the current anchor is the last item of the `prev` anchor list. + * + * @param els - Anchor elements + * @param options - Options + * + * @return Anchor list observable + */ +function watchAnchorList(els, _a) { + var e_1, _b; + var header$ = _a.header$, viewport$ = _a.viewport$; + var table = new Map(); + try { + for (var els_1 = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(els), els_1_1 = els_1.next(); !els_1_1.done; els_1_1 = els_1.next()) { + var el = els_1_1.value; + var id = decodeURIComponent(el.hash.substring(1)); + var target = Object(browser__WEBPACK_IMPORTED_MODULE_4__["getElement"])("[id=\"" + id + "\"]"); + if (typeof target !== "undefined") + table.set(el, target); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (els_1_1 && !els_1_1.done && (_b = els_1.return)) _b.call(els_1); + } + finally { if (e_1) throw e_1.error; } + } + /* Compute necessary adjustment for header */ + var adjust$ = header$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (header) { return 18 + header.height; })); + /* Compute partition of previous and next anchors */ + var partition$ = viewport$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["distinctUntilKeyChanged"])("size"), + /* Build index to map anchor paths to vertical offsets */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function () { + var path = []; + return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__spread"])(table).reduce(function (index, _a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), anchor = _b[0], target = _b[1]; + while (path.length) { + var last = table.get(path[path.length - 1]); + if (last.tagName >= target.tagName) { + path.pop(); + } + else { + break; + } + } + /* If the current anchor is hidden, continue with its parent */ + var offset = target.offsetTop; + while (!offset && target.parentElement) { + target = target.parentElement; + offset = target.offsetTop; + } + /* Map reversed anchor path to vertical offset */ + return index.set(Object(ramda__WEBPACK_IMPORTED_MODULE_1__["reverse"])(path = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__spread"])(path, [anchor])), offset); + }, new Map()); + }), + /* Re-compute partition when viewport offset changes */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["switchMap"])(function (index) { return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["combineLatest"])([adjust$, viewport$]) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["scan"])(function (_a, _b) { + var _c = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), prev = _c[0], next = _c[1]; + var _d = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_b, 2), adjust = _d[0], y = _d[1].offset.y; + /* Look forward */ + while (next.length) { + var _e = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(next[0], 2), offset = _e[1]; + if (offset - adjust < y) { + prev = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__spread"])(prev, [next.shift()]); + } + else { + break; + } + } + /* Look backward */ + while (prev.length) { + var _f = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(prev[prev.length - 1], 2), offset = _f[1]; + if (offset - adjust >= y) { + next = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__spread"])([prev.pop()], next); + } + else { + break; + } + } + /* Return partition */ + return [prev, next]; + }, [[], Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__spread"])(index)]), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["distinctUntilChanged"])(function (a, b) { + return a[0] === b[0] + && a[1] === b[1]; + })); })); + /* Compute and return anchor list migrations */ + return partition$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), prev = _b[0], next = _b[1]; + return ({ + prev: prev.map(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 1), path = _b[0]; + return path; + }), + next: next.map(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 1), path = _b[0]; + return path; + }) + }); + }), + /* Extract anchor list migrations */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["startWith"])({ prev: [], next: [] }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["bufferCount"])(2, 1), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), a = _b[0], b = _b[1]; + /* Moving down */ + if (a.prev.length < b.prev.length) { + return { + prev: b.prev.slice(Math.max(0, a.prev.length - 1), b.prev.length), + next: [] + }; + /* Moving up */ + } + else { + return { + prev: b.prev.slice(-1), + next: b.next.slice(0, b.next.length - a.next.length) + }; + } + })); +} +/* ------------------------------------------------------------------------- */ +/** + * Apply anchor list + * + * @param els - Anchor elements + * + * @return Operator function + */ +function applyAnchorList(els) { + return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["pipe"])( + /* Defer repaint to next animation frame */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["observeOn"])(rxjs__WEBPACK_IMPORTED_MODULE_2__["animationFrameScheduler"]), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])(function (_a) { + var e_2, _b; + var prev = _a.prev, next = _a.next; + try { + /* Look forward */ + for (var next_1 = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(next), next_1_1 = next_1.next(); !next_1_1.done; next_1_1 = next_1.next()) { + var _c = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(next_1_1.value, 1), el = _c[0]; + Object(_set__WEBPACK_IMPORTED_MODULE_5__["resetAnchorActive"])(el); + Object(_set__WEBPACK_IMPORTED_MODULE_5__["resetAnchorBlur"])(el); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (next_1_1 && !next_1_1.done && (_b = next_1.return)) _b.call(next_1); + } + finally { if (e_2) throw e_2.error; } + } + /* Look backward */ + prev.forEach(function (_a, index) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 1), el = _b[0]; + Object(_set__WEBPACK_IMPORTED_MODULE_5__["setAnchorActive"])(el, index === prev.length - 1); + Object(_set__WEBPACK_IMPORTED_MODULE_5__["setAnchorBlur"])(el, true); + }); + }), + /* Reset on complete or error */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["finalize"])(function () { + var e_3, _a; + try { + for (var els_2 = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(els), els_2_1 = els_2.next(); !els_2_1.done; els_2_1 = els_2.next()) { + var el = els_2_1.value; + Object(_set__WEBPACK_IMPORTED_MODULE_5__["resetAnchorActive"])(el); + Object(_set__WEBPACK_IMPORTED_MODULE_5__["resetAnchorBlur"])(el); + } + } + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (els_2_1 && !els_2_1.done && (_a = els_2.return)) _a.call(els_2); + } + finally { if (e_3) throw e_3.error; } + } + })); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/toc/anchor/set/index.ts": +/*!*******************************************************************!*\ + !*** ./src/assets/javascripts/components/toc/anchor/set/index.ts ***! + \*******************************************************************/ +/*! exports provided: setAnchorBlur, resetAnchorBlur, setAnchorActive, resetAnchorActive */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setAnchorBlur", function() { return setAnchorBlur; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resetAnchorBlur", function() { return resetAnchorBlur; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setAnchorActive", function() { return setAnchorActive; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resetAnchorActive", function() { return resetAnchorActive; }); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Set anchor blur + * + * @param el - Anchor element + * @param value - Whether the anchor is blurred + */ +function setAnchorBlur(el, value) { + el.setAttribute("data-md-state", value ? "blur" : ""); +} +/** + * Reset anchor blur + * + * @param el - Anchor element + */ +function resetAnchorBlur(el) { + el.removeAttribute("data-md-state"); +} +/* ------------------------------------------------------------------------- */ +/** + * Set anchor active + * + * @param el - Anchor element + * @param value - Whether the anchor is active + */ +function setAnchorActive(el, value) { + el.classList.toggle("md-nav__link--active", value); +} +/** + * Reset anchor active + * + * @param el - Anchor element + */ +function resetAnchorActive(el) { + el.classList.remove("md-nav__link--active"); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/toc/index.ts": +/*!********************************************************!*\ + !*** ./src/assets/javascripts/components/toc/index.ts ***! + \********************************************************/ +/*! no static exports found */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/components/toc/_/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountTableOfContents", function() { return ___WEBPACK_IMPORTED_MODULE_0__["mountTableOfContents"]; }); + +/* harmony import */ var _anchor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./anchor */ "./src/assets/javascripts/components/toc/anchor/index.ts"); +/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _anchor__WEBPACK_IMPORTED_MODULE_1__) if(["mountTableOfContents","default"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _anchor__WEBPACK_IMPORTED_MODULE_1__[key]; }) }(__WEBPACK_IMPORT_KEY__)); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + +/***/ }), + +/***/ "./src/assets/javascripts/index.ts": +/*!*****************************************!*\ + !*** ./src/assets/javascripts/index.ts ***! + \*****************************************/ +/*! exports provided: setScrollLock, resetScrollLock, initialize */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setScrollLock", function() { return setScrollLock; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resetScrollLock", function() { return resetScrollLock; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "initialize", function() { return initialize; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); +/* harmony import */ var _stylesheets_main_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../stylesheets/main.scss */ "./src/assets/stylesheets/main.scss"); +/* harmony import */ var _stylesheets_palette_scss__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../stylesheets/palette.scss */ "./src/assets/stylesheets/palette.scss"); +/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ramda */ "./node_modules/ramda/es/index.js"); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var _browser__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./browser */ "./src/assets/javascripts/browser/index.ts"); +/* harmony import */ var _workers__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./workers */ "./src/assets/javascripts/workers/index.ts"); +/* harmony import */ var components__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! components */ "./src/assets/javascripts/components/index.ts"); +/* harmony import */ var _integrations_clipboard__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./integrations/clipboard */ "./src/assets/javascripts/integrations/clipboard/index.ts"); +/* harmony import */ var integrations_dialog__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! integrations/dialog */ "./src/assets/javascripts/integrations/dialog/index.ts"); +/* harmony import */ var _integrations_keyboard__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./integrations/keyboard */ "./src/assets/javascripts/integrations/keyboard/index.ts"); +/* harmony import */ var integrations_instant__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! integrations/instant */ "./src/assets/javascripts/integrations/instant/index.ts"); +/* harmony import */ var patches__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! patches */ "./src/assets/javascripts/patches/index.ts"); +/* harmony import */ var utilities__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! utilities */ "./src/assets/javascripts/utilities/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +// TODO: remove this after we finished refactoring +// tslint:disable + + + + + + + + + + + + + + +/* ------------------------------------------------------------------------- */ +document.documentElement.classList.remove("no-js"); +document.documentElement.classList.add("js"); +/* Test for iOS */ +if (navigator.userAgent.match(/(iPad|iPhone|iPod)/g)) + document.documentElement.classList.add("ios"); +/** + * Set scroll lock + * + * @param el - Scrollable element + * @param value - Vertical offset + */ +function setScrollLock(el, value) { + el.setAttribute("data-md-state", "lock"); + el.style.top = "-" + value + "px"; +} +/** + * Reset scroll lock + * + * @param el - Scrollable element + */ +function resetScrollLock(el) { + var value = -1 * parseInt(el.style.top, 10); + el.removeAttribute("data-md-state"); + el.style.top = ""; + if (value) + window.scrollTo(0, value); +} +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Initialize Material for MkDocs + * + * @param config - Configuration + */ +function initialize(config) { + var e_1, _a, e_2, _b; + if (!Object(utilities__WEBPACK_IMPORTED_MODULE_14__["isConfig"])(config)) + throw new SyntaxError("Invalid configuration: " + JSON.stringify(config)); + /* Setup user interface observables */ + var location$ = Object(_browser__WEBPACK_IMPORTED_MODULE_6__["watchLocation"])(); + var hash$ = Object(_browser__WEBPACK_IMPORTED_MODULE_6__["watchLocationHash"])(); + var viewport$ = Object(_browser__WEBPACK_IMPORTED_MODULE_6__["watchViewport"])(); + var tablet$ = Object(_browser__WEBPACK_IMPORTED_MODULE_6__["watchMedia"])("(min-width: 960px)"); + var screen$ = Object(_browser__WEBPACK_IMPORTED_MODULE_6__["watchMedia"])("(min-width: 1220px)"); + /* Setup document observable */ + var document$ = config.features.includes("instant") + ? Object(_browser__WEBPACK_IMPORTED_MODULE_6__["watchDocument"])({ location$: location$ }) + : Object(_browser__WEBPACK_IMPORTED_MODULE_6__["watchDocument"])(); + /* Setup component bindings */ + Object(components__WEBPACK_IMPORTED_MODULE_8__["setupComponents"])([ + "container", + "header", + "header-title", + "hero", + "main", + "navigation", + "search", + "search-query", + "search-reset", + "search-result", + "skip", + "tabs", + "toc" /* Table of contents */ + ], { document$: document$ }); + /* ----------------------------------------------------------------------- */ + // External index + var index = config.search && config.search.index + ? config.search.index + : undefined; + // TODO: pass URL config as first parameter, options as second + var worker = Object(_workers__WEBPACK_IMPORTED_MODULE_7__["setupSearchWorker"])(config.url.worker.search, { + base: config.url.base, index: index, location$: location$ + }); + /* ----------------------------------------------------------------------- */ + /* Create header observable */ + var header$ = Object(components__WEBPACK_IMPORTED_MODULE_8__["useComponent"])("header") + .pipe(Object(components__WEBPACK_IMPORTED_MODULE_8__["mountHeader"])({ viewport$: viewport$ }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["shareReplay"])(1)); + var main$ = Object(components__WEBPACK_IMPORTED_MODULE_8__["useComponent"])("main") + .pipe(Object(components__WEBPACK_IMPORTED_MODULE_8__["mountMain"])({ header$: header$, viewport$: viewport$ }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["shareReplay"])(1)); + /* ----------------------------------------------------------------------- */ + /* Mount search query */ + var query$ = Object(components__WEBPACK_IMPORTED_MODULE_8__["useComponent"])("search-query") + .pipe(Object(components__WEBPACK_IMPORTED_MODULE_8__["mountSearchQuery"])(worker), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["shareReplay"])(1)); + /* Mount search reset */ + var reset$ = Object(components__WEBPACK_IMPORTED_MODULE_8__["useComponent"])("search-reset") + .pipe(Object(components__WEBPACK_IMPORTED_MODULE_8__["mountSearchReset"])(), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["shareReplay"])(1)); + /* Mount search result */ + var result$ = Object(components__WEBPACK_IMPORTED_MODULE_8__["useComponent"])("search-result") + .pipe(Object(components__WEBPACK_IMPORTED_MODULE_8__["mountSearchResult"])(worker, { query$: query$ }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["shareReplay"])(1)); + /* ----------------------------------------------------------------------- */ + var search$ = Object(components__WEBPACK_IMPORTED_MODULE_8__["useComponent"])("search") + .pipe(Object(components__WEBPACK_IMPORTED_MODULE_8__["mountSearch"])({ query$: query$, reset$: reset$, result$: result$ }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["shareReplay"])(1)); + /* ----------------------------------------------------------------------- */ + var navigation$ = Object(components__WEBPACK_IMPORTED_MODULE_8__["useComponent"])("navigation") + .pipe(Object(components__WEBPACK_IMPORTED_MODULE_8__["mountNavigation"])({ header$: header$, main$: main$, viewport$: viewport$, screen$: screen$ }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["shareReplay"])(1) // shareReplay because there might be late subscribers + ); + var toc$ = Object(components__WEBPACK_IMPORTED_MODULE_8__["useComponent"])("toc") + .pipe(Object(components__WEBPACK_IMPORTED_MODULE_8__["mountTableOfContents"])({ header$: header$, main$: main$, viewport$: viewport$, tablet$: tablet$ }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["shareReplay"])(1)); + var tabs$ = Object(components__WEBPACK_IMPORTED_MODULE_8__["useComponent"])("tabs") + .pipe(Object(components__WEBPACK_IMPORTED_MODULE_8__["mountTabs"])({ header$: header$, viewport$: viewport$, screen$: screen$ }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["shareReplay"])(1)); + var hero$ = Object(components__WEBPACK_IMPORTED_MODULE_8__["useComponent"])("hero") + .pipe(Object(components__WEBPACK_IMPORTED_MODULE_8__["mountHero"])({ header$: header$, viewport$: viewport$ }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["shareReplay"])(1)); + /* ----------------------------------------------------------------------- */ + var keyboard$ = Object(_integrations_keyboard__WEBPACK_IMPORTED_MODULE_11__["setupKeyboard"])(); + Object(patches__WEBPACK_IMPORTED_MODULE_13__["patchDetails"])({ document$: document$, hash$: hash$ }); + Object(patches__WEBPACK_IMPORTED_MODULE_13__["patchScripts"])({ document$: document$ }); + Object(patches__WEBPACK_IMPORTED_MODULE_13__["patchSource"])({ document$: document$ }); + Object(patches__WEBPACK_IMPORTED_MODULE_13__["patchTables"])({ document$: document$ }); + /* Force 1px scroll offset to trigger overflow scrolling */ + Object(patches__WEBPACK_IMPORTED_MODULE_13__["patchScrollfix"])({ document$: document$ }); + /* Setup clipboard and dialog */ + var dialog$ = Object(integrations_dialog__WEBPACK_IMPORTED_MODULE_10__["setupDialog"])(); + var clipboard$ = Object(_integrations_clipboard__WEBPACK_IMPORTED_MODULE_9__["setupClipboard"])({ document$: document$, dialog$: dialog$ }); + /* ----------------------------------------------------------------------- */ + // // put into search... + // hash$ + // .pipe( + // switchMap(hash => useToggle("search") + // .pipe( + // filter(x => x.checked), // only active + // tap(toggle => setToggle(toggle, false)), + // delay(125), // ensure that it runs after the body scroll reset... + // mapTo(hash) + // ) + // ) + // ) + // .subscribe(hash => { + // getElement(`[id="${hash}"]`)!.scrollIntoView() + // }) + // Scroll lock // document -> document$ => { body } !? + // put into search... + Object(rxjs__WEBPACK_IMPORTED_MODULE_4__["combineLatest"])([ + Object(_browser__WEBPACK_IMPORTED_MODULE_6__["watchToggle"])("search"), + tablet$, + ]) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["withLatestFrom"])(viewport$), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["switchMap"])(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), _c = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_b[0], 2), toggle = _c[0], tablet = _c[1], y = _b[1].offset.y; + var active = toggle && !tablet; + return document$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["delay"])(active ? 400 : 100), // TOOD: directly combine this with the hash! + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["observeOn"])(rxjs__WEBPACK_IMPORTED_MODULE_4__["animationFrameScheduler"]), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["tap"])(function (_a) { + var body = _a.body; + return active + ? setScrollLock(body, y) + : resetScrollLock(body); + })); + })) + .subscribe(); + /* ----------------------------------------------------------------------- */ + /* Intercept internal link clicks */ + var link$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_4__["fromEvent"])(document.body, "click") + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["filter"])(function (ev) { return !(ev.metaKey || ev.ctrlKey); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["switchMap"])(function (ev) { + if (ev.target instanceof HTMLElement) { + var el = ev.target.closest("a"); // TODO: abstract as link click? + if (el && Object(_browser__WEBPACK_IMPORTED_MODULE_6__["isLocationInternal"])(el)) { + if (!Object(_browser__WEBPACK_IMPORTED_MODULE_6__["isLocationAnchor"])(el)) + ev.preventDefault(); + return Object(rxjs__WEBPACK_IMPORTED_MODULE_4__["of"])(el); + } + } + return rxjs__WEBPACK_IMPORTED_MODULE_4__["NEVER"]; + }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["share"])()); + /* Always close drawer on click */ + link$.subscribe(function () { + Object(_browser__WEBPACK_IMPORTED_MODULE_6__["setToggle"])("drawer", false); + }); + // somehow call this setupNavigation ? + // instant loading + if (config.features.includes("instant")) { + /* Disable automatic scroll restoration, as it doesn't work nicely */ + if ("scrollRestoration" in history) + history.scrollRestoration = "manual"; + try { + /* Resolve relative links for stability */ + for (var _c = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])([ + "link[rel=\"shortcut icon\"]", + "link[rel=\"stylesheet\"]" + ]), _d = _c.next(); !_d.done; _d = _c.next()) { + var selector = _d.value; + try { + for (var _e = (e_2 = void 0, Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(Object(_browser__WEBPACK_IMPORTED_MODULE_6__["getElements"])(selector))), _f = _e.next(); !_f.done; _f = _e.next()) { + var el = _f.value; + el.href = el.href; + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_f && !_f.done && (_b = _e.return)) _b.call(_e); + } + finally { if (e_2) throw e_2.error; } + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_d && !_d.done && (_a = _c.return)) _a.call(_c); + } + finally { if (e_1) throw e_1.error; } + } + Object(integrations_instant__WEBPACK_IMPORTED_MODULE_12__["setupInstantLoading"])({ + document$: document$, link$: link$, location$: location$, viewport$: viewport$ + }); + } + /* ----------------------------------------------------------------------- */ + // if we use a single tab outside of search, unhide all permalinks. + // TODO: experimental. necessary!? + keyboard$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["filter"])(function (key) { return key.mode === "global" && ["Tab"].includes(key.type); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["take"])(1)) + .subscribe(function () { + var e_3, _a; + try { + for (var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(Object(_browser__WEBPACK_IMPORTED_MODULE_6__["getElements"])(".headerlink")), _c = _b.next(); !_c.done; _c = _b.next()) { + var link = _c.value; + link.style.visibility = "visible"; + } + } + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_3) throw e_3.error; } + } + }); + /* ----------------------------------------------------------------------- */ + var state = { + /* Browser observables */ + document$: document$, + viewport$: viewport$, + /* Component observables */ + header$: header$, + hero$: hero$, + main$: main$, + navigation$: navigation$, + search$: search$, + tabs$: tabs$, + toc$: toc$, + /* Integation observables */ + clipboard$: clipboard$, + keyboard$: keyboard$, + dialog$: dialog$ + }; + /* Subscribe to all observables */ + rxjs__WEBPACK_IMPORTED_MODULE_4__["merge"].apply(void 0, Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__spread"])(Object(ramda__WEBPACK_IMPORTED_MODULE_3__["values"])(state))).subscribe(); + return state; +} + + +/***/ }), + +/***/ "./src/assets/javascripts/integrations/clipboard/index.ts": +/*!****************************************************************!*\ + !*** ./src/assets/javascripts/integrations/clipboard/index.ts ***! + \****************************************************************/ +/*! exports provided: setupClipboard */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setupClipboard", function() { return setupClipboard; }); +/* harmony import */ var clipboard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! clipboard */ "./node_modules/clipboard/dist/clipboard.js"); +/* harmony import */ var clipboard__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(clipboard__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* harmony import */ var templates__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! templates */ "./src/assets/javascripts/templates/index.ts"); +/* harmony import */ var utilities__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! utilities */ "./src/assets/javascripts/utilities/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Setup clipboard + * + * This function implements the Clipboard.js integration and injects a button + * into all code blocks when the document changes. + * + * @param options - Options + * + * @return Clipboard observable + */ +function setupClipboard(_a) { + var document$ = _a.document$, dialog$ = _a.dialog$; + if (!clipboard__WEBPACK_IMPORTED_MODULE_0__["isSupported"]()) + return rxjs__WEBPACK_IMPORTED_MODULE_1__["NEVER"]; + /* Inject 'copy-to-clipboard' buttons */ + document$.subscribe(function () { + var blocks = Object(browser__WEBPACK_IMPORTED_MODULE_3__["getElements"])("pre > code"); + blocks.forEach(function (block, index) { + var parent = block.parentElement; + parent.id = "__code_" + index; + parent.insertBefore(Object(templates__WEBPACK_IMPORTED_MODULE_4__["renderClipboard"])(parent.id), block); + }); + }); + /* Initialize and setup clipboard */ + var clipboard$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["fromEventPattern"])(function (next) { + new clipboard__WEBPACK_IMPORTED_MODULE_0__(".md-clipboard").on("success", next); + }) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["share"])()); + /* Display notification for clipboard event */ + clipboard$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["tap"])(function (ev) { return ev.clearSelection(); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["mapTo"])(Object(utilities__WEBPACK_IMPORTED_MODULE_5__["translate"])("clipboard.copied"))) + .subscribe(dialog$); + /* Return clipboard */ + return clipboard$; +} + + +/***/ }), + +/***/ "./src/assets/javascripts/integrations/dialog/index.ts": +/*!*************************************************************!*\ + !*** ./src/assets/javascripts/integrations/dialog/index.ts ***! + \*************************************************************/ +/*! exports provided: setupDialog */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setupDialog", function() { return setupDialog; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Setup dialog + * + * @param options - Options + * + * @return Dialog observable + */ +function setupDialog(_a) { + var duration = (_a === void 0 ? {} : _a).duration; + var dialog$ = new rxjs__WEBPACK_IMPORTED_MODULE_0__["Subject"](); + /* Create dialog */ + var dialog = document.createElement("div"); // TODO: improve scoping + dialog.classList.add("md-dialog", "md-typeset"); + /* Display dialog */ + dialog$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["switchMap"])(function (text) { return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["of"])(document.body) // useComponent("container") + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(function (container) { return container.appendChild(dialog); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["observeOn"])(rxjs__WEBPACK_IMPORTED_MODULE_0__["animationFrameScheduler"]), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["delay"])(1), // Strangley it doesnt work when we push things to the new animation frame... + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["tap"])(function (el) { + el.innerHTML = text; + el.setAttribute("data-md-state", "open"); + }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["delay"])(duration || 2000), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["tap"])(function (el) { return el.removeAttribute("data-md-state"); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["delay"])(400), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["tap"])(function (el) { + el.innerHTML = ""; + el.remove(); + })); })) + .subscribe(); + /* Return dialog subject */ + return dialog$; +} + + +/***/ }), + +/***/ "./src/assets/javascripts/integrations/instant/index.ts": +/*!**************************************************************!*\ + !*** ./src/assets/javascripts/integrations/instant/index.ts ***! + \**************************************************************/ +/*! exports provided: setupInstantLoading */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setupInstantLoading", function() { return setupInstantLoading; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Setup instant loading + * + * @param options - Options + * + * @return TODO ? + */ +function setupInstantLoading(_a) { + var document$ = _a.document$, viewport$ = _a.viewport$, link$ = _a.link$, location$ = _a.location$; + var state$ = link$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (el) { return ({ url: new URL(el.href) }); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["share"])()); + /* Intercept internal links to dispatch */ + var push$ = state$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["distinctUntilChanged"])(function (prev, next) { return prev.url.href === next.url.href; }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["filter"])(function (_a) { + var url = _a.url; + return !Object(browser__WEBPACK_IMPORTED_MODULE_3__["isLocationAnchor"])(url); + }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["share"])()); + /* Intercept popstate events (history back and forward) */ + var pop$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["fromEvent"])(window, "popstate") + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["filter"])(function (ev) { return ev.state !== null; }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (ev) { return ({ + url: new URL(location.href), + offset: ev.state + }); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["share"])()); + /* Emit location change */ + Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["merge"])(push$, pop$) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["pluck"])("url")) + .subscribe(location$); + /* History: dispatch internal link */ + push$.subscribe(function (_a) { + var url = _a.url; + history.pushState({}, "", url.toString()); + }); + /* History: debounce update of viewport offset */ + viewport$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["debounceTime"])(250), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["distinctUntilKeyChanged"])("offset")) + .subscribe(function (_a) { + var offset = _a.offset; + history.replaceState(offset, ""); + }); + /* Apply viewport offset from history */ + Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["merge"])(state$, pop$) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["bufferCount"])(2, 1), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["filter"])(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), prev = _b[0], next = _b[1]; + return prev.url.pathname === next.url.pathname + && !Object(browser__WEBPACK_IMPORTED_MODULE_3__["isLocationAnchor"])(next.url); + }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), state = _b[1]; + return state; + })) + .subscribe(function (_a) { + var offset = _a.offset; + Object(browser__WEBPACK_IMPORTED_MODULE_3__["setViewportOffset"])(offset || { y: 0 }); + }); + /* Intercept actual instant loading */ + var instant$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["merge"])(push$, pop$) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["sample"])(document$)); + // TODO: from here on, everything is beta.... ############################### + instant$.subscribe(function (_a) { + var url = _a.url, offset = _a.offset; + if (url.hash && !offset) { + console.log("set hash!"); + Object(browser__WEBPACK_IMPORTED_MODULE_3__["setLocationHash"])(url.hash); // must delay, if search is open! + } + else { + Object(browser__WEBPACK_IMPORTED_MODULE_3__["setViewportOffset"])(offset || { y: 0 }); + } + }); + instant$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["withLatestFrom"])(document$)) + .subscribe(function (_a) { + var e_1, _b; + var _c = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), _d = _c[1], title = _d.title, head = _d.head; + document.dispatchEvent(new CustomEvent("DOMContentSwitch")); + document.title = title; + try { + /* Replace meta tags */ + for (var _e = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])([ + "link[rel=\"canonical\"]", + "meta[name=\"author\"]", + "meta[name=\"description\"]" + ]), _f = _e.next(); !_f.done; _f = _e.next()) { + var selector = _f.value; + var next = Object(browser__WEBPACK_IMPORTED_MODULE_3__["getElement"])(selector, head); + var prev = Object(browser__WEBPACK_IMPORTED_MODULE_3__["getElement"])(selector, document.head); + if (typeof next !== "undefined" && + typeof prev !== "undefined") { + prev.replaceWith(next); + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_f && !_f.done && (_b = _e.return)) _b.call(_e); + } + finally { if (e_1) throw e_1.error; } + } + }); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/integrations/keyboard/index.ts": +/*!***************************************************************!*\ + !*** ./src/assets/javascripts/integrations/keyboard/index.ts ***! + \***************************************************************/ +/*! exports provided: setupKeyboard */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setupKeyboard", function() { return setupKeyboard; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* harmony import */ var components__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! components */ "./src/assets/javascripts/components/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Setup keyboard + * + * This function will setup the keyboard handlers and ensure that keys are + * correctly propagated. Currently there are two modes: + * + * - `global`: This mode is active when the search is closed. It is intended + * to assign hotkeys to specific functions of the site. Currently the search, + * previous and next page can be triggered. + * + * - `search`: This mode is active when the search is open. It maps certain + * navigational keys to offer search results that can be entirely navigated + * through keyboard input. + * + * The keyboard observable is returned and can be used to monitor the keyboard + * in order toassign further hotkeys to custom functions. + * + * @return Keyboard observable + */ +function setupKeyboard() { + var keyboard$ = Object(browser__WEBPACK_IMPORTED_MODULE_2__["watchKeyboard"])() + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(function (key) { return (Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__assign"])({ mode: Object(browser__WEBPACK_IMPORTED_MODULE_2__["getToggle"])("search") ? "search" : "global" }, key)); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["share"])()); + /* Setup search keyboard handlers */ + keyboard$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["filter"])(function (_a) { + var mode = _a.mode; + return mode === "search"; + }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["withLatestFrom"])(Object(components__WEBPACK_IMPORTED_MODULE_3__["useComponent"])("search-query"), Object(components__WEBPACK_IMPORTED_MODULE_3__["useComponent"])("search-result"))) + .subscribe(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 3), key = _b[0], query = _b[1], result = _b[2]; + var active = Object(browser__WEBPACK_IMPORTED_MODULE_2__["getActiveElement"])(); + switch (key.type) { + /* Enter: prevent form submission */ + case "Enter": + if (active === query) + key.claim(); + break; + /* Escape or Tab: close search */ + case "Escape": + case "Tab": + Object(browser__WEBPACK_IMPORTED_MODULE_2__["setToggle"])("search", false); + Object(browser__WEBPACK_IMPORTED_MODULE_2__["setElementFocus"])(query, false); + break; + /* Vertical arrows: select previous or next search result */ + case "ArrowUp": + case "ArrowDown": + if (typeof active === "undefined") { + Object(browser__WEBPACK_IMPORTED_MODULE_2__["setElementFocus"])(query); + } + else { + var els = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__spread"])([query], Object(browser__WEBPACK_IMPORTED_MODULE_2__["getElements"])("[href]", result)); + var i = Math.max(0, (Math.max(0, els.indexOf(active)) + els.length + (key.type === "ArrowUp" ? -1 : +1)) % els.length); + Object(browser__WEBPACK_IMPORTED_MODULE_2__["setElementFocus"])(els[i]); + } + /* Prevent scrolling of page */ + key.claim(); + break; + /* All other keys: hand to search query */ + default: + if (query !== Object(browser__WEBPACK_IMPORTED_MODULE_2__["getActiveElement"])()) + Object(browser__WEBPACK_IMPORTED_MODULE_2__["setElementFocus"])(query); + } + }); + /* Setup global keyboard handlers */ + keyboard$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["filter"])(function (_a) { + var mode = _a.mode; + if (mode === "global") { + var active = Object(browser__WEBPACK_IMPORTED_MODULE_2__["getActiveElement"])(); + if (typeof active !== "undefined") + return !Object(browser__WEBPACK_IMPORTED_MODULE_2__["isSusceptibleToKeyboard"])(active); + } + return false; + }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["withLatestFrom"])(Object(components__WEBPACK_IMPORTED_MODULE_3__["useComponent"])("search-query"))) + .subscribe(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), key = _b[0], query = _b[1]; + switch (key.type) { + /* Open search and select query */ + case "f": + case "s": + Object(browser__WEBPACK_IMPORTED_MODULE_2__["setElementFocus"])(query); + Object(browser__WEBPACK_IMPORTED_MODULE_2__["setElementSelection"])(query); + key.claim(); + break; + /* Go to previous page */ + case "p": + case ",": + var prev = Object(browser__WEBPACK_IMPORTED_MODULE_2__["getElement"])("[href][rel=prev]"); + if (typeof prev !== "undefined") + prev.click(); + break; + /* Go to next page */ + case "n": + case ".": + var next = Object(browser__WEBPACK_IMPORTED_MODULE_2__["getElement"])("[href][rel=next]"); + if (typeof next !== "undefined") + next.click(); + break; + } + }); + /* Return keyboard */ + return keyboard$; +} + + +/***/ }), + +/***/ "./src/assets/javascripts/patches/details/index.ts": +/*!*********************************************************!*\ + !*** ./src/assets/javascripts/patches/details/index.ts ***! + \*********************************************************/ +/*! exports provided: patchDetails */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "patchDetails", function() { return patchDetails; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); +/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ramda */ "./node_modules/ramda/es/index.js"); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Patch all `details` elements + * + * This function will ensure that all `details` tags are opened prior to + * printing, so the whole content of the page is included, and on anchor jumps. + * + * @param options - Options + */ +function patchDetails(_a) { + var document$ = _a.document$, hash$ = _a.hash$; + var els$ = document$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function () { return Object(browser__WEBPACK_IMPORTED_MODULE_4__["getElements"])("details"); })); + /* Open all details before printing */ + Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["merge"])(Object(browser__WEBPACK_IMPORTED_MODULE_4__["watchMedia"])("print").pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["filter"])(ramda__WEBPACK_IMPORTED_MODULE_1__["identity"])), /* Webkit */ Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(window, "beforeprint") /* IE, FF */) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["switchMapTo"])(els$)) + .subscribe(function (els) { + var e_1, _a; + try { + for (var els_1 = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(els), els_1_1 = els_1.next(); !els_1_1.done; els_1_1 = els_1.next()) { + var el = els_1_1.value; + el.setAttribute("open", ""); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (els_1_1 && !els_1_1.done && (_a = els_1.return)) _a.call(els_1); + } + finally { if (e_1) throw e_1.error; } + } + }); + /* Open parent details and fix anchor jump */ + hash$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (id) { return Object(browser__WEBPACK_IMPORTED_MODULE_4__["getElement"])("[id=\"" + id + "\"]"); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["filter"])(function (el) { return typeof el !== "undefined"; }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])(function (el) { + var details = el.closest("details"); + if (details && !details.open) + details.setAttribute("open", ""); + })) + .subscribe(function (el) { return el.scrollIntoView(); }); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/patches/index.ts": +/*!*************************************************!*\ + !*** ./src/assets/javascripts/patches/index.ts ***! + \*************************************************/ +/*! exports provided: patchDetails, patchScripts, patchScrollfix, patchSource, patchTables */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _details__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./details */ "./src/assets/javascripts/patches/details/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "patchDetails", function() { return _details__WEBPACK_IMPORTED_MODULE_0__["patchDetails"]; }); + +/* harmony import */ var _script__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./script */ "./src/assets/javascripts/patches/script/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "patchScripts", function() { return _script__WEBPACK_IMPORTED_MODULE_1__["patchScripts"]; }); + +/* harmony import */ var _scrollfix__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./scrollfix */ "./src/assets/javascripts/patches/scrollfix/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "patchScrollfix", function() { return _scrollfix__WEBPACK_IMPORTED_MODULE_2__["patchScrollfix"]; }); + +/* harmony import */ var _source__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./source */ "./src/assets/javascripts/patches/source/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "patchSource", function() { return _source__WEBPACK_IMPORTED_MODULE_3__["patchSource"]; }); + +/* harmony import */ var _table__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./table */ "./src/assets/javascripts/patches/table/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "patchTables", function() { return _table__WEBPACK_IMPORTED_MODULE_4__["patchTables"]; }); + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + + + +/***/ }), + +/***/ "./src/assets/javascripts/patches/script/index.ts": +/*!********************************************************!*\ + !*** ./src/assets/javascripts/patches/script/index.ts ***! + \********************************************************/ +/*! exports provided: patchScripts */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "patchScripts", function() { return patchScripts; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* harmony import */ var components__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! components */ "./src/assets/javascripts/components/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Patch all `script` elements + * + * This function must be run after a document switch, which means the first + * emission must be ignored. + * + * @param options - Options + */ +function patchScripts(_a) { + var document$ = _a.document$; + var els$ = document$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["skip"])(1), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["withLatestFrom"])(Object(components__WEBPACK_IMPORTED_MODULE_3__["useComponent"])("container")), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), el = _b[1]; + return Object(browser__WEBPACK_IMPORTED_MODULE_2__["getElements"])("script", el); + })); + /* Evaluate all scripts via replacement */ + els$.subscribe(function (els) { + var e_1, _a; + try { + for (var els_1 = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(els), els_1_1 = els_1.next(); !els_1_1.done; els_1_1 = els_1.next()) { + var el = els_1_1.value; + if (el.src || /(^|\/javascript)$/i.test(el.type)) { + var script = document.createElement("script"); + var key = el.src ? "src" : "innerText"; + script[key] = el[key]; + el.replaceWith(script); + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (els_1_1 && !els_1_1.done && (_a = els_1.return)) _a.call(els_1); + } + finally { if (e_1) throw e_1.error; } + } + }); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/patches/scrollfix/index.ts": +/*!***********************************************************!*\ + !*** ./src/assets/javascripts/patches/scrollfix/index.ts ***! + \***********************************************************/ +/*! exports provided: patchScrollfix */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "patchScrollfix", function() { return patchScrollfix; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + +/* ---------------------------------------------------------------------------- + * Helper functions + * ------------------------------------------------------------------------- */ +/** + * Check whether the given device is an Apple device + * + * @return Test result + */ +function isAppleDevice() { + return /(iPad|iPhone|iPod)/.test(navigator.userAgent); +} +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Patch all elements with `data-md-scrollfix` attributes + * + * This is a year-old patch which ensures that overflow scrolling works at the + * top and bottom of containers on iOS by ensuring a `1px` scroll offset upon + * the start of a touch event. + * + * @see https://bit.ly/2SCtAOO - Original source + * + * @param options - Options + */ +function patchScrollfix(_a) { + var document$ = _a.document$; + var els$ = document$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function () { return Object(browser__WEBPACK_IMPORTED_MODULE_3__["getElements"])("[data-md-scrollfix]"); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["shareReplay"])(1)); + /* Remove marker attribute, so we'll only add the fix once */ + els$.subscribe(function (els) { + var e_1, _a; + try { + for (var els_1 = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(els), els_1_1 = els_1.next(); !els_1_1.done; els_1_1 = els_1.next()) { + var el = els_1_1.value; + el.removeAttribute("data-md-scrollfix"); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (els_1_1 && !els_1_1.done && (_a = els_1.return)) _a.call(els_1); + } + finally { if (e_1) throw e_1.error; } + } + }); + /* Patch overflow scrolling on touch start */ + Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["iif"])(isAppleDevice, els$, rxjs__WEBPACK_IMPORTED_MODULE_1__["NEVER"]) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])(function (els) { return rxjs__WEBPACK_IMPORTED_MODULE_1__["merge"].apply(void 0, Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__spread"])(els.map(function (el) { return (Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["fromEvent"])(el, "touchstart") + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["mapTo"])(el))); }))); })) + .subscribe(function (el) { + var top = el.scrollTop; + /* We're at the top of the container */ + if (top === 0) { + el.scrollTop = 1; + /* We're at the bottom of the container */ + } + else if (top + el.offsetHeight === el.scrollHeight) { + el.scrollTop = top - 1; + } + }); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/patches/source/github/index.ts": +/*!***************************************************************!*\ + !*** ./src/assets/javascripts/patches/source/github/index.ts ***! + \***************************************************************/ +/*! exports provided: fetchSourceFactsFromGitHub */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fetchSourceFactsFromGitHub", function() { return fetchSourceFactsFromGitHub; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_ajax__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/ajax */ "./node_modules/rxjs/_esm5/ajax/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var utilities__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! utilities */ "./src/assets/javascripts/utilities/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Fetch GitHub source facts + * + * @param user - GitHub user + * @param repo - GitHub repository + * + * @return Source facts observable + */ +function fetchSourceFactsFromGitHub(user, repo) { + return Object(rxjs_ajax__WEBPACK_IMPORTED_MODULE_1__["ajax"])({ + url: typeof repo !== "undefined" + ? "https://api.github.com/repos/" + user + "/" + repo + : "https://api.github.com/users/" + user, + responseType: "json" + }) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["filter"])(function (_a) { + var status = _a.status; + return status === 200; + }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["pluck"])("response"), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])(function (data) { + /* GitHub repository */ + if (typeof repo !== "undefined") { + var stargazers_count = data.stargazers_count, forks_count = data.forks_count; + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["of"])([ + Object(utilities__WEBPACK_IMPORTED_MODULE_3__["round"])(stargazers_count || 0) + " Stars", + Object(utilities__WEBPACK_IMPORTED_MODULE_3__["round"])(forks_count || 0) + " Forks" + ]); + /* GitHub user/organization */ + } + else { + var public_repos = data.public_repos; + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["of"])([ + Object(utilities__WEBPACK_IMPORTED_MODULE_3__["round"])(public_repos || 0) + " Repositories" + ]); + } + })); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/patches/source/gitlab/index.ts": +/*!***************************************************************!*\ + !*** ./src/assets/javascripts/patches/source/gitlab/index.ts ***! + \***************************************************************/ +/*! exports provided: fetchSourceFactsFromGitLab */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fetchSourceFactsFromGitLab", function() { return fetchSourceFactsFromGitLab; }); +/* harmony import */ var rxjs_ajax__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs/ajax */ "./node_modules/rxjs/_esm5/ajax/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var utilities__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! utilities */ "./src/assets/javascripts/utilities/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Fetch GitLab source facts + * + * @param base - GitLab base + * @param project - GitLab project + * + * @return Source facts observable + */ +function fetchSourceFactsFromGitLab(base, project) { + return Object(rxjs_ajax__WEBPACK_IMPORTED_MODULE_0__["ajax"])({ + url: "https://" + base + "/api/v4/projects/" + encodeURIComponent(project), + responseType: "json" + }) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["filter"])(function (_a) { + var status = _a.status; + return status === 200; + }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["pluck"])("response"), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(function (_a) { + var star_count = _a.star_count, forks_count = _a.forks_count; + return ([ + Object(utilities__WEBPACK_IMPORTED_MODULE_2__["round"])(star_count) + " Stars", + Object(utilities__WEBPACK_IMPORTED_MODULE_2__["round"])(forks_count) + " Forks" + ]); + })); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/patches/source/index.ts": +/*!********************************************************!*\ + !*** ./src/assets/javascripts/patches/source/index.ts ***! + \********************************************************/ +/*! exports provided: patchSource */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "patchSource", function() { return patchSource; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* harmony import */ var templates__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! templates */ "./src/assets/javascripts/templates/index.ts"); +/* harmony import */ var utilities__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! utilities */ "./src/assets/javascripts/utilities/index.ts"); +/* harmony import */ var _github__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./github */ "./src/assets/javascripts/patches/source/github/index.ts"); +/* harmony import */ var _gitlab__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./gitlab */ "./src/assets/javascripts/patches/source/gitlab/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + + + + +/* ---------------------------------------------------------------------------- + * Helper functions + * ------------------------------------------------------------------------- */ +/** + * Fetch source facts + * + * @param url - Source repository URL + * + * @return Source facts observable + */ +function fetchSourceFacts(url) { + var _a = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(url.match(/(git(?:hub|lab))/i) || [], 1), type = _a[0]; + switch (type.toLowerCase()) { + /* GitHub repository */ + case "github": + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(url.match(/^.+github\.com\/([^\/]+)\/?([^\/]+)/i), 3), user = _b[1], repo = _b[2]; + return Object(_github__WEBPACK_IMPORTED_MODULE_6__["fetchSourceFactsFromGitHub"])(user, repo); + /* GitLab repository */ + case "gitlab": + var _c = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(url.match(/^.+?([^\/]*gitlab[^\/]+)\/(.+)/i), 3), base = _c[1], project = _c[2]; + return Object(_gitlab__WEBPACK_IMPORTED_MODULE_7__["fetchSourceFactsFromGitLab"])(base, project); + /* Everything else */ + default: + return rxjs__WEBPACK_IMPORTED_MODULE_1__["NEVER"]; + } +} +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Patch elements containing repository information + * + * This function will retrieve the URL from the repository link and try to + * query data from integrated source code platforms like GitHub or GitLab. + * + * @param options - Options + */ +function patchSource(_a) { + var document$ = _a.document$; + document$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function () { return Object(browser__WEBPACK_IMPORTED_MODULE_3__["getElementOrThrow"])(".md-source[href]"); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])(function (_a) { + var href = _a.href; + return (Object(utilities__WEBPACK_IMPORTED_MODULE_5__["cache"])("" + Object(utilities__WEBPACK_IMPORTED_MODULE_5__["hash"])(href), function () { return fetchSourceFacts(href); })); + }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["catchError"])(function () { return rxjs__WEBPACK_IMPORTED_MODULE_1__["NEVER"]; })) + .subscribe(function (facts) { + var e_1, _a; + try { + for (var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(Object(browser__WEBPACK_IMPORTED_MODULE_3__["getElements"])(".md-source__repository")), _c = _b.next(); !_c.done; _c = _b.next()) { + var el = _c.value; + if (!el.hasAttribute("data-md-state")) { + el.setAttribute("data-md-state", "done"); + el.appendChild(Object(templates__WEBPACK_IMPORTED_MODULE_4__["renderSource"])(facts)); + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_1) throw e_1.error; } + } + }); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/patches/table/index.ts": +/*!*******************************************************!*\ + !*** ./src/assets/javascripts/patches/table/index.ts ***! + \*******************************************************/ +/*! exports provided: patchTables */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "patchTables", function() { return patchTables; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* harmony import */ var templates__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! templates */ "./src/assets/javascripts/templates/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Patch all `table` elements + * + * This function will re-render all tables by wrapping them to improve overflow + * scrolling on smaller screen sizes. + * + * @param options - Options + */ +function patchTables(_a) { + var document$ = _a.document$; + var sentinel = document.createElement("table"); + document$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(function () { return Object(browser__WEBPACK_IMPORTED_MODULE_2__["getElements"])("table:not([class])"); })) + .subscribe(function (els) { + var e_1, _a; + try { + for (var els_1 = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(els), els_1_1 = els_1.next(); !els_1_1.done; els_1_1 = els_1.next()) { + var el = els_1_1.value; + el.replaceWith(sentinel); + sentinel.replaceWith(Object(templates__WEBPACK_IMPORTED_MODULE_3__["renderTable"])(el)); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (els_1_1 && !els_1_1.done && (_a = els_1.return)) _a.call(els_1); + } + finally { if (e_1) throw e_1.error; } + } + }); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/templates/clipboard/index.tsx": +/*!**************************************************************!*\ + !*** ./src/assets/javascripts/templates/clipboard/index.tsx ***! + \**************************************************************/ +/*! exports provided: renderClipboard */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "renderClipboard", function() { return renderClipboard; }); +/* harmony import */ var utilities__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! utilities */ "./src/assets/javascripts/utilities/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +/* ---------------------------------------------------------------------------- + * Data + * ------------------------------------------------------------------------- */ +/** + * CSS classes + */ +var css = { + container: "md-clipboard md-icon" +}; +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Render a 'copy-to-clipboard' button + * + * @param id - Unique identifier + * + * @return Element + */ +function renderClipboard(id) { + var path = __webpack_require__(/*! material-design-icons-svg/paths/content-copy.json */ "./node_modules/material-design-icons-svg/paths/content-copy.json"); + return (Object(utilities__WEBPACK_IMPORTED_MODULE_0__["h"])("button", { class: css.container, title: Object(utilities__WEBPACK_IMPORTED_MODULE_0__["translate"])("clipboard.copy"), "data-clipboard-target": "#" + id + " code" }, + Object(utilities__WEBPACK_IMPORTED_MODULE_0__["h"])("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24" }, + Object(utilities__WEBPACK_IMPORTED_MODULE_0__["h"])("path", { d: path })))); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/templates/index.ts": +/*!***************************************************!*\ + !*** ./src/assets/javascripts/templates/index.ts ***! + \***************************************************/ +/*! exports provided: renderClipboard, renderSearchResult, renderSource, renderTable */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _clipboard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./clipboard */ "./src/assets/javascripts/templates/clipboard/index.tsx"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "renderClipboard", function() { return _clipboard__WEBPACK_IMPORTED_MODULE_0__["renderClipboard"]; }); + +/* harmony import */ var _search__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./search */ "./src/assets/javascripts/templates/search/index.tsx"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "renderSearchResult", function() { return _search__WEBPACK_IMPORTED_MODULE_1__["renderSearchResult"]; }); + +/* harmony import */ var _source__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./source */ "./src/assets/javascripts/templates/source/index.tsx"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "renderSource", function() { return _source__WEBPACK_IMPORTED_MODULE_2__["renderSource"]; }); + +/* harmony import */ var _table__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./table */ "./src/assets/javascripts/templates/table/index.tsx"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "renderTable", function() { return _table__WEBPACK_IMPORTED_MODULE_3__["renderTable"]; }); + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + + +/***/ }), + +/***/ "./src/assets/javascripts/templates/search/index.tsx": +/*!***********************************************************!*\ + !*** ./src/assets/javascripts/templates/search/index.tsx ***! + \***********************************************************/ +/*! exports provided: renderSearchResult */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "renderSearchResult", function() { return renderSearchResult; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); +/* harmony import */ var utilities__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! utilities */ "./src/assets/javascripts/utilities/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + +/* ---------------------------------------------------------------------------- + * Data + * ------------------------------------------------------------------------- */ +/** + * CSS classes + */ +var css = { + item: "md-search-result__item", + link: "md-search-result__link", + article: "md-search-result__article md-search-result__article--document", + section: "md-search-result__article", + title: "md-search-result__title", + teaser: "md-search-result__teaser" +}; +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Render a search result + * + * @param result - Search result + * + * @return Element + */ +function renderSearchResult(_a) { + var article = _a.article, sections = _a.sections; + // create page with icon + var path = __webpack_require__(/*! material-design-icons-svg/paths/file-search-outline.json */ "./node_modules/material-design-icons-svg/paths/file-search-outline.json"); + var children = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__spread"])([article], sections).map(function (document) { + var location = document.location, title = document.title, text = document.text; + return (Object(utilities__WEBPACK_IMPORTED_MODULE_1__["h"])("a", { href: location, class: css.link, tabIndex: -1 }, + Object(utilities__WEBPACK_IMPORTED_MODULE_1__["h"])("article", { class: "parent" in document ? css.section : css.article }, + !("parent" in document) + ? Object(utilities__WEBPACK_IMPORTED_MODULE_1__["h"])("div", { class: "md-search-result__icon md-icon" }, + Object(utilities__WEBPACK_IMPORTED_MODULE_1__["h"])("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24" }, + Object(utilities__WEBPACK_IMPORTED_MODULE_1__["h"])("path", { d: path }))) + : null, + Object(utilities__WEBPACK_IMPORTED_MODULE_1__["h"])("h1", { class: css.title }, title), + text.length + ? Object(utilities__WEBPACK_IMPORTED_MODULE_1__["h"])("p", { class: css.teaser }, Object(utilities__WEBPACK_IMPORTED_MODULE_1__["truncate"])(text, 320)) + : undefined))); + }); + return (Object(utilities__WEBPACK_IMPORTED_MODULE_1__["h"])("li", { class: css.item }, children)); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/templates/source/index.tsx": +/*!***********************************************************!*\ + !*** ./src/assets/javascripts/templates/source/index.tsx ***! + \***********************************************************/ +/*! exports provided: renderSource */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "renderSource", function() { return renderSource; }); +/* harmony import */ var utilities__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! utilities */ "./src/assets/javascripts/utilities/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +/* ---------------------------------------------------------------------------- + * Data + * ------------------------------------------------------------------------- */ +/** + * CSS classes + */ +var css = { + facts: "md-source__facts", + fact: "md-source__fact" +}; +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Render source facts + * + * @param facts - Source facts + * + * @return Element + */ +function renderSource(facts) { + var children = facts.map(function (fact) { return (Object(utilities__WEBPACK_IMPORTED_MODULE_0__["h"])("li", { class: css.fact }, fact)); }); + return (Object(utilities__WEBPACK_IMPORTED_MODULE_0__["h"])("ul", { class: css.facts }, children)); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/templates/table/index.tsx": +/*!**********************************************************!*\ + !*** ./src/assets/javascripts/templates/table/index.tsx ***! + \**********************************************************/ +/*! exports provided: renderTable */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "renderTable", function() { return renderTable; }); +/* harmony import */ var utilities__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! utilities */ "./src/assets/javascripts/utilities/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +/* ---------------------------------------------------------------------------- + * Data + * ------------------------------------------------------------------------- */ +/** + * CSS classes + */ +var css = { + wrapper: "md-typeset__scrollwrap", + table: "md-typeset__table" +}; +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Render a table inside a wrapper to improve scrolling on mobile + * + * @param table - Table element + * + * @return Element + */ +function renderTable(table) { + return (Object(utilities__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { class: css.wrapper }, + Object(utilities__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { class: css.table }, table))); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/utilities/config/index.ts": +/*!**********************************************************!*\ + !*** ./src/assets/javascripts/utilities/config/index.ts ***! + \**********************************************************/ +/*! exports provided: isConfig */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isConfig", function() { return isConfig; }); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Ensure that the given value is a valid configuration + * + * We could use `jsonschema` or any other schema validation framework, but that + * would just add more bloat to the bundle, so we'll keep it plain and simple. + * + * @param config - Configuration + * + * @return Test result + */ +function isConfig(config) { + return typeof config === "object" + && typeof config.url === "object" + && typeof config.url.base === "string" + && typeof config.url.worker === "object" + && typeof config.url.worker.search === "string"; +} + + +/***/ }), + +/***/ "./src/assets/javascripts/utilities/index.ts": +/*!***************************************************!*\ + !*** ./src/assets/javascripts/utilities/index.ts ***! + \***************************************************/ +/*! exports provided: isConfig, h, cache, translate, truncate, round, hash */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./config */ "./src/assets/javascripts/utilities/config/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isConfig", function() { return _config__WEBPACK_IMPORTED_MODULE_0__["isConfig"]; }); + +/* harmony import */ var _jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsx */ "./src/assets/javascripts/utilities/jsx/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "h", function() { return _jsx__WEBPACK_IMPORTED_MODULE_1__["h"]; }); + +/* harmony import */ var _rxjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./rxjs */ "./src/assets/javascripts/utilities/rxjs/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "cache", function() { return _rxjs__WEBPACK_IMPORTED_MODULE_2__["cache"]; }); + +/* harmony import */ var _string__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./string */ "./src/assets/javascripts/utilities/string/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "translate", function() { return _string__WEBPACK_IMPORTED_MODULE_3__["translate"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "truncate", function() { return _string__WEBPACK_IMPORTED_MODULE_3__["truncate"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "round", function() { return _string__WEBPACK_IMPORTED_MODULE_3__["round"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "hash", function() { return _string__WEBPACK_IMPORTED_MODULE_3__["hash"]; }); + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + + +/***/ }), + +/***/ "./src/assets/javascripts/utilities/jsx/index.ts": +/*!*******************************************************!*\ + !*** ./src/assets/javascripts/utilities/jsx/index.ts ***! + \*******************************************************/ +/*! exports provided: h */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return h; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); +/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ramda */ "./node_modules/ramda/es/index.js"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + +/* ---------------------------------------------------------------------------- + * Helper functions + * ------------------------------------------------------------------------- */ +/** + * Create an element + * + * @param tag - HTML or SVG tag + * + * @return Element + */ +function createElement(tag) { + switch (tag) { + /* SVG elements */ + case "svg": + case "path": + return document.createElementNS("http://www.w3.org/2000/svg", tag); + /* HTML elements */ + default: + return document.createElement(tag); + } +} +/** + * Set an attribute + * + * @param el - Element + * @param name - Attribute name + * @param value - Attribute value + */ +function setAttribute(el, name, value) { + switch (name) { + /* Attributes to be ignored */ + case "xmlns": + break; + /* Attributes of SVG elements */ + case "viewBox": + case "d": + if (typeof value !== "boolean") + el.setAttributeNS(null, name, value); + else if (value) + el.setAttributeNS(null, name, ""); + break; + /* Attributes of HTML elements */ + default: + if (typeof value !== "boolean") + el.setAttribute(name, value); + else if (value) + el.setAttribute(name, ""); + } +} +/** + * Append a child node to an element + * + * @param el - Element + * @param child - Child node(s) + */ +function appendChild(el, child) { + var e_1, _a; + /* Handle primitive types (including raw HTML) */ + if (typeof child === "string" || typeof child === "number") { + el.innerHTML += child.toString(); + /* Handle nodes */ + } + else if (child instanceof Node) { + el.appendChild(child); + /* Handle nested children */ + } + else if (Array.isArray(child)) { + try { + for (var child_1 = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(child), child_1_1 = child_1.next(); !child_1_1.done; child_1_1 = child_1.next()) { + var node = child_1_1.value; + appendChild(el, node); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (child_1_1 && !child_1_1.done && (_a = child_1.return)) _a.call(child_1); + } + finally { if (e_1) throw e_1.error; } + } + } +} +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * JSX factory + * + * @param tag - HTML or SVG tag + * @param attributes - HTML attributes + * @param children - Child elements + * + * @return Element + */ +function h(tag, attributes) { + var e_2, _a, e_3, _b; + var children = []; + for (var _i = 2; _i < arguments.length; _i++) { + children[_i - 2] = arguments[_i]; + } + var el = createElement(tag); + /* Set attributes, if any */ + if (attributes) + try { + for (var _c = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(Object(ramda__WEBPACK_IMPORTED_MODULE_1__["keys"])(attributes)), _d = _c.next(); !_d.done; _d = _c.next()) { + var attr = _d.value; + setAttribute(el, attr, attributes[attr]); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_d && !_d.done && (_a = _c.return)) _a.call(_c); + } + finally { if (e_2) throw e_2.error; } + } + try { + /* Append child nodes */ + for (var children_1 = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(children), children_1_1 = children_1.next(); !children_1_1.done; children_1_1 = children_1.next()) { + var child = children_1_1.value; + appendChild(el, child); + } + } + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (children_1_1 && !children_1_1.done && (_b = children_1.return)) _b.call(children_1); + } + finally { if (e_3) throw e_3.error; } + } + /* Return element */ + return el; +} + + +/***/ }), + +/***/ "./src/assets/javascripts/utilities/rxjs/index.ts": +/*!********************************************************!*\ + !*** ./src/assets/javascripts/utilities/rxjs/index.ts ***! + \********************************************************/ +/*! exports provided: cache */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cache", function() { return cache; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Cache the last value emitted by an observable in session storage + * + * If the key is not found in session storage, the factory is executed and the + * latest value emitted will automatically be persisted to sessions storage. + * Note that the values emitted by the returned observable must be serializable + * as `JSON`, or data will be lost. + * + * @template T - Value type + * + * @param key - Cache key + * @param factory - Observable factory + * + * @return Value observable + */ +function cache(key, factory) { + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["defer"])(function () { + var data = sessionStorage.getItem(key); + if (data) { + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["of"])(JSON.parse(data)); + /* Retrieve value from observable factory and write to storage */ + } + else { + var value$ = factory(); + value$.subscribe(function (value) { + try { + sessionStorage.setItem(key, JSON.stringify(value)); + } + catch (err) { + /* Uncritical, just swallow */ + } + }); + /* Return value */ + return value$; + } + }); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/utilities/string/index.ts": +/*!**********************************************************!*\ + !*** ./src/assets/javascripts/utilities/string/index.ts ***! + \**********************************************************/ +/*! exports provided: translate, truncate, round, hash */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "translate", function() { return translate; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "truncate", function() { return truncate; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "round", function() { return round; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hash", function() { return hash; }); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +/* ---------------------------------------------------------------------------- + * Data + * ------------------------------------------------------------------------- */ +/** + * Translations + */ +var lang; +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Translate the given key + * + * @param key - Key to be translated + * @param value - Value to be replaced + * + * @return Translation + */ +function translate(key, value) { + if (typeof lang === "undefined") { + var el = Object(browser__WEBPACK_IMPORTED_MODULE_0__["getElementOrThrow"])("#__lang"); + lang = JSON.parse(el.innerText); + } + if (typeof lang[key] === "undefined") { + throw new ReferenceError("Invalid translation: " + key); + } + return typeof value !== "undefined" + ? lang[key].replace("#", value) + : lang[key]; +} +/** + * Truncate a string after the given number of characters + * + * This is not a very reasonable approach, since the summaries kind of suck. + * It would be better to create something more intelligent, highlighting the + * search occurrences and making a better summary out of it, but this note was + * written three years ago, so who knows if we'll ever fix it. + * + * @param value - Value to be truncated + * @param n - Number of characters + * + * @return Truncated value + */ +function truncate(value, n) { + var i = n; + if (value.length > i) { + while (value[i] !== " " && --i > 0) + ; // tslint:disable-line + return value.substring(0, i) + "..."; + } + return value; +} +/** + * Round a number for display with source facts + * + * This is a reverse engineered version of GitHub's weird rounding algorithm + * for stars, forks and all other numbers. While all numbers below `1,000` are + * returned as-is, bigger numbers are converted to fixed numbers: + * + * - `1,049` => `1k` + * - `1,050` => `1.1k` + * - `1,949` => `1.9k` + * - `1,950` => `2k` + * + * @param value - Original value + * + * @return Rounded value + */ +function round(value) { + if (value > 999) { + var digits = +((value - 950) % 1000 > 99); + return ((value + 1) / 1000).toFixed(digits) + "k"; + } + else { + return value.toString(); + } +} +/** + * Simple hash function + * + * @see https://bit.ly/2wsVjJ4 - Original source + * + * @param value - Value to be hashed + * + * @return Hash as 32bit integer + */ +function hash(value) { + var h = 0; + for (var i = 0, len = value.length; i < len; i++) { + h = ((h << 5) - h) + value.charCodeAt(i); + h |= 0; // Convert to 32bit integer + } + return h; +} + + +/***/ }), + +/***/ "./src/assets/javascripts/workers/index.ts": +/*!*************************************************!*\ + !*** ./src/assets/javascripts/workers/index.ts ***! + \*************************************************/ +/*! exports provided: setupSearchWorker, SearchMessageType, isSearchSetupMessage, isSearchDumpMessage, isSearchQueryMessage, isSearchResultMessage */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _search__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./search */ "./src/assets/javascripts/workers/search/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setupSearchWorker", function() { return _search__WEBPACK_IMPORTED_MODULE_0__["setupSearchWorker"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SearchMessageType", function() { return _search__WEBPACK_IMPORTED_MODULE_0__["SearchMessageType"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isSearchSetupMessage", function() { return _search__WEBPACK_IMPORTED_MODULE_0__["isSearchSetupMessage"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isSearchDumpMessage", function() { return _search__WEBPACK_IMPORTED_MODULE_0__["isSearchDumpMessage"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isSearchQueryMessage", function() { return _search__WEBPACK_IMPORTED_MODULE_0__["isSearchQueryMessage"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isSearchResultMessage", function() { return _search__WEBPACK_IMPORTED_MODULE_0__["isSearchResultMessage"]; }); + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + +/***/ }), + +/***/ "./src/assets/javascripts/workers/search/_/index.ts": +/*!**********************************************************!*\ + !*** ./src/assets/javascripts/workers/search/_/index.ts ***! + \**********************************************************/ +/*! exports provided: setupSearchWorker */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setupSearchWorker", function() { return setupSearchWorker; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_ajax__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/ajax */ "./node_modules/rxjs/_esm5/ajax/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* harmony import */ var utilities__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! utilities */ "./src/assets/javascripts/utilities/index.ts"); +/* harmony import */ var _message__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../message */ "./src/assets/javascripts/workers/search/message/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Setup search web worker + * + * This function will create a web worker to setup and query the search index + * which is done using `lunr`. The index can be passed explicitly in order to + * enable hacks like _localsearch_ via search index embedding as JSON. If no + * index is given, this function will load it from the default location. + * + * @param url - Worker url + * @param options - Options + * + * @return Worker handler + */ +function setupSearchWorker(url, _a) { + var base = _a.base, index = _a.index, location$ = _a.location$; + var worker = new Worker(url); + /* Ensure stable base URL */ + var origin$ = location$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["take"])(1), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (_a) { + var href = _a.href; + return new URL(base, href) + .toString() + .replace(/\/$/, ""); + })); + /* Create communication channels and resolve relative links */ + var tx$ = new rxjs__WEBPACK_IMPORTED_MODULE_1__["Subject"](); + var rx$ = Object(browser__WEBPACK_IMPORTED_MODULE_4__["watchWorker"])(worker, { tx$: tx$ }) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["withLatestFrom"])(origin$), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (_a) { + var e_1, _b, e_2, _c; + var _d = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), message = _d[0], origin = _d[1]; + if (Object(_message__WEBPACK_IMPORTED_MODULE_6__["isSearchResultMessage"])(message)) { + try { + for (var _e = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(message.data), _f = _e.next(); !_f.done; _f = _e.next()) { + var _g = _f.value, article = _g.article, sections = _g.sections; + article.location = origin + "/" + article.location; + try { + for (var sections_1 = (e_2 = void 0, Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(sections)), sections_1_1 = sections_1.next(); !sections_1_1.done; sections_1_1 = sections_1.next()) { + var section = sections_1_1.value; + section.location = origin + "/" + section.location; + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (sections_1_1 && !sections_1_1.done && (_c = sections_1.return)) _c.call(sections_1); + } + finally { if (e_2) throw e_2.error; } + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_f && !_f.done && (_b = _e.return)) _b.call(_e); + } + finally { if (e_1) throw e_1.error; } + } + } + return message; + }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["shareReplay"])(1)); + /* Fetch index if it wasn't passed explicitly */ + var index$ = typeof index !== "undefined" + ? Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["from"])(index) + : origin$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["switchMap"])(function (origin) { return Object(rxjs_ajax__WEBPACK_IMPORTED_MODULE_2__["ajax"])({ + url: origin + "/search/search_index.json", + responseType: "json", + withCredentials: true + }) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["pluck"])("response")); })); + function isConfigDefaultLang(config) { + return config.lang.length === 1 && config.lang[0] === "en"; + } + function isConfigDefaultSeparator(config) { + return config.separator === "[\s\-]+"; + } + index$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (_a) { + var config = _a.config, rest = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__rest"])(_a, ["config"]); + return (Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__assign"])({ config: { + lang: isConfigDefaultLang(config) + ? [Object(utilities__WEBPACK_IMPORTED_MODULE_5__["translate"])("search.config.lang")] + : config.lang, + separator: isConfigDefaultSeparator(config) + ? Object(utilities__WEBPACK_IMPORTED_MODULE_5__["translate"])("search.config.separator") + : config.separator + }, pipeline: Object(utilities__WEBPACK_IMPORTED_MODULE_5__["translate"])("search.config.pipeline") + .split(/\s*,\s*/) + .filter(Boolean) }, rest)); + })) + // .subscribe(console.log) + // /* Send index to worker */ + // index$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (data) { return ({ + type: _message__WEBPACK_IMPORTED_MODULE_6__["SearchMessageType"].SETUP, + data: data + }); })) + .subscribe(tx$.next.bind(tx$)); + /* Return worker handler */ + return { tx$: tx$, rx$: rx$ }; +} + + +/***/ }), + +/***/ "./src/assets/javascripts/workers/search/index.ts": +/*!********************************************************!*\ + !*** ./src/assets/javascripts/workers/search/index.ts ***! + \********************************************************/ +/*! exports provided: setupSearchWorker, SearchMessageType, isSearchSetupMessage, isSearchDumpMessage, isSearchQueryMessage, isSearchResultMessage */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/workers/search/_/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setupSearchWorker", function() { return ___WEBPACK_IMPORTED_MODULE_0__["setupSearchWorker"]; }); + +/* harmony import */ var _message__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./message */ "./src/assets/javascripts/workers/search/message/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SearchMessageType", function() { return _message__WEBPACK_IMPORTED_MODULE_1__["SearchMessageType"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isSearchSetupMessage", function() { return _message__WEBPACK_IMPORTED_MODULE_1__["isSearchSetupMessage"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isSearchDumpMessage", function() { return _message__WEBPACK_IMPORTED_MODULE_1__["isSearchDumpMessage"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isSearchQueryMessage", function() { return _message__WEBPACK_IMPORTED_MODULE_1__["isSearchQueryMessage"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isSearchResultMessage", function() { return _message__WEBPACK_IMPORTED_MODULE_1__["isSearchResultMessage"]; }); + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + +/***/ }), + +/***/ "./src/assets/javascripts/workers/search/message/index.ts": +/*!****************************************************************!*\ + !*** ./src/assets/javascripts/workers/search/message/index.ts ***! + \****************************************************************/ +/*! exports provided: SearchMessageType, isSearchSetupMessage, isSearchDumpMessage, isSearchQueryMessage, isSearchResultMessage */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SearchMessageType", function() { return SearchMessageType; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isSearchSetupMessage", function() { return isSearchSetupMessage; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isSearchDumpMessage", function() { return isSearchDumpMessage; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isSearchQueryMessage", function() { return isSearchQueryMessage; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isSearchResultMessage", function() { return isSearchResultMessage; }); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ +/* ---------------------------------------------------------------------------- + * Types + * ------------------------------------------------------------------------- */ +/** + * Search message type + */ +var SearchMessageType; +(function (SearchMessageType) { + SearchMessageType[SearchMessageType["SETUP"] = 0] = "SETUP"; + SearchMessageType[SearchMessageType["DUMP"] = 1] = "DUMP"; + SearchMessageType[SearchMessageType["QUERY"] = 2] = "QUERY"; + SearchMessageType[SearchMessageType["RESULT"] = 3] = "RESULT"; /* Search results */ +})(SearchMessageType || (SearchMessageType = {})); +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Type guard for search setup messages + * + * @param message - Search worker message + * + * @return Test result + */ +function isSearchSetupMessage(message) { + return message.type === SearchMessageType.SETUP; +} +/** + * Type guard for search dump messages + * + * @param message - Search worker message + * + * @return Test result + */ +function isSearchDumpMessage(message) { + return message.type === SearchMessageType.DUMP; +} +/** + * Type guard for search query messages + * + * @param message - Search worker message + * + * @return Test result + */ +function isSearchQueryMessage(message) { + return message.type === SearchMessageType.QUERY; +} +/** + * Type guard for search result messages + * + * @param message - Search worker message + * + * @return Test result + */ +function isSearchResultMessage(message) { + return message.type === SearchMessageType.RESULT; +} + + +/***/ }), + +/***/ "./src/assets/stylesheets/main.scss": +/*!******************************************!*\ + !*** ./src/assets/stylesheets/main.scss ***! + \******************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = ("/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/material/main.css"); + +/***/ }), + +/***/ "./src/assets/stylesheets/palette.scss": +/*!*********************************************!*\ + !*** ./src/assets/stylesheets/palette.scss ***! + \*********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = ("/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/material/palette.css"); + +/***/ }) + +/******/ }))); +//# sourceMappingURL=bundle.js.map \ No newline at end of file diff --git a/material/assets/javascripts/bundle.js.map b/material/assets/javascripts/bundle.js.map new file mode 100644 index 000000000..8febd08ea --- /dev/null +++ b/material/assets/javascripts/bundle.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/assets/javascripts/browser/document/_/index.ts","webpack:///./src/assets/javascripts/browser/document/index.ts","webpack:///./src/assets/javascripts/browser/document/switch/index.ts","webpack:///./src/assets/javascripts/browser/element/_/index.ts","webpack:///./src/assets/javascripts/browser/element/focus/index.ts","webpack:///./src/assets/javascripts/browser/element/index.ts","webpack:///./src/assets/javascripts/browser/element/offset/index.ts","webpack:///./src/assets/javascripts/browser/element/select/index.ts","webpack:///./src/assets/javascripts/browser/index.ts","webpack:///./src/assets/javascripts/browser/keyboard/index.ts","webpack:///./src/assets/javascripts/browser/location/_/index.ts","webpack:///./src/assets/javascripts/browser/location/hash/index.ts","webpack:///./src/assets/javascripts/browser/location/index.ts","webpack:///./src/assets/javascripts/browser/media/index.ts","webpack:///./src/assets/javascripts/browser/toggle/index.ts","webpack:///./src/assets/javascripts/browser/viewport/_/index.ts","webpack:///./src/assets/javascripts/browser/viewport/index.ts","webpack:///./src/assets/javascripts/browser/viewport/offset/index.ts","webpack:///./src/assets/javascripts/browser/viewport/size/index.ts","webpack:///./src/assets/javascripts/browser/worker/index.ts","webpack:///./src/assets/javascripts/components/_/index.ts","webpack:///./src/assets/javascripts/components/header/_/index.ts","webpack:///./src/assets/javascripts/components/header/index.ts","webpack:///./src/assets/javascripts/components/header/react/index.ts","webpack:///./src/assets/javascripts/components/header/set/index.ts","webpack:///./src/assets/javascripts/components/hero/_/index.ts","webpack:///./src/assets/javascripts/components/hero/index.ts","webpack:///./src/assets/javascripts/components/hero/react/index.ts","webpack:///./src/assets/javascripts/components/hero/set/index.ts","webpack:///./src/assets/javascripts/components/index.ts","webpack:///./src/assets/javascripts/components/main/_/index.ts","webpack:///./src/assets/javascripts/components/main/index.ts","webpack:///./src/assets/javascripts/components/main/react/index.ts","webpack:///./src/assets/javascripts/components/main/set/index.ts","webpack:///./src/assets/javascripts/components/navigation/_/index.ts","webpack:///./src/assets/javascripts/components/navigation/index.ts","webpack:///./src/assets/javascripts/components/navigation/layer/_/index.ts","webpack:///./src/assets/javascripts/components/navigation/layer/index.ts","webpack:///./src/assets/javascripts/components/navigation/layer/react/index.ts","webpack:///./src/assets/javascripts/components/navigation/layer/set/index.ts","webpack:///./src/assets/javascripts/components/search/_/index.ts","webpack:///./src/assets/javascripts/components/search/index.ts","webpack:///./src/assets/javascripts/components/search/query/_/index.ts","webpack:///./src/assets/javascripts/components/search/query/index.ts","webpack:///./src/assets/javascripts/components/search/query/react/index.ts","webpack:///./src/assets/javascripts/components/search/reset/_/index.ts","webpack:///./src/assets/javascripts/components/search/reset/index.ts","webpack:///./src/assets/javascripts/components/search/reset/react/index.ts","webpack:///./src/assets/javascripts/components/search/result/_/index.ts","webpack:///./src/assets/javascripts/components/search/result/index.ts","webpack:///./src/assets/javascripts/components/search/result/react/index.ts","webpack:///./src/assets/javascripts/components/search/result/set/index.ts","webpack:///./src/assets/javascripts/components/shared/index.ts","webpack:///./src/assets/javascripts/components/shared/sidebar/_/index.ts","webpack:///./src/assets/javascripts/components/shared/sidebar/index.ts","webpack:///./src/assets/javascripts/components/shared/sidebar/react/index.ts","webpack:///./src/assets/javascripts/components/shared/sidebar/set/index.ts","webpack:///./src/assets/javascripts/components/tabs/_/index.ts","webpack:///./src/assets/javascripts/components/tabs/index.ts","webpack:///./src/assets/javascripts/components/tabs/react/index.ts","webpack:///./src/assets/javascripts/components/tabs/set/index.ts","webpack:///./src/assets/javascripts/components/toc/_/index.ts","webpack:///./src/assets/javascripts/components/toc/anchor/_/index.ts","webpack:///./src/assets/javascripts/components/toc/anchor/index.ts","webpack:///./src/assets/javascripts/components/toc/anchor/react/index.ts","webpack:///./src/assets/javascripts/components/toc/anchor/set/index.ts","webpack:///./src/assets/javascripts/components/toc/index.ts","webpack:///./src/assets/javascripts/index.ts","webpack:///./src/assets/javascripts/integrations/clipboard/index.ts","webpack:///./src/assets/javascripts/integrations/dialog/index.ts","webpack:///./src/assets/javascripts/integrations/instant/index.ts","webpack:///./src/assets/javascripts/integrations/keyboard/index.ts","webpack:///./src/assets/javascripts/patches/details/index.ts","webpack:///./src/assets/javascripts/patches/index.ts","webpack:///./src/assets/javascripts/patches/script/index.ts","webpack:///./src/assets/javascripts/patches/scrollfix/index.ts","webpack:///./src/assets/javascripts/patches/source/github/index.ts","webpack:///./src/assets/javascripts/patches/source/gitlab/index.ts","webpack:///./src/assets/javascripts/patches/source/index.ts","webpack:///./src/assets/javascripts/patches/table/index.ts","webpack:///./src/assets/javascripts/templates/clipboard/index.tsx","webpack:///./src/assets/javascripts/templates/index.ts","webpack:///./src/assets/javascripts/templates/search/index.tsx","webpack:///./src/assets/javascripts/templates/source/index.tsx","webpack:///./src/assets/javascripts/templates/table/index.tsx","webpack:///./src/assets/javascripts/utilities/config/index.ts","webpack:///./src/assets/javascripts/utilities/index.ts","webpack:///./src/assets/javascripts/utilities/jsx/index.ts","webpack:///./src/assets/javascripts/utilities/rxjs/index.ts","webpack:///./src/assets/javascripts/utilities/string/index.ts","webpack:///./src/assets/javascripts/workers/index.ts","webpack:///./src/assets/javascripts/workers/search/_/index.ts","webpack:///./src/assets/javascripts/workers/search/index.ts","webpack:///./src/assets/javascripts/workers/search/message/index.ts","webpack:///./src/assets/stylesheets/main.scss","webpack:///./src/assets/stylesheets/palette.scss"],"names":[],"mappings":"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","file":"assets/javascripts/bundle.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"assets/javascripts/bundle\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([\"./src/assets/javascripts/index.ts\",\"assets/javascripts/vendor\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { NEVER, Observable, fromEvent, merge } from \"rxjs\"\nimport { mapTo, shareReplay } from \"rxjs/operators\"\n\nimport { watchDocumentSwitch } from \"../switch\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n location$?: Observable /* Location observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch document\n *\n * If the location observable is passed, instant loading will be enabled which\n * means that new values will be emitted every time the location changes.\n *\n * @return Document observable\n */\nexport function watchDocument(\n { location$ }: WatchOptions = {}\n): Observable {\n return merge(\n fromEvent(document, \"DOMContentLoaded\")\n .pipe(\n mapTo(document)\n ),\n typeof location$ !== \"undefined\"\n ? watchDocumentSwitch({ location$ })\n : NEVER\n )\n .pipe(\n shareReplay(1)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./switch\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { NEVER, Observable } from \"rxjs\"\nimport { ajax } from \"rxjs/ajax\"\nimport {\n catchError,\n distinctUntilKeyChanged,\n pluck,\n share,\n skip,\n switchMap\n} from \"rxjs/operators\"\n\nimport { setLocation } from \"../../location\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n location$: Observable /* Location observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch document switch\n *\n * This function returns an observables that fetches a document if the provided\n * location observable emits a new value (i.e. URL). If the emitted URL points\n * to the same page, the request is effectively ignored (i.e. when only the\n * fragment identifier changes).\n *\n * In case the request fails, the location change is dispatched regularly.\n *\n * @param options - Options\n *\n * @return Document observable\n */\nexport function watchDocumentSwitch(\n { location$ }: WatchOptions\n): Observable {\n return location$\n .pipe(\n distinctUntilKeyChanged(\"pathname\"),\n skip(1),\n\n /* Fetch document */\n switchMap(url => ajax({\n url: url.href,\n responseType: \"document\",\n withCredentials: true\n })\n .pipe(\n pluck(\"response\"),\n catchError(() => {\n setLocation(url)\n return NEVER\n })\n )\n ),\n share()\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve an element matching the query selector\n *\n * @template T - Element type\n *\n * @param selector - Query selector\n * @param node - Node of reference\n *\n * @return Element or nothing\n */\nexport function getElement(\n selector: string, node: ParentNode = document\n): T | undefined {\n return node.querySelector(selector) || undefined\n}\n\n/**\n * Retrieve an element matching a query selector or throw a reference error\n *\n * @template T - Element type\n *\n * @param selector - Query selector\n * @param node - Node of reference\n *\n * @return Element\n */\nexport function getElementOrThrow(\n selector: string, node: ParentNode = document\n): T {\n const el = getElement(selector, node)\n if (typeof el === \"undefined\")\n throw new ReferenceError(\n `Missing element: expected \"${selector}\" to be present`\n )\n return el\n}\n\n/**\n * Retrieve the currently active element\n *\n * @return Element or nothing\n */\nexport function getActiveElement(): HTMLElement | undefined {\n return document.activeElement instanceof HTMLElement\n ? document.activeElement\n : undefined\n}\n\n/**\n * Retrieve all elements matching the query selector\n *\n * @template T - Element type\n *\n * @param selector - Query selector\n * @param node - Node of reference\n *\n * @return Elements\n */\nexport function getElements(\n selector: string, node: ParentNode = document\n): T[] {\n return Array.from(node.querySelectorAll(selector))\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent, merge } from \"rxjs\"\nimport { mapTo, shareReplay, startWith } from \"rxjs/operators\"\n\nimport { getActiveElement } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set element focus\n *\n * @param el - Element\n * @param value - Whether the element should be focused\n */\nexport function setElementFocus(\nel: HTMLElement, value: boolean = true\n): void {\n if (value)\n el.focus()\n else\n el.blur()\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch element focus\n *\n * @param el - Element\n *\n * @return Element focus observable\n */\nexport function watchElementFocus(\n el: HTMLElement\n): Observable {\n const focus$ = fromEvent(el, \"focus\")\n const blur$ = fromEvent(el, \"blur\")\n\n /* Map events to boolean state */\n return merge(\n focus$.pipe(mapTo(true)),\n blur$.pipe(mapTo(false))\n )\n .pipe(\n startWith(el === getActiveElement()),\n shareReplay(1)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./focus\"\nexport * from \"./offset\"\nexport * from \"./select\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent, merge } from \"rxjs\"\nimport { map, shareReplay, startWith } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Element offset\n */\nexport interface ElementOffset {\n x: number /* Horizontal offset */\n y: number /* Vertical offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve element offset\n *\n * @param el - Element\n *\n * @return Element offset\n */\nexport function getElementOffset(el: HTMLElement): ElementOffset {\n return {\n x: el.scrollLeft,\n y: el.scrollTop\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch element offset\n *\n * @param el - Element\n *\n * @return Element offset observable\n */\nexport function watchElementOffset(\n el: HTMLElement\n): Observable {\n return merge(\n fromEvent(el, \"scroll\"),\n fromEvent(window, \"resize\")\n )\n .pipe(\n map(() => getElementOffset(el)),\n startWith(getElementOffset(el)),\n shareReplay(1)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set element text selection\n *\n * @param el - Element\n */\nexport function setElementSelection(\n el: HTMLElement\n): void {\n if (el instanceof HTMLInputElement)\n el.select()\n else\n throw new Error(\"Not implemented\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./document\"\nexport * from \"./element\"\nexport * from \"./keyboard\"\nexport * from \"./location\"\nexport * from \"./media\"\nexport * from \"./toggle\"\nexport * from \"./viewport\"\nexport * from \"./worker\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent } from \"rxjs\"\nimport { filter, map, share } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Key\n */\nexport interface Key {\n type: string /* Key type */\n claim(): void /* Key claim */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Check whether an element may receive keyboard input\n *\n * @param el - Element\n *\n * @return Test result\n */\nexport function isSusceptibleToKeyboard(el: HTMLElement): boolean {\n switch (el.tagName) {\n\n /* Form elements */\n case \"INPUT\":\n case \"SELECT\":\n case \"TEXTAREA\":\n return true\n\n /* Everything else */\n default:\n return el.isContentEditable\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch keyboard\n *\n * @return Keyboard observable\n */\nexport function watchKeyboard(): Observable {\n return fromEvent(window, \"keydown\")\n .pipe(\n filter(ev => !(ev.metaKey || ev.ctrlKey)),\n map(ev => ({\n type: ev.key,\n claim() {\n ev.preventDefault()\n ev.stopPropagation()\n }\n })),\n share()\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { BehaviorSubject } from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve location\n *\n * This function will return a `URL` object (and not `Location`) in order to\n * normalize typings across the application. Furthermore, locations need to be\n * tracked without setting them and `Location` is a singleton which represents\n * the current location.\n *\n * @return URL\n */\nexport function getLocation(): URL {\n return new URL(location.href)\n}\n\n/**\n * Set location\n *\n * @param url - URL to change to\n */\nexport function setLocation(url: URL): void {\n location.href = url.href\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Check whether a URL is an internal link or a file (except `.html`)\n *\n * @param url - URL or HTML anchor element\n * @param ref - Reference URL\n *\n * @return Test result\n */\nexport function isLocationInternal(\n url: URL | HTMLAnchorElement,\n ref: URL | Location = location\n): boolean {\n return url.host === ref.host\n && /^(?:\\/[\\w-]+)*(?:\\/?|\\.html)$/i.test(url.pathname)\n}\n\n/**\n * Check whether a URL is an anchor link on the current page\n *\n * @param url - URL or HTML anchor element\n * @param ref - Reference URL\n *\n * @return Test result\n */\nexport function isLocationAnchor(\n url: URL | HTMLAnchorElement,\n ref: URL | Location = location\n): boolean {\n return url.pathname === ref.pathname\n && url.hash.length > 0\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch location\n *\n * @return Location subject\n */\nexport function watchLocation(): BehaviorSubject {\n return new BehaviorSubject(getLocation())\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent } from \"rxjs\"\nimport { filter, map, share, startWith } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve location hash\n *\n * @return Location hash\n */\nexport function getLocationHash(): string {\n return location.hash.substring(1)\n}\n\n/**\n * Set location hash\n *\n * Setting a new fragment identifier via `location.hash` will have no effect\n * if the value doesn't change. However, when a new fragment identifier is set,\n * we want the browser to target the respective element at all times, which is\n * why we use this dirty little trick.\n *\n * @param hash - Location hash\n */\nexport function setLocationHash(hash: string): void {\n const el = document.createElement(\"a\")\n el.href = hash\n el.click()\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch location hash\n *\n * @return Location hash observable\n */\nexport function watchLocationHash(): Observable {\n return fromEvent(window, \"hashchange\")\n .pipe(\n map(getLocationHash),\n startWith(getLocationHash()),\n filter(hash => hash.length > 0),\n share()\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./hash\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEventPattern } from \"rxjs\"\nimport { shareReplay, startWith } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch media query\n *\n * @param query - Media query\n *\n * @return Media observable\n */\nexport function watchMedia(query: string): Observable {\n const media = matchMedia(query)\n return fromEventPattern(next =>\n media.addListener(() => next(media.matches))\n )\n .pipe(\n startWith(media.matches),\n shareReplay(1)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent } from \"rxjs\"\nimport { map, startWith } from \"rxjs/operators\"\n\nimport { getElementOrThrow } from \"../element\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Toggle\n */\nexport type Toggle =\n | \"drawer\" /* Toggle for drawer */\n | \"search\" /* Toggle for search */\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Toggle map\n */\nconst toggles: Record = {\n drawer: getElementOrThrow(`[data-md-toggle=drawer]`),\n search: getElementOrThrow(`[data-md-toggle=search]`)\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve the value of a toggle\n *\n * @param name - Toggle\n *\n * @return Toggle value\n */\nexport function getToggle(name: Toggle): boolean {\n return toggles[name].checked\n}\n\n/**\n * Set toggle\n *\n * Simulating a click event seems to be the most cross-browser compatible way\n * of changing the value while also emitting a `change` event. Before, Material\n * used `CustomEvent` to programmatically change the value of a toggle, but this\n * is a much simpler and cleaner solution which doesn't require a polyfill.\n *\n * @param name - Toggle\n * @param value - Toggle value\n */\nexport function setToggle(name: Toggle, value: boolean): void {\n if (toggles[name].checked !== value)\n toggles[name].click()\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch toggle\n *\n * @param name - Toggle\n *\n * @return Toggle value observable\n */\nexport function watchToggle(name: Toggle): Observable {\n const el = toggles[name]\n return fromEvent(el, \"change\")\n .pipe(\n map(() => el.checked),\n startWith(el.checked)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, combineLatest } from \"rxjs\"\nimport {\n distinctUntilKeyChanged,\n map,\n shareReplay\n} from \"rxjs/operators\"\n\nimport { Header } from \"components\"\n\nimport {\n ViewportOffset,\n watchViewportOffset\n} from \"../offset\"\nimport {\n ViewportSize,\n watchViewportSize\n} from \"../size\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Viewport\n */\nexport interface Viewport {\n offset: ViewportOffset /* Viewport offset */\n size: ViewportSize /* Viewport size */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch at options\n */\ninterface WatchAtOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport\n *\n * @return Viewport observable\n */\nexport function watchViewport(): Observable {\n return combineLatest([\n watchViewportOffset(),\n watchViewportSize()\n ])\n .pipe(\n map(([offset, size]) => ({ offset, size })),\n shareReplay(1)\n )\n}\n\n/**\n * Watch viewport relative to element\n *\n * @param el - Element\n * @param options - Options\n *\n * @return Viewport observable\n */\nexport function watchViewportAt(\n el: HTMLElement, { header$, viewport$ }: WatchAtOptions\n): Observable {\n const offset$ = viewport$\n .pipe(\n distinctUntilKeyChanged(\"size\"),\n map((): ViewportOffset => ({\n x: el.offsetLeft,\n y: el.offsetTop\n }))\n )\n\n /* Compute relative viewport, return hot observable */\n return combineLatest([header$, viewport$, offset$])\n .pipe(\n map(([{ height }, { offset, size }, { x, y }]) => ({\n offset: {\n x: offset.x - x,\n y: offset.y - y + height\n },\n size\n })),\n shareReplay(1)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./offset\"\nexport * from \"./size\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent, merge } from \"rxjs\"\nimport { map, startWith } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Viewport offset\n */\nexport interface ViewportOffset {\n x: number /* Horizontal offset */\n y: number /* Vertical offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve viewport offset\n *\n * On iOS Safari, viewport offset can be negative due to overflow scrolling.\n * As this may induce strange behaviors downstream, we'll just limit it to 0.\n *\n * @return Viewport offset\n */\nexport function getViewportOffset(): ViewportOffset {\n return {\n x: Math.max(0, pageXOffset),\n y: Math.max(0, pageYOffset)\n }\n}\n\n/**\n * Set viewport offset\n *\n * @param offset - Viewport offset\n */\nexport function setViewportOffset(\n { x, y }: Partial\n): void {\n window.scrollTo(x || 0, y || 0)\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport offset\n *\n * @return Viewport offset observable\n */\nexport function watchViewportOffset(): Observable {\n return merge(\n fromEvent(window, \"scroll\"),\n fromEvent(window, \"resize\")\n )\n .pipe(\n map(getViewportOffset),\n startWith(getViewportOffset())\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent } from \"rxjs\"\nimport { map, startWith } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Viewport size\n */\nexport interface ViewportSize {\n width: number /* Viewport width */\n height: number /* Viewport height */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve viewport size\n *\n * @return Viewport size\n */\nexport function getViewportSize(): ViewportSize {\n return {\n width: innerWidth,\n height: innerHeight\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport size\n *\n * @return Viewport size observable\n */\nexport function watchViewportSize(): Observable {\n return fromEvent(window, \"resize\")\n .pipe(\n map(getViewportSize),\n startWith(getViewportSize())\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, Subject, fromEventPattern } from \"rxjs\"\nimport {\n pluck,\n share,\n switchMapTo,\n tap,\n throttle\n} from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Worker message\n */\nexport interface WorkerMessage {\n type: unknown /* Message type */\n data: unknown /* Message data */\n}\n\n/**\n * Worker handler\n *\n * @template T - Message type\n */\nexport interface WorkerHandler<\n T extends WorkerMessage\n> {\n tx$: Subject /* Message transmission subject */\n rx$: Observable /* Message receive observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n *\n * @template T - Worker message type\n */\ninterface WatchOptions {\n tx$: Observable /* Message transmission observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch a web worker\n *\n * This function returns an observable that will send all values emitted by the\n * message observable to the web worker. Web worker communication is expected\n * to be bidirectional (request-response) and synchronous. Messages that are\n * emitted during a pending request are throttled, the last one is emitted.\n *\n * @param worker - Web worker\n * @param options - Options\n *\n * @return Worker message observable\n */\nexport function watchWorker(\n worker: Worker, { tx$ }: WatchOptions\n): Observable {\n\n /* Intercept messages from worker-like objects */\n const rx$ = fromEventPattern(next =>\n worker.addEventListener(\"message\", next)\n )\n .pipe(\n pluck(\"data\")\n )\n\n /* Send and receive messages, return hot observable */\n return tx$\n .pipe(\n throttle(() => rx$, { leading: true, trailing: true }),\n tap(message => worker.postMessage(message)),\n switchMapTo(rx$),\n share()\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { EMPTY, Observable, of } from \"rxjs\"\nimport {\n distinctUntilChanged,\n map,\n scan,\n shareReplay,\n switchMap\n} from \"rxjs/operators\"\n\nimport { getElement } from \"browser\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Component\n */\nexport type Component =\n | \"container\" /* Container */\n | \"header\" /* Header */\n | \"header-title\" /* Header title */\n | \"hero\" /* Hero */\n | \"main\" /* Main area */\n | \"navigation\" /* Navigation */\n | \"search\" /* Search */\n | \"search-query\" /* Search input */\n | \"search-reset\" /* Search reset */\n | \"search-result\" /* Search results */\n | \"skip\" /* Skip link */\n | \"tabs\" /* Tabs */\n | \"toc\" /* Table of contents */\n\n/**\n * Component map\n */\nexport type ComponentMap = {\n [P in Component]?: HTMLElement\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Component map observable\n */\nlet components$: Observable\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup bindings to components with given names\n *\n * This function will maintain bindings to the elements identified by the given\n * names in-between document switches and update the elements in-place.\n *\n * @param names - Component names\n * @param options - Options\n */\nexport function setupComponents(\n names: Component[], { document$ }: WatchOptions\n): void {\n components$ = document$\n .pipe(\n\n /* Build component map */\n map(document => names.reduce((components, name) => {\n const el = getElement(`[data-md-component=${name}]`, document)\n return {\n ...components,\n ...typeof el !== \"undefined\" ? { [name]: el } : {}\n }\n }, {})),\n\n /* Re-compute component map on document switch */\n scan((prev, next) => {\n for (const name of names) {\n switch (name) {\n\n /* Top-level components: update */\n case \"header-title\":\n case \"container\":\n case \"skip\":\n if (name in prev && typeof prev[name] !== \"undefined\") {\n prev[name]!.replaceWith(next[name]!)\n prev[name] = next[name]\n }\n break\n\n /* All other components: rebind */\n default:\n if (typeof next[name] !== \"undefined\")\n prev[name] = getElement(`[data-md-component=${name}]`)\n else\n delete prev[name]\n }\n }\n return prev\n }),\n\n /* Convert to hot observable */\n shareReplay(1)\n )\n}\n\n/**\n * Retrieve a component\n *\n * The returned observable will only re-emit if the element changed, i.e. if\n * it was replaced from a document which was switched to.\n *\n * @template T - Element type\n *\n * @param name - Component name\n *\n * @return Element observable\n */\nexport function useComponent(\n name: \"search-query\"\n): Observable\nexport function useComponent(\n name: Component\n): Observable\nexport function useComponent(\n name: Component\n): Observable {\n return components$\n .pipe(\n switchMap(components => (\n typeof components[name] !== \"undefined\"\n ? of(components[name] as T)\n : EMPTY\n )),\n distinctUntilChanged()\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, combineLatest, pipe } from \"rxjs\"\nimport {\n distinctUntilChanged,\n filter,\n map,\n shareReplay,\n startWith,\n switchMap,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport {\n Viewport,\n getElement,\n watchViewportAt\n} from \"browser\"\n\nimport { useComponent } from \"../../_\"\nimport {\n applyHeaderType,\n watchHeader\n} from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Header type\n */\nexport type HeaderType =\n | \"site\" /* Header shows site title */\n | \"page\" /* Header shows page title */\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Header\n */\nexport interface Header {\n type: HeaderType /* Header type */\n sticky: boolean /* Header stickyness */\n height: number /* Header visible height */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount header from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountHeader(\n { viewport$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => {\n const header$ = watchHeader(el, { viewport$ })\n\n /* Compute whether the header should switch to page header */\n const type$ = useComponent(\"main\")\n .pipe(\n map(main => getElement(\"h1, h2, h3, h4, h5, h6\", main)!),\n filter(hx => typeof hx !== \"undefined\"),\n withLatestFrom(useComponent(\"header-title\")),\n switchMap(([hx, title]) => watchViewportAt(hx, { header$, viewport$ })\n .pipe(\n map(({ offset: { y } }) => {\n return y >= hx.offsetHeight ? \"page\" : \"site\"\n }),\n distinctUntilChanged(),\n applyHeaderType(title)\n )\n ),\n startWith(\"site\")\n )\n\n /* Combine into single observable */\n return combineLatest([header$, type$])\n .pipe(\n map(([header, type]): Header => ({ type, ...header })),\n shareReplay(1)\n )\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n of,\n pipe\n} from \"rxjs\"\nimport {\n distinctUntilKeyChanged,\n finalize,\n observeOn,\n switchMap,\n tap\n} from \"rxjs/operators\"\n\nimport { Viewport } from \"browser\"\n\nimport { Header, HeaderType } from \"../_\"\nimport {\n resetHeaderTitleActive,\n setHeaderTitleActive\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch header\n *\n * The header is wrapped in an observable to pave the way for auto-hiding or\n * other dynamic behaviors that may be implemented later on.\n *\n * @param el - Header element\n * @param options - Options\n *\n * @return Header observable\n */\nexport function watchHeader(\n el: HTMLElement, { viewport$ }: WatchOptions\n): Observable> {\n return viewport$\n .pipe(\n distinctUntilKeyChanged(\"size\"),\n switchMap(() => {\n const styles = getComputedStyle(el)\n const sticky = [\n \"sticky\", /* Modern browsers */\n \"-webkit-sticky\" /* Old Safari */\n ].includes(styles.position)\n return of({\n sticky,\n height: sticky ? el.offsetHeight : 0\n })\n })\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Apply header title type\n *\n * @param el - Header title element\n *\n * @return Operator function\n */\nexport function applyHeaderType(\n el: HTMLElement\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(type => {\n setHeaderTitleActive(el, type === \"page\")\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n resetHeaderTitleActive(el)\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set header title active\n *\n * @param el - Header title element\n * @param value - Whether the title is shown\n */\nexport function setHeaderTitleActive(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"active\" : \"\")\n}\n\n/**\n * Reset header title active\n *\n * @param el - Header title element\n */\nexport function resetHeaderTitleActive(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, pipe } from \"rxjs\"\nimport { distinctUntilChanged, map, switchMap } from \"rxjs/operators\"\n\nimport { Viewport, watchViewportAt } from \"browser\"\n\nimport { Header } from \"../../header\"\nimport { applyHero } from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Hero\n */\nexport interface Hero {\n hidden: boolean /* Whether the hero is hidden */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount hero from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountHero(\n { header$, viewport$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => watchViewportAt(el, { header$, viewport$ })\n .pipe(\n map(({ offset: { y } }) => ({ hidden: y >= 20 })),\n distinctUntilChanged(),\n applyHero(el)\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n animationFrameScheduler,\n pipe\n} from \"rxjs\"\nimport { finalize, observeOn, tap } from \"rxjs/operators\"\n\nimport { Hero } from \"../_\"\nimport {\n resetHeroHidden,\n setHeroHidden\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Apply hero\n *\n * @param el - Hero element\n *\n * @return Operator function\n */\nexport function applyHero(\n el: HTMLElement\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ hidden }) => {\n setHeroHidden(el, hidden)\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n resetHeroHidden(el)\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set hero hidden\n *\n * @param el - Hero element\n * @param value - Whether the element is hidden\n */\nexport function setHeroHidden(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"hidden\" : \"\")\n}\n\n/**\n * Reset hero hidden\n *\n * @param el - Hero element\n */\nexport function resetHeroHidden(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./header\"\nexport * from \"./hero\"\nexport * from \"./main\"\nexport * from \"./navigation\"\nexport * from \"./search\"\nexport * from \"./shared\"\nexport * from \"./tabs\"\nexport * from \"./toc\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, Subject, pipe } from \"rxjs\"\nimport { distinctUntilKeyChanged, switchMap, tap } from \"rxjs/operators\"\n\nimport { Viewport } from \"browser\"\n\nimport { useComponent } from \"../../_\"\nimport { Header } from \"../../header\"\nimport {\n applyHeaderShadow,\n watchMain\n} from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Main area\n */\nexport interface Main {\n offset: number /* Main area top offset */\n height: number /* Main area visible height */\n active: boolean /* Scrolled past top offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount main area from source observable\n *\n * The header must be connected to the main area observable outside of the\n * operator function, as the header will persist in-between document switches\n * while the main area is replaced. However, the header observable must be\n * passed to this function, so we connect both via a long-living subject.\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountMain(\n { header$, viewport$ }: MountOptions\n): OperatorFunction {\n const main$ = new Subject
    ()\n\n /* Connect to main area observable via long-living subject */\n useComponent(\"header\")\n .pipe(\n switchMap(header => main$\n .pipe(\n distinctUntilKeyChanged(\"active\"),\n applyHeaderShadow(header)\n )\n )\n )\n .subscribe()\n\n /* Return operator */\n return pipe(\n switchMap(el => watchMain(el, { header$, viewport$ })),\n tap(main => main$.next(main))\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n combineLatest,\n pipe\n} from \"rxjs\"\nimport {\n distinctUntilChanged,\n finalize,\n map,\n observeOn,\n pluck,\n tap\n} from \"rxjs/operators\"\n\nimport { Viewport } from \"browser\"\n\nimport { Header } from \"../../header\"\nimport { Main } from \"../_\"\nimport {\n resetHeaderShadow,\n setHeaderShadow\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch main area\n *\n * This function returns an observable that computes the visual parameters of\n * the main area which depends on the viewport vertical offset and height, as\n * well as the height of the header element, if the header is fixed.\n *\n * @param el - Main area element\n * @param options - Options\n *\n * @return Main area observable\n */\nexport function watchMain(\n el: HTMLElement, { header$, viewport$ }: WatchOptions\n): Observable
    {\n\n /* Compute necessary adjustment for header */\n const adjust$ = header$\n .pipe(\n pluck(\"height\")\n )\n\n /* Compute the main area's visible height */\n const height$ = combineLatest([adjust$, viewport$])\n .pipe(\n map(([adjust, { offset: { y }, size: { height } }]) => {\n const top = el.offsetTop\n const bottom = el.offsetHeight + top\n return height\n - Math.max(0, top - y, adjust)\n - Math.max(0, height + y - bottom)\n }),\n map(height => Math.max(0, height)),\n distinctUntilChanged()\n )\n\n /* Compute whether the viewport offset is past the main area's top */\n const active$ = combineLatest([adjust$, viewport$])\n .pipe(\n map(([adjust, { offset: { y } }]) => y >= el.offsetTop - adjust),\n distinctUntilChanged()\n )\n\n /* Combine into a single observable */\n return combineLatest([adjust$, height$, active$])\n .pipe(\n map(([adjust, height, active]) => ({\n offset: el.offsetTop - adjust,\n height,\n active\n }))\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Apply header shadow\n *\n * @param el - Header element\n *\n * @return Operator function\n */\nexport function applyHeaderShadow(\n el: HTMLElement\n): MonoTypeOperatorFunction
    {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ active }) => {\n setHeaderShadow(el, active)\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n resetHeaderShadow(el)\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set header shadow\n *\n * @param el - Header element\n * @param value - Whether the shadow is shown\n */\nexport function setHeaderShadow(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"shadow\" : \"\")\n}\n\n/**\n * Reset header shadow\n *\n * @param el - Header element\n */\nexport function resetHeaderShadow(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, pipe } from \"rxjs\"\nimport { map, switchMap } from \"rxjs/operators\"\n\nimport { Viewport, getElements } from \"browser\"\n\nimport { Header } from \"../../header\"\nimport { Main } from \"../../main\"\nimport {\n Sidebar,\n applySidebar,\n watchSidebar\n} from \"../../shared\"\nimport {\n NavigationLayer,\n applyNavigationLayer,\n watchNavigationLayer\n} from \"../layer\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Navigation for [screen -]\n */\ninterface NavigationBelowScreen {\n layer: NavigationLayer /* Active layer */\n}\n\n/**\n * Navigation for [screen +]\n */\ninterface NavigationAboveScreen {\n sidebar: Sidebar /* Sidebar */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Navigation\n */\nexport type Navigation =\n | NavigationBelowScreen\n | NavigationAboveScreen\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n header$: Observable
    /* Header observable */\n main$: Observable
    /* Main area observable */\n viewport$: Observable /* Viewport observable */\n screen$: Observable /* Screen media observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount navigation from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountNavigation(\n { header$, main$, viewport$, screen$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => screen$\n .pipe(\n switchMap(screen => {\n\n /* [screen +]: Mount navigation in sidebar */\n if (screen) {\n return watchSidebar(el, { main$, viewport$ })\n .pipe(\n applySidebar(el, { header$ }),\n map(sidebar => ({ sidebar }))\n )\n\n /* [screen -]: Mount navigation in drawer */\n } else {\n const els = getElements(\"nav\", el)\n return watchNavigationLayer(els)\n .pipe(\n applyNavigationLayer(els),\n map(layer => ({ layer }))\n )\n }\n })\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./layer\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Navigation layer\n */\nexport interface NavigationLayer {\n prev?: HTMLElement /* Layer (previous) */\n next: HTMLElement /* Layer (next) */\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { findLast } from \"ramda\"\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n fromEvent,\n merge,\n pipe\n} from \"rxjs\"\nimport {\n delay,\n finalize,\n map,\n observeOn,\n scan,\n tap\n} from \"rxjs/operators\"\n\nimport { getElement, getElementOrThrow } from \"browser\"\n\nimport { NavigationLayer } from \"../_\"\nimport {\n resetOverflowScrolling,\n setOverflowScrolling\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch navigation layer\n *\n * On iOS we want to add `-webkit-overflow-scrolling: touch` for the menus\n * contained in the drawer, but as the navigational layers are nested, we can\n * only add it to the topmost layer or extremely weird cropping will occur.\n * This implementation keeps track of the previous and current layer.\n *\n * @param els - Navigation elements\n *\n * @return Navigation layer observable\n */\nexport function watchNavigationLayer(\n els: HTMLElement[]\n): Observable {\n const table = new Map()\n for (const el of els) {\n const label = getElement(\"label\", el)\n if (typeof label !== \"undefined\") {\n const input = getElementOrThrow(`#${label.htmlFor}`)\n table.set(input, el)\n }\n }\n\n /* Determine topmost layer */\n const layer$ = merge(...[...table.keys()].map(input => (\n fromEvent(input, \"change\")\n )))\n .pipe(\n map(() => getElementOrThrow(\".md-nav__list\", table.get(\n findLast(({ checked }) => checked, [...table.keys()])!\n )))\n )\n\n /* Return previous and next layer */\n return layer$\n .pipe(\n map(next => ({ next })),\n scan(({ next: prev }, { next }) => ({ prev, next }))\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Apply navigation layer\n *\n * @param els - Navigation elements\n *\n * @return Operator function\n */\nexport function applyNavigationLayer(\n els: HTMLElement[]\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ prev }) => {\n if (prev)\n resetOverflowScrolling(prev)\n }),\n\n /* Wait until transition has finished */\n delay(250),\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ next }) => {\n setOverflowScrolling(next)\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n for (const el of els)\n resetOverflowScrolling(\n getElementOrThrow(\".md-nav__list\", el)\n )\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Global augmentations\n */\ndeclare global {\n interface CSSStyleDeclaration {\n webkitOverflowScrolling: \"touch\" | \"\"\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set overflow scrolling\n *\n * @param el - Scrollable element\n */\nexport function setOverflowScrolling(\n el: HTMLElement\n): void {\n el.style.webkitOverflowScrolling = \"touch\"\n}\n\n/**\n * Reset overflow scrolling\n *\n * @param el - Scrollable element\n */\nexport function resetOverflowScrolling(\n el: HTMLElement\n): void {\n el.style.webkitOverflowScrolling = \"\"\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, combineLatest, pipe } from \"rxjs\"\nimport { map, switchMap } from \"rxjs/operators\"\n\nimport { SearchResult } from \"integrations/search\"\n\nimport { SearchQuery } from \"../query\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search\n */\nexport interface Search {\n query: SearchQuery /* Search query */\n result: SearchResult[] /* Search result list */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n query$: Observable /* Search query observable */\n reset$: Observable /* Search reset observable */\n result$: Observable /* Search result observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountSearch(\n { query$, reset$, result$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(() => combineLatest([query$, result$, reset$])\n .pipe(\n map(([query, result]) => ({ query, result }))\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./query\"\nexport * from \"./reset\"\nexport * from \"./result\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { OperatorFunction, pipe } from \"rxjs\"\nimport {\n distinctUntilKeyChanged,\n map,\n switchMap\n} from \"rxjs/operators\"\n\nimport { WorkerHandler, setToggle } from \"browser\"\nimport {\n SearchMessage,\n SearchMessageType,\n SearchQueryMessage\n} from \"workers\"\n\nimport { watchSearchQuery } from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search query\n */\nexport interface SearchQuery {\n value: string /* Query value */\n focus: boolean /* Query focus */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n transform?(value: string): string /* Transformation function */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search query from source observable\n *\n * @param handler - Worker handler\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountSearchQuery(\n { tx$ }: WorkerHandler, options: MountOptions = {}\n): OperatorFunction {\n return pipe(\n switchMap(el => {\n const query$ = watchSearchQuery(el, options)\n\n /* Subscribe worker to search query */\n query$\n .pipe(\n distinctUntilKeyChanged(\"value\"),\n map(({ value }): SearchQueryMessage => ({\n type: SearchMessageType.QUERY,\n data: value\n }))\n )\n .subscribe(tx$.next.bind(tx$))\n\n /* Toggle search on focus */\n query$\n .pipe(\n distinctUntilKeyChanged(\"focus\")\n )\n .subscribe(({ focus }) => {\n if (focus)\n setToggle(\"search\", focus)\n })\n\n /* Return search query */\n return query$\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, combineLatest, fromEvent, merge } from \"rxjs\"\nimport {\n delay,\n distinctUntilChanged,\n map,\n startWith\n} from \"rxjs/operators\"\n\nimport { watchElementFocus } from \"browser\"\n\nimport { SearchQuery } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n transform?(value: string): string /* Transformation function */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Default transformation function\n *\n * Rogue control characters are filtered before handing the query to the\n * search index, as `lunr` will throw otherwise.\n *\n * @param value - Query value\n *\n * @return Transformed query value\n */\nfunction defaultTransform(value: string): string {\n return value\n .replace(/(?:^|\\s+)[*+-:^~]+(?=\\s+|$)/g, \"\")\n .trim()\n .replace(/\\s+|\\b$/g, \"* \")\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch search query\n *\n * Note that the focus event which triggers re-reading the current query value\n * is delayed by `1ms` so the input's empty state is allowed to propagate.\n *\n * @param el - Search query element\n * @param options - Options\n *\n * @return Search query observable\n */\nexport function watchSearchQuery(\n el: HTMLInputElement, { transform }: WatchOptions = {}\n): Observable {\n const fn = transform || defaultTransform\n\n /* Intercept keyboard events */\n const value$ = merge(\n fromEvent(el, \"keyup\"),\n fromEvent(el, \"focus\").pipe(delay(1))\n )\n .pipe(\n map(() => fn(el.value)),\n startWith(fn(el.value)),\n distinctUntilChanged()\n )\n\n /* Intercept focus events */\n const focus$ = watchElementFocus(el)\n\n /* Combine into a single observable */\n return combineLatest([value$, focus$])\n .pipe(\n map(([value, focus]) => ({ value, focus }))\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { OperatorFunction, pipe } from \"rxjs\"\nimport {\n mapTo,\n startWith,\n switchMap,\n switchMapTo,\n tap\n} from \"rxjs/operators\"\n\nimport { setElementFocus } from \"browser\"\n\nimport { useComponent } from \"../../../_\"\nimport { watchSearchReset } from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search reset from source observable\n *\n * @return Operator function\n */\nexport function mountSearchReset(): OperatorFunction {\n return pipe(\n switchMap(el => watchSearchReset(el)\n .pipe(\n switchMapTo(useComponent(\"search-query\")),\n tap(setElementFocus),\n mapTo(undefined)\n )\n ),\n startWith(undefined)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent } from \"rxjs\"\nimport { mapTo } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch search reset\n *\n * @param el - Search reset element\n *\n * @return Search reset observable\n */\nexport function watchSearchReset(\n el: HTMLElement\n): Observable {\n return fromEvent(el, \"click\")\n .pipe(\n mapTo(undefined)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { identity } from \"ramda\"\nimport { Observable, OperatorFunction, pipe } from \"rxjs\"\nimport {\n distinctUntilChanged,\n filter,\n map,\n pluck,\n switchMap\n} from \"rxjs/operators\"\n\nimport { WorkerHandler, watchElementOffset } from \"browser\"\nimport { SearchResult } from \"integrations/search\"\nimport {\n SearchMessage,\n isSearchResultMessage\n} from \"workers\"\n\nimport { SearchQuery } from \"../../query\"\nimport { applySearchResult } from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n query$: Observable /* Search query observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search result from source observable\n *\n * @param handler - Worker handler\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountSearchResult(\n { rx$ }: WorkerHandler, { query$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => {\n const container = el.parentElement!\n\n /* Compute whether there are more search results to fetch */\n const fetch$ = watchElementOffset(container)\n .pipe(\n map(({ y }) => {\n return y >= container.scrollHeight - container.offsetHeight - 16\n }),\n distinctUntilChanged(),\n filter(identity)\n )\n\n /* Apply search results */\n return rx$\n .pipe(\n filter(isSearchResultMessage),\n pluck(\"data\"),\n applySearchResult(el, { query$, fetch$ })\n )\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n pipe\n} from \"rxjs\"\nimport {\n finalize,\n map,\n mapTo,\n observeOn,\n scan,\n switchMap,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport { getElementOrThrow } from \"browser\"\nimport { SearchResult } from \"integrations/search\"\nimport { renderSearchResult } from \"templates\"\n\nimport { SearchQuery } from \"../../query\"\nimport {\n addToSearchResultList,\n resetSearchResultList,\n resetSearchResultMeta,\n setSearchResultMeta\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Apply options\n */\ninterface ApplyOptions {\n query$: Observable /* Search query observable */\n fetch$: Observable /* Result fetch observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Apply search results\n *\n * This function will perform a lazy rendering of the search results, depending\n * on the vertical offset of the search result container. When the scroll offset\n * reaches the bottom of the element, more results are fetched and rendered.\n *\n * @param el - Search result element\n * @param options - Options\n *\n * @return Operator function\n */\nexport function applySearchResult(\n el: HTMLElement, { query$, fetch$ }: ApplyOptions\n): MonoTypeOperatorFunction {\n const list = getElementOrThrow(\".md-search-result__list\", el)\n const meta = getElementOrThrow(\".md-search-result__meta\", el)\n return pipe(\n\n /* Apply search result metadata */\n withLatestFrom(query$),\n map(([result, query]) => {\n if (query.value) {\n setSearchResultMeta(meta, result.length)\n } else {\n resetSearchResultMeta(meta)\n }\n return result\n }),\n\n /* Apply search result list */\n switchMap(result => fetch$\n .pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n scan(index => {\n const container = el.parentElement!\n while (index < result.length) {\n addToSearchResultList(list, renderSearchResult(result[index++]))\n if (container.scrollHeight - container.offsetHeight > 16)\n break\n }\n return index\n }, 0),\n\n /* Re-map to search result */\n mapTo(result),\n\n /* Reset on complete or error */\n finalize(() => {\n resetSearchResultList(list)\n })\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { translate } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set number of search results\n *\n * @param el - Search result metadata element\n * @param value - Number of results\n */\nexport function setSearchResultMeta(\n el: HTMLElement, value: number\n): void {\n switch (value) {\n\n /* No results */\n case 0:\n el.textContent = translate(\"search.result.none\")\n break\n\n /* One result */\n case 1:\n el.textContent = translate(\"search.result.one\")\n break\n\n /* Multiple result */\n default:\n el.textContent = translate(\"search.result.other\", value.toString())\n }\n}\n\n/**\n * Reset number of search results\n *\n * @param el - Search result metadata element\n */\nexport function resetSearchResultMeta(\n el: HTMLElement\n): void {\n el.textContent = translate(\"search.result.placeholder\")\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Add an element to the search result list\n *\n * @param el - Search result list element\n * @param child - Search result element\n */\nexport function addToSearchResultList(\n el: HTMLElement, child: HTMLElement\n): void {\n el.appendChild(child)\n}\n\n/**\n * Reset search result list\n *\n * @param el - Search result list element\n */\nexport function resetSearchResultList(\n el: HTMLElement\n): void {\n el.innerHTML = \"\"\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./sidebar\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Sidebar\n */\nexport interface Sidebar {\n height: number /* Sidebar height */\n lock: boolean /* Sidebar lock */\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n combineLatest,\n pipe\n} from \"rxjs\"\nimport {\n distinctUntilChanged,\n distinctUntilKeyChanged,\n finalize,\n map,\n observeOn,\n tap,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport { Viewport } from \"browser\"\n\nimport { Header } from \"../../../header\"\nimport { Main } from \"../../../main\"\nimport { Sidebar } from \"../_\"\nimport {\n resetSidebarHeight,\n resetSidebarLock,\n resetSidebarOffset,\n setSidebarHeight,\n setSidebarLock,\n setSidebarOffset\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n main$: Observable
    /* Main area observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/**\n * Apply options\n */\ninterface ApplyOptions {\n header$: Observable
    /* Header observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch sidebar\n *\n * This function returns an observable that computes the visual parameters of\n * the sidebar which depends on the vertical viewport offset, as well as the\n * height of the main area. When the page is scrolled beyond the header, the\n * sidebar is locked and fills the remaining space.\n *\n * @param el - Sidebar element\n * @param options - Options\n *\n * @return Sidebar observable\n */\nexport function watchSidebar(\n el: HTMLElement, { main$, viewport$ }: WatchOptions\n): Observable {\n\n /* Adjust for internal main area offset */\n const adjust$ = viewport$\n .pipe(\n distinctUntilKeyChanged(\"size\"),\n map(() => parseFloat(\n getComputedStyle(el.parentElement!)\n .getPropertyValue(\"padding-top\")\n )),\n distinctUntilChanged()\n )\n\n /* Compute the sidebar's available height */\n const height$ = viewport$\n .pipe(\n withLatestFrom(adjust$, main$),\n map(([{ offset: { y } }, adjust, { offset, height }]) => (\n height\n + Math.min(adjust, Math.max(0, y - offset))\n - adjust\n )),\n distinctUntilChanged()\n )\n\n /* Compute whether the sidebar should be locked */\n const lock$ = viewport$\n .pipe(\n withLatestFrom(adjust$, main$),\n map(([{ offset: { y } }, adjust, { offset }]) => (\n y >= offset + adjust\n )),\n distinctUntilChanged()\n )\n\n /* Combine into single observable */\n return combineLatest([height$, lock$])\n .pipe(\n map(([height, lock]) => ({ height, lock }))\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Apply sidebar\n *\n * @param el - Sidebar element\n * @param options - Options\n *\n * @return Operator function\n */\nexport function applySidebar(\n el: HTMLElement, { header$ }: ApplyOptions\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n withLatestFrom(header$),\n tap(([{ height, lock }, { height: offset }]) => {\n setSidebarHeight(el, height)\n setSidebarLock(el, lock)\n\n /* Set offset in locked state depending on header height */\n if (lock)\n setSidebarOffset(el, offset)\n else\n resetSidebarOffset(el)\n }),\n\n /* Re-map to sidebar */\n map(([sidebar]) => sidebar),\n\n /* Reset on complete or error */\n finalize(() => {\n resetSidebarOffset(el)\n resetSidebarHeight(el)\n resetSidebarLock(el)\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set sidebar offset\n *\n * @param el - Sidebar element\n * @param value - Sidebar offset\n */\nexport function setSidebarOffset(\n el: HTMLElement, value: number\n): void {\n el.style.top = `${value}px`\n}\n\n/**\n * Reset sidebar offset\n *\n * @param el - Sidebar element\n */\nexport function resetSidebarOffset(\n el: HTMLElement\n): void {\n el.style.top = \"\"\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Set sidebar height\n *\n * @param el - Sidebar element\n * @param value - Sidebar height\n */\nexport function setSidebarHeight(\n el: HTMLElement, value: number\n): void {\n el.style.height = `${value}px`\n}\n\n/**\n * Reset sidebar height\n *\n * @param el - Sidebar element\n */\nexport function resetSidebarHeight(\n el: HTMLElement\n): void {\n el.style.height = \"\"\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Set sidebar lock\n *\n * @param el - Sidebar element\n * @param value - Whether the sidebar is locked\n */\nexport function setSidebarLock(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"lock\" : \"\")\n}\n\n/**\n * Reset sidebar lock\n *\n * @param el - Sidebar element\n */\nexport function resetSidebarLock(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, of, pipe } from \"rxjs\"\nimport { distinctUntilChanged, map, switchMap } from \"rxjs/operators\"\n\nimport { Viewport, watchViewportAt } from \"browser\"\n\nimport { Header } from \"../../header\"\nimport { applyTabs } from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Tabs\n */\nexport interface Tabs {\n hidden: boolean /* Whether the tabs are hidden */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n screen$: Observable /* Media screen observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount tabs from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountTabs(\n { header$, viewport$, screen$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => screen$\n .pipe(\n switchMap(screen => {\n\n /* [screen +]: Mount tabs above screen breakpoint */\n if (screen) {\n return watchViewportAt(el, { header$, viewport$ })\n .pipe(\n map(({ offset: { y } }) => ({ hidden: y >= 10 })),\n distinctUntilChanged(),\n applyTabs(el)\n )\n\n /* [screen -]: Unmount tabs below screen breakpoint */\n } else {\n return of({ hidden: true })\n }\n })\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n animationFrameScheduler,\n pipe\n} from \"rxjs\"\nimport { finalize, observeOn, tap } from \"rxjs/operators\"\n\nimport { Tabs } from \"../_\"\nimport {\n resetTabsHidden,\n setTabsHidden\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Apply tabs\n *\n * @param el - Tabs element\n *\n * @return Operator function\n */\nexport function applyTabs(\n el: HTMLElement\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ hidden }) => {\n setTabsHidden(el, hidden)\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n resetTabsHidden(el)\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set tabs hidden\n *\n * @param el - Tabs element\n * @param value - Whether the element is hidden\n */\nexport function setTabsHidden(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"hidden\" : \"\")\n}\n\n/**\n * Reset tabs hidden\n *\n * @param el - Tabs element\n */\nexport function resetTabsHidden(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n OperatorFunction,\n combineLatest,\n of,\n pipe\n} from \"rxjs\"\nimport { map, switchMap } from \"rxjs/operators\"\n\nimport { Viewport, getElements } from \"browser\"\n\nimport { Header } from \"../../header\"\nimport { Main } from \"../../main\"\nimport {\n Sidebar,\n applySidebar,\n watchSidebar\n} from \"../../shared\"\nimport {\n AnchorList,\n applyAnchorList,\n watchAnchorList\n} from \"../anchor\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Table of contents for [tablet -]\n */\ninterface TableOfContentsBelowTablet {} // tslint:disable-line\n\n/**\n * Table of contents for [tablet +]\n */\ninterface TableOfContentsAboveTablet {\n sidebar: Sidebar /* Sidebar */\n anchors: AnchorList /* Anchor list */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Table of contents\n */\nexport type TableOfContents =\n | TableOfContentsBelowTablet\n | TableOfContentsAboveTablet\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n header$: Observable
    /* Header observable */\n main$: Observable
    /* Main area observable */\n viewport$: Observable /* Viewport observable */\n tablet$: Observable /* Tablet media observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount table of contents from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountTableOfContents(\n { header$, main$, viewport$, tablet$}: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => tablet$\n .pipe(\n switchMap(tablet => {\n\n /* [tablet +]: Mount table of contents in sidebar */\n if (tablet) {\n const els = getElements(\".md-nav__link\", el)\n\n /* Watch and apply sidebar */\n const sidebar$ = watchSidebar(el, { main$, viewport$ })\n .pipe(\n applySidebar(el, { header$ })\n )\n\n /* Watch and apply anchor list (scroll spy) */\n const anchors$ = watchAnchorList(els, { header$, viewport$ })\n .pipe(\n applyAnchorList(els)\n )\n\n /* Combine into a single hot observable */\n return combineLatest([sidebar$, anchors$])\n .pipe(\n map(([sidebar, anchors]) => ({ sidebar, anchors }))\n )\n\n /* [tablet -]: Unmount table of contents */\n } else {\n return of({})\n }\n })\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Anchor list\n */\nexport interface AnchorList {\n prev: HTMLAnchorElement[][] /* Anchors (previous) */\n next: HTMLAnchorElement[][] /* Anchors (next) */\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { reverse } from \"ramda\"\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n combineLatest,\n pipe\n} from \"rxjs\"\nimport {\n bufferCount,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n finalize,\n map,\n observeOn,\n scan,\n startWith,\n switchMap,\n tap\n} from \"rxjs/operators\"\n\nimport { Viewport, getElement } from \"browser\"\n\nimport { Header } from \"../../../header\"\nimport { AnchorList } from \"../_\"\nimport {\n resetAnchorActive,\n resetAnchorBlur,\n setAnchorActive,\n setAnchorBlur\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch anchor list\n *\n * This is effectively a scroll-spy implementation which will account for the\n * fixed header and automatically re-calculate anchor offsets when the viewport\n * is resized. The returned observable will only emit if the anchor list needs\n * to be repainted.\n *\n * This implementation tracks an anchor element's entire path starting from its\n * level up to the top-most anchor element, e.g. `[h3, h2, h1]`. Although the\n * Material theme currently doesn't make use of this information, it enables\n * the styling of the entire hierarchy through customization.\n *\n * Note that the current anchor is the last item of the `prev` anchor list.\n *\n * @param els - Anchor elements\n * @param options - Options\n *\n * @return Anchor list observable\n */\nexport function watchAnchorList(\n els: HTMLAnchorElement[], { header$, viewport$ }: WatchOptions\n): Observable {\n const table = new Map()\n for (const el of els) {\n const id = decodeURIComponent(el.hash.substring(1))\n const target = getElement(`[id=\"${id}\"]`)\n if (typeof target !== \"undefined\")\n table.set(el, target)\n }\n\n /* Compute necessary adjustment for header */\n const adjust$ = header$\n .pipe(\n map(header => 18 + header.height)\n )\n\n /* Compute partition of previous and next anchors */\n const partition$ = viewport$\n .pipe(\n distinctUntilKeyChanged(\"size\"),\n\n /* Build index to map anchor paths to vertical offsets */\n map(() => {\n let path: HTMLAnchorElement[] = []\n return [...table].reduce((index, [anchor, target]) => {\n while (path.length) {\n const last = table.get(path[path.length - 1])!\n if (last.tagName >= target.tagName) {\n path.pop()\n } else {\n break\n }\n }\n\n /* If the current anchor is hidden, continue with its parent */\n let offset = target.offsetTop\n while (!offset && target.parentElement) {\n target = target.parentElement\n offset = target.offsetTop\n }\n\n /* Map reversed anchor path to vertical offset */\n return index.set(\n reverse(path = [...path, anchor]),\n offset\n )\n }, new Map())\n }),\n\n /* Re-compute partition when viewport offset changes */\n switchMap(index => combineLatest([adjust$, viewport$])\n .pipe(\n scan(([prev, next], [adjust, { offset: { y } }]) => {\n\n /* Look forward */\n while (next.length) {\n const [, offset] = next[0]\n if (offset - adjust < y) {\n prev = [...prev, next.shift()!]\n } else {\n break\n }\n }\n\n /* Look backward */\n while (prev.length) {\n const [, offset] = prev[prev.length - 1]\n if (offset - adjust >= y) {\n next = [prev.pop()!, ...next]\n } else {\n break\n }\n }\n\n /* Return partition */\n return [prev, next]\n }, [[], [...index]]),\n distinctUntilChanged((a, b) => {\n return a[0] === b[0]\n && a[1] === b[1]\n })\n )\n )\n )\n\n /* Compute and return anchor list migrations */\n return partition$\n .pipe(\n map(([prev, next]) => ({\n prev: prev.map(([path]) => path),\n next: next.map(([path]) => path)\n })),\n\n /* Extract anchor list migrations */\n startWith({ prev: [], next: [] }),\n bufferCount(2, 1),\n map(([a, b]) => {\n\n /* Moving down */\n if (a.prev.length < b.prev.length) {\n return {\n prev: b.prev.slice(Math.max(0, a.prev.length - 1), b.prev.length),\n next: []\n }\n\n /* Moving up */\n } else {\n return {\n prev: b.prev.slice(-1),\n next: b.next.slice(0, b.next.length - a.next.length)\n }\n }\n })\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Apply anchor list\n *\n * @param els - Anchor elements\n *\n * @return Operator function\n */\nexport function applyAnchorList(\n els: HTMLAnchorElement[]\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ prev, next }) => {\n\n /* Look forward */\n for (const [el] of next) {\n resetAnchorActive(el)\n resetAnchorBlur(el)\n }\n\n /* Look backward */\n prev.forEach(([el], index) => {\n setAnchorActive(el, index === prev.length - 1)\n setAnchorBlur(el, true)\n })\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n for (const el of els) {\n resetAnchorActive(el)\n resetAnchorBlur(el)\n }\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set anchor blur\n *\n * @param el - Anchor element\n * @param value - Whether the anchor is blurred\n */\nexport function setAnchorBlur(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"blur\" : \"\")\n}\n\n/**\n * Reset anchor blur\n *\n * @param el - Anchor element\n */\nexport function resetAnchorBlur(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Set anchor active\n *\n * @param el - Anchor element\n * @param value - Whether the anchor is active\n */\nexport function setAnchorActive(\n el: HTMLElement, value: boolean\n): void {\n el.classList.toggle(\"md-nav__link--active\", value)\n}\n\n/**\n * Reset anchor active\n *\n * @param el - Anchor element\n */\nexport function resetAnchorActive(\n el: HTMLElement\n): void {\n el.classList.remove(\"md-nav__link--active\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./anchor\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n// TODO: remove this after we finished refactoring\n// tslint:disable\n\nimport \"../stylesheets/main.scss\"\nimport \"../stylesheets/palette.scss\"\n\nimport { values } from \"ramda\"\nimport {\n merge,\n combineLatest,\n animationFrameScheduler,\n fromEvent,\n of,\n NEVER,\n from\n} from \"rxjs\"\nimport {\n delay,\n switchMap,\n tap,\n filter,\n withLatestFrom,\n observeOn,\n take,\n shareReplay,\n share\n} from \"rxjs/operators\"\n\nimport {\n watchToggle,\n setToggle,\n getElements,\n watchMedia,\n watchDocument,\n watchLocation,\n watchLocationHash,\n watchViewport,\n isLocationInternal,\n isLocationAnchor\n} from \"./browser\"\nimport { setupSearchWorker } from \"./workers\"\n\nimport {\n mountHeader,\n mountHero,\n mountMain,\n mountNavigation,\n mountSearch,\n mountTableOfContents,\n mountTabs,\n useComponent,\n setupComponents,\n mountSearchQuery,\n mountSearchReset,\n mountSearchResult\n} from \"components\"\nimport { setupClipboard } from \"./integrations/clipboard\"\nimport { setupDialog } from \"integrations/dialog\"\nimport { setupKeyboard } from \"./integrations/keyboard\"\nimport { setupInstantLoading } from \"integrations/instant\"\nimport {\n patchTables,\n patchDetails,\n patchScrollfix,\n patchSource,\n patchScripts\n} from \"patches\"\nimport { isConfig } from \"utilities\"\n\n/* ------------------------------------------------------------------------- */\n\ndocument.documentElement.classList.remove(\"no-js\")\ndocument.documentElement.classList.add(\"js\")\n\n/* Test for iOS */\nif (navigator.userAgent.match(/(iPad|iPhone|iPod)/g))\n document.documentElement.classList.add(\"ios\")\n\n/**\n * Set scroll lock\n *\n * @param el - Scrollable element\n * @param value - Vertical offset\n */\nexport function setScrollLock(\n el: HTMLElement, value: number\n): void {\n el.setAttribute(\"data-md-state\", \"lock\")\n el.style.top = `-${value}px`\n}\n\n/**\n * Reset scroll lock\n *\n * @param el - Scrollable element\n */\nexport function resetScrollLock(\n el: HTMLElement\n): void {\n const value = -1 * parseInt(el.style.top, 10)\n el.removeAttribute(\"data-md-state\")\n el.style.top = \"\"\n if (value)\n window.scrollTo(0, value)\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Initialize Material for MkDocs\n *\n * @param config - Configuration\n */\nexport function initialize(config: unknown) {\n if (!isConfig(config))\n throw new SyntaxError(`Invalid configuration: ${JSON.stringify(config)}`)\n\n /* Setup user interface observables */\n const location$ = watchLocation()\n const hash$ = watchLocationHash()\n const viewport$ = watchViewport()\n const tablet$ = watchMedia(\"(min-width: 960px)\")\n const screen$ = watchMedia(\"(min-width: 1220px)\")\n\n /* Setup document observable */\n const document$ = config.features.includes(\"instant\")\n ? watchDocument({ location$ })\n : watchDocument()\n\n /* Setup component bindings */\n setupComponents([\n \"container\", /* Container */\n \"header\", /* Header */\n \"header-title\", /* Header title */\n \"hero\", /* Hero */\n \"main\", /* Main area */\n \"navigation\", /* Navigation */\n \"search\", /* Search */\n \"search-query\", /* Search input */\n \"search-reset\", /* Search reset */\n \"search-result\", /* Search results */\n \"skip\", /* Skip link */\n \"tabs\", /* Tabs */\n \"toc\" /* Table of contents */\n ], { document$ })\n\n /* ----------------------------------------------------------------------- */\n\n // External index\n const index = config.search && config.search.index\n ? config.search.index\n : undefined\n\n // TODO: pass URL config as first parameter, options as second\n const worker = setupSearchWorker(config.url.worker.search, {\n base: config.url.base, index, location$\n })\n\n /* ----------------------------------------------------------------------- */\n\n /* Create header observable */\n const header$ = useComponent(\"header\")\n .pipe(\n mountHeader({ viewport$ }),\n shareReplay(1)\n )\n\n const main$ = useComponent(\"main\")\n .pipe(\n mountMain({ header$, viewport$ }),\n shareReplay(1)\n )\n\n /* ----------------------------------------------------------------------- */\n\n /* Mount search query */\n const query$ = useComponent(\"search-query\")\n .pipe(\n mountSearchQuery(worker),\n shareReplay(1)\n )\n\n /* Mount search reset */\n const reset$ = useComponent(\"search-reset\")\n .pipe(\n mountSearchReset(),\n shareReplay(1)\n )\n\n /* Mount search result */\n const result$ = useComponent(\"search-result\")\n .pipe(\n mountSearchResult(worker, { query$ }),\n shareReplay(1)\n )\n\n /* ----------------------------------------------------------------------- */\n\n const search$ = useComponent(\"search\")\n .pipe(\n mountSearch({ query$, reset$, result$ }),\n shareReplay(1)\n )\n\n /* ----------------------------------------------------------------------- */\n\n const navigation$ = useComponent(\"navigation\")\n .pipe(\n mountNavigation({ header$, main$, viewport$, screen$ }),\n shareReplay(1) // shareReplay because there might be late subscribers\n )\n\n const toc$ = useComponent(\"toc\")\n .pipe(\n mountTableOfContents({ header$, main$, viewport$, tablet$ }),\n shareReplay(1)\n )\n\n const tabs$ = useComponent(\"tabs\")\n .pipe(\n mountTabs({ header$, viewport$, screen$ }),\n shareReplay(1)\n )\n\n const hero$ = useComponent(\"hero\")\n .pipe(\n mountHero({ header$, viewport$ }),\n shareReplay(1)\n )\n\n /* ----------------------------------------------------------------------- */\n\n const keyboard$ = setupKeyboard()\n\n patchDetails({ document$, hash$ })\n patchScripts({ document$ })\n patchSource({ document$ })\n patchTables({ document$ })\n\n /* Force 1px scroll offset to trigger overflow scrolling */\n patchScrollfix({ document$ })\n\n /* Setup clipboard and dialog */\n const dialog$ = setupDialog()\n const clipboard$ = setupClipboard({ document$, dialog$ })\n\n /* ----------------------------------------------------------------------- */\n\n // // put into search...\n // hash$\n // .pipe(\n // switchMap(hash => useToggle(\"search\")\n // .pipe(\n // filter(x => x.checked), // only active\n // tap(toggle => setToggle(toggle, false)),\n // delay(125), // ensure that it runs after the body scroll reset...\n // mapTo(hash)\n // )\n // )\n // )\n // .subscribe(hash => {\n // getElement(`[id=\"${hash}\"]`)!.scrollIntoView()\n // })\n\n // Scroll lock // document -> document$ => { body } !?\n // put into search...\n combineLatest([\n watchToggle(\"search\"),\n tablet$,\n ])\n .pipe(\n withLatestFrom(viewport$),\n switchMap(([[toggle, tablet], { offset: { y }}]) => {\n const active = toggle && !tablet\n return document$\n .pipe(\n delay(active ? 400 : 100), // TOOD: directly combine this with the hash!\n observeOn(animationFrameScheduler),\n tap(({ body }) => active\n ? setScrollLock(body, y)\n : resetScrollLock(body)\n )\n )\n })\n )\n .subscribe()\n\n /* ----------------------------------------------------------------------- */\n\n /* Intercept internal link clicks */\n const link$ = fromEvent(document.body, \"click\")\n .pipe(\n filter(ev => !(ev.metaKey || ev.ctrlKey)),\n switchMap(ev => {\n if (ev.target instanceof HTMLElement) {\n const el = ev.target.closest(\"a\") // TODO: abstract as link click?\n if (el && isLocationInternal(el)) {\n if (!isLocationAnchor(el))\n ev.preventDefault()\n return of(el)\n }\n }\n return NEVER\n }),\n share()\n )\n\n /* Always close drawer on click */\n link$.subscribe(() => {\n setToggle(\"drawer\", false)\n })\n\n // somehow call this setupNavigation ?\n\n // instant loading\n if (config.features.includes(\"instant\")) {\n\n /* Disable automatic scroll restoration, as it doesn't work nicely */\n if (\"scrollRestoration\" in history)\n history.scrollRestoration = \"manual\"\n\n /* Resolve relative links for stability */\n for (const selector of [\n `link[rel=\"shortcut icon\"]`,\n `link[rel=\"stylesheet\"]`\n ])\n for (const el of getElements(selector))\n el.href = el.href\n\n setupInstantLoading({\n document$, link$, location$, viewport$\n })\n\n }\n\n /* ----------------------------------------------------------------------- */\n\n // if we use a single tab outside of search, unhide all permalinks.\n // TODO: experimental. necessary!?\n keyboard$\n .pipe(\n filter(key => key.mode === \"global\" && [\"Tab\"].includes(key.type)),\n take(1)\n )\n .subscribe(() => {\n for (const link of getElements(\".headerlink\"))\n link.style.visibility = \"visible\"\n })\n\n /* ----------------------------------------------------------------------- */\n\n const state = {\n\n /* Browser observables */\n document$,\n viewport$,\n\n /* Component observables */\n header$,\n hero$,\n main$,\n navigation$,\n search$,\n tabs$,\n toc$,\n\n /* Integation observables */\n clipboard$,\n keyboard$,\n dialog$\n }\n\n /* Subscribe to all observables */\n merge(...values(state))\n .subscribe()\n return state\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport * as ClipboardJS from \"clipboard\"\nimport { NEVER, Observable, Subject, fromEventPattern } from \"rxjs\"\nimport { mapTo, share, tap } from \"rxjs/operators\"\n\nimport { getElements } from \"browser\"\nimport { renderClipboard } from \"templates\"\nimport { translate } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n document$: Observable /* Document observable */\n dialog$: Subject /* Dialog subject */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup clipboard\n *\n * This function implements the Clipboard.js integration and injects a button\n * into all code blocks when the document changes.\n *\n * @param options - Options\n *\n * @return Clipboard observable\n */\nexport function setupClipboard(\n { document$, dialog$ }: SetupOptions\n): Observable {\n if (!ClipboardJS.isSupported())\n return NEVER\n\n /* Inject 'copy-to-clipboard' buttons */\n document$.subscribe(() => {\n const blocks = getElements(\"pre > code\")\n blocks.forEach((block, index) => {\n const parent = block.parentElement!\n parent.id = `__code_${index}`\n parent.insertBefore(renderClipboard(parent.id), block)\n })\n })\n\n /* Initialize and setup clipboard */\n const clipboard$ = fromEventPattern(next => {\n new ClipboardJS(\".md-clipboard\").on(\"success\", next)\n })\n .pipe(\n share()\n )\n\n /* Display notification for clipboard event */\n clipboard$\n .pipe(\n tap(ev => ev.clearSelection()),\n mapTo(translate(\"clipboard.copied\"))\n )\n .subscribe(dialog$)\n\n /* Return clipboard */\n return clipboard$\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Subject, animationFrameScheduler, of } from \"rxjs\"\nimport {\n delay,\n map,\n observeOn,\n switchMap,\n tap\n} from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n duration?: number /* Display duration (default: 2s) */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup dialog\n *\n * @param options - Options\n *\n * @return Dialog observable\n */\nexport function setupDialog(\n { duration }: SetupOptions = {}\n): Subject {\n const dialog$ = new Subject()\n\n /* Create dialog */\n const dialog = document.createElement(\"div\") // TODO: improve scoping\n dialog.classList.add(\"md-dialog\", \"md-typeset\")\n\n /* Display dialog */\n dialog$\n .pipe(\n switchMap(text => of(document.body) // useComponent(\"container\")\n .pipe(\n map(container => container.appendChild(dialog)),\n observeOn(animationFrameScheduler),\n delay(1), // Strangley it doesnt work when we push things to the new animation frame...\n tap(el => {\n el.innerHTML = text\n el.setAttribute(\"data-md-state\", \"open\")\n }),\n delay(duration || 2000),\n tap(el => el.removeAttribute(\"data-md-state\")),\n delay(400),\n tap(el => {\n el.innerHTML = \"\"\n el.remove()\n })\n )\n )\n )\n .subscribe()\n\n /* Return dialog subject */\n return dialog$\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, Subject, fromEvent, merge } from \"rxjs\"\nimport {\n bufferCount,\n debounceTime,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n filter,\n map,\n pluck,\n sample,\n share,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport {\n Viewport,\n ViewportOffset,\n getElement,\n isLocationAnchor,\n setLocationHash,\n setViewportOffset\n} from \"browser\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * History state\n */\ninterface State {\n url: URL /* State URL */\n offset?: ViewportOffset /* State viewport offset */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n document$: Observable /* Document observable */\n viewport$: Observable /* Viewport observable */\n link$: Observable /* Internal link observable */\n location$: Subject /* Location subject */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup instant loading\n *\n * @param options - Options\n *\n * @return TODO ?\n */\nexport function setupInstantLoading(\n { document$, viewport$, link$, location$ }: SetupOptions\n) { // TODO: add return type\n const state$ = link$\n .pipe(\n map(el => ({ url: new URL(el.href) })),\n share()\n )\n\n /* Intercept internal links to dispatch */\n const push$ = state$\n .pipe(\n distinctUntilChanged((prev, next) => prev.url.href === next.url.href),\n filter(({ url }) => !isLocationAnchor(url)),\n share()\n )\n\n /* Intercept popstate events (history back and forward) */\n const pop$ = fromEvent(window, \"popstate\")\n .pipe(\n filter(ev => ev.state !== null),\n map(ev => ({\n url: new URL(location.href),\n offset: ev.state\n })),\n share()\n )\n\n /* Emit location change */\n merge(push$, pop$)\n .pipe(\n pluck(\"url\")\n )\n .subscribe(location$)\n\n /* History: dispatch internal link */\n push$.subscribe(({ url }) => {\n history.pushState({}, \"\", url.toString())\n })\n\n /* History: debounce update of viewport offset */\n viewport$\n .pipe(\n debounceTime(250),\n distinctUntilKeyChanged(\"offset\")\n )\n .subscribe(({ offset }) => {\n history.replaceState(offset, \"\")\n })\n\n /* Apply viewport offset from history */\n merge(state$, pop$)\n .pipe(\n bufferCount(2, 1),\n filter(([prev, next]) => {\n return prev.url.pathname === next.url.pathname\n && !isLocationAnchor(next.url)\n }),\n map(([, state]) => state)\n )\n .subscribe(({ offset }) => {\n setViewportOffset(offset || { y: 0 })\n })\n\n /* Intercept actual instant loading */\n const instant$ = merge(push$, pop$)\n .pipe(\n sample(document$)\n )\n\n // TODO: from here on, everything is beta.... ###############################\n\n instant$.subscribe(({ url, offset }) => {\n if (url.hash && !offset) {\n console.log(\"set hash!\")\n setLocationHash(url.hash) // must delay, if search is open!\n } else {\n setViewportOffset(offset || { y: 0 })\n }\n })\n\n instant$\n .pipe(\n withLatestFrom(document$)\n )\n .subscribe(([, { title, head }]) => {\n document.dispatchEvent(new CustomEvent(\"DOMContentSwitch\"))\n document.title = title\n\n /* Replace meta tags */\n for (const selector of [\n `link[rel=\"canonical\"]`,\n `meta[name=\"author\"]`,\n `meta[name=\"description\"]`\n ]) {\n const next = getElement(selector, head)\n const prev = getElement(selector, document.head)\n if (\n typeof next !== \"undefined\" &&\n typeof prev !== \"undefined\"\n ) {\n prev.replaceWith(next)\n }\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable } from \"rxjs\"\nimport {\n filter,\n map,\n share,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport {\n Key,\n getActiveElement,\n getElement,\n getElements,\n getToggle,\n isSusceptibleToKeyboard,\n setElementFocus,\n setElementSelection,\n setToggle,\n watchKeyboard\n} from \"browser\"\nimport { useComponent } from \"components\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Keyboard mode\n */\nexport type KeyboardMode =\n | \"global\" /* Global */\n | \"search\" /* Search is open */\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Keyboard\n */\nexport interface Keyboard extends Key {\n mode: KeyboardMode /* Keyboard mode */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup keyboard\n *\n * This function will setup the keyboard handlers and ensure that keys are\n * correctly propagated. Currently there are two modes:\n *\n * - `global`: This mode is active when the search is closed. It is intended\n * to assign hotkeys to specific functions of the site. Currently the search,\n * previous and next page can be triggered.\n *\n * - `search`: This mode is active when the search is open. It maps certain\n * navigational keys to offer search results that can be entirely navigated\n * through keyboard input.\n *\n * The keyboard observable is returned and can be used to monitor the keyboard\n * in order toassign further hotkeys to custom functions.\n *\n * @return Keyboard observable\n */\nexport function setupKeyboard(): Observable {\n const keyboard$ = watchKeyboard()\n .pipe(\n map(key => ({\n mode: getToggle(\"search\") ? \"search\" : \"global\",\n ...key\n })),\n share()\n )\n\n /* Setup search keyboard handlers */\n keyboard$\n .pipe(\n filter(({ mode }) => mode === \"search\"),\n withLatestFrom(\n useComponent(\"search-query\"),\n useComponent(\"search-result\")\n )\n )\n .subscribe(([key, query, result]) => {\n const active = getActiveElement()\n switch (key.type) {\n\n /* Enter: prevent form submission */\n case \"Enter\":\n if (active === query)\n key.claim()\n break\n\n /* Escape or Tab: close search */\n case \"Escape\":\n case \"Tab\":\n setToggle(\"search\", false)\n setElementFocus(query, false)\n break\n\n /* Vertical arrows: select previous or next search result */\n case \"ArrowUp\":\n case \"ArrowDown\":\n if (typeof active === \"undefined\") {\n setElementFocus(query)\n } else {\n const els = [query, ...getElements(\"[href]\", result)]\n const i = Math.max(0, (\n Math.max(0, els.indexOf(active)) + els.length + (\n key.type === \"ArrowUp\" ? -1 : +1\n )\n ) % els.length)\n setElementFocus(els[i])\n }\n\n /* Prevent scrolling of page */\n key.claim()\n break\n\n /* All other keys: hand to search query */\n default:\n if (query !== getActiveElement())\n setElementFocus(query)\n }\n })\n\n /* Setup global keyboard handlers */\n keyboard$\n .pipe(\n filter(({ mode }) => {\n if (mode === \"global\") {\n const active = getActiveElement()\n if (typeof active !== \"undefined\")\n return !isSusceptibleToKeyboard(active)\n }\n return false\n }),\n withLatestFrom(useComponent(\"search-query\"))\n )\n .subscribe(([key, query]) => {\n switch (key.type) {\n\n /* Open search and select query */\n case \"f\":\n case \"s\":\n setElementFocus(query)\n setElementSelection(query)\n key.claim()\n break\n\n /* Go to previous page */\n case \"p\":\n case \",\":\n const prev = getElement(\"[href][rel=prev]\")\n if (typeof prev !== \"undefined\")\n prev.click()\n break\n\n /* Go to next page */\n case \"n\":\n case \".\":\n const next = getElement(\"[href][rel=next]\")\n if (typeof next !== \"undefined\")\n next.click()\n break\n }\n })\n\n /* Return keyboard */\n return keyboard$\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { identity } from \"ramda\"\nimport { Observable, fromEvent, merge } from \"rxjs\"\nimport {\n filter,\n map,\n switchMapTo,\n tap\n} from \"rxjs/operators\"\n\nimport {\n getElement,\n getElements,\n watchMedia\n} from \"browser\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n document$: Observable /* Document observable */\n hash$: Observable /* Location hash observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch all `details` elements\n *\n * This function will ensure that all `details` tags are opened prior to\n * printing, so the whole content of the page is included, and on anchor jumps.\n *\n * @param options - Options\n */\nexport function patchDetails(\n { document$, hash$ }: PatchOptions\n): void {\n const els$ = document$\n .pipe(\n map(() => getElements(\"details\"))\n )\n\n /* Open all details before printing */\n merge(\n watchMedia(\"print\").pipe(filter(identity)), /* Webkit */\n fromEvent(window, \"beforeprint\") /* IE, FF */\n )\n .pipe(\n switchMapTo(els$)\n )\n .subscribe(els => {\n for (const el of els)\n el.setAttribute(\"open\", \"\")\n })\n\n /* Open parent details and fix anchor jump */\n hash$\n .pipe(\n map(id => getElement(`[id=\"${id}\"]`)!),\n filter(el => typeof el !== \"undefined\"),\n tap(el => {\n const details = el.closest(\"details\")\n if (details && !details.open)\n details.setAttribute(\"open\", \"\")\n })\n )\n .subscribe(el => el.scrollIntoView())\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./details\"\nexport * from \"./script\"\nexport * from \"./scrollfix\"\nexport * from \"./source\"\nexport * from \"./table\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable } from \"rxjs\"\nimport { map, skip, withLatestFrom } from \"rxjs/operators\"\n\nimport { getElements } from \"browser\"\nimport { useComponent } from \"components\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch all `script` elements\n *\n * This function must be run after a document switch, which means the first\n * emission must be ignored.\n *\n * @param options - Options\n */\nexport function patchScripts(\n { document$ }: PatchOptions\n): void {\n const els$ = document$\n .pipe(\n skip(1),\n withLatestFrom(useComponent(\"container\")),\n map(([, el]) => getElements(\"script\", el))\n )\n\n /* Evaluate all scripts via replacement */\n els$.subscribe(els => {\n for (const el of els) {\n if (el.src || /(^|\\/javascript)$/i.test(el.type)) {\n const script = document.createElement(\"script\")\n const key = el.src ? \"src\" : \"innerText\"\n script[key] = el[key]\n el.replaceWith(script)\n }\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { NEVER, Observable, fromEvent, iif, merge } from \"rxjs\"\nimport { map, mapTo, shareReplay, switchMap } from \"rxjs/operators\"\n\nimport { getElements } from \"browser\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Check whether the given device is an Apple device\n *\n * @return Test result\n */\nfunction isAppleDevice(): boolean {\n return /(iPad|iPhone|iPod)/.test(navigator.userAgent)\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch all elements with `data-md-scrollfix` attributes\n *\n * This is a year-old patch which ensures that overflow scrolling works at the\n * top and bottom of containers on iOS by ensuring a `1px` scroll offset upon\n * the start of a touch event.\n *\n * @see https://bit.ly/2SCtAOO - Original source\n *\n * @param options - Options\n */\nexport function patchScrollfix(\n { document$ }: PatchOptions\n): void {\n const els$ = document$\n .pipe(\n map(() => getElements(\"[data-md-scrollfix]\")),\n shareReplay(1)\n )\n\n /* Remove marker attribute, so we'll only add the fix once */\n els$.subscribe(els => {\n for (const el of els)\n el.removeAttribute(\"data-md-scrollfix\")\n })\n\n /* Patch overflow scrolling on touch start */\n iif(isAppleDevice, els$, NEVER)\n .pipe(\n switchMap(els => merge(...els.map(el => (\n fromEvent(el, \"touchstart\")\n .pipe(\n mapTo(el)\n )\n ))))\n )\n .subscribe(el => {\n const top = el.scrollTop\n\n /* We're at the top of the container */\n if (top === 0) {\n el.scrollTop = 1\n\n /* We're at the bottom of the container */\n } else if (top + el.offsetHeight === el.scrollHeight) {\n el.scrollTop = top - 1\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Repo, User } from \"github-types\"\nimport { Observable, of } from \"rxjs\"\nimport { ajax } from \"rxjs/ajax\"\nimport { filter, pluck, switchMap } from \"rxjs/operators\"\n\nimport { round } from \"utilities\"\n\nimport { SourceFacts } from \"..\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch GitHub source facts\n *\n * @param user - GitHub user\n * @param repo - GitHub repository\n *\n * @return Source facts observable\n */\nexport function fetchSourceFactsFromGitHub(\n user: string, repo?: string\n): Observable {\n return ajax({\n url: typeof repo !== \"undefined\"\n ? `https://api.github.com/repos/${user}/${repo}`\n : `https://api.github.com/users/${user}`,\n responseType: \"json\"\n })\n .pipe(\n filter(({ status }) => status === 200),\n pluck(\"response\"),\n switchMap(data => {\n\n /* GitHub repository */\n if (typeof repo !== \"undefined\") {\n const { stargazers_count, forks_count }: Repo = data\n return of([\n `${round(stargazers_count || 0)} Stars`,\n `${round(forks_count || 0)} Forks`\n ])\n\n /* GitHub user/organization */\n } else {\n const { public_repos }: User = data\n return of([\n `${round(public_repos || 0)} Repositories`\n ])\n }\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { ProjectSchema } from \"gitlab\"\nimport { Observable } from \"rxjs\"\nimport { ajax } from \"rxjs/ajax\"\nimport { filter, map, pluck } from \"rxjs/operators\"\n\nimport { round } from \"utilities\"\n\nimport { SourceFacts } from \"..\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch GitLab source facts\n *\n * @param base - GitLab base\n * @param project - GitLab project\n *\n * @return Source facts observable\n */\nexport function fetchSourceFactsFromGitLab(\n base: string, project: string\n): Observable {\n return ajax({\n url: `https://${base}/api/v4/projects/${encodeURIComponent(project)}`,\n responseType: \"json\"\n })\n .pipe(\n filter(({ status }) => status === 200),\n pluck(\"response\"),\n map(({ star_count, forks_count }: ProjectSchema) => ([\n `${round(star_count)} Stars`,\n `${round(forks_count)} Forks`\n ]))\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { NEVER, Observable } from \"rxjs\"\nimport { catchError, map, switchMap } from \"rxjs/operators\"\n\nimport { getElementOrThrow, getElements } from \"browser\"\nimport { renderSource } from \"templates\"\nimport { cache, hash } from \"utilities\"\n\nimport { fetchSourceFactsFromGitHub } from \"./github\"\nimport { fetchSourceFactsFromGitLab } from \"./gitlab\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Source facts\n */\nexport type SourceFacts = string[]\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch source facts\n *\n * @param url - Source repository URL\n *\n * @return Source facts observable\n */\nfunction fetchSourceFacts(\n url: string\n): Observable {\n const [type] = url.match(/(git(?:hub|lab))/i) || []\n switch (type.toLowerCase()) {\n\n /* GitHub repository */\n case \"github\":\n const [, user, repo] = url.match(/^.+github\\.com\\/([^\\/]+)\\/?([^\\/]+)/i)\n return fetchSourceFactsFromGitHub(user, repo)\n\n /* GitLab repository */\n case \"gitlab\":\n const [, base, project] = url.match(/^.+?([^\\/]*gitlab[^\\/]+)\\/(.+)/i)\n return fetchSourceFactsFromGitLab(base, project)\n\n /* Everything else */\n default:\n return NEVER\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch elements containing repository information\n *\n * This function will retrieve the URL from the repository link and try to\n * query data from integrated source code platforms like GitHub or GitLab.\n *\n * @param options - Options\n */\nexport function patchSource(\n { document$ }: PatchOptions\n): void {\n document$\n .pipe(\n map(() => getElementOrThrow(\".md-source[href]\")),\n switchMap(({ href }) => (\n cache(`${hash(href)}`, () => fetchSourceFacts(href))\n )),\n catchError(() => NEVER)\n )\n .subscribe(facts => {\n for (const el of getElements(\".md-source__repository\")) {\n if (!el.hasAttribute(\"data-md-state\")) {\n el.setAttribute(\"data-md-state\", \"done\")\n el.appendChild(renderSource(facts))\n }\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable } from \"rxjs\"\nimport { map } from \"rxjs/operators\"\n\nimport { getElements } from \"browser\"\nimport { renderTable } from \"templates\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch all `table` elements\n *\n * This function will re-render all tables by wrapping them to improve overflow\n * scrolling on smaller screen sizes.\n *\n * @param options - Options\n */\nexport function patchTables(\n { document$ }: MountOptions\n): void {\n const sentinel = document.createElement(\"table\")\n document$\n .pipe(\n map(() => getElements(\"table:not([class])\"))\n )\n .subscribe(els => {\n for (const el of els) {\n el.replaceWith(sentinel)\n sentinel.replaceWith(renderTable(el))\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { h, translate } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * CSS classes\n */\nconst css = {\n container: \"md-clipboard md-icon\"\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a 'copy-to-clipboard' button\n *\n * @param id - Unique identifier\n *\n * @return Element\n */\nexport function renderClipboard(\n id: string\n) {\n const path = require(\"material-design-icons-svg/paths/content-copy.json\")\n return (\n \n \n \n \n \n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./clipboard\"\nexport * from \"./search\"\nexport * from \"./source\"\nexport * from \"./table\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SearchResult } from \"integrations/search\"\nimport { h, truncate } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * CSS classes\n */\nconst css = {\n item: \"md-search-result__item\",\n link: \"md-search-result__link\",\n article: \"md-search-result__article md-search-result__article--document\",\n section: \"md-search-result__article\",\n title: \"md-search-result__title\",\n teaser: \"md-search-result__teaser\"\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a search result\n *\n * @param result - Search result\n *\n * @return Element\n */\nexport function renderSearchResult(\n { article, sections }: SearchResult\n) {\n\n // create page with icon\n const path = require(\"material-design-icons-svg/paths/file-search-outline.json\")\n\n const children = [article, ...sections].map(document => {\n const { location, title, text } = document\n return (\n \n
    \n {!(\"parent\" in document)\n ?
    \n \n \n \n
    \n : null\n }\n

    {title}

    \n {text.length\n ?

    {truncate(text, 320)}

    \n : undefined\n }\n
    \n
    \n )\n })\n return (\n
  • \n {children}\n
  • \n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SourceFacts } from \"patches/source\"\nimport { h } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * CSS classes\n */\nconst css = {\n facts: \"md-source__facts\",\n fact: \"md-source__fact\"\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render source facts\n *\n * @param facts - Source facts\n *\n * @return Element\n */\nexport function renderSource(\n facts: SourceFacts\n) {\n const children = facts.map(fact => (\n
  • {fact}
  • \n ))\n return (\n
      \n {children}\n
    \n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { h } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * CSS classes\n */\nconst css = {\n wrapper: \"md-typeset__scrollwrap\",\n table: \"md-typeset__table\"\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a table inside a wrapper to improve scrolling on mobile\n *\n * @param table - Table element\n *\n * @return Element\n */\nexport function renderTable(\n table: HTMLTableElement\n) {\n return (\n
    \n
    \n {table}\n
    \n
    \n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SearchIndexConfig, SearchIndexOptions } from \"integrations/search\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Feature flags\n */\nexport type Feature =\n | \"tabs\" /* Tabs navigation */\n | \"instant\" /* Instant loading\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * URL configuration\n */\nexport interface UrlConfig {\n base: string /* Base URL */\n worker: {\n search: string /* Search worker URL */\n }\n}\n\n/**\n * Search configuration\n */\nexport interface SearchConfig {\n index?: Promise\n query?: (value: string) => string\n}\n\n/**\n * Configuration\n */\nexport interface Config {\n url: UrlConfig\n features: Feature[] /* Feature flags */\n search?: SearchConfig\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Ensure that the given value is a valid configuration\n *\n * We could use `jsonschema` or any other schema validation framework, but that\n * would just add more bloat to the bundle, so we'll keep it plain and simple.\n *\n * @param config - Configuration\n *\n * @return Test result\n */\nexport function isConfig(config: any): config is Config {\n return typeof config === \"object\"\n && typeof config.url === \"object\"\n && typeof config.url.base === \"string\"\n && typeof config.url.worker === \"object\"\n && typeof config.url.worker.search === \"string\"\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./config\"\nexport * from \"./jsx\"\nexport * from \"./rxjs\"\nexport * from \"./string\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n// tslint:disable no-null-keyword\n\nimport { JSX as JSXInternal } from \"preact\"\nimport { keys } from \"ramda\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * HTML and SVG attributes\n */\ntype Attributes =\n & JSXInternal.HTMLAttributes\n & JSXInternal.SVGAttributes\n & Record\n\n/**\n * Child element\n */\ntype Child =\n | HTMLElement\n | SVGElement\n | Text\n | string\n | number\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Create an element\n *\n * @param tag - HTML or SVG tag\n *\n * @return Element\n */\nfunction createElement(tag: string): HTMLElement | SVGElement {\n switch (tag) {\n\n /* SVG elements */\n case \"svg\":\n case \"path\":\n return document.createElementNS(\"http://www.w3.org/2000/svg\", tag)\n\n /* HTML elements */\n default:\n return document.createElement(tag)\n }\n}\n\n/**\n * Set an attribute\n *\n * @param el - Element\n * @param name - Attribute name\n * @param value - Attribute value\n */\nfunction setAttribute(\n el: HTMLElement | SVGElement, name: string, value: string) {\n switch (name) {\n\n /* Attributes to be ignored */\n case \"xmlns\":\n break\n\n /* Attributes of SVG elements */\n case \"viewBox\":\n case \"d\":\n if (typeof value !== \"boolean\")\n el.setAttributeNS(null, name, value)\n else if (value)\n el.setAttributeNS(null, name, \"\")\n break\n\n /* Attributes of HTML elements */\n default:\n if (typeof value !== \"boolean\")\n el.setAttribute(name, value)\n else if (value)\n el.setAttribute(name, \"\")\n }\n}\n\n/**\n * Append a child node to an element\n *\n * @param el - Element\n * @param child - Child node(s)\n */\nfunction appendChild(\n el: HTMLElement | SVGElement, child: Child | Child[]\n): void {\n\n /* Handle primitive types (including raw HTML) */\n if (typeof child === \"string\" || typeof child === \"number\") {\n el.innerHTML += child.toString()\n\n /* Handle nodes */\n } else if (child instanceof Node) {\n el.appendChild(child)\n\n /* Handle nested children */\n } else if (Array.isArray(child)) {\n for (const node of child)\n appendChild(el, node)\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * JSX factory\n *\n * @param tag - HTML or SVG tag\n * @param attributes - HTML attributes\n * @param children - Child elements\n *\n * @return Element\n */\nexport function h(\n tag: string, attributes: Attributes | null, ...children: Child[]\n): HTMLElement | SVGElement {\n const el = createElement(tag)\n\n /* Set attributes, if any */\n if (attributes)\n for (const attr of keys(attributes))\n setAttribute(el, attr, attributes[attr])\n\n /* Append child nodes */\n for (const child of children)\n appendChild(el, child)\n\n /* Return element */\n return el\n}\n\n/* ----------------------------------------------------------------------------\n * Namespace\n * ------------------------------------------------------------------------- */\n\nexport declare namespace h {\n namespace JSX {\n type Element = HTMLElement | SVGElement\n type IntrinsicElements = JSXInternal.IntrinsicElements\n }\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, defer, of } from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Cache the last value emitted by an observable in session storage\n *\n * If the key is not found in session storage, the factory is executed and the\n * latest value emitted will automatically be persisted to sessions storage.\n * Note that the values emitted by the returned observable must be serializable\n * as `JSON`, or data will be lost.\n *\n * @template T - Value type\n *\n * @param key - Cache key\n * @param factory - Observable factory\n *\n * @return Value observable\n */\nexport function cache(\n key: string, factory: () => Observable\n): Observable {\n return defer(() => {\n const data = sessionStorage.getItem(key)\n if (data) {\n return of(JSON.parse(data) as T)\n\n /* Retrieve value from observable factory and write to storage */\n } else {\n const value$ = factory()\n value$.subscribe(value => {\n try {\n sessionStorage.setItem(key, JSON.stringify(value))\n } catch (err) {\n /* Uncritical, just swallow */\n }\n })\n\n /* Return value */\n return value$\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { getElementOrThrow } from \"browser\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Translation keys\n */\ntype TranslateKey =\n | \"clipboard.copy\" /* Copy to clipboard */\n | \"clipboard.copied\" /* Copied to clipboard */\n | \"search.config.lang\" /* Search language */\n | \"search.config.pipeline\" /* Search pipeline */\n | \"search.config.separator\" /* Search separator */\n | \"search.result.placeholder\" /* Type to start searching */\n | \"search.result.none\" /* No matching documents */\n | \"search.result.one\" /* 1 matching document */\n | \"search.result.other\" /* # matching documents */\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Translations\n */\nlet lang: Record\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Translate the given key\n *\n * @param key - Key to be translated\n * @param value - Value to be replaced\n *\n * @return Translation\n */\nexport function translate(key: TranslateKey, value?: string): string {\n if (typeof lang === \"undefined\") {\n const el = getElementOrThrow(\"#__lang\")\n lang = JSON.parse(el.innerText)\n }\n if (typeof lang[key] === \"undefined\") {\n throw new ReferenceError(`Invalid translation: ${key}`)\n }\n return typeof value !== \"undefined\"\n ? lang[key].replace(\"#\", value)\n : lang[key]\n}\n\n/**\n * Truncate a string after the given number of characters\n *\n * This is not a very reasonable approach, since the summaries kind of suck.\n * It would be better to create something more intelligent, highlighting the\n * search occurrences and making a better summary out of it, but this note was\n * written three years ago, so who knows if we'll ever fix it.\n *\n * @param value - Value to be truncated\n * @param n - Number of characters\n *\n * @return Truncated value\n */\nexport function truncate(value: string, n: number): string {\n let i = n\n if (value.length > i) {\n while (value[i] !== \" \" && --i > 0); // tslint:disable-line\n return `${value.substring(0, i)}...`\n }\n return value\n}\n\n/**\n * Round a number for display with source facts\n *\n * This is a reverse engineered version of GitHub's weird rounding algorithm\n * for stars, forks and all other numbers. While all numbers below `1,000` are\n * returned as-is, bigger numbers are converted to fixed numbers:\n *\n * - `1,049` => `1k`\n * - `1,050` => `1.1k`\n * - `1,949` => `1.9k`\n * - `1,950` => `2k`\n *\n * @param value - Original value\n *\n * @return Rounded value\n */\nexport function round(value: number): string {\n if (value > 999) {\n const digits = +((value - 950) % 1000 > 99)\n return `${((value + 1) / 1000).toFixed(digits)}k`\n } else {\n return value.toString()\n }\n}\n\n/**\n * Simple hash function\n *\n * @see https://bit.ly/2wsVjJ4 - Original source\n *\n * @param value - Value to be hashed\n *\n * @return Hash as 32bit integer\n */\nexport function hash(value: string): number {\n let h = 0\n for (let i = 0, len = value.length; i < len; i++) {\n h = ((h << 5) - h) + value.charCodeAt(i)\n h |= 0 // Convert to 32bit integer\n }\n return h\n }\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./search\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, Subject, from } from \"rxjs\"\nimport { ajax } from \"rxjs/ajax\"\nimport {\n map,\n pluck,\n shareReplay,\n switchMap,\n take,\n tap,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport { WorkerHandler, watchWorker } from \"browser\"\nimport { SearchIndexConfig, SearchIndexOptions } from \"integrations/search\"\n\nimport { translate } from \"utilities\"\nimport {\n SearchMessage,\n SearchMessageType,\n SearchSetupMessage,\n isSearchResultMessage\n} from \"../message\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n base: string /* Base url */\n index?: Promise /* Promise resolving with index */\n location$: Observable /* Location observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup search web worker\n *\n * This function will create a web worker to setup and query the search index\n * which is done using `lunr`. The index can be passed explicitly in order to\n * enable hacks like _localsearch_ via search index embedding as JSON. If no\n * index is given, this function will load it from the default location.\n *\n * @param url - Worker url\n * @param options - Options\n *\n * @return Worker handler\n */\nexport function setupSearchWorker(\n url: string, { base, index, location$ }: SetupOptions\n): WorkerHandler {\n const worker = new Worker(url)\n\n /* Ensure stable base URL */\n const origin$ = location$\n .pipe(\n take(1),\n map(({ href }) => new URL(base, href)\n .toString()\n .replace(/\\/$/, \"\")\n )\n )\n\n /* Create communication channels and resolve relative links */\n const tx$ = new Subject()\n const rx$ = watchWorker(worker, { tx$ })\n .pipe(\n withLatestFrom(origin$),\n map(([message, origin]) => {\n if (isSearchResultMessage(message)) {\n for (const { article, sections } of message.data) {\n article.location = `${origin}/${article.location}`\n for (const section of sections)\n section.location = `${origin}/${section.location}`\n }\n }\n return message\n }),\n shareReplay(1)\n )\n\n /* Fetch index if it wasn't passed explicitly */\n const index$ = typeof index !== \"undefined\"\n ? from(index)\n : origin$\n .pipe(\n switchMap(origin => ajax({\n url: `${origin}/search/search_index.json`,\n responseType: \"json\",\n withCredentials: true\n })\n .pipe(\n pluck(\"response\")\n )\n )\n )\n\n function isConfigDefaultLang(config: SearchIndexConfig) {\n return config.lang.length === 1 && config.lang[0] === \"en\"\n }\n\n function isConfigDefaultSeparator(config: SearchIndexConfig) {\n return config.separator === \"[\\s\\-]+\"\n }\n\n index$\n .pipe(\n map(({ config, ...rest }) => ({\n config: {\n lang: isConfigDefaultLang(config)\n ? [translate(\"search.config.lang\")]\n : config.lang,\n separator: isConfigDefaultSeparator(config)\n ? translate(\"search.config.separator\")\n : config.separator\n },\n pipeline: translate(\"search.config.pipeline\")\n .split(/\\s*,\\s*/)\n .filter(Boolean) as any, // Hack\n ...rest\n }))\n )\n // .subscribe(console.log)\n\n // /* Send index to worker */\n // index$\n .pipe(\n map(data => ({\n type: SearchMessageType.SETUP,\n data\n }))\n )\n .subscribe(tx$.next.bind(tx$))\n\n /* Return worker handler */\n return { tx$, rx$ }\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./message\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SearchIndexOptions, SearchResult } from \"integrations/search\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search message type\n */\nexport const enum SearchMessageType {\n SETUP, /* Search index setup */\n DUMP, /* Search index dump */\n QUERY, /* Search query */\n RESULT /* Search results */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * A message containing the data necessary to setup the search index\n */\nexport interface SearchSetupMessage {\n type: SearchMessageType.SETUP /* Message type */\n data: SearchIndexOptions /* Message data */\n}\n\n/**\n * A message containing the a dump of the search index\n */\nexport interface SearchDumpMessage {\n type: SearchMessageType.DUMP /* Message type */\n data: string /* Message data */\n}\n\n/**\n * A message containing a search query\n */\nexport interface SearchQueryMessage {\n type: SearchMessageType.QUERY /* Message type */\n data: string /* Message data */\n}\n\n/**\n * A message containing results for a search query\n */\nexport interface SearchResultMessage {\n type: SearchMessageType.RESULT /* Message type */\n data: SearchResult[] /* Message data */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * A message exchanged with the search worker\n */\nexport type SearchMessage =\n | SearchSetupMessage\n | SearchDumpMessage\n | SearchQueryMessage\n | SearchResultMessage\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Type guard for search setup messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchSetupMessage(\n message: SearchMessage\n): message is SearchSetupMessage {\n return message.type === SearchMessageType.SETUP\n}\n\n/**\n * Type guard for search dump messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchDumpMessage(\n message: SearchMessage\n): message is SearchDumpMessage {\n return message.type === SearchMessageType.DUMP\n}\n\n/**\n * Type guard for search query messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchQueryMessage(\n message: SearchMessage\n): message is SearchQueryMessage {\n return message.type === SearchMessageType.QUERY\n}\n\n/**\n * Type guard for search result messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchResultMessage(\n message: SearchMessage\n): message is SearchResultMessage {\n return message.type === SearchMessageType.RESULT\n}\n","export default \"/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/material/main.css\";","export default \"/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/material/palette.css\";"],"sourceRoot":""} \ No newline at end of file diff --git a/material/assets/javascripts/vendor.000c9aa0.min.js.map b/material/assets/javascripts/vendor.000c9aa0.min.js.map deleted file mode 100644 index 029bbb8bb..000000000 --- a/material/assets/javascripts/vendor.000c9aa0.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///vendors.ce18ab60.min.js"],"names":["window","push","module","__webpack_exports__","__webpack_require__","d","__extends","__assign","__rest","__values","__read","__spread","extendStatics","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","this","constructor","prototype","create","assign","t","s","i","n","arguments","length","call","apply","e","indexOf","getOwnPropertySymbols","propertyIsEnumerable","o","m","Symbol","iterator","next","value","done","r","ar","error","concat","Subscriber","tslib__WEBPACK_IMPORTED_MODULE_0__","_util_isFunction__WEBPACK_IMPORTED_MODULE_1__","_Observer__WEBPACK_IMPORTED_MODULE_2__","_Subscription__WEBPACK_IMPORTED_MODULE_3__","_internal_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_4__","_config__WEBPACK_IMPORTED_MODULE_5__","_util_hostReportError__WEBPACK_IMPORTED_MODULE_6__","_super","destinationOrNext","complete","_this","syncErrorValue","syncErrorThrown","syncErrorThrowable","isStopped","destination","add","SafeSubscriber","subscriber","_next","err","_error","_complete","unsubscribe","closed","_unsubscribeAndRecycle","_parentOrParents","_parentSubscriber","observerOrNext","context","bind","_context","useDeprecatedSynchronousErrorHandling","__tryOrSetError","__tryOrUnsub","wrappedComplete","fn","parent","Error","_unsubscribe","rxSubscriber","Observer","observable","pipe","config","Observable_Observable","Observable","subscribe","_isScalar","_subscribe","lift","operator","source","sink","nextOrObserver","toSubscriber","_trySubscribe","observer","_a","closed_1","canReportError","console","warn","forEach","promiseCtor","getPromiseCtor","resolve","reject","subscription","operations","_i","toPromise","x","Promise","map","_Subscriber__WEBPACK_IMPORTED_MODULE_1__","project","thisArg","TypeError","MapOperator","MapSubscriber","count","result","isArray","isObject","isFunction","UnsubscriptionError","UnsubscriptionErrorImpl","errors","message","toString","join","name","Subscription_Subscription","Subscription","_subscriptions","empty","remove","index","flattenUnsubscriptionErrors","len","sub","teardown","EMPTY","tmp","subscriptions","subscriptionIndex","splice","reduce","errs","subscribeToResult","_InnerSubscriber__WEBPACK_IMPORTED_MODULE_0__","_subscribeTo__WEBPACK_IMPORTED_MODULE_1__","_Observable__WEBPACK_IMPORTED_MODULE_2__","outerSubscriber","outerValue","outerIndex","OuterSubscriber","notifyNext","innerValue","innerIndex","innerSub","notifyError","notifyComplete","_enable_super_gross_mode_that_will_cause_bad_things","undefined","stack","global","_root","__window","__self","self","WorkerGlobalScope","_curry1","_isPlaceholder_js__WEBPACK_IMPORTED_MODULE_0__","f1","a","noop","_Observable__WEBPACK_IMPORTED_MODULE_0__","scheduler","schedule","emptyScheduled","ObjectUnsubscribedError","ObjectUnsubscribedErrorImpl","hostReportError","setTimeout","switchMap","_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__","_InnerSubscriber__WEBPACK_IMPORTED_MODULE_2__","_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__","_map__WEBPACK_IMPORTED_MODULE_4__","_observable_from__WEBPACK_IMPORTED_MODULE_5__","resultSelector","ii","SwitchMapOperator","SwitchMapSubscriber","_innerSub","innerSubscription","innerSubscriber","SubjectSubscriber","Subject","_Observable__WEBPACK_IMPORTED_MODULE_1__","_Subscriber__WEBPACK_IMPORTED_MODULE_2__","_util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_4__","_SubjectSubscription__WEBPACK_IMPORTED_MODULE_5__","_internal_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_6__","observers","hasError","thrownError","subject","AnonymousSubject","copy","slice","asObservable","isScheduler","getSymbolIterator","InnerSubscriber","_isPlaceholder","Math","random","NotificationKind","of","dispatch","Notification_Notification","Notification","kind","hasValue","observe","do","accept","toObservable","createNext","undefinedValueNotification","createError","createComplete","completeNotification","pipeFromArray","_noop__WEBPACK_IMPORTED_MODULE_0__","fns","input","prev","distinctUntilChanged","compare","keySelector","DistinctUntilChangedOperator","DistinctUntilChangedSubscriber","hasKey","y","key","scheduleArray","_Subscription__WEBPACK_IMPORTED_MODULE_1__","fromArray","_util_subscribeToArray__WEBPACK_IMPORTED_MODULE_1__","_scheduled_scheduleArray__WEBPACK_IMPORTED_MODULE_2__","subscribeTo","symbol_observable","symbol_iterator","isPromise","isArrayLike","scheduled","isInteropObservable","scheduleObservable","then","schedulePromise","isIterable","return","scheduleIterable","from","tslib_es6","Scheduler","SchedulerAction","now","work","delay","state","Date","AsyncScheduler_AsyncScheduler","AsyncScheduler","delegate","actions","active","flush","action","execute","shift","Action_Action","Action","AsyncAction_AsyncAction","AsyncAction","pending","id","recycleAsyncId","requestAsyncId","setInterval","clearInterval","_execute","errored","errorValue","_config__WEBPACK_IMPORTED_MODULE_0__","_util_hostReportError__WEBPACK_IMPORTED_MODULE_1__","_util_isScheduler__WEBPACK_IMPORTED_MODULE_0__","_fromArray__WEBPACK_IMPORTED_MODULE_1__","args","pop","observeOn","ObserveOnSubscriber","_Notification__WEBPACK_IMPORTED_MODULE_2__","ObserveOnOperator","arg","notification","scheduleMessage","ObserveOnMessage","SubjectSubscription","subscriberIndex","subscribeToArray","array","async","_AsyncAction__WEBPACK_IMPORTED_MODULE_0__","obj","obs","promise","iterable","item","MergeMapOperator","concurrent","Number","POSITIVE_INFINITY","mergeMap_MergeMapSubscriber","MergeMapSubscriber","hasCompleted","buffer","_tryNext","ish","identity","mergeAll","mergeMap","tap","_util_noop__WEBPACK_IMPORTED_MODULE_2__","_util_isFunction__WEBPACK_IMPORTED_MODULE_3__","DoOperator","TapSubscriber","_tapNext","_tapError","_tapComplete","AnimationFrameAction_AnimationFrameAction","AnimationFrameAction","requestAnimationFrame","cancelAnimationFrame","AnimationFrameScheduler_AnimationFrameScheduler","AnimationFrameScheduler","animationFrame","exports","factory","modules","installedModules","moduleId","l","c","getter","defineProperty","enumerable","get","toStringTag","mode","__esModule","ns","object","property","_typeof","_createClass","defineProperties","target","props","descriptor","configurable","writable","Constructor","protoProps","staticProps","_clipboardAction2","_interopRequireDefault","_tinyEmitter2","_goodListener2","default","Clipboard","_Emitter","trigger","options","instance","_classCallCheck","ReferenceError","_possibleConstructorReturn","getPrototypeOf","resolveOptions","listenClick","subClass","superClass","_inherits","defaultAction","defaultTarget","text","defaultText","container","document","body","_this2","listener","onClick","delegateTarget","currentTarget","clipboardAction","emitter","getAttributeValue","selector","querySelector","destroy","support","queryCommandSupported","suffix","element","attribute","hasAttribute","getAttribute","_select","_select2","ClipboardAction","initSelection","selectedText","selectFake","selectTarget","isRTL","documentElement","removeFake","fakeHandlerCallback","fakeHandler","addEventListener","fakeElem","createElement","style","fontSize","border","padding","margin","position","yPosition","pageYOffset","scrollTop","top","setAttribute","appendChild","copyText","removeEventListener","removeChild","succeeded","execCommand","handleResult","emit","clearSelection","focus","getSelection","removeAllRanges","set","_action","nodeType","_target","nodeName","isReadOnly","select","setSelectionRange","removeAttribute","selection","range","createRange","selectNodeContents","addRange","E","on","callback","ctx","once","off","_","data","evtArr","evts","liveEvents","is","type","string","node","listenNode","nodeList","listenNodeList","listenSelector","HTMLElement","String","closest","_delegate","useCapture","listenerFn","elements","querySelectorAll","DOCUMENT_NODE_TYPE","Element","matches","proto","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","parentNode","combineLatest","_util_isScheduler__WEBPACK_IMPORTED_MODULE_1__","_util_isArray__WEBPACK_IMPORTED_MODULE_2__","_OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__","_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__","_fromArray__WEBPACK_IMPORTED_MODULE_5__","NONE","observables","CombineLatestOperator","CombineLatestSubscriber","values","toRespond","unused","oldVal","_tryResultSelector","withLatestFrom","_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__","WithLatestFromOperator","WithLatestFromSubscriber","found","_tryProject","scan","accumulator","seed","hasSeed","ScanOperator","ScanSubscriber","_seed","finalize","_Subscription__WEBPACK_IMPORTED_MODULE_2__","FinallyOperator","FinallySubscriber","defer","_from__WEBPACK_IMPORTED_MODULE_1__","_empty__WEBPACK_IMPORTED_MODULE_2__","observableFactory","_has","prop","_isArguments_toString","internal_isArguments","hasEnumBug","nonEnumerableProps","hasArgsEnumBug","contains","list","idx","keys_keys","keys","nIdx","ks","checkArgsLength","distinctUntilKeyChanged","_distinctUntilChanged__WEBPACK_IMPORTED_MODULE_0__","g","Function","JSON","parse","fromEvent","_util_isArray__WEBPACK_IMPORTED_MODULE_1__","_util_isFunction__WEBPACK_IMPORTED_MODULE_2__","_operators_map__WEBPACK_IMPORTED_MODULE_3__","eventName","setupSubscription","sourceObj","handler","isEventTarget","source_1","isJQueryStyleEventEmitter","source_2","addListener","removeListener","isNodeStyleEventEmitter","source_3","merge","_operators_mergeAll__WEBPACK_IMPORTED_MODULE_2__","_fromArray__WEBPACK_IMPORTED_MODULE_3__","last","bufferCount","bufferSize","startBufferEvery","BufferCountOperator","subscriberClass","BufferSkipCountSubscriber","BufferCountSubscriber","buffers","_curry2","f2","_b","_isArray","val","_isTransformer","_dispatchable","methodNames","xf","transducer","_xfBase","_xfindLast_XFindLast","XFindLast","f","findLast","QueueAction_QueueAction","QueueAction","queue","QueueScheduler","ReplaySubject_ReplaySubject","ReplaySubject","windowTime","_events","_infiniteTimeWindow","_bufferSize","_windowTime","nextInfiniteTimeWindow","nextTimeWindow","ReplayEvent","_getNow","_trimBufferThenGetEvents","eventsCount","spliceCount","time","max","shareReplay","configOrBufferSize","refCount","_c","useRefCount","isComplete","shareReplayOperator","concatAll","startWith","scheduler_async","delay_delay","delayFor","isNaN","abs","DelayOperator","delay_DelaySubscriber","DelaySubscriber","delay_1","_schedule","scheduleNotification","DelayMessage","reverse_reverse","split","reverse","BehaviorSubject","_Subject__WEBPACK_IMPORTED_MODULE_1__","_util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_2__","_value","getValue","filter","predicate","FilterOperator","FilterSubscriber","skip","SkipOperator","total","SkipSubscriber","pluck","_map__WEBPACK_IMPORTED_MODULE_0__","properties","currentProp","plucker","catchError","CatchOperator","caught","CatchSubscriber","err2","NEVER","_util_noop__WEBPACK_IMPORTED_MODULE_1__","mapTo","MapToOperator","MapToSubscriber","fromEventPattern","addHandler","removeHandler","retValue","throttle","defaultThrottleConfig","leading","trailing","durationSelector","ThrottleOperator","ThrottleSubscriber","_leading","_trailing","_hasValue","_sendValue","_throttled","send","duration","tryDurationSelector","throttlingDone","switchMapTo","_switchMap__WEBPACK_IMPORTED_MODULE_0__","innerObservable","iif","_defer__WEBPACK_IMPORTED_MODULE_0__","_empty__WEBPACK_IMPORTED_MODULE_1__","condition","trueResult","falseResult","debounceTime","_scheduler_async__WEBPACK_IMPORTED_MODULE_2__","dueTime","DebounceTimeOperator","DebounceTimeSubscriber","debouncedSubscription","lastValue","clearDebounce","dispatchNext","debouncedNext","sample","notifier","SampleOperator","sampleSubscriber","SampleSubscriber","emitValue","_internal_curry1_js__WEBPACK_IMPORTED_MODULE_0__","_keys_js__WEBPACK_IMPORTED_MODULE_1__","vals","RefCountOperator","connectable","_refCount","refCounter","refCount_RefCountSubscriber","connection","connect","RefCountSubscriber","sharedConnection","_connection","ConnectableObservable_ConnectableObservable","ConnectableObservable","subjectFactory","_isComplete","getSubject","_subject","ConnectableObservable_ConnectableSubscriber","connectableObservableDescriptor","connectableProto","ConnectableSubscriber","MulticastOperator","shareSubjectFactory","share","subjectOrSubjectFactory","ArgumentOutOfRangeError","ArgumentOutOfRangeErrorImpl","take","take_TakeOperator","TakeOperator","take_TakeSubscriber","TakeSubscriber","_identity","root","ajaxGet","url","headers","AjaxObservable_AjaxObservable","method","ajaxPost","ajaxDelete","ajaxPut","ajaxPatch","mapResponse","response","ajaxGetJSON","responseType","AjaxObservable","urlOrRequest","request","createXHR","crossDomain","XMLHttpRequest","XDomainRequest","getCORSRequest","progId","progIds","ActiveXObject","getXMLHttpRequest","withCredentials","timeout","AjaxObservable_AjaxSubscriber","post","delete","put","patch","getJSON","AjaxSubscriber","getHeader","FormData","serializeBody","xhr","AjaxResponse","user","password","setupEvents","open","setHeaders","contentType","splitIndex","substring","encodeURIComponent","stringify","setRequestHeader","headerName","toLowerCase","progressSubscriber","xhrTimeout","AjaxTimeoutError","ontimeout","upload","xhrProgress_1","xhrError_1","onprogress","AjaxError","onerror","xhrReadyStateChange","xhrLoad","readyState","status_1","status","responseText","onreadystatechange","onload","abort","originalEvent","parseXhrResponse","AjaxErrorImpl","parseJson","responseXML","ajax"],"mappings":"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","file":"assets/javascripts/vendor.000c9aa0.min.js","sourceRoot":""} \ No newline at end of file diff --git a/material/assets/javascripts/vendor.000c9aa0.min.js b/material/assets/javascripts/vendor.31a2e7b9.min.js similarity index 56% rename from material/assets/javascripts/vendor.000c9aa0.min.js rename to material/assets/javascripts/vendor.31a2e7b9.min.js index c6f2bea51..4233c7700 100644 --- a/material/assets/javascripts/vendor.000c9aa0.min.js +++ b/material/assets/javascripts/vendor.31a2e7b9.min.js @@ -13,12 +13,12 @@ MERCHANTABLITY OR NON-INFRINGEMENT. See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ -var r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)};function i(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}var o=function(){return(o=Object.assign||function(t){for(var e,n=1,r=arguments.length;n=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}}}function c(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var r,i,o=n.call(t),u=[];try{for(;(void 0===e||e-- >0)&&!(r=o.next()).done;)u.push(r.value)}catch(t){i={error:t}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return u}function a(){for(var t=[],e=0;e0?this._next(e.shift()):0===this.active&&this.hasCompleted&&this.destination.complete()},e}(o.a);function l(t){return t}function h(t){return void 0===t&&(t=Number.POSITIVE_INFINITY),function t(e,n,r){return void 0===r&&(r=Number.POSITIVE_INFINITY),"function"==typeof n?function(i){return i.pipe(t((function(t,r){return Object(c.a)(e(t,r)).pipe(Object(s.a)((function(e,i){return n(t,e,r,i)})))}),r))}:("number"==typeof n&&(r=n),function(t){return t.lift(new a(e,r))})}(l,t)}n.d(e,"a",(function(){return h}))},function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var r=n(0),i=n(4),o=n(15),u=n(16);function s(t,e,n){return function(r){return r.lift(new c(t,e,n))}}var c=function(){function t(t,e,n){this.nextOrObserver=t,this.error=e,this.complete=n}return t.prototype.call=function(t,e){return e.subscribe(new a(t,this.nextOrObserver,this.error,this.complete))},t}(),a=function(t){function e(e,n,r,i){var s=t.call(this,e)||this;return s._tapNext=o.a,s._tapError=o.a,s._tapComplete=o.a,s._tapError=r||o.a,s._tapComplete=i||o.a,Object(u.a)(n)?(s._context=s,s._tapNext=n):n&&(s._context=n,s._tapNext=n.next||o.a,s._tapError=n.error||o.a,s._tapComplete=n.complete||o.a),s}return r.b(e,t),e.prototype._next=function(t){try{this._tapNext.call(this._context,t)}catch(t){return void this.destination.error(t)}this.destination.next(t)},e.prototype._error=function(t){try{this._tapError.call(this._context,t)}catch(t){return void this.destination.error(t)}this.destination.error(t)},e.prototype._complete=function(){try{this._tapComplete.call(this._context)}catch(t){return void this.destination.error(t)}return this.destination.complete()},e}(i.a)},function(t,e,n){"use strict";var r=n(0),i=function(t){function e(e,n){var r=t.call(this,e,n)||this;return r.scheduler=e,r.work=n,r}return r.b(e,t),e.prototype.requestAsyncId=function(e,n,r){return void 0===r&&(r=0),null!==r&&r>0?t.prototype.requestAsyncId.call(this,e,n,r):(e.actions.push(this),e.scheduled||(e.scheduled=requestAnimationFrame((function(){return e.flush(null)}))))},e.prototype.recycleAsyncId=function(e,n,r){if(void 0===r&&(r=0),null!==r&&r>0||null===r&&this.delay>0)return t.prototype.recycleAsyncId.call(this,e,n,r);0===e.actions.length&&(cancelAnimationFrame(n),e.scheduled=void 0)},e}(n(43).a),o=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r.b(e,t),e.prototype.flush=function(t){this.active=!0,this.scheduled=void 0;var e,n=this.actions,r=-1,i=n.length;t=t||n.shift();do{if(e=t.execute(t.state,t.delay))break}while(++r=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}}}function c(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var r,i,o=n.call(t),u=[];try{for(;(void 0===e||e-- >0)&&!(r=o.next()).done;)u.push(r.value)}catch(t){i={error:t}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return u}function a(){for(var t=[],e=0;e0?this._next(e.shift()):0===this.active&&this.hasCompleted&&this.destination.complete()},e}(o.a);function l(t){return t}function h(t){return void 0===t&&(t=Number.POSITIVE_INFINITY),function t(e,n,r){return void 0===r&&(r=Number.POSITIVE_INFINITY),"function"==typeof n?function(i){return i.pipe(t((function(t,r){return Object(c.a)(e(t,r)).pipe(Object(s.a)((function(e,i){return n(t,e,r,i)})))}),r))}:("number"==typeof n&&(r=n),function(t){return t.lift(new a(e,r))})}(l,t)}n.d(e,"a",(function(){return h}))},function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var r=n(0),i=n(3),o=n(15),u=n(16);function s(t,e,n){return function(r){return r.lift(new c(t,e,n))}}var c=function(){function t(t,e,n){this.nextOrObserver=t,this.error=e,this.complete=n}return t.prototype.call=function(t,e){return e.subscribe(new a(t,this.nextOrObserver,this.error,this.complete))},t}(),a=function(t){function e(e,n,r,i){var s=t.call(this,e)||this;return s._tapNext=o.a,s._tapError=o.a,s._tapComplete=o.a,s._tapError=r||o.a,s._tapComplete=i||o.a,Object(u.a)(n)?(s._context=s,s._tapNext=n):n&&(s._context=n,s._tapNext=n.next||o.a,s._tapError=n.error||o.a,s._tapComplete=n.complete||o.a),s}return r.b(e,t),e.prototype._next=function(t){try{this._tapNext.call(this._context,t)}catch(t){return void this.destination.error(t)}this.destination.next(t)},e.prototype._error=function(t){try{this._tapError.call(this._context,t)}catch(t){return void this.destination.error(t)}this.destination.error(t)},e.prototype._complete=function(){try{this._tapComplete.call(this._context)}catch(t){return void this.destination.error(t)}return this.destination.complete()},e}(i.a)},function(t,e,n){"use strict";var r=n(0),i=function(t){function e(e,n){var r=t.call(this,e,n)||this;return r.scheduler=e,r.work=n,r}return r.b(e,t),e.prototype.requestAsyncId=function(e,n,r){return void 0===r&&(r=0),null!==r&&r>0?t.prototype.requestAsyncId.call(this,e,n,r):(e.actions.push(this),e.scheduled||(e.scheduled=requestAnimationFrame((function(){return e.flush(null)}))))},e.prototype.recycleAsyncId=function(e,n,r){if(void 0===r&&(r=0),null!==r&&r>0||null===r&&this.delay>0)return t.prototype.recycleAsyncId.call(this,e,n,r);0===e.actions.length&&(cancelAnimationFrame(n),e.scheduled=void 0)},e}(n(43).a),o=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r.b(e,t),e.prototype.flush=function(t){this.active=!0,this.scheduled=void 0;var e,n=this.actions,r=-1,i=n.length;t=t||n.shift();do{if(e=t.execute(t.state,t.delay))break}while(++r0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText,this.container="object"===r(t.container)?t.container:document.body}},{key:"listenClick",value:function(t){var e=this;this.listener=(0,s.default)(t,"click",(function(t){return e.onClick(t)}))}},{key:"onClick",value:function(t){var e=t.delegateTarget||t.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new o.default({action:this.action(e),target:this.target(e),text:this.text(e),container:this.container,trigger:e,emitter:this})}},{key:"defaultAction",value:function(t){return f("action",t)}},{key:"defaultTarget",value:function(t){var e=f("target",t);if(e)return document.querySelector(e)}},{key:"defaultText",value:function(t){return f("text",t)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],e="string"==typeof t?[t]:t,n=!!document.queryCommandSupported;return e.forEach((function(t){n=n&&!!document.queryCommandSupported(t)})),n}}]),e}(u.default);function f(t,e){var n="data-clipboard-"+t;if(e.hasAttribute(n))return e.getAttribute(n)}t.exports=a},function(t,e,n){"use strict";var r,i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o=function(){function t(t,e){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};this.action=t.action,this.container=t.container,this.emitter=t.emitter,this.target=t.target,this.text=t.text,this.trigger=t.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var t=this,e="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return t.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[e?"right":"left"]="-9999px";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=(0,s.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=(0,s.default)(this.target),this.copyText()}},{key:"copyText",value:function(){var t=void 0;try{t=document.execCommand(this.action)}catch(e){t=!1}this.handleResult(t)}},{key:"handleResult",value:function(t){this.emitter.emit(t?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=t,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(t){if(void 0!==t){if(!t||"object"!==(void 0===t?"undefined":i(t))||1!==t.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&t.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(t.hasAttribute("readonly")||t.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=t}},get:function(){return this._target}}]),t}();t.exports=c},function(t,e){t.exports=function(t){var e;if("SELECT"===t.nodeName)t.focus(),e=t.value;else if("INPUT"===t.nodeName||"TEXTAREA"===t.nodeName){var n=t.hasAttribute("readonly");n||t.setAttribute("readonly",""),t.select(),t.setSelectionRange(0,t.value.length),n||t.removeAttribute("readonly"),e=t.value}else{t.hasAttribute("contenteditable")&&t.focus();var r=window.getSelection(),i=document.createRange();i.selectNodeContents(t),r.removeAllRanges(),r.addRange(i),e=r.toString()}return e}},function(t,e){function n(){}n.prototype={on:function(t,e,n){var r=this.e||(this.e={});return(r[t]||(r[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){var r=this;function i(){r.off(t,i),e.apply(n,arguments)}return i._=e,this.on(t,i,n)},emit:function(t){for(var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),r=0,i=n.length;r0){var u=o.indexOf(n);-1!==u&&o.splice(u,1)}},e.prototype.notifyComplete=function(){},e.prototype._next=function(t){if(0===this.toRespond.length){var e=[t].concat(this.values);this.project?this._tryProject(e):this.destination.next(e)}},e.prototype._tryProject=function(t){var e;try{e=this.project.apply(this,t)}catch(t){return void this.destination.error(t)}this.destination.next(e)},e}(i.a)},function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var r=n(0),i=n(4);function o(t,e){var n=!1;return arguments.length>=2&&(n=!0),function(r){return r.lift(new u(t,e,n))}}var u=function(){function t(t,e,n){void 0===n&&(n=!1),this.accumulator=t,this.seed=e,this.hasSeed=n}return t.prototype.call=function(t,e){return e.subscribe(new s(t,this.accumulator,this.seed,this.hasSeed))},t}(),s=function(t){function e(e,n,r,i){var o=t.call(this,e)||this;return o.accumulator=n,o._seed=r,o.hasSeed=i,o.index=0,o}return r.b(e,t),Object.defineProperty(e.prototype,"seed",{get:function(){return this._seed},set:function(t){this.hasSeed=!0,this._seed=t},enumerable:!0,configurable:!0}),e.prototype._next=function(t){if(this.hasSeed)return this._tryNext(t);this.seed=t,this.destination.next(t)},e.prototype._tryNext=function(t){var e,n=this.index++;try{e=this.accumulator(this.seed,t,n)}catch(t){this.destination.error(t)}this.seed=e,this.destination.next(e)},e}(i.a)},function(t,e,n){"use strict";n.d(e,"a",(function(){return u}));var r=n(0),i=n(4),o=n(9);function u(t){return function(e){return e.lift(new s(t))}}var s=function(){function t(t){this.callback=t}return t.prototype.call=function(t,e){return e.subscribe(new c(t,this.callback))},t}(),c=function(t){function e(e,n){var r=t.call(this,e)||this;return r.add(new o.a(n)),r}return r.b(e,t),e}(i.a)},,,,,,,,,,,,,,,,,,,,function(t,e,n){"use strict";n.d(e,"a",(function(){return u}));var r=n(6),i=n(40),o=n(18);function u(t){return new r.a((function(e){var n;try{n=t()}catch(t){return void e.error(t)}return(n?Object(i.a)(n):Object(o.b)()).subscribe(e)}))}},function(t,e,n){"use strict";var r=n(14);function i(t,e){return Object.prototype.hasOwnProperty.call(e,t)}var o=Object.prototype.toString,u=function(){return"[object Arguments]"===o.call(arguments)?function(t){return"[object Arguments]"===o.call(t)}:function(t){return i("callee",t)}}(),s=!{toString:null}.propertyIsEnumerable("toString"),c=["constructor","valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],a=function(){return arguments.propertyIsEnumerable("length")}(),f=function(t,e){for(var n=0;n=0;)i(e=c[n],t)&&!f(r,e)&&(r[r.length]=e),n-=1;return r})):Object(r.a)((function(t){return Object(t)!==t?[]:Object.keys(t)}));e.a=l},function(t,e,n){"use strict";n.d(e,"a",(function(){return i}));var r=n(36);function i(t,e){return Object(r.a)((function(n,r){return e?e(n[t],r[t]):n[t]===r[t]}))}},function(t,e){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t){t.exports=JSON.parse('"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"')},function(t){t.exports=JSON.parse('"M14,2H6A2,2 0 0,0 4,4V20A2,2 0 0,0 6,22H13C12.59,21.75 12.2,21.44 11.86,21.1C11.53,20.77 11.25,20.4 11,20H6V4H13V9H18V10.18C18.71,10.34 19.39,10.61 20,11V8L14,2M20.31,18.9C21.64,16.79 21,14 18.91,12.68C16.8,11.35 14,12 12.69,14.08C11.35,16.19 12,18.97 14.09,20.3C15.55,21.23 17.41,21.23 18.88,20.32L22,23.39L23.39,22L20.31,18.9M16.5,19A2.5,2.5 0 0,1 14,16.5A2.5,2.5 0 0,1 16.5,14A2.5,2.5 0 0,1 19,16.5A2.5,2.5 0 0,1 16.5,19Z"')},,function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var r=n(6),i=n(26),o=n(16),u=n(8);function s(t,e,n,c){return Object(o.a)(n)&&(c=n,n=void 0),c?s(t,e,n).pipe(Object(u.a)((function(t){return Object(i.a)(t)?c.apply(void 0,t):c(t)}))):new r.a((function(r){!function t(e,n,r,i,o){var u;if(function(t){return t&&"function"==typeof t.addEventListener&&"function"==typeof t.removeEventListener}(e)){var s=e;e.addEventListener(n,r,o),u=function(){return s.removeEventListener(n,r,o)}}else if(function(t){return t&&"function"==typeof t.on&&"function"==typeof t.off}(e)){var c=e;e.on(n,r),u=function(){return c.off(n,r)}}else if(function(t){return t&&"function"==typeof t.addListener&&"function"==typeof t.removeListener}(e)){var a=e;e.addListener(n,r),u=function(){return a.removeListener(n,r)}}else{if(!e||!e.length)throw new TypeError("Invalid event target");for(var f=0,l=e.length;f1?r.next(Array.prototype.slice.call(arguments)):r.next(t)}),r,n)}))}},function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var r=n(6),i=n(27),o=n(57),u=n(38);function s(){for(var t=[],e=0;e1&&"number"==typeof t[t.length-1]&&(n=t.pop())):"number"==typeof c&&(n=t.pop()),null===s&&1===t.length&&t[0]instanceof r.a?t[0]:Object(o.a)(n)(Object(u.a)(t,s))}},function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var r=n(0),i=n(4);function o(t,e){return void 0===e&&(e=null),function(n){return n.lift(new u(t,e))}}var u=function(){function t(t,e){this.bufferSize=t,this.startBufferEvery=e,this.subscriberClass=e&&t!==e?c:s}return t.prototype.call=function(t,e){return e.subscribe(new this.subscriberClass(t,this.bufferSize,this.startBufferEvery))},t}(),s=function(t){function e(e,n){var r=t.call(this,e)||this;return r.bufferSize=n,r.buffer=[],r}return r.b(e,t),e.prototype._next=function(t){var e=this.buffer;e.push(t),e.length==this.bufferSize&&(this.destination.next(e),this.buffer=[])},e.prototype._complete=function(){var e=this.buffer;e.length>0&&this.destination.next(e),t.prototype._complete.call(this)},e}(i.a),c=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.bufferSize=n,i.startBufferEvery=r,i.buffers=[],i.count=0,i}return r.b(e,t),e.prototype._next=function(t){var e=this.bufferSize,n=this.startBufferEvery,r=this.buffers,i=this.count;this.count++,i%n==0&&r.push([]);for(var o=r.length;o--;){var u=r[o];u.push(t),u.length===e&&(r.splice(o,1),this.destination.next(u))}},e.prototype._complete=function(){for(var e=this.buffers,n=this.destination;e.length>0;){var r=e.shift();r.length>0&&n.next(r)}t.prototype._complete.call(this)},e}(i.a)},function(t,e,n){"use strict";var r=n(14),i=n(32);function o(t){return function e(n,o){switch(arguments.length){case 0:return e;case 1:return Object(i.a)(n)?e:Object(r.a)((function(e){return t(n,e)}));default:return Object(i.a)(n)&&Object(i.a)(o)?e:Object(i.a)(n)?Object(r.a)((function(e){return t(e,o)})):Object(i.a)(o)?Object(r.a)((function(e){return t(n,e)})):t(n,o)}}}var u=Array.isArray||function(t){return null!=t&&t.length>=0&&"[object Array]"===Object.prototype.toString.call(t)};function s(t){return null!=t&&"function"==typeof t["@@transducer/step"]}function c(t,e,n){return function(){if(0===arguments.length)return n();var r=Array.prototype.slice.call(arguments,0),i=r.pop();if(!u(i)){for(var o=0;o=0;){if(t(e[n]))return e[n];n-=1}})));e.a=l},function(t,e,n){"use strict";var r=n(0),i=n(25),o=function(t){function e(e,n){var r=t.call(this,e,n)||this;return r.scheduler=e,r.work=n,r}return r.b(e,t),e.prototype.schedule=function(e,n){return void 0===n&&(n=0),n>0?t.prototype.schedule.call(this,e,n):(this.delay=n,this.state=e,this.scheduler.flush(this),this)},e.prototype.execute=function(e,n){return n>0||this.closed?t.prototype.execute.call(this,e,n):this._execute(e,n)},e.prototype.requestAsyncId=function(e,n,r){return void 0===r&&(r=0),null!==r&&r>0||null===r&&this.delay>0?t.prototype.requestAsyncId.call(this,e,n,r):e.flush(this)},e}(n(43).a),u=new(function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r.b(e,t),e}(n(42).a))(o),s=n(9),c=n(46),a=n(19),f=n(51),l=function(t){function e(e,n,r){void 0===e&&(e=Number.POSITIVE_INFINITY),void 0===n&&(n=Number.POSITIVE_INFINITY);var i=t.call(this)||this;return i.scheduler=r,i._events=[],i._infiniteTimeWindow=!1,i._bufferSize=e<1?1:e,i._windowTime=n<1?1:n,n===Number.POSITIVE_INFINITY?(i._infiniteTimeWindow=!0,i.next=i.nextInfiniteTimeWindow):i.next=i.nextTimeWindow,i}return r.b(e,t),e.prototype.nextInfiniteTimeWindow=function(e){var n=this._events;n.push(e),n.length>this._bufferSize&&n.shift(),t.prototype.next.call(this,e)},e.prototype.nextTimeWindow=function(e){this._events.push(new h(this._getNow(),e)),this._trimBufferThenGetEvents(),t.prototype.next.call(this,e)},e.prototype._subscribe=function(t){var e,n=this._infiniteTimeWindow,r=n?this._events:this._trimBufferThenGetEvents(),i=this.scheduler,o=r.length;if(this.closed)throw new a.a;if(this.isStopped||this.hasError?e=s.a.EMPTY:(this.observers.push(t),e=new f.a(this,t)),i&&t.add(t=new c.a(t,i)),n)for(var u=0;ue&&(o=Math.max(o,i-e)),o>0&&r.splice(0,o),r},e}(i.a),h=function(){return function(t,e){this.time=t,this.value=e}}();function p(t,e,n){var r;return r=t&&"object"==typeof t?t:{bufferSize:t,windowTime:e,refCount:!1,scheduler:n},function(t){return t.lift(function(t){var e,n,r=t.bufferSize,i=void 0===r?Number.POSITIVE_INFINITY:r,o=t.windowTime,u=void 0===o?Number.POSITIVE_INFINITY:o,s=t.refCount,c=t.scheduler,a=0,f=!1,h=!1;return function(t){a++,e&&!f||(f=!1,e=new l(i,u,c),n=t.subscribe({next:function(t){e.next(t)},error:function(t){f=!0,e.error(t)},complete:function(){h=!0,e.complete()}}));var r=e.subscribe(this);this.add((function(){a--,r.unsubscribe(),n&&!h&&s&&0===a&&(n.unsubscribe(),n=void 0,e=void 0)}))}}(r))}}n.d(e,"a",(function(){return p}))},function(t,e,n){"use strict";var r=n(45),i=n(57);function o(){for(var t=[],e=0;e0&&n[0].time-r.now()<=0;)n.shift().notification.observe(i);if(n.length>0){var o=Math.max(0,n[0].time-r.now());this.schedule(t,o)}else this.unsubscribe(),e.active=!1},e.prototype._schedule=function(t){this.active=!0,this.destination.add(t.schedule(e.dispatch,this.delay,{source:this,destination:this.destination,scheduler:t}))},e.prototype.scheduleNotification=function(t){if(!0!==this.errored){var e=this.scheduler,n=new f(e.now()+this.delay,t);this.queue.push(n),!1===this.active&&this._schedule(e)}},e.prototype._next=function(t){this.scheduleNotification(u.a.createNext(t))},e.prototype._error=function(t){this.errored=!0,this.queue=[],this.destination.error(t),this.unsubscribe()},e.prototype._complete=function(){this.scheduleNotification(u.a.createComplete()),this.unsubscribe()},e}(o.a),f=function(){return function(t,e){this.time=t,this.notification=e}}()},function(t,e,n){"use strict";var r=n(14);var i=Object(r.a)((function(t){return e=t,"[object String]"===Object.prototype.toString.call(e)?t.split("").reverse().join(""):Array.prototype.slice.call(t,0).reverse();var e}));e.a=i},function(t,e,n){"use strict";n.d(e,"a",(function(){return u}));var r=n(0),i=n(25),o=n(19),u=function(t){function e(e){var n=t.call(this)||this;return n._value=e,n}return r.b(e,t),Object.defineProperty(e.prototype,"value",{get:function(){return this.getValue()},enumerable:!0,configurable:!0}),e.prototype._subscribe=function(e){var n=t.prototype._subscribe.call(this,e);return n&&!n.closed&&e.next(this._value),n},e.prototype.getValue=function(){if(this.hasError)throw this.thrownError;if(this.closed)throw new o.a;return this._value},e.prototype.next=function(e){t.prototype.next.call(this,this._value=e)},e}(i.a)},function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var r=n(0),i=n(4);function o(t,e){return function(n){return n.lift(new u(t,e))}}var u=function(){function t(t,e){this.predicate=t,this.thisArg=e}return t.prototype.call=function(t,e){return e.subscribe(new s(t,this.predicate,this.thisArg))},t}(),s=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.predicate=n,i.thisArg=r,i.count=0,i}return r.b(e,t),e.prototype._next=function(t){var e;try{e=this.predicate.call(this.thisArg,t,this.count++)}catch(t){return void this.destination.error(t)}e&&this.destination.next(t)},e}(i.a)},function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var r=n(0),i=n(4);function o(t){return function(e){return e.lift(new u(t))}}var u=function(){function t(t){this.total=t}return t.prototype.call=function(t,e){return e.subscribe(new s(t,this.total))},t}(),s=function(t){function e(e,n){var r=t.call(this,e)||this;return r.total=n,r.count=0,r}return r.b(e,t),e.prototype._next=function(t){++this.count>this.total&&this.destination.next(t)},e}(i.a)},function(t,e,n){"use strict";n.d(e,"a",(function(){return i}));var r=n(8);function i(){for(var t=[],e=0;e1)this.connection=null;else{var n=this.connection,r=t._connection;this.connection=null,!r||n&&r!==n||r.unsubscribe()}}else this.connection=null},e}(u.a),l=function(t){function e(e,n){var r=t.call(this)||this;return r.source=e,r.subjectFactory=n,r._refCount=0,r._isComplete=!1,r}return r.b(e,t),e.prototype._subscribe=function(t){return this.getSubject().subscribe(t)},e.prototype.getSubject=function(){var t=this._subject;return t&&!t.isStopped||(this._subject=this.subjectFactory()),this._subject},e.prototype.connect=function(){var t=this._connection;return t||(this._isComplete=!1,(t=this._connection=new s.a).add(this.source.subscribe(new p(this.getSubject(),this))),t.closed&&(this._connection=null,t=s.a.EMPTY)),t},e.prototype.refCount=function(){return c()(this)},e}(o.a),h=function(){var t=l.prototype;return{operator:{value:null},_refCount:{value:0,writable:!0},_subject:{value:null,writable:!0},_connection:{value:null,writable:!0},_subscribe:{value:t._subscribe},_isComplete:{value:t._isComplete,writable:!0},getSubject:{value:t.getSubject},connect:{value:t.connect},refCount:{value:t.refCount}}}(),p=function(t){function e(e,n){var r=t.call(this,e)||this;return r.connectable=n,r}return r.b(e,t),e.prototype._error=function(e){this._unsubscribe(),t.prototype._error.call(this,e)},e.prototype._complete=function(){this.connectable._isComplete=!0,this._unsubscribe(),t.prototype._complete.call(this)},e.prototype._unsubscribe=function(){var t=this.connectable;if(t){this.connectable=null;var e=t._connection;t._refCount=0,t._subject=null,t._connection=null,e&&e.unsubscribe()}},e}(i.b);u.a;var d=function(){function t(t,e){this.subjectFactory=t,this.selector=e}return t.prototype.call=function(t,e){var n=this.selector,r=this.subjectFactory(),i=n(r).subscribe(t);return i.add(e.subscribe(r)),i},t}();function b(){return new i.a}function y(){return function(t){return c()((e=b,function(t){var r;if(r="function"==typeof e?e:function(){return e},"function"==typeof n)return t.lift(new d(r,n));var i=Object.create(t,h);return i.source=t,i.subjectFactory=r,i})(t));var e,n}}n.d(e,"a",(function(){return y}))},function(t,e,n){"use strict";var r=n(0),i=n(4),o=function(){function t(){return Error.call(this),this.message="argument out of range",this.name="ArgumentOutOfRangeError",this}return t.prototype=Object.create(Error.prototype),t}(),u=n(18);function s(t){return function(e){return 0===t?Object(u.b)():e.lift(new c(t))}}n.d(e,"a",(function(){return s}));var c=function(){function t(t){if(this.total=t,this.total<0)throw new o}return t.prototype.call=function(t,e){return e.subscribe(new a(t,this.total))},t}(),a=function(t){function e(e,n){var r=t.call(this,e)||this;return r.total=n,r.count=0,r}return r.b(e,t),e.prototype._next=function(t){var e=this.total,n=++this.count;n<=e&&(this.destination.next(t),n===e&&(this.destination.complete(),this.unsubscribe()))},e}(i.a)},function(t,e,n){"use strict";var r=n(14);function i(t){return t}var o=Object(r.a)(i);e.a=o},function(t,e,n){"use strict";var r=n(0),i=n(13),o=n(6),u=n(4),s=n(8);function c(t,e){return void 0===e&&(e=null),new b({method:"GET",url:t,headers:e})}function a(t,e,n){return new b({method:"POST",url:t,body:e,headers:n})}function f(t,e){return new b({method:"DELETE",url:t,headers:e})}function l(t,e,n){return new b({method:"PUT",url:t,body:e,headers:n})}function h(t,e,n){return new b({method:"PATCH",url:t,body:e,headers:n})}var p=Object(s.a)((function(t,e){return t.response}));function d(t,e){return p(new b({method:"GET",url:t,responseType:"json",headers:e}))}var b=function(t){function e(e){var n=t.call(this)||this,r={async:!0,createXHR:function(){return this.crossDomain?function(){if(i.a.XMLHttpRequest)return new i.a.XMLHttpRequest;if(i.a.XDomainRequest)return new i.a.XDomainRequest;throw new Error("CORS is not supported by your browser")}():function(){if(i.a.XMLHttpRequest)return new i.a.XMLHttpRequest;var t=void 0;try{for(var e=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"],n=0;n<3;n++)try{if(t=e[n],new i.a.ActiveXObject(t))break}catch(t){}return new i.a.ActiveXObject(t)}catch(t){throw new Error("XMLHttpRequest is not supported by your browser")}}()},crossDomain:!0,withCredentials:!1,headers:{},method:"GET",responseType:"json",timeout:0};if("string"==typeof e)r.url=e;else for(var o in e)e.hasOwnProperty(o)&&(r[o]=e[o]);return n.request=r,n}var n;return r.b(e,t),e.prototype._subscribe=function(t){return new y(t,this.request)},e.create=((n=function(t){return new e(t)}).get=c,n.post=a,n.delete=f,n.put=l,n.patch=h,n.getJSON=d,n),e}(o.a),y=function(t){function e(e,n){var r=t.call(this,e)||this;r.request=n,r.done=!1;var o=n.headers=n.headers||{};return n.crossDomain||r.getHeader(o,"X-Requested-With")||(o["X-Requested-With"]="XMLHttpRequest"),r.getHeader(o,"Content-Type")||i.a.FormData&&n.body instanceof i.a.FormData||void 0===n.body||(o["Content-Type"]="application/x-www-form-urlencoded; charset=UTF-8"),n.body=r.serializeBody(n.body,r.getHeader(n.headers,"Content-Type")),r.send(),r}return r.b(e,t),e.prototype.next=function(t){this.done=!0;var e,n=this.xhr,r=this.request,i=this.destination;try{e=new v(t,n,r)}catch(t){return i.error(t)}i.next(e)},e.prototype.send=function(){var t=this.request,e=this.request,n=e.user,r=e.method,i=e.url,o=e.async,u=e.password,s=e.headers,c=e.body;try{var a=this.xhr=t.createXHR();this.setupEvents(a,t),n?a.open(r,i,o,n,u):a.open(r,i,o),o&&(a.timeout=t.timeout,a.responseType=t.responseType),"withCredentials"in a&&(a.withCredentials=!!t.withCredentials),this.setHeaders(a,s),c?a.send(c):a.send()}catch(t){this.error(t)}},e.prototype.serializeBody=function(t,e){if(!t||"string"==typeof t)return t;if(i.a.FormData&&t instanceof i.a.FormData)return t;if(e){var n=e.indexOf(";");-1!==n&&(e=e.substring(0,n))}switch(e){case"application/x-www-form-urlencoded":return Object.keys(t).map((function(e){return encodeURIComponent(e)+"="+encodeURIComponent(t[e])})).join("&");case"application/json":return JSON.stringify(t);default:return t}},e.prototype.setHeaders=function(t,e){for(var n in e)e.hasOwnProperty(n)&&t.setRequestHeader(n,e[n])},e.prototype.getHeader=function(t,e){for(var n in t)if(n.toLowerCase()===e.toLowerCase())return t[n]},e.prototype.setupEvents=function(t,e){var n=e.progressSubscriber;function r(t){var e,n=r,i=n.subscriber,o=n.progressSubscriber,u=n.request;o&&o.error(t);try{e=new g(this,u)}catch(t){e=t}i.error(e)}if(t.ontimeout=r,r.request=e,r.subscriber=this,r.progressSubscriber=n,t.upload&&"withCredentials"in t){var o,u;if(n)o=function(t){o.progressSubscriber.next(t)},i.a.XDomainRequest?t.onprogress=o:t.upload.onprogress=o,o.progressSubscriber=n;u=function(t){var e,n=u,r=n.progressSubscriber,i=n.subscriber,o=n.request;r&&r.error(t);try{e=new m("ajax error",this,o)}catch(t){e=t}i.error(e)},t.onerror=u,u.request=e,u.subscriber=this,u.progressSubscriber=n}function s(t){}function c(t){var e=c,n=e.subscriber,r=e.progressSubscriber,i=e.request;if(4===this.readyState){var o=1223===this.status?204:this.status,u="text"===this.responseType?this.response||this.responseText:this.response;if(0===o&&(o=u?200:0),o<400)r&&r.complete(),n.next(t),n.complete();else{r&&r.error(t);var s=void 0;try{s=new m("ajax error "+o,this,i)}catch(t){s=t}n.error(s)}}}t.onreadystatechange=s,s.subscriber=this,s.progressSubscriber=n,s.request=e,t.onload=c,c.subscriber=this,c.progressSubscriber=n,c.request=e},e.prototype.unsubscribe=function(){var e=this.done,n=this.xhr;!e&&n&&4!==n.readyState&&"function"==typeof n.abort&&n.abort(),t.prototype.unsubscribe.call(this)},e}(u.a),v=function(){return function(t,e,n){this.originalEvent=t,this.xhr=e,this.request=n,this.status=e.status,this.responseType=e.responseType||n.responseType,this.response=w(this.responseType,e)}}(),m=function(){function t(t,e,n){return Error.call(this),this.message=t,this.name="AjaxError",this.xhr=e,this.request=n,this.status=e.status,this.responseType=e.responseType||n.responseType,this.response=w(this.responseType,e),this}return t.prototype=Object.create(Error.prototype),t}();function w(t,e){switch(t){case"json":return function(t){return"response"in t?t.responseType?t.response:JSON.parse(t.response||t.responseText||"null"):JSON.parse(t.responseText||"null")}(e);case"xml":return e.responseXML;case"text":default:return"response"in e?e.response:e.responseText}}var g=function(t,e){return m.call(this,"ajax timeout",t,e),this.name="AjaxTimeoutError",this};n.d(e,"a",(function(){return _}));var _=function(){return b.create}()}]]); -//# sourceMappingURL=vendor.000c9aa0.min.js.map \ No newline at end of file +var r;r=function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)n.d(r,i,function(e){return t[e]}.bind(null,i));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=0)}([function(t,e,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=function(){function t(t,e){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText,this.container="object"===r(t.container)?t.container:document.body}},{key:"listenClick",value:function(t){var e=this;this.listener=(0,s.default)(t,"click",(function(t){return e.onClick(t)}))}},{key:"onClick",value:function(t){var e=t.delegateTarget||t.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new o.default({action:this.action(e),target:this.target(e),text:this.text(e),container:this.container,trigger:e,emitter:this})}},{key:"defaultAction",value:function(t){return f("action",t)}},{key:"defaultTarget",value:function(t){var e=f("target",t);if(e)return document.querySelector(e)}},{key:"defaultText",value:function(t){return f("text",t)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],e="string"==typeof t?[t]:t,n=!!document.queryCommandSupported;return e.forEach((function(t){n=n&&!!document.queryCommandSupported(t)})),n}}]),e}(u.default);function f(t,e){var n="data-clipboard-"+t;if(e.hasAttribute(n))return e.getAttribute(n)}t.exports=a},function(t,e,n){"use strict";var r,i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o=function(){function t(t,e){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};this.action=t.action,this.container=t.container,this.emitter=t.emitter,this.target=t.target,this.text=t.text,this.trigger=t.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var t=this,e="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return t.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[e?"right":"left"]="-9999px";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=(0,s.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=(0,s.default)(this.target),this.copyText()}},{key:"copyText",value:function(){var t=void 0;try{t=document.execCommand(this.action)}catch(e){t=!1}this.handleResult(t)}},{key:"handleResult",value:function(t){this.emitter.emit(t?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=t,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(t){if(void 0!==t){if(!t||"object"!==(void 0===t?"undefined":i(t))||1!==t.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&t.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(t.hasAttribute("readonly")||t.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=t}},get:function(){return this._target}}]),t}();t.exports=c},function(t,e){t.exports=function(t){var e;if("SELECT"===t.nodeName)t.focus(),e=t.value;else if("INPUT"===t.nodeName||"TEXTAREA"===t.nodeName){var n=t.hasAttribute("readonly");n||t.setAttribute("readonly",""),t.select(),t.setSelectionRange(0,t.value.length),n||t.removeAttribute("readonly"),e=t.value}else{t.hasAttribute("contenteditable")&&t.focus();var r=window.getSelection(),i=document.createRange();i.selectNodeContents(t),r.removeAllRanges(),r.addRange(i),e=r.toString()}return e}},function(t,e){function n(){}n.prototype={on:function(t,e,n){var r=this.e||(this.e={});return(r[t]||(r[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){var r=this;function i(){r.off(t,i),e.apply(n,arguments)}return i._=e,this.on(t,i,n)},emit:function(t){for(var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),r=0,i=n.length;r0){var u=o.indexOf(n);-1!==u&&o.splice(u,1)}},e.prototype.notifyComplete=function(){},e.prototype._next=function(t){if(0===this.toRespond.length){var e=[t].concat(this.values);this.project?this._tryProject(e):this.destination.next(e)}},e.prototype._tryProject=function(t){var e;try{e=this.project.apply(this,t)}catch(t){return void this.destination.error(t)}this.destination.next(e)},e}(i.a)},function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var r=n(0),i=n(3);function o(t,e){var n=!1;return arguments.length>=2&&(n=!0),function(r){return r.lift(new u(t,e,n))}}var u=function(){function t(t,e,n){void 0===n&&(n=!1),this.accumulator=t,this.seed=e,this.hasSeed=n}return t.prototype.call=function(t,e){return e.subscribe(new s(t,this.accumulator,this.seed,this.hasSeed))},t}(),s=function(t){function e(e,n,r,i){var o=t.call(this,e)||this;return o.accumulator=n,o._seed=r,o.hasSeed=i,o.index=0,o}return r.b(e,t),Object.defineProperty(e.prototype,"seed",{get:function(){return this._seed},set:function(t){this.hasSeed=!0,this._seed=t},enumerable:!0,configurable:!0}),e.prototype._next=function(t){if(this.hasSeed)return this._tryNext(t);this.seed=t,this.destination.next(t)},e.prototype._tryNext=function(t){var e,n=this.index++;try{e=this.accumulator(this.seed,t,n)}catch(t){this.destination.error(t)}this.seed=e,this.destination.next(e)},e}(i.a)},function(t,e,n){"use strict";n.d(e,"a",(function(){return u}));var r=n(0),i=n(3),o=n(9);function u(t){return function(e){return e.lift(new s(t))}}var s=function(){function t(t){this.callback=t}return t.prototype.call=function(t,e){return e.subscribe(new c(t,this.callback))},t}(),c=function(t){function e(e,n){var r=t.call(this,e)||this;return r.add(new o.a(n)),r}return r.b(e,t),e}(i.a)},,,,,,,,,,,,,,,,,function(t,e,n){"use strict";n.d(e,"a",(function(){return u}));var r=n(6),i=n(40),o=n(18);function u(t){return new r.a((function(e){var n;try{n=t()}catch(t){return void e.error(t)}return(n?Object(i.a)(n):Object(o.b)()).subscribe(e)}))}},function(t,e,n){"use strict";var r=n(14);function i(t,e){return Object.prototype.hasOwnProperty.call(e,t)}var o=Object.prototype.toString,u=function(){return"[object Arguments]"===o.call(arguments)?function(t){return"[object Arguments]"===o.call(t)}:function(t){return i("callee",t)}}(),s=!{toString:null}.propertyIsEnumerable("toString"),c=["constructor","valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],a=function(){return arguments.propertyIsEnumerable("length")}(),f=function(t,e){for(var n=0;n=0;)i(e=c[n],t)&&!f(r,e)&&(r[r.length]=e),n-=1;return r})):Object(r.a)((function(t){return Object(t)!==t?[]:Object.keys(t)}));e.a=l},function(t,e,n){"use strict";n.d(e,"a",(function(){return i}));var r=n(36);function i(t,e){return Object(r.a)((function(n,r){return e?e(n[t],r[t]):n[t]===r[t]}))}},function(t,e){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t){t.exports=JSON.parse('"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"')},function(t){t.exports=JSON.parse('"M14,2H6A2,2 0 0,0 4,4V20A2,2 0 0,0 6,22H13C12.59,21.75 12.2,21.44 11.86,21.1C11.53,20.77 11.25,20.4 11,20H6V4H13V9H18V10.18C18.71,10.34 19.39,10.61 20,11V8L14,2M20.31,18.9C21.64,16.79 21,14 18.91,12.68C16.8,11.35 14,12 12.69,14.08C11.35,16.19 12,18.97 14.09,20.3C15.55,21.23 17.41,21.23 18.88,20.32L22,23.39L23.39,22L20.31,18.9M16.5,19A2.5,2.5 0 0,1 14,16.5A2.5,2.5 0 0,1 16.5,14A2.5,2.5 0 0,1 19,16.5A2.5,2.5 0 0,1 16.5,19Z"')},,function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var r=n(6),i=n(26),o=n(16),u=n(8);function s(t,e,n,c){return Object(o.a)(n)&&(c=n,n=void 0),c?s(t,e,n).pipe(Object(u.a)((function(t){return Object(i.a)(t)?c.apply(void 0,t):c(t)}))):new r.a((function(r){!function t(e,n,r,i,o){var u;if(function(t){return t&&"function"==typeof t.addEventListener&&"function"==typeof t.removeEventListener}(e)){var s=e;e.addEventListener(n,r,o),u=function(){return s.removeEventListener(n,r,o)}}else if(function(t){return t&&"function"==typeof t.on&&"function"==typeof t.off}(e)){var c=e;e.on(n,r),u=function(){return c.off(n,r)}}else if(function(t){return t&&"function"==typeof t.addListener&&"function"==typeof t.removeListener}(e)){var a=e;e.addListener(n,r),u=function(){return a.removeListener(n,r)}}else{if(!e||!e.length)throw new TypeError("Invalid event target");for(var f=0,l=e.length;f1?r.next(Array.prototype.slice.call(arguments)):r.next(t)}),r,n)}))}},function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var r=n(6),i=n(27),o=n(57),u=n(38);function s(){for(var t=[],e=0;e1&&"number"==typeof t[t.length-1]&&(n=t.pop())):"number"==typeof c&&(n=t.pop()),null===s&&1===t.length&&t[0]instanceof r.a?t[0]:Object(o.a)(n)(Object(u.a)(t,s))}},function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var r=n(0),i=n(3);function o(t,e){return void 0===e&&(e=null),function(n){return n.lift(new u(t,e))}}var u=function(){function t(t,e){this.bufferSize=t,this.startBufferEvery=e,this.subscriberClass=e&&t!==e?c:s}return t.prototype.call=function(t,e){return e.subscribe(new this.subscriberClass(t,this.bufferSize,this.startBufferEvery))},t}(),s=function(t){function e(e,n){var r=t.call(this,e)||this;return r.bufferSize=n,r.buffer=[],r}return r.b(e,t),e.prototype._next=function(t){var e=this.buffer;e.push(t),e.length==this.bufferSize&&(this.destination.next(e),this.buffer=[])},e.prototype._complete=function(){var e=this.buffer;e.length>0&&this.destination.next(e),t.prototype._complete.call(this)},e}(i.a),c=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.bufferSize=n,i.startBufferEvery=r,i.buffers=[],i.count=0,i}return r.b(e,t),e.prototype._next=function(t){var e=this.bufferSize,n=this.startBufferEvery,r=this.buffers,i=this.count;this.count++,i%n==0&&r.push([]);for(var o=r.length;o--;){var u=r[o];u.push(t),u.length===e&&(r.splice(o,1),this.destination.next(u))}},e.prototype._complete=function(){for(var e=this.buffers,n=this.destination;e.length>0;){var r=e.shift();r.length>0&&n.next(r)}t.prototype._complete.call(this)},e}(i.a)},function(t,e,n){"use strict";var r=n(14),i=n(32);function o(t){return function e(n,o){switch(arguments.length){case 0:return e;case 1:return Object(i.a)(n)?e:Object(r.a)((function(e){return t(n,e)}));default:return Object(i.a)(n)&&Object(i.a)(o)?e:Object(i.a)(n)?Object(r.a)((function(e){return t(e,o)})):Object(i.a)(o)?Object(r.a)((function(e){return t(n,e)})):t(n,o)}}}var u=Array.isArray||function(t){return null!=t&&t.length>=0&&"[object Array]"===Object.prototype.toString.call(t)};function s(t){return null!=t&&"function"==typeof t["@@transducer/step"]}function c(t,e,n){return function(){if(0===arguments.length)return n();var r=Array.prototype.slice.call(arguments,0),i=r.pop();if(!u(i)){for(var o=0;o=0;){if(t(e[n]))return e[n];n-=1}})));e.a=l},function(t,e,n){"use strict";var r=n(0),i=n(25),o=function(t){function e(e,n){var r=t.call(this,e,n)||this;return r.scheduler=e,r.work=n,r}return r.b(e,t),e.prototype.schedule=function(e,n){return void 0===n&&(n=0),n>0?t.prototype.schedule.call(this,e,n):(this.delay=n,this.state=e,this.scheduler.flush(this),this)},e.prototype.execute=function(e,n){return n>0||this.closed?t.prototype.execute.call(this,e,n):this._execute(e,n)},e.prototype.requestAsyncId=function(e,n,r){return void 0===r&&(r=0),null!==r&&r>0||null===r&&this.delay>0?t.prototype.requestAsyncId.call(this,e,n,r):e.flush(this)},e}(n(43).a),u=new(function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r.b(e,t),e}(n(42).a))(o),s=n(9),c=n(46),a=n(19),f=n(51),l=function(t){function e(e,n,r){void 0===e&&(e=Number.POSITIVE_INFINITY),void 0===n&&(n=Number.POSITIVE_INFINITY);var i=t.call(this)||this;return i.scheduler=r,i._events=[],i._infiniteTimeWindow=!1,i._bufferSize=e<1?1:e,i._windowTime=n<1?1:n,n===Number.POSITIVE_INFINITY?(i._infiniteTimeWindow=!0,i.next=i.nextInfiniteTimeWindow):i.next=i.nextTimeWindow,i}return r.b(e,t),e.prototype.nextInfiniteTimeWindow=function(e){var n=this._events;n.push(e),n.length>this._bufferSize&&n.shift(),t.prototype.next.call(this,e)},e.prototype.nextTimeWindow=function(e){this._events.push(new h(this._getNow(),e)),this._trimBufferThenGetEvents(),t.prototype.next.call(this,e)},e.prototype._subscribe=function(t){var e,n=this._infiniteTimeWindow,r=n?this._events:this._trimBufferThenGetEvents(),i=this.scheduler,o=r.length;if(this.closed)throw new a.a;if(this.isStopped||this.hasError?e=s.a.EMPTY:(this.observers.push(t),e=new f.a(this,t)),i&&t.add(t=new c.a(t,i)),n)for(var u=0;ue&&(o=Math.max(o,i-e)),o>0&&r.splice(0,o),r},e}(i.a),h=function(){return function(t,e){this.time=t,this.value=e}}();function p(t,e,n){var r;return r=t&&"object"==typeof t?t:{bufferSize:t,windowTime:e,refCount:!1,scheduler:n},function(t){return t.lift(function(t){var e,n,r=t.bufferSize,i=void 0===r?Number.POSITIVE_INFINITY:r,o=t.windowTime,u=void 0===o?Number.POSITIVE_INFINITY:o,s=t.refCount,c=t.scheduler,a=0,f=!1,h=!1;return function(t){a++,e&&!f||(f=!1,e=new l(i,u,c),n=t.subscribe({next:function(t){e.next(t)},error:function(t){f=!0,e.error(t)},complete:function(){h=!0,e.complete()}}));var r=e.subscribe(this);this.add((function(){a--,r.unsubscribe(),n&&!h&&s&&0===a&&(n.unsubscribe(),n=void 0,e=void 0)}))}}(r))}}n.d(e,"a",(function(){return p}))},function(t,e,n){"use strict";var r=n(45),i=n(57);function o(){for(var t=[],e=0;e0&&n[0].time-r.now()<=0;)n.shift().notification.observe(i);if(n.length>0){var o=Math.max(0,n[0].time-r.now());this.schedule(t,o)}else this.unsubscribe(),e.active=!1},e.prototype._schedule=function(t){this.active=!0,this.destination.add(t.schedule(e.dispatch,this.delay,{source:this,destination:this.destination,scheduler:t}))},e.prototype.scheduleNotification=function(t){if(!0!==this.errored){var e=this.scheduler,n=new f(e.now()+this.delay,t);this.queue.push(n),!1===this.active&&this._schedule(e)}},e.prototype._next=function(t){this.scheduleNotification(u.a.createNext(t))},e.prototype._error=function(t){this.errored=!0,this.queue=[],this.destination.error(t),this.unsubscribe()},e.prototype._complete=function(){this.scheduleNotification(u.a.createComplete()),this.unsubscribe()},e}(o.a),f=function(){return function(t,e){this.time=t,this.notification=e}}()},function(t,e,n){"use strict";var r=n(14);var i=Object(r.a)((function(t){return e=t,"[object String]"===Object.prototype.toString.call(e)?t.split("").reverse().join(""):Array.prototype.slice.call(t,0).reverse();var e}));e.a=i},function(t,e,n){"use strict";n.d(e,"a",(function(){return u}));var r=n(0),i=n(25),o=n(19),u=function(t){function e(e){var n=t.call(this)||this;return n._value=e,n}return r.b(e,t),Object.defineProperty(e.prototype,"value",{get:function(){return this.getValue()},enumerable:!0,configurable:!0}),e.prototype._subscribe=function(e){var n=t.prototype._subscribe.call(this,e);return n&&!n.closed&&e.next(this._value),n},e.prototype.getValue=function(){if(this.hasError)throw this.thrownError;if(this.closed)throw new o.a;return this._value},e.prototype.next=function(e){t.prototype.next.call(this,this._value=e)},e}(i.a)},function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var r=n(0),i=n(3);function o(t,e){return function(n){return n.lift(new u(t,e))}}var u=function(){function t(t,e){this.predicate=t,this.thisArg=e}return t.prototype.call=function(t,e){return e.subscribe(new s(t,this.predicate,this.thisArg))},t}(),s=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.predicate=n,i.thisArg=r,i.count=0,i}return r.b(e,t),e.prototype._next=function(t){var e;try{e=this.predicate.call(this.thisArg,t,this.count++)}catch(t){return void this.destination.error(t)}e&&this.destination.next(t)},e}(i.a)},function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var r=n(0),i=n(3);function o(t){return function(e){return e.lift(new u(t))}}var u=function(){function t(t){this.total=t}return t.prototype.call=function(t,e){return e.subscribe(new s(t,this.total))},t}(),s=function(t){function e(e,n){var r=t.call(this,e)||this;return r.total=n,r.count=0,r}return r.b(e,t),e.prototype._next=function(t){++this.count>this.total&&this.destination.next(t)},e}(i.a)},function(t,e,n){"use strict";n.d(e,"a",(function(){return i}));var r=n(8);function i(){for(var t=[],e=0;e1)this.connection=null;else{var n=this.connection,r=t._connection;this.connection=null,!r||n&&r!==n||r.unsubscribe()}}else this.connection=null},e}(u.a),l=function(t){function e(e,n){var r=t.call(this)||this;return r.source=e,r.subjectFactory=n,r._refCount=0,r._isComplete=!1,r}return r.b(e,t),e.prototype._subscribe=function(t){return this.getSubject().subscribe(t)},e.prototype.getSubject=function(){var t=this._subject;return t&&!t.isStopped||(this._subject=this.subjectFactory()),this._subject},e.prototype.connect=function(){var t=this._connection;return t||(this._isComplete=!1,(t=this._connection=new s.a).add(this.source.subscribe(new p(this.getSubject(),this))),t.closed&&(this._connection=null,t=s.a.EMPTY)),t},e.prototype.refCount=function(){return c()(this)},e}(o.a),h=function(){var t=l.prototype;return{operator:{value:null},_refCount:{value:0,writable:!0},_subject:{value:null,writable:!0},_connection:{value:null,writable:!0},_subscribe:{value:t._subscribe},_isComplete:{value:t._isComplete,writable:!0},getSubject:{value:t.getSubject},connect:{value:t.connect},refCount:{value:t.refCount}}}(),p=function(t){function e(e,n){var r=t.call(this,e)||this;return r.connectable=n,r}return r.b(e,t),e.prototype._error=function(e){this._unsubscribe(),t.prototype._error.call(this,e)},e.prototype._complete=function(){this.connectable._isComplete=!0,this._unsubscribe(),t.prototype._complete.call(this)},e.prototype._unsubscribe=function(){var t=this.connectable;if(t){this.connectable=null;var e=t._connection;t._refCount=0,t._subject=null,t._connection=null,e&&e.unsubscribe()}},e}(i.b);u.a;var d=function(){function t(t,e){this.subjectFactory=t,this.selector=e}return t.prototype.call=function(t,e){var n=this.selector,r=this.subjectFactory(),i=n(r).subscribe(t);return i.add(e.subscribe(r)),i},t}();function b(){return new i.a}function y(){return function(t){return c()((e=b,function(t){var r;if(r="function"==typeof e?e:function(){return e},"function"==typeof n)return t.lift(new d(r,n));var i=Object.create(t,h);return i.source=t,i.subjectFactory=r,i})(t));var e,n}}n.d(e,"a",(function(){return y}))},function(t,e,n){"use strict";var r=n(0),i=n(3),o=function(){function t(){return Error.call(this),this.message="argument out of range",this.name="ArgumentOutOfRangeError",this}return t.prototype=Object.create(Error.prototype),t}(),u=n(18);function s(t){return function(e){return 0===t?Object(u.b)():e.lift(new c(t))}}n.d(e,"a",(function(){return s}));var c=function(){function t(t){if(this.total=t,this.total<0)throw new o}return t.prototype.call=function(t,e){return e.subscribe(new a(t,this.total))},t}(),a=function(t){function e(e,n){var r=t.call(this,e)||this;return r.total=n,r.count=0,r}return r.b(e,t),e.prototype._next=function(t){var e=this.total,n=++this.count;n<=e&&(this.destination.next(t),n===e&&(this.destination.complete(),this.unsubscribe()))},e}(i.a)},function(t,e,n){"use strict";var r=n(14);function i(t){return t}var o=Object(r.a)(i);e.a=o},function(t,e,n){"use strict";var r=n(0),i=n(13),o=n(6),u=n(3),s=n(8);function c(t,e){return void 0===e&&(e=null),new b({method:"GET",url:t,headers:e})}function a(t,e,n){return new b({method:"POST",url:t,body:e,headers:n})}function f(t,e){return new b({method:"DELETE",url:t,headers:e})}function l(t,e,n){return new b({method:"PUT",url:t,body:e,headers:n})}function h(t,e,n){return new b({method:"PATCH",url:t,body:e,headers:n})}var p=Object(s.a)((function(t,e){return t.response}));function d(t,e){return p(new b({method:"GET",url:t,responseType:"json",headers:e}))}var b=function(t){function e(e){var n=t.call(this)||this,r={async:!0,createXHR:function(){return this.crossDomain?function(){if(i.a.XMLHttpRequest)return new i.a.XMLHttpRequest;if(i.a.XDomainRequest)return new i.a.XDomainRequest;throw new Error("CORS is not supported by your browser")}():function(){if(i.a.XMLHttpRequest)return new i.a.XMLHttpRequest;var t=void 0;try{for(var e=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"],n=0;n<3;n++)try{if(t=e[n],new i.a.ActiveXObject(t))break}catch(t){}return new i.a.ActiveXObject(t)}catch(t){throw new Error("XMLHttpRequest is not supported by your browser")}}()},crossDomain:!0,withCredentials:!1,headers:{},method:"GET",responseType:"json",timeout:0};if("string"==typeof e)r.url=e;else for(var o in e)e.hasOwnProperty(o)&&(r[o]=e[o]);return n.request=r,n}var n;return r.b(e,t),e.prototype._subscribe=function(t){return new y(t,this.request)},e.create=((n=function(t){return new e(t)}).get=c,n.post=a,n.delete=f,n.put=l,n.patch=h,n.getJSON=d,n),e}(o.a),y=function(t){function e(e,n){var r=t.call(this,e)||this;r.request=n,r.done=!1;var o=n.headers=n.headers||{};return n.crossDomain||r.getHeader(o,"X-Requested-With")||(o["X-Requested-With"]="XMLHttpRequest"),r.getHeader(o,"Content-Type")||i.a.FormData&&n.body instanceof i.a.FormData||void 0===n.body||(o["Content-Type"]="application/x-www-form-urlencoded; charset=UTF-8"),n.body=r.serializeBody(n.body,r.getHeader(n.headers,"Content-Type")),r.send(),r}return r.b(e,t),e.prototype.next=function(t){this.done=!0;var e,n=this.xhr,r=this.request,i=this.destination;try{e=new v(t,n,r)}catch(t){return i.error(t)}i.next(e)},e.prototype.send=function(){var t=this.request,e=this.request,n=e.user,r=e.method,i=e.url,o=e.async,u=e.password,s=e.headers,c=e.body;try{var a=this.xhr=t.createXHR();this.setupEvents(a,t),n?a.open(r,i,o,n,u):a.open(r,i,o),o&&(a.timeout=t.timeout,a.responseType=t.responseType),"withCredentials"in a&&(a.withCredentials=!!t.withCredentials),this.setHeaders(a,s),c?a.send(c):a.send()}catch(t){this.error(t)}},e.prototype.serializeBody=function(t,e){if(!t||"string"==typeof t)return t;if(i.a.FormData&&t instanceof i.a.FormData)return t;if(e){var n=e.indexOf(";");-1!==n&&(e=e.substring(0,n))}switch(e){case"application/x-www-form-urlencoded":return Object.keys(t).map((function(e){return encodeURIComponent(e)+"="+encodeURIComponent(t[e])})).join("&");case"application/json":return JSON.stringify(t);default:return t}},e.prototype.setHeaders=function(t,e){for(var n in e)e.hasOwnProperty(n)&&t.setRequestHeader(n,e[n])},e.prototype.getHeader=function(t,e){for(var n in t)if(n.toLowerCase()===e.toLowerCase())return t[n]},e.prototype.setupEvents=function(t,e){var n=e.progressSubscriber;function r(t){var e,n=r,i=n.subscriber,o=n.progressSubscriber,u=n.request;o&&o.error(t);try{e=new g(this,u)}catch(t){e=t}i.error(e)}if(t.ontimeout=r,r.request=e,r.subscriber=this,r.progressSubscriber=n,t.upload&&"withCredentials"in t){var o,u;if(n)o=function(t){o.progressSubscriber.next(t)},i.a.XDomainRequest?t.onprogress=o:t.upload.onprogress=o,o.progressSubscriber=n;u=function(t){var e,n=u,r=n.progressSubscriber,i=n.subscriber,o=n.request;r&&r.error(t);try{e=new m("ajax error",this,o)}catch(t){e=t}i.error(e)},t.onerror=u,u.request=e,u.subscriber=this,u.progressSubscriber=n}function s(t){}function c(t){var e=c,n=e.subscriber,r=e.progressSubscriber,i=e.request;if(4===this.readyState){var o=1223===this.status?204:this.status,u="text"===this.responseType?this.response||this.responseText:this.response;if(0===o&&(o=u?200:0),o<400)r&&r.complete(),n.next(t),n.complete();else{r&&r.error(t);var s=void 0;try{s=new m("ajax error "+o,this,i)}catch(t){s=t}n.error(s)}}}t.onreadystatechange=s,s.subscriber=this,s.progressSubscriber=n,s.request=e,t.onload=c,c.subscriber=this,c.progressSubscriber=n,c.request=e},e.prototype.unsubscribe=function(){var e=this.done,n=this.xhr;!e&&n&&4!==n.readyState&&"function"==typeof n.abort&&n.abort(),t.prototype.unsubscribe.call(this)},e}(u.a),v=function(){return function(t,e,n){this.originalEvent=t,this.xhr=e,this.request=n,this.status=e.status,this.responseType=e.responseType||n.responseType,this.response=w(this.responseType,e)}}(),m=function(){function t(t,e,n){return Error.call(this),this.message=t,this.name="AjaxError",this.xhr=e,this.request=n,this.status=e.status,this.responseType=e.responseType||n.responseType,this.response=w(this.responseType,e),this}return t.prototype=Object.create(Error.prototype),t}();function w(t,e){switch(t){case"json":return function(t){return"response"in t?t.responseType?t.response:JSON.parse(t.response||t.responseText||"null"):JSON.parse(t.responseText||"null")}(e);case"xml":return e.responseXML;case"text":default:return"response"in e?e.response:e.responseText}}var g=function(t,e){return m.call(this,"ajax timeout",t,e),this.name="AjaxTimeoutError",this};n.d(e,"a",(function(){return _}));var _=function(){return b.create}()}]]); +//# sourceMappingURL=vendor.31a2e7b9.min.js.map \ No newline at end of file diff --git a/material/assets/javascripts/vendor.31a2e7b9.min.js.map b/material/assets/javascripts/vendor.31a2e7b9.min.js.map new file mode 100644 index 000000000..b3eb66a8a --- /dev/null +++ b/material/assets/javascripts/vendor.31a2e7b9.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///./node_modules/tslib/tslib.es6.js","webpack:///./node_modules/rxjs/_esm5/internal/Subscriber.js","webpack:///./node_modules/rxjs/_esm5/internal/Observable.js","webpack:///./node_modules/rxjs/_esm5/internal/util/toSubscriber.js","webpack:///./node_modules/rxjs/_esm5/internal/util/canReportError.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/map.js","webpack:///./node_modules/rxjs/_esm5/internal/util/UnsubscriptionError.js","webpack:///./node_modules/rxjs/_esm5/internal/Subscription.js","webpack:///./node_modules/rxjs/_esm5/internal/util/subscribeToResult.js","webpack:///./node_modules/rxjs/_esm5/internal/OuterSubscriber.js","webpack:///./node_modules/rxjs/_esm5/internal/config.js","webpack:///./node_modules/rxjs/_esm5/internal/util/root.js","webpack:///./node_modules/ramda/es/internal/_curry1.js","webpack:///./node_modules/rxjs/_esm5/internal/util/noop.js","webpack:///./node_modules/rxjs/_esm5/internal/util/isFunction.js","webpack:///./node_modules/rxjs/_esm5/internal/symbol/observable.js","webpack:///./node_modules/rxjs/_esm5/internal/observable/empty.js","webpack:///./node_modules/rxjs/_esm5/internal/util/ObjectUnsubscribedError.js","webpack:///./node_modules/rxjs/_esm5/internal/util/hostReportError.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/switchMap.js","webpack:///./node_modules/rxjs/_esm5/internal/Subject.js","webpack:///./node_modules/rxjs/_esm5/internal/util/isArray.js","webpack:///./node_modules/rxjs/_esm5/internal/util/isScheduler.js","webpack:///./node_modules/rxjs/_esm5/internal/symbol/iterator.js","webpack:///./node_modules/rxjs/_esm5/internal/InnerSubscriber.js","webpack:///./node_modules/ramda/es/internal/_isPlaceholder.js","webpack:///./node_modules/rxjs/_esm5/internal/symbol/rxSubscriber.js","webpack:///./node_modules/rxjs/_esm5/internal/Notification.js","webpack:///./node_modules/rxjs/_esm5/internal/observable/throwError.js","webpack:///./node_modules/rxjs/_esm5/internal/util/pipe.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/distinctUntilChanged.js","webpack:///./node_modules/rxjs/_esm5/internal/scheduled/scheduleArray.js","webpack:///./node_modules/rxjs/_esm5/internal/observable/fromArray.js","webpack:///./node_modules/rxjs/_esm5/internal/scheduled/scheduled.js","webpack:///./node_modules/rxjs/_esm5/internal/util/isInteropObservable.js","webpack:///./node_modules/rxjs/_esm5/internal/scheduled/scheduleObservable.js","webpack:///./node_modules/rxjs/_esm5/internal/scheduled/schedulePromise.js","webpack:///./node_modules/rxjs/_esm5/internal/util/isIterable.js","webpack:///./node_modules/rxjs/_esm5/internal/scheduled/scheduleIterable.js","webpack:///./node_modules/rxjs/_esm5/internal/observable/from.js","webpack:///./node_modules/rxjs/_esm5/internal/Scheduler.js","webpack:///./node_modules/rxjs/_esm5/internal/scheduler/AsyncScheduler.js","webpack:///./node_modules/rxjs/_esm5/internal/scheduler/Action.js","webpack:///./node_modules/rxjs/_esm5/internal/scheduler/AsyncAction.js","webpack:///./node_modules/rxjs/_esm5/internal/Observer.js","webpack:///./node_modules/rxjs/_esm5/internal/observable/of.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/observeOn.js","webpack:///./node_modules/rxjs/_esm5/internal/util/isObject.js","webpack:///./node_modules/rxjs/_esm5/internal/SubjectSubscription.js","webpack:///./node_modules/rxjs/_esm5/internal/util/isArrayLike.js","webpack:///./node_modules/rxjs/_esm5/internal/util/subscribeToArray.js","webpack:///./node_modules/rxjs/_esm5/internal/util/isPromise.js","webpack:///./node_modules/rxjs/_esm5/internal/scheduler/async.js","webpack:///./node_modules/rxjs/_esm5/internal/util/subscribeTo.js","webpack:///./node_modules/rxjs/_esm5/internal/util/subscribeToObservable.js","webpack:///./node_modules/rxjs/_esm5/internal/util/subscribeToPromise.js","webpack:///./node_modules/rxjs/_esm5/internal/util/subscribeToIterable.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/mergeMap.js","webpack:///./node_modules/rxjs/_esm5/internal/util/identity.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/mergeAll.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/tap.js","webpack:///./node_modules/rxjs/_esm5/internal/scheduler/AnimationFrameAction.js","webpack:///./node_modules/rxjs/_esm5/internal/scheduler/AnimationFrameScheduler.js","webpack:///./node_modules/rxjs/_esm5/internal/scheduler/animationFrame.js","webpack:///./node_modules/clipboard/dist/clipboard.js","webpack:///./node_modules/rxjs/_esm5/internal/observable/combineLatest.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/withLatestFrom.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/scan.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/finalize.js","webpack:///./node_modules/rxjs/_esm5/internal/observable/defer.js","webpack:///./node_modules/ramda/es/internal/_has.js","webpack:///./node_modules/ramda/es/internal/_isArguments.js","webpack:///./node_modules/ramda/es/keys.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/distinctUntilKeyChanged.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/rxjs/_esm5/internal/observable/fromEvent.js","webpack:///./node_modules/rxjs/_esm5/internal/observable/merge.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/bufferCount.js","webpack:///./node_modules/ramda/es/internal/_curry2.js","webpack:///./node_modules/ramda/es/internal/_isArray.js","webpack:///./node_modules/ramda/es/internal/_isTransformer.js","webpack:///./node_modules/ramda/es/internal/_dispatchable.js","webpack:///./node_modules/ramda/es/internal/_xfBase.js","webpack:///./node_modules/ramda/es/internal/_xfindLast.js","webpack:///./node_modules/ramda/es/findLast.js","webpack:///./node_modules/rxjs/_esm5/internal/scheduler/QueueAction.js","webpack:///./node_modules/rxjs/_esm5/internal/scheduler/queue.js","webpack:///./node_modules/rxjs/_esm5/internal/scheduler/QueueScheduler.js","webpack:///./node_modules/rxjs/_esm5/internal/ReplaySubject.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/shareReplay.js","webpack:///./node_modules/rxjs/_esm5/internal/observable/concat.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/concatAll.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/startWith.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/delay.js","webpack:///./node_modules/rxjs/_esm5/internal/util/isDate.js","webpack:///./node_modules/ramda/es/reverse.js","webpack:///./node_modules/ramda/es/internal/_isString.js","webpack:///./node_modules/rxjs/_esm5/internal/BehaviorSubject.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/filter.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/skip.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/pluck.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/catchError.js","webpack:///./node_modules/rxjs/_esm5/internal/observable/never.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/mapTo.js","webpack:///./node_modules/rxjs/_esm5/internal/observable/fromEventPattern.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/throttle.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/switchMapTo.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/debounceTime.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/sample.js","webpack:///./node_modules/rxjs/_esm5/internal/observable/iif.js","webpack:///./node_modules/ramda/es/values.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/refCount.js","webpack:///./node_modules/rxjs/_esm5/internal/observable/ConnectableObservable.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/multicast.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/share.js","webpack:///./node_modules/rxjs/_esm5/internal/util/ArgumentOutOfRangeError.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/take.js","webpack:///./node_modules/ramda/es/internal/_identity.js","webpack:///./node_modules/ramda/es/identity.js","webpack:///./node_modules/rxjs/_esm5/internal/observable/dom/AjaxObservable.js","webpack:///./node_modules/rxjs/_esm5/internal/observable/dom/ajax.js"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","this","constructor","prototype","create","__assign","assign","t","s","i","n","arguments","length","call","apply","__rest","e","indexOf","getOwnPropertySymbols","propertyIsEnumerable","__values","o","m","Symbol","iterator","next","value","done","__read","r","ar","push","error","__spread","concat","Subscriber","_super","destinationOrNext","complete","_this","syncErrorValue","syncErrorThrown","syncErrorThrowable","isStopped","destination","add","SafeSubscriber","subscriber","_next","err","_error","_complete","unsubscribe","closed","_unsubscribeAndRecycle","_parentOrParents","_parentSubscriber","observerOrNext","context","bind","_context","useDeprecatedSynchronousErrorHandling","__tryOrSetError","__tryOrUnsub","wrappedComplete","fn","parent","Error","_unsubscribe","Observable","subscribe","_isScalar","_subscribe","lift","operator","observable","source","sink","nextOrObserver","rxSubscriber","toSubscriber","config","_trySubscribe","observer","_a","closed_1","canReportError","console","warn","forEach","promiseCtor","getPromiseCtor","resolve","reject","subscription","pipe","operations","_i","toPromise","x","Promise","map","project","thisArg","TypeError","MapOperator","MapSubscriber","count","result","UnsubscriptionError","UnsubscriptionErrorImpl","errors","message","toString","join","name","Subscription","_subscriptions","empty","remove","index","isFunction","flattenUnsubscriptionErrors","isArray","len","sub","isObject","teardown","EMPTY","tmp","subscriptions","subscriptionIndex","splice","reduce","errs","subscribeToResult","outerSubscriber","outerValue","outerIndex","OuterSubscriber","notifyNext","innerValue","innerIndex","innerSub","notifyError","notifyComplete","_enable_super_gross_mode_that_will_cause_bad_things","undefined","stack","__window","window","__self","self","WorkerGlobalScope","_root","global","_curry1","f1","a","noop","scheduler","schedule","emptyScheduled","ObjectUnsubscribedError","ObjectUnsubscribedErrorImpl","hostReportError","setTimeout","switchMap","resultSelector","ii","SwitchMapOperator","SwitchMapSubscriber","_innerSub","innerSubscription","innerSubscriber","SubjectSubscriber","Subject","observers","hasError","thrownError","subject","AnonymousSubject","copy","slice","asObservable","isScheduler","getSymbolIterator","InnerSubscriber","_isPlaceholder","Math","random","NotificationKind","dispatch","Notification","kind","hasValue","observe","do","accept","toObservable","of","createNext","undefinedValueNotification","createError","createComplete","completeNotification","fns","pipeFromArray","input","prev","distinctUntilChanged","compare","keySelector","DistinctUntilChangedOperator","DistinctUntilChangedSubscriber","hasKey","y","key","scheduleArray","fromArray","scheduled","isInteropObservable","scheduleObservable","isPromise","then","schedulePromise","isArrayLike","isIterable","return","scheduleIterable","from","subscribeTo","Scheduler","SchedulerAction","now","work","delay","state","Date","AsyncScheduler","delegate","actions","active","flush","action","execute","shift","Action","AsyncAction","pending","id","recycleAsyncId","requestAsyncId","setInterval","clearInterval","_execute","errored","errorValue","args","pop","observeOn","ObserveOnOperator","ObserveOnSubscriber","arg","notification","scheduleMessage","ObserveOnMessage","SubjectSubscription","subscriberIndex","subscribeToArray","array","async","obj","obs","promise","iterable","item","MergeMapOperator","concurrent","Number","POSITIVE_INFINITY","MergeMapSubscriber","hasCompleted","buffer","_tryNext","ish","identity","mergeAll","mergeMap","tap","DoOperator","TapSubscriber","_tapNext","_tapError","_tapComplete","AnimationFrameAction","requestAnimationFrame","cancelAnimationFrame","AnimationFrameScheduler","animationFrame","factory","modules","installedModules","__webpack_require__","moduleId","exports","module","l","c","getter","defineProperty","enumerable","get","toStringTag","mode","__esModule","ns","object","property","_typeof","_createClass","defineProperties","target","props","descriptor","configurable","writable","Constructor","protoProps","staticProps","_clipboardAction2","_interopRequireDefault","_tinyEmitter2","_goodListener2","default","Clipboard","_Emitter","trigger","options","instance","_classCallCheck","ReferenceError","_possibleConstructorReturn","getPrototypeOf","resolveOptions","listenClick","subClass","superClass","_inherits","defaultAction","defaultTarget","text","defaultText","container","document","body","_this2","listener","onClick","delegateTarget","currentTarget","clipboardAction","emitter","getAttributeValue","selector","querySelector","destroy","support","queryCommandSupported","suffix","element","attribute","hasAttribute","getAttribute","_select","_select2","ClipboardAction","initSelection","selectedText","selectFake","selectTarget","isRTL","documentElement","removeFake","fakeHandlerCallback","fakeHandler","addEventListener","fakeElem","createElement","style","fontSize","border","padding","margin","position","yPosition","pageYOffset","scrollTop","top","setAttribute","appendChild","copyText","removeEventListener","removeChild","succeeded","execCommand","handleResult","emit","clearSelection","focus","getSelection","removeAllRanges","set","_action","nodeType","_target","nodeName","isReadOnly","select","setSelectionRange","removeAttribute","selection","range","createRange","selectNodeContents","addRange","E","on","callback","ctx","once","off","_","data","evtArr","evts","liveEvents","is","type","string","node","listenNode","nodeList","listenNodeList","listenSelector","HTMLElement","String","closest","_delegate","useCapture","listenerFn","elements","querySelectorAll","DOCUMENT_NODE_TYPE","Element","matches","proto","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","parentNode","NONE","combineLatest","observables","CombineLatestOperator","CombineLatestSubscriber","values","toRespond","unused","oldVal","_tryResultSelector","withLatestFrom","WithLatestFromOperator","WithLatestFromSubscriber","found","_tryProject","scan","accumulator","seed","hasSeed","ScanOperator","ScanSubscriber","_seed","finalize","FinallyOperator","FinallySubscriber","defer","observableFactory","_has","prop","hasEnumBug","nonEnumerableProps","hasArgsEnumBug","contains","list","idx","keys","nIdx","ks","checkArgsLength","distinctUntilKeyChanged","g","Function","fromEvent","eventName","setupSubscription","sourceObj","handler","isEventTarget","source_1","isJQueryStyleEventEmitter","source_2","addListener","removeListener","isNodeStyleEventEmitter","source_3","merge","last","bufferCount","bufferSize","startBufferEvery","BufferCountOperator","subscriberClass","BufferSkipCountSubscriber","BufferCountSubscriber","buffers","_curry2","f2","_b","val","_isTransformer","_dispatchable","methodNames","xf","_isArray","transducer","XFindLast","f","_xfBase","findLast","QueueAction","queue","QueueScheduler","ReplaySubject","windowTime","_events","_infiniteTimeWindow","_bufferSize","_windowTime","nextInfiniteTimeWindow","nextTimeWindow","ReplayEvent","_getNow","_trimBufferThenGetEvents","eventsCount","spliceCount","time","max","shareReplay","configOrBufferSize","refCount","_c","useRefCount","isComplete","shareReplayOperator","concatAll","startWith","delayFor","isNaN","abs","DelayOperator","DelaySubscriber","delay_1","_schedule","scheduleNotification","DelayMessage","split","reverse","BehaviorSubject","_value","getValue","filter","predicate","FilterOperator","FilterSubscriber","skip","SkipOperator","total","SkipSubscriber","pluck","properties","currentProp","plucker","catchError","CatchOperator","caught","CatchSubscriber","err2","NEVER","mapTo","MapToOperator","MapToSubscriber","fromEventPattern","addHandler","removeHandler","retValue","defaultThrottleConfig","leading","trailing","throttle","durationSelector","ThrottleOperator","ThrottleSubscriber","_leading","_trailing","_hasValue","_sendValue","_throttled","send","duration","tryDurationSelector","throttlingDone","switchMapTo","innerObservable","debounceTime","dueTime","DebounceTimeOperator","DebounceTimeSubscriber","debouncedSubscription","lastValue","clearDebounce","dispatchNext","debouncedNext","sample","notifier","SampleOperator","sampleSubscriber","SampleSubscriber","emitValue","iif","condition","trueResult","falseResult","vals","RefCountOperator","connectable","_refCount","refCounter","connection","connect","RefCountSubscriber","sharedConnection","_connection","ConnectableObservable","subjectFactory","_isComplete","getSubject","_subject","connectableObservableDescriptor","connectableProto","ConnectableSubscriber","MulticastOperator","shareSubjectFactory","share","subjectOrSubjectFactory","ArgumentOutOfRangeError","ArgumentOutOfRangeErrorImpl","take","TakeOperator","TakeSubscriber","_identity","ajaxGet","url","headers","method","ajaxPost","ajaxDelete","ajaxPut","ajaxPatch","mapResponse","response","ajaxGetJSON","responseType","AjaxObservable","urlOrRequest","request","createXHR","crossDomain","root","XMLHttpRequest","XDomainRequest","getCORSRequest","progId","progIds","ActiveXObject","getXMLHttpRequest","withCredentials","timeout","post","delete","put","patch","getJSON","AjaxSubscriber","getHeader","FormData","serializeBody","xhr","AjaxResponse","user","password","setupEvents","open","setHeaders","contentType","splitIndex","substring","encodeURIComponent","JSON","stringify","setRequestHeader","headerName","toLowerCase","progressSubscriber","xhrTimeout","AjaxTimeoutError","ontimeout","upload","xhrProgress_1","xhrError_1","onprogress","AjaxError","onerror","xhrReadyStateChange","xhrLoad","readyState","status_1","status","responseText","onreadystatechange","onload","abort","originalEvent","parseXhrResponse","AjaxErrorImpl","parse","parseJson","responseXML","ajax"],"mappings":"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","file":"assets/javascripts/vendor.31a2e7b9.min.js","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","/** PURE_IMPORTS_START tslib,_util_isFunction,_Observer,_Subscription,_internal_symbol_rxSubscriber,_config,_util_hostReportError PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { isFunction } from './util/isFunction';\nimport { empty as emptyObserver } from './Observer';\nimport { Subscription } from './Subscription';\nimport { rxSubscriber as rxSubscriberSymbol } from '../internal/symbol/rxSubscriber';\nimport { config } from './config';\nimport { hostReportError } from './util/hostReportError';\nvar Subscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(Subscriber, _super);\n function Subscriber(destinationOrNext, error, complete) {\n var _this = _super.call(this) || this;\n _this.syncErrorValue = null;\n _this.syncErrorThrown = false;\n _this.syncErrorThrowable = false;\n _this.isStopped = false;\n switch (arguments.length) {\n case 0:\n _this.destination = emptyObserver;\n break;\n case 1:\n if (!destinationOrNext) {\n _this.destination = emptyObserver;\n break;\n }\n if (typeof destinationOrNext === 'object') {\n if (destinationOrNext instanceof Subscriber) {\n _this.syncErrorThrowable = destinationOrNext.syncErrorThrowable;\n _this.destination = destinationOrNext;\n destinationOrNext.add(_this);\n }\n else {\n _this.syncErrorThrowable = true;\n _this.destination = new SafeSubscriber(_this, destinationOrNext);\n }\n break;\n }\n default:\n _this.syncErrorThrowable = true;\n _this.destination = new SafeSubscriber(_this, destinationOrNext, error, complete);\n break;\n }\n return _this;\n }\n Subscriber.prototype[rxSubscriberSymbol] = function () { return this; };\n Subscriber.create = function (next, error, complete) {\n var subscriber = new Subscriber(next, error, complete);\n subscriber.syncErrorThrowable = false;\n return subscriber;\n };\n Subscriber.prototype.next = function (value) {\n if (!this.isStopped) {\n this._next(value);\n }\n };\n Subscriber.prototype.error = function (err) {\n if (!this.isStopped) {\n this.isStopped = true;\n this._error(err);\n }\n };\n Subscriber.prototype.complete = function () {\n if (!this.isStopped) {\n this.isStopped = true;\n this._complete();\n }\n };\n Subscriber.prototype.unsubscribe = function () {\n if (this.closed) {\n return;\n }\n this.isStopped = true;\n _super.prototype.unsubscribe.call(this);\n };\n Subscriber.prototype._next = function (value) {\n this.destination.next(value);\n };\n Subscriber.prototype._error = function (err) {\n this.destination.error(err);\n this.unsubscribe();\n };\n Subscriber.prototype._complete = function () {\n this.destination.complete();\n this.unsubscribe();\n };\n Subscriber.prototype._unsubscribeAndRecycle = function () {\n var _parentOrParents = this._parentOrParents;\n this._parentOrParents = null;\n this.unsubscribe();\n this.closed = false;\n this.isStopped = false;\n this._parentOrParents = _parentOrParents;\n return this;\n };\n return Subscriber;\n}(Subscription));\nexport { Subscriber };\nvar SafeSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(SafeSubscriber, _super);\n function SafeSubscriber(_parentSubscriber, observerOrNext, error, complete) {\n var _this = _super.call(this) || this;\n _this._parentSubscriber = _parentSubscriber;\n var next;\n var context = _this;\n if (isFunction(observerOrNext)) {\n next = observerOrNext;\n }\n else if (observerOrNext) {\n next = observerOrNext.next;\n error = observerOrNext.error;\n complete = observerOrNext.complete;\n if (observerOrNext !== emptyObserver) {\n context = Object.create(observerOrNext);\n if (isFunction(context.unsubscribe)) {\n _this.add(context.unsubscribe.bind(context));\n }\n context.unsubscribe = _this.unsubscribe.bind(_this);\n }\n }\n _this._context = context;\n _this._next = next;\n _this._error = error;\n _this._complete = complete;\n return _this;\n }\n SafeSubscriber.prototype.next = function (value) {\n if (!this.isStopped && this._next) {\n var _parentSubscriber = this._parentSubscriber;\n if (!config.useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) {\n this.__tryOrUnsub(this._next, value);\n }\n else if (this.__tryOrSetError(_parentSubscriber, this._next, value)) {\n this.unsubscribe();\n }\n }\n };\n SafeSubscriber.prototype.error = function (err) {\n if (!this.isStopped) {\n var _parentSubscriber = this._parentSubscriber;\n var useDeprecatedSynchronousErrorHandling = config.useDeprecatedSynchronousErrorHandling;\n if (this._error) {\n if (!useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) {\n this.__tryOrUnsub(this._error, err);\n this.unsubscribe();\n }\n else {\n this.__tryOrSetError(_parentSubscriber, this._error, err);\n this.unsubscribe();\n }\n }\n else if (!_parentSubscriber.syncErrorThrowable) {\n this.unsubscribe();\n if (useDeprecatedSynchronousErrorHandling) {\n throw err;\n }\n hostReportError(err);\n }\n else {\n if (useDeprecatedSynchronousErrorHandling) {\n _parentSubscriber.syncErrorValue = err;\n _parentSubscriber.syncErrorThrown = true;\n }\n else {\n hostReportError(err);\n }\n this.unsubscribe();\n }\n }\n };\n SafeSubscriber.prototype.complete = function () {\n var _this = this;\n if (!this.isStopped) {\n var _parentSubscriber = this._parentSubscriber;\n if (this._complete) {\n var wrappedComplete = function () { return _this._complete.call(_this._context); };\n if (!config.useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) {\n this.__tryOrUnsub(wrappedComplete);\n this.unsubscribe();\n }\n else {\n this.__tryOrSetError(_parentSubscriber, wrappedComplete);\n this.unsubscribe();\n }\n }\n else {\n this.unsubscribe();\n }\n }\n };\n SafeSubscriber.prototype.__tryOrUnsub = function (fn, value) {\n try {\n fn.call(this._context, value);\n }\n catch (err) {\n this.unsubscribe();\n if (config.useDeprecatedSynchronousErrorHandling) {\n throw err;\n }\n else {\n hostReportError(err);\n }\n }\n };\n SafeSubscriber.prototype.__tryOrSetError = function (parent, fn, value) {\n if (!config.useDeprecatedSynchronousErrorHandling) {\n throw new Error('bad call');\n }\n try {\n fn.call(this._context, value);\n }\n catch (err) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n parent.syncErrorValue = err;\n parent.syncErrorThrown = true;\n return true;\n }\n else {\n hostReportError(err);\n return true;\n }\n }\n return false;\n };\n SafeSubscriber.prototype._unsubscribe = function () {\n var _parentSubscriber = this._parentSubscriber;\n this._context = null;\n this._parentSubscriber = null;\n _parentSubscriber.unsubscribe();\n };\n return SafeSubscriber;\n}(Subscriber));\nexport { SafeSubscriber };\n//# sourceMappingURL=Subscriber.js.map\n","/** PURE_IMPORTS_START _util_canReportError,_util_toSubscriber,_symbol_observable,_util_pipe,_config PURE_IMPORTS_END */\nimport { canReportError } from './util/canReportError';\nimport { toSubscriber } from './util/toSubscriber';\nimport { observable as Symbol_observable } from './symbol/observable';\nimport { pipeFromArray } from './util/pipe';\nimport { config } from './config';\nvar Observable = /*@__PURE__*/ (function () {\n function Observable(subscribe) {\n this._isScalar = false;\n if (subscribe) {\n this._subscribe = subscribe;\n }\n }\n Observable.prototype.lift = function (operator) {\n var observable = new Observable();\n observable.source = this;\n observable.operator = operator;\n return observable;\n };\n Observable.prototype.subscribe = function (observerOrNext, error, complete) {\n var operator = this.operator;\n var sink = toSubscriber(observerOrNext, error, complete);\n if (operator) {\n sink.add(operator.call(sink, this.source));\n }\n else {\n sink.add(this.source || (config.useDeprecatedSynchronousErrorHandling && !sink.syncErrorThrowable) ?\n this._subscribe(sink) :\n this._trySubscribe(sink));\n }\n if (config.useDeprecatedSynchronousErrorHandling) {\n if (sink.syncErrorThrowable) {\n sink.syncErrorThrowable = false;\n if (sink.syncErrorThrown) {\n throw sink.syncErrorValue;\n }\n }\n }\n return sink;\n };\n Observable.prototype._trySubscribe = function (sink) {\n try {\n return this._subscribe(sink);\n }\n catch (err) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n sink.syncErrorThrown = true;\n sink.syncErrorValue = err;\n }\n if (canReportError(sink)) {\n sink.error(err);\n }\n else {\n console.warn(err);\n }\n }\n };\n Observable.prototype.forEach = function (next, promiseCtor) {\n var _this = this;\n promiseCtor = getPromiseCtor(promiseCtor);\n return new promiseCtor(function (resolve, reject) {\n var subscription;\n subscription = _this.subscribe(function (value) {\n try {\n next(value);\n }\n catch (err) {\n reject(err);\n if (subscription) {\n subscription.unsubscribe();\n }\n }\n }, reject, resolve);\n });\n };\n Observable.prototype._subscribe = function (subscriber) {\n var source = this.source;\n return source && source.subscribe(subscriber);\n };\n Observable.prototype[Symbol_observable] = function () {\n return this;\n };\n Observable.prototype.pipe = function () {\n var operations = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n operations[_i] = arguments[_i];\n }\n if (operations.length === 0) {\n return this;\n }\n return pipeFromArray(operations)(this);\n };\n Observable.prototype.toPromise = function (promiseCtor) {\n var _this = this;\n promiseCtor = getPromiseCtor(promiseCtor);\n return new promiseCtor(function (resolve, reject) {\n var value;\n _this.subscribe(function (x) { return value = x; }, function (err) { return reject(err); }, function () { return resolve(value); });\n });\n };\n Observable.create = function (subscribe) {\n return new Observable(subscribe);\n };\n return Observable;\n}());\nexport { Observable };\nfunction getPromiseCtor(promiseCtor) {\n if (!promiseCtor) {\n promiseCtor = config.Promise || Promise;\n }\n if (!promiseCtor) {\n throw new Error('no Promise impl found');\n }\n return promiseCtor;\n}\n//# sourceMappingURL=Observable.js.map\n","/** PURE_IMPORTS_START _Subscriber,_symbol_rxSubscriber,_Observer PURE_IMPORTS_END */\nimport { Subscriber } from '../Subscriber';\nimport { rxSubscriber as rxSubscriberSymbol } from '../symbol/rxSubscriber';\nimport { empty as emptyObserver } from '../Observer';\nexport function toSubscriber(nextOrObserver, error, complete) {\n if (nextOrObserver) {\n if (nextOrObserver instanceof Subscriber) {\n return nextOrObserver;\n }\n if (nextOrObserver[rxSubscriberSymbol]) {\n return nextOrObserver[rxSubscriberSymbol]();\n }\n }\n if (!nextOrObserver && !error && !complete) {\n return new Subscriber(emptyObserver);\n }\n return new Subscriber(nextOrObserver, error, complete);\n}\n//# sourceMappingURL=toSubscriber.js.map\n","/** PURE_IMPORTS_START _Subscriber PURE_IMPORTS_END */\nimport { Subscriber } from '../Subscriber';\nexport function canReportError(observer) {\n while (observer) {\n var _a = observer, closed_1 = _a.closed, destination = _a.destination, isStopped = _a.isStopped;\n if (closed_1 || isStopped) {\n return false;\n }\n else if (destination && destination instanceof Subscriber) {\n observer = destination;\n }\n else {\n observer = null;\n }\n }\n return true;\n}\n//# sourceMappingURL=canReportError.js.map\n","/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Subscriber } from '../Subscriber';\nexport function map(project, thisArg) {\n return function mapOperation(source) {\n if (typeof project !== 'function') {\n throw new TypeError('argument is not a function. Are you looking for `mapTo()`?');\n }\n return source.lift(new MapOperator(project, thisArg));\n };\n}\nvar MapOperator = /*@__PURE__*/ (function () {\n function MapOperator(project, thisArg) {\n this.project = project;\n this.thisArg = thisArg;\n }\n MapOperator.prototype.call = function (subscriber, source) {\n return source.subscribe(new MapSubscriber(subscriber, this.project, this.thisArg));\n };\n return MapOperator;\n}());\nexport { MapOperator };\nvar MapSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(MapSubscriber, _super);\n function MapSubscriber(destination, project, thisArg) {\n var _this = _super.call(this, destination) || this;\n _this.project = project;\n _this.count = 0;\n _this.thisArg = thisArg || _this;\n return _this;\n }\n MapSubscriber.prototype._next = function (value) {\n var result;\n try {\n result = this.project.call(this.thisArg, value, this.count++);\n }\n catch (err) {\n this.destination.error(err);\n return;\n }\n this.destination.next(result);\n };\n return MapSubscriber;\n}(Subscriber));\n//# sourceMappingURL=map.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nvar UnsubscriptionErrorImpl = /*@__PURE__*/ (function () {\n function UnsubscriptionErrorImpl(errors) {\n Error.call(this);\n this.message = errors ?\n errors.length + \" errors occurred during unsubscription:\\n\" + errors.map(function (err, i) { return i + 1 + \") \" + err.toString(); }).join('\\n ') : '';\n this.name = 'UnsubscriptionError';\n this.errors = errors;\n return this;\n }\n UnsubscriptionErrorImpl.prototype = /*@__PURE__*/ Object.create(Error.prototype);\n return UnsubscriptionErrorImpl;\n})();\nexport var UnsubscriptionError = UnsubscriptionErrorImpl;\n//# sourceMappingURL=UnsubscriptionError.js.map\n","/** PURE_IMPORTS_START _util_isArray,_util_isObject,_util_isFunction,_util_UnsubscriptionError PURE_IMPORTS_END */\nimport { isArray } from './util/isArray';\nimport { isObject } from './util/isObject';\nimport { isFunction } from './util/isFunction';\nimport { UnsubscriptionError } from './util/UnsubscriptionError';\nvar Subscription = /*@__PURE__*/ (function () {\n function Subscription(unsubscribe) {\n this.closed = false;\n this._parentOrParents = null;\n this._subscriptions = null;\n if (unsubscribe) {\n this._unsubscribe = unsubscribe;\n }\n }\n Subscription.prototype.unsubscribe = function () {\n var errors;\n if (this.closed) {\n return;\n }\n var _a = this, _parentOrParents = _a._parentOrParents, _unsubscribe = _a._unsubscribe, _subscriptions = _a._subscriptions;\n this.closed = true;\n this._parentOrParents = null;\n this._subscriptions = null;\n if (_parentOrParents instanceof Subscription) {\n _parentOrParents.remove(this);\n }\n else if (_parentOrParents !== null) {\n for (var index = 0; index < _parentOrParents.length; ++index) {\n var parent_1 = _parentOrParents[index];\n parent_1.remove(this);\n }\n }\n if (isFunction(_unsubscribe)) {\n try {\n _unsubscribe.call(this);\n }\n catch (e) {\n errors = e instanceof UnsubscriptionError ? flattenUnsubscriptionErrors(e.errors) : [e];\n }\n }\n if (isArray(_subscriptions)) {\n var index = -1;\n var len = _subscriptions.length;\n while (++index < len) {\n var sub = _subscriptions[index];\n if (isObject(sub)) {\n try {\n sub.unsubscribe();\n }\n catch (e) {\n errors = errors || [];\n if (e instanceof UnsubscriptionError) {\n errors = errors.concat(flattenUnsubscriptionErrors(e.errors));\n }\n else {\n errors.push(e);\n }\n }\n }\n }\n }\n if (errors) {\n throw new UnsubscriptionError(errors);\n }\n };\n Subscription.prototype.add = function (teardown) {\n var subscription = teardown;\n if (!teardown) {\n return Subscription.EMPTY;\n }\n switch (typeof teardown) {\n case 'function':\n subscription = new Subscription(teardown);\n case 'object':\n if (subscription === this || subscription.closed || typeof subscription.unsubscribe !== 'function') {\n return subscription;\n }\n else if (this.closed) {\n subscription.unsubscribe();\n return subscription;\n }\n else if (!(subscription instanceof Subscription)) {\n var tmp = subscription;\n subscription = new Subscription();\n subscription._subscriptions = [tmp];\n }\n break;\n default: {\n throw new Error('unrecognized teardown ' + teardown + ' added to Subscription.');\n }\n }\n var _parentOrParents = subscription._parentOrParents;\n if (_parentOrParents === null) {\n subscription._parentOrParents = this;\n }\n else if (_parentOrParents instanceof Subscription) {\n if (_parentOrParents === this) {\n return subscription;\n }\n subscription._parentOrParents = [_parentOrParents, this];\n }\n else if (_parentOrParents.indexOf(this) === -1) {\n _parentOrParents.push(this);\n }\n else {\n return subscription;\n }\n var subscriptions = this._subscriptions;\n if (subscriptions === null) {\n this._subscriptions = [subscription];\n }\n else {\n subscriptions.push(subscription);\n }\n return subscription;\n };\n Subscription.prototype.remove = function (subscription) {\n var subscriptions = this._subscriptions;\n if (subscriptions) {\n var subscriptionIndex = subscriptions.indexOf(subscription);\n if (subscriptionIndex !== -1) {\n subscriptions.splice(subscriptionIndex, 1);\n }\n }\n };\n Subscription.EMPTY = (function (empty) {\n empty.closed = true;\n return empty;\n }(new Subscription()));\n return Subscription;\n}());\nexport { Subscription };\nfunction flattenUnsubscriptionErrors(errors) {\n return errors.reduce(function (errs, err) { return errs.concat((err instanceof UnsubscriptionError) ? err.errors : err); }, []);\n}\n//# sourceMappingURL=Subscription.js.map\n","/** PURE_IMPORTS_START _InnerSubscriber,_subscribeTo,_Observable PURE_IMPORTS_END */\nimport { InnerSubscriber } from '../InnerSubscriber';\nimport { subscribeTo } from './subscribeTo';\nimport { Observable } from '../Observable';\nexport function subscribeToResult(outerSubscriber, result, outerValue, outerIndex, destination) {\n if (destination === void 0) {\n destination = new InnerSubscriber(outerSubscriber, outerValue, outerIndex);\n }\n if (destination.closed) {\n return undefined;\n }\n if (result instanceof Observable) {\n return result.subscribe(destination);\n }\n return subscribeTo(result)(destination);\n}\n//# sourceMappingURL=subscribeToResult.js.map\n","/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Subscriber } from './Subscriber';\nvar OuterSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(OuterSubscriber, _super);\n function OuterSubscriber() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n OuterSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n this.destination.next(innerValue);\n };\n OuterSubscriber.prototype.notifyError = function (error, innerSub) {\n this.destination.error(error);\n };\n OuterSubscriber.prototype.notifyComplete = function (innerSub) {\n this.destination.complete();\n };\n return OuterSubscriber;\n}(Subscriber));\nexport { OuterSubscriber };\n//# sourceMappingURL=OuterSubscriber.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nvar _enable_super_gross_mode_that_will_cause_bad_things = false;\nexport var config = {\n Promise: undefined,\n set useDeprecatedSynchronousErrorHandling(value) {\n if (value) {\n var error = /*@__PURE__*/ new Error();\n /*@__PURE__*/ console.warn('DEPRECATED! RxJS was set to use deprecated synchronous error handling behavior by code at: \\n' + error.stack);\n }\n else if (_enable_super_gross_mode_that_will_cause_bad_things) {\n /*@__PURE__*/ console.log('RxJS: Back to a better error behavior. Thank you. <3');\n }\n _enable_super_gross_mode_that_will_cause_bad_things = value;\n },\n get useDeprecatedSynchronousErrorHandling() {\n return _enable_super_gross_mode_that_will_cause_bad_things;\n },\n};\n//# sourceMappingURL=config.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nvar __window = typeof window !== 'undefined' && window;\nvar __self = typeof self !== 'undefined' && typeof WorkerGlobalScope !== 'undefined' &&\n self instanceof WorkerGlobalScope && self;\nvar __global = typeof global !== 'undefined' && global;\nvar _root = __window || __global || __self;\n/*@__PURE__*/ (function () {\n if (!_root) {\n throw /*@__PURE__*/ new Error('RxJS could not find any global context (window, self, global)');\n }\n})();\nexport { _root as root };\n//# sourceMappingURL=root.js.map\n","import _isPlaceholder from './_isPlaceholder.js';\n\n/**\n * Optimized internal one-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\nexport default function _curry1(fn) {\n return function f1(a) {\n if (arguments.length === 0 || _isPlaceholder(a)) {\n return f1;\n } else {\n return fn.apply(this, arguments);\n }\n };\n}","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport function noop() { }\n//# sourceMappingURL=noop.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport function isFunction(x) {\n return typeof x === 'function';\n}\n//# sourceMappingURL=isFunction.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport var observable = /*@__PURE__*/ (function () { return typeof Symbol === 'function' && Symbol.observable || '@@observable'; })();\n//# sourceMappingURL=observable.js.map\n","/** PURE_IMPORTS_START _Observable PURE_IMPORTS_END */\nimport { Observable } from '../Observable';\nexport var EMPTY = /*@__PURE__*/ new Observable(function (subscriber) { return subscriber.complete(); });\nexport function empty(scheduler) {\n return scheduler ? emptyScheduled(scheduler) : EMPTY;\n}\nfunction emptyScheduled(scheduler) {\n return new Observable(function (subscriber) { return scheduler.schedule(function () { return subscriber.complete(); }); });\n}\n//# sourceMappingURL=empty.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nvar ObjectUnsubscribedErrorImpl = /*@__PURE__*/ (function () {\n function ObjectUnsubscribedErrorImpl() {\n Error.call(this);\n this.message = 'object unsubscribed';\n this.name = 'ObjectUnsubscribedError';\n return this;\n }\n ObjectUnsubscribedErrorImpl.prototype = /*@__PURE__*/ Object.create(Error.prototype);\n return ObjectUnsubscribedErrorImpl;\n})();\nexport var ObjectUnsubscribedError = ObjectUnsubscribedErrorImpl;\n//# sourceMappingURL=ObjectUnsubscribedError.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport function hostReportError(err) {\n setTimeout(function () { throw err; }, 0);\n}\n//# sourceMappingURL=hostReportError.js.map\n","/** PURE_IMPORTS_START tslib,_OuterSubscriber,_InnerSubscriber,_util_subscribeToResult,_map,_observable_from PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { OuterSubscriber } from '../OuterSubscriber';\nimport { InnerSubscriber } from '../InnerSubscriber';\nimport { subscribeToResult } from '../util/subscribeToResult';\nimport { map } from './map';\nimport { from } from '../observable/from';\nexport function switchMap(project, resultSelector) {\n if (typeof resultSelector === 'function') {\n return function (source) { return source.pipe(switchMap(function (a, i) { return from(project(a, i)).pipe(map(function (b, ii) { return resultSelector(a, b, i, ii); })); })); };\n }\n return function (source) { return source.lift(new SwitchMapOperator(project)); };\n}\nvar SwitchMapOperator = /*@__PURE__*/ (function () {\n function SwitchMapOperator(project) {\n this.project = project;\n }\n SwitchMapOperator.prototype.call = function (subscriber, source) {\n return source.subscribe(new SwitchMapSubscriber(subscriber, this.project));\n };\n return SwitchMapOperator;\n}());\nvar SwitchMapSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(SwitchMapSubscriber, _super);\n function SwitchMapSubscriber(destination, project) {\n var _this = _super.call(this, destination) || this;\n _this.project = project;\n _this.index = 0;\n return _this;\n }\n SwitchMapSubscriber.prototype._next = function (value) {\n var result;\n var index = this.index++;\n try {\n result = this.project(value, index);\n }\n catch (error) {\n this.destination.error(error);\n return;\n }\n this._innerSub(result, value, index);\n };\n SwitchMapSubscriber.prototype._innerSub = function (result, value, index) {\n var innerSubscription = this.innerSubscription;\n if (innerSubscription) {\n innerSubscription.unsubscribe();\n }\n var innerSubscriber = new InnerSubscriber(this, undefined, undefined);\n var destination = this.destination;\n destination.add(innerSubscriber);\n this.innerSubscription = subscribeToResult(this, result, value, index, innerSubscriber);\n };\n SwitchMapSubscriber.prototype._complete = function () {\n var innerSubscription = this.innerSubscription;\n if (!innerSubscription || innerSubscription.closed) {\n _super.prototype._complete.call(this);\n }\n this.unsubscribe();\n };\n SwitchMapSubscriber.prototype._unsubscribe = function () {\n this.innerSubscription = null;\n };\n SwitchMapSubscriber.prototype.notifyComplete = function (innerSub) {\n var destination = this.destination;\n destination.remove(innerSub);\n this.innerSubscription = null;\n if (this.isStopped) {\n _super.prototype._complete.call(this);\n }\n };\n SwitchMapSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n this.destination.next(innerValue);\n };\n return SwitchMapSubscriber;\n}(OuterSubscriber));\n//# sourceMappingURL=switchMap.js.map\n","/** PURE_IMPORTS_START tslib,_Observable,_Subscriber,_Subscription,_util_ObjectUnsubscribedError,_SubjectSubscription,_internal_symbol_rxSubscriber PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Observable } from './Observable';\nimport { Subscriber } from './Subscriber';\nimport { Subscription } from './Subscription';\nimport { ObjectUnsubscribedError } from './util/ObjectUnsubscribedError';\nimport { SubjectSubscription } from './SubjectSubscription';\nimport { rxSubscriber as rxSubscriberSymbol } from '../internal/symbol/rxSubscriber';\nvar SubjectSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(SubjectSubscriber, _super);\n function SubjectSubscriber(destination) {\n var _this = _super.call(this, destination) || this;\n _this.destination = destination;\n return _this;\n }\n return SubjectSubscriber;\n}(Subscriber));\nexport { SubjectSubscriber };\nvar Subject = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(Subject, _super);\n function Subject() {\n var _this = _super.call(this) || this;\n _this.observers = [];\n _this.closed = false;\n _this.isStopped = false;\n _this.hasError = false;\n _this.thrownError = null;\n return _this;\n }\n Subject.prototype[rxSubscriberSymbol] = function () {\n return new SubjectSubscriber(this);\n };\n Subject.prototype.lift = function (operator) {\n var subject = new AnonymousSubject(this, this);\n subject.operator = operator;\n return subject;\n };\n Subject.prototype.next = function (value) {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n if (!this.isStopped) {\n var observers = this.observers;\n var len = observers.length;\n var copy = observers.slice();\n for (var i = 0; i < len; i++) {\n copy[i].next(value);\n }\n }\n };\n Subject.prototype.error = function (err) {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n this.hasError = true;\n this.thrownError = err;\n this.isStopped = true;\n var observers = this.observers;\n var len = observers.length;\n var copy = observers.slice();\n for (var i = 0; i < len; i++) {\n copy[i].error(err);\n }\n this.observers.length = 0;\n };\n Subject.prototype.complete = function () {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n this.isStopped = true;\n var observers = this.observers;\n var len = observers.length;\n var copy = observers.slice();\n for (var i = 0; i < len; i++) {\n copy[i].complete();\n }\n this.observers.length = 0;\n };\n Subject.prototype.unsubscribe = function () {\n this.isStopped = true;\n this.closed = true;\n this.observers = null;\n };\n Subject.prototype._trySubscribe = function (subscriber) {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n else {\n return _super.prototype._trySubscribe.call(this, subscriber);\n }\n };\n Subject.prototype._subscribe = function (subscriber) {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n else if (this.hasError) {\n subscriber.error(this.thrownError);\n return Subscription.EMPTY;\n }\n else if (this.isStopped) {\n subscriber.complete();\n return Subscription.EMPTY;\n }\n else {\n this.observers.push(subscriber);\n return new SubjectSubscription(this, subscriber);\n }\n };\n Subject.prototype.asObservable = function () {\n var observable = new Observable();\n observable.source = this;\n return observable;\n };\n Subject.create = function (destination, source) {\n return new AnonymousSubject(destination, source);\n };\n return Subject;\n}(Observable));\nexport { Subject };\nvar AnonymousSubject = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(AnonymousSubject, _super);\n function AnonymousSubject(destination, source) {\n var _this = _super.call(this) || this;\n _this.destination = destination;\n _this.source = source;\n return _this;\n }\n AnonymousSubject.prototype.next = function (value) {\n var destination = this.destination;\n if (destination && destination.next) {\n destination.next(value);\n }\n };\n AnonymousSubject.prototype.error = function (err) {\n var destination = this.destination;\n if (destination && destination.error) {\n this.destination.error(err);\n }\n };\n AnonymousSubject.prototype.complete = function () {\n var destination = this.destination;\n if (destination && destination.complete) {\n this.destination.complete();\n }\n };\n AnonymousSubject.prototype._subscribe = function (subscriber) {\n var source = this.source;\n if (source) {\n return this.source.subscribe(subscriber);\n }\n else {\n return Subscription.EMPTY;\n }\n };\n return AnonymousSubject;\n}(Subject));\nexport { AnonymousSubject };\n//# sourceMappingURL=Subject.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport var isArray = /*@__PURE__*/ (function () { return Array.isArray || (function (x) { return x && typeof x.length === 'number'; }); })();\n//# sourceMappingURL=isArray.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport function isScheduler(value) {\n return value && typeof value.schedule === 'function';\n}\n//# sourceMappingURL=isScheduler.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport function getSymbolIterator() {\n if (typeof Symbol !== 'function' || !Symbol.iterator) {\n return '@@iterator';\n }\n return Symbol.iterator;\n}\nexport var iterator = /*@__PURE__*/ getSymbolIterator();\nexport var $$iterator = iterator;\n//# sourceMappingURL=iterator.js.map\n","/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Subscriber } from './Subscriber';\nvar InnerSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(InnerSubscriber, _super);\n function InnerSubscriber(parent, outerValue, outerIndex) {\n var _this = _super.call(this) || this;\n _this.parent = parent;\n _this.outerValue = outerValue;\n _this.outerIndex = outerIndex;\n _this.index = 0;\n return _this;\n }\n InnerSubscriber.prototype._next = function (value) {\n this.parent.notifyNext(this.outerValue, value, this.outerIndex, this.index++, this);\n };\n InnerSubscriber.prototype._error = function (error) {\n this.parent.notifyError(error, this);\n this.unsubscribe();\n };\n InnerSubscriber.prototype._complete = function () {\n this.parent.notifyComplete(this);\n this.unsubscribe();\n };\n return InnerSubscriber;\n}(Subscriber));\nexport { InnerSubscriber };\n//# sourceMappingURL=InnerSubscriber.js.map\n","export default function _isPlaceholder(a) {\n return a != null && typeof a === 'object' && a['@@functional/placeholder'] === true;\n}","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport var rxSubscriber = /*@__PURE__*/ (function () {\n return typeof Symbol === 'function'\n ? /*@__PURE__*/ Symbol('rxSubscriber')\n : '@@rxSubscriber_' + /*@__PURE__*/ Math.random();\n})();\nexport var $$rxSubscriber = rxSubscriber;\n//# sourceMappingURL=rxSubscriber.js.map\n","/** PURE_IMPORTS_START _observable_empty,_observable_of,_observable_throwError PURE_IMPORTS_END */\nimport { empty } from './observable/empty';\nimport { of } from './observable/of';\nimport { throwError } from './observable/throwError';\nexport var NotificationKind;\n/*@__PURE__*/ (function (NotificationKind) {\n NotificationKind[\"NEXT\"] = \"N\";\n NotificationKind[\"ERROR\"] = \"E\";\n NotificationKind[\"COMPLETE\"] = \"C\";\n})(NotificationKind || (NotificationKind = {}));\nvar Notification = /*@__PURE__*/ (function () {\n function Notification(kind, value, error) {\n this.kind = kind;\n this.value = value;\n this.error = error;\n this.hasValue = kind === 'N';\n }\n Notification.prototype.observe = function (observer) {\n switch (this.kind) {\n case 'N':\n return observer.next && observer.next(this.value);\n case 'E':\n return observer.error && observer.error(this.error);\n case 'C':\n return observer.complete && observer.complete();\n }\n };\n Notification.prototype.do = function (next, error, complete) {\n var kind = this.kind;\n switch (kind) {\n case 'N':\n return next && next(this.value);\n case 'E':\n return error && error(this.error);\n case 'C':\n return complete && complete();\n }\n };\n Notification.prototype.accept = function (nextOrObserver, error, complete) {\n if (nextOrObserver && typeof nextOrObserver.next === 'function') {\n return this.observe(nextOrObserver);\n }\n else {\n return this.do(nextOrObserver, error, complete);\n }\n };\n Notification.prototype.toObservable = function () {\n var kind = this.kind;\n switch (kind) {\n case 'N':\n return of(this.value);\n case 'E':\n return throwError(this.error);\n case 'C':\n return empty();\n }\n throw new Error('unexpected notification kind value');\n };\n Notification.createNext = function (value) {\n if (typeof value !== 'undefined') {\n return new Notification('N', value);\n }\n return Notification.undefinedValueNotification;\n };\n Notification.createError = function (err) {\n return new Notification('E', undefined, err);\n };\n Notification.createComplete = function () {\n return Notification.completeNotification;\n };\n Notification.completeNotification = new Notification('C');\n Notification.undefinedValueNotification = new Notification('N', undefined);\n return Notification;\n}());\nexport { Notification };\n//# sourceMappingURL=Notification.js.map\n","/** PURE_IMPORTS_START _Observable PURE_IMPORTS_END */\nimport { Observable } from '../Observable';\nexport function throwError(error, scheduler) {\n if (!scheduler) {\n return new Observable(function (subscriber) { return subscriber.error(error); });\n }\n else {\n return new Observable(function (subscriber) { return scheduler.schedule(dispatch, 0, { error: error, subscriber: subscriber }); });\n }\n}\nfunction dispatch(_a) {\n var error = _a.error, subscriber = _a.subscriber;\n subscriber.error(error);\n}\n//# sourceMappingURL=throwError.js.map\n","/** PURE_IMPORTS_START _noop PURE_IMPORTS_END */\nimport { noop } from './noop';\nexport function pipe() {\n var fns = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n fns[_i] = arguments[_i];\n }\n return pipeFromArray(fns);\n}\nexport function pipeFromArray(fns) {\n if (!fns) {\n return noop;\n }\n if (fns.length === 1) {\n return fns[0];\n }\n return function piped(input) {\n return fns.reduce(function (prev, fn) { return fn(prev); }, input);\n };\n}\n//# sourceMappingURL=pipe.js.map\n","/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Subscriber } from '../Subscriber';\nexport function distinctUntilChanged(compare, keySelector) {\n return function (source) { return source.lift(new DistinctUntilChangedOperator(compare, keySelector)); };\n}\nvar DistinctUntilChangedOperator = /*@__PURE__*/ (function () {\n function DistinctUntilChangedOperator(compare, keySelector) {\n this.compare = compare;\n this.keySelector = keySelector;\n }\n DistinctUntilChangedOperator.prototype.call = function (subscriber, source) {\n return source.subscribe(new DistinctUntilChangedSubscriber(subscriber, this.compare, this.keySelector));\n };\n return DistinctUntilChangedOperator;\n}());\nvar DistinctUntilChangedSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(DistinctUntilChangedSubscriber, _super);\n function DistinctUntilChangedSubscriber(destination, compare, keySelector) {\n var _this = _super.call(this, destination) || this;\n _this.keySelector = keySelector;\n _this.hasKey = false;\n if (typeof compare === 'function') {\n _this.compare = compare;\n }\n return _this;\n }\n DistinctUntilChangedSubscriber.prototype.compare = function (x, y) {\n return x === y;\n };\n DistinctUntilChangedSubscriber.prototype._next = function (value) {\n var key;\n try {\n var keySelector = this.keySelector;\n key = keySelector ? keySelector(value) : value;\n }\n catch (err) {\n return this.destination.error(err);\n }\n var result = false;\n if (this.hasKey) {\n try {\n var compare = this.compare;\n result = compare(this.key, key);\n }\n catch (err) {\n return this.destination.error(err);\n }\n }\n else {\n this.hasKey = true;\n }\n if (!result) {\n this.key = key;\n this.destination.next(value);\n }\n };\n return DistinctUntilChangedSubscriber;\n}(Subscriber));\n//# sourceMappingURL=distinctUntilChanged.js.map\n","/** PURE_IMPORTS_START _Observable,_Subscription PURE_IMPORTS_END */\nimport { Observable } from '../Observable';\nimport { Subscription } from '../Subscription';\nexport function scheduleArray(input, scheduler) {\n return new Observable(function (subscriber) {\n var sub = new Subscription();\n var i = 0;\n sub.add(scheduler.schedule(function () {\n if (i === input.length) {\n subscriber.complete();\n return;\n }\n subscriber.next(input[i++]);\n if (!subscriber.closed) {\n sub.add(this.schedule());\n }\n }));\n return sub;\n });\n}\n//# sourceMappingURL=scheduleArray.js.map\n","/** PURE_IMPORTS_START _Observable,_util_subscribeToArray,_scheduled_scheduleArray PURE_IMPORTS_END */\nimport { Observable } from '../Observable';\nimport { subscribeToArray } from '../util/subscribeToArray';\nimport { scheduleArray } from '../scheduled/scheduleArray';\nexport function fromArray(input, scheduler) {\n if (!scheduler) {\n return new Observable(subscribeToArray(input));\n }\n else {\n return scheduleArray(input, scheduler);\n }\n}\n//# sourceMappingURL=fromArray.js.map\n","/** PURE_IMPORTS_START _scheduleObservable,_schedulePromise,_scheduleArray,_scheduleIterable,_util_isInteropObservable,_util_isPromise,_util_isArrayLike,_util_isIterable PURE_IMPORTS_END */\nimport { scheduleObservable } from './scheduleObservable';\nimport { schedulePromise } from './schedulePromise';\nimport { scheduleArray } from './scheduleArray';\nimport { scheduleIterable } from './scheduleIterable';\nimport { isInteropObservable } from '../util/isInteropObservable';\nimport { isPromise } from '../util/isPromise';\nimport { isArrayLike } from '../util/isArrayLike';\nimport { isIterable } from '../util/isIterable';\nexport function scheduled(input, scheduler) {\n if (input != null) {\n if (isInteropObservable(input)) {\n return scheduleObservable(input, scheduler);\n }\n else if (isPromise(input)) {\n return schedulePromise(input, scheduler);\n }\n else if (isArrayLike(input)) {\n return scheduleArray(input, scheduler);\n }\n else if (isIterable(input) || typeof input === 'string') {\n return scheduleIterable(input, scheduler);\n }\n }\n throw new TypeError((input !== null && typeof input || input) + ' is not observable');\n}\n//# sourceMappingURL=scheduled.js.map\n","/** PURE_IMPORTS_START _symbol_observable PURE_IMPORTS_END */\nimport { observable as Symbol_observable } from '../symbol/observable';\nexport function isInteropObservable(input) {\n return input && typeof input[Symbol_observable] === 'function';\n}\n//# sourceMappingURL=isInteropObservable.js.map\n","/** PURE_IMPORTS_START _Observable,_Subscription,_symbol_observable PURE_IMPORTS_END */\nimport { Observable } from '../Observable';\nimport { Subscription } from '../Subscription';\nimport { observable as Symbol_observable } from '../symbol/observable';\nexport function scheduleObservable(input, scheduler) {\n return new Observable(function (subscriber) {\n var sub = new Subscription();\n sub.add(scheduler.schedule(function () {\n var observable = input[Symbol_observable]();\n sub.add(observable.subscribe({\n next: function (value) { sub.add(scheduler.schedule(function () { return subscriber.next(value); })); },\n error: function (err) { sub.add(scheduler.schedule(function () { return subscriber.error(err); })); },\n complete: function () { sub.add(scheduler.schedule(function () { return subscriber.complete(); })); },\n }));\n }));\n return sub;\n });\n}\n//# sourceMappingURL=scheduleObservable.js.map\n","/** PURE_IMPORTS_START _Observable,_Subscription PURE_IMPORTS_END */\nimport { Observable } from '../Observable';\nimport { Subscription } from '../Subscription';\nexport function schedulePromise(input, scheduler) {\n return new Observable(function (subscriber) {\n var sub = new Subscription();\n sub.add(scheduler.schedule(function () {\n return input.then(function (value) {\n sub.add(scheduler.schedule(function () {\n subscriber.next(value);\n sub.add(scheduler.schedule(function () { return subscriber.complete(); }));\n }));\n }, function (err) {\n sub.add(scheduler.schedule(function () { return subscriber.error(err); }));\n });\n }));\n return sub;\n });\n}\n//# sourceMappingURL=schedulePromise.js.map\n","/** PURE_IMPORTS_START _symbol_iterator PURE_IMPORTS_END */\nimport { iterator as Symbol_iterator } from '../symbol/iterator';\nexport function isIterable(input) {\n return input && typeof input[Symbol_iterator] === 'function';\n}\n//# sourceMappingURL=isIterable.js.map\n","/** PURE_IMPORTS_START _Observable,_Subscription,_symbol_iterator PURE_IMPORTS_END */\nimport { Observable } from '../Observable';\nimport { Subscription } from '../Subscription';\nimport { iterator as Symbol_iterator } from '../symbol/iterator';\nexport function scheduleIterable(input, scheduler) {\n if (!input) {\n throw new Error('Iterable cannot be null');\n }\n return new Observable(function (subscriber) {\n var sub = new Subscription();\n var iterator;\n sub.add(function () {\n if (iterator && typeof iterator.return === 'function') {\n iterator.return();\n }\n });\n sub.add(scheduler.schedule(function () {\n iterator = input[Symbol_iterator]();\n sub.add(scheduler.schedule(function () {\n if (subscriber.closed) {\n return;\n }\n var value;\n var done;\n try {\n var result = iterator.next();\n value = result.value;\n done = result.done;\n }\n catch (err) {\n subscriber.error(err);\n return;\n }\n if (done) {\n subscriber.complete();\n }\n else {\n subscriber.next(value);\n this.schedule();\n }\n }));\n }));\n return sub;\n });\n}\n//# sourceMappingURL=scheduleIterable.js.map\n","/** PURE_IMPORTS_START _Observable,_util_subscribeTo,_scheduled_scheduled PURE_IMPORTS_END */\nimport { Observable } from '../Observable';\nimport { subscribeTo } from '../util/subscribeTo';\nimport { scheduled } from '../scheduled/scheduled';\nexport function from(input, scheduler) {\n if (!scheduler) {\n if (input instanceof Observable) {\n return input;\n }\n return new Observable(subscribeTo(input));\n }\n else {\n return scheduled(input, scheduler);\n }\n}\n//# sourceMappingURL=from.js.map\n","var Scheduler = /*@__PURE__*/ (function () {\n function Scheduler(SchedulerAction, now) {\n if (now === void 0) {\n now = Scheduler.now;\n }\n this.SchedulerAction = SchedulerAction;\n this.now = now;\n }\n Scheduler.prototype.schedule = function (work, delay, state) {\n if (delay === void 0) {\n delay = 0;\n }\n return new this.SchedulerAction(this, work).schedule(state, delay);\n };\n Scheduler.now = function () { return Date.now(); };\n return Scheduler;\n}());\nexport { Scheduler };\n//# sourceMappingURL=Scheduler.js.map\n","/** PURE_IMPORTS_START tslib,_Scheduler PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Scheduler } from '../Scheduler';\nvar AsyncScheduler = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(AsyncScheduler, _super);\n function AsyncScheduler(SchedulerAction, now) {\n if (now === void 0) {\n now = Scheduler.now;\n }\n var _this = _super.call(this, SchedulerAction, function () {\n if (AsyncScheduler.delegate && AsyncScheduler.delegate !== _this) {\n return AsyncScheduler.delegate.now();\n }\n else {\n return now();\n }\n }) || this;\n _this.actions = [];\n _this.active = false;\n _this.scheduled = undefined;\n return _this;\n }\n AsyncScheduler.prototype.schedule = function (work, delay, state) {\n if (delay === void 0) {\n delay = 0;\n }\n if (AsyncScheduler.delegate && AsyncScheduler.delegate !== this) {\n return AsyncScheduler.delegate.schedule(work, delay, state);\n }\n else {\n return _super.prototype.schedule.call(this, work, delay, state);\n }\n };\n AsyncScheduler.prototype.flush = function (action) {\n var actions = this.actions;\n if (this.active) {\n actions.push(action);\n return;\n }\n var error;\n this.active = true;\n do {\n if (error = action.execute(action.state, action.delay)) {\n break;\n }\n } while (action = actions.shift());\n this.active = false;\n if (error) {\n while (action = actions.shift()) {\n action.unsubscribe();\n }\n throw error;\n }\n };\n return AsyncScheduler;\n}(Scheduler));\nexport { AsyncScheduler };\n//# sourceMappingURL=AsyncScheduler.js.map\n","/** PURE_IMPORTS_START tslib,_Subscription PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Subscription } from '../Subscription';\nvar Action = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(Action, _super);\n function Action(scheduler, work) {\n return _super.call(this) || this;\n }\n Action.prototype.schedule = function (state, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n return this;\n };\n return Action;\n}(Subscription));\nexport { Action };\n//# sourceMappingURL=Action.js.map\n","/** PURE_IMPORTS_START tslib,_Action PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Action } from './Action';\nvar AsyncAction = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(AsyncAction, _super);\n function AsyncAction(scheduler, work) {\n var _this = _super.call(this, scheduler, work) || this;\n _this.scheduler = scheduler;\n _this.work = work;\n _this.pending = false;\n return _this;\n }\n AsyncAction.prototype.schedule = function (state, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n if (this.closed) {\n return this;\n }\n this.state = state;\n var id = this.id;\n var scheduler = this.scheduler;\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, delay);\n }\n this.pending = true;\n this.delay = delay;\n this.id = this.id || this.requestAsyncId(scheduler, this.id, delay);\n return this;\n };\n AsyncAction.prototype.requestAsyncId = function (scheduler, id, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n return setInterval(scheduler.flush.bind(scheduler, this), delay);\n };\n AsyncAction.prototype.recycleAsyncId = function (scheduler, id, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n if (delay !== null && this.delay === delay && this.pending === false) {\n return id;\n }\n clearInterval(id);\n return undefined;\n };\n AsyncAction.prototype.execute = function (state, delay) {\n if (this.closed) {\n return new Error('executing a cancelled action');\n }\n this.pending = false;\n var error = this._execute(state, delay);\n if (error) {\n return error;\n }\n else if (this.pending === false && this.id != null) {\n this.id = this.recycleAsyncId(this.scheduler, this.id, null);\n }\n };\n AsyncAction.prototype._execute = function (state, delay) {\n var errored = false;\n var errorValue = undefined;\n try {\n this.work(state);\n }\n catch (e) {\n errored = true;\n errorValue = !!e && e || new Error(e);\n }\n if (errored) {\n this.unsubscribe();\n return errorValue;\n }\n };\n AsyncAction.prototype._unsubscribe = function () {\n var id = this.id;\n var scheduler = this.scheduler;\n var actions = scheduler.actions;\n var index = actions.indexOf(this);\n this.work = null;\n this.state = null;\n this.pending = false;\n this.scheduler = null;\n if (index !== -1) {\n actions.splice(index, 1);\n }\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, null);\n }\n this.delay = null;\n };\n return AsyncAction;\n}(Action));\nexport { AsyncAction };\n//# sourceMappingURL=AsyncAction.js.map\n","/** PURE_IMPORTS_START _config,_util_hostReportError PURE_IMPORTS_END */\nimport { config } from './config';\nimport { hostReportError } from './util/hostReportError';\nexport var empty = {\n closed: true,\n next: function (value) { },\n error: function (err) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n throw err;\n }\n else {\n hostReportError(err);\n }\n },\n complete: function () { }\n};\n//# sourceMappingURL=Observer.js.map\n","/** PURE_IMPORTS_START _util_isScheduler,_fromArray,_scheduled_scheduleArray PURE_IMPORTS_END */\nimport { isScheduler } from '../util/isScheduler';\nimport { fromArray } from './fromArray';\nimport { scheduleArray } from '../scheduled/scheduleArray';\nexport function of() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var scheduler = args[args.length - 1];\n if (isScheduler(scheduler)) {\n args.pop();\n return scheduleArray(args, scheduler);\n }\n else {\n return fromArray(args);\n }\n}\n//# sourceMappingURL=of.js.map\n","/** PURE_IMPORTS_START tslib,_Subscriber,_Notification PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Subscriber } from '../Subscriber';\nimport { Notification } from '../Notification';\nexport function observeOn(scheduler, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n return function observeOnOperatorFunction(source) {\n return source.lift(new ObserveOnOperator(scheduler, delay));\n };\n}\nvar ObserveOnOperator = /*@__PURE__*/ (function () {\n function ObserveOnOperator(scheduler, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n this.scheduler = scheduler;\n this.delay = delay;\n }\n ObserveOnOperator.prototype.call = function (subscriber, source) {\n return source.subscribe(new ObserveOnSubscriber(subscriber, this.scheduler, this.delay));\n };\n return ObserveOnOperator;\n}());\nexport { ObserveOnOperator };\nvar ObserveOnSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(ObserveOnSubscriber, _super);\n function ObserveOnSubscriber(destination, scheduler, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n var _this = _super.call(this, destination) || this;\n _this.scheduler = scheduler;\n _this.delay = delay;\n return _this;\n }\n ObserveOnSubscriber.dispatch = function (arg) {\n var notification = arg.notification, destination = arg.destination;\n notification.observe(destination);\n this.unsubscribe();\n };\n ObserveOnSubscriber.prototype.scheduleMessage = function (notification) {\n var destination = this.destination;\n destination.add(this.scheduler.schedule(ObserveOnSubscriber.dispatch, this.delay, new ObserveOnMessage(notification, this.destination)));\n };\n ObserveOnSubscriber.prototype._next = function (value) {\n this.scheduleMessage(Notification.createNext(value));\n };\n ObserveOnSubscriber.prototype._error = function (err) {\n this.scheduleMessage(Notification.createError(err));\n this.unsubscribe();\n };\n ObserveOnSubscriber.prototype._complete = function () {\n this.scheduleMessage(Notification.createComplete());\n this.unsubscribe();\n };\n return ObserveOnSubscriber;\n}(Subscriber));\nexport { ObserveOnSubscriber };\nvar ObserveOnMessage = /*@__PURE__*/ (function () {\n function ObserveOnMessage(notification, destination) {\n this.notification = notification;\n this.destination = destination;\n }\n return ObserveOnMessage;\n}());\nexport { ObserveOnMessage };\n//# sourceMappingURL=observeOn.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport function isObject(x) {\n return x !== null && typeof x === 'object';\n}\n//# sourceMappingURL=isObject.js.map\n","/** PURE_IMPORTS_START tslib,_Subscription PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Subscription } from './Subscription';\nvar SubjectSubscription = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(SubjectSubscription, _super);\n function SubjectSubscription(subject, subscriber) {\n var _this = _super.call(this) || this;\n _this.subject = subject;\n _this.subscriber = subscriber;\n _this.closed = false;\n return _this;\n }\n SubjectSubscription.prototype.unsubscribe = function () {\n if (this.closed) {\n return;\n }\n this.closed = true;\n var subject = this.subject;\n var observers = subject.observers;\n this.subject = null;\n if (!observers || observers.length === 0 || subject.isStopped || subject.closed) {\n return;\n }\n var subscriberIndex = observers.indexOf(this.subscriber);\n if (subscriberIndex !== -1) {\n observers.splice(subscriberIndex, 1);\n }\n };\n return SubjectSubscription;\n}(Subscription));\nexport { SubjectSubscription };\n//# sourceMappingURL=SubjectSubscription.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport var isArrayLike = (function (x) { return x && typeof x.length === 'number' && typeof x !== 'function'; });\n//# sourceMappingURL=isArrayLike.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport var subscribeToArray = function (array) {\n return function (subscriber) {\n for (var i = 0, len = array.length; i < len && !subscriber.closed; i++) {\n subscriber.next(array[i]);\n }\n subscriber.complete();\n };\n};\n//# sourceMappingURL=subscribeToArray.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport function isPromise(value) {\n return !!value && typeof value.subscribe !== 'function' && typeof value.then === 'function';\n}\n//# sourceMappingURL=isPromise.js.map\n","/** PURE_IMPORTS_START _AsyncAction,_AsyncScheduler PURE_IMPORTS_END */\nimport { AsyncAction } from './AsyncAction';\nimport { AsyncScheduler } from './AsyncScheduler';\nexport var async = /*@__PURE__*/ new AsyncScheduler(AsyncAction);\n//# sourceMappingURL=async.js.map\n","/** PURE_IMPORTS_START _subscribeToArray,_subscribeToPromise,_subscribeToIterable,_subscribeToObservable,_isArrayLike,_isPromise,_isObject,_symbol_iterator,_symbol_observable PURE_IMPORTS_END */\nimport { subscribeToArray } from './subscribeToArray';\nimport { subscribeToPromise } from './subscribeToPromise';\nimport { subscribeToIterable } from './subscribeToIterable';\nimport { subscribeToObservable } from './subscribeToObservable';\nimport { isArrayLike } from './isArrayLike';\nimport { isPromise } from './isPromise';\nimport { isObject } from './isObject';\nimport { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { observable as Symbol_observable } from '../symbol/observable';\nexport var subscribeTo = function (result) {\n if (!!result && typeof result[Symbol_observable] === 'function') {\n return subscribeToObservable(result);\n }\n else if (isArrayLike(result)) {\n return subscribeToArray(result);\n }\n else if (isPromise(result)) {\n return subscribeToPromise(result);\n }\n else if (!!result && typeof result[Symbol_iterator] === 'function') {\n return subscribeToIterable(result);\n }\n else {\n var value = isObject(result) ? 'an invalid object' : \"'\" + result + \"'\";\n var msg = \"You provided \" + value + \" where a stream was expected.\"\n + ' You can provide an Observable, Promise, Array, or Iterable.';\n throw new TypeError(msg);\n }\n};\n//# sourceMappingURL=subscribeTo.js.map\n","/** PURE_IMPORTS_START _symbol_observable PURE_IMPORTS_END */\nimport { observable as Symbol_observable } from '../symbol/observable';\nexport var subscribeToObservable = function (obj) {\n return function (subscriber) {\n var obs = obj[Symbol_observable]();\n if (typeof obs.subscribe !== 'function') {\n throw new TypeError('Provided object does not correctly implement Symbol.observable');\n }\n else {\n return obs.subscribe(subscriber);\n }\n };\n};\n//# sourceMappingURL=subscribeToObservable.js.map\n","/** PURE_IMPORTS_START _hostReportError PURE_IMPORTS_END */\nimport { hostReportError } from './hostReportError';\nexport var subscribeToPromise = function (promise) {\n return function (subscriber) {\n promise.then(function (value) {\n if (!subscriber.closed) {\n subscriber.next(value);\n subscriber.complete();\n }\n }, function (err) { return subscriber.error(err); })\n .then(null, hostReportError);\n return subscriber;\n };\n};\n//# sourceMappingURL=subscribeToPromise.js.map\n","/** PURE_IMPORTS_START _symbol_iterator PURE_IMPORTS_END */\nimport { iterator as Symbol_iterator } from '../symbol/iterator';\nexport var subscribeToIterable = function (iterable) {\n return function (subscriber) {\n var iterator = iterable[Symbol_iterator]();\n do {\n var item = iterator.next();\n if (item.done) {\n subscriber.complete();\n break;\n }\n subscriber.next(item.value);\n if (subscriber.closed) {\n break;\n }\n } while (true);\n if (typeof iterator.return === 'function') {\n subscriber.add(function () {\n if (iterator.return) {\n iterator.return();\n }\n });\n }\n return subscriber;\n };\n};\n//# sourceMappingURL=subscribeToIterable.js.map\n","/** PURE_IMPORTS_START tslib,_util_subscribeToResult,_OuterSubscriber,_InnerSubscriber,_map,_observable_from PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { subscribeToResult } from '../util/subscribeToResult';\nimport { OuterSubscriber } from '../OuterSubscriber';\nimport { InnerSubscriber } from '../InnerSubscriber';\nimport { map } from './map';\nimport { from } from '../observable/from';\nexport function mergeMap(project, resultSelector, concurrent) {\n if (concurrent === void 0) {\n concurrent = Number.POSITIVE_INFINITY;\n }\n if (typeof resultSelector === 'function') {\n return function (source) { return source.pipe(mergeMap(function (a, i) { return from(project(a, i)).pipe(map(function (b, ii) { return resultSelector(a, b, i, ii); })); }, concurrent)); };\n }\n else if (typeof resultSelector === 'number') {\n concurrent = resultSelector;\n }\n return function (source) { return source.lift(new MergeMapOperator(project, concurrent)); };\n}\nvar MergeMapOperator = /*@__PURE__*/ (function () {\n function MergeMapOperator(project, concurrent) {\n if (concurrent === void 0) {\n concurrent = Number.POSITIVE_INFINITY;\n }\n this.project = project;\n this.concurrent = concurrent;\n }\n MergeMapOperator.prototype.call = function (observer, source) {\n return source.subscribe(new MergeMapSubscriber(observer, this.project, this.concurrent));\n };\n return MergeMapOperator;\n}());\nexport { MergeMapOperator };\nvar MergeMapSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(MergeMapSubscriber, _super);\n function MergeMapSubscriber(destination, project, concurrent) {\n if (concurrent === void 0) {\n concurrent = Number.POSITIVE_INFINITY;\n }\n var _this = _super.call(this, destination) || this;\n _this.project = project;\n _this.concurrent = concurrent;\n _this.hasCompleted = false;\n _this.buffer = [];\n _this.active = 0;\n _this.index = 0;\n return _this;\n }\n MergeMapSubscriber.prototype._next = function (value) {\n if (this.active < this.concurrent) {\n this._tryNext(value);\n }\n else {\n this.buffer.push(value);\n }\n };\n MergeMapSubscriber.prototype._tryNext = function (value) {\n var result;\n var index = this.index++;\n try {\n result = this.project(value, index);\n }\n catch (err) {\n this.destination.error(err);\n return;\n }\n this.active++;\n this._innerSub(result, value, index);\n };\n MergeMapSubscriber.prototype._innerSub = function (ish, value, index) {\n var innerSubscriber = new InnerSubscriber(this, undefined, undefined);\n var destination = this.destination;\n destination.add(innerSubscriber);\n subscribeToResult(this, ish, value, index, innerSubscriber);\n };\n MergeMapSubscriber.prototype._complete = function () {\n this.hasCompleted = true;\n if (this.active === 0 && this.buffer.length === 0) {\n this.destination.complete();\n }\n this.unsubscribe();\n };\n MergeMapSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n this.destination.next(innerValue);\n };\n MergeMapSubscriber.prototype.notifyComplete = function (innerSub) {\n var buffer = this.buffer;\n this.remove(innerSub);\n this.active--;\n if (buffer.length > 0) {\n this._next(buffer.shift());\n }\n else if (this.active === 0 && this.hasCompleted) {\n this.destination.complete();\n }\n };\n return MergeMapSubscriber;\n}(OuterSubscriber));\nexport { MergeMapSubscriber };\n//# sourceMappingURL=mergeMap.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport function identity(x) {\n return x;\n}\n//# sourceMappingURL=identity.js.map\n","/** PURE_IMPORTS_START _mergeMap,_util_identity PURE_IMPORTS_END */\nimport { mergeMap } from './mergeMap';\nimport { identity } from '../util/identity';\nexport function mergeAll(concurrent) {\n if (concurrent === void 0) {\n concurrent = Number.POSITIVE_INFINITY;\n }\n return mergeMap(identity, concurrent);\n}\n//# sourceMappingURL=mergeAll.js.map\n","/** PURE_IMPORTS_START tslib,_Subscriber,_util_noop,_util_isFunction PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Subscriber } from '../Subscriber';\nimport { noop } from '../util/noop';\nimport { isFunction } from '../util/isFunction';\nexport function tap(nextOrObserver, error, complete) {\n return function tapOperatorFunction(source) {\n return source.lift(new DoOperator(nextOrObserver, error, complete));\n };\n}\nvar DoOperator = /*@__PURE__*/ (function () {\n function DoOperator(nextOrObserver, error, complete) {\n this.nextOrObserver = nextOrObserver;\n this.error = error;\n this.complete = complete;\n }\n DoOperator.prototype.call = function (subscriber, source) {\n return source.subscribe(new TapSubscriber(subscriber, this.nextOrObserver, this.error, this.complete));\n };\n return DoOperator;\n}());\nvar TapSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(TapSubscriber, _super);\n function TapSubscriber(destination, observerOrNext, error, complete) {\n var _this = _super.call(this, destination) || this;\n _this._tapNext = noop;\n _this._tapError = noop;\n _this._tapComplete = noop;\n _this._tapError = error || noop;\n _this._tapComplete = complete || noop;\n if (isFunction(observerOrNext)) {\n _this._context = _this;\n _this._tapNext = observerOrNext;\n }\n else if (observerOrNext) {\n _this._context = observerOrNext;\n _this._tapNext = observerOrNext.next || noop;\n _this._tapError = observerOrNext.error || noop;\n _this._tapComplete = observerOrNext.complete || noop;\n }\n return _this;\n }\n TapSubscriber.prototype._next = function (value) {\n try {\n this._tapNext.call(this._context, value);\n }\n catch (err) {\n this.destination.error(err);\n return;\n }\n this.destination.next(value);\n };\n TapSubscriber.prototype._error = function (err) {\n try {\n this._tapError.call(this._context, err);\n }\n catch (err) {\n this.destination.error(err);\n return;\n }\n this.destination.error(err);\n };\n TapSubscriber.prototype._complete = function () {\n try {\n this._tapComplete.call(this._context);\n }\n catch (err) {\n this.destination.error(err);\n return;\n }\n return this.destination.complete();\n };\n return TapSubscriber;\n}(Subscriber));\n//# sourceMappingURL=tap.js.map\n","/** PURE_IMPORTS_START tslib,_AsyncAction PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { AsyncAction } from './AsyncAction';\nvar AnimationFrameAction = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(AnimationFrameAction, _super);\n function AnimationFrameAction(scheduler, work) {\n var _this = _super.call(this, scheduler, work) || this;\n _this.scheduler = scheduler;\n _this.work = work;\n return _this;\n }\n AnimationFrameAction.prototype.requestAsyncId = function (scheduler, id, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n if (delay !== null && delay > 0) {\n return _super.prototype.requestAsyncId.call(this, scheduler, id, delay);\n }\n scheduler.actions.push(this);\n return scheduler.scheduled || (scheduler.scheduled = requestAnimationFrame(function () { return scheduler.flush(null); }));\n };\n AnimationFrameAction.prototype.recycleAsyncId = function (scheduler, id, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n if ((delay !== null && delay > 0) || (delay === null && this.delay > 0)) {\n return _super.prototype.recycleAsyncId.call(this, scheduler, id, delay);\n }\n if (scheduler.actions.length === 0) {\n cancelAnimationFrame(id);\n scheduler.scheduled = undefined;\n }\n return undefined;\n };\n return AnimationFrameAction;\n}(AsyncAction));\nexport { AnimationFrameAction };\n//# sourceMappingURL=AnimationFrameAction.js.map\n","/** PURE_IMPORTS_START tslib,_AsyncScheduler PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { AsyncScheduler } from './AsyncScheduler';\nvar AnimationFrameScheduler = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(AnimationFrameScheduler, _super);\n function AnimationFrameScheduler() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n AnimationFrameScheduler.prototype.flush = function (action) {\n this.active = true;\n this.scheduled = undefined;\n var actions = this.actions;\n var error;\n var index = -1;\n var count = actions.length;\n action = action || actions.shift();\n do {\n if (error = action.execute(action.state, action.delay)) {\n break;\n }\n } while (++index < count && (action = actions.shift()));\n this.active = false;\n if (error) {\n while (++index < count && (action = actions.shift())) {\n action.unsubscribe();\n }\n throw error;\n }\n };\n return AnimationFrameScheduler;\n}(AsyncScheduler));\nexport { AnimationFrameScheduler };\n//# sourceMappingURL=AnimationFrameScheduler.js.map\n","/** PURE_IMPORTS_START _AnimationFrameAction,_AnimationFrameScheduler PURE_IMPORTS_END */\nimport { AnimationFrameAction } from './AnimationFrameAction';\nimport { AnimationFrameScheduler } from './AnimationFrameScheduler';\nexport var animationFrame = /*@__PURE__*/ new AnimationFrameScheduler(AnimationFrameAction);\n//# sourceMappingURL=animationFrame.js.map\n","/*!\n * clipboard.js v2.0.4\n * https://zenorocha.github.io/clipboard.js\n * \n * Licensed MIT © Zeno Rocha\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ClipboardJS\"] = factory();\n\telse\n\t\troot[\"ClipboardJS\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _clipboardAction = __webpack_require__(1);\n\nvar _clipboardAction2 = _interopRequireDefault(_clipboardAction);\n\nvar _tinyEmitter = __webpack_require__(3);\n\nvar _tinyEmitter2 = _interopRequireDefault(_tinyEmitter);\n\nvar _goodListener = __webpack_require__(4);\n\nvar _goodListener2 = _interopRequireDefault(_goodListener);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n/**\n * Base class which takes one or more elements, adds event listeners to them,\n * and instantiates a new `ClipboardAction` on each click.\n */\nvar Clipboard = function (_Emitter) {\n _inherits(Clipboard, _Emitter);\n\n /**\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n * @param {Object} options\n */\n function Clipboard(trigger, options) {\n _classCallCheck(this, Clipboard);\n\n var _this = _possibleConstructorReturn(this, (Clipboard.__proto__ || Object.getPrototypeOf(Clipboard)).call(this));\n\n _this.resolveOptions(options);\n _this.listenClick(trigger);\n return _this;\n }\n\n /**\n * Defines if attributes would be resolved using internal setter functions\n * or custom functions that were passed in the constructor.\n * @param {Object} options\n */\n\n\n _createClass(Clipboard, [{\n key: 'resolveOptions',\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n this.text = typeof options.text === 'function' ? options.text : this.defaultText;\n this.container = _typeof(options.container) === 'object' ? options.container : document.body;\n }\n\n /**\n * Adds a click event listener to the passed trigger.\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n */\n\n }, {\n key: 'listenClick',\n value: function listenClick(trigger) {\n var _this2 = this;\n\n this.listener = (0, _goodListener2.default)(trigger, 'click', function (e) {\n return _this2.onClick(e);\n });\n }\n\n /**\n * Defines a new `ClipboardAction` on each click event.\n * @param {Event} e\n */\n\n }, {\n key: 'onClick',\n value: function onClick(e) {\n var trigger = e.delegateTarget || e.currentTarget;\n\n if (this.clipboardAction) {\n this.clipboardAction = null;\n }\n\n this.clipboardAction = new _clipboardAction2.default({\n action: this.action(trigger),\n target: this.target(trigger),\n text: this.text(trigger),\n container: this.container,\n trigger: trigger,\n emitter: this\n });\n }\n\n /**\n * Default `action` lookup function.\n * @param {Element} trigger\n */\n\n }, {\n key: 'defaultAction',\n value: function defaultAction(trigger) {\n return getAttributeValue('action', trigger);\n }\n\n /**\n * Default `target` lookup function.\n * @param {Element} trigger\n */\n\n }, {\n key: 'defaultTarget',\n value: function defaultTarget(trigger) {\n var selector = getAttributeValue('target', trigger);\n\n if (selector) {\n return document.querySelector(selector);\n }\n }\n\n /**\n * Returns the support of the given action, or all actions if no action is\n * given.\n * @param {String} [action]\n */\n\n }, {\n key: 'defaultText',\n\n\n /**\n * Default `text` lookup function.\n * @param {Element} trigger\n */\n value: function defaultText(trigger) {\n return getAttributeValue('text', trigger);\n }\n\n /**\n * Destroy lifecycle.\n */\n\n }, {\n key: 'destroy',\n value: function destroy() {\n this.listener.destroy();\n\n if (this.clipboardAction) {\n this.clipboardAction.destroy();\n this.clipboardAction = null;\n }\n }\n }], [{\n key: 'isSupported',\n value: function isSupported() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\n\n var actions = typeof action === 'string' ? [action] : action;\n var support = !!document.queryCommandSupported;\n\n actions.forEach(function (action) {\n support = support && !!document.queryCommandSupported(action);\n });\n\n return support;\n }\n }]);\n\n return Clipboard;\n}(_tinyEmitter2.default);\n\n/**\n * Helper function to retrieve attribute value.\n * @param {String} suffix\n * @param {Element} element\n */\n\n\nfunction getAttributeValue(suffix, element) {\n var attribute = 'data-clipboard-' + suffix;\n\n if (!element.hasAttribute(attribute)) {\n return;\n }\n\n return element.getAttribute(attribute);\n}\n\nmodule.exports = Clipboard;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _select = __webpack_require__(2);\n\nvar _select2 = _interopRequireDefault(_select);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Inner class which performs selection from either `text` or `target`\n * properties and then executes copy or cut operations.\n */\nvar ClipboardAction = function () {\n /**\n * @param {Object} options\n */\n function ClipboardAction(options) {\n _classCallCheck(this, ClipboardAction);\n\n this.resolveOptions(options);\n this.initSelection();\n }\n\n /**\n * Defines base properties passed from constructor.\n * @param {Object} options\n */\n\n\n _createClass(ClipboardAction, [{\n key: 'resolveOptions',\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this.action = options.action;\n this.container = options.container;\n this.emitter = options.emitter;\n this.target = options.target;\n this.text = options.text;\n this.trigger = options.trigger;\n\n this.selectedText = '';\n }\n\n /**\n * Decides which selection strategy is going to be applied based\n * on the existence of `text` and `target` properties.\n */\n\n }, {\n key: 'initSelection',\n value: function initSelection() {\n if (this.text) {\n this.selectFake();\n } else if (this.target) {\n this.selectTarget();\n }\n }\n\n /**\n * Creates a fake textarea element, sets its value from `text` property,\n * and makes a selection on it.\n */\n\n }, {\n key: 'selectFake',\n value: function selectFake() {\n var _this = this;\n\n var isRTL = document.documentElement.getAttribute('dir') == 'rtl';\n\n this.removeFake();\n\n this.fakeHandlerCallback = function () {\n return _this.removeFake();\n };\n this.fakeHandler = this.container.addEventListener('click', this.fakeHandlerCallback) || true;\n\n this.fakeElem = document.createElement('textarea');\n // Prevent zooming on iOS\n this.fakeElem.style.fontSize = '12pt';\n // Reset box model\n this.fakeElem.style.border = '0';\n this.fakeElem.style.padding = '0';\n this.fakeElem.style.margin = '0';\n // Move element out of screen horizontally\n this.fakeElem.style.position = 'absolute';\n this.fakeElem.style[isRTL ? 'right' : 'left'] = '-9999px';\n // Move element to the same position vertically\n var yPosition = window.pageYOffset || document.documentElement.scrollTop;\n this.fakeElem.style.top = yPosition + 'px';\n\n this.fakeElem.setAttribute('readonly', '');\n this.fakeElem.value = this.text;\n\n this.container.appendChild(this.fakeElem);\n\n this.selectedText = (0, _select2.default)(this.fakeElem);\n this.copyText();\n }\n\n /**\n * Only removes the fake element after another click event, that way\n * a user can hit `Ctrl+C` to copy because selection still exists.\n */\n\n }, {\n key: 'removeFake',\n value: function removeFake() {\n if (this.fakeHandler) {\n this.container.removeEventListener('click', this.fakeHandlerCallback);\n this.fakeHandler = null;\n this.fakeHandlerCallback = null;\n }\n\n if (this.fakeElem) {\n this.container.removeChild(this.fakeElem);\n this.fakeElem = null;\n }\n }\n\n /**\n * Selects the content from element passed on `target` property.\n */\n\n }, {\n key: 'selectTarget',\n value: function selectTarget() {\n this.selectedText = (0, _select2.default)(this.target);\n this.copyText();\n }\n\n /**\n * Executes the copy operation based on the current selection.\n */\n\n }, {\n key: 'copyText',\n value: function copyText() {\n var succeeded = void 0;\n\n try {\n succeeded = document.execCommand(this.action);\n } catch (err) {\n succeeded = false;\n }\n\n this.handleResult(succeeded);\n }\n\n /**\n * Fires an event based on the copy operation result.\n * @param {Boolean} succeeded\n */\n\n }, {\n key: 'handleResult',\n value: function handleResult(succeeded) {\n this.emitter.emit(succeeded ? 'success' : 'error', {\n action: this.action,\n text: this.selectedText,\n trigger: this.trigger,\n clearSelection: this.clearSelection.bind(this)\n });\n }\n\n /**\n * Moves focus away from `target` and back to the trigger, removes current selection.\n */\n\n }, {\n key: 'clearSelection',\n value: function clearSelection() {\n if (this.trigger) {\n this.trigger.focus();\n }\n\n window.getSelection().removeAllRanges();\n }\n\n /**\n * Sets the `action` to be performed which can be either 'copy' or 'cut'.\n * @param {String} action\n */\n\n }, {\n key: 'destroy',\n\n\n /**\n * Destroy lifecycle.\n */\n value: function destroy() {\n this.removeFake();\n }\n }, {\n key: 'action',\n set: function set() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'copy';\n\n this._action = action;\n\n if (this._action !== 'copy' && this._action !== 'cut') {\n throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n }\n }\n\n /**\n * Gets the `action` property.\n * @return {String}\n */\n ,\n get: function get() {\n return this._action;\n }\n\n /**\n * Sets the `target` property using an element\n * that will be have its content copied.\n * @param {Element} target\n */\n\n }, {\n key: 'target',\n set: function set(target) {\n if (target !== undefined) {\n if (target && (typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' && target.nodeType === 1) {\n if (this.action === 'copy' && target.hasAttribute('disabled')) {\n throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n }\n\n if (this.action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n }\n\n this._target = target;\n } else {\n throw new Error('Invalid \"target\" value, use a valid Element');\n }\n }\n }\n\n /**\n * Gets the `target` property.\n * @return {String|HTMLElement}\n */\n ,\n get: function get() {\n return this._target;\n }\n }]);\n\n return ClipboardAction;\n}();\n\nmodule.exports = ClipboardAction;\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\nfunction select(element) {\n var selectedText;\n\n if (element.nodeName === 'SELECT') {\n element.focus();\n\n selectedText = element.value;\n }\n else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n var isReadOnly = element.hasAttribute('readonly');\n\n if (!isReadOnly) {\n element.setAttribute('readonly', '');\n }\n\n element.select();\n element.setSelectionRange(0, element.value.length);\n\n if (!isReadOnly) {\n element.removeAttribute('readonly');\n }\n\n selectedText = element.value;\n }\n else {\n if (element.hasAttribute('contenteditable')) {\n element.focus();\n }\n\n var selection = window.getSelection();\n var range = document.createRange();\n\n range.selectNodeContents(element);\n selection.removeAllRanges();\n selection.addRange(range);\n\n selectedText = selection.toString();\n }\n\n return selectedText;\n}\n\nmodule.exports = select;\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\nfunction E () {\n // Keep this empty so it's easier to inherit from\n // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n on: function (name, callback, ctx) {\n var e = this.e || (this.e = {});\n\n (e[name] || (e[name] = [])).push({\n fn: callback,\n ctx: ctx\n });\n\n return this;\n },\n\n once: function (name, callback, ctx) {\n var self = this;\n function listener () {\n self.off(name, listener);\n callback.apply(ctx, arguments);\n };\n\n listener._ = callback\n return this.on(name, listener, ctx);\n },\n\n emit: function (name) {\n var data = [].slice.call(arguments, 1);\n var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n var i = 0;\n var len = evtArr.length;\n\n for (i; i < len; i++) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n\n return this;\n },\n\n off: function (name, callback) {\n var e = this.e || (this.e = {});\n var evts = e[name];\n var liveEvents = [];\n\n if (evts && callback) {\n for (var i = 0, len = evts.length; i < len; i++) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n liveEvents.push(evts[i]);\n }\n }\n\n // Remove event from queue to prevent memory leak\n // Suggested by https://github.com/lazd\n // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n (liveEvents.length)\n ? e[name] = liveEvents\n : delete e[name];\n\n return this;\n }\n};\n\nmodule.exports = E;\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar is = __webpack_require__(5);\nvar delegate = __webpack_require__(6);\n\n/**\n * Validates all params and calls the right\n * listener function based on its target type.\n *\n * @param {String|HTMLElement|HTMLCollection|NodeList} target\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listen(target, type, callback) {\n if (!target && !type && !callback) {\n throw new Error('Missing required arguments');\n }\n\n if (!is.string(type)) {\n throw new TypeError('Second argument must be a String');\n }\n\n if (!is.fn(callback)) {\n throw new TypeError('Third argument must be a Function');\n }\n\n if (is.node(target)) {\n return listenNode(target, type, callback);\n }\n else if (is.nodeList(target)) {\n return listenNodeList(target, type, callback);\n }\n else if (is.string(target)) {\n return listenSelector(target, type, callback);\n }\n else {\n throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n }\n}\n\n/**\n * Adds an event listener to a HTML element\n * and returns a remove listener function.\n *\n * @param {HTMLElement} node\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNode(node, type, callback) {\n node.addEventListener(type, callback);\n\n return {\n destroy: function() {\n node.removeEventListener(type, callback);\n }\n }\n}\n\n/**\n * Add an event listener to a list of HTML elements\n * and returns a remove listener function.\n *\n * @param {NodeList|HTMLCollection} nodeList\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNodeList(nodeList, type, callback) {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.addEventListener(type, callback);\n });\n\n return {\n destroy: function() {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.removeEventListener(type, callback);\n });\n }\n }\n}\n\n/**\n * Add an event listener to a selector\n * and returns a remove listener function.\n *\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenSelector(selector, type, callback) {\n return delegate(document.body, selector, type, callback);\n}\n\nmodule.exports = listen;\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports) {\n\n/**\n * Check if argument is a HTML element.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.node = function(value) {\n return value !== undefined\n && value instanceof HTMLElement\n && value.nodeType === 1;\n};\n\n/**\n * Check if argument is a list of HTML elements.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.nodeList = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return value !== undefined\n && (type === '[object NodeList]' || type === '[object HTMLCollection]')\n && ('length' in value)\n && (value.length === 0 || exports.node(value[0]));\n};\n\n/**\n * Check if argument is a string.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.string = function(value) {\n return typeof value === 'string'\n || value instanceof String;\n};\n\n/**\n * Check if argument is a function.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.fn = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return type === '[object Function]';\n};\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar closest = __webpack_require__(7);\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction _delegate(element, selector, type, callback, useCapture) {\n var listenerFn = listener.apply(this, arguments);\n\n element.addEventListener(type, listenerFn, useCapture);\n\n return {\n destroy: function() {\n element.removeEventListener(type, listenerFn, useCapture);\n }\n }\n}\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element|String|Array} [elements]\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction delegate(elements, selector, type, callback, useCapture) {\n // Handle the regular Element usage\n if (typeof elements.addEventListener === 'function') {\n return _delegate.apply(null, arguments);\n }\n\n // Handle Element-less usage, it defaults to global delegation\n if (typeof type === 'function') {\n // Use `document` as the first parameter, then apply arguments\n // This is a short way to .unshift `arguments` without running into deoptimizations\n return _delegate.bind(null, document).apply(null, arguments);\n }\n\n // Handle Selector-based usage\n if (typeof elements === 'string') {\n elements = document.querySelectorAll(elements);\n }\n\n // Handle Array-like based usage\n return Array.prototype.map.call(elements, function (element) {\n return _delegate(element, selector, type, callback, useCapture);\n });\n}\n\n/**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\nfunction listener(element, selector, type, callback) {\n return function(e) {\n e.delegateTarget = closest(e.target, selector);\n\n if (e.delegateTarget) {\n callback.call(element, e);\n }\n }\n}\n\nmodule.exports = delegate;\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports) {\n\nvar DOCUMENT_NODE_TYPE = 9;\n\n/**\n * A polyfill for Element.matches()\n */\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n var proto = Element.prototype;\n\n proto.matches = proto.matchesSelector ||\n proto.mozMatchesSelector ||\n proto.msMatchesSelector ||\n proto.oMatchesSelector ||\n proto.webkitMatchesSelector;\n}\n\n/**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\nfunction closest (element, selector) {\n while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n if (typeof element.matches === 'function' &&\n element.matches(selector)) {\n return element;\n }\n element = element.parentNode;\n }\n}\n\nmodule.exports = closest;\n\n\n/***/ })\n/******/ ]);\n});","/** PURE_IMPORTS_START tslib,_util_isScheduler,_util_isArray,_OuterSubscriber,_util_subscribeToResult,_fromArray PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { isScheduler } from '../util/isScheduler';\nimport { isArray } from '../util/isArray';\nimport { OuterSubscriber } from '../OuterSubscriber';\nimport { subscribeToResult } from '../util/subscribeToResult';\nimport { fromArray } from './fromArray';\nvar NONE = {};\nexport function combineLatest() {\n var observables = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n observables[_i] = arguments[_i];\n }\n var resultSelector = null;\n var scheduler = null;\n if (isScheduler(observables[observables.length - 1])) {\n scheduler = observables.pop();\n }\n if (typeof observables[observables.length - 1] === 'function') {\n resultSelector = observables.pop();\n }\n if (observables.length === 1 && isArray(observables[0])) {\n observables = observables[0];\n }\n return fromArray(observables, scheduler).lift(new CombineLatestOperator(resultSelector));\n}\nvar CombineLatestOperator = /*@__PURE__*/ (function () {\n function CombineLatestOperator(resultSelector) {\n this.resultSelector = resultSelector;\n }\n CombineLatestOperator.prototype.call = function (subscriber, source) {\n return source.subscribe(new CombineLatestSubscriber(subscriber, this.resultSelector));\n };\n return CombineLatestOperator;\n}());\nexport { CombineLatestOperator };\nvar CombineLatestSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(CombineLatestSubscriber, _super);\n function CombineLatestSubscriber(destination, resultSelector) {\n var _this = _super.call(this, destination) || this;\n _this.resultSelector = resultSelector;\n _this.active = 0;\n _this.values = [];\n _this.observables = [];\n return _this;\n }\n CombineLatestSubscriber.prototype._next = function (observable) {\n this.values.push(NONE);\n this.observables.push(observable);\n };\n CombineLatestSubscriber.prototype._complete = function () {\n var observables = this.observables;\n var len = observables.length;\n if (len === 0) {\n this.destination.complete();\n }\n else {\n this.active = len;\n this.toRespond = len;\n for (var i = 0; i < len; i++) {\n var observable = observables[i];\n this.add(subscribeToResult(this, observable, observable, i));\n }\n }\n };\n CombineLatestSubscriber.prototype.notifyComplete = function (unused) {\n if ((this.active -= 1) === 0) {\n this.destination.complete();\n }\n };\n CombineLatestSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n var values = this.values;\n var oldVal = values[outerIndex];\n var toRespond = !this.toRespond\n ? 0\n : oldVal === NONE ? --this.toRespond : this.toRespond;\n values[outerIndex] = innerValue;\n if (toRespond === 0) {\n if (this.resultSelector) {\n this._tryResultSelector(values);\n }\n else {\n this.destination.next(values.slice());\n }\n }\n };\n CombineLatestSubscriber.prototype._tryResultSelector = function (values) {\n var result;\n try {\n result = this.resultSelector.apply(this, values);\n }\n catch (err) {\n this.destination.error(err);\n return;\n }\n this.destination.next(result);\n };\n return CombineLatestSubscriber;\n}(OuterSubscriber));\nexport { CombineLatestSubscriber };\n//# sourceMappingURL=combineLatest.js.map\n","/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { OuterSubscriber } from '../OuterSubscriber';\nimport { subscribeToResult } from '../util/subscribeToResult';\nexport function withLatestFrom() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return function (source) {\n var project;\n if (typeof args[args.length - 1] === 'function') {\n project = args.pop();\n }\n var observables = args;\n return source.lift(new WithLatestFromOperator(observables, project));\n };\n}\nvar WithLatestFromOperator = /*@__PURE__*/ (function () {\n function WithLatestFromOperator(observables, project) {\n this.observables = observables;\n this.project = project;\n }\n WithLatestFromOperator.prototype.call = function (subscriber, source) {\n return source.subscribe(new WithLatestFromSubscriber(subscriber, this.observables, this.project));\n };\n return WithLatestFromOperator;\n}());\nvar WithLatestFromSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(WithLatestFromSubscriber, _super);\n function WithLatestFromSubscriber(destination, observables, project) {\n var _this = _super.call(this, destination) || this;\n _this.observables = observables;\n _this.project = project;\n _this.toRespond = [];\n var len = observables.length;\n _this.values = new Array(len);\n for (var i = 0; i < len; i++) {\n _this.toRespond.push(i);\n }\n for (var i = 0; i < len; i++) {\n var observable = observables[i];\n _this.add(subscribeToResult(_this, observable, observable, i));\n }\n return _this;\n }\n WithLatestFromSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n this.values[outerIndex] = innerValue;\n var toRespond = this.toRespond;\n if (toRespond.length > 0) {\n var found = toRespond.indexOf(outerIndex);\n if (found !== -1) {\n toRespond.splice(found, 1);\n }\n }\n };\n WithLatestFromSubscriber.prototype.notifyComplete = function () {\n };\n WithLatestFromSubscriber.prototype._next = function (value) {\n if (this.toRespond.length === 0) {\n var args = [value].concat(this.values);\n if (this.project) {\n this._tryProject(args);\n }\n else {\n this.destination.next(args);\n }\n }\n };\n WithLatestFromSubscriber.prototype._tryProject = function (args) {\n var result;\n try {\n result = this.project.apply(this, args);\n }\n catch (err) {\n this.destination.error(err);\n return;\n }\n this.destination.next(result);\n };\n return WithLatestFromSubscriber;\n}(OuterSubscriber));\n//# sourceMappingURL=withLatestFrom.js.map\n","/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Subscriber } from '../Subscriber';\nexport function scan(accumulator, seed) {\n var hasSeed = false;\n if (arguments.length >= 2) {\n hasSeed = true;\n }\n return function scanOperatorFunction(source) {\n return source.lift(new ScanOperator(accumulator, seed, hasSeed));\n };\n}\nvar ScanOperator = /*@__PURE__*/ (function () {\n function ScanOperator(accumulator, seed, hasSeed) {\n if (hasSeed === void 0) {\n hasSeed = false;\n }\n this.accumulator = accumulator;\n this.seed = seed;\n this.hasSeed = hasSeed;\n }\n ScanOperator.prototype.call = function (subscriber, source) {\n return source.subscribe(new ScanSubscriber(subscriber, this.accumulator, this.seed, this.hasSeed));\n };\n return ScanOperator;\n}());\nvar ScanSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(ScanSubscriber, _super);\n function ScanSubscriber(destination, accumulator, _seed, hasSeed) {\n var _this = _super.call(this, destination) || this;\n _this.accumulator = accumulator;\n _this._seed = _seed;\n _this.hasSeed = hasSeed;\n _this.index = 0;\n return _this;\n }\n Object.defineProperty(ScanSubscriber.prototype, \"seed\", {\n get: function () {\n return this._seed;\n },\n set: function (value) {\n this.hasSeed = true;\n this._seed = value;\n },\n enumerable: true,\n configurable: true\n });\n ScanSubscriber.prototype._next = function (value) {\n if (!this.hasSeed) {\n this.seed = value;\n this.destination.next(value);\n }\n else {\n return this._tryNext(value);\n }\n };\n ScanSubscriber.prototype._tryNext = function (value) {\n var index = this.index++;\n var result;\n try {\n result = this.accumulator(this.seed, value, index);\n }\n catch (err) {\n this.destination.error(err);\n }\n this.seed = result;\n this.destination.next(result);\n };\n return ScanSubscriber;\n}(Subscriber));\n//# sourceMappingURL=scan.js.map\n","/** PURE_IMPORTS_START tslib,_Subscriber,_Subscription PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Subscriber } from '../Subscriber';\nimport { Subscription } from '../Subscription';\nexport function finalize(callback) {\n return function (source) { return source.lift(new FinallyOperator(callback)); };\n}\nvar FinallyOperator = /*@__PURE__*/ (function () {\n function FinallyOperator(callback) {\n this.callback = callback;\n }\n FinallyOperator.prototype.call = function (subscriber, source) {\n return source.subscribe(new FinallySubscriber(subscriber, this.callback));\n };\n return FinallyOperator;\n}());\nvar FinallySubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(FinallySubscriber, _super);\n function FinallySubscriber(destination, callback) {\n var _this = _super.call(this, destination) || this;\n _this.add(new Subscription(callback));\n return _this;\n }\n return FinallySubscriber;\n}(Subscriber));\n//# sourceMappingURL=finalize.js.map\n","/** PURE_IMPORTS_START _Observable,_from,_empty PURE_IMPORTS_END */\nimport { Observable } from '../Observable';\nimport { from } from './from';\nimport { empty } from './empty';\nexport function defer(observableFactory) {\n return new Observable(function (subscriber) {\n var input;\n try {\n input = observableFactory();\n }\n catch (err) {\n subscriber.error(err);\n return undefined;\n }\n var source = input ? from(input) : empty();\n return source.subscribe(subscriber);\n });\n}\n//# sourceMappingURL=defer.js.map\n","export default function _has(prop, obj) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}","import _has from './_has.js';\n\nvar toString = Object.prototype.toString;\nvar _isArguments = /*#__PURE__*/function () {\n return toString.call(arguments) === '[object Arguments]' ? function _isArguments(x) {\n return toString.call(x) === '[object Arguments]';\n } : function _isArguments(x) {\n return _has('callee', x);\n };\n}();\n\nexport default _isArguments;","import _curry1 from './internal/_curry1.js';\nimport _has from './internal/_has.js';\nimport _isArguments from './internal/_isArguments.js';\n\n// cover IE < 9 keys issues\nvar hasEnumBug = ! /*#__PURE__*/{ toString: null }.propertyIsEnumerable('toString');\nvar nonEnumerableProps = ['constructor', 'valueOf', 'isPrototypeOf', 'toString', 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n// Safari bug\nvar hasArgsEnumBug = /*#__PURE__*/function () {\n 'use strict';\n\n return arguments.propertyIsEnumerable('length');\n}();\n\nvar contains = function contains(list, item) {\n var idx = 0;\n while (idx < list.length) {\n if (list[idx] === item) {\n return true;\n }\n idx += 1;\n }\n return false;\n};\n\n/**\n * Returns a list containing the names of all the enumerable own properties of\n * the supplied object.\n * Note that the order of the output array is not guaranteed to be consistent\n * across different JS platforms.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Object\n * @sig {k: v} -> [k]\n * @param {Object} obj The object to extract properties from\n * @return {Array} An array of the object's own properties.\n * @see R.keysIn, R.values\n * @example\n *\n * R.keys({a: 1, b: 2, c: 3}); //=> ['a', 'b', 'c']\n */\nvar keys = typeof Object.keys === 'function' && !hasArgsEnumBug ? /*#__PURE__*/_curry1(function keys(obj) {\n return Object(obj) !== obj ? [] : Object.keys(obj);\n}) : /*#__PURE__*/_curry1(function keys(obj) {\n if (Object(obj) !== obj) {\n return [];\n }\n var prop, nIdx;\n var ks = [];\n var checkArgsLength = hasArgsEnumBug && _isArguments(obj);\n for (prop in obj) {\n if (_has(prop, obj) && (!checkArgsLength || prop !== 'length')) {\n ks[ks.length] = prop;\n }\n }\n if (hasEnumBug) {\n nIdx = nonEnumerableProps.length - 1;\n while (nIdx >= 0) {\n prop = nonEnumerableProps[nIdx];\n if (_has(prop, obj) && !contains(ks, prop)) {\n ks[ks.length] = prop;\n }\n nIdx -= 1;\n }\n }\n return ks;\n});\nexport default keys;","/** PURE_IMPORTS_START _distinctUntilChanged PURE_IMPORTS_END */\nimport { distinctUntilChanged } from './distinctUntilChanged';\nexport function distinctUntilKeyChanged(key, compare) {\n return distinctUntilChanged(function (x, y) { return compare ? compare(x[key], y[key]) : x[key] === y[key]; });\n}\n//# sourceMappingURL=distinctUntilKeyChanged.js.map\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","/** PURE_IMPORTS_START _Observable,_util_isArray,_util_isFunction,_operators_map PURE_IMPORTS_END */\nimport { Observable } from '../Observable';\nimport { isArray } from '../util/isArray';\nimport { isFunction } from '../util/isFunction';\nimport { map } from '../operators/map';\nvar toString = /*@__PURE__*/ (function () { return Object.prototype.toString; })();\nexport function fromEvent(target, eventName, options, resultSelector) {\n if (isFunction(options)) {\n resultSelector = options;\n options = undefined;\n }\n if (resultSelector) {\n return fromEvent(target, eventName, options).pipe(map(function (args) { return isArray(args) ? resultSelector.apply(void 0, args) : resultSelector(args); }));\n }\n return new Observable(function (subscriber) {\n function handler(e) {\n if (arguments.length > 1) {\n subscriber.next(Array.prototype.slice.call(arguments));\n }\n else {\n subscriber.next(e);\n }\n }\n setupSubscription(target, eventName, handler, subscriber, options);\n });\n}\nfunction setupSubscription(sourceObj, eventName, handler, subscriber, options) {\n var unsubscribe;\n if (isEventTarget(sourceObj)) {\n var source_1 = sourceObj;\n sourceObj.addEventListener(eventName, handler, options);\n unsubscribe = function () { return source_1.removeEventListener(eventName, handler, options); };\n }\n else if (isJQueryStyleEventEmitter(sourceObj)) {\n var source_2 = sourceObj;\n sourceObj.on(eventName, handler);\n unsubscribe = function () { return source_2.off(eventName, handler); };\n }\n else if (isNodeStyleEventEmitter(sourceObj)) {\n var source_3 = sourceObj;\n sourceObj.addListener(eventName, handler);\n unsubscribe = function () { return source_3.removeListener(eventName, handler); };\n }\n else if (sourceObj && sourceObj.length) {\n for (var i = 0, len = sourceObj.length; i < len; i++) {\n setupSubscription(sourceObj[i], eventName, handler, subscriber, options);\n }\n }\n else {\n throw new TypeError('Invalid event target');\n }\n subscriber.add(unsubscribe);\n}\nfunction isNodeStyleEventEmitter(sourceObj) {\n return sourceObj && typeof sourceObj.addListener === 'function' && typeof sourceObj.removeListener === 'function';\n}\nfunction isJQueryStyleEventEmitter(sourceObj) {\n return sourceObj && typeof sourceObj.on === 'function' && typeof sourceObj.off === 'function';\n}\nfunction isEventTarget(sourceObj) {\n return sourceObj && typeof sourceObj.addEventListener === 'function' && typeof sourceObj.removeEventListener === 'function';\n}\n//# sourceMappingURL=fromEvent.js.map\n","/** PURE_IMPORTS_START _Observable,_util_isScheduler,_operators_mergeAll,_fromArray PURE_IMPORTS_END */\nimport { Observable } from '../Observable';\nimport { isScheduler } from '../util/isScheduler';\nimport { mergeAll } from '../operators/mergeAll';\nimport { fromArray } from './fromArray';\nexport function merge() {\n var observables = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n observables[_i] = arguments[_i];\n }\n var concurrent = Number.POSITIVE_INFINITY;\n var scheduler = null;\n var last = observables[observables.length - 1];\n if (isScheduler(last)) {\n scheduler = observables.pop();\n if (observables.length > 1 && typeof observables[observables.length - 1] === 'number') {\n concurrent = observables.pop();\n }\n }\n else if (typeof last === 'number') {\n concurrent = observables.pop();\n }\n if (scheduler === null && observables.length === 1 && observables[0] instanceof Observable) {\n return observables[0];\n }\n return mergeAll(concurrent)(fromArray(observables, scheduler));\n}\n//# sourceMappingURL=merge.js.map\n","/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Subscriber } from '../Subscriber';\nexport function bufferCount(bufferSize, startBufferEvery) {\n if (startBufferEvery === void 0) {\n startBufferEvery = null;\n }\n return function bufferCountOperatorFunction(source) {\n return source.lift(new BufferCountOperator(bufferSize, startBufferEvery));\n };\n}\nvar BufferCountOperator = /*@__PURE__*/ (function () {\n function BufferCountOperator(bufferSize, startBufferEvery) {\n this.bufferSize = bufferSize;\n this.startBufferEvery = startBufferEvery;\n if (!startBufferEvery || bufferSize === startBufferEvery) {\n this.subscriberClass = BufferCountSubscriber;\n }\n else {\n this.subscriberClass = BufferSkipCountSubscriber;\n }\n }\n BufferCountOperator.prototype.call = function (subscriber, source) {\n return source.subscribe(new this.subscriberClass(subscriber, this.bufferSize, this.startBufferEvery));\n };\n return BufferCountOperator;\n}());\nvar BufferCountSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(BufferCountSubscriber, _super);\n function BufferCountSubscriber(destination, bufferSize) {\n var _this = _super.call(this, destination) || this;\n _this.bufferSize = bufferSize;\n _this.buffer = [];\n return _this;\n }\n BufferCountSubscriber.prototype._next = function (value) {\n var buffer = this.buffer;\n buffer.push(value);\n if (buffer.length == this.bufferSize) {\n this.destination.next(buffer);\n this.buffer = [];\n }\n };\n BufferCountSubscriber.prototype._complete = function () {\n var buffer = this.buffer;\n if (buffer.length > 0) {\n this.destination.next(buffer);\n }\n _super.prototype._complete.call(this);\n };\n return BufferCountSubscriber;\n}(Subscriber));\nvar BufferSkipCountSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(BufferSkipCountSubscriber, _super);\n function BufferSkipCountSubscriber(destination, bufferSize, startBufferEvery) {\n var _this = _super.call(this, destination) || this;\n _this.bufferSize = bufferSize;\n _this.startBufferEvery = startBufferEvery;\n _this.buffers = [];\n _this.count = 0;\n return _this;\n }\n BufferSkipCountSubscriber.prototype._next = function (value) {\n var _a = this, bufferSize = _a.bufferSize, startBufferEvery = _a.startBufferEvery, buffers = _a.buffers, count = _a.count;\n this.count++;\n if (count % startBufferEvery === 0) {\n buffers.push([]);\n }\n for (var i = buffers.length; i--;) {\n var buffer = buffers[i];\n buffer.push(value);\n if (buffer.length === bufferSize) {\n buffers.splice(i, 1);\n this.destination.next(buffer);\n }\n }\n };\n BufferSkipCountSubscriber.prototype._complete = function () {\n var _a = this, buffers = _a.buffers, destination = _a.destination;\n while (buffers.length > 0) {\n var buffer = buffers.shift();\n if (buffer.length > 0) {\n destination.next(buffer);\n }\n }\n _super.prototype._complete.call(this);\n };\n return BufferSkipCountSubscriber;\n}(Subscriber));\n//# sourceMappingURL=bufferCount.js.map\n","import _curry1 from './_curry1.js';\nimport _isPlaceholder from './_isPlaceholder.js';\n\n/**\n * Optimized internal two-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\nexport default function _curry2(fn) {\n return function f2(a, b) {\n switch (arguments.length) {\n case 0:\n return f2;\n case 1:\n return _isPlaceholder(a) ? f2 : _curry1(function (_b) {\n return fn(a, _b);\n });\n default:\n return _isPlaceholder(a) && _isPlaceholder(b) ? f2 : _isPlaceholder(a) ? _curry1(function (_a) {\n return fn(_a, b);\n }) : _isPlaceholder(b) ? _curry1(function (_b) {\n return fn(a, _b);\n }) : fn(a, b);\n }\n };\n}","/**\n * Tests whether or not an object is an array.\n *\n * @private\n * @param {*} val The object to test.\n * @return {Boolean} `true` if `val` is an array, `false` otherwise.\n * @example\n *\n * _isArray([]); //=> true\n * _isArray(null); //=> false\n * _isArray({}); //=> false\n */\nexport default Array.isArray || function _isArray(val) {\n return val != null && val.length >= 0 && Object.prototype.toString.call(val) === '[object Array]';\n};","export default function _isTransformer(obj) {\n return obj != null && typeof obj['@@transducer/step'] === 'function';\n}","import _isArray from './_isArray.js';\nimport _isTransformer from './_isTransformer.js';\n\n/**\n * Returns a function that dispatches with different strategies based on the\n * object in list position (last argument). If it is an array, executes [fn].\n * Otherwise, if it has a function with one of the given method names, it will\n * execute that function (functor case). Otherwise, if it is a transformer,\n * uses transducer [xf] to return a new transformer (transducer case).\n * Otherwise, it will default to executing [fn].\n *\n * @private\n * @param {Array} methodNames properties to check for a custom implementation\n * @param {Function} xf transducer to initialize if object is transformer\n * @param {Function} fn default ramda implementation\n * @return {Function} A function that dispatches on object in list position\n */\nexport default function _dispatchable(methodNames, xf, fn) {\n return function () {\n if (arguments.length === 0) {\n return fn();\n }\n var args = Array.prototype.slice.call(arguments, 0);\n var obj = args.pop();\n if (!_isArray(obj)) {\n var idx = 0;\n while (idx < methodNames.length) {\n if (typeof obj[methodNames[idx]] === 'function') {\n return obj[methodNames[idx]].apply(obj, args);\n }\n idx += 1;\n }\n if (_isTransformer(obj)) {\n var transducer = xf.apply(null, args);\n return transducer(obj);\n }\n }\n return fn.apply(this, arguments);\n };\n}","export default {\n init: function () {\n return this.xf['@@transducer/init']();\n },\n result: function (result) {\n return this.xf['@@transducer/result'](result);\n }\n};","import _curry2 from './_curry2.js';\nimport _xfBase from './_xfBase.js';\n\nvar XFindLast = /*#__PURE__*/function () {\n function XFindLast(f, xf) {\n this.xf = xf;\n this.f = f;\n }\n XFindLast.prototype['@@transducer/init'] = _xfBase.init;\n XFindLast.prototype['@@transducer/result'] = function (result) {\n return this.xf['@@transducer/result'](this.xf['@@transducer/step'](result, this.last));\n };\n XFindLast.prototype['@@transducer/step'] = function (result, input) {\n if (this.f(input)) {\n this.last = input;\n }\n return result;\n };\n\n return XFindLast;\n}();\n\nvar _xfindLast = /*#__PURE__*/_curry2(function _xfindLast(f, xf) {\n return new XFindLast(f, xf);\n});\nexport default _xfindLast;","import _curry2 from './internal/_curry2.js';\nimport _dispatchable from './internal/_dispatchable.js';\nimport _xfindLast from './internal/_xfindLast.js';\n\n/**\n * Returns the last element of the list which matches the predicate, or\n * `undefined` if no element matches.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * @func\n * @memberOf R\n * @since v0.1.1\n * @category List\n * @sig (a -> Boolean) -> [a] -> a | undefined\n * @param {Function} fn The predicate function used to determine if the element is the\n * desired one.\n * @param {Array} list The array to consider.\n * @return {Object} The element found, or `undefined`.\n * @see R.transduce\n * @example\n *\n * const xs = [{a: 1, b: 0}, {a:1, b: 1}];\n * R.findLast(R.propEq('a', 1))(xs); //=> {a: 1, b: 1}\n * R.findLast(R.propEq('a', 4))(xs); //=> undefined\n */\nvar findLast = /*#__PURE__*/_curry2( /*#__PURE__*/_dispatchable([], _xfindLast, function findLast(fn, list) {\n var idx = list.length - 1;\n while (idx >= 0) {\n if (fn(list[idx])) {\n return list[idx];\n }\n idx -= 1;\n }\n}));\nexport default findLast;","/** PURE_IMPORTS_START tslib,_AsyncAction PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { AsyncAction } from './AsyncAction';\nvar QueueAction = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(QueueAction, _super);\n function QueueAction(scheduler, work) {\n var _this = _super.call(this, scheduler, work) || this;\n _this.scheduler = scheduler;\n _this.work = work;\n return _this;\n }\n QueueAction.prototype.schedule = function (state, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n if (delay > 0) {\n return _super.prototype.schedule.call(this, state, delay);\n }\n this.delay = delay;\n this.state = state;\n this.scheduler.flush(this);\n return this;\n };\n QueueAction.prototype.execute = function (state, delay) {\n return (delay > 0 || this.closed) ?\n _super.prototype.execute.call(this, state, delay) :\n this._execute(state, delay);\n };\n QueueAction.prototype.requestAsyncId = function (scheduler, id, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n if ((delay !== null && delay > 0) || (delay === null && this.delay > 0)) {\n return _super.prototype.requestAsyncId.call(this, scheduler, id, delay);\n }\n return scheduler.flush(this);\n };\n return QueueAction;\n}(AsyncAction));\nexport { QueueAction };\n//# sourceMappingURL=QueueAction.js.map\n","/** PURE_IMPORTS_START _QueueAction,_QueueScheduler PURE_IMPORTS_END */\nimport { QueueAction } from './QueueAction';\nimport { QueueScheduler } from './QueueScheduler';\nexport var queue = /*@__PURE__*/ new QueueScheduler(QueueAction);\n//# sourceMappingURL=queue.js.map\n","/** PURE_IMPORTS_START tslib,_AsyncScheduler PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { AsyncScheduler } from './AsyncScheduler';\nvar QueueScheduler = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(QueueScheduler, _super);\n function QueueScheduler() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return QueueScheduler;\n}(AsyncScheduler));\nexport { QueueScheduler };\n//# sourceMappingURL=QueueScheduler.js.map\n","/** PURE_IMPORTS_START tslib,_Subject,_scheduler_queue,_Subscription,_operators_observeOn,_util_ObjectUnsubscribedError,_SubjectSubscription PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Subject } from './Subject';\nimport { queue } from './scheduler/queue';\nimport { Subscription } from './Subscription';\nimport { ObserveOnSubscriber } from './operators/observeOn';\nimport { ObjectUnsubscribedError } from './util/ObjectUnsubscribedError';\nimport { SubjectSubscription } from './SubjectSubscription';\nvar ReplaySubject = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(ReplaySubject, _super);\n function ReplaySubject(bufferSize, windowTime, scheduler) {\n if (bufferSize === void 0) {\n bufferSize = Number.POSITIVE_INFINITY;\n }\n if (windowTime === void 0) {\n windowTime = Number.POSITIVE_INFINITY;\n }\n var _this = _super.call(this) || this;\n _this.scheduler = scheduler;\n _this._events = [];\n _this._infiniteTimeWindow = false;\n _this._bufferSize = bufferSize < 1 ? 1 : bufferSize;\n _this._windowTime = windowTime < 1 ? 1 : windowTime;\n if (windowTime === Number.POSITIVE_INFINITY) {\n _this._infiniteTimeWindow = true;\n _this.next = _this.nextInfiniteTimeWindow;\n }\n else {\n _this.next = _this.nextTimeWindow;\n }\n return _this;\n }\n ReplaySubject.prototype.nextInfiniteTimeWindow = function (value) {\n var _events = this._events;\n _events.push(value);\n if (_events.length > this._bufferSize) {\n _events.shift();\n }\n _super.prototype.next.call(this, value);\n };\n ReplaySubject.prototype.nextTimeWindow = function (value) {\n this._events.push(new ReplayEvent(this._getNow(), value));\n this._trimBufferThenGetEvents();\n _super.prototype.next.call(this, value);\n };\n ReplaySubject.prototype._subscribe = function (subscriber) {\n var _infiniteTimeWindow = this._infiniteTimeWindow;\n var _events = _infiniteTimeWindow ? this._events : this._trimBufferThenGetEvents();\n var scheduler = this.scheduler;\n var len = _events.length;\n var subscription;\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n else if (this.isStopped || this.hasError) {\n subscription = Subscription.EMPTY;\n }\n else {\n this.observers.push(subscriber);\n subscription = new SubjectSubscription(this, subscriber);\n }\n if (scheduler) {\n subscriber.add(subscriber = new ObserveOnSubscriber(subscriber, scheduler));\n }\n if (_infiniteTimeWindow) {\n for (var i = 0; i < len && !subscriber.closed; i++) {\n subscriber.next(_events[i]);\n }\n }\n else {\n for (var i = 0; i < len && !subscriber.closed; i++) {\n subscriber.next(_events[i].value);\n }\n }\n if (this.hasError) {\n subscriber.error(this.thrownError);\n }\n else if (this.isStopped) {\n subscriber.complete();\n }\n return subscription;\n };\n ReplaySubject.prototype._getNow = function () {\n return (this.scheduler || queue).now();\n };\n ReplaySubject.prototype._trimBufferThenGetEvents = function () {\n var now = this._getNow();\n var _bufferSize = this._bufferSize;\n var _windowTime = this._windowTime;\n var _events = this._events;\n var eventsCount = _events.length;\n var spliceCount = 0;\n while (spliceCount < eventsCount) {\n if ((now - _events[spliceCount].time) < _windowTime) {\n break;\n }\n spliceCount++;\n }\n if (eventsCount > _bufferSize) {\n spliceCount = Math.max(spliceCount, eventsCount - _bufferSize);\n }\n if (spliceCount > 0) {\n _events.splice(0, spliceCount);\n }\n return _events;\n };\n return ReplaySubject;\n}(Subject));\nexport { ReplaySubject };\nvar ReplayEvent = /*@__PURE__*/ (function () {\n function ReplayEvent(time, value) {\n this.time = time;\n this.value = value;\n }\n return ReplayEvent;\n}());\n//# sourceMappingURL=ReplaySubject.js.map\n","/** PURE_IMPORTS_START _ReplaySubject PURE_IMPORTS_END */\nimport { ReplaySubject } from '../ReplaySubject';\nexport function shareReplay(configOrBufferSize, windowTime, scheduler) {\n var config;\n if (configOrBufferSize && typeof configOrBufferSize === 'object') {\n config = configOrBufferSize;\n }\n else {\n config = {\n bufferSize: configOrBufferSize,\n windowTime: windowTime,\n refCount: false,\n scheduler: scheduler\n };\n }\n return function (source) { return source.lift(shareReplayOperator(config)); };\n}\nfunction shareReplayOperator(_a) {\n var _b = _a.bufferSize, bufferSize = _b === void 0 ? Number.POSITIVE_INFINITY : _b, _c = _a.windowTime, windowTime = _c === void 0 ? Number.POSITIVE_INFINITY : _c, useRefCount = _a.refCount, scheduler = _a.scheduler;\n var subject;\n var refCount = 0;\n var subscription;\n var hasError = false;\n var isComplete = false;\n return function shareReplayOperation(source) {\n refCount++;\n if (!subject || hasError) {\n hasError = false;\n subject = new ReplaySubject(bufferSize, windowTime, scheduler);\n subscription = source.subscribe({\n next: function (value) { subject.next(value); },\n error: function (err) {\n hasError = true;\n subject.error(err);\n },\n complete: function () {\n isComplete = true;\n subject.complete();\n },\n });\n }\n var innerSub = subject.subscribe(this);\n this.add(function () {\n refCount--;\n innerSub.unsubscribe();\n if (subscription && !isComplete && useRefCount && refCount === 0) {\n subscription.unsubscribe();\n subscription = undefined;\n subject = undefined;\n }\n });\n };\n}\n//# sourceMappingURL=shareReplay.js.map\n","/** PURE_IMPORTS_START _of,_operators_concatAll PURE_IMPORTS_END */\nimport { of } from './of';\nimport { concatAll } from '../operators/concatAll';\nexport function concat() {\n var observables = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n observables[_i] = arguments[_i];\n }\n return concatAll()(of.apply(void 0, observables));\n}\n//# sourceMappingURL=concat.js.map\n","/** PURE_IMPORTS_START _mergeAll PURE_IMPORTS_END */\nimport { mergeAll } from './mergeAll';\nexport function concatAll() {\n return mergeAll(1);\n}\n//# sourceMappingURL=concatAll.js.map\n","/** PURE_IMPORTS_START _observable_concat,_util_isScheduler PURE_IMPORTS_END */\nimport { concat } from '../observable/concat';\nimport { isScheduler } from '../util/isScheduler';\nexport function startWith() {\n var array = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n array[_i] = arguments[_i];\n }\n var scheduler = array[array.length - 1];\n if (isScheduler(scheduler)) {\n array.pop();\n return function (source) { return concat(array, source, scheduler); };\n }\n else {\n return function (source) { return concat(array, source); };\n }\n}\n//# sourceMappingURL=startWith.js.map\n","/** PURE_IMPORTS_START tslib,_scheduler_async,_util_isDate,_Subscriber,_Notification PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { async } from '../scheduler/async';\nimport { isDate } from '../util/isDate';\nimport { Subscriber } from '../Subscriber';\nimport { Notification } from '../Notification';\nexport function delay(delay, scheduler) {\n if (scheduler === void 0) {\n scheduler = async;\n }\n var absoluteDelay = isDate(delay);\n var delayFor = absoluteDelay ? (+delay - scheduler.now()) : Math.abs(delay);\n return function (source) { return source.lift(new DelayOperator(delayFor, scheduler)); };\n}\nvar DelayOperator = /*@__PURE__*/ (function () {\n function DelayOperator(delay, scheduler) {\n this.delay = delay;\n this.scheduler = scheduler;\n }\n DelayOperator.prototype.call = function (subscriber, source) {\n return source.subscribe(new DelaySubscriber(subscriber, this.delay, this.scheduler));\n };\n return DelayOperator;\n}());\nvar DelaySubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(DelaySubscriber, _super);\n function DelaySubscriber(destination, delay, scheduler) {\n var _this = _super.call(this, destination) || this;\n _this.delay = delay;\n _this.scheduler = scheduler;\n _this.queue = [];\n _this.active = false;\n _this.errored = false;\n return _this;\n }\n DelaySubscriber.dispatch = function (state) {\n var source = state.source;\n var queue = source.queue;\n var scheduler = state.scheduler;\n var destination = state.destination;\n while (queue.length > 0 && (queue[0].time - scheduler.now()) <= 0) {\n queue.shift().notification.observe(destination);\n }\n if (queue.length > 0) {\n var delay_1 = Math.max(0, queue[0].time - scheduler.now());\n this.schedule(state, delay_1);\n }\n else {\n this.unsubscribe();\n source.active = false;\n }\n };\n DelaySubscriber.prototype._schedule = function (scheduler) {\n this.active = true;\n var destination = this.destination;\n destination.add(scheduler.schedule(DelaySubscriber.dispatch, this.delay, {\n source: this, destination: this.destination, scheduler: scheduler\n }));\n };\n DelaySubscriber.prototype.scheduleNotification = function (notification) {\n if (this.errored === true) {\n return;\n }\n var scheduler = this.scheduler;\n var message = new DelayMessage(scheduler.now() + this.delay, notification);\n this.queue.push(message);\n if (this.active === false) {\n this._schedule(scheduler);\n }\n };\n DelaySubscriber.prototype._next = function (value) {\n this.scheduleNotification(Notification.createNext(value));\n };\n DelaySubscriber.prototype._error = function (err) {\n this.errored = true;\n this.queue = [];\n this.destination.error(err);\n this.unsubscribe();\n };\n DelaySubscriber.prototype._complete = function () {\n this.scheduleNotification(Notification.createComplete());\n this.unsubscribe();\n };\n return DelaySubscriber;\n}(Subscriber));\nvar DelayMessage = /*@__PURE__*/ (function () {\n function DelayMessage(time, notification) {\n this.time = time;\n this.notification = notification;\n }\n return DelayMessage;\n}());\n//# sourceMappingURL=delay.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport function isDate(value) {\n return value instanceof Date && !isNaN(+value);\n}\n//# sourceMappingURL=isDate.js.map\n","import _curry1 from './internal/_curry1.js';\nimport _isString from './internal/_isString.js';\n\n/**\n * Returns a new list or string with the elements or characters in reverse\n * order.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig [a] -> [a]\n * @sig String -> String\n * @param {Array|String} list\n * @return {Array|String}\n * @example\n *\n * R.reverse([1, 2, 3]); //=> [3, 2, 1]\n * R.reverse([1, 2]); //=> [2, 1]\n * R.reverse([1]); //=> [1]\n * R.reverse([]); //=> []\n *\n * R.reverse('abc'); //=> 'cba'\n * R.reverse('ab'); //=> 'ba'\n * R.reverse('a'); //=> 'a'\n * R.reverse(''); //=> ''\n */\nvar reverse = /*#__PURE__*/_curry1(function reverse(list) {\n return _isString(list) ? list.split('').reverse().join('') : Array.prototype.slice.call(list, 0).reverse();\n});\nexport default reverse;","export default function _isString(x) {\n return Object.prototype.toString.call(x) === '[object String]';\n}","/** PURE_IMPORTS_START tslib,_Subject,_util_ObjectUnsubscribedError PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Subject } from './Subject';\nimport { ObjectUnsubscribedError } from './util/ObjectUnsubscribedError';\nvar BehaviorSubject = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(BehaviorSubject, _super);\n function BehaviorSubject(_value) {\n var _this = _super.call(this) || this;\n _this._value = _value;\n return _this;\n }\n Object.defineProperty(BehaviorSubject.prototype, \"value\", {\n get: function () {\n return this.getValue();\n },\n enumerable: true,\n configurable: true\n });\n BehaviorSubject.prototype._subscribe = function (subscriber) {\n var subscription = _super.prototype._subscribe.call(this, subscriber);\n if (subscription && !subscription.closed) {\n subscriber.next(this._value);\n }\n return subscription;\n };\n BehaviorSubject.prototype.getValue = function () {\n if (this.hasError) {\n throw this.thrownError;\n }\n else if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n else {\n return this._value;\n }\n };\n BehaviorSubject.prototype.next = function (value) {\n _super.prototype.next.call(this, this._value = value);\n };\n return BehaviorSubject;\n}(Subject));\nexport { BehaviorSubject };\n//# sourceMappingURL=BehaviorSubject.js.map\n","/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Subscriber } from '../Subscriber';\nexport function filter(predicate, thisArg) {\n return function filterOperatorFunction(source) {\n return source.lift(new FilterOperator(predicate, thisArg));\n };\n}\nvar FilterOperator = /*@__PURE__*/ (function () {\n function FilterOperator(predicate, thisArg) {\n this.predicate = predicate;\n this.thisArg = thisArg;\n }\n FilterOperator.prototype.call = function (subscriber, source) {\n return source.subscribe(new FilterSubscriber(subscriber, this.predicate, this.thisArg));\n };\n return FilterOperator;\n}());\nvar FilterSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(FilterSubscriber, _super);\n function FilterSubscriber(destination, predicate, thisArg) {\n var _this = _super.call(this, destination) || this;\n _this.predicate = predicate;\n _this.thisArg = thisArg;\n _this.count = 0;\n return _this;\n }\n FilterSubscriber.prototype._next = function (value) {\n var result;\n try {\n result = this.predicate.call(this.thisArg, value, this.count++);\n }\n catch (err) {\n this.destination.error(err);\n return;\n }\n if (result) {\n this.destination.next(value);\n }\n };\n return FilterSubscriber;\n}(Subscriber));\n//# sourceMappingURL=filter.js.map\n","/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Subscriber } from '../Subscriber';\nexport function skip(count) {\n return function (source) { return source.lift(new SkipOperator(count)); };\n}\nvar SkipOperator = /*@__PURE__*/ (function () {\n function SkipOperator(total) {\n this.total = total;\n }\n SkipOperator.prototype.call = function (subscriber, source) {\n return source.subscribe(new SkipSubscriber(subscriber, this.total));\n };\n return SkipOperator;\n}());\nvar SkipSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(SkipSubscriber, _super);\n function SkipSubscriber(destination, total) {\n var _this = _super.call(this, destination) || this;\n _this.total = total;\n _this.count = 0;\n return _this;\n }\n SkipSubscriber.prototype._next = function (x) {\n if (++this.count > this.total) {\n this.destination.next(x);\n }\n };\n return SkipSubscriber;\n}(Subscriber));\n//# sourceMappingURL=skip.js.map\n","/** PURE_IMPORTS_START _map PURE_IMPORTS_END */\nimport { map } from './map';\nexport function pluck() {\n var properties = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n properties[_i] = arguments[_i];\n }\n var length = properties.length;\n if (length === 0) {\n throw new Error('list of properties cannot be empty.');\n }\n return function (source) { return map(plucker(properties, length))(source); };\n}\nfunction plucker(props, length) {\n var mapper = function (x) {\n var currentProp = x;\n for (var i = 0; i < length; i++) {\n var p = currentProp[props[i]];\n if (typeof p !== 'undefined') {\n currentProp = p;\n }\n else {\n return undefined;\n }\n }\n return currentProp;\n };\n return mapper;\n}\n//# sourceMappingURL=pluck.js.map\n","/** PURE_IMPORTS_START tslib,_OuterSubscriber,_InnerSubscriber,_util_subscribeToResult PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { OuterSubscriber } from '../OuterSubscriber';\nimport { InnerSubscriber } from '../InnerSubscriber';\nimport { subscribeToResult } from '../util/subscribeToResult';\nexport function catchError(selector) {\n return function catchErrorOperatorFunction(source) {\n var operator = new CatchOperator(selector);\n var caught = source.lift(operator);\n return (operator.caught = caught);\n };\n}\nvar CatchOperator = /*@__PURE__*/ (function () {\n function CatchOperator(selector) {\n this.selector = selector;\n }\n CatchOperator.prototype.call = function (subscriber, source) {\n return source.subscribe(new CatchSubscriber(subscriber, this.selector, this.caught));\n };\n return CatchOperator;\n}());\nvar CatchSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(CatchSubscriber, _super);\n function CatchSubscriber(destination, selector, caught) {\n var _this = _super.call(this, destination) || this;\n _this.selector = selector;\n _this.caught = caught;\n return _this;\n }\n CatchSubscriber.prototype.error = function (err) {\n if (!this.isStopped) {\n var result = void 0;\n try {\n result = this.selector(err, this.caught);\n }\n catch (err2) {\n _super.prototype.error.call(this, err2);\n return;\n }\n this._unsubscribeAndRecycle();\n var innerSubscriber = new InnerSubscriber(this, undefined, undefined);\n this.add(innerSubscriber);\n subscribeToResult(this, result, undefined, undefined, innerSubscriber);\n }\n };\n return CatchSubscriber;\n}(OuterSubscriber));\n//# sourceMappingURL=catchError.js.map\n","/** PURE_IMPORTS_START _Observable,_util_noop PURE_IMPORTS_END */\nimport { Observable } from '../Observable';\nimport { noop } from '../util/noop';\nexport var NEVER = /*@__PURE__*/ new Observable(noop);\nexport function never() {\n return NEVER;\n}\n//# sourceMappingURL=never.js.map\n","/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Subscriber } from '../Subscriber';\nexport function mapTo(value) {\n return function (source) { return source.lift(new MapToOperator(value)); };\n}\nvar MapToOperator = /*@__PURE__*/ (function () {\n function MapToOperator(value) {\n this.value = value;\n }\n MapToOperator.prototype.call = function (subscriber, source) {\n return source.subscribe(new MapToSubscriber(subscriber, this.value));\n };\n return MapToOperator;\n}());\nvar MapToSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(MapToSubscriber, _super);\n function MapToSubscriber(destination, value) {\n var _this = _super.call(this, destination) || this;\n _this.value = value;\n return _this;\n }\n MapToSubscriber.prototype._next = function (x) {\n this.destination.next(this.value);\n };\n return MapToSubscriber;\n}(Subscriber));\n//# sourceMappingURL=mapTo.js.map\n","/** PURE_IMPORTS_START _Observable,_util_isArray,_util_isFunction,_operators_map PURE_IMPORTS_END */\nimport { Observable } from '../Observable';\nimport { isArray } from '../util/isArray';\nimport { isFunction } from '../util/isFunction';\nimport { map } from '../operators/map';\nexport function fromEventPattern(addHandler, removeHandler, resultSelector) {\n if (resultSelector) {\n return fromEventPattern(addHandler, removeHandler).pipe(map(function (args) { return isArray(args) ? resultSelector.apply(void 0, args) : resultSelector(args); }));\n }\n return new Observable(function (subscriber) {\n var handler = function () {\n var e = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n e[_i] = arguments[_i];\n }\n return subscriber.next(e.length === 1 ? e[0] : e);\n };\n var retValue;\n try {\n retValue = addHandler(handler);\n }\n catch (err) {\n subscriber.error(err);\n return undefined;\n }\n if (!isFunction(removeHandler)) {\n return undefined;\n }\n return function () { return removeHandler(handler, retValue); };\n });\n}\n//# sourceMappingURL=fromEventPattern.js.map\n","/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { OuterSubscriber } from '../OuterSubscriber';\nimport { subscribeToResult } from '../util/subscribeToResult';\nexport var defaultThrottleConfig = {\n leading: true,\n trailing: false\n};\nexport function throttle(durationSelector, config) {\n if (config === void 0) {\n config = defaultThrottleConfig;\n }\n return function (source) { return source.lift(new ThrottleOperator(durationSelector, config.leading, config.trailing)); };\n}\nvar ThrottleOperator = /*@__PURE__*/ (function () {\n function ThrottleOperator(durationSelector, leading, trailing) {\n this.durationSelector = durationSelector;\n this.leading = leading;\n this.trailing = trailing;\n }\n ThrottleOperator.prototype.call = function (subscriber, source) {\n return source.subscribe(new ThrottleSubscriber(subscriber, this.durationSelector, this.leading, this.trailing));\n };\n return ThrottleOperator;\n}());\nvar ThrottleSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(ThrottleSubscriber, _super);\n function ThrottleSubscriber(destination, durationSelector, _leading, _trailing) {\n var _this = _super.call(this, destination) || this;\n _this.destination = destination;\n _this.durationSelector = durationSelector;\n _this._leading = _leading;\n _this._trailing = _trailing;\n _this._hasValue = false;\n return _this;\n }\n ThrottleSubscriber.prototype._next = function (value) {\n this._hasValue = true;\n this._sendValue = value;\n if (!this._throttled) {\n if (this._leading) {\n this.send();\n }\n else {\n this.throttle(value);\n }\n }\n };\n ThrottleSubscriber.prototype.send = function () {\n var _a = this, _hasValue = _a._hasValue, _sendValue = _a._sendValue;\n if (_hasValue) {\n this.destination.next(_sendValue);\n this.throttle(_sendValue);\n }\n this._hasValue = false;\n this._sendValue = null;\n };\n ThrottleSubscriber.prototype.throttle = function (value) {\n var duration = this.tryDurationSelector(value);\n if (!!duration) {\n this.add(this._throttled = subscribeToResult(this, duration));\n }\n };\n ThrottleSubscriber.prototype.tryDurationSelector = function (value) {\n try {\n return this.durationSelector(value);\n }\n catch (err) {\n this.destination.error(err);\n return null;\n }\n };\n ThrottleSubscriber.prototype.throttlingDone = function () {\n var _a = this, _throttled = _a._throttled, _trailing = _a._trailing;\n if (_throttled) {\n _throttled.unsubscribe();\n }\n this._throttled = null;\n if (_trailing) {\n this.send();\n }\n };\n ThrottleSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n this.throttlingDone();\n };\n ThrottleSubscriber.prototype.notifyComplete = function () {\n this.throttlingDone();\n };\n return ThrottleSubscriber;\n}(OuterSubscriber));\n//# sourceMappingURL=throttle.js.map\n","/** PURE_IMPORTS_START _switchMap PURE_IMPORTS_END */\nimport { switchMap } from './switchMap';\nexport function switchMapTo(innerObservable, resultSelector) {\n return resultSelector ? switchMap(function () { return innerObservable; }, resultSelector) : switchMap(function () { return innerObservable; });\n}\n//# sourceMappingURL=switchMapTo.js.map\n","/** PURE_IMPORTS_START tslib,_Subscriber,_scheduler_async PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Subscriber } from '../Subscriber';\nimport { async } from '../scheduler/async';\nexport function debounceTime(dueTime, scheduler) {\n if (scheduler === void 0) {\n scheduler = async;\n }\n return function (source) { return source.lift(new DebounceTimeOperator(dueTime, scheduler)); };\n}\nvar DebounceTimeOperator = /*@__PURE__*/ (function () {\n function DebounceTimeOperator(dueTime, scheduler) {\n this.dueTime = dueTime;\n this.scheduler = scheduler;\n }\n DebounceTimeOperator.prototype.call = function (subscriber, source) {\n return source.subscribe(new DebounceTimeSubscriber(subscriber, this.dueTime, this.scheduler));\n };\n return DebounceTimeOperator;\n}());\nvar DebounceTimeSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(DebounceTimeSubscriber, _super);\n function DebounceTimeSubscriber(destination, dueTime, scheduler) {\n var _this = _super.call(this, destination) || this;\n _this.dueTime = dueTime;\n _this.scheduler = scheduler;\n _this.debouncedSubscription = null;\n _this.lastValue = null;\n _this.hasValue = false;\n return _this;\n }\n DebounceTimeSubscriber.prototype._next = function (value) {\n this.clearDebounce();\n this.lastValue = value;\n this.hasValue = true;\n this.add(this.debouncedSubscription = this.scheduler.schedule(dispatchNext, this.dueTime, this));\n };\n DebounceTimeSubscriber.prototype._complete = function () {\n this.debouncedNext();\n this.destination.complete();\n };\n DebounceTimeSubscriber.prototype.debouncedNext = function () {\n this.clearDebounce();\n if (this.hasValue) {\n var lastValue = this.lastValue;\n this.lastValue = null;\n this.hasValue = false;\n this.destination.next(lastValue);\n }\n };\n DebounceTimeSubscriber.prototype.clearDebounce = function () {\n var debouncedSubscription = this.debouncedSubscription;\n if (debouncedSubscription !== null) {\n this.remove(debouncedSubscription);\n debouncedSubscription.unsubscribe();\n this.debouncedSubscription = null;\n }\n };\n return DebounceTimeSubscriber;\n}(Subscriber));\nfunction dispatchNext(subscriber) {\n subscriber.debouncedNext();\n}\n//# sourceMappingURL=debounceTime.js.map\n","/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { OuterSubscriber } from '../OuterSubscriber';\nimport { subscribeToResult } from '../util/subscribeToResult';\nexport function sample(notifier) {\n return function (source) { return source.lift(new SampleOperator(notifier)); };\n}\nvar SampleOperator = /*@__PURE__*/ (function () {\n function SampleOperator(notifier) {\n this.notifier = notifier;\n }\n SampleOperator.prototype.call = function (subscriber, source) {\n var sampleSubscriber = new SampleSubscriber(subscriber);\n var subscription = source.subscribe(sampleSubscriber);\n subscription.add(subscribeToResult(sampleSubscriber, this.notifier));\n return subscription;\n };\n return SampleOperator;\n}());\nvar SampleSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(SampleSubscriber, _super);\n function SampleSubscriber() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.hasValue = false;\n return _this;\n }\n SampleSubscriber.prototype._next = function (value) {\n this.value = value;\n this.hasValue = true;\n };\n SampleSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n this.emitValue();\n };\n SampleSubscriber.prototype.notifyComplete = function () {\n this.emitValue();\n };\n SampleSubscriber.prototype.emitValue = function () {\n if (this.hasValue) {\n this.hasValue = false;\n this.destination.next(this.value);\n }\n };\n return SampleSubscriber;\n}(OuterSubscriber));\n//# sourceMappingURL=sample.js.map\n","/** PURE_IMPORTS_START _defer,_empty PURE_IMPORTS_END */\nimport { defer } from './defer';\nimport { EMPTY } from './empty';\nexport function iif(condition, trueResult, falseResult) {\n if (trueResult === void 0) {\n trueResult = EMPTY;\n }\n if (falseResult === void 0) {\n falseResult = EMPTY;\n }\n return defer(function () { return condition() ? trueResult : falseResult; });\n}\n//# sourceMappingURL=iif.js.map\n","import _curry1 from './internal/_curry1.js';\nimport keys from './keys.js';\n\n/**\n * Returns a list of all the enumerable own properties of the supplied object.\n * Note that the order of the output array is not guaranteed across different\n * JS platforms.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Object\n * @sig {k: v} -> [v]\n * @param {Object} obj The object to extract values from\n * @return {Array} An array of the values of the object's own properties.\n * @see R.valuesIn, R.keys\n * @example\n *\n * R.values({a: 1, b: 2, c: 3}); //=> [1, 2, 3]\n */\nvar values = /*#__PURE__*/_curry1(function values(obj) {\n var props = keys(obj);\n var len = props.length;\n var vals = [];\n var idx = 0;\n while (idx < len) {\n vals[idx] = obj[props[idx]];\n idx += 1;\n }\n return vals;\n});\nexport default values;","/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Subscriber } from '../Subscriber';\nexport function refCount() {\n return function refCountOperatorFunction(source) {\n return source.lift(new RefCountOperator(source));\n };\n}\nvar RefCountOperator = /*@__PURE__*/ (function () {\n function RefCountOperator(connectable) {\n this.connectable = connectable;\n }\n RefCountOperator.prototype.call = function (subscriber, source) {\n var connectable = this.connectable;\n connectable._refCount++;\n var refCounter = new RefCountSubscriber(subscriber, connectable);\n var subscription = source.subscribe(refCounter);\n if (!refCounter.closed) {\n refCounter.connection = connectable.connect();\n }\n return subscription;\n };\n return RefCountOperator;\n}());\nvar RefCountSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(RefCountSubscriber, _super);\n function RefCountSubscriber(destination, connectable) {\n var _this = _super.call(this, destination) || this;\n _this.connectable = connectable;\n return _this;\n }\n RefCountSubscriber.prototype._unsubscribe = function () {\n var connectable = this.connectable;\n if (!connectable) {\n this.connection = null;\n return;\n }\n this.connectable = null;\n var refCount = connectable._refCount;\n if (refCount <= 0) {\n this.connection = null;\n return;\n }\n connectable._refCount = refCount - 1;\n if (refCount > 1) {\n this.connection = null;\n return;\n }\n var connection = this.connection;\n var sharedConnection = connectable._connection;\n this.connection = null;\n if (sharedConnection && (!connection || sharedConnection === connection)) {\n sharedConnection.unsubscribe();\n }\n };\n return RefCountSubscriber;\n}(Subscriber));\n//# sourceMappingURL=refCount.js.map\n","/** PURE_IMPORTS_START tslib,_Subject,_Observable,_Subscriber,_Subscription,_operators_refCount PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { SubjectSubscriber } from '../Subject';\nimport { Observable } from '../Observable';\nimport { Subscriber } from '../Subscriber';\nimport { Subscription } from '../Subscription';\nimport { refCount as higherOrderRefCount } from '../operators/refCount';\nvar ConnectableObservable = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(ConnectableObservable, _super);\n function ConnectableObservable(source, subjectFactory) {\n var _this = _super.call(this) || this;\n _this.source = source;\n _this.subjectFactory = subjectFactory;\n _this._refCount = 0;\n _this._isComplete = false;\n return _this;\n }\n ConnectableObservable.prototype._subscribe = function (subscriber) {\n return this.getSubject().subscribe(subscriber);\n };\n ConnectableObservable.prototype.getSubject = function () {\n var subject = this._subject;\n if (!subject || subject.isStopped) {\n this._subject = this.subjectFactory();\n }\n return this._subject;\n };\n ConnectableObservable.prototype.connect = function () {\n var connection = this._connection;\n if (!connection) {\n this._isComplete = false;\n connection = this._connection = new Subscription();\n connection.add(this.source\n .subscribe(new ConnectableSubscriber(this.getSubject(), this)));\n if (connection.closed) {\n this._connection = null;\n connection = Subscription.EMPTY;\n }\n }\n return connection;\n };\n ConnectableObservable.prototype.refCount = function () {\n return higherOrderRefCount()(this);\n };\n return ConnectableObservable;\n}(Observable));\nexport { ConnectableObservable };\nexport var connectableObservableDescriptor = /*@__PURE__*/ (function () {\n var connectableProto = ConnectableObservable.prototype;\n return {\n operator: { value: null },\n _refCount: { value: 0, writable: true },\n _subject: { value: null, writable: true },\n _connection: { value: null, writable: true },\n _subscribe: { value: connectableProto._subscribe },\n _isComplete: { value: connectableProto._isComplete, writable: true },\n getSubject: { value: connectableProto.getSubject },\n connect: { value: connectableProto.connect },\n refCount: { value: connectableProto.refCount }\n };\n})();\nvar ConnectableSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(ConnectableSubscriber, _super);\n function ConnectableSubscriber(destination, connectable) {\n var _this = _super.call(this, destination) || this;\n _this.connectable = connectable;\n return _this;\n }\n ConnectableSubscriber.prototype._error = function (err) {\n this._unsubscribe();\n _super.prototype._error.call(this, err);\n };\n ConnectableSubscriber.prototype._complete = function () {\n this.connectable._isComplete = true;\n this._unsubscribe();\n _super.prototype._complete.call(this);\n };\n ConnectableSubscriber.prototype._unsubscribe = function () {\n var connectable = this.connectable;\n if (connectable) {\n this.connectable = null;\n var connection = connectable._connection;\n connectable._refCount = 0;\n connectable._subject = null;\n connectable._connection = null;\n if (connection) {\n connection.unsubscribe();\n }\n }\n };\n return ConnectableSubscriber;\n}(SubjectSubscriber));\nvar RefCountOperator = /*@__PURE__*/ (function () {\n function RefCountOperator(connectable) {\n this.connectable = connectable;\n }\n RefCountOperator.prototype.call = function (subscriber, source) {\n var connectable = this.connectable;\n connectable._refCount++;\n var refCounter = new RefCountSubscriber(subscriber, connectable);\n var subscription = source.subscribe(refCounter);\n if (!refCounter.closed) {\n refCounter.connection = connectable.connect();\n }\n return subscription;\n };\n return RefCountOperator;\n}());\nvar RefCountSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(RefCountSubscriber, _super);\n function RefCountSubscriber(destination, connectable) {\n var _this = _super.call(this, destination) || this;\n _this.connectable = connectable;\n return _this;\n }\n RefCountSubscriber.prototype._unsubscribe = function () {\n var connectable = this.connectable;\n if (!connectable) {\n this.connection = null;\n return;\n }\n this.connectable = null;\n var refCount = connectable._refCount;\n if (refCount <= 0) {\n this.connection = null;\n return;\n }\n connectable._refCount = refCount - 1;\n if (refCount > 1) {\n this.connection = null;\n return;\n }\n var connection = this.connection;\n var sharedConnection = connectable._connection;\n this.connection = null;\n if (sharedConnection && (!connection || sharedConnection === connection)) {\n sharedConnection.unsubscribe();\n }\n };\n return RefCountSubscriber;\n}(Subscriber));\n//# sourceMappingURL=ConnectableObservable.js.map\n","/** PURE_IMPORTS_START _observable_ConnectableObservable PURE_IMPORTS_END */\nimport { connectableObservableDescriptor } from '../observable/ConnectableObservable';\nexport function multicast(subjectOrSubjectFactory, selector) {\n return function multicastOperatorFunction(source) {\n var subjectFactory;\n if (typeof subjectOrSubjectFactory === 'function') {\n subjectFactory = subjectOrSubjectFactory;\n }\n else {\n subjectFactory = function subjectFactory() {\n return subjectOrSubjectFactory;\n };\n }\n if (typeof selector === 'function') {\n return source.lift(new MulticastOperator(subjectFactory, selector));\n }\n var connectable = Object.create(source, connectableObservableDescriptor);\n connectable.source = source;\n connectable.subjectFactory = subjectFactory;\n return connectable;\n };\n}\nvar MulticastOperator = /*@__PURE__*/ (function () {\n function MulticastOperator(subjectFactory, selector) {\n this.subjectFactory = subjectFactory;\n this.selector = selector;\n }\n MulticastOperator.prototype.call = function (subscriber, source) {\n var selector = this.selector;\n var subject = this.subjectFactory();\n var subscription = selector(subject).subscribe(subscriber);\n subscription.add(source.subscribe(subject));\n return subscription;\n };\n return MulticastOperator;\n}());\nexport { MulticastOperator };\n//# sourceMappingURL=multicast.js.map\n","/** PURE_IMPORTS_START _multicast,_refCount,_Subject PURE_IMPORTS_END */\nimport { multicast } from './multicast';\nimport { refCount } from './refCount';\nimport { Subject } from '../Subject';\nfunction shareSubjectFactory() {\n return new Subject();\n}\nexport function share() {\n return function (source) { return refCount()(multicast(shareSubjectFactory)(source)); };\n}\n//# sourceMappingURL=share.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nvar ArgumentOutOfRangeErrorImpl = /*@__PURE__*/ (function () {\n function ArgumentOutOfRangeErrorImpl() {\n Error.call(this);\n this.message = 'argument out of range';\n this.name = 'ArgumentOutOfRangeError';\n return this;\n }\n ArgumentOutOfRangeErrorImpl.prototype = /*@__PURE__*/ Object.create(Error.prototype);\n return ArgumentOutOfRangeErrorImpl;\n})();\nexport var ArgumentOutOfRangeError = ArgumentOutOfRangeErrorImpl;\n//# sourceMappingURL=ArgumentOutOfRangeError.js.map\n","/** PURE_IMPORTS_START tslib,_Subscriber,_util_ArgumentOutOfRangeError,_observable_empty PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Subscriber } from '../Subscriber';\nimport { ArgumentOutOfRangeError } from '../util/ArgumentOutOfRangeError';\nimport { empty } from '../observable/empty';\nexport function take(count) {\n return function (source) {\n if (count === 0) {\n return empty();\n }\n else {\n return source.lift(new TakeOperator(count));\n }\n };\n}\nvar TakeOperator = /*@__PURE__*/ (function () {\n function TakeOperator(total) {\n this.total = total;\n if (this.total < 0) {\n throw new ArgumentOutOfRangeError;\n }\n }\n TakeOperator.prototype.call = function (subscriber, source) {\n return source.subscribe(new TakeSubscriber(subscriber, this.total));\n };\n return TakeOperator;\n}());\nvar TakeSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(TakeSubscriber, _super);\n function TakeSubscriber(destination, total) {\n var _this = _super.call(this, destination) || this;\n _this.total = total;\n _this.count = 0;\n return _this;\n }\n TakeSubscriber.prototype._next = function (value) {\n var total = this.total;\n var count = ++this.count;\n if (count <= total) {\n this.destination.next(value);\n if (count === total) {\n this.destination.complete();\n this.unsubscribe();\n }\n }\n };\n return TakeSubscriber;\n}(Subscriber));\n//# sourceMappingURL=take.js.map\n","export default function _identity(x) {\n return x;\n}","import _curry1 from './internal/_curry1.js';\nimport _identity from './internal/_identity.js';\n\n/**\n * A function that does nothing but return the parameter supplied to it. Good\n * as a default or placeholder function.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Function\n * @sig a -> a\n * @param {*} x The value to return.\n * @return {*} The input value, `x`.\n * @example\n *\n * R.identity(1); //=> 1\n *\n * const obj = {};\n * R.identity(obj) === obj; //=> true\n * @symb R.identity(a) = a\n */\nvar identity = /*#__PURE__*/_curry1(_identity);\nexport default identity;","/** PURE_IMPORTS_START tslib,_.._util_root,_.._Observable,_.._Subscriber,_.._operators_map PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { root } from '../../util/root';\nimport { Observable } from '../../Observable';\nimport { Subscriber } from '../../Subscriber';\nimport { map } from '../../operators/map';\nfunction getCORSRequest() {\n if (root.XMLHttpRequest) {\n return new root.XMLHttpRequest();\n }\n else if (!!root.XDomainRequest) {\n return new root.XDomainRequest();\n }\n else {\n throw new Error('CORS is not supported by your browser');\n }\n}\nfunction getXMLHttpRequest() {\n if (root.XMLHttpRequest) {\n return new root.XMLHttpRequest();\n }\n else {\n var progId = void 0;\n try {\n var progIds = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'];\n for (var i = 0; i < 3; i++) {\n try {\n progId = progIds[i];\n if (new root.ActiveXObject(progId)) {\n break;\n }\n }\n catch (e) {\n }\n }\n return new root.ActiveXObject(progId);\n }\n catch (e) {\n throw new Error('XMLHttpRequest is not supported by your browser');\n }\n }\n}\nexport function ajaxGet(url, headers) {\n if (headers === void 0) {\n headers = null;\n }\n return new AjaxObservable({ method: 'GET', url: url, headers: headers });\n}\nexport function ajaxPost(url, body, headers) {\n return new AjaxObservable({ method: 'POST', url: url, body: body, headers: headers });\n}\nexport function ajaxDelete(url, headers) {\n return new AjaxObservable({ method: 'DELETE', url: url, headers: headers });\n}\nexport function ajaxPut(url, body, headers) {\n return new AjaxObservable({ method: 'PUT', url: url, body: body, headers: headers });\n}\nexport function ajaxPatch(url, body, headers) {\n return new AjaxObservable({ method: 'PATCH', url: url, body: body, headers: headers });\n}\nvar mapResponse = /*@__PURE__*/ map(function (x, index) { return x.response; });\nexport function ajaxGetJSON(url, headers) {\n return mapResponse(new AjaxObservable({\n method: 'GET',\n url: url,\n responseType: 'json',\n headers: headers\n }));\n}\nvar AjaxObservable = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(AjaxObservable, _super);\n function AjaxObservable(urlOrRequest) {\n var _this = _super.call(this) || this;\n var request = {\n async: true,\n createXHR: function () {\n return this.crossDomain ? getCORSRequest() : getXMLHttpRequest();\n },\n crossDomain: true,\n withCredentials: false,\n headers: {},\n method: 'GET',\n responseType: 'json',\n timeout: 0\n };\n if (typeof urlOrRequest === 'string') {\n request.url = urlOrRequest;\n }\n else {\n for (var prop in urlOrRequest) {\n if (urlOrRequest.hasOwnProperty(prop)) {\n request[prop] = urlOrRequest[prop];\n }\n }\n }\n _this.request = request;\n return _this;\n }\n AjaxObservable.prototype._subscribe = function (subscriber) {\n return new AjaxSubscriber(subscriber, this.request);\n };\n AjaxObservable.create = (function () {\n var create = function (urlOrRequest) {\n return new AjaxObservable(urlOrRequest);\n };\n create.get = ajaxGet;\n create.post = ajaxPost;\n create.delete = ajaxDelete;\n create.put = ajaxPut;\n create.patch = ajaxPatch;\n create.getJSON = ajaxGetJSON;\n return create;\n })();\n return AjaxObservable;\n}(Observable));\nexport { AjaxObservable };\nvar AjaxSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(AjaxSubscriber, _super);\n function AjaxSubscriber(destination, request) {\n var _this = _super.call(this, destination) || this;\n _this.request = request;\n _this.done = false;\n var headers = request.headers = request.headers || {};\n if (!request.crossDomain && !_this.getHeader(headers, 'X-Requested-With')) {\n headers['X-Requested-With'] = 'XMLHttpRequest';\n }\n var contentTypeHeader = _this.getHeader(headers, 'Content-Type');\n if (!contentTypeHeader && !(root.FormData && request.body instanceof root.FormData) && typeof request.body !== 'undefined') {\n headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';\n }\n request.body = _this.serializeBody(request.body, _this.getHeader(request.headers, 'Content-Type'));\n _this.send();\n return _this;\n }\n AjaxSubscriber.prototype.next = function (e) {\n this.done = true;\n var _a = this, xhr = _a.xhr, request = _a.request, destination = _a.destination;\n var result;\n try {\n result = new AjaxResponse(e, xhr, request);\n }\n catch (err) {\n return destination.error(err);\n }\n destination.next(result);\n };\n AjaxSubscriber.prototype.send = function () {\n var _a = this, request = _a.request, _b = _a.request, user = _b.user, method = _b.method, url = _b.url, async = _b.async, password = _b.password, headers = _b.headers, body = _b.body;\n try {\n var xhr = this.xhr = request.createXHR();\n this.setupEvents(xhr, request);\n if (user) {\n xhr.open(method, url, async, user, password);\n }\n else {\n xhr.open(method, url, async);\n }\n if (async) {\n xhr.timeout = request.timeout;\n xhr.responseType = request.responseType;\n }\n if ('withCredentials' in xhr) {\n xhr.withCredentials = !!request.withCredentials;\n }\n this.setHeaders(xhr, headers);\n if (body) {\n xhr.send(body);\n }\n else {\n xhr.send();\n }\n }\n catch (err) {\n this.error(err);\n }\n };\n AjaxSubscriber.prototype.serializeBody = function (body, contentType) {\n if (!body || typeof body === 'string') {\n return body;\n }\n else if (root.FormData && body instanceof root.FormData) {\n return body;\n }\n if (contentType) {\n var splitIndex = contentType.indexOf(';');\n if (splitIndex !== -1) {\n contentType = contentType.substring(0, splitIndex);\n }\n }\n switch (contentType) {\n case 'application/x-www-form-urlencoded':\n return Object.keys(body).map(function (key) { return encodeURIComponent(key) + \"=\" + encodeURIComponent(body[key]); }).join('&');\n case 'application/json':\n return JSON.stringify(body);\n default:\n return body;\n }\n };\n AjaxSubscriber.prototype.setHeaders = function (xhr, headers) {\n for (var key in headers) {\n if (headers.hasOwnProperty(key)) {\n xhr.setRequestHeader(key, headers[key]);\n }\n }\n };\n AjaxSubscriber.prototype.getHeader = function (headers, headerName) {\n for (var key in headers) {\n if (key.toLowerCase() === headerName.toLowerCase()) {\n return headers[key];\n }\n }\n return undefined;\n };\n AjaxSubscriber.prototype.setupEvents = function (xhr, request) {\n var progressSubscriber = request.progressSubscriber;\n function xhrTimeout(e) {\n var _a = xhrTimeout, subscriber = _a.subscriber, progressSubscriber = _a.progressSubscriber, request = _a.request;\n if (progressSubscriber) {\n progressSubscriber.error(e);\n }\n var error;\n try {\n error = new AjaxTimeoutError(this, request);\n }\n catch (err) {\n error = err;\n }\n subscriber.error(error);\n }\n xhr.ontimeout = xhrTimeout;\n xhrTimeout.request = request;\n xhrTimeout.subscriber = this;\n xhrTimeout.progressSubscriber = progressSubscriber;\n if (xhr.upload && 'withCredentials' in xhr) {\n if (progressSubscriber) {\n var xhrProgress_1;\n xhrProgress_1 = function (e) {\n var progressSubscriber = xhrProgress_1.progressSubscriber;\n progressSubscriber.next(e);\n };\n if (root.XDomainRequest) {\n xhr.onprogress = xhrProgress_1;\n }\n else {\n xhr.upload.onprogress = xhrProgress_1;\n }\n xhrProgress_1.progressSubscriber = progressSubscriber;\n }\n var xhrError_1;\n xhrError_1 = function (e) {\n var _a = xhrError_1, progressSubscriber = _a.progressSubscriber, subscriber = _a.subscriber, request = _a.request;\n if (progressSubscriber) {\n progressSubscriber.error(e);\n }\n var error;\n try {\n error = new AjaxError('ajax error', this, request);\n }\n catch (err) {\n error = err;\n }\n subscriber.error(error);\n };\n xhr.onerror = xhrError_1;\n xhrError_1.request = request;\n xhrError_1.subscriber = this;\n xhrError_1.progressSubscriber = progressSubscriber;\n }\n function xhrReadyStateChange(e) {\n return;\n }\n xhr.onreadystatechange = xhrReadyStateChange;\n xhrReadyStateChange.subscriber = this;\n xhrReadyStateChange.progressSubscriber = progressSubscriber;\n xhrReadyStateChange.request = request;\n function xhrLoad(e) {\n var _a = xhrLoad, subscriber = _a.subscriber, progressSubscriber = _a.progressSubscriber, request = _a.request;\n if (this.readyState === 4) {\n var status_1 = this.status === 1223 ? 204 : this.status;\n var response = (this.responseType === 'text' ? (this.response || this.responseText) : this.response);\n if (status_1 === 0) {\n status_1 = response ? 200 : 0;\n }\n if (status_1 < 400) {\n if (progressSubscriber) {\n progressSubscriber.complete();\n }\n subscriber.next(e);\n subscriber.complete();\n }\n else {\n if (progressSubscriber) {\n progressSubscriber.error(e);\n }\n var error = void 0;\n try {\n error = new AjaxError('ajax error ' + status_1, this, request);\n }\n catch (err) {\n error = err;\n }\n subscriber.error(error);\n }\n }\n }\n xhr.onload = xhrLoad;\n xhrLoad.subscriber = this;\n xhrLoad.progressSubscriber = progressSubscriber;\n xhrLoad.request = request;\n };\n AjaxSubscriber.prototype.unsubscribe = function () {\n var _a = this, done = _a.done, xhr = _a.xhr;\n if (!done && xhr && xhr.readyState !== 4 && typeof xhr.abort === 'function') {\n xhr.abort();\n }\n _super.prototype.unsubscribe.call(this);\n };\n return AjaxSubscriber;\n}(Subscriber));\nexport { AjaxSubscriber };\nvar AjaxResponse = /*@__PURE__*/ (function () {\n function AjaxResponse(originalEvent, xhr, request) {\n this.originalEvent = originalEvent;\n this.xhr = xhr;\n this.request = request;\n this.status = xhr.status;\n this.responseType = xhr.responseType || request.responseType;\n this.response = parseXhrResponse(this.responseType, xhr);\n }\n return AjaxResponse;\n}());\nexport { AjaxResponse };\nvar AjaxErrorImpl = /*@__PURE__*/ (function () {\n function AjaxErrorImpl(message, xhr, request) {\n Error.call(this);\n this.message = message;\n this.name = 'AjaxError';\n this.xhr = xhr;\n this.request = request;\n this.status = xhr.status;\n this.responseType = xhr.responseType || request.responseType;\n this.response = parseXhrResponse(this.responseType, xhr);\n return this;\n }\n AjaxErrorImpl.prototype = /*@__PURE__*/ Object.create(Error.prototype);\n return AjaxErrorImpl;\n})();\nexport var AjaxError = AjaxErrorImpl;\nfunction parseJson(xhr) {\n if ('response' in xhr) {\n return xhr.responseType ? xhr.response : JSON.parse(xhr.response || xhr.responseText || 'null');\n }\n else {\n return JSON.parse(xhr.responseText || 'null');\n }\n}\nfunction parseXhrResponse(responseType, xhr) {\n switch (responseType) {\n case 'json':\n return parseJson(xhr);\n case 'xml':\n return xhr.responseXML;\n case 'text':\n default:\n return ('response' in xhr) ? xhr.response : xhr.responseText;\n }\n}\nfunction AjaxTimeoutErrorImpl(xhr, request) {\n AjaxError.call(this, 'ajax timeout', xhr, request);\n this.name = 'AjaxTimeoutError';\n return this;\n}\nexport var AjaxTimeoutError = AjaxTimeoutErrorImpl;\n//# sourceMappingURL=AjaxObservable.js.map\n","/** PURE_IMPORTS_START _AjaxObservable PURE_IMPORTS_END */\nimport { AjaxObservable } from './AjaxObservable';\nexport var ajax = /*@__PURE__*/ (function () { return AjaxObservable.create; })();\n//# sourceMappingURL=ajax.js.map\n"],"sourceRoot":""} \ No newline at end of file diff --git a/material/assets/javascripts/worker/search.926ffd9e.min.js.map b/material/assets/javascripts/worker/search.926ffd9e.min.js.map deleted file mode 100644 index 7152b06bc..000000000 --- a/material/assets/javascripts/worker/search.926ffd9e.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/escape-html/index.js","webpack:///./node_modules/escape-string-regexp/index.js","webpack:///./node_modules/lunr/lunr.js-exposed","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/lunr/lunr.js","webpack:///./node_modules/tslib/tslib.es6.js","webpack:///./src/assets/javascripts/integrations/search/_/index.ts","webpack:///./src/assets/javascripts/workers/search/message/index.ts","webpack:///./src/assets/javascripts/workers/search/main/index.ts","webpack:///./src/assets/javascripts/integrations/search/document/index.ts","webpack:///./src/assets/javascripts/integrations/search/highlight/index.ts"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","matchHtmlRegExp","string","escape","str","match","exec","html","index","lastIndex","length","charCodeAt","substring","matchOperatorsRegex","TypeError","replace","g","this","Function","e","window","global","step2list","step3list","v","C","re_mgr0","re_mgr1","re_meq1","re_s_v","re_1a","re2_1a","re_1b","re2_1b","re_1b_2","re2_1b_2","re3_1b_2","re4_1b_2","re_1c","re_2","re_3","re_4","re2_4","re_5","re_5_1","re3_5","porterStemmer","lunr","config","builder","Builder","pipeline","add","trimmer","stopWordFilter","stemmer","searchPipeline","build","version","utils","warn","message","console","asString","obj","toString","clone","keys","val","Array","isArray","slice","FieldRef","docRef","fieldName","stringValue","_stringValue","joiner","fromString","indexOf","fieldRef","undefined","Set","elements","complete","intersect","other","union","contains","empty","a","b","intersection","element","push","concat","idf","posting","documentCount","documentsWithTerm","x","Math","log","abs","Token","metadata","update","fn","tokenizer","map","toLowerCase","len","tokens","sliceEnd","sliceStart","sliceLength","charAt","separator","tokenMetadata","Pipeline","_stack","registeredFunctions","registerFunction","label","warnIfFunctionNotRegistered","load","serialised","forEach","fnName","Error","fns","arguments","after","existingFn","newFn","pos","splice","before","remove","run","stackLength","memo","j","result","k","runString","token","reset","toJSON","Vector","_magnitude","positionForIndex","start","end","pivotPoint","floor","pivotIndex","insert","insertIdx","upsert","position","magnitude","sumOfSquares","elementsLength","sqrt","dot","otherVector","dotProduct","aLen","bLen","aVal","bVal","similarity","toArray","output","RegExp","w","stem","suffix","firstch","re","re2","re3","re4","substr","toUpperCase","test","fp","generateStopWordFilter","stopWords","words","reduce","stopWord","TokenSet","final","edges","id","_nextId","fromArray","arr","finish","root","fromClause","clause","fromFuzzyString","term","editDistance","stack","node","editsRemaining","frame","pop","noEditNode","char","insertionNode","substitutionNode","transposeNode","charA","charB","next","prefix","edge","_str","labels","sort","qNode","qEdges","qLen","nEdges","nLen","q","qEdge","nEdge","previousWord","uncheckedNodes","minimizedNodes","word","commonPrefix","minimize","child","nextNode","parent","downTo","childKey","Index","attrs","invertedIndex","fieldVectors","tokenSet","fields","search","queryString","query","QueryParser","parse","Query","matchingFields","queryVectors","termFieldCache","requiredMatches","prohibitedMatches","clauses","terms","clauseMatches","usePipeline","termTokenSet","expandedTerms","presence","REQUIRED","field","expandedTerm","termIndex","_index","fieldPosting","matchingDocumentRefs","termField","matchingDocumentsSet","PROHIBITED","boost","fieldMatch","matchingDocumentRef","matchingFieldRef","MatchData","allRequiredMatches","allProhibitedMatches","matchingFieldRefs","results","matches","isNegated","docMatch","fieldVector","score","matchData","combine","ref","serializedIndex","serializedVectors","serializedInvertedIndex","tokenSetBuilder","tuple","_ref","_fields","_documents","fieldTermFrequencies","fieldLengths","_b","_k1","metadataWhitelist","attributes","RangeError","number","k1","doc","extractor","fieldTerms","metadataKey","calculateAverageFieldLengths","fieldRefs","numberOfFields","accumulator","documentsWithField","averageFieldLength","createFieldVectors","fieldRefsLength","termIdfCache","fieldLength","termFrequencies","termsLength","fieldBoost","docBoost","scoreWithPrecision","tf","round","createTokenSet","use","args","unshift","apply","clonedMetadata","metadataKeys","otherMatchData","allFields","wildcard","String","NONE","LEADING","TRAILING","OPTIONAL","options","QueryParseError","QueryLexer","lexemes","escapeCharPositions","state","lexText","sliceString","subSlices","join","emit","type","escapeCharacter","EOS","width","ignore","backup","acceptDigitRun","charCode","more","FIELD","TERM","EDIT_DISTANCE","BOOST","PRESENCE","lexField","lexer","lexTerm","lexEditDistance","lexBoost","lexEOS","termSeparator","currentClause","lexemeIdx","parseClause","peekLexeme","consumeLexeme","lexeme","nextClause","completedClause","parser","parsePresence","parseField","parseTerm","errorMessage","nextLexeme","possibleFields","f","parseEditDistance","parseBoost","parseInt","isNaN","__assign","assign","__values","iterator","done","__read","ar","error","__spread","SearchMessageType","docs","documents","Map","path","hash","location","title","text","linked","set","setupSearchDocumentMap","highlight","_","data","trim","document","setupSearchHighlighter","stopwords","lang","multiLanguage","JSON","groups","sections","article","section","err","stringify","handler","SETUP","base","scripts","self","importScripts","setupLunrLanguages","DUMP","QUERY","RESULT","addEventListener","ev","postMessage"],"mappings":"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AQrE,cAAgBkE,EAAEQ,OAAO,IAGhCR,GAGF,SAAU9B,GACf,OAAOA,EAAMxC,OAAO5D,KAIxBC,EAAKwE,SAASG,iBAAiB3E,EAAKQ,QAAS;;;;IAmB7CR,EAAK6I,uBAAyB,SAAUC,GACtC,IAAIC,EAAQD,EAAUE,QAAO,SAAUlD,EAAMmD,GAE3C,OADAnD,EAAKmD,GAAYA,EACVnD,IACN,IAEH,OAAO,SAAUK,GACf,GAAIA,GAAS4C,EAAM5C,EAAMjF,cAAgBiF,EAAMjF,WAAY,OAAOiF,IAiBtEnG,EAAKO,eAAiBP,EAAK6I,uBAAuB,CAChD,IACA,OACA,QACA,SACA,QACA,MACA,SACA,OACA,KACA,QACA,KACA,MACA,MACA,MACA,KACA,KACA,KACA,UACA,OACA,MACA,KACA,MACA,SACA,QACA,OACA,MACA,KACA,OACA,SACA,OACA,OACA,QACA,MACA,OACA,MACA,MACA,MACA,MACA,OACA,KACA,MACA,OACA,MACA,MACA,MACA,UACA,IACA,KACA,KACA,OACA,KACA,KACA,MACA,OACA,QACA,MACA,OACA,SACA,MACA,KACA,QACA,OACA,OACA,KACA,UACA,KACA,MACA,MACA,KACA,MACA,QACA,KACA,OACA,KACA,QACA,MACA,MACA,SACA,OACA,MACA,OACA,MACA,SACA,QACA,KACA,OACA,OACA,OACA,MACA,QACA,OACA,OACA,QACA,QACA,OACA,OACA,MACA,KACA,MACA,OACA,KACA,QACA,MACA,KACA,OACA,OACA,OACA,QACA,QACA,QACA,MACA,OACA,MACA,OACA,OACA,QACA,MACA,MACA,SAGF7I,EAAKwE,SAASG,iBAAiB3E,EAAKO,eAAgB;;;;IAqBpDP,EAAKM,QAAU,SAAU6F,GACvB,OAAOA,EAAMxC,QAAO,SAAU1G,GAC5B,OAAOA,EAAEe,QAAQ,OAAQ,IAAIA,QAAQ,OAAQ,QAIjDgC,EAAKwE,SAASG,iBAAiB3E,EAAKM,QAAS;;;;IA2B7CN,EAAKkJ,SAAW,WACdhL,KAAKiL,OAAQ,EACbjL,KAAKkL,MAAQ,GACblL,KAAKmL,GAAKrJ,EAAKkJ,SAASI,QACxBtJ,EAAKkJ,SAASI,SAAW,GAW3BtJ,EAAKkJ,SAASI,QAAU,EASxBtJ,EAAKkJ,SAASK,UAAY,SAAUC,GAGlC,IAFA,IAAItJ,EAAU,IAAIF,EAAKkJ,SAAS/I,QAEvBjF,EAAI,EAAG8I,EAAMwF,EAAI7L,OAAQzC,EAAI8I,EAAK9I,IACzCgF,EAAQ4G,OAAO0C,EAAItO,IAIrB,OADAgF,EAAQuJ,SACDvJ,EAAQwJ,MAYjB1J,EAAKkJ,SAASS,WAAa,SAAUC,GACnC,MAAI,iBAAkBA,EACb5J,EAAKkJ,SAASW,gBAAgBD,EAAOE,KAAMF,EAAOG,cAElD/J,EAAKkJ,SAASnH,WAAW6H,EAAOE,OAmB3C9J,EAAKkJ,SAASW,gBAAkB,SAAUxM,EAAK0M,GAS7C,IARA,IAAIL,EAAO,IAAI1J,EAAKkJ,SAEhBc,EAAQ,CAAC,CACXC,KAAMP,EACNQ,eAAgBH,EAChB1M,IAAKA,IAGA2M,EAAMrM,QAAQ,CACnB,IAAIwM,EAAQH,EAAMI,MAGlB,GAAID,EAAM9M,IAAIM,OAAS,EAAG,CACxB,IACI0M,EADAC,EAAOH,EAAM9M,IAAIgH,OAAO,GAGxBiG,KAAQH,EAAMF,KAAKb,MACrBiB,EAAaF,EAAMF,KAAKb,MAAMkB,IAE9BD,EAAa,IAAIrK,EAAKkJ,SACtBiB,EAAMF,KAAKb,MAAMkB,GAAQD,GAGH,GAApBF,EAAM9M,IAAIM,SACZ0M,EAAWlB,OAAQ,GAGrBa,EAAMjH,KAAK,CACTkH,KAAMI,EACNH,eAAgBC,EAAMD,eACtB7M,IAAK8M,EAAM9M,IAAImE,MAAM,KAIzB,GAA4B,GAAxB2I,EAAMD,eAAV,CAKA,GAAI,MAAOC,EAAMF,KAAKb,MACpB,IAAImB,EAAgBJ,EAAMF,KAAKb,MAAM,SAChC,CACDmB,EAAgB,IAAIvK,EAAKkJ,SAC7BiB,EAAMF,KAAKb,MAAM,KAAOmB,EAiC1B,GA9BwB,GAApBJ,EAAM9M,IAAIM,SACZ4M,EAAcpB,OAAQ,GAGxBa,EAAMjH,KAAK,CACTkH,KAAMM,EACNL,eAAgBC,EAAMD,eAAiB,EACvC7M,IAAK8M,EAAM9M,MAMT8M,EAAM9M,IAAIM,OAAS,GACrBqM,EAAMjH,KAAK,CACTkH,KAAME,EAAMF,KACZC,eAAgBC,EAAMD,eAAiB,EACvC7M,IAAK8M,EAAM9M,IAAImE,MAAM,KAMD,GAApB2I,EAAM9M,IAAIM,SACZwM,EAAMF,KAAKd,OAAQ,GAMjBgB,EAAM9M,IAAIM,QAAU,EAAG,CACzB,GAAI,MAAOwM,EAAMF,KAAKb,MACpB,IAAIoB,EAAmBL,EAAMF,KAAKb,MAAM,SACnC,CACDoB,EAAmB,IAAIxK,EAAKkJ,SAChCiB,EAAMF,KAAKb,MAAM,KAAOoB,EAGF,GAApBL,EAAM9M,IAAIM,SACZ6M,EAAiBrB,OAAQ,GAG3Ba,EAAMjH,KAAK,CACTkH,KAAMO,EACNN,eAAgBC,EAAMD,eAAiB,EACvC7M,IAAK8M,EAAM9M,IAAImE,MAAM,KAOzB,GAAI2I,EAAM9M,IAAIM,OAAS,EAAG,CACxB,IAEI8M,EAFAC,EAAQP,EAAM9M,IAAIgH,OAAO,GACzBsG,EAAQR,EAAM9M,IAAIgH,OAAO,GAGzBsG,KAASR,EAAMF,KAAKb,MACtBqB,EAAgBN,EAAMF,KAAKb,MAAMuB,IAEjCF,EAAgB,IAAIzK,EAAKkJ,SACzBiB,EAAMF,KAAKb,MAAMuB,GAASF,GAGJ,GAApBN,EAAM9M,IAAIM,SACZ8M,EAActB,OAAQ,GAGxBa,EAAMjH,KAAK,CACTkH,KAAMQ,EACNP,eAAgBC,EAAMD,eAAiB,EACvC7M,IAAKqN,EAAQP,EAAM9M,IAAImE,MAAM,OAKnC,OAAOkI,GAaT1J,EAAKkJ,SAASnH,WAAa,SAAU1E,GAYnC,IAXA,IAAI4M,EAAO,IAAIjK,EAAKkJ,SAChBQ,EAAOO,EAUF/O,EAAI,EAAG8I,EAAM3G,EAAIM,OAAQzC,EAAI8I,EAAK9I,IAAK,CAC9C,IAAIoP,EAAOjN,EAAInC,GACXiO,EAASjO,GAAK8I,EAAM,EAExB,GAAY,KAARsG,EACFL,EAAKb,MAAMkB,GAAQL,EACnBA,EAAKd,MAAQA,MAER,CACL,IAAIyB,EAAO,IAAI5K,EAAKkJ,SACpB0B,EAAKzB,MAAQA,EAEbc,EAAKb,MAAMkB,GAAQM,EACnBX,EAAOW,GAIX,OAAOlB,GAaT1J,EAAKkJ,SAASpM,UAAUgL,QAAU,WAQhC,IAPA,IAAIiB,EAAQ,GAERiB,EAAQ,CAAC,CACXa,OAAQ,GACRZ,KAAM/L,OAGD8L,EAAMrM,QAAQ,CACnB,IAAIwM,EAAQH,EAAMI,MACdhB,EAAQxN,OAAOwF,KAAK+I,EAAMF,KAAKb,OAC/BpF,EAAMoF,EAAMzL,OAEZwM,EAAMF,KAAKd,QAKbgB,EAAMU,OAAOxG,OAAO,GACpB0E,EAAMhG,KAAKoH,EAAMU,SAGnB,IAAK,IAAI3P,EAAI,EAAGA,EAAI8I,EAAK9I,IAAK,CAC5B,IAAI4P,EAAO1B,EAAMlO,GAEjB8O,EAAMjH,KAAK,CACT8H,OAAQV,EAAMU,OAAO7H,OAAO8H,GAC5Bb,KAAME,EAAMF,KAAKb,MAAM0B,MAK7B,OAAO/B,GAaT/I,EAAKkJ,SAASpM,UAAUoE,SAAW,WASjC,GAAIhD,KAAK6M,KACP,OAAO7M,KAAK6M,KAOd,IAJA,IAAI1N,EAAMa,KAAKiL,MAAQ,IAAM,IACzB6B,EAASpP,OAAOwF,KAAKlD,KAAKkL,OAAO6B,OACjCjH,EAAMgH,EAAOrN,OAERzC,EAAI,EAAGA,EAAI8I,EAAK9I,IAAK,CAC5B,IAAI0J,EAAQoG,EAAO9P,GAGnBmC,EAAMA,EAAMuH,EAFD1G,KAAKkL,MAAMxE,GAEGyE,GAG3B,OAAOhM,GAaT2C,EAAKkJ,SAASpM,UAAUwF,UAAY,SAAUM,GAU5C,IATA,IAAImF,EAAS,IAAI/H,EAAKkJ,SAClBiB,OAAQjI,EAER8H,EAAQ,CAAC,CACXkB,MAAOtI,EACPmF,OAAQA,EACRkC,KAAM/L,OAGD8L,EAAMrM,QAAQ,CACnBwM,EAAQH,EAAMI,MAWd,IALA,IAAIe,EAASvP,OAAOwF,KAAK+I,EAAMe,MAAM9B,OACjCgC,EAAOD,EAAOxN,OACd0N,EAASzP,OAAOwF,KAAK+I,EAAMF,KAAKb,OAChCkC,EAAOD,EAAO1N,OAET4N,EAAI,EAAGA,EAAIH,EAAMG,IAGxB,IAFA,IAAIC,EAAQL,EAAOI,GAEV5O,EAAI,EAAGA,EAAI2O,EAAM3O,IAAK,CAC7B,IAAI8O,EAAQJ,EAAO1O,GAEnB,GAAI8O,GAASD,GAAkB,KAATA,EAAc,CAClC,IAAIvB,EAAOE,EAAMF,KAAKb,MAAMqC,GACxBP,EAAQf,EAAMe,MAAM9B,MAAMoC,GAC1BrC,EAAQc,EAAKd,OAAS+B,EAAM/B,MAC5ByB,OAAO1I,EAEPuJ,KAAStB,EAAMpC,OAAOqB,OAIxBwB,EAAOT,EAAMpC,OAAOqB,MAAMqC,IACrBtC,MAAQyB,EAAKzB,OAASA,IAM3ByB,EAAO,IAAI5K,EAAKkJ,UACXC,MAAQA,EACbgB,EAAMpC,OAAOqB,MAAMqC,GAASb,GAG9BZ,EAAMjH,KAAK,CACTmI,MAAOA,EACPnD,OAAQ6C,EACRX,KAAMA,MAOhB,OAAOlC,GAET/H,EAAKkJ,SAAS/I,QAAU,WACtBjC,KAAKwN,aAAe,GACpBxN,KAAKwL,KAAO,IAAI1J,EAAKkJ,SACrBhL,KAAKyN,eAAiB,GACtBzN,KAAK0N,eAAiB,IAGxB5L,EAAKkJ,SAAS/I,QAAQrD,UAAUgK,OAAS,SAAU+E,GACjD,IAAI5B,EACA6B,EAAe,EAEnB,GAAID,EAAO3N,KAAKwN,aACd,MAAM,IAAIxG,MAAO,+BAGnB,IAAK,IAAIhK,EAAI,EAAGA,EAAI2Q,EAAKlO,QAAUzC,EAAIgD,KAAKwN,aAAa/N,QACnDkO,EAAK3Q,IAAMgD,KAAKwN,aAAaxQ,GAD8BA,IAE/D4Q,IAGF5N,KAAK6N,SAASD,GAGZ7B,EADgC,GAA9B/L,KAAKyN,eAAehO,OACfO,KAAKwL,KAELxL,KAAKyN,eAAezN,KAAKyN,eAAehO,OAAS,GAAGqO,MAG7D,IAAS9Q,EAAI4Q,EAAc5Q,EAAI2Q,EAAKlO,OAAQzC,IAAK,CAC/C,IAAI+Q,EAAW,IAAIjM,EAAKkJ,SACpBoB,EAAOuB,EAAK3Q,GAEhB+O,EAAKb,MAAMkB,GAAQ2B,EAEnB/N,KAAKyN,eAAe5I,KAAK,CACvBmJ,OAAQjC,EACRK,KAAMA,EACN0B,MAAOC,IAGThC,EAAOgC,EAGThC,EAAKd,OAAQ,EACbjL,KAAKwN,aAAeG,GAGtB7L,EAAKkJ,SAAS/I,QAAQrD,UAAU2M,OAAS,WACvCvL,KAAK6N,SAAS,IAGhB/L,EAAKkJ,SAAS/I,QAAQrD,UAAUiP,SAAW,SAAUI,GACnD,IAAK,IAAIjR,EAAIgD,KAAKyN,eAAehO,OAAS,EAAGzC,GAAKiR,EAAQjR,IAAK,CAC7D,IAAI+O,EAAO/L,KAAKyN,eAAezQ,GAC3BkR,EAAWnC,EAAK+B,MAAM9K,WAEtBkL,KAAYlO,KAAK0N,eACnB3B,EAAKiC,OAAO9C,MAAMa,EAAKK,MAAQpM,KAAK0N,eAAeQ,IAInDnC,EAAK+B,MAAMjB,KAAOqB,EAElBlO,KAAK0N,eAAeQ,GAAYnC,EAAK+B,OAGvC9N,KAAKyN,eAAevB;;;;IAwBxBpK,EAAKqM,MAAQ,SAAUC,GACrBpO,KAAKqO,cAAgBD,EAAMC,cAC3BrO,KAAKsO,aAAeF,EAAME,aAC1BtO,KAAKuO,SAAWH,EAAMG,SACtBvO,KAAKwO,OAASJ,EAAMI,OACpBxO,KAAKkC,SAAWkM,EAAMlM,UA0ExBJ,EAAKqM,MAAMvP,UAAU6P,OAAS,SAAUC,GACtC,OAAO1O,KAAK2O,OAAM,SAAUA,GACb,IAAI7M,EAAK8M,YAAYF,EAAaC,GACxCE,YA6BX/M,EAAKqM,MAAMvP,UAAU+P,MAAQ,SAAUjJ,GAoBrC,IAZA,IAAIiJ,EAAQ,IAAI7M,EAAKgN,MAAM9O,KAAKwO,QAC5BO,EAAiBrR,OAAOY,OAAO,MAC/B0Q,EAAetR,OAAOY,OAAO,MAC7B2Q,EAAiBvR,OAAOY,OAAO,MAC/B4Q,EAAkBxR,OAAOY,OAAO,MAChC6Q,EAAoBzR,OAAOY,OAAO,MAO7BtB,EAAI,EAAGA,EAAIgD,KAAKwO,OAAO/O,OAAQzC,IACtCgS,EAAahP,KAAKwO,OAAOxR,IAAM,IAAI8E,EAAKsG,OAG1C1C,EAAGvI,KAAKwR,EAAOA,GAEf,IAAS3R,EAAI,EAAGA,EAAI2R,EAAMS,QAAQ3P,OAAQzC,IAAK,CAS7C,IAAI0O,EAASiD,EAAMS,QAAQpS,GACvBqS,EAAQ,KACRC,EAAgBxN,EAAKmC,IAAIE,SAG3BkL,EADE3D,EAAO6D,YACDvP,KAAKkC,SAAS8F,UAAU0D,EAAOE,KAAM,CAC3C4C,OAAQ9C,EAAO8C,SAGT,CAAC9C,EAAOE,MAGlB,IAAK,IAAIxO,EAAI,EAAGA,EAAIiS,EAAM5P,OAAQrC,IAAK,CACrC,IAAIwO,EAAOyD,EAAMjS,GAQjBsO,EAAOE,KAAOA,EAOd,IAAI4D,EAAe1N,EAAKkJ,SAASS,WAAWC,GACxC+D,EAAgBzP,KAAKuO,SAASnK,UAAUoL,GAAc5F,UAQ1D,GAA6B,IAAzB6F,EAAchQ,QAAgBiM,EAAOgE,WAAa5N,EAAKgN,MAAMY,SAASC,SAAU,CAClF,IAAK,IAAI5H,EAAI,EAAGA,EAAI2D,EAAO8C,OAAO/O,OAAQsI,IAAK,CAE7CmH,EADIU,EAAQlE,EAAO8C,OAAOzG,IACDjG,EAAKmC,IAAIO,MAGpC,MAGF,IAAK,IAAIqD,EAAI,EAAGA,EAAI4H,EAAchQ,OAAQoI,IAKxC,KAAIgI,EAAeJ,EAAc5H,GAC7B7C,EAAUhF,KAAKqO,cAAcwB,GAC7BC,EAAY9K,EAAQ+K,OAExB,IAAShI,EAAI,EAAGA,EAAI2D,EAAO8C,OAAO/O,OAAQsI,IAAK,CAS7C,IACIiI,EAAehL,EADf4K,EAAQlE,EAAO8C,OAAOzG,IAEtBkI,EAAuBvS,OAAOwF,KAAK8M,GACnCE,EAAYL,EAAe,IAAMD,EACjCO,EAAuB,IAAIrO,EAAKmC,IAAIgM,GAoBxC,GAbIvE,EAAOgE,UAAY5N,EAAKgN,MAAMY,SAASC,WACzCL,EAAgBA,EAAchL,MAAM6L,QAELnM,IAA3BkL,EAAgBU,KAClBV,EAAgBU,GAAS9N,EAAKmC,IAAIE,WASlCuH,EAAOgE,UAAY5N,EAAKgN,MAAMY,SAASU,YA4B3C,GANApB,EAAaY,GAAO9G,OAAOgH,EAAWpE,EAAO2E,OAAO,SAAU5L,EAAGC,GAAK,OAAOD,EAAIC,MAM7EuK,EAAeiB,GAAnB,CAIA,IAAK,IAAIjT,EAAI,EAAGA,EAAIgT,EAAqBxQ,OAAQxC,IAAK,CAOpD,IAGIqT,EAHAC,EAAsBN,EAAqBhT,GAC3CuT,EAAmB,IAAI1O,EAAKyB,SAAUgN,EAAqBX,GAC3DpK,EAAWwK,EAAaO,QAG4BvM,KAAnDsM,EAAavB,EAAeyB,IAC/BzB,EAAeyB,GAAoB,IAAI1O,EAAK2O,UAAWZ,EAAcD,EAAOpK,GAE5E8K,EAAWnO,IAAI0N,EAAcD,EAAOpK,GAKxCyJ,EAAeiB,IAAa,aAnDOlM,IAA7BmL,EAAkBS,KACpBT,EAAkBS,GAAS9N,EAAKmC,IAAIO,OAGtC2K,EAAkBS,GAAST,EAAkBS,GAAOtL,MAAM6L,KA0DlE,GAAIzE,EAAOgE,WAAa5N,EAAKgN,MAAMY,SAASC,SAC1C,IAAS5H,EAAI,EAAGA,EAAI2D,EAAO8C,OAAO/O,OAAQsI,IAAK,CAE7CmH,EADIU,EAAQlE,EAAO8C,OAAOzG,IACDmH,EAAgBU,GAAOxL,UAAUkL,IAUhE,IAAIoB,EAAqB5O,EAAKmC,IAAIE,SAC9BwM,EAAuB7O,EAAKmC,IAAIO,MAEpC,IAASxH,EAAI,EAAGA,EAAIgD,KAAKwO,OAAO/O,OAAQzC,IAAK,CAC3C,IAAI4S,EAEAV,EAFAU,EAAQ5P,KAAKwO,OAAOxR,MAGtB0T,EAAqBA,EAAmBtM,UAAU8K,EAAgBU,KAGhET,EAAkBS,KACpBe,EAAuBA,EAAqBrM,MAAM6K,EAAkBS,KAIxE,IAAIgB,EAAoBlT,OAAOwF,KAAK6L,GAChC8B,EAAU,GACVC,EAAUpT,OAAOY,OAAO,MAY5B,GAAIqQ,EAAMoC,YAAa,CACrBH,EAAoBlT,OAAOwF,KAAKlD,KAAKsO,cAErC,IAAStR,EAAI,EAAGA,EAAI4T,EAAkBnR,OAAQzC,IAAK,CAC7CwT,EAAmBI,EAAkB5T,GAAzC,IACI+G,EAAWjC,EAAKyB,SAASM,WAAW2M,GACxCzB,EAAeyB,GAAoB,IAAI1O,EAAK2O,WAIhD,IAASzT,EAAI,EAAGA,EAAI4T,EAAkBnR,OAAQzC,IAAK,CASjD,IACIwG,GADAO,EAAWjC,EAAKyB,SAASM,WAAW+M,EAAkB5T,KACpCwG,OAEtB,GAAKkN,EAAmBnM,SAASf,KAI7BmN,EAAqBpM,SAASf,GAAlC,CAIA,IAEIwN,EAFAC,EAAcjR,KAAKsO,aAAavK,GAChCmN,EAAQlC,EAAajL,EAASN,WAAWkG,WAAWsH,GAGxD,QAAqCjN,KAAhCgN,EAAWF,EAAQtN,IACtBwN,EAASE,OAASA,EAClBF,EAASG,UAAUC,QAAQrC,EAAehL,QACrC,CACL,IAAI3E,EAAQ,CACViS,IAAK7N,EACL0N,MAAOA,EACPC,UAAWpC,EAAehL,IAE5B+M,EAAQtN,GAAUpE,EAClByR,EAAQhM,KAAKzF,KAOjB,OAAOyR,EAAQ9D,MAAK,SAAUtI,EAAGC,GAC/B,OAAOA,EAAEwM,MAAQzM,EAAEyM,UAYvBpP,EAAKqM,MAAMvP,UAAUuJ,OAAS,WAC5B,IAAIkG,EAAgB3Q,OAAOwF,KAAKlD,KAAKqO,eAClCtB,OACAnH,KAAI,SAAUgG,GACb,MAAO,CAACA,EAAM5L,KAAKqO,cAAczC,MAChC5L,MAEDsO,EAAe5Q,OAAOwF,KAAKlD,KAAKsO,cACjC1I,KAAI,SAAUyL,GACb,MAAO,CAACA,EAAKrR,KAAKsO,aAAa+C,GAAKlJ,YACnCnI,MAEL,MAAO,CACLyC,QAASX,EAAKW,QACd+L,OAAQxO,KAAKwO,OACbF,aAAcA,EACdD,cAAeA,EACfnM,SAAUlC,KAAKkC,SAASiG,WAU5BrG,EAAKqM,MAAMvH,KAAO,SAAU0K,GAC1B,IAAIlD,EAAQ,GACRE,EAAe,GACfiD,EAAoBD,EAAgBhD,aACpCD,EAAgB3Q,OAAOY,OAAO,MAC9BkT,EAA0BF,EAAgBjD,cAC1CoD,EAAkB,IAAI3P,EAAKkJ,SAAS/I,QACpCC,EAAWJ,EAAKwE,SAASM,KAAK0K,EAAgBpP,UAE9CoP,EAAgB7O,SAAWX,EAAKW,SAClCX,EAAKY,MAAMC,KAAK,4EAA8Eb,EAAKW,QAAU,sCAAwC6O,EAAgB7O,QAAU,KAGjL,IAAK,IAAIzF,EAAI,EAAGA,EAAIuU,EAAkB9R,OAAQzC,IAAK,CACjD,IACIqU,GADAK,EAAQH,EAAkBvU,IACd,GACZkH,EAAWwN,EAAM,GAErBpD,EAAa+C,GAAO,IAAIvP,EAAKsG,OAAOlE,GAGtC,IAASlH,EAAI,EAAGA,EAAIwU,EAAwB/R,OAAQzC,IAAK,CACvD,IAAI0U,EACA9F,GADA8F,EAAQF,EAAwBxU,IACnB,GACbgI,EAAU0M,EAAM,GAEpBD,EAAgB7I,OAAOgD,GACvByC,EAAczC,GAAQ5G,EAYxB,OATAyM,EAAgBlG,SAEhB6C,EAAMI,OAAS8C,EAAgB9C,OAE/BJ,EAAME,aAAeA,EACrBF,EAAMC,cAAgBA,EACtBD,EAAMG,SAAWkD,EAAgBjG,KACjC4C,EAAMlM,SAAWA,EAEV,IAAIJ,EAAKqM,MAAMC;;;;IA+BxBtM,EAAKG,QAAU,WACbjC,KAAK2R,KAAO,KACZ3R,KAAK4R,QAAUlU,OAAOY,OAAO,MAC7B0B,KAAK6R,WAAanU,OAAOY,OAAO,MAChC0B,KAAKqO,cAAgB3Q,OAAOY,OAAO,MACnC0B,KAAK8R,qBAAuB,GAC5B9R,KAAK+R,aAAe,GACpB/R,KAAK2F,UAAY7D,EAAK6D,UACtB3F,KAAKkC,SAAW,IAAIJ,EAAKwE,SACzBtG,KAAKuC,eAAiB,IAAIT,EAAKwE,SAC/BtG,KAAKiF,cAAgB,EACrBjF,KAAKgS,GAAK,IACVhS,KAAKiS,IAAM,IACXjS,KAAK8P,UAAY,EACjB9P,KAAKkS,kBAAoB,IAe3BpQ,EAAKG,QAAQrD,UAAUyS,IAAM,SAAUA,GACrCrR,KAAK2R,KAAON,GAmCdvP,EAAKG,QAAQrD,UAAUgR,MAAQ,SAAUnM,EAAW0O,GAClD,GAAI,KAAK1H,KAAKhH,GACZ,MAAM,IAAI2O,WAAY,UAAY3O,EAAY,oCAGhDzD,KAAK4R,QAAQnO,GAAa0O,GAAc,IAW1CrQ,EAAKG,QAAQrD,UAAU8F,EAAI,SAAU2N,GAEjCrS,KAAKgS,GADHK,EAAS,EACD,EACDA,EAAS,EACR,EAEAA,GAWdvQ,EAAKG,QAAQrD,UAAU0T,GAAK,SAAUD,GACpCrS,KAAKiS,IAAMI,GAoBbvQ,EAAKG,QAAQrD,UAAUuD,IAAM,SAAUoQ,EAAKJ,GAC1C,IAAI3O,EAAS+O,EAAIvS,KAAK2R,MAClBnD,EAAS9Q,OAAOwF,KAAKlD,KAAK4R,SAE9B5R,KAAK6R,WAAWrO,GAAU2O,GAAc,GACxCnS,KAAKiF,eAAiB,EAEtB,IAAK,IAAIjI,EAAI,EAAGA,EAAIwR,EAAO/O,OAAQzC,IAAK,CACtC,IAAIyG,EAAY+K,EAAOxR,GACnBwV,EAAYxS,KAAK4R,QAAQnO,GAAW+O,UACpC5C,EAAQ4C,EAAYA,EAAUD,GAAOA,EAAI9O,GACzCsC,EAAS/F,KAAK2F,UAAUiK,EAAO,CAC7BpB,OAAQ,CAAC/K,KAEX4L,EAAQrP,KAAKkC,SAASwF,IAAI3B,GAC1BhC,EAAW,IAAIjC,EAAKyB,SAAUC,EAAQC,GACtCgP,EAAa/U,OAAOY,OAAO,MAE/B0B,KAAK8R,qBAAqB/N,GAAY0O,EACtCzS,KAAK+R,aAAahO,GAAY,EAG9B/D,KAAK+R,aAAahO,IAAasL,EAAM5P,OAGrC,IAAK,IAAIoI,EAAI,EAAGA,EAAIwH,EAAM5P,OAAQoI,IAAK,CACrC,IAAI+D,EAAOyD,EAAMxH,GAUjB,GARwB7D,MAApByO,EAAW7G,KACb6G,EAAW7G,GAAQ,GAGrB6G,EAAW7G,IAAS,EAIY5H,MAA5BhE,KAAKqO,cAAczC,GAAoB,CACzC,IAAI5G,EAAUtH,OAAOY,OAAO,MAC5B0G,EAAgB,OAAIhF,KAAK8P,UACzB9P,KAAK8P,WAAa,EAElB,IAAK,IAAI/H,EAAI,EAAGA,EAAIyG,EAAO/O,OAAQsI,IACjC/C,EAAQwJ,EAAOzG,IAAMrK,OAAOY,OAAO,MAGrC0B,KAAKqO,cAAczC,GAAQ5G,EAIsBhB,MAA/ChE,KAAKqO,cAAczC,GAAMnI,GAAWD,KACtCxD,KAAKqO,cAAczC,GAAMnI,GAAWD,GAAU9F,OAAOY,OAAO,OAK9D,IAAK,IAAIrB,EAAI,EAAGA,EAAI+C,KAAKkS,kBAAkBzS,OAAQxC,IAAK,CACtD,IAAIyV,EAAc1S,KAAKkS,kBAAkBjV,GACrCuI,EAAWoG,EAAKpG,SAASkN,GAEmC1O,MAA5DhE,KAAKqO,cAAczC,GAAMnI,GAAWD,GAAQkP,KAC9C1S,KAAKqO,cAAczC,GAAMnI,GAAWD,GAAQkP,GAAe,IAG7D1S,KAAKqO,cAAczC,GAAMnI,GAAWD,GAAQkP,GAAa7N,KAAKW,OAYtE1D,EAAKG,QAAQrD,UAAU+T,6BAA+B,WAOpD,IALA,IAAIC,EAAYlV,OAAOwF,KAAKlD,KAAK+R,cAC7Bc,EAAiBD,EAAUnT,OAC3BqT,EAAc,GACdC,EAAqB,GAEhB/V,EAAI,EAAGA,EAAI6V,EAAgB7V,IAAK,CACvC,IAAI+G,EAAWjC,EAAKyB,SAASM,WAAW+O,EAAU5V,IAC9C4S,EAAQ7L,EAASN,UAErBsP,EAAmBnD,KAAWmD,EAAmBnD,GAAS,GAC1DmD,EAAmBnD,IAAU,EAE7BkD,EAAYlD,KAAWkD,EAAYlD,GAAS,GAC5CkD,EAAYlD,IAAU5P,KAAK+R,aAAahO,GAG1C,IAAIyK,EAAS9Q,OAAOwF,KAAKlD,KAAK4R,SAE9B,IAAS5U,EAAI,EAAGA,EAAIwR,EAAO/O,OAAQzC,IAAK,CACtC,IAAIyG,EAAY+K,EAAOxR,GACvB8V,EAAYrP,GAAaqP,EAAYrP,GAAasP,EAAmBtP,GAGvEzD,KAAKgT,mBAAqBF,GAQ5BhR,EAAKG,QAAQrD,UAAUqU,mBAAqB,WAM1C,IALA,IAAI3E,EAAe,GACfsE,EAAYlV,OAAOwF,KAAKlD,KAAK8R,sBAC7BoB,EAAkBN,EAAUnT,OAC5B0T,EAAezV,OAAOY,OAAO,MAExBtB,EAAI,EAAGA,EAAIkW,EAAiBlW,IAAK,CAaxC,IAZA,IAAI+G,EAAWjC,EAAKyB,SAASM,WAAW+O,EAAU5V,IAC9CyG,EAAYM,EAASN,UACrB2P,EAAcpT,KAAK+R,aAAahO,GAChCkN,EAAc,IAAInP,EAAKsG,OACvBiL,EAAkBrT,KAAK8R,qBAAqB/N,GAC5CsL,EAAQ3R,OAAOwF,KAAKmQ,GACpBC,EAAcjE,EAAM5P,OAGpB8T,EAAavT,KAAK4R,QAAQnO,GAAW4M,OAAS,EAC9CmD,EAAWxT,KAAK6R,WAAW9N,EAASP,QAAQ6M,OAAS,EAEhDxI,EAAI,EAAGA,EAAIyL,EAAazL,IAAK,CACpC,IAGI9C,EAAKmM,EAAOuC,EAHZ7H,EAAOyD,EAAMxH,GACb6L,EAAKL,EAAgBzH,GACrBkE,EAAY9P,KAAKqO,cAAczC,GAAMmE,YAGd/L,IAAvBmP,EAAavH,IACf7G,EAAMjD,EAAKiD,IAAI/E,KAAKqO,cAAczC,GAAO5L,KAAKiF,eAC9CkO,EAAavH,GAAQ7G,GAErBA,EAAMoO,EAAavH,GAGrBsF,EAAQnM,IAAQ/E,KAAKiS,IAAM,GAAKyB,IAAO1T,KAAKiS,KAAO,EAAIjS,KAAKgS,GAAKhS,KAAKgS,IAAMoB,EAAcpT,KAAKgT,mBAAmBvP,KAAeiQ,GACjIxC,GAASqC,EACTrC,GAASsC,EACTC,EAAqBrO,KAAKuO,MAAc,IAARzC,GAAgB,IAQhDD,EAAYrI,OAAOkH,EAAW2D,GAGhCnF,EAAavK,GAAYkN,EAG3BjR,KAAKsO,aAAeA,GAQtBxM,EAAKG,QAAQrD,UAAUgV,eAAiB,WACtC5T,KAAKuO,SAAWzM,EAAKkJ,SAASK,UAC5B3N,OAAOwF,KAAKlD,KAAKqO,eAAetB,SAYpCjL,EAAKG,QAAQrD,UAAU4D,MAAQ,WAK7B,OAJAxC,KAAK2S,+BACL3S,KAAKiT,qBACLjT,KAAK4T,iBAEE,IAAI9R,EAAKqM,MAAM,CACpBE,cAAerO,KAAKqO,cACpBC,aAActO,KAAKsO,aACnBC,SAAUvO,KAAKuO,SACfC,OAAQ9Q,OAAOwF,KAAKlD,KAAK4R,SACzB1P,SAAUlC,KAAKuC,kBAkBnBT,EAAKG,QAAQrD,UAAUiV,IAAM,SAAUnO,GACrC,IAAIoO,EAAO1Q,MAAMxE,UAAU0E,MAAMnG,KAAK+J,UAAW,GACjD4M,EAAKC,QAAQ/T,MACb0F,EAAGsO,MAAMhU,KAAM8T,IAcjBhS,EAAK2O,UAAY,SAAU7E,EAAMgE,EAAOpK,GAStC,IARA,IAAIyO,EAAiBvW,OAAOY,OAAO,MAC/B4V,EAAexW,OAAOwF,KAAKsC,GAAY,IAOlCxI,EAAI,EAAGA,EAAIkX,EAAazU,OAAQzC,IAAK,CAC5C,IAAIuB,EAAM2V,EAAalX,GACvBiX,EAAe1V,GAAOiH,EAASjH,GAAK+E,QAGtCtD,KAAKwF,SAAW9H,OAAOY,OAAO,WAEjB0F,IAAT4H,IACF5L,KAAKwF,SAASoG,GAAQlO,OAAOY,OAAO,MACpC0B,KAAKwF,SAASoG,GAAMgE,GAASqE,IAajCnS,EAAK2O,UAAU7R,UAAUwS,QAAU,SAAU+C,GAG3C,IAFA,IAAI9E,EAAQ3R,OAAOwF,KAAKiR,EAAe3O,UAE9BxI,EAAI,EAAGA,EAAIqS,EAAM5P,OAAQzC,IAAK,CACrC,IAAI4O,EAAOyD,EAAMrS,GACbwR,EAAS9Q,OAAOwF,KAAKiR,EAAe3O,SAASoG,IAEtB5H,MAAvBhE,KAAKwF,SAASoG,KAChB5L,KAAKwF,SAASoG,GAAQlO,OAAOY,OAAO,OAGtC,IAAK,IAAIuJ,EAAI,EAAGA,EAAI2G,EAAO/O,OAAQoI,IAAK,CACtC,IAAI+H,EAAQpB,EAAO3G,GACf3E,EAAOxF,OAAOwF,KAAKiR,EAAe3O,SAASoG,GAAMgE,IAEnB5L,MAA9BhE,KAAKwF,SAASoG,GAAMgE,KACtB5P,KAAKwF,SAASoG,GAAMgE,GAASlS,OAAOY,OAAO,OAG7C,IAAK,IAAIyJ,EAAI,EAAGA,EAAI7E,EAAKzD,OAAQsI,IAAK,CACpC,IAAIxJ,EAAM2E,EAAK6E,GAEwB/D,MAAnChE,KAAKwF,SAASoG,GAAMgE,GAAOrR,GAC7ByB,KAAKwF,SAASoG,GAAMgE,GAAOrR,GAAO4V,EAAe3O,SAASoG,GAAMgE,GAAOrR,GAEvEyB,KAAKwF,SAASoG,GAAMgE,GAAOrR,GAAOyB,KAAKwF,SAASoG,GAAMgE,GAAOrR,GAAKuG,OAAOqP,EAAe3O,SAASoG,GAAMgE,GAAOrR,QAexHuD,EAAK2O,UAAU7R,UAAUuD,IAAM,SAAUyJ,EAAMgE,EAAOpK,GACpD,KAAMoG,KAAQ5L,KAAKwF,UAGjB,OAFAxF,KAAKwF,SAASoG,GAAQlO,OAAOY,OAAO,WACpC0B,KAAKwF,SAASoG,GAAMgE,GAASpK,GAI/B,GAAMoK,KAAS5P,KAAKwF,SAASoG,GAO7B,IAFA,IAAIsI,EAAexW,OAAOwF,KAAKsC,GAEtBxI,EAAI,EAAGA,EAAIkX,EAAazU,OAAQzC,IAAK,CAC5C,IAAIuB,EAAM2V,EAAalX,GAEnBuB,KAAOyB,KAAKwF,SAASoG,GAAMgE,GAC7B5P,KAAKwF,SAASoG,GAAMgE,GAAOrR,GAAOyB,KAAKwF,SAASoG,GAAMgE,GAAOrR,GAAKuG,OAAOU,EAASjH,IAElFyB,KAAKwF,SAASoG,GAAMgE,GAAOrR,GAAOiH,EAASjH,QAZ7CyB,KAAKwF,SAASoG,GAAMgE,GAASpK,GA2BjC1D,EAAKgN,MAAQ,SAAUsF,GACrBpU,KAAKoP,QAAU,GACfpP,KAAKoU,UAAYA,GA2BnBtS,EAAKgN,MAAMuF,SAAW,IAAIC,OAAQ,KAClCxS,EAAKgN,MAAMuF,SAASE,KAAO,EAC3BzS,EAAKgN,MAAMuF,SAASG,QAAU,EAC9B1S,EAAKgN,MAAMuF,SAASI,SAAW,EAa/B3S,EAAKgN,MAAMY,SAAW,CAIpBgF,SAAU,EAMV/E,SAAU,EAMVS,WAAY,GA0BdtO,EAAKgN,MAAMlQ,UAAU8M,OAAS,SAAUA,GA+BtC,MA9BM,WAAYA,IAChBA,EAAO8C,OAASxO,KAAKoU,WAGjB,UAAW1I,IACfA,EAAO2E,MAAQ,GAGX,gBAAiB3E,IACrBA,EAAO6D,aAAc,GAGjB,aAAc7D,IAClBA,EAAO2I,SAAWvS,EAAKgN,MAAMuF,SAASE,MAGnC7I,EAAO2I,SAAWvS,EAAKgN,MAAMuF,SAASG,SAAa9I,EAAOE,KAAKzF,OAAO,IAAMrE,EAAKgN,MAAMuF,WAC1F3I,EAAOE,KAAO,IAAMF,EAAOE,MAGxBF,EAAO2I,SAAWvS,EAAKgN,MAAMuF,SAASI,UAAc/I,EAAOE,KAAKtI,OAAO,IAAMxB,EAAKgN,MAAMuF,WAC3F3I,EAAOE,KAAYF,EAAOE,KAAO,KAG7B,aAAcF,IAClBA,EAAOgE,SAAW5N,EAAKgN,MAAMY,SAASgF,UAGxC1U,KAAKoP,QAAQvK,KAAK6G,GAEX1L,MAUT8B,EAAKgN,MAAMlQ,UAAUmS,UAAY,WAC/B,IAAK,IAAI/T,EAAI,EAAGA,EAAIgD,KAAKoP,QAAQ3P,OAAQzC,IACvC,GAAIgD,KAAKoP,QAAQpS,GAAG0S,UAAY5N,EAAKgN,MAAMY,SAASU,WAClD,OAAO,EAIX,OAAO,GA6BTtO,EAAKgN,MAAMlQ,UAAUgN,KAAO,SAAUA,EAAM+I,GAC1C,GAAIvR,MAAMC,QAAQuI,GAEhB,OADAA,EAAK9E,SAAQ,SAAU5I,GAAK8B,KAAK4L,KAAK1N,EAAG4D,EAAKY,MAAMO,MAAM0R,MAAa3U,MAChEA,KAGT,IAAI0L,EAASiJ,GAAW,GAKxB,OAJAjJ,EAAOE,KAAOA,EAAK5I,WAEnBhD,KAAK0L,OAAOA,GAEL1L,MAET8B,EAAK8S,gBAAkB,SAAUhS,EAAS2F,EAAOC,GAC/CxI,KAAKzC,KAAO,kBACZyC,KAAK4C,QAAUA,EACf5C,KAAKuI,MAAQA,EACbvI,KAAKwI,IAAMA,GAGb1G,EAAK8S,gBAAgBhW,UAAY,IAAIoI,MACrClF,EAAK+S,WAAa,SAAU1V,GAC1Ba,KAAK8U,QAAU,GACf9U,KAAKb,IAAMA,EACXa,KAAKP,OAASN,EAAIM,OAClBO,KAAKsH,IAAM,EACXtH,KAAKuI,MAAQ,EACbvI,KAAK+U,oBAAsB,IAG7BjT,EAAK+S,WAAWjW,UAAU8I,IAAM,WAG9B,IAFA,IAAIsN,EAAQlT,EAAK+S,WAAWI,QAErBD,GACLA,EAAQA,EAAMhV,OAIlB8B,EAAK+S,WAAWjW,UAAUsW,YAAc,WAKtC,IAJA,IAAIC,EAAY,GACZlP,EAAajG,KAAKuI,MAClBvC,EAAWhG,KAAKsH,IAEXtK,EAAI,EAAGA,EAAIgD,KAAK+U,oBAAoBtV,OAAQzC,IACnDgJ,EAAWhG,KAAK+U,oBAAoB/X,GACpCmY,EAAUtQ,KAAK7E,KAAKb,IAAImE,MAAM2C,EAAYD,IAC1CC,EAAaD,EAAW,EAM1B,OAHAmP,EAAUtQ,KAAK7E,KAAKb,IAAImE,MAAM2C,EAAYjG,KAAKsH,MAC/CtH,KAAK+U,oBAAoBtV,OAAS,EAE3B0V,EAAUC,KAAK,KAGxBtT,EAAK+S,WAAWjW,UAAUyW,KAAO,SAAUC,GACzCtV,KAAK8U,QAAQjQ,KAAK,CAChByQ,KAAMA,EACNnW,IAAKa,KAAKkV,cACV3M,MAAOvI,KAAKuI,MACZC,IAAKxI,KAAKsH,MAGZtH,KAAKuI,MAAQvI,KAAKsH,KAGpBxF,EAAK+S,WAAWjW,UAAU2W,gBAAkB,WAC1CvV,KAAK+U,oBAAoBlQ,KAAK7E,KAAKsH,IAAM,GACzCtH,KAAKsH,KAAO,GAGdxF,EAAK+S,WAAWjW,UAAU8N,KAAO,WAC/B,GAAI1M,KAAKsH,KAAOtH,KAAKP,OACnB,OAAOqC,EAAK+S,WAAWW,IAGzB,IAAIpJ,EAAOpM,KAAKb,IAAIgH,OAAOnG,KAAKsH,KAEhC,OADAtH,KAAKsH,KAAO,EACL8E,GAGTtK,EAAK+S,WAAWjW,UAAU6W,MAAQ,WAChC,OAAOzV,KAAKsH,IAAMtH,KAAKuI,OAGzBzG,EAAK+S,WAAWjW,UAAU8W,OAAS,WAC7B1V,KAAKuI,OAASvI,KAAKsH,MACrBtH,KAAKsH,KAAO,GAGdtH,KAAKuI,MAAQvI,KAAKsH,KAGpBxF,EAAK+S,WAAWjW,UAAU+W,OAAS,WACjC3V,KAAKsH,KAAO,GAGdxF,EAAK+S,WAAWjW,UAAUgX,eAAiB,WACzC,IAAIxJ,EAAMyJ,EAEV,GAEEA,GADAzJ,EAAOpM,KAAK0M,QACIhN,WAAW,SACpBmW,EAAW,IAAMA,EAAW,IAEjCzJ,GAAQtK,EAAK+S,WAAWW,KAC1BxV,KAAK2V,UAIT7T,EAAK+S,WAAWjW,UAAUkX,KAAO,WAC/B,OAAO9V,KAAKsH,IAAMtH,KAAKP,QAGzBqC,EAAK+S,WAAWW,IAAM,MACtB1T,EAAK+S,WAAWkB,MAAQ,QACxBjU,EAAK+S,WAAWmB,KAAO,OACvBlU,EAAK+S,WAAWoB,cAAgB,gBAChCnU,EAAK+S,WAAWqB,MAAQ,QACxBpU,EAAK+S,WAAWsB,SAAW,WAE3BrU,EAAK+S,WAAWuB,SAAW,SAAUC,GAInC,OAHAA,EAAMV,SACNU,EAAMhB,KAAKvT,EAAK+S,WAAWkB,OAC3BM,EAAMX,SACC5T,EAAK+S,WAAWI,SAGzBnT,EAAK+S,WAAWyB,QAAU,SAAUD,GAQlC,GAPIA,EAAMZ,QAAU,IAClBY,EAAMV,SACNU,EAAMhB,KAAKvT,EAAK+S,WAAWmB,OAG7BK,EAAMX,SAEFW,EAAMP,OACR,OAAOhU,EAAK+S,WAAWI,SAI3BnT,EAAK+S,WAAW0B,gBAAkB,SAAUF,GAI1C,OAHAA,EAAMX,SACNW,EAAMT,iBACNS,EAAMhB,KAAKvT,EAAK+S,WAAWoB,eACpBnU,EAAK+S,WAAWI,SAGzBnT,EAAK+S,WAAW2B,SAAW,SAAUH,GAInC,OAHAA,EAAMX,SACNW,EAAMT,iBACNS,EAAMhB,KAAKvT,EAAK+S,WAAWqB,OACpBpU,EAAK+S,WAAWI,SAGzBnT,EAAK+S,WAAW4B,OAAS,SAAUJ,GAC7BA,EAAMZ,QAAU,GAClBY,EAAMhB,KAAKvT,EAAK+S,WAAWmB,OAe/BlU,EAAK+S,WAAW6B,cAAgB5U,EAAK6D,UAAUS,UAE/CtE,EAAK+S,WAAWI,QAAU,SAAUoB,GAClC,OAAa,CACX,IAAIjK,EAAOiK,EAAM3J,OAEjB,GAAIN,GAAQtK,EAAK+S,WAAWW,IAC1B,OAAO1T,EAAK+S,WAAW4B,OAIzB,GAA0B,IAAtBrK,EAAK1M,WAAW,GAApB,CAKA,GAAY,KAAR0M,EACF,OAAOtK,EAAK+S,WAAWuB,SAGzB,GAAY,KAARhK,EAKF,OAJAiK,EAAMV,SACFU,EAAMZ,QAAU,GAClBY,EAAMhB,KAAKvT,EAAK+S,WAAWmB,MAEtBlU,EAAK+S,WAAW0B,gBAGzB,GAAY,KAARnK,EAKF,OAJAiK,EAAMV,SACFU,EAAMZ,QAAU,GAClBY,EAAMhB,KAAKvT,EAAK+S,WAAWmB,MAEtBlU,EAAK+S,WAAW2B,SAMzB,GAAY,KAARpK,GAAiC,IAAlBiK,EAAMZ,QAEvB,OADAY,EAAMhB,KAAKvT,EAAK+S,WAAWsB,UACpBrU,EAAK+S,WAAWI,QAMzB,GAAY,KAAR7I,GAAiC,IAAlBiK,EAAMZ,QAEvB,OADAY,EAAMhB,KAAKvT,EAAK+S,WAAWsB,UACpBrU,EAAK+S,WAAWI,QAGzB,GAAI7I,EAAKhN,MAAM0C,EAAK+S,WAAW6B,eAC7B,OAAO5U,EAAK+S,WAAWyB,aAzCvBD,EAAMd,oBA8CZzT,EAAK8M,YAAc,SAAUzP,EAAKwP,GAChC3O,KAAKqW,MAAQ,IAAIvU,EAAK+S,WAAY1V,GAClCa,KAAK2O,MAAQA,EACb3O,KAAK2W,cAAgB,GACrB3W,KAAK4W,UAAY,GAGnB9U,EAAK8M,YAAYhQ,UAAUiQ,MAAQ,WACjC7O,KAAKqW,MAAM3O,MACX1H,KAAK8U,QAAU9U,KAAKqW,MAAMvB,QAI1B,IAFA,IAAIE,EAAQlT,EAAK8M,YAAYiI,YAEtB7B,GACLA,EAAQA,EAAMhV,MAGhB,OAAOA,KAAK2O,OAGd7M,EAAK8M,YAAYhQ,UAAUkY,WAAa,WACtC,OAAO9W,KAAK8U,QAAQ9U,KAAK4W,YAG3B9U,EAAK8M,YAAYhQ,UAAUmY,cAAgB,WACzC,IAAIC,EAAShX,KAAK8W,aAElB,OADA9W,KAAK4W,WAAa,EACXI,GAGTlV,EAAK8M,YAAYhQ,UAAUqY,WAAa,WACtC,IAAIC,EAAkBlX,KAAK2W,cAC3B3W,KAAK2O,MAAMjD,OAAOwL,GAClBlX,KAAK2W,cAAgB,IAGvB7U,EAAK8M,YAAYiI,YAAc,SAAUM,GACvC,IAAIH,EAASG,EAAOL,aAEpB,GAAc9S,MAAVgT,EAIJ,OAAQA,EAAO1B,MACb,KAAKxT,EAAK+S,WAAWsB,SACnB,OAAOrU,EAAK8M,YAAYwI,cAC1B,KAAKtV,EAAK+S,WAAWkB,MACnB,OAAOjU,EAAK8M,YAAYyI,WAC1B,KAAKvV,EAAK+S,WAAWmB,KACnB,OAAOlU,EAAK8M,YAAY0I,UAC1B,QACE,IAAIC,EAAe,4CAA8CP,EAAO1B,KAMxE,MAJI0B,EAAO7X,IAAIM,QAAU,IACvB8X,GAAgB,gBAAkBP,EAAO7X,IAAM,KAG3C,IAAI2C,EAAK8S,gBAAiB2C,EAAcP,EAAOzO,MAAOyO,EAAOxO,OAIzE1G,EAAK8M,YAAYwI,cAAgB,SAAUD,GACzC,IAAIH,EAASG,EAAOJ,gBAEpB,GAAc/S,MAAVgT,EAAJ,CAIA,OAAQA,EAAO7X,KACb,IAAK,IACHgY,EAAOR,cAAcjH,SAAW5N,EAAKgN,MAAMY,SAASU,WACpD,MACF,IAAK,IACH+G,EAAOR,cAAcjH,SAAW5N,EAAKgN,MAAMY,SAASC,SACpD,MACF,QACE,IAAI4H,EAAe,kCAAoCP,EAAO7X,IAAM,IACpE,MAAM,IAAI2C,EAAK8S,gBAAiB2C,EAAcP,EAAOzO,MAAOyO,EAAOxO,KAGvE,IAAIgP,EAAaL,EAAOL,aAExB,GAAkB9S,MAAdwT,EAAyB,CACvBD,EAAe,yCACnB,MAAM,IAAIzV,EAAK8S,gBAAiB2C,EAAcP,EAAOzO,MAAOyO,EAAOxO,KAGrE,OAAQgP,EAAWlC,MACjB,KAAKxT,EAAK+S,WAAWkB,MACnB,OAAOjU,EAAK8M,YAAYyI,WAC1B,KAAKvV,EAAK+S,WAAWmB,KACnB,OAAOlU,EAAK8M,YAAY0I,UAC1B,QACMC,EAAe,mCAAqCC,EAAWlC,KAAO,IAC1E,MAAM,IAAIxT,EAAK8S,gBAAiB2C,EAAcC,EAAWjP,MAAOiP,EAAWhP,QAIjF1G,EAAK8M,YAAYyI,WAAa,SAAUF,GACtC,IAAIH,EAASG,EAAOJ,gBAEpB,GAAc/S,MAAVgT,EAAJ,CAIA,IAAmD,GAA/CG,EAAOxI,MAAMyF,UAAUtQ,QAAQkT,EAAO7X,KAAY,CACpD,IAAIsY,EAAiBN,EAAOxI,MAAMyF,UAAUxO,KAAI,SAAU8R,GAAK,MAAO,IAAMA,EAAI,OAAOtC,KAAK,MACxFmC,EAAe,uBAAyBP,EAAO7X,IAAM,uBAAyBsY,EAElF,MAAM,IAAI3V,EAAK8S,gBAAiB2C,EAAcP,EAAOzO,MAAOyO,EAAOxO,KAGrE2O,EAAOR,cAAcnI,OAAS,CAACwI,EAAO7X,KAEtC,IAAIqY,EAAaL,EAAOL,aAExB,GAAkB9S,MAAdwT,EAAyB,CACvBD,EAAe,gCACnB,MAAM,IAAIzV,EAAK8S,gBAAiB2C,EAAcP,EAAOzO,MAAOyO,EAAOxO,KAGrE,OAAQgP,EAAWlC,MACjB,KAAKxT,EAAK+S,WAAWmB,KACnB,OAAOlU,EAAK8M,YAAY0I,UAC1B,QACMC,EAAe,0BAA4BC,EAAWlC,KAAO,IACjE,MAAM,IAAIxT,EAAK8S,gBAAiB2C,EAAcC,EAAWjP,MAAOiP,EAAWhP,QAIjF1G,EAAK8M,YAAY0I,UAAY,SAAUH,GACrC,IAAIH,EAASG,EAAOJ,gBAEpB,GAAc/S,MAAVgT,EAAJ,CAIAG,EAAOR,cAAc/K,KAAOoL,EAAO7X,IAAI0G,eAEP,GAA5BmR,EAAO7X,IAAI2E,QAAQ,OACrBqT,EAAOR,cAAcpH,aAAc,GAGrC,IAAIiI,EAAaL,EAAOL,aAExB,GAAkB9S,MAAdwT,EAKJ,OAAQA,EAAWlC,MACjB,KAAKxT,EAAK+S,WAAWmB,KAEnB,OADAmB,EAAOF,aACAnV,EAAK8M,YAAY0I,UAC1B,KAAKxV,EAAK+S,WAAWkB,MAEnB,OADAoB,EAAOF,aACAnV,EAAK8M,YAAYyI,WAC1B,KAAKvV,EAAK+S,WAAWoB,cACnB,OAAOnU,EAAK8M,YAAY+I,kBAC1B,KAAK7V,EAAK+S,WAAWqB,MACnB,OAAOpU,EAAK8M,YAAYgJ,WAC1B,KAAK9V,EAAK+S,WAAWsB,SAEnB,OADAgB,EAAOF,aACAnV,EAAK8M,YAAYwI,cAC1B,QACE,IAAIG,EAAe,2BAA6BC,EAAWlC,KAAO,IAClE,MAAM,IAAIxT,EAAK8S,gBAAiB2C,EAAcC,EAAWjP,MAAOiP,EAAWhP,UApB7E2O,EAAOF,eAwBXnV,EAAK8M,YAAY+I,kBAAoB,SAAUR,GAC7C,IAAIH,EAASG,EAAOJ,gBAEpB,GAAc/S,MAAVgT,EAAJ,CAIA,IAAInL,EAAegM,SAASb,EAAO7X,IAAK,IAExC,GAAI2Y,MAAMjM,GAAe,CACvB,IAAI0L,EAAe,gCACnB,MAAM,IAAIzV,EAAK8S,gBAAiB2C,EAAcP,EAAOzO,MAAOyO,EAAOxO,KAGrE2O,EAAOR,cAAc9K,aAAeA,EAEpC,IAAI2L,EAAaL,EAAOL,aAExB,GAAkB9S,MAAdwT,EAKJ,OAAQA,EAAWlC,MACjB,KAAKxT,EAAK+S,WAAWmB,KAEnB,OADAmB,EAAOF,aACAnV,EAAK8M,YAAY0I,UAC1B,KAAKxV,EAAK+S,WAAWkB,MAEnB,OADAoB,EAAOF,aACAnV,EAAK8M,YAAYyI,WAC1B,KAAKvV,EAAK+S,WAAWoB,cACnB,OAAOnU,EAAK8M,YAAY+I,kBAC1B,KAAK7V,EAAK+S,WAAWqB,MACnB,OAAOpU,EAAK8M,YAAYgJ,WAC1B,KAAK9V,EAAK+S,WAAWsB,SAEnB,OADAgB,EAAOF,aACAnV,EAAK8M,YAAYwI,cAC1B,QACMG,EAAe,2BAA6BC,EAAWlC,KAAO,IAClE,MAAM,IAAIxT,EAAK8S,gBAAiB2C,EAAcC,EAAWjP,MAAOiP,EAAWhP,UApB7E2O,EAAOF,eAwBXnV,EAAK8M,YAAYgJ,WAAa,SAAUT,GACtC,IAAIH,EAASG,EAAOJ,gBAEpB,GAAc/S,MAAVgT,EAAJ,CAIA,IAAI3G,EAAQwH,SAASb,EAAO7X,IAAK,IAEjC,GAAI2Y,MAAMzH,GAAQ,CAChB,IAAIkH,EAAe,wBACnB,MAAM,IAAIzV,EAAK8S,gBAAiB2C,EAAcP,EAAOzO,MAAOyO,EAAOxO,KAGrE2O,EAAOR,cAActG,MAAQA,EAE7B,IAAImH,EAAaL,EAAOL,aAExB,GAAkB9S,MAAdwT,EAKJ,OAAQA,EAAWlC,MACjB,KAAKxT,EAAK+S,WAAWmB,KAEnB,OADAmB,EAAOF,aACAnV,EAAK8M,YAAY0I,UAC1B,KAAKxV,EAAK+S,WAAWkB,MAEnB,OADAoB,EAAOF,aACAnV,EAAK8M,YAAYyI,WAC1B,KAAKvV,EAAK+S,WAAWoB,cACnB,OAAOnU,EAAK8M,YAAY+I,kBAC1B,KAAK7V,EAAK+S,WAAWqB,MACnB,OAAOpU,EAAK8M,YAAYgJ,WAC1B,KAAK9V,EAAK+S,WAAWsB,SAEnB,OADAgB,EAAOF,aACAnV,EAAK8M,YAAYwI,cAC1B,QACMG,EAAe,2BAA6BC,EAAWlC,KAAO,IAClE,MAAM,IAAIxT,EAAK8S,gBAAiB2C,EAAcC,EAAWjP,MAAOiP,EAAWhP,UApB7E2O,EAAOF,oBA+BS,0BAAd,EAYI,WAMN,OAAOnV,IAlBS,kCAx3GnB,I,oCCuBM,IAAIiW,EAAW,WAQlB,OAPAA,EAAWra,OAAOsa,QAAU,SAAkB9Z,GAC1C,IAAK,IAAIa,EAAG/B,EAAI,EAAGyB,EAAIyI,UAAUzH,OAAQzC,EAAIyB,EAAGzB,IAE5C,IAAK,IAAI8B,KADTC,EAAImI,UAAUlK,GACOU,OAAOkB,UAAUC,eAAe1B,KAAK4B,EAAGD,KAAIZ,EAAEY,GAAKC,EAAED,IAE9E,OAAOZ,IAEK8V,MAAMhU,KAAMkH,YAuEzB,SAAS+Q,EAASxa,GACrB,IAAIL,EAAsB,mBAAXW,QAAyBN,EAAEM,OAAOma,UAAWlb,EAAI,EAChE,OAAII,EAAUA,EAAED,KAAKM,GACd,CACHiP,KAAM,WAEF,OADIjP,GAAKT,GAAKS,EAAEgC,SAAQhC,OAAI,GACrB,CAAEQ,MAAOR,GAAKA,EAAET,KAAMmb,MAAO1a,KAKzC,SAAS2a,EAAO3a,EAAGgB,GACtB,IAAIrB,EAAsB,mBAAXW,QAAyBN,EAAEM,OAAOma,UACjD,IAAK9a,EAAG,OAAOK,EACf,IAAmBK,EAAYoC,EAA3BlD,EAAII,EAAED,KAAKM,GAAO4a,EAAK,GAC3B,IACI,WAAc,IAAN5Z,GAAgBA,KAAM,MAAQX,EAAId,EAAE0P,QAAQyL,MAAME,EAAGxT,KAAK/G,EAAEG,OAExE,MAAOqa,GAASpY,EAAI,CAAEoY,MAAOA,GAC7B,QACI,IACQxa,IAAMA,EAAEqa,OAAS/a,EAAIJ,EAAU,SAAII,EAAED,KAAKH,GAElD,QAAU,GAAIkD,EAAG,MAAMA,EAAEoY,OAE7B,OAAOD,EAGJ,SAASE,IACZ,IAAK,IAAIF,EAAK,GAAIrb,EAAI,EAAGA,EAAIkK,UAAUzH,OAAQzC,IAC3Cqb,EAAKA,EAAGvT,OAAOsT,EAAOlR,UAAUlK,KACpC,OAAOqb,E,2BC1CX,IClEkBG,ECId,EF8DJ,aA2BE,WAAmB,G,IAAEzW,EAAA,EAAAA,OAAQ0W,EAAA,EAAAA,KAAMvW,EAAA,EAAAA,SAAU3C,EAAA,EAAAA,MAC3CS,KAAK0Y,UGxDF,SACLD,G,QAEMC,EAAY,IAAIC,I,IACtB,IAAkB,QAAAF,GAAI,8BAAE,CAAnB,IAAMlG,EAAG,QACN,6BAACqG,EAAA,KAAMC,EAAA,KAGPC,EAAWvG,EAAIuG,SACfC,EAAWxG,EAAIwG,MAGfC,EAAO,EAAWzG,EAAIyG,MACzBlZ,QAAQ,mBAAoB,IAC5BA,QAAQ,OAAQ,KAGnB,GAAI+Y,EAAM,CACR,IAAM7K,EAAS0K,EAAU7a,IAAI+a,GAGxB5K,EAAOiL,OAOVP,EAAUQ,IAAIJ,EAAU,CACtBA,SAAQ,EACRC,MAAK,EACLC,KAAI,EACJhL,OAAM,KAVRA,EAAO+K,MAASxG,EAAIwG,MACpB/K,EAAOgL,KAASA,EAChBhL,EAAOiL,QAAS,QAclBP,EAAUQ,IAAIJ,EAAU,CACtBA,SAAQ,EACRC,MAAK,EACLC,KAAI,EACJC,QAAQ,K,iGAId,OAAOP,EHUYS,CAAuBV,GACxCzY,KAAKoZ,UI9DF,SACLrX,GAEA,IAAMqE,EAAY,IAAI0D,OAAO/H,EAAOqE,UAAW,OACzCgT,EAAY,SAACC,EAAYC,EAAc1N,GAC3C,OAAU0N,EAAI,OAAO1N,EAAI,SAI3B,OAAO,SAAC+C,GACNA,EAAQA,EACL7O,QAAQ,eAAgB,KACxByZ,OAGH,IAAMna,EAAQ,IAAI0K,OAAO,MAAM/H,EAAOqE,UAAS,KAC7C,EAAauI,GAAO7O,QAAQsG,EAAW,KAAI,IACxC,OAGL,OAAO,SAAAoT,GAAY,OAAC,OACfA,GAAQ,CACXT,MAAOS,EAAST,MAAMjZ,QAAQV,EAAOga,GACrCJ,KAAOQ,EAASR,KAAKlZ,QAAQV,EAAOga,OJuCrBK,CAAuB1X,GAItC/B,KAAKT,WADc,IAAVA,EACIuC,MAAK,W,UAChBI,EAAWA,GAAY,CACrBE,SAAS,EACTsX,WAAW,GAIb1Z,KAAKkC,SAASgG,QACVhG,EAASE,SACXpC,KAAKkC,SAASC,IAAIL,KAAKM,SACrBF,EAASwX,WACX1Z,KAAKkC,SAASC,IAAIL,KAAKO,gBAGE,IAAvBN,EAAO4X,KAAKla,QAAmC,OAAnBsC,EAAO4X,KAAK,GAC1C3Z,KAAK6T,IAAK/R,KAAaC,EAAO4X,KAAK,KAC1B5X,EAAO4X,KAAKla,OAAS,GAC9BO,KAAK6T,KAAK,EAAA/R,MAAa8X,cAAa,UAAI7X,EAAO4X,QAIjD3Z,KAAK4P,MAAM,QAAS,CAAES,MAAO,KAC7BrQ,KAAK4P,MAAM,QACX5P,KAAKqR,IAAI,Y,IAGT,IAAkB,QAAAoH,GAAI,+BAAjB,IAAMlG,EAAG,QACZvS,KAAKmC,IAAIoQ,I,qGAKAzQ,KAAKqM,MAAMvH,KACL,iBAAVrH,EACHsa,KAAKhL,MAAMtP,GACXA,GAuEZ,OAlDS,YAAAkP,OAAP,SAAcE,GAAd,WACE,GAAIA,EACF,IAGE,IAAMmL,EAAS9Z,KAAKT,MAAMkP,OAAOE,GAC9B7D,QAAO,SAAC+F,EAAS/I,GAChB,IAAM0R,EAAW,EAAKd,UAAU7a,IAAIiK,EAAOuJ,KAC3C,QAAwB,IAAbmI,EACT,GAAI,WAAYA,EAAU,CACxB,IAAMnI,EAAMmI,EAASxL,OAAO8K,SAC5BjI,EAAQqI,IAAI7H,EAAK,EAAIR,EAAQhT,IAAIwT,IAAQ,GAAI,CAAAvJ,SACxC,CACCuJ,EAAMmI,EAASV,SACrBjI,EAAQqI,IAAI7H,EAAKR,EAAQhT,IAAIwT,IAAQ,IAGzC,OAAOR,IACN,IAAI8H,KAGH,EAAK3Y,KAAKoZ,UAAUzK,GAG1B,OAAO,EAAImL,GAAQlU,KAAI,SAAC,G,IAAA,SAACyL,EAAA,KAAK0I,EAAA,KAAc,OAC1CC,QAAS,EAAG,EAAKtB,UAAU7a,IAAIwT,IAC/B0I,SAAUA,EAASnU,KAAI,SAAAqU,GACrB,OAAO,EAAG,EAAKvB,UAAU7a,IAAIoc,EAAQ5I,aAKzC,MAAO6I,GAEPrX,QAAQF,KAAK,kBAAkBgM,EAAK,iCAKxC,MAAO,IAQF,YAAA3L,SAAP,WACE,OAAO6W,KAAKM,UAAUna,KAAKT,QAE/B,EA3IA,GEfO,SAAS6a,EAAQxX,GACtB,OAAQA,EAAQ0S,MAGd,KAAKkD,EAAkB6B,MAGrB,OAxCN,SAA4BtY,G,QACpBuY,EAAO,UAGPC,EAAU,G,IAChB,IAAmB,QAAAxY,EAAO4X,MAAI,8BAAE,CAA3B,IAAMA,EAAI,QACA,OAATA,GAAeY,EAAQ1V,KAAQyV,EAAI,mBAC1B,OAATX,GAAeY,EAAQ1V,KAAQyV,EAAI,aAAaX,EAAI,Y,iGAItD5X,EAAO4X,KAAKla,OAAS,GACvB8a,EAAQ1V,KAAQyV,EAAI,0BAGlBC,EAAQ9a,QACV+a,KAAKC,cAAa,MAAlBD,KAAI,GACCF,EAAI,oCACJC,IAoBHG,CAAmB9X,EAAQ0W,KAAKvX,QAChC,EAAQ,IAAI,EAAYa,EAAQ0W,MACzB,CACLhE,KAAMkD,EAAkBmC,KACxBrB,KAAM,EAAMtW,YAIhB,KAAKwV,EAAkBoC,MACrB,MAAO,CACLtF,KAAMkD,EAAkBqC,OACxBvB,KAAM,EAAQ,EAAM7K,OAAO7L,EAAQ0W,MAAQ,IAI/C,QACE,MAAM,IAAIzZ,UAAU,0BDxE1B,SAAkB2Y,GAChB,qBACA,mBACA,qBACA,uBAJF,CAAkBA,MAAiB,KC/BnC,wCA+GAgC,KAAKM,iBAAiB,WAAW,SAAAC,GAC/BP,KAAKQ,YAAYZ,EAAQW,EAAGzB","file":"assets/javascripts/worker/search.926ffd9e.min.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 5);\n","/*!\n * escape-html\n * Copyright(c) 2012-2013 TJ Holowaychuk\n * Copyright(c) 2015 Andreas Lubbe\n * Copyright(c) 2015 Tiancheng \"Timothy\" Gu\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module variables.\n * @private\n */\n\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = escapeHtml;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n var str = '' + string;\n var match = matchHtmlRegExp.exec(str);\n\n if (!match) {\n return str;\n }\n\n var escape;\n var html = '';\n var index = 0;\n var lastIndex = 0;\n\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34: // \"\n escape = '"';\n break;\n case 38: // &\n escape = '&';\n break;\n case 39: // '\n escape = ''';\n break;\n case 60: // <\n escape = '<';\n break;\n case 62: // >\n escape = '>';\n break;\n default:\n continue;\n }\n\n if (lastIndex !== index) {\n html += str.substring(lastIndex, index);\n }\n\n lastIndex = index + 1;\n html += escape;\n }\n\n return lastIndex !== index\n ? html + str.substring(lastIndex, index)\n : html;\n}\n","'use strict';\n\nconst matchOperatorsRegex = /[|\\\\{}()[\\]^$+*?.-]/g;\n\nmodule.exports = string => {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\treturn string.replace(matchOperatorsRegex, '\\\\$&');\n};\n","module.exports = global[\"lunr\"] = require(\"-!./lunr.js\");","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","/**\n * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.8\n * Copyright (C) 2019 Oliver Nightingale\n * @license MIT\n */\n\n;(function(){\n\n/**\n * A convenience function for configuring and constructing\n * a new lunr Index.\n *\n * A lunr.Builder instance is created and the pipeline setup\n * with a trimmer, stop word filter and stemmer.\n *\n * This builder object is yielded to the configuration function\n * that is passed as a parameter, allowing the list of fields\n * and other builder parameters to be customised.\n *\n * All documents _must_ be added within the passed config function.\n *\n * @example\n * var idx = lunr(function () {\n * this.field('title')\n * this.field('body')\n * this.ref('id')\n *\n * documents.forEach(function (doc) {\n * this.add(doc)\n * }, this)\n * })\n *\n * @see {@link lunr.Builder}\n * @see {@link lunr.Pipeline}\n * @see {@link lunr.trimmer}\n * @see {@link lunr.stopWordFilter}\n * @see {@link lunr.stemmer}\n * @namespace {function} lunr\n */\nvar lunr = function (config) {\n var builder = new lunr.Builder\n\n builder.pipeline.add(\n lunr.trimmer,\n lunr.stopWordFilter,\n lunr.stemmer\n )\n\n builder.searchPipeline.add(\n lunr.stemmer\n )\n\n config.call(builder, builder)\n return builder.build()\n}\n\nlunr.version = \"2.3.8\"\n/*!\n * lunr.utils\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * A namespace containing utils for the rest of the lunr library\n * @namespace lunr.utils\n */\nlunr.utils = {}\n\n/**\n * Print a warning message to the console.\n *\n * @param {String} message The message to be printed.\n * @memberOf lunr.utils\n * @function\n */\nlunr.utils.warn = (function (global) {\n /* eslint-disable no-console */\n return function (message) {\n if (global.console && console.warn) {\n console.warn(message)\n }\n }\n /* eslint-enable no-console */\n})(this)\n\n/**\n * Convert an object to a string.\n *\n * In the case of `null` and `undefined` the function returns\n * the empty string, in all other cases the result of calling\n * `toString` on the passed object is returned.\n *\n * @param {Any} obj The object to convert to a string.\n * @return {String} string representation of the passed object.\n * @memberOf lunr.utils\n */\nlunr.utils.asString = function (obj) {\n if (obj === void 0 || obj === null) {\n return \"\"\n } else {\n return obj.toString()\n }\n}\n\n/**\n * Clones an object.\n *\n * Will create a copy of an existing object such that any mutations\n * on the copy cannot affect the original.\n *\n * Only shallow objects are supported, passing a nested object to this\n * function will cause a TypeError.\n *\n * Objects with primitives, and arrays of primitives are supported.\n *\n * @param {Object} obj The object to clone.\n * @return {Object} a clone of the passed object.\n * @throws {TypeError} when a nested object is passed.\n * @memberOf Utils\n */\nlunr.utils.clone = function (obj) {\n if (obj === null || obj === undefined) {\n return obj\n }\n\n var clone = Object.create(null),\n keys = Object.keys(obj)\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i],\n val = obj[key]\n\n if (Array.isArray(val)) {\n clone[key] = val.slice()\n continue\n }\n\n if (typeof val === 'string' ||\n typeof val === 'number' ||\n typeof val === 'boolean') {\n clone[key] = val\n continue\n }\n\n throw new TypeError(\"clone is not deep and does not support nested objects\")\n }\n\n return clone\n}\nlunr.FieldRef = function (docRef, fieldName, stringValue) {\n this.docRef = docRef\n this.fieldName = fieldName\n this._stringValue = stringValue\n}\n\nlunr.FieldRef.joiner = \"/\"\n\nlunr.FieldRef.fromString = function (s) {\n var n = s.indexOf(lunr.FieldRef.joiner)\n\n if (n === -1) {\n throw \"malformed field ref string\"\n }\n\n var fieldRef = s.slice(0, n),\n docRef = s.slice(n + 1)\n\n return new lunr.FieldRef (docRef, fieldRef, s)\n}\n\nlunr.FieldRef.prototype.toString = function () {\n if (this._stringValue == undefined) {\n this._stringValue = this.fieldName + lunr.FieldRef.joiner + this.docRef\n }\n\n return this._stringValue\n}\n/*!\n * lunr.Set\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * A lunr set.\n *\n * @constructor\n */\nlunr.Set = function (elements) {\n this.elements = Object.create(null)\n\n if (elements) {\n this.length = elements.length\n\n for (var i = 0; i < this.length; i++) {\n this.elements[elements[i]] = true\n }\n } else {\n this.length = 0\n }\n}\n\n/**\n * A complete set that contains all elements.\n *\n * @static\n * @readonly\n * @type {lunr.Set}\n */\nlunr.Set.complete = {\n intersect: function (other) {\n return other\n },\n\n union: function (other) {\n return other\n },\n\n contains: function () {\n return true\n }\n}\n\n/**\n * An empty set that contains no elements.\n *\n * @static\n * @readonly\n * @type {lunr.Set}\n */\nlunr.Set.empty = {\n intersect: function () {\n return this\n },\n\n union: function (other) {\n return other\n },\n\n contains: function () {\n return false\n }\n}\n\n/**\n * Returns true if this set contains the specified object.\n *\n * @param {object} object - Object whose presence in this set is to be tested.\n * @returns {boolean} - True if this set contains the specified object.\n */\nlunr.Set.prototype.contains = function (object) {\n return !!this.elements[object]\n}\n\n/**\n * Returns a new set containing only the elements that are present in both\n * this set and the specified set.\n *\n * @param {lunr.Set} other - set to intersect with this set.\n * @returns {lunr.Set} a new set that is the intersection of this and the specified set.\n */\n\nlunr.Set.prototype.intersect = function (other) {\n var a, b, elements, intersection = []\n\n if (other === lunr.Set.complete) {\n return this\n }\n\n if (other === lunr.Set.empty) {\n return other\n }\n\n if (this.length < other.length) {\n a = this\n b = other\n } else {\n a = other\n b = this\n }\n\n elements = Object.keys(a.elements)\n\n for (var i = 0; i < elements.length; i++) {\n var element = elements[i]\n if (element in b.elements) {\n intersection.push(element)\n }\n }\n\n return new lunr.Set (intersection)\n}\n\n/**\n * Returns a new set combining the elements of this and the specified set.\n *\n * @param {lunr.Set} other - set to union with this set.\n * @return {lunr.Set} a new set that is the union of this and the specified set.\n */\n\nlunr.Set.prototype.union = function (other) {\n if (other === lunr.Set.complete) {\n return lunr.Set.complete\n }\n\n if (other === lunr.Set.empty) {\n return this\n }\n\n return new lunr.Set(Object.keys(this.elements).concat(Object.keys(other.elements)))\n}\n/**\n * A function to calculate the inverse document frequency for\n * a posting. This is shared between the builder and the index\n *\n * @private\n * @param {object} posting - The posting for a given term\n * @param {number} documentCount - The total number of documents.\n */\nlunr.idf = function (posting, documentCount) {\n var documentsWithTerm = 0\n\n for (var fieldName in posting) {\n if (fieldName == '_index') continue // Ignore the term index, its not a field\n documentsWithTerm += Object.keys(posting[fieldName]).length\n }\n\n var x = (documentCount - documentsWithTerm + 0.5) / (documentsWithTerm + 0.5)\n\n return Math.log(1 + Math.abs(x))\n}\n\n/**\n * A token wraps a string representation of a token\n * as it is passed through the text processing pipeline.\n *\n * @constructor\n * @param {string} [str=''] - The string token being wrapped.\n * @param {object} [metadata={}] - Metadata associated with this token.\n */\nlunr.Token = function (str, metadata) {\n this.str = str || \"\"\n this.metadata = metadata || {}\n}\n\n/**\n * Returns the token string that is being wrapped by this object.\n *\n * @returns {string}\n */\nlunr.Token.prototype.toString = function () {\n return this.str\n}\n\n/**\n * A token update function is used when updating or optionally\n * when cloning a token.\n *\n * @callback lunr.Token~updateFunction\n * @param {string} str - The string representation of the token.\n * @param {Object} metadata - All metadata associated with this token.\n */\n\n/**\n * Applies the given function to the wrapped string token.\n *\n * @example\n * token.update(function (str, metadata) {\n * return str.toUpperCase()\n * })\n *\n * @param {lunr.Token~updateFunction} fn - A function to apply to the token string.\n * @returns {lunr.Token}\n */\nlunr.Token.prototype.update = function (fn) {\n this.str = fn(this.str, this.metadata)\n return this\n}\n\n/**\n * Creates a clone of this token. Optionally a function can be\n * applied to the cloned token.\n *\n * @param {lunr.Token~updateFunction} [fn] - An optional function to apply to the cloned token.\n * @returns {lunr.Token}\n */\nlunr.Token.prototype.clone = function (fn) {\n fn = fn || function (s) { return s }\n return new lunr.Token (fn(this.str, this.metadata), this.metadata)\n}\n/*!\n * lunr.tokenizer\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * A function for splitting a string into tokens ready to be inserted into\n * the search index. Uses `lunr.tokenizer.separator` to split strings, change\n * the value of this property to change how strings are split into tokens.\n *\n * This tokenizer will convert its parameter to a string by calling `toString` and\n * then will split this string on the character in `lunr.tokenizer.separator`.\n * Arrays will have their elements converted to strings and wrapped in a lunr.Token.\n *\n * Optional metadata can be passed to the tokenizer, this metadata will be cloned and\n * added as metadata to every token that is created from the object to be tokenized.\n *\n * @static\n * @param {?(string|object|object[])} obj - The object to convert into tokens\n * @param {?object} metadata - Optional metadata to associate with every token\n * @returns {lunr.Token[]}\n * @see {@link lunr.Pipeline}\n */\nlunr.tokenizer = function (obj, metadata) {\n if (obj == null || obj == undefined) {\n return []\n }\n\n if (Array.isArray(obj)) {\n return obj.map(function (t) {\n return new lunr.Token(\n lunr.utils.asString(t).toLowerCase(),\n lunr.utils.clone(metadata)\n )\n })\n }\n\n var str = obj.toString().toLowerCase(),\n len = str.length,\n tokens = []\n\n for (var sliceEnd = 0, sliceStart = 0; sliceEnd <= len; sliceEnd++) {\n var char = str.charAt(sliceEnd),\n sliceLength = sliceEnd - sliceStart\n\n if ((char.match(lunr.tokenizer.separator) || sliceEnd == len)) {\n\n if (sliceLength > 0) {\n var tokenMetadata = lunr.utils.clone(metadata) || {}\n tokenMetadata[\"position\"] = [sliceStart, sliceLength]\n tokenMetadata[\"index\"] = tokens.length\n\n tokens.push(\n new lunr.Token (\n str.slice(sliceStart, sliceEnd),\n tokenMetadata\n )\n )\n }\n\n sliceStart = sliceEnd + 1\n }\n\n }\n\n return tokens\n}\n\n/**\n * The separator used to split a string into tokens. Override this property to change the behaviour of\n * `lunr.tokenizer` behaviour when tokenizing strings. By default this splits on whitespace and hyphens.\n *\n * @static\n * @see lunr.tokenizer\n */\nlunr.tokenizer.separator = /[\\s\\-]+/\n/*!\n * lunr.Pipeline\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * lunr.Pipelines maintain an ordered list of functions to be applied to all\n * tokens in documents entering the search index and queries being ran against\n * the index.\n *\n * An instance of lunr.Index created with the lunr shortcut will contain a\n * pipeline with a stop word filter and an English language stemmer. Extra\n * functions can be added before or after either of these functions or these\n * default functions can be removed.\n *\n * When run the pipeline will call each function in turn, passing a token, the\n * index of that token in the original list of all tokens and finally a list of\n * all the original tokens.\n *\n * The output of functions in the pipeline will be passed to the next function\n * in the pipeline. To exclude a token from entering the index the function\n * should return undefined, the rest of the pipeline will not be called with\n * this token.\n *\n * For serialisation of pipelines to work, all functions used in an instance of\n * a pipeline should be registered with lunr.Pipeline. Registered functions can\n * then be loaded. If trying to load a serialised pipeline that uses functions\n * that are not registered an error will be thrown.\n *\n * If not planning on serialising the pipeline then registering pipeline functions\n * is not necessary.\n *\n * @constructor\n */\nlunr.Pipeline = function () {\n this._stack = []\n}\n\nlunr.Pipeline.registeredFunctions = Object.create(null)\n\n/**\n * A pipeline function maps lunr.Token to lunr.Token. A lunr.Token contains the token\n * string as well as all known metadata. A pipeline function can mutate the token string\n * or mutate (or add) metadata for a given token.\n *\n * A pipeline function can indicate that the passed token should be discarded by returning\n * null, undefined or an empty string. This token will not be passed to any downstream pipeline\n * functions and will not be added to the index.\n *\n * Multiple tokens can be returned by returning an array of tokens. Each token will be passed\n * to any downstream pipeline functions and all will returned tokens will be added to the index.\n *\n * Any number of pipeline functions may be chained together using a lunr.Pipeline.\n *\n * @interface lunr.PipelineFunction\n * @param {lunr.Token} token - A token from the document being processed.\n * @param {number} i - The index of this token in the complete list of tokens for this document/field.\n * @param {lunr.Token[]} tokens - All tokens for this document/field.\n * @returns {(?lunr.Token|lunr.Token[])}\n */\n\n/**\n * Register a function with the pipeline.\n *\n * Functions that are used in the pipeline should be registered if the pipeline\n * needs to be serialised, or a serialised pipeline needs to be loaded.\n *\n * Registering a function does not add it to a pipeline, functions must still be\n * added to instances of the pipeline for them to be used when running a pipeline.\n *\n * @param {lunr.PipelineFunction} fn - The function to check for.\n * @param {String} label - The label to register this function with\n */\nlunr.Pipeline.registerFunction = function (fn, label) {\n if (label in this.registeredFunctions) {\n lunr.utils.warn('Overwriting existing registered function: ' + label)\n }\n\n fn.label = label\n lunr.Pipeline.registeredFunctions[fn.label] = fn\n}\n\n/**\n * Warns if the function is not registered as a Pipeline function.\n *\n * @param {lunr.PipelineFunction} fn - The function to check for.\n * @private\n */\nlunr.Pipeline.warnIfFunctionNotRegistered = function (fn) {\n var isRegistered = fn.label && (fn.label in this.registeredFunctions)\n\n if (!isRegistered) {\n lunr.utils.warn('Function is not registered with pipeline. This may cause problems when serialising the index.\\n', fn)\n }\n}\n\n/**\n * Loads a previously serialised pipeline.\n *\n * All functions to be loaded must already be registered with lunr.Pipeline.\n * If any function from the serialised data has not been registered then an\n * error will be thrown.\n *\n * @param {Object} serialised - The serialised pipeline to load.\n * @returns {lunr.Pipeline}\n */\nlunr.Pipeline.load = function (serialised) {\n var pipeline = new lunr.Pipeline\n\n serialised.forEach(function (fnName) {\n var fn = lunr.Pipeline.registeredFunctions[fnName]\n\n if (fn) {\n pipeline.add(fn)\n } else {\n throw new Error('Cannot load unregistered function: ' + fnName)\n }\n })\n\n return pipeline\n}\n\n/**\n * Adds new functions to the end of the pipeline.\n *\n * Logs a warning if the function has not been registered.\n *\n * @param {lunr.PipelineFunction[]} functions - Any number of functions to add to the pipeline.\n */\nlunr.Pipeline.prototype.add = function () {\n var fns = Array.prototype.slice.call(arguments)\n\n fns.forEach(function (fn) {\n lunr.Pipeline.warnIfFunctionNotRegistered(fn)\n this._stack.push(fn)\n }, this)\n}\n\n/**\n * Adds a single function after a function that already exists in the\n * pipeline.\n *\n * Logs a warning if the function has not been registered.\n *\n * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline.\n * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline.\n */\nlunr.Pipeline.prototype.after = function (existingFn, newFn) {\n lunr.Pipeline.warnIfFunctionNotRegistered(newFn)\n\n var pos = this._stack.indexOf(existingFn)\n if (pos == -1) {\n throw new Error('Cannot find existingFn')\n }\n\n pos = pos + 1\n this._stack.splice(pos, 0, newFn)\n}\n\n/**\n * Adds a single function before a function that already exists in the\n * pipeline.\n *\n * Logs a warning if the function has not been registered.\n *\n * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline.\n * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline.\n */\nlunr.Pipeline.prototype.before = function (existingFn, newFn) {\n lunr.Pipeline.warnIfFunctionNotRegistered(newFn)\n\n var pos = this._stack.indexOf(existingFn)\n if (pos == -1) {\n throw new Error('Cannot find existingFn')\n }\n\n this._stack.splice(pos, 0, newFn)\n}\n\n/**\n * Removes a function from the pipeline.\n *\n * @param {lunr.PipelineFunction} fn The function to remove from the pipeline.\n */\nlunr.Pipeline.prototype.remove = function (fn) {\n var pos = this._stack.indexOf(fn)\n if (pos == -1) {\n return\n }\n\n this._stack.splice(pos, 1)\n}\n\n/**\n * Runs the current list of functions that make up the pipeline against the\n * passed tokens.\n *\n * @param {Array} tokens The tokens to run through the pipeline.\n * @returns {Array}\n */\nlunr.Pipeline.prototype.run = function (tokens) {\n var stackLength = this._stack.length\n\n for (var i = 0; i < stackLength; i++) {\n var fn = this._stack[i]\n var memo = []\n\n for (var j = 0; j < tokens.length; j++) {\n var result = fn(tokens[j], j, tokens)\n\n if (result === null || result === void 0 || result === '') continue\n\n if (Array.isArray(result)) {\n for (var k = 0; k < result.length; k++) {\n memo.push(result[k])\n }\n } else {\n memo.push(result)\n }\n }\n\n tokens = memo\n }\n\n return tokens\n}\n\n/**\n * Convenience method for passing a string through a pipeline and getting\n * strings out. This method takes care of wrapping the passed string in a\n * token and mapping the resulting tokens back to strings.\n *\n * @param {string} str - The string to pass through the pipeline.\n * @param {?object} metadata - Optional metadata to associate with the token\n * passed to the pipeline.\n * @returns {string[]}\n */\nlunr.Pipeline.prototype.runString = function (str, metadata) {\n var token = new lunr.Token (str, metadata)\n\n return this.run([token]).map(function (t) {\n return t.toString()\n })\n}\n\n/**\n * Resets the pipeline by removing any existing processors.\n *\n */\nlunr.Pipeline.prototype.reset = function () {\n this._stack = []\n}\n\n/**\n * Returns a representation of the pipeline ready for serialisation.\n *\n * Logs a warning if the function has not been registered.\n *\n * @returns {Array}\n */\nlunr.Pipeline.prototype.toJSON = function () {\n return this._stack.map(function (fn) {\n lunr.Pipeline.warnIfFunctionNotRegistered(fn)\n\n return fn.label\n })\n}\n/*!\n * lunr.Vector\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * A vector is used to construct the vector space of documents and queries. These\n * vectors support operations to determine the similarity between two documents or\n * a document and a query.\n *\n * Normally no parameters are required for initializing a vector, but in the case of\n * loading a previously dumped vector the raw elements can be provided to the constructor.\n *\n * For performance reasons vectors are implemented with a flat array, where an elements\n * index is immediately followed by its value. E.g. [index, value, index, value]. This\n * allows the underlying array to be as sparse as possible and still offer decent\n * performance when being used for vector calculations.\n *\n * @constructor\n * @param {Number[]} [elements] - The flat list of element index and element value pairs.\n */\nlunr.Vector = function (elements) {\n this._magnitude = 0\n this.elements = elements || []\n}\n\n\n/**\n * Calculates the position within the vector to insert a given index.\n *\n * This is used internally by insert and upsert. If there are duplicate indexes then\n * the position is returned as if the value for that index were to be updated, but it\n * is the callers responsibility to check whether there is a duplicate at that index\n *\n * @param {Number} insertIdx - The index at which the element should be inserted.\n * @returns {Number}\n */\nlunr.Vector.prototype.positionForIndex = function (index) {\n // For an empty vector the tuple can be inserted at the beginning\n if (this.elements.length == 0) {\n return 0\n }\n\n var start = 0,\n end = this.elements.length / 2,\n sliceLength = end - start,\n pivotPoint = Math.floor(sliceLength / 2),\n pivotIndex = this.elements[pivotPoint * 2]\n\n while (sliceLength > 1) {\n if (pivotIndex < index) {\n start = pivotPoint\n }\n\n if (pivotIndex > index) {\n end = pivotPoint\n }\n\n if (pivotIndex == index) {\n break\n }\n\n sliceLength = end - start\n pivotPoint = start + Math.floor(sliceLength / 2)\n pivotIndex = this.elements[pivotPoint * 2]\n }\n\n if (pivotIndex == index) {\n return pivotPoint * 2\n }\n\n if (pivotIndex > index) {\n return pivotPoint * 2\n }\n\n if (pivotIndex < index) {\n return (pivotPoint + 1) * 2\n }\n}\n\n/**\n * Inserts an element at an index within the vector.\n *\n * Does not allow duplicates, will throw an error if there is already an entry\n * for this index.\n *\n * @param {Number} insertIdx - The index at which the element should be inserted.\n * @param {Number} val - The value to be inserted into the vector.\n */\nlunr.Vector.prototype.insert = function (insertIdx, val) {\n this.upsert(insertIdx, val, function () {\n throw \"duplicate index\"\n })\n}\n\n/**\n * Inserts or updates an existing index within the vector.\n *\n * @param {Number} insertIdx - The index at which the element should be inserted.\n * @param {Number} val - The value to be inserted into the vector.\n * @param {function} fn - A function that is called for updates, the existing value and the\n * requested value are passed as arguments\n */\nlunr.Vector.prototype.upsert = function (insertIdx, val, fn) {\n this._magnitude = 0\n var position = this.positionForIndex(insertIdx)\n\n if (this.elements[position] == insertIdx) {\n this.elements[position + 1] = fn(this.elements[position + 1], val)\n } else {\n this.elements.splice(position, 0, insertIdx, val)\n }\n}\n\n/**\n * Calculates the magnitude of this vector.\n *\n * @returns {Number}\n */\nlunr.Vector.prototype.magnitude = function () {\n if (this._magnitude) return this._magnitude\n\n var sumOfSquares = 0,\n elementsLength = this.elements.length\n\n for (var i = 1; i < elementsLength; i += 2) {\n var val = this.elements[i]\n sumOfSquares += val * val\n }\n\n return this._magnitude = Math.sqrt(sumOfSquares)\n}\n\n/**\n * Calculates the dot product of this vector and another vector.\n *\n * @param {lunr.Vector} otherVector - The vector to compute the dot product with.\n * @returns {Number}\n */\nlunr.Vector.prototype.dot = function (otherVector) {\n var dotProduct = 0,\n a = this.elements, b = otherVector.elements,\n aLen = a.length, bLen = b.length,\n aVal = 0, bVal = 0,\n i = 0, j = 0\n\n while (i < aLen && j < bLen) {\n aVal = a[i], bVal = b[j]\n if (aVal < bVal) {\n i += 2\n } else if (aVal > bVal) {\n j += 2\n } else if (aVal == bVal) {\n dotProduct += a[i + 1] * b[j + 1]\n i += 2\n j += 2\n }\n }\n\n return dotProduct\n}\n\n/**\n * Calculates the similarity between this vector and another vector.\n *\n * @param {lunr.Vector} otherVector - The other vector to calculate the\n * similarity with.\n * @returns {Number}\n */\nlunr.Vector.prototype.similarity = function (otherVector) {\n return this.dot(otherVector) / this.magnitude() || 0\n}\n\n/**\n * Converts the vector to an array of the elements within the vector.\n *\n * @returns {Number[]}\n */\nlunr.Vector.prototype.toArray = function () {\n var output = new Array (this.elements.length / 2)\n\n for (var i = 1, j = 0; i < this.elements.length; i += 2, j++) {\n output[j] = this.elements[i]\n }\n\n return output\n}\n\n/**\n * A JSON serializable representation of the vector.\n *\n * @returns {Number[]}\n */\nlunr.Vector.prototype.toJSON = function () {\n return this.elements\n}\n/* eslint-disable */\n/*!\n * lunr.stemmer\n * Copyright (C) 2019 Oliver Nightingale\n * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt\n */\n\n/**\n * lunr.stemmer is an english language stemmer, this is a JavaScript\n * implementation of the PorterStemmer taken from http://tartarus.org/~martin\n *\n * @static\n * @implements {lunr.PipelineFunction}\n * @param {lunr.Token} token - The string to stem\n * @returns {lunr.Token}\n * @see {@link lunr.Pipeline}\n * @function\n */\nlunr.stemmer = (function(){\n var step2list = {\n \"ational\" : \"ate\",\n \"tional\" : \"tion\",\n \"enci\" : \"ence\",\n \"anci\" : \"ance\",\n \"izer\" : \"ize\",\n \"bli\" : \"ble\",\n \"alli\" : \"al\",\n \"entli\" : \"ent\",\n \"eli\" : \"e\",\n \"ousli\" : \"ous\",\n \"ization\" : \"ize\",\n \"ation\" : \"ate\",\n \"ator\" : \"ate\",\n \"alism\" : \"al\",\n \"iveness\" : \"ive\",\n \"fulness\" : \"ful\",\n \"ousness\" : \"ous\",\n \"aliti\" : \"al\",\n \"iviti\" : \"ive\",\n \"biliti\" : \"ble\",\n \"logi\" : \"log\"\n },\n\n step3list = {\n \"icate\" : \"ic\",\n \"ative\" : \"\",\n \"alize\" : \"al\",\n \"iciti\" : \"ic\",\n \"ical\" : \"ic\",\n \"ful\" : \"\",\n \"ness\" : \"\"\n },\n\n c = \"[^aeiou]\", // consonant\n v = \"[aeiouy]\", // vowel\n C = c + \"[^aeiouy]*\", // consonant sequence\n V = v + \"[aeiou]*\", // vowel sequence\n\n mgr0 = \"^(\" + C + \")?\" + V + C, // [C]VC... is m>0\n meq1 = \"^(\" + C + \")?\" + V + C + \"(\" + V + \")?$\", // [C]VC[V] is m=1\n mgr1 = \"^(\" + C + \")?\" + V + C + V + C, // [C]VCVC... is m>1\n s_v = \"^(\" + C + \")?\" + v; // vowel in stem\n\n var re_mgr0 = new RegExp(mgr0);\n var re_mgr1 = new RegExp(mgr1);\n var re_meq1 = new RegExp(meq1);\n var re_s_v = new RegExp(s_v);\n\n var re_1a = /^(.+?)(ss|i)es$/;\n var re2_1a = /^(.+?)([^s])s$/;\n var re_1b = /^(.+?)eed$/;\n var re2_1b = /^(.+?)(ed|ing)$/;\n var re_1b_2 = /.$/;\n var re2_1b_2 = /(at|bl|iz)$/;\n var re3_1b_2 = new RegExp(\"([^aeiouylsz])\\\\1$\");\n var re4_1b_2 = new RegExp(\"^\" + C + v + \"[^aeiouwxy]$\");\n\n var re_1c = /^(.+?[^aeiou])y$/;\n var re_2 = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;\n\n var re_3 = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;\n\n var re_4 = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;\n var re2_4 = /^(.+?)(s|t)(ion)$/;\n\n var re_5 = /^(.+?)e$/;\n var re_5_1 = /ll$/;\n var re3_5 = new RegExp(\"^\" + C + v + \"[^aeiouwxy]$\");\n\n var porterStemmer = function porterStemmer(w) {\n var stem,\n suffix,\n firstch,\n re,\n re2,\n re3,\n re4;\n\n if (w.length < 3) { return w; }\n\n firstch = w.substr(0,1);\n if (firstch == \"y\") {\n w = firstch.toUpperCase() + w.substr(1);\n }\n\n // Step 1a\n re = re_1a\n re2 = re2_1a;\n\n if (re.test(w)) { w = w.replace(re,\"$1$2\"); }\n else if (re2.test(w)) { w = w.replace(re2,\"$1$2\"); }\n\n // Step 1b\n re = re_1b;\n re2 = re2_1b;\n if (re.test(w)) {\n var fp = re.exec(w);\n re = re_mgr0;\n if (re.test(fp[1])) {\n re = re_1b_2;\n w = w.replace(re,\"\");\n }\n } else if (re2.test(w)) {\n var fp = re2.exec(w);\n stem = fp[1];\n re2 = re_s_v;\n if (re2.test(stem)) {\n w = stem;\n re2 = re2_1b_2;\n re3 = re3_1b_2;\n re4 = re4_1b_2;\n if (re2.test(w)) { w = w + \"e\"; }\n else if (re3.test(w)) { re = re_1b_2; w = w.replace(re,\"\"); }\n else if (re4.test(w)) { w = w + \"e\"; }\n }\n }\n\n // Step 1c - replace suffix y or Y by i if preceded by a non-vowel which is not the first letter of the word (so cry -> cri, by -> by, say -> say)\n re = re_1c;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n w = stem + \"i\";\n }\n\n // Step 2\n re = re_2;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n suffix = fp[2];\n re = re_mgr0;\n if (re.test(stem)) {\n w = stem + step2list[suffix];\n }\n }\n\n // Step 3\n re = re_3;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n suffix = fp[2];\n re = re_mgr0;\n if (re.test(stem)) {\n w = stem + step3list[suffix];\n }\n }\n\n // Step 4\n re = re_4;\n re2 = re2_4;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n re = re_mgr1;\n if (re.test(stem)) {\n w = stem;\n }\n } else if (re2.test(w)) {\n var fp = re2.exec(w);\n stem = fp[1] + fp[2];\n re2 = re_mgr1;\n if (re2.test(stem)) {\n w = stem;\n }\n }\n\n // Step 5\n re = re_5;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n re = re_mgr1;\n re2 = re_meq1;\n re3 = re3_5;\n if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) {\n w = stem;\n }\n }\n\n re = re_5_1;\n re2 = re_mgr1;\n if (re.test(w) && re2.test(w)) {\n re = re_1b_2;\n w = w.replace(re,\"\");\n }\n\n // and turn initial Y back to y\n\n if (firstch == \"y\") {\n w = firstch.toLowerCase() + w.substr(1);\n }\n\n return w;\n };\n\n return function (token) {\n return token.update(porterStemmer);\n }\n})();\n\nlunr.Pipeline.registerFunction(lunr.stemmer, 'stemmer')\n/*!\n * lunr.stopWordFilter\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * lunr.generateStopWordFilter builds a stopWordFilter function from the provided\n * list of stop words.\n *\n * The built in lunr.stopWordFilter is built using this generator and can be used\n * to generate custom stopWordFilters for applications or non English languages.\n *\n * @function\n * @param {Array} token The token to pass through the filter\n * @returns {lunr.PipelineFunction}\n * @see lunr.Pipeline\n * @see lunr.stopWordFilter\n */\nlunr.generateStopWordFilter = function (stopWords) {\n var words = stopWords.reduce(function (memo, stopWord) {\n memo[stopWord] = stopWord\n return memo\n }, {})\n\n return function (token) {\n if (token && words[token.toString()] !== token.toString()) return token\n }\n}\n\n/**\n * lunr.stopWordFilter is an English language stop word list filter, any words\n * contained in the list will not be passed through the filter.\n *\n * This is intended to be used in the Pipeline. If the token does not pass the\n * filter then undefined will be returned.\n *\n * @function\n * @implements {lunr.PipelineFunction}\n * @params {lunr.Token} token - A token to check for being a stop word.\n * @returns {lunr.Token}\n * @see {@link lunr.Pipeline}\n */\nlunr.stopWordFilter = lunr.generateStopWordFilter([\n 'a',\n 'able',\n 'about',\n 'across',\n 'after',\n 'all',\n 'almost',\n 'also',\n 'am',\n 'among',\n 'an',\n 'and',\n 'any',\n 'are',\n 'as',\n 'at',\n 'be',\n 'because',\n 'been',\n 'but',\n 'by',\n 'can',\n 'cannot',\n 'could',\n 'dear',\n 'did',\n 'do',\n 'does',\n 'either',\n 'else',\n 'ever',\n 'every',\n 'for',\n 'from',\n 'get',\n 'got',\n 'had',\n 'has',\n 'have',\n 'he',\n 'her',\n 'hers',\n 'him',\n 'his',\n 'how',\n 'however',\n 'i',\n 'if',\n 'in',\n 'into',\n 'is',\n 'it',\n 'its',\n 'just',\n 'least',\n 'let',\n 'like',\n 'likely',\n 'may',\n 'me',\n 'might',\n 'most',\n 'must',\n 'my',\n 'neither',\n 'no',\n 'nor',\n 'not',\n 'of',\n 'off',\n 'often',\n 'on',\n 'only',\n 'or',\n 'other',\n 'our',\n 'own',\n 'rather',\n 'said',\n 'say',\n 'says',\n 'she',\n 'should',\n 'since',\n 'so',\n 'some',\n 'than',\n 'that',\n 'the',\n 'their',\n 'them',\n 'then',\n 'there',\n 'these',\n 'they',\n 'this',\n 'tis',\n 'to',\n 'too',\n 'twas',\n 'us',\n 'wants',\n 'was',\n 'we',\n 'were',\n 'what',\n 'when',\n 'where',\n 'which',\n 'while',\n 'who',\n 'whom',\n 'why',\n 'will',\n 'with',\n 'would',\n 'yet',\n 'you',\n 'your'\n])\n\nlunr.Pipeline.registerFunction(lunr.stopWordFilter, 'stopWordFilter')\n/*!\n * lunr.trimmer\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * lunr.trimmer is a pipeline function for trimming non word\n * characters from the beginning and end of tokens before they\n * enter the index.\n *\n * This implementation may not work correctly for non latin\n * characters and should either be removed or adapted for use\n * with languages with non-latin characters.\n *\n * @static\n * @implements {lunr.PipelineFunction}\n * @param {lunr.Token} token The token to pass through the filter\n * @returns {lunr.Token}\n * @see lunr.Pipeline\n */\nlunr.trimmer = function (token) {\n return token.update(function (s) {\n return s.replace(/^\\W+/, '').replace(/\\W+$/, '')\n })\n}\n\nlunr.Pipeline.registerFunction(lunr.trimmer, 'trimmer')\n/*!\n * lunr.TokenSet\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * A token set is used to store the unique list of all tokens\n * within an index. Token sets are also used to represent an\n * incoming query to the index, this query token set and index\n * token set are then intersected to find which tokens to look\n * up in the inverted index.\n *\n * A token set can hold multiple tokens, as in the case of the\n * index token set, or it can hold a single token as in the\n * case of a simple query token set.\n *\n * Additionally token sets are used to perform wildcard matching.\n * Leading, contained and trailing wildcards are supported, and\n * from this edit distance matching can also be provided.\n *\n * Token sets are implemented as a minimal finite state automata,\n * where both common prefixes and suffixes are shared between tokens.\n * This helps to reduce the space used for storing the token set.\n *\n * @constructor\n */\nlunr.TokenSet = function () {\n this.final = false\n this.edges = {}\n this.id = lunr.TokenSet._nextId\n lunr.TokenSet._nextId += 1\n}\n\n/**\n * Keeps track of the next, auto increment, identifier to assign\n * to a new tokenSet.\n *\n * TokenSets require a unique identifier to be correctly minimised.\n *\n * @private\n */\nlunr.TokenSet._nextId = 1\n\n/**\n * Creates a TokenSet instance from the given sorted array of words.\n *\n * @param {String[]} arr - A sorted array of strings to create the set from.\n * @returns {lunr.TokenSet}\n * @throws Will throw an error if the input array is not sorted.\n */\nlunr.TokenSet.fromArray = function (arr) {\n var builder = new lunr.TokenSet.Builder\n\n for (var i = 0, len = arr.length; i < len; i++) {\n builder.insert(arr[i])\n }\n\n builder.finish()\n return builder.root\n}\n\n/**\n * Creates a token set from a query clause.\n *\n * @private\n * @param {Object} clause - A single clause from lunr.Query.\n * @param {string} clause.term - The query clause term.\n * @param {number} [clause.editDistance] - The optional edit distance for the term.\n * @returns {lunr.TokenSet}\n */\nlunr.TokenSet.fromClause = function (clause) {\n if ('editDistance' in clause) {\n return lunr.TokenSet.fromFuzzyString(clause.term, clause.editDistance)\n } else {\n return lunr.TokenSet.fromString(clause.term)\n }\n}\n\n/**\n * Creates a token set representing a single string with a specified\n * edit distance.\n *\n * Insertions, deletions, substitutions and transpositions are each\n * treated as an edit distance of 1.\n *\n * Increasing the allowed edit distance will have a dramatic impact\n * on the performance of both creating and intersecting these TokenSets.\n * It is advised to keep the edit distance less than 3.\n *\n * @param {string} str - The string to create the token set from.\n * @param {number} editDistance - The allowed edit distance to match.\n * @returns {lunr.Vector}\n */\nlunr.TokenSet.fromFuzzyString = function (str, editDistance) {\n var root = new lunr.TokenSet\n\n var stack = [{\n node: root,\n editsRemaining: editDistance,\n str: str\n }]\n\n while (stack.length) {\n var frame = stack.pop()\n\n // no edit\n if (frame.str.length > 0) {\n var char = frame.str.charAt(0),\n noEditNode\n\n if (char in frame.node.edges) {\n noEditNode = frame.node.edges[char]\n } else {\n noEditNode = new lunr.TokenSet\n frame.node.edges[char] = noEditNode\n }\n\n if (frame.str.length == 1) {\n noEditNode.final = true\n }\n\n stack.push({\n node: noEditNode,\n editsRemaining: frame.editsRemaining,\n str: frame.str.slice(1)\n })\n }\n\n if (frame.editsRemaining == 0) {\n continue\n }\n\n // insertion\n if (\"*\" in frame.node.edges) {\n var insertionNode = frame.node.edges[\"*\"]\n } else {\n var insertionNode = new lunr.TokenSet\n frame.node.edges[\"*\"] = insertionNode\n }\n\n if (frame.str.length == 0) {\n insertionNode.final = true\n }\n\n stack.push({\n node: insertionNode,\n editsRemaining: frame.editsRemaining - 1,\n str: frame.str\n })\n\n // deletion\n // can only do a deletion if we have enough edits remaining\n // and if there are characters left to delete in the string\n if (frame.str.length > 1) {\n stack.push({\n node: frame.node,\n editsRemaining: frame.editsRemaining - 1,\n str: frame.str.slice(1)\n })\n }\n\n // deletion\n // just removing the last character from the str\n if (frame.str.length == 1) {\n frame.node.final = true\n }\n\n // substitution\n // can only do a substitution if we have enough edits remaining\n // and if there are characters left to substitute\n if (frame.str.length >= 1) {\n if (\"*\" in frame.node.edges) {\n var substitutionNode = frame.node.edges[\"*\"]\n } else {\n var substitutionNode = new lunr.TokenSet\n frame.node.edges[\"*\"] = substitutionNode\n }\n\n if (frame.str.length == 1) {\n substitutionNode.final = true\n }\n\n stack.push({\n node: substitutionNode,\n editsRemaining: frame.editsRemaining - 1,\n str: frame.str.slice(1)\n })\n }\n\n // transposition\n // can only do a transposition if there are edits remaining\n // and there are enough characters to transpose\n if (frame.str.length > 1) {\n var charA = frame.str.charAt(0),\n charB = frame.str.charAt(1),\n transposeNode\n\n if (charB in frame.node.edges) {\n transposeNode = frame.node.edges[charB]\n } else {\n transposeNode = new lunr.TokenSet\n frame.node.edges[charB] = transposeNode\n }\n\n if (frame.str.length == 1) {\n transposeNode.final = true\n }\n\n stack.push({\n node: transposeNode,\n editsRemaining: frame.editsRemaining - 1,\n str: charA + frame.str.slice(2)\n })\n }\n }\n\n return root\n}\n\n/**\n * Creates a TokenSet from a string.\n *\n * The string may contain one or more wildcard characters (*)\n * that will allow wildcard matching when intersecting with\n * another TokenSet.\n *\n * @param {string} str - The string to create a TokenSet from.\n * @returns {lunr.TokenSet}\n */\nlunr.TokenSet.fromString = function (str) {\n var node = new lunr.TokenSet,\n root = node\n\n /*\n * Iterates through all characters within the passed string\n * appending a node for each character.\n *\n * When a wildcard character is found then a self\n * referencing edge is introduced to continually match\n * any number of any characters.\n */\n for (var i = 0, len = str.length; i < len; i++) {\n var char = str[i],\n final = (i == len - 1)\n\n if (char == \"*\") {\n node.edges[char] = node\n node.final = final\n\n } else {\n var next = new lunr.TokenSet\n next.final = final\n\n node.edges[char] = next\n node = next\n }\n }\n\n return root\n}\n\n/**\n * Converts this TokenSet into an array of strings\n * contained within the TokenSet.\n *\n * This is not intended to be used on a TokenSet that\n * contains wildcards, in these cases the results are\n * undefined and are likely to cause an infinite loop.\n *\n * @returns {string[]}\n */\nlunr.TokenSet.prototype.toArray = function () {\n var words = []\n\n var stack = [{\n prefix: \"\",\n node: this\n }]\n\n while (stack.length) {\n var frame = stack.pop(),\n edges = Object.keys(frame.node.edges),\n len = edges.length\n\n if (frame.node.final) {\n /* In Safari, at this point the prefix is sometimes corrupted, see:\n * https://github.com/olivernn/lunr.js/issues/279 Calling any\n * String.prototype method forces Safari to \"cast\" this string to what\n * it's supposed to be, fixing the bug. */\n frame.prefix.charAt(0)\n words.push(frame.prefix)\n }\n\n for (var i = 0; i < len; i++) {\n var edge = edges[i]\n\n stack.push({\n prefix: frame.prefix.concat(edge),\n node: frame.node.edges[edge]\n })\n }\n }\n\n return words\n}\n\n/**\n * Generates a string representation of a TokenSet.\n *\n * This is intended to allow TokenSets to be used as keys\n * in objects, largely to aid the construction and minimisation\n * of a TokenSet. As such it is not designed to be a human\n * friendly representation of the TokenSet.\n *\n * @returns {string}\n */\nlunr.TokenSet.prototype.toString = function () {\n // NOTE: Using Object.keys here as this.edges is very likely\n // to enter 'hash-mode' with many keys being added\n //\n // avoiding a for-in loop here as it leads to the function\n // being de-optimised (at least in V8). From some simple\n // benchmarks the performance is comparable, but allowing\n // V8 to optimize may mean easy performance wins in the future.\n\n if (this._str) {\n return this._str\n }\n\n var str = this.final ? '1' : '0',\n labels = Object.keys(this.edges).sort(),\n len = labels.length\n\n for (var i = 0; i < len; i++) {\n var label = labels[i],\n node = this.edges[label]\n\n str = str + label + node.id\n }\n\n return str\n}\n\n/**\n * Returns a new TokenSet that is the intersection of\n * this TokenSet and the passed TokenSet.\n *\n * This intersection will take into account any wildcards\n * contained within the TokenSet.\n *\n * @param {lunr.TokenSet} b - An other TokenSet to intersect with.\n * @returns {lunr.TokenSet}\n */\nlunr.TokenSet.prototype.intersect = function (b) {\n var output = new lunr.TokenSet,\n frame = undefined\n\n var stack = [{\n qNode: b,\n output: output,\n node: this\n }]\n\n while (stack.length) {\n frame = stack.pop()\n\n // NOTE: As with the #toString method, we are using\n // Object.keys and a for loop instead of a for-in loop\n // as both of these objects enter 'hash' mode, causing\n // the function to be de-optimised in V8\n var qEdges = Object.keys(frame.qNode.edges),\n qLen = qEdges.length,\n nEdges = Object.keys(frame.node.edges),\n nLen = nEdges.length\n\n for (var q = 0; q < qLen; q++) {\n var qEdge = qEdges[q]\n\n for (var n = 0; n < nLen; n++) {\n var nEdge = nEdges[n]\n\n if (nEdge == qEdge || qEdge == '*') {\n var node = frame.node.edges[nEdge],\n qNode = frame.qNode.edges[qEdge],\n final = node.final && qNode.final,\n next = undefined\n\n if (nEdge in frame.output.edges) {\n // an edge already exists for this character\n // no need to create a new node, just set the finality\n // bit unless this node is already final\n next = frame.output.edges[nEdge]\n next.final = next.final || final\n\n } else {\n // no edge exists yet, must create one\n // set the finality bit and insert it\n // into the output\n next = new lunr.TokenSet\n next.final = final\n frame.output.edges[nEdge] = next\n }\n\n stack.push({\n qNode: qNode,\n output: next,\n node: node\n })\n }\n }\n }\n }\n\n return output\n}\nlunr.TokenSet.Builder = function () {\n this.previousWord = \"\"\n this.root = new lunr.TokenSet\n this.uncheckedNodes = []\n this.minimizedNodes = {}\n}\n\nlunr.TokenSet.Builder.prototype.insert = function (word) {\n var node,\n commonPrefix = 0\n\n if (word < this.previousWord) {\n throw new Error (\"Out of order word insertion\")\n }\n\n for (var i = 0; i < word.length && i < this.previousWord.length; i++) {\n if (word[i] != this.previousWord[i]) break\n commonPrefix++\n }\n\n this.minimize(commonPrefix)\n\n if (this.uncheckedNodes.length == 0) {\n node = this.root\n } else {\n node = this.uncheckedNodes[this.uncheckedNodes.length - 1].child\n }\n\n for (var i = commonPrefix; i < word.length; i++) {\n var nextNode = new lunr.TokenSet,\n char = word[i]\n\n node.edges[char] = nextNode\n\n this.uncheckedNodes.push({\n parent: node,\n char: char,\n child: nextNode\n })\n\n node = nextNode\n }\n\n node.final = true\n this.previousWord = word\n}\n\nlunr.TokenSet.Builder.prototype.finish = function () {\n this.minimize(0)\n}\n\nlunr.TokenSet.Builder.prototype.minimize = function (downTo) {\n for (var i = this.uncheckedNodes.length - 1; i >= downTo; i--) {\n var node = this.uncheckedNodes[i],\n childKey = node.child.toString()\n\n if (childKey in this.minimizedNodes) {\n node.parent.edges[node.char] = this.minimizedNodes[childKey]\n } else {\n // Cache the key for this node since\n // we know it can't change anymore\n node.child._str = childKey\n\n this.minimizedNodes[childKey] = node.child\n }\n\n this.uncheckedNodes.pop()\n }\n}\n/*!\n * lunr.Index\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * An index contains the built index of all documents and provides a query interface\n * to the index.\n *\n * Usually instances of lunr.Index will not be created using this constructor, instead\n * lunr.Builder should be used to construct new indexes, or lunr.Index.load should be\n * used to load previously built and serialized indexes.\n *\n * @constructor\n * @param {Object} attrs - The attributes of the built search index.\n * @param {Object} attrs.invertedIndex - An index of term/field to document reference.\n * @param {Object} attrs.fieldVectors - Field vectors\n * @param {lunr.TokenSet} attrs.tokenSet - An set of all corpus tokens.\n * @param {string[]} attrs.fields - The names of indexed document fields.\n * @param {lunr.Pipeline} attrs.pipeline - The pipeline to use for search terms.\n */\nlunr.Index = function (attrs) {\n this.invertedIndex = attrs.invertedIndex\n this.fieldVectors = attrs.fieldVectors\n this.tokenSet = attrs.tokenSet\n this.fields = attrs.fields\n this.pipeline = attrs.pipeline\n}\n\n/**\n * A result contains details of a document matching a search query.\n * @typedef {Object} lunr.Index~Result\n * @property {string} ref - The reference of the document this result represents.\n * @property {number} score - A number between 0 and 1 representing how similar this document is to the query.\n * @property {lunr.MatchData} matchData - Contains metadata about this match including which term(s) caused the match.\n */\n\n/**\n * Although lunr provides the ability to create queries using lunr.Query, it also provides a simple\n * query language which itself is parsed into an instance of lunr.Query.\n *\n * For programmatically building queries it is advised to directly use lunr.Query, the query language\n * is best used for human entered text rather than program generated text.\n *\n * At its simplest queries can just be a single term, e.g. `hello`, multiple terms are also supported\n * and will be combined with OR, e.g `hello world` will match documents that contain either 'hello'\n * or 'world', though those that contain both will rank higher in the results.\n *\n * Wildcards can be included in terms to match one or more unspecified characters, these wildcards can\n * be inserted anywhere within the term, and more than one wildcard can exist in a single term. Adding\n * wildcards will increase the number of documents that will be found but can also have a negative\n * impact on query performance, especially with wildcards at the beginning of a term.\n *\n * Terms can be restricted to specific fields, e.g. `title:hello`, only documents with the term\n * hello in the title field will match this query. Using a field not present in the index will lead\n * to an error being thrown.\n *\n * Modifiers can also be added to terms, lunr supports edit distance and boost modifiers on terms. A term\n * boost will make documents matching that term score higher, e.g. `foo^5`. Edit distance is also supported\n * to provide fuzzy matching, e.g. 'hello~2' will match documents with hello with an edit distance of 2.\n * Avoid large values for edit distance to improve query performance.\n *\n * Each term also supports a presence modifier. By default a term's presence in document is optional, however\n * this can be changed to either required or prohibited. For a term's presence to be required in a document the\n * term should be prefixed with a '+', e.g. `+foo bar` is a search for documents that must contain 'foo' and\n * optionally contain 'bar'. Conversely a leading '-' sets the terms presence to prohibited, i.e. it must not\n * appear in a document, e.g. `-foo bar` is a search for documents that do not contain 'foo' but may contain 'bar'.\n *\n * To escape special characters the backslash character '\\' can be used, this allows searches to include\n * characters that would normally be considered modifiers, e.g. `foo\\~2` will search for a term \"foo~2\" instead\n * of attempting to apply a boost of 2 to the search term \"foo\".\n *\n * @typedef {string} lunr.Index~QueryString\n * @example Simple single term query\n * hello\n * @example Multiple term query\n * hello world\n * @example term scoped to a field\n * title:hello\n * @example term with a boost of 10\n * hello^10\n * @example term with an edit distance of 2\n * hello~2\n * @example terms with presence modifiers\n * -foo +bar baz\n */\n\n/**\n * Performs a search against the index using lunr query syntax.\n *\n * Results will be returned sorted by their score, the most relevant results\n * will be returned first. For details on how the score is calculated, please see\n * the {@link https://lunrjs.com/guides/searching.html#scoring|guide}.\n *\n * For more programmatic querying use lunr.Index#query.\n *\n * @param {lunr.Index~QueryString} queryString - A string containing a lunr query.\n * @throws {lunr.QueryParseError} If the passed query string cannot be parsed.\n * @returns {lunr.Index~Result[]}\n */\nlunr.Index.prototype.search = function (queryString) {\n return this.query(function (query) {\n var parser = new lunr.QueryParser(queryString, query)\n parser.parse()\n })\n}\n\n/**\n * A query builder callback provides a query object to be used to express\n * the query to perform on the index.\n *\n * @callback lunr.Index~queryBuilder\n * @param {lunr.Query} query - The query object to build up.\n * @this lunr.Query\n */\n\n/**\n * Performs a query against the index using the yielded lunr.Query object.\n *\n * If performing programmatic queries against the index, this method is preferred\n * over lunr.Index#search so as to avoid the additional query parsing overhead.\n *\n * A query object is yielded to the supplied function which should be used to\n * express the query to be run against the index.\n *\n * Note that although this function takes a callback parameter it is _not_ an\n * asynchronous operation, the callback is just yielded a query object to be\n * customized.\n *\n * @param {lunr.Index~queryBuilder} fn - A function that is used to build the query.\n * @returns {lunr.Index~Result[]}\n */\nlunr.Index.prototype.query = function (fn) {\n // for each query clause\n // * process terms\n // * expand terms from token set\n // * find matching documents and metadata\n // * get document vectors\n // * score documents\n\n var query = new lunr.Query(this.fields),\n matchingFields = Object.create(null),\n queryVectors = Object.create(null),\n termFieldCache = Object.create(null),\n requiredMatches = Object.create(null),\n prohibitedMatches = Object.create(null)\n\n /*\n * To support field level boosts a query vector is created per\n * field. An empty vector is eagerly created to support negated\n * queries.\n */\n for (var i = 0; i < this.fields.length; i++) {\n queryVectors[this.fields[i]] = new lunr.Vector\n }\n\n fn.call(query, query)\n\n for (var i = 0; i < query.clauses.length; i++) {\n /*\n * Unless the pipeline has been disabled for this term, which is\n * the case for terms with wildcards, we need to pass the clause\n * term through the search pipeline. A pipeline returns an array\n * of processed terms. Pipeline functions may expand the passed\n * term, which means we may end up performing multiple index lookups\n * for a single query term.\n */\n var clause = query.clauses[i],\n terms = null,\n clauseMatches = lunr.Set.complete\n\n if (clause.usePipeline) {\n terms = this.pipeline.runString(clause.term, {\n fields: clause.fields\n })\n } else {\n terms = [clause.term]\n }\n\n for (var m = 0; m < terms.length; m++) {\n var term = terms[m]\n\n /*\n * Each term returned from the pipeline needs to use the same query\n * clause object, e.g. the same boost and or edit distance. The\n * simplest way to do this is to re-use the clause object but mutate\n * its term property.\n */\n clause.term = term\n\n /*\n * From the term in the clause we create a token set which will then\n * be used to intersect the indexes token set to get a list of terms\n * to lookup in the inverted index\n */\n var termTokenSet = lunr.TokenSet.fromClause(clause),\n expandedTerms = this.tokenSet.intersect(termTokenSet).toArray()\n\n /*\n * If a term marked as required does not exist in the tokenSet it is\n * impossible for the search to return any matches. We set all the field\n * scoped required matches set to empty and stop examining any further\n * clauses.\n */\n if (expandedTerms.length === 0 && clause.presence === lunr.Query.presence.REQUIRED) {\n for (var k = 0; k < clause.fields.length; k++) {\n var field = clause.fields[k]\n requiredMatches[field] = lunr.Set.empty\n }\n\n break\n }\n\n for (var j = 0; j < expandedTerms.length; j++) {\n /*\n * For each term get the posting and termIndex, this is required for\n * building the query vector.\n */\n var expandedTerm = expandedTerms[j],\n posting = this.invertedIndex[expandedTerm],\n termIndex = posting._index\n\n for (var k = 0; k < clause.fields.length; k++) {\n /*\n * For each field that this query term is scoped by (by default\n * all fields are in scope) we need to get all the document refs\n * that have this term in that field.\n *\n * The posting is the entry in the invertedIndex for the matching\n * term from above.\n */\n var field = clause.fields[k],\n fieldPosting = posting[field],\n matchingDocumentRefs = Object.keys(fieldPosting),\n termField = expandedTerm + \"/\" + field,\n matchingDocumentsSet = new lunr.Set(matchingDocumentRefs)\n\n /*\n * if the presence of this term is required ensure that the matching\n * documents are added to the set of required matches for this clause.\n *\n */\n if (clause.presence == lunr.Query.presence.REQUIRED) {\n clauseMatches = clauseMatches.union(matchingDocumentsSet)\n\n if (requiredMatches[field] === undefined) {\n requiredMatches[field] = lunr.Set.complete\n }\n }\n\n /*\n * if the presence of this term is prohibited ensure that the matching\n * documents are added to the set of prohibited matches for this field,\n * creating that set if it does not yet exist.\n */\n if (clause.presence == lunr.Query.presence.PROHIBITED) {\n if (prohibitedMatches[field] === undefined) {\n prohibitedMatches[field] = lunr.Set.empty\n }\n\n prohibitedMatches[field] = prohibitedMatches[field].union(matchingDocumentsSet)\n\n /*\n * Prohibited matches should not be part of the query vector used for\n * similarity scoring and no metadata should be extracted so we continue\n * to the next field\n */\n continue\n }\n\n /*\n * The query field vector is populated using the termIndex found for\n * the term and a unit value with the appropriate boost applied.\n * Using upsert because there could already be an entry in the vector\n * for the term we are working with. In that case we just add the scores\n * together.\n */\n queryVectors[field].upsert(termIndex, clause.boost, function (a, b) { return a + b })\n\n /**\n * If we've already seen this term, field combo then we've already collected\n * the matching documents and metadata, no need to go through all that again\n */\n if (termFieldCache[termField]) {\n continue\n }\n\n for (var l = 0; l < matchingDocumentRefs.length; l++) {\n /*\n * All metadata for this term/field/document triple\n * are then extracted and collected into an instance\n * of lunr.MatchData ready to be returned in the query\n * results\n */\n var matchingDocumentRef = matchingDocumentRefs[l],\n matchingFieldRef = new lunr.FieldRef (matchingDocumentRef, field),\n metadata = fieldPosting[matchingDocumentRef],\n fieldMatch\n\n if ((fieldMatch = matchingFields[matchingFieldRef]) === undefined) {\n matchingFields[matchingFieldRef] = new lunr.MatchData (expandedTerm, field, metadata)\n } else {\n fieldMatch.add(expandedTerm, field, metadata)\n }\n\n }\n\n termFieldCache[termField] = true\n }\n }\n }\n\n /**\n * If the presence was required we need to update the requiredMatches field sets.\n * We do this after all fields for the term have collected their matches because\n * the clause terms presence is required in _any_ of the fields not _all_ of the\n * fields.\n */\n if (clause.presence === lunr.Query.presence.REQUIRED) {\n for (var k = 0; k < clause.fields.length; k++) {\n var field = clause.fields[k]\n requiredMatches[field] = requiredMatches[field].intersect(clauseMatches)\n }\n }\n }\n\n /**\n * Need to combine the field scoped required and prohibited\n * matching documents into a global set of required and prohibited\n * matches\n */\n var allRequiredMatches = lunr.Set.complete,\n allProhibitedMatches = lunr.Set.empty\n\n for (var i = 0; i < this.fields.length; i++) {\n var field = this.fields[i]\n\n if (requiredMatches[field]) {\n allRequiredMatches = allRequiredMatches.intersect(requiredMatches[field])\n }\n\n if (prohibitedMatches[field]) {\n allProhibitedMatches = allProhibitedMatches.union(prohibitedMatches[field])\n }\n }\n\n var matchingFieldRefs = Object.keys(matchingFields),\n results = [],\n matches = Object.create(null)\n\n /*\n * If the query is negated (contains only prohibited terms)\n * we need to get _all_ fieldRefs currently existing in the\n * index. This is only done when we know that the query is\n * entirely prohibited terms to avoid any cost of getting all\n * fieldRefs unnecessarily.\n *\n * Additionally, blank MatchData must be created to correctly\n * populate the results.\n */\n if (query.isNegated()) {\n matchingFieldRefs = Object.keys(this.fieldVectors)\n\n for (var i = 0; i < matchingFieldRefs.length; i++) {\n var matchingFieldRef = matchingFieldRefs[i]\n var fieldRef = lunr.FieldRef.fromString(matchingFieldRef)\n matchingFields[matchingFieldRef] = new lunr.MatchData\n }\n }\n\n for (var i = 0; i < matchingFieldRefs.length; i++) {\n /*\n * Currently we have document fields that match the query, but we\n * need to return documents. The matchData and scores are combined\n * from multiple fields belonging to the same document.\n *\n * Scores are calculated by field, using the query vectors created\n * above, and combined into a final document score using addition.\n */\n var fieldRef = lunr.FieldRef.fromString(matchingFieldRefs[i]),\n docRef = fieldRef.docRef\n\n if (!allRequiredMatches.contains(docRef)) {\n continue\n }\n\n if (allProhibitedMatches.contains(docRef)) {\n continue\n }\n\n var fieldVector = this.fieldVectors[fieldRef],\n score = queryVectors[fieldRef.fieldName].similarity(fieldVector),\n docMatch\n\n if ((docMatch = matches[docRef]) !== undefined) {\n docMatch.score += score\n docMatch.matchData.combine(matchingFields[fieldRef])\n } else {\n var match = {\n ref: docRef,\n score: score,\n matchData: matchingFields[fieldRef]\n }\n matches[docRef] = match\n results.push(match)\n }\n }\n\n /*\n * Sort the results objects by score, highest first.\n */\n return results.sort(function (a, b) {\n return b.score - a.score\n })\n}\n\n/**\n * Prepares the index for JSON serialization.\n *\n * The schema for this JSON blob will be described in a\n * separate JSON schema file.\n *\n * @returns {Object}\n */\nlunr.Index.prototype.toJSON = function () {\n var invertedIndex = Object.keys(this.invertedIndex)\n .sort()\n .map(function (term) {\n return [term, this.invertedIndex[term]]\n }, this)\n\n var fieldVectors = Object.keys(this.fieldVectors)\n .map(function (ref) {\n return [ref, this.fieldVectors[ref].toJSON()]\n }, this)\n\n return {\n version: lunr.version,\n fields: this.fields,\n fieldVectors: fieldVectors,\n invertedIndex: invertedIndex,\n pipeline: this.pipeline.toJSON()\n }\n}\n\n/**\n * Loads a previously serialized lunr.Index\n *\n * @param {Object} serializedIndex - A previously serialized lunr.Index\n * @returns {lunr.Index}\n */\nlunr.Index.load = function (serializedIndex) {\n var attrs = {},\n fieldVectors = {},\n serializedVectors = serializedIndex.fieldVectors,\n invertedIndex = Object.create(null),\n serializedInvertedIndex = serializedIndex.invertedIndex,\n tokenSetBuilder = new lunr.TokenSet.Builder,\n pipeline = lunr.Pipeline.load(serializedIndex.pipeline)\n\n if (serializedIndex.version != lunr.version) {\n lunr.utils.warn(\"Version mismatch when loading serialised index. Current version of lunr '\" + lunr.version + \"' does not match serialized index '\" + serializedIndex.version + \"'\")\n }\n\n for (var i = 0; i < serializedVectors.length; i++) {\n var tuple = serializedVectors[i],\n ref = tuple[0],\n elements = tuple[1]\n\n fieldVectors[ref] = new lunr.Vector(elements)\n }\n\n for (var i = 0; i < serializedInvertedIndex.length; i++) {\n var tuple = serializedInvertedIndex[i],\n term = tuple[0],\n posting = tuple[1]\n\n tokenSetBuilder.insert(term)\n invertedIndex[term] = posting\n }\n\n tokenSetBuilder.finish()\n\n attrs.fields = serializedIndex.fields\n\n attrs.fieldVectors = fieldVectors\n attrs.invertedIndex = invertedIndex\n attrs.tokenSet = tokenSetBuilder.root\n attrs.pipeline = pipeline\n\n return new lunr.Index(attrs)\n}\n/*!\n * lunr.Builder\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * lunr.Builder performs indexing on a set of documents and\n * returns instances of lunr.Index ready for querying.\n *\n * All configuration of the index is done via the builder, the\n * fields to index, the document reference, the text processing\n * pipeline and document scoring parameters are all set on the\n * builder before indexing.\n *\n * @constructor\n * @property {string} _ref - Internal reference to the document reference field.\n * @property {string[]} _fields - Internal reference to the document fields to index.\n * @property {object} invertedIndex - The inverted index maps terms to document fields.\n * @property {object} documentTermFrequencies - Keeps track of document term frequencies.\n * @property {object} documentLengths - Keeps track of the length of documents added to the index.\n * @property {lunr.tokenizer} tokenizer - Function for splitting strings into tokens for indexing.\n * @property {lunr.Pipeline} pipeline - The pipeline performs text processing on tokens before indexing.\n * @property {lunr.Pipeline} searchPipeline - A pipeline for processing search terms before querying the index.\n * @property {number} documentCount - Keeps track of the total number of documents indexed.\n * @property {number} _b - A parameter to control field length normalization, setting this to 0 disabled normalization, 1 fully normalizes field lengths, the default value is 0.75.\n * @property {number} _k1 - A parameter to control how quickly an increase in term frequency results in term frequency saturation, the default value is 1.2.\n * @property {number} termIndex - A counter incremented for each unique term, used to identify a terms position in the vector space.\n * @property {array} metadataWhitelist - A list of metadata keys that have been whitelisted for entry in the index.\n */\nlunr.Builder = function () {\n this._ref = \"id\"\n this._fields = Object.create(null)\n this._documents = Object.create(null)\n this.invertedIndex = Object.create(null)\n this.fieldTermFrequencies = {}\n this.fieldLengths = {}\n this.tokenizer = lunr.tokenizer\n this.pipeline = new lunr.Pipeline\n this.searchPipeline = new lunr.Pipeline\n this.documentCount = 0\n this._b = 0.75\n this._k1 = 1.2\n this.termIndex = 0\n this.metadataWhitelist = []\n}\n\n/**\n * Sets the document field used as the document reference. Every document must have this field.\n * The type of this field in the document should be a string, if it is not a string it will be\n * coerced into a string by calling toString.\n *\n * The default ref is 'id'.\n *\n * The ref should _not_ be changed during indexing, it should be set before any documents are\n * added to the index. Changing it during indexing can lead to inconsistent results.\n *\n * @param {string} ref - The name of the reference field in the document.\n */\nlunr.Builder.prototype.ref = function (ref) {\n this._ref = ref\n}\n\n/**\n * A function that is used to extract a field from a document.\n *\n * Lunr expects a field to be at the top level of a document, if however the field\n * is deeply nested within a document an extractor function can be used to extract\n * the right field for indexing.\n *\n * @callback fieldExtractor\n * @param {object} doc - The document being added to the index.\n * @returns {?(string|object|object[])} obj - The object that will be indexed for this field.\n * @example Extracting a nested field\n * function (doc) { return doc.nested.field }\n */\n\n/**\n * Adds a field to the list of document fields that will be indexed. Every document being\n * indexed should have this field. Null values for this field in indexed documents will\n * not cause errors but will limit the chance of that document being retrieved by searches.\n *\n * All fields should be added before adding documents to the index. Adding fields after\n * a document has been indexed will have no effect on already indexed documents.\n *\n * Fields can be boosted at build time. This allows terms within that field to have more\n * importance when ranking search results. Use a field boost to specify that matches within\n * one field are more important than other fields.\n *\n * @param {string} fieldName - The name of a field to index in all documents.\n * @param {object} attributes - Optional attributes associated with this field.\n * @param {number} [attributes.boost=1] - Boost applied to all terms within this field.\n * @param {fieldExtractor} [attributes.extractor] - Function to extract a field from a document.\n * @throws {RangeError} fieldName cannot contain unsupported characters '/'\n */\nlunr.Builder.prototype.field = function (fieldName, attributes) {\n if (/\\//.test(fieldName)) {\n throw new RangeError (\"Field '\" + fieldName + \"' contains illegal character '/'\")\n }\n\n this._fields[fieldName] = attributes || {}\n}\n\n/**\n * A parameter to tune the amount of field length normalisation that is applied when\n * calculating relevance scores. A value of 0 will completely disable any normalisation\n * and a value of 1 will fully normalise field lengths. The default is 0.75. Values of b\n * will be clamped to the range 0 - 1.\n *\n * @param {number} number - The value to set for this tuning parameter.\n */\nlunr.Builder.prototype.b = function (number) {\n if (number < 0) {\n this._b = 0\n } else if (number > 1) {\n this._b = 1\n } else {\n this._b = number\n }\n}\n\n/**\n * A parameter that controls the speed at which a rise in term frequency results in term\n * frequency saturation. The default value is 1.2. Setting this to a higher value will give\n * slower saturation levels, a lower value will result in quicker saturation.\n *\n * @param {number} number - The value to set for this tuning parameter.\n */\nlunr.Builder.prototype.k1 = function (number) {\n this._k1 = number\n}\n\n/**\n * Adds a document to the index.\n *\n * Before adding fields to the index the index should have been fully setup, with the document\n * ref and all fields to index already having been specified.\n *\n * The document must have a field name as specified by the ref (by default this is 'id') and\n * it should have all fields defined for indexing, though null or undefined values will not\n * cause errors.\n *\n * Entire documents can be boosted at build time. Applying a boost to a document indicates that\n * this document should rank higher in search results than other documents.\n *\n * @param {object} doc - The document to add to the index.\n * @param {object} attributes - Optional attributes associated with this document.\n * @param {number} [attributes.boost=1] - Boost applied to all terms within this document.\n */\nlunr.Builder.prototype.add = function (doc, attributes) {\n var docRef = doc[this._ref],\n fields = Object.keys(this._fields)\n\n this._documents[docRef] = attributes || {}\n this.documentCount += 1\n\n for (var i = 0; i < fields.length; i++) {\n var fieldName = fields[i],\n extractor = this._fields[fieldName].extractor,\n field = extractor ? extractor(doc) : doc[fieldName],\n tokens = this.tokenizer(field, {\n fields: [fieldName]\n }),\n terms = this.pipeline.run(tokens),\n fieldRef = new lunr.FieldRef (docRef, fieldName),\n fieldTerms = Object.create(null)\n\n this.fieldTermFrequencies[fieldRef] = fieldTerms\n this.fieldLengths[fieldRef] = 0\n\n // store the length of this field for this document\n this.fieldLengths[fieldRef] += terms.length\n\n // calculate term frequencies for this field\n for (var j = 0; j < terms.length; j++) {\n var term = terms[j]\n\n if (fieldTerms[term] == undefined) {\n fieldTerms[term] = 0\n }\n\n fieldTerms[term] += 1\n\n // add to inverted index\n // create an initial posting if one doesn't exist\n if (this.invertedIndex[term] == undefined) {\n var posting = Object.create(null)\n posting[\"_index\"] = this.termIndex\n this.termIndex += 1\n\n for (var k = 0; k < fields.length; k++) {\n posting[fields[k]] = Object.create(null)\n }\n\n this.invertedIndex[term] = posting\n }\n\n // add an entry for this term/fieldName/docRef to the invertedIndex\n if (this.invertedIndex[term][fieldName][docRef] == undefined) {\n this.invertedIndex[term][fieldName][docRef] = Object.create(null)\n }\n\n // store all whitelisted metadata about this token in the\n // inverted index\n for (var l = 0; l < this.metadataWhitelist.length; l++) {\n var metadataKey = this.metadataWhitelist[l],\n metadata = term.metadata[metadataKey]\n\n if (this.invertedIndex[term][fieldName][docRef][metadataKey] == undefined) {\n this.invertedIndex[term][fieldName][docRef][metadataKey] = []\n }\n\n this.invertedIndex[term][fieldName][docRef][metadataKey].push(metadata)\n }\n }\n\n }\n}\n\n/**\n * Calculates the average document length for this index\n *\n * @private\n */\nlunr.Builder.prototype.calculateAverageFieldLengths = function () {\n\n var fieldRefs = Object.keys(this.fieldLengths),\n numberOfFields = fieldRefs.length,\n accumulator = {},\n documentsWithField = {}\n\n for (var i = 0; i < numberOfFields; i++) {\n var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]),\n field = fieldRef.fieldName\n\n documentsWithField[field] || (documentsWithField[field] = 0)\n documentsWithField[field] += 1\n\n accumulator[field] || (accumulator[field] = 0)\n accumulator[field] += this.fieldLengths[fieldRef]\n }\n\n var fields = Object.keys(this._fields)\n\n for (var i = 0; i < fields.length; i++) {\n var fieldName = fields[i]\n accumulator[fieldName] = accumulator[fieldName] / documentsWithField[fieldName]\n }\n\n this.averageFieldLength = accumulator\n}\n\n/**\n * Builds a vector space model of every document using lunr.Vector\n *\n * @private\n */\nlunr.Builder.prototype.createFieldVectors = function () {\n var fieldVectors = {},\n fieldRefs = Object.keys(this.fieldTermFrequencies),\n fieldRefsLength = fieldRefs.length,\n termIdfCache = Object.create(null)\n\n for (var i = 0; i < fieldRefsLength; i++) {\n var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]),\n fieldName = fieldRef.fieldName,\n fieldLength = this.fieldLengths[fieldRef],\n fieldVector = new lunr.Vector,\n termFrequencies = this.fieldTermFrequencies[fieldRef],\n terms = Object.keys(termFrequencies),\n termsLength = terms.length\n\n\n var fieldBoost = this._fields[fieldName].boost || 1,\n docBoost = this._documents[fieldRef.docRef].boost || 1\n\n for (var j = 0; j < termsLength; j++) {\n var term = terms[j],\n tf = termFrequencies[term],\n termIndex = this.invertedIndex[term]._index,\n idf, score, scoreWithPrecision\n\n if (termIdfCache[term] === undefined) {\n idf = lunr.idf(this.invertedIndex[term], this.documentCount)\n termIdfCache[term] = idf\n } else {\n idf = termIdfCache[term]\n }\n\n score = idf * ((this._k1 + 1) * tf) / (this._k1 * (1 - this._b + this._b * (fieldLength / this.averageFieldLength[fieldName])) + tf)\n score *= fieldBoost\n score *= docBoost\n scoreWithPrecision = Math.round(score * 1000) / 1000\n // Converts 1.23456789 to 1.234.\n // Reducing the precision so that the vectors take up less\n // space when serialised. Doing it now so that they behave\n // the same before and after serialisation. Also, this is\n // the fastest approach to reducing a number's precision in\n // JavaScript.\n\n fieldVector.insert(termIndex, scoreWithPrecision)\n }\n\n fieldVectors[fieldRef] = fieldVector\n }\n\n this.fieldVectors = fieldVectors\n}\n\n/**\n * Creates a token set of all tokens in the index using lunr.TokenSet\n *\n * @private\n */\nlunr.Builder.prototype.createTokenSet = function () {\n this.tokenSet = lunr.TokenSet.fromArray(\n Object.keys(this.invertedIndex).sort()\n )\n}\n\n/**\n * Builds the index, creating an instance of lunr.Index.\n *\n * This completes the indexing process and should only be called\n * once all documents have been added to the index.\n *\n * @returns {lunr.Index}\n */\nlunr.Builder.prototype.build = function () {\n this.calculateAverageFieldLengths()\n this.createFieldVectors()\n this.createTokenSet()\n\n return new lunr.Index({\n invertedIndex: this.invertedIndex,\n fieldVectors: this.fieldVectors,\n tokenSet: this.tokenSet,\n fields: Object.keys(this._fields),\n pipeline: this.searchPipeline\n })\n}\n\n/**\n * Applies a plugin to the index builder.\n *\n * A plugin is a function that is called with the index builder as its context.\n * Plugins can be used to customise or extend the behaviour of the index\n * in some way. A plugin is just a function, that encapsulated the custom\n * behaviour that should be applied when building the index.\n *\n * The plugin function will be called with the index builder as its argument, additional\n * arguments can also be passed when calling use. The function will be called\n * with the index builder as its context.\n *\n * @param {Function} plugin The plugin to apply.\n */\nlunr.Builder.prototype.use = function (fn) {\n var args = Array.prototype.slice.call(arguments, 1)\n args.unshift(this)\n fn.apply(this, args)\n}\n/**\n * Contains and collects metadata about a matching document.\n * A single instance of lunr.MatchData is returned as part of every\n * lunr.Index~Result.\n *\n * @constructor\n * @param {string} term - The term this match data is associated with\n * @param {string} field - The field in which the term was found\n * @param {object} metadata - The metadata recorded about this term in this field\n * @property {object} metadata - A cloned collection of metadata associated with this document.\n * @see {@link lunr.Index~Result}\n */\nlunr.MatchData = function (term, field, metadata) {\n var clonedMetadata = Object.create(null),\n metadataKeys = Object.keys(metadata || {})\n\n // Cloning the metadata to prevent the original\n // being mutated during match data combination.\n // Metadata is kept in an array within the inverted\n // index so cloning the data can be done with\n // Array#slice\n for (var i = 0; i < metadataKeys.length; i++) {\n var key = metadataKeys[i]\n clonedMetadata[key] = metadata[key].slice()\n }\n\n this.metadata = Object.create(null)\n\n if (term !== undefined) {\n this.metadata[term] = Object.create(null)\n this.metadata[term][field] = clonedMetadata\n }\n}\n\n/**\n * An instance of lunr.MatchData will be created for every term that matches a\n * document. However only one instance is required in a lunr.Index~Result. This\n * method combines metadata from another instance of lunr.MatchData with this\n * objects metadata.\n *\n * @param {lunr.MatchData} otherMatchData - Another instance of match data to merge with this one.\n * @see {@link lunr.Index~Result}\n */\nlunr.MatchData.prototype.combine = function (otherMatchData) {\n var terms = Object.keys(otherMatchData.metadata)\n\n for (var i = 0; i < terms.length; i++) {\n var term = terms[i],\n fields = Object.keys(otherMatchData.metadata[term])\n\n if (this.metadata[term] == undefined) {\n this.metadata[term] = Object.create(null)\n }\n\n for (var j = 0; j < fields.length; j++) {\n var field = fields[j],\n keys = Object.keys(otherMatchData.metadata[term][field])\n\n if (this.metadata[term][field] == undefined) {\n this.metadata[term][field] = Object.create(null)\n }\n\n for (var k = 0; k < keys.length; k++) {\n var key = keys[k]\n\n if (this.metadata[term][field][key] == undefined) {\n this.metadata[term][field][key] = otherMatchData.metadata[term][field][key]\n } else {\n this.metadata[term][field][key] = this.metadata[term][field][key].concat(otherMatchData.metadata[term][field][key])\n }\n\n }\n }\n }\n}\n\n/**\n * Add metadata for a term/field pair to this instance of match data.\n *\n * @param {string} term - The term this match data is associated with\n * @param {string} field - The field in which the term was found\n * @param {object} metadata - The metadata recorded about this term in this field\n */\nlunr.MatchData.prototype.add = function (term, field, metadata) {\n if (!(term in this.metadata)) {\n this.metadata[term] = Object.create(null)\n this.metadata[term][field] = metadata\n return\n }\n\n if (!(field in this.metadata[term])) {\n this.metadata[term][field] = metadata\n return\n }\n\n var metadataKeys = Object.keys(metadata)\n\n for (var i = 0; i < metadataKeys.length; i++) {\n var key = metadataKeys[i]\n\n if (key in this.metadata[term][field]) {\n this.metadata[term][field][key] = this.metadata[term][field][key].concat(metadata[key])\n } else {\n this.metadata[term][field][key] = metadata[key]\n }\n }\n}\n/**\n * A lunr.Query provides a programmatic way of defining queries to be performed\n * against a {@link lunr.Index}.\n *\n * Prefer constructing a lunr.Query using the {@link lunr.Index#query} method\n * so the query object is pre-initialized with the right index fields.\n *\n * @constructor\n * @property {lunr.Query~Clause[]} clauses - An array of query clauses.\n * @property {string[]} allFields - An array of all available fields in a lunr.Index.\n */\nlunr.Query = function (allFields) {\n this.clauses = []\n this.allFields = allFields\n}\n\n/**\n * Constants for indicating what kind of automatic wildcard insertion will be used when constructing a query clause.\n *\n * This allows wildcards to be added to the beginning and end of a term without having to manually do any string\n * concatenation.\n *\n * The wildcard constants can be bitwise combined to select both leading and trailing wildcards.\n *\n * @constant\n * @default\n * @property {number} wildcard.NONE - The term will have no wildcards inserted, this is the default behaviour\n * @property {number} wildcard.LEADING - Prepend the term with a wildcard, unless a leading wildcard already exists\n * @property {number} wildcard.TRAILING - Append a wildcard to the term, unless a trailing wildcard already exists\n * @see lunr.Query~Clause\n * @see lunr.Query#clause\n * @see lunr.Query#term\n * @example query term with trailing wildcard\n * query.term('foo', { wildcard: lunr.Query.wildcard.TRAILING })\n * @example query term with leading and trailing wildcard\n * query.term('foo', {\n * wildcard: lunr.Query.wildcard.LEADING | lunr.Query.wildcard.TRAILING\n * })\n */\n\nlunr.Query.wildcard = new String (\"*\")\nlunr.Query.wildcard.NONE = 0\nlunr.Query.wildcard.LEADING = 1\nlunr.Query.wildcard.TRAILING = 2\n\n/**\n * Constants for indicating what kind of presence a term must have in matching documents.\n *\n * @constant\n * @enum {number}\n * @see lunr.Query~Clause\n * @see lunr.Query#clause\n * @see lunr.Query#term\n * @example query term with required presence\n * query.term('foo', { presence: lunr.Query.presence.REQUIRED })\n */\nlunr.Query.presence = {\n /**\n * Term's presence in a document is optional, this is the default value.\n */\n OPTIONAL: 1,\n\n /**\n * Term's presence in a document is required, documents that do not contain\n * this term will not be returned.\n */\n REQUIRED: 2,\n\n /**\n * Term's presence in a document is prohibited, documents that do contain\n * this term will not be returned.\n */\n PROHIBITED: 3\n}\n\n/**\n * A single clause in a {@link lunr.Query} contains a term and details on how to\n * match that term against a {@link lunr.Index}.\n *\n * @typedef {Object} lunr.Query~Clause\n * @property {string[]} fields - The fields in an index this clause should be matched against.\n * @property {number} [boost=1] - Any boost that should be applied when matching this clause.\n * @property {number} [editDistance] - Whether the term should have fuzzy matching applied, and how fuzzy the match should be.\n * @property {boolean} [usePipeline] - Whether the term should be passed through the search pipeline.\n * @property {number} [wildcard=lunr.Query.wildcard.NONE] - Whether the term should have wildcards appended or prepended.\n * @property {number} [presence=lunr.Query.presence.OPTIONAL] - The terms presence in any matching documents.\n */\n\n/**\n * Adds a {@link lunr.Query~Clause} to this query.\n *\n * Unless the clause contains the fields to be matched all fields will be matched. In addition\n * a default boost of 1 is applied to the clause.\n *\n * @param {lunr.Query~Clause} clause - The clause to add to this query.\n * @see lunr.Query~Clause\n * @returns {lunr.Query}\n */\nlunr.Query.prototype.clause = function (clause) {\n if (!('fields' in clause)) {\n clause.fields = this.allFields\n }\n\n if (!('boost' in clause)) {\n clause.boost = 1\n }\n\n if (!('usePipeline' in clause)) {\n clause.usePipeline = true\n }\n\n if (!('wildcard' in clause)) {\n clause.wildcard = lunr.Query.wildcard.NONE\n }\n\n if ((clause.wildcard & lunr.Query.wildcard.LEADING) && (clause.term.charAt(0) != lunr.Query.wildcard)) {\n clause.term = \"*\" + clause.term\n }\n\n if ((clause.wildcard & lunr.Query.wildcard.TRAILING) && (clause.term.slice(-1) != lunr.Query.wildcard)) {\n clause.term = \"\" + clause.term + \"*\"\n }\n\n if (!('presence' in clause)) {\n clause.presence = lunr.Query.presence.OPTIONAL\n }\n\n this.clauses.push(clause)\n\n return this\n}\n\n/**\n * A negated query is one in which every clause has a presence of\n * prohibited. These queries require some special processing to return\n * the expected results.\n *\n * @returns boolean\n */\nlunr.Query.prototype.isNegated = function () {\n for (var i = 0; i < this.clauses.length; i++) {\n if (this.clauses[i].presence != lunr.Query.presence.PROHIBITED) {\n return false\n }\n }\n\n return true\n}\n\n/**\n * Adds a term to the current query, under the covers this will create a {@link lunr.Query~Clause}\n * to the list of clauses that make up this query.\n *\n * The term is used as is, i.e. no tokenization will be performed by this method. Instead conversion\n * to a token or token-like string should be done before calling this method.\n *\n * The term will be converted to a string by calling `toString`. Multiple terms can be passed as an\n * array, each term in the array will share the same options.\n *\n * @param {object|object[]} term - The term(s) to add to the query.\n * @param {object} [options] - Any additional properties to add to the query clause.\n * @returns {lunr.Query}\n * @see lunr.Query#clause\n * @see lunr.Query~Clause\n * @example adding a single term to a query\n * query.term(\"foo\")\n * @example adding a single term to a query and specifying search fields, term boost and automatic trailing wildcard\n * query.term(\"foo\", {\n * fields: [\"title\"],\n * boost: 10,\n * wildcard: lunr.Query.wildcard.TRAILING\n * })\n * @example using lunr.tokenizer to convert a string to tokens before using them as terms\n * query.term(lunr.tokenizer(\"foo bar\"))\n */\nlunr.Query.prototype.term = function (term, options) {\n if (Array.isArray(term)) {\n term.forEach(function (t) { this.term(t, lunr.utils.clone(options)) }, this)\n return this\n }\n\n var clause = options || {}\n clause.term = term.toString()\n\n this.clause(clause)\n\n return this\n}\nlunr.QueryParseError = function (message, start, end) {\n this.name = \"QueryParseError\"\n this.message = message\n this.start = start\n this.end = end\n}\n\nlunr.QueryParseError.prototype = new Error\nlunr.QueryLexer = function (str) {\n this.lexemes = []\n this.str = str\n this.length = str.length\n this.pos = 0\n this.start = 0\n this.escapeCharPositions = []\n}\n\nlunr.QueryLexer.prototype.run = function () {\n var state = lunr.QueryLexer.lexText\n\n while (state) {\n state = state(this)\n }\n}\n\nlunr.QueryLexer.prototype.sliceString = function () {\n var subSlices = [],\n sliceStart = this.start,\n sliceEnd = this.pos\n\n for (var i = 0; i < this.escapeCharPositions.length; i++) {\n sliceEnd = this.escapeCharPositions[i]\n subSlices.push(this.str.slice(sliceStart, sliceEnd))\n sliceStart = sliceEnd + 1\n }\n\n subSlices.push(this.str.slice(sliceStart, this.pos))\n this.escapeCharPositions.length = 0\n\n return subSlices.join('')\n}\n\nlunr.QueryLexer.prototype.emit = function (type) {\n this.lexemes.push({\n type: type,\n str: this.sliceString(),\n start: this.start,\n end: this.pos\n })\n\n this.start = this.pos\n}\n\nlunr.QueryLexer.prototype.escapeCharacter = function () {\n this.escapeCharPositions.push(this.pos - 1)\n this.pos += 1\n}\n\nlunr.QueryLexer.prototype.next = function () {\n if (this.pos >= this.length) {\n return lunr.QueryLexer.EOS\n }\n\n var char = this.str.charAt(this.pos)\n this.pos += 1\n return char\n}\n\nlunr.QueryLexer.prototype.width = function () {\n return this.pos - this.start\n}\n\nlunr.QueryLexer.prototype.ignore = function () {\n if (this.start == this.pos) {\n this.pos += 1\n }\n\n this.start = this.pos\n}\n\nlunr.QueryLexer.prototype.backup = function () {\n this.pos -= 1\n}\n\nlunr.QueryLexer.prototype.acceptDigitRun = function () {\n var char, charCode\n\n do {\n char = this.next()\n charCode = char.charCodeAt(0)\n } while (charCode > 47 && charCode < 58)\n\n if (char != lunr.QueryLexer.EOS) {\n this.backup()\n }\n}\n\nlunr.QueryLexer.prototype.more = function () {\n return this.pos < this.length\n}\n\nlunr.QueryLexer.EOS = 'EOS'\nlunr.QueryLexer.FIELD = 'FIELD'\nlunr.QueryLexer.TERM = 'TERM'\nlunr.QueryLexer.EDIT_DISTANCE = 'EDIT_DISTANCE'\nlunr.QueryLexer.BOOST = 'BOOST'\nlunr.QueryLexer.PRESENCE = 'PRESENCE'\n\nlunr.QueryLexer.lexField = function (lexer) {\n lexer.backup()\n lexer.emit(lunr.QueryLexer.FIELD)\n lexer.ignore()\n return lunr.QueryLexer.lexText\n}\n\nlunr.QueryLexer.lexTerm = function (lexer) {\n if (lexer.width() > 1) {\n lexer.backup()\n lexer.emit(lunr.QueryLexer.TERM)\n }\n\n lexer.ignore()\n\n if (lexer.more()) {\n return lunr.QueryLexer.lexText\n }\n}\n\nlunr.QueryLexer.lexEditDistance = function (lexer) {\n lexer.ignore()\n lexer.acceptDigitRun()\n lexer.emit(lunr.QueryLexer.EDIT_DISTANCE)\n return lunr.QueryLexer.lexText\n}\n\nlunr.QueryLexer.lexBoost = function (lexer) {\n lexer.ignore()\n lexer.acceptDigitRun()\n lexer.emit(lunr.QueryLexer.BOOST)\n return lunr.QueryLexer.lexText\n}\n\nlunr.QueryLexer.lexEOS = function (lexer) {\n if (lexer.width() > 0) {\n lexer.emit(lunr.QueryLexer.TERM)\n }\n}\n\n// This matches the separator used when tokenising fields\n// within a document. These should match otherwise it is\n// not possible to search for some tokens within a document.\n//\n// It is possible for the user to change the separator on the\n// tokenizer so it _might_ clash with any other of the special\n// characters already used within the search string, e.g. :.\n//\n// This means that it is possible to change the separator in\n// such a way that makes some words unsearchable using a search\n// string.\nlunr.QueryLexer.termSeparator = lunr.tokenizer.separator\n\nlunr.QueryLexer.lexText = function (lexer) {\n while (true) {\n var char = lexer.next()\n\n if (char == lunr.QueryLexer.EOS) {\n return lunr.QueryLexer.lexEOS\n }\n\n // Escape character is '\\'\n if (char.charCodeAt(0) == 92) {\n lexer.escapeCharacter()\n continue\n }\n\n if (char == \":\") {\n return lunr.QueryLexer.lexField\n }\n\n if (char == \"~\") {\n lexer.backup()\n if (lexer.width() > 0) {\n lexer.emit(lunr.QueryLexer.TERM)\n }\n return lunr.QueryLexer.lexEditDistance\n }\n\n if (char == \"^\") {\n lexer.backup()\n if (lexer.width() > 0) {\n lexer.emit(lunr.QueryLexer.TERM)\n }\n return lunr.QueryLexer.lexBoost\n }\n\n // \"+\" indicates term presence is required\n // checking for length to ensure that only\n // leading \"+\" are considered\n if (char == \"+\" && lexer.width() === 1) {\n lexer.emit(lunr.QueryLexer.PRESENCE)\n return lunr.QueryLexer.lexText\n }\n\n // \"-\" indicates term presence is prohibited\n // checking for length to ensure that only\n // leading \"-\" are considered\n if (char == \"-\" && lexer.width() === 1) {\n lexer.emit(lunr.QueryLexer.PRESENCE)\n return lunr.QueryLexer.lexText\n }\n\n if (char.match(lunr.QueryLexer.termSeparator)) {\n return lunr.QueryLexer.lexTerm\n }\n }\n}\n\nlunr.QueryParser = function (str, query) {\n this.lexer = new lunr.QueryLexer (str)\n this.query = query\n this.currentClause = {}\n this.lexemeIdx = 0\n}\n\nlunr.QueryParser.prototype.parse = function () {\n this.lexer.run()\n this.lexemes = this.lexer.lexemes\n\n var state = lunr.QueryParser.parseClause\n\n while (state) {\n state = state(this)\n }\n\n return this.query\n}\n\nlunr.QueryParser.prototype.peekLexeme = function () {\n return this.lexemes[this.lexemeIdx]\n}\n\nlunr.QueryParser.prototype.consumeLexeme = function () {\n var lexeme = this.peekLexeme()\n this.lexemeIdx += 1\n return lexeme\n}\n\nlunr.QueryParser.prototype.nextClause = function () {\n var completedClause = this.currentClause\n this.query.clause(completedClause)\n this.currentClause = {}\n}\n\nlunr.QueryParser.parseClause = function (parser) {\n var lexeme = parser.peekLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n switch (lexeme.type) {\n case lunr.QueryLexer.PRESENCE:\n return lunr.QueryParser.parsePresence\n case lunr.QueryLexer.FIELD:\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.TERM:\n return lunr.QueryParser.parseTerm\n default:\n var errorMessage = \"expected either a field or a term, found \" + lexeme.type\n\n if (lexeme.str.length >= 1) {\n errorMessage += \" with value '\" + lexeme.str + \"'\"\n }\n\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n}\n\nlunr.QueryParser.parsePresence = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n switch (lexeme.str) {\n case \"-\":\n parser.currentClause.presence = lunr.Query.presence.PROHIBITED\n break\n case \"+\":\n parser.currentClause.presence = lunr.Query.presence.REQUIRED\n break\n default:\n var errorMessage = \"unrecognised presence operator'\" + lexeme.str + \"'\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n var errorMessage = \"expecting term or field, found nothing\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.FIELD:\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.TERM:\n return lunr.QueryParser.parseTerm\n default:\n var errorMessage = \"expecting term or field, found '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\nlunr.QueryParser.parseField = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n if (parser.query.allFields.indexOf(lexeme.str) == -1) {\n var possibleFields = parser.query.allFields.map(function (f) { return \"'\" + f + \"'\" }).join(', '),\n errorMessage = \"unrecognised field '\" + lexeme.str + \"', possible fields: \" + possibleFields\n\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n parser.currentClause.fields = [lexeme.str]\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n var errorMessage = \"expecting term, found nothing\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.TERM:\n return lunr.QueryParser.parseTerm\n default:\n var errorMessage = \"expecting term, found '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\nlunr.QueryParser.parseTerm = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n parser.currentClause.term = lexeme.str.toLowerCase()\n\n if (lexeme.str.indexOf(\"*\") != -1) {\n parser.currentClause.usePipeline = false\n }\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n parser.nextClause()\n return\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.TERM:\n parser.nextClause()\n return lunr.QueryParser.parseTerm\n case lunr.QueryLexer.FIELD:\n parser.nextClause()\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.EDIT_DISTANCE:\n return lunr.QueryParser.parseEditDistance\n case lunr.QueryLexer.BOOST:\n return lunr.QueryParser.parseBoost\n case lunr.QueryLexer.PRESENCE:\n parser.nextClause()\n return lunr.QueryParser.parsePresence\n default:\n var errorMessage = \"Unexpected lexeme type '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\nlunr.QueryParser.parseEditDistance = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n var editDistance = parseInt(lexeme.str, 10)\n\n if (isNaN(editDistance)) {\n var errorMessage = \"edit distance must be numeric\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n parser.currentClause.editDistance = editDistance\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n parser.nextClause()\n return\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.TERM:\n parser.nextClause()\n return lunr.QueryParser.parseTerm\n case lunr.QueryLexer.FIELD:\n parser.nextClause()\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.EDIT_DISTANCE:\n return lunr.QueryParser.parseEditDistance\n case lunr.QueryLexer.BOOST:\n return lunr.QueryParser.parseBoost\n case lunr.QueryLexer.PRESENCE:\n parser.nextClause()\n return lunr.QueryParser.parsePresence\n default:\n var errorMessage = \"Unexpected lexeme type '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\nlunr.QueryParser.parseBoost = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n var boost = parseInt(lexeme.str, 10)\n\n if (isNaN(boost)) {\n var errorMessage = \"boost must be numeric\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n parser.currentClause.boost = boost\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n parser.nextClause()\n return\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.TERM:\n parser.nextClause()\n return lunr.QueryParser.parseTerm\n case lunr.QueryLexer.FIELD:\n parser.nextClause()\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.EDIT_DISTANCE:\n return lunr.QueryParser.parseEditDistance\n case lunr.QueryLexer.BOOST:\n return lunr.QueryParser.parseBoost\n case lunr.QueryLexer.PRESENCE:\n parser.nextClause()\n return lunr.QueryParser.parsePresence\n default:\n var errorMessage = \"Unexpected lexeme type '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\n /**\n * export the module via AMD, CommonJS or as a browser global\n * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js\n */\n ;(function (root, factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(factory)\n } else if (typeof exports === 'object') {\n /**\n * Node. Does not work with strict CommonJS, but\n * only CommonJS-like enviroments that support module.exports,\n * like Node.\n */\n module.exports = factory()\n } else {\n // Browser globals (root is window)\n root.lunr = factory()\n }\n }(this, function () {\n /**\n * Just return a value to define the module export.\n * This example returns an object, but the module\n * can return a function as the exported value.\n */\n return lunr\n }))\n})();\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n ArticleDocument,\n SearchDocumentMap,\n SectionDocument,\n setupSearchDocumentMap\n} from \"../document\"\nimport {\n SearchHighlightFactoryFn,\n setupSearchHighlighter\n} from \"../highlight\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search index configuration\n */\nexport interface SearchIndexConfig {\n lang: string[] /* Search languages */\n separator: string /* Search separator */\n}\n\n/**\n * Search index document\n */\nexport interface SearchIndexDocument {\n location: string /* Document location */\n title: string /* Document title */\n text: string /* Document text */\n}\n\n/**\n * Search index pipeline\n */\nexport interface SearchIndexPipeline {\n trimmer: boolean /* Add trimmer to pipeline */\n stopwords: boolean /* Add stopword filter to pipeline */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Search index options\n *\n * This interfaces describes the format of the `search_index.json` file which\n * is automatically built by the MkDocs search plugin.\n */\nexport interface SearchIndexOptions {\n config: SearchIndexConfig /* Search index configuration */\n docs: SearchIndexDocument[] /* Search index documents */\n pipeline?: SearchIndexPipeline /* Search index pipeline */\n index?: object | string /* Prebuilt or serialized index */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Search result\n */\nexport interface SearchResult {\n article: ArticleDocument /* Article document */\n sections: SectionDocument[] /* Section documents */\n}\n\n/* ----------------------------------------------------------------------------\n * Class\n * ------------------------------------------------------------------------- */\n\n/**\n * Search index\n *\n * Note that `lunr` is injected via Webpack, as it will otherwise also be\n * bundled in the application bundle.\n */\nexport class SearchIndex {\n\n /**\n * Search document mapping\n *\n * A mapping of URLs (including hash fragments) to the actual articles and\n * sections of the documentation. The search document mapping must be created\n * regardless of whether the index was prebuilt or not, as `lunr` itself will\n * only store the actual index.\n */\n protected documents: SearchDocumentMap\n\n /**\n * Search highlight factory function\n */\n protected highlight: SearchHighlightFactoryFn\n\n /**\n * The `lunr` search index\n */\n protected index: lunr.Index\n\n /**\n * Create a search index\n *\n * @param options - Options\n */\n public constructor({ config, docs, pipeline, index }: SearchIndexOptions) {\n this.documents = setupSearchDocumentMap(docs)\n this.highlight = setupSearchHighlighter(config)\n\n /* If no index was given, create it */\n if (typeof index === \"undefined\") {\n this.index = lunr(function() {\n pipeline = pipeline || {\n trimmer: true,\n stopwords: true\n }\n\n /* Remove stemmer, as it cripples search experience */\n this.pipeline.reset()\n if (pipeline.trimmer)\n this.pipeline.add(lunr.trimmer)\n if (pipeline.stopwords)\n this.pipeline.add(lunr.stopWordFilter)\n\n /* Set up alternate search languages */\n if (config.lang.length === 1 && config.lang[0] !== \"en\") {\n this.use((lunr as any)[config.lang[0]])\n } else if (config.lang.length > 1) {\n this.use((lunr as any).multiLanguage(...config.lang))\n }\n\n /* Setup fields and reference */\n this.field(\"title\", { boost: 10 })\n this.field(\"text\")\n this.ref(\"location\")\n\n /* Index documents */\n for (const doc of docs)\n this.add(doc)\n })\n\n /* Prebuilt or serialized index */\n } else {\n this.index = lunr.Index.load(\n typeof index === \"string\"\n ? JSON.parse(index)\n : index\n )\n }\n }\n\n /**\n * Search for matching documents\n *\n * The search index which MkDocs provides is divided up into articles, which\n * contain the whole content of the individual pages, and sections, which only\n * contain the contents of the subsections obtained by breaking the individual\n * pages up at `h1` ... `h6`. As there may be many sections on different pages\n * with indentical titles (for example within this very project, e.g. \"Usage\"\n * or \"Installation\"), they need to be put into the context of the containing\n * page. For this reason, section results are grouped within their respective\n * articles which are the top-level results that are returned.\n *\n * @param query - Query string\n *\n * @return Search results\n */\n public search(query: string): SearchResult[] {\n if (query) {\n try {\n\n /* Group sections by containing article */\n const groups = this.index.search(query)\n .reduce((results, result) => {\n const document = this.documents.get(result.ref)\n if (typeof document !== \"undefined\") {\n if (\"parent\" in document) {\n const ref = document.parent.location\n results.set(ref, [...results.get(ref) || [], result])\n } else {\n const ref = document.location\n results.set(ref, results.get(ref) || [])\n }\n }\n return results\n }, new Map())\n\n /* Create highlighter for query */\n const fn = this.highlight(query)\n\n /* Map groups to search documents */\n return [...groups].map(([ref, sections]) => ({\n article: fn(this.documents.get(ref) as ArticleDocument),\n sections: sections.map(section => {\n return fn(this.documents.get(section.ref) as SectionDocument)\n })\n }))\n\n /* Log errors to console (for now) */\n } catch (err) {\n // tslint:disable-next-line no-console\n console.warn(`Invalid query: ${query} – see https://bit.ly/2s3ChXG`)\n }\n }\n\n /* Return nothing in case of error or empty query */\n return []\n }\n\n /**\n * Serialize search index\n *\n * @return String representation\n */\n public toString(): string {\n return JSON.stringify(this.index)\n }\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SearchIndexOptions, SearchResult } from \"integrations/search\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search message type\n */\nexport const enum SearchMessageType {\n SETUP, /* Search index setup */\n DUMP, /* Search index dump */\n QUERY, /* Search query */\n RESULT /* Search results */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * A message containing the data necessary to setup the search index\n */\nexport interface SearchSetupMessage {\n type: SearchMessageType.SETUP /* Message type */\n data: SearchIndexOptions /* Message data */\n}\n\n/**\n * A message containing the a dump of the search index\n */\nexport interface SearchDumpMessage {\n type: SearchMessageType.DUMP /* Message type */\n data: string /* Message data */\n}\n\n/**\n * A message containing a search query\n */\nexport interface SearchQueryMessage {\n type: SearchMessageType.QUERY /* Message type */\n data: string /* Message data */\n}\n\n/**\n * A message containing results for a search query\n */\nexport interface SearchResultMessage {\n type: SearchMessageType.RESULT /* Message type */\n data: SearchResult[] /* Message data */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * A message exchanged with the search worker\n */\nexport type SearchMessage =\n | SearchSetupMessage\n | SearchDumpMessage\n | SearchQueryMessage\n | SearchResultMessage\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Type guard for search setup messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchSetupMessage(\n message: SearchMessage\n): message is SearchSetupMessage {\n return message.type === SearchMessageType.SETUP\n}\n\n/**\n * Type guard for search dump messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchDumpMessage(\n message: SearchMessage\n): message is SearchDumpMessage {\n return message.type === SearchMessageType.DUMP\n}\n\n/**\n * Type guard for search query messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchQueryMessage(\n message: SearchMessage\n): message is SearchQueryMessage {\n return message.type === SearchMessageType.QUERY\n}\n\n/**\n * Type guard for search result messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchResultMessage(\n message: SearchMessage\n): message is SearchResultMessage {\n return message.type === SearchMessageType.RESULT\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport \"expose-loader?lunr!lunr\"\n\nimport { SearchIndex, SearchIndexConfig } from \"integrations/search\"\n\nimport { SearchMessage, SearchMessageType } from \"../message\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Search index\n */\nlet index: SearchIndex\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup multi-language support through `lunr-languages`\n *\n * This function will automatically import the stemmers necessary to process\n * the languages which were given through the search index configuration.\n *\n * @param config - Search index configuration\n */\nfunction setupLunrLanguages(config: SearchIndexConfig): void {\n const base = \"../lunr\"\n\n /* Add scripts for languages */\n const scripts = []\n for (const lang of config.lang) {\n if (lang === \"ja\") scripts.push(`${base}/tinyseg.min.js`)\n if (lang !== \"en\") scripts.push(`${base}/min/lunr.${lang}.min.js`)\n }\n\n /* Add multi-language support */\n if (config.lang.length > 1)\n scripts.push(`${base}/min/lunr.multi.min.js`)\n\n /* Load scripts synchronously */\n if (scripts.length)\n self.importScripts(\n `${base}/min/lunr.stemmer.support.min.js`,\n ...scripts\n )\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Message handler\n *\n * @param message - Source message\n *\n * @return Target message\n */\nexport function handler(message: SearchMessage): SearchMessage {\n switch (message.type) {\n\n /* Setup search index */\n case SearchMessageType.SETUP:\n setupLunrLanguages(message.data.config)\n index = new SearchIndex(message.data)\n return {\n type: SearchMessageType.DUMP,\n data: index.toString()\n }\n\n /* Query search index */\n case SearchMessageType.QUERY:\n return {\n type: SearchMessageType.RESULT,\n data: index ? index.search(message.data) : []\n }\n\n /* All other messages */\n default:\n throw new TypeError(\"Invalid message type\")\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Worker\n * ------------------------------------------------------------------------- */\n\nself.addEventListener(\"message\", ev => {\n self.postMessage(handler(ev.data))\n})\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport * as escapeHTML from \"escape-html\"\n\nimport { SearchIndexDocument } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * A top-level article\n */\nexport interface ArticleDocument extends SearchIndexDocument {\n linked: boolean /* Whether the section was linked */\n}\n\n/**\n * A section of an article\n */\nexport interface SectionDocument extends SearchIndexDocument {\n parent: ArticleDocument /* Parent article */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Search document\n */\nexport type SearchDocument =\n | ArticleDocument\n | SectionDocument\n\n/**\n * Search document mapping\n */\nexport type SearchDocumentMap = Map\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Create a search document mapping\n *\n * @param docs - Search index documents\n *\n * @return Search document map\n */\nexport function setupSearchDocumentMap(\n docs: SearchIndexDocument[]\n): SearchDocumentMap {\n const documents = new Map()\n for (const doc of docs) {\n const [path, hash] = doc.location.split(\"#\")\n\n /* Extract location and title */\n const location = doc.location\n const title = doc.title\n\n /* Escape and cleanup text */\n const text = escapeHTML(doc.text)\n .replace(/\\s+(?=[,.:;!?])/g, \"\")\n .replace(/\\s+/g, \" \")\n\n /* Handle section */\n if (hash) {\n const parent = documents.get(path) as ArticleDocument\n\n /* Ignore first section, override article */\n if (!parent.linked) {\n parent.title = doc.title\n parent.text = text\n parent.linked = true\n\n /* Add subsequent section */\n } else {\n documents.set(location, {\n location,\n title,\n text,\n parent\n })\n }\n\n /* Add article */\n } else {\n documents.set(location, {\n location,\n title,\n text,\n linked: false\n })\n }\n }\n return documents\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport * as escapeRegExp from \"escape-string-regexp\"\n\nimport { SearchIndexConfig } from \"../_\"\nimport { SearchDocument } from \"../document\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search highlight function\n *\n * @template T - Search document type\n *\n * @param document - Search document\n *\n * @return Highlighted document\n */\nexport type SearchHighlightFn =\n (document: Readonly) => T\n\n/**\n * Search highlight factory function\n *\n * @param query - Query string\n *\n * @return Search highlight function\n */\nexport type SearchHighlightFactoryFn =\n (query: string) => SearchHighlightFn\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Create a search highlighter\n *\n * @param config - Search index configuration\n *\n * @return Search highlight factory function\n */\nexport function setupSearchHighlighter(\n config: SearchIndexConfig\n): SearchHighlightFactoryFn {\n const separator = new RegExp(config.separator, \"img\")\n const highlight = (_: unknown, data: string, term: string) => {\n return `${data}${term}`\n }\n\n /* Return factory function */\n return (query: string) => {\n query = query\n .replace(/[\\s*+-:~^]+/g, \" \")\n .trim()\n\n /* Create search term match expression */\n const match = new RegExp(`(^|${config.separator})(${\n escapeRegExp(query).replace(separator, \"|\")\n })`, \"img\")\n\n /* Highlight document */\n return document => ({\n ...document,\n title: document.title.replace(match, highlight),\n text: document.text.replace(match, highlight)\n })\n }\n}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/material/assets/javascripts/worker/search.926ffd9e.min.js b/material/assets/javascripts/worker/search.edc88caf.min.js similarity index 89% rename from material/assets/javascripts/worker/search.926ffd9e.min.js rename to material/assets/javascripts/worker/search.edc88caf.min.js index 18dac50d1..808bb7cb2 100644 --- a/material/assets/javascripts/worker/search.926ffd9e.min.js +++ b/material/assets/javascripts/worker/search.edc88caf.min.js @@ -1,11 +1,11 @@ -!function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=5)}([function(e,t,r){"use strict"; +!function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=4)}([function(e,t,r){"use strict"; /*! * escape-html * Copyright(c) 2012-2013 TJ Holowaychuk * Copyright(c) 2015 Andreas Lubbe * Copyright(c) 2015 Tiancheng "Timothy" Gu * MIT Licensed - */var n=/["'&<>]/;e.exports=function(e){var t,r=""+e,i=n.exec(r);if(!i)return r;var s="",o=0,a=0;for(o=i.index;o{if("string"!=typeof e)throw new TypeError("Expected a string");return e.replace(n,"\\$&")}},function(e,t,r){(function(t){e.exports=t.lunr=r(4)}).call(this,r(3))},function(e,t){var r;r=function(){return this}();try{r=r||new Function("return this")()}catch(e){"object"==typeof window&&(r=window)}e.exports=r},function(e,t,r){var n,i; + */var n=/["'&<>]/;e.exports=function(e){var t,r=""+e,i=n.exec(r);if(!i)return r;var s="",o=0,a=0;for(o=i.index;o1?1:e},R.Builder.prototype.k1=function(e){this._k1=e},R.Builder.prototype.add=function(e,t){var r=e[this._ref],n=Object.keys(this._fields);this._documents[r]=t||{},this.documentCount+=1;for(var i=0;i=this.length)return R.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},R.QueryLexer.prototype.width=function(){return this.pos-this.start},R.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},R.QueryLexer.prototype.backup=function(){this.pos-=1},R.QueryLexer.prototype.acceptDigitRun=function(){var e,t;do{t=(e=this.next()).charCodeAt(0)}while(t>47&&t<58);e!=R.QueryLexer.EOS&&this.backup()},R.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(R.QueryLexer.TERM)),e.ignore(),e.more())return R.QueryLexer.lexText},R.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(R.QueryLexer.EDIT_DISTANCE),R.QueryLexer.lexText},R.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(R.QueryLexer.BOOST),R.QueryLexer.lexText},R.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(R.QueryLexer.TERM)},R.QueryLexer.termSeparator=R.tokenizer.separator,R.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==R.QueryLexer.EOS)return R.QueryLexer.lexEOS;if(92!=t.charCodeAt(0)){if(":"==t)return R.QueryLexer.lexField;if("~"==t)return e.backup(),e.width()>0&&e.emit(R.QueryLexer.TERM),R.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),e.width()>0&&e.emit(R.QueryLexer.TERM),R.QueryLexer.lexBoost;if("+"==t&&1===e.width())return e.emit(R.QueryLexer.PRESENCE),R.QueryLexer.lexText;if("-"==t&&1===e.width())return e.emit(R.QueryLexer.PRESENCE),R.QueryLexer.lexText;if(t.match(R.QueryLexer.termSeparator))return R.QueryLexer.lexTerm}else e.escapeCharacter()}},R.QueryParser=function(e,t){this.lexer=new R.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},R.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=R.QueryParser.parseClause;e;)e=e(this);return this.query},R.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},R.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},R.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},R.QueryParser.parseClause=function(e){var t=e.peekLexeme();if(null!=t)switch(t.type){case R.QueryLexer.PRESENCE:return R.QueryParser.parsePresence;case R.QueryLexer.FIELD:return R.QueryParser.parseField;case R.QueryLexer.TERM:return R.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+t.type;throw t.str.length>=1&&(r+=" with value '"+t.str+"'"),new R.QueryParseError(r,t.start,t.end)}},R.QueryParser.parsePresence=function(e){var t=e.consumeLexeme();if(null!=t){switch(t.str){case"-":e.currentClause.presence=R.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=R.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+t.str+"'";throw new R.QueryParseError(r,t.start,t.end)}var n=e.peekLexeme();if(null==n){r="expecting term or field, found nothing";throw new R.QueryParseError(r,t.start,t.end)}switch(n.type){case R.QueryLexer.FIELD:return R.QueryParser.parseField;case R.QueryLexer.TERM:return R.QueryParser.parseTerm;default:r="expecting term or field, found '"+n.type+"'";throw new R.QueryParseError(r,n.start,n.end)}}},R.QueryParser.parseField=function(e){var t=e.consumeLexeme();if(null!=t){if(-1==e.query.allFields.indexOf(t.str)){var r=e.query.allFields.map((function(e){return"'"+e+"'"})).join(", "),n="unrecognised field '"+t.str+"', possible fields: "+r;throw new R.QueryParseError(n,t.start,t.end)}e.currentClause.fields=[t.str];var i=e.peekLexeme();if(null==i){n="expecting term, found nothing";throw new R.QueryParseError(n,t.start,t.end)}switch(i.type){case R.QueryLexer.TERM:return R.QueryParser.parseTerm;default:n="expecting term, found '"+i.type+"'";throw new R.QueryParseError(n,i.start,i.end)}}},R.QueryParser.parseTerm=function(e){var t=e.consumeLexeme();if(null!=t){e.currentClause.term=t.str.toLowerCase(),-1!=t.str.indexOf("*")&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(null!=r)switch(r.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+r.type+"'";throw new R.QueryParseError(n,r.start,r.end)}else e.nextClause()}},R.QueryParser.parseEditDistance=function(e){var t=e.consumeLexeme();if(null!=t){var r=parseInt(t.str,10);if(isNaN(r)){var n="edit distance must be numeric";throw new R.QueryParseError(n,t.start,t.end)}e.currentClause.editDistance=r;var i=e.peekLexeme();if(null!=i)switch(i.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:n="Unexpected lexeme type '"+i.type+"'";throw new R.QueryParseError(n,i.start,i.end)}else e.nextClause()}},R.QueryParser.parseBoost=function(e){var t=e.consumeLexeme();if(null!=t){var r=parseInt(t.str,10);if(isNaN(r)){var n="boost must be numeric";throw new R.QueryParseError(n,t.start,t.end)}e.currentClause.boost=r;var i=e.peekLexeme();if(null!=i)switch(i.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:n="Unexpected lexeme type '"+i.type+"'";throw new R.QueryParseError(n,i.start,i.end)}else e.nextClause()}},void 0===(i="function"==typeof(n=function(){return R})?n.call(t,r,t,e):n)||(e.exports=i)}()},function(e,t,r){"use strict";r.r(t);var n=function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}}function s(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,i,s=r.call(e),o=[];try{for(;(void 0===t||t-- >0)&&!(n=s.next()).done;)o.push(n.value)}catch(e){i={error:e}}finally{try{n&&!n.done&&(r=s.return)&&r.call(s)}finally{if(i)throw i.error}}return o}function o(){for(var e=[],t=0;t"+r+""};return function(i){i=i.replace(/[\s*+-:~^]+/g," ").trim();var s=new RegExp("(^|"+e.separator+")("+u(i).replace(t,"|")+")","img");return function(e){return n(n({},e),{title:e.title.replace(s,r),text:e.text.replace(s,r)})}}}(t),this.index=void 0===c?lunr((function(){var e,n,s;l=l||{trimmer:!0,stopwords:!0},this.pipeline.reset(),l.trimmer&&this.pipeline.add(lunr.trimmer),l.stopwords&&this.pipeline.add(lunr.stopWordFilter),1===t.lang.length&&"en"!==t.lang[0]?this.use(lunr[t.lang[0]]):t.lang.length>1&&this.use((e=lunr).multiLanguage.apply(e,o(t.lang))),this.field("title",{boost:10}),this.field("text"),this.ref("location");try{for(var a=i(r),u=a.next();!u.done;u=a.next()){var c=u.value;this.add(c)}}catch(e){n={error:e}}finally{try{u&&!u.done&&(s=a.return)&&s.call(a)}finally{if(n)throw n.error}}})):lunr.Index.load("string"==typeof c?JSON.parse(c):c)}return e.prototype.search=function(e){var t=this;if(e)try{var r=this.index.search(e).reduce((function(e,r){var n=t.documents.get(r.ref);if(void 0!==n)if("parent"in n){var i=n.parent.location;e.set(i,o(e.get(i)||[],[r]))}else{i=n.location;e.set(i,e.get(i)||[])}return e}),new Map),n=this.highlight(e);return o(r).map((function(e){var r=s(e,2),i=r[0],o=r[1];return{article:n(t.documents.get(i)),sections:o.map((function(e){return n(t.documents.get(e.ref))}))}}))}catch(t){console.warn("Invalid query: "+e+" – see https://bit.ly/2s3ChXG")}return[]},e.prototype.toString=function(){return JSON.stringify(this.index)},e}();function d(e){switch(e.type){case l.SETUP:return function(e){var t,r,n="../lunr",s=[];try{for(var a=i(e.lang),u=a.next();!u.done;u=a.next()){var l=u.value;"ja"===l&&s.push(n+"/tinyseg.min.js"),"en"!==l&&s.push(n+"/min/lunr."+l+".min.js")}}catch(e){t={error:e}}finally{try{u&&!u.done&&(r=a.return)&&r.call(a)}finally{if(t)throw t.error}}e.lang.length>1&&s.push(n+"/min/lunr.multi.min.js"),s.length&&self.importScripts.apply(self,o([n+"/min/lunr.stemmer.support.min.js"],s))}(e.data.config),c=new h(e.data),{type:l.DUMP,data:c.toString()};case l.QUERY:return{type:l.RESULT,data:c?c.search(e.data):[]};default:throw new TypeError("Invalid message type")}}!function(e){e[e.SETUP=0]="SETUP",e[e.DUMP=1]="DUMP",e[e.QUERY=2]="QUERY",e[e.RESULT=3]="RESULT"}(l||(l={})),r.d(t,"handler",(function(){return d})),self.addEventListener("message",(function(e){self.postMessage(d(e.data))}))}]); -//# sourceMappingURL=search.926ffd9e.min.js.map \ No newline at end of file + */,R.Builder=function(){this._ref="id",this._fields=Object.create(null),this._documents=Object.create(null),this.invertedIndex=Object.create(null),this.fieldTermFrequencies={},this.fieldLengths={},this.tokenizer=R.tokenizer,this.pipeline=new R.Pipeline,this.searchPipeline=new R.Pipeline,this.documentCount=0,this._b=.75,this._k1=1.2,this.termIndex=0,this.metadataWhitelist=[]},R.Builder.prototype.ref=function(e){this._ref=e},R.Builder.prototype.field=function(e,t){if(/\//.test(e))throw new RangeError("Field '"+e+"' contains illegal character '/'");this._fields[e]=t||{}},R.Builder.prototype.b=function(e){this._b=e<0?0:e>1?1:e},R.Builder.prototype.k1=function(e){this._k1=e},R.Builder.prototype.add=function(e,t){var r=e[this._ref],n=Object.keys(this._fields);this._documents[r]=t||{},this.documentCount+=1;for(var i=0;i=this.length)return R.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},R.QueryLexer.prototype.width=function(){return this.pos-this.start},R.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},R.QueryLexer.prototype.backup=function(){this.pos-=1},R.QueryLexer.prototype.acceptDigitRun=function(){var e,t;do{t=(e=this.next()).charCodeAt(0)}while(t>47&&t<58);e!=R.QueryLexer.EOS&&this.backup()},R.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(R.QueryLexer.TERM)),e.ignore(),e.more())return R.QueryLexer.lexText},R.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(R.QueryLexer.EDIT_DISTANCE),R.QueryLexer.lexText},R.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(R.QueryLexer.BOOST),R.QueryLexer.lexText},R.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(R.QueryLexer.TERM)},R.QueryLexer.termSeparator=R.tokenizer.separator,R.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==R.QueryLexer.EOS)return R.QueryLexer.lexEOS;if(92!=t.charCodeAt(0)){if(":"==t)return R.QueryLexer.lexField;if("~"==t)return e.backup(),e.width()>0&&e.emit(R.QueryLexer.TERM),R.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),e.width()>0&&e.emit(R.QueryLexer.TERM),R.QueryLexer.lexBoost;if("+"==t&&1===e.width())return e.emit(R.QueryLexer.PRESENCE),R.QueryLexer.lexText;if("-"==t&&1===e.width())return e.emit(R.QueryLexer.PRESENCE),R.QueryLexer.lexText;if(t.match(R.QueryLexer.termSeparator))return R.QueryLexer.lexTerm}else e.escapeCharacter()}},R.QueryParser=function(e,t){this.lexer=new R.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},R.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=R.QueryParser.parseClause;e;)e=e(this);return this.query},R.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},R.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},R.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},R.QueryParser.parseClause=function(e){var t=e.peekLexeme();if(null!=t)switch(t.type){case R.QueryLexer.PRESENCE:return R.QueryParser.parsePresence;case R.QueryLexer.FIELD:return R.QueryParser.parseField;case R.QueryLexer.TERM:return R.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+t.type;throw t.str.length>=1&&(r+=" with value '"+t.str+"'"),new R.QueryParseError(r,t.start,t.end)}},R.QueryParser.parsePresence=function(e){var t=e.consumeLexeme();if(null!=t){switch(t.str){case"-":e.currentClause.presence=R.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=R.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+t.str+"'";throw new R.QueryParseError(r,t.start,t.end)}var n=e.peekLexeme();if(null==n){r="expecting term or field, found nothing";throw new R.QueryParseError(r,t.start,t.end)}switch(n.type){case R.QueryLexer.FIELD:return R.QueryParser.parseField;case R.QueryLexer.TERM:return R.QueryParser.parseTerm;default:r="expecting term or field, found '"+n.type+"'";throw new R.QueryParseError(r,n.start,n.end)}}},R.QueryParser.parseField=function(e){var t=e.consumeLexeme();if(null!=t){if(-1==e.query.allFields.indexOf(t.str)){var r=e.query.allFields.map((function(e){return"'"+e+"'"})).join(", "),n="unrecognised field '"+t.str+"', possible fields: "+r;throw new R.QueryParseError(n,t.start,t.end)}e.currentClause.fields=[t.str];var i=e.peekLexeme();if(null==i){n="expecting term, found nothing";throw new R.QueryParseError(n,t.start,t.end)}switch(i.type){case R.QueryLexer.TERM:return R.QueryParser.parseTerm;default:n="expecting term, found '"+i.type+"'";throw new R.QueryParseError(n,i.start,i.end)}}},R.QueryParser.parseTerm=function(e){var t=e.consumeLexeme();if(null!=t){e.currentClause.term=t.str.toLowerCase(),-1!=t.str.indexOf("*")&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(null!=r)switch(r.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+r.type+"'";throw new R.QueryParseError(n,r.start,r.end)}else e.nextClause()}},R.QueryParser.parseEditDistance=function(e){var t=e.consumeLexeme();if(null!=t){var r=parseInt(t.str,10);if(isNaN(r)){var n="edit distance must be numeric";throw new R.QueryParseError(n,t.start,t.end)}e.currentClause.editDistance=r;var i=e.peekLexeme();if(null!=i)switch(i.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:n="Unexpected lexeme type '"+i.type+"'";throw new R.QueryParseError(n,i.start,i.end)}else e.nextClause()}},R.QueryParser.parseBoost=function(e){var t=e.consumeLexeme();if(null!=t){var r=parseInt(t.str,10);if(isNaN(r)){var n="boost must be numeric";throw new R.QueryParseError(n,t.start,t.end)}e.currentClause.boost=r;var i=e.peekLexeme();if(null!=i)switch(i.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:n="Unexpected lexeme type '"+i.type+"'";throw new R.QueryParseError(n,i.start,i.end)}else e.nextClause()}},void 0===(i="function"==typeof(n=function(){return R})?n.call(t,r,t,e):n)||(e.exports=i)}()},function(e,t,r){"use strict";r.r(t);var n=function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}}function s(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,i,s=r.call(e),o=[];try{for(;(void 0===t||t-- >0)&&!(n=s.next()).done;)o.push(n.value)}catch(e){i={error:e}}finally{try{n&&!n.done&&(r=s.return)&&r.call(s)}finally{if(i)throw i.error}}return o}function o(){for(var e=[],t=0;t"+r+""};return function(i){i=i.replace(/[\s*+-:~^]+/g," ").trim();var s=new RegExp("(^|"+e.separator+")("+i.replace(/[|\\{}()[\]^$+*?.-]/g,"\\$&").replace(t,"|")+")","img");return function(e){return n(n({},e),{title:e.title.replace(s,r),text:e.text.replace(s,r)})}}}(t),this.index=void 0===l?lunr((function(){var e,n,s,a,l;u=u||["trimmer","stopWordFilter"],this.pipeline.reset();try{for(var c=i(u),h=c.next();!h.done;h=c.next()){var d=h.value;this.pipeline.add(lunr[d])}}catch(t){e={error:t}}finally{try{h&&!h.done&&(n=c.return)&&n.call(c)}finally{if(e)throw e.error}}1===t.lang.length&&"en"!==t.lang[0]?this.use(lunr[t.lang[0]]):t.lang.length>1&&this.use((s=lunr).multiLanguage.apply(s,o(t.lang))),this.field("title",{boost:10}),this.field("text"),this.ref("location");try{for(var f=i(r),p=f.next();!p.done;p=f.next()){var y=p.value;this.add(y)}}catch(e){a={error:e}}finally{try{p&&!p.done&&(l=f.return)&&l.call(f)}finally{if(a)throw a.error}}})):lunr.Index.load("string"==typeof l?JSON.parse(l):l)}return e.prototype.search=function(e){var t=this;if(e)try{var r=this.index.search(e).reduce((function(e,r){var n=t.documents.get(r.ref);if(void 0!==n)if("parent"in n){var i=n.parent.location;e.set(i,o(e.get(i)||[],[r]))}else{i=n.location;e.set(i,e.get(i)||[])}return e}),new Map),n=this.highlight(e);return o(r).map((function(e){var r=s(e,2),i=r[0],o=r[1];return{article:n(t.documents.get(i)),sections:o.map((function(e){return n(t.documents.get(e.ref))}))}}))}catch(t){console.warn("Invalid query: "+e+" – see https://bit.ly/2s3ChXG")}return[]},e.prototype.toString=function(){return JSON.stringify(this.index)},e}();function h(e){switch(e.type){case u.SETUP:return function(e){var t,r,n="../lunr",s=[];try{for(var a=i(e.lang),u=a.next();!u.done;u=a.next()){var l=u.value;"ja"===l&&s.push(n+"/tinyseg.min.js"),"en"!==l&&s.push(n+"/min/lunr."+l+".min.js")}}catch(e){t={error:e}}finally{try{u&&!u.done&&(r=a.return)&&r.call(a)}finally{if(t)throw t.error}}e.lang.length>1&&s.push(n+"/min/lunr.multi.min.js"),s.length&&self.importScripts.apply(self,o([n+"/min/lunr.stemmer.support.min.js"],s))}(e.data.config),l=new c(e.data),{type:u.DUMP,data:l.toString()};case u.QUERY:return{type:u.RESULT,data:l?l.search(e.data):[]};default:throw new TypeError("Invalid message type")}}!function(e){e[e.SETUP=0]="SETUP",e[e.DUMP=1]="DUMP",e[e.QUERY=2]="QUERY",e[e.RESULT=3]="RESULT"}(u||(u={})),r.d(t,"handler",(function(){return h})),self.addEventListener("message",(function(e){self.postMessage(h(e.data))}))}]); +//# sourceMappingURL=search.edc88caf.min.js.map \ No newline at end of file diff --git a/material/assets/javascripts/worker/search.edc88caf.min.js.map b/material/assets/javascripts/worker/search.edc88caf.min.js.map new file mode 100644 index 000000000..9c8fff302 --- /dev/null +++ b/material/assets/javascripts/worker/search.edc88caf.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/escape-html/index.js","webpack:///./node_modules/lunr/lunr.js-exposed","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/lunr/lunr.js","webpack:///./node_modules/tslib/tslib.es6.js","webpack:///./src/assets/javascripts/integrations/search/_/index.ts","webpack:///./src/assets/javascripts/workers/search/message/index.ts","webpack:///./src/assets/javascripts/workers/search/main/index.ts","webpack:///./src/assets/javascripts/integrations/search/document/index.ts","webpack:///./src/assets/javascripts/integrations/search/highlight/index.ts"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","matchHtmlRegExp","string","escape","str","match","exec","html","index","lastIndex","length","charCodeAt","substring","g","this","Function","e","window","global","step2list","step3list","v","C","re_mgr0","re_mgr1","re_meq1","re_s_v","re_1a","re2_1a","re_1b","re2_1b","re_1b_2","re2_1b_2","re3_1b_2","re4_1b_2","re_1c","re_2","re_3","re_4","re2_4","re_5","re_5_1","re3_5","porterStemmer","lunr","config","builder","Builder","pipeline","add","trimmer","stopWordFilter","stemmer","searchPipeline","build","version","utils","warn","message","console","asString","obj","toString","clone","keys","val","Array","isArray","slice","TypeError","FieldRef","docRef","fieldName","stringValue","_stringValue","joiner","fromString","indexOf","fieldRef","undefined","Set","elements","complete","intersect","other","union","contains","empty","a","b","intersection","element","push","concat","idf","posting","documentCount","documentsWithTerm","x","Math","log","abs","Token","metadata","update","fn","tokenizer","map","toLowerCase","len","tokens","sliceEnd","sliceStart","sliceLength","charAt","separator","tokenMetadata","Pipeline","_stack","registeredFunctions","registerFunction","label","warnIfFunctionNotRegistered","load","serialised","forEach","fnName","Error","fns","arguments","after","existingFn","newFn","pos","splice","before","remove","run","stackLength","memo","j","result","k","runString","token","reset","toJSON","Vector","_magnitude","positionForIndex","start","end","pivotPoint","floor","pivotIndex","insert","insertIdx","upsert","position","magnitude","sumOfSquares","elementsLength","sqrt","dot","otherVector","dotProduct","aLen","bLen","aVal","bVal","similarity","toArray","output","RegExp","w","stem","suffix","firstch","re","re2","re3","re4","substr","toUpperCase","test","replace","fp","generateStopWordFilter","stopWords","words","reduce","stopWord","TokenSet","final","edges","id","_nextId","fromArray","arr","finish","root","fromClause","clause","fromFuzzyString","term","editDistance","stack","node","editsRemaining","frame","pop","noEditNode","char","insertionNode","substitutionNode","transposeNode","charA","charB","next","prefix","edge","_str","labels","sort","qNode","qEdges","qLen","nEdges","nLen","q","qEdge","nEdge","previousWord","uncheckedNodes","minimizedNodes","word","commonPrefix","minimize","child","nextNode","parent","downTo","childKey","Index","attrs","invertedIndex","fieldVectors","tokenSet","fields","search","queryString","query","QueryParser","parse","Query","matchingFields","queryVectors","termFieldCache","requiredMatches","prohibitedMatches","clauses","terms","clauseMatches","usePipeline","termTokenSet","expandedTerms","presence","REQUIRED","field","expandedTerm","termIndex","_index","fieldPosting","matchingDocumentRefs","termField","matchingDocumentsSet","PROHIBITED","boost","fieldMatch","matchingDocumentRef","matchingFieldRef","MatchData","allRequiredMatches","allProhibitedMatches","matchingFieldRefs","results","matches","isNegated","docMatch","fieldVector","score","matchData","combine","ref","serializedIndex","serializedVectors","serializedInvertedIndex","tokenSetBuilder","tuple","_ref","_fields","_documents","fieldTermFrequencies","fieldLengths","_b","_k1","metadataWhitelist","attributes","RangeError","number","k1","doc","extractor","fieldTerms","metadataKey","calculateAverageFieldLengths","fieldRefs","numberOfFields","accumulator","documentsWithField","averageFieldLength","createFieldVectors","fieldRefsLength","termIdfCache","fieldLength","termFrequencies","termsLength","fieldBoost","docBoost","scoreWithPrecision","tf","round","createTokenSet","use","args","unshift","apply","clonedMetadata","metadataKeys","otherMatchData","allFields","wildcard","String","NONE","LEADING","TRAILING","OPTIONAL","options","QueryParseError","QueryLexer","lexemes","escapeCharPositions","state","lexText","sliceString","subSlices","join","emit","type","escapeCharacter","EOS","width","ignore","backup","acceptDigitRun","charCode","more","FIELD","TERM","EDIT_DISTANCE","BOOST","PRESENCE","lexField","lexer","lexTerm","lexEditDistance","lexBoost","lexEOS","termSeparator","currentClause","lexemeIdx","parseClause","peekLexeme","consumeLexeme","lexeme","nextClause","completedClause","parser","parsePresence","parseField","parseTerm","errorMessage","nextLexeme","possibleFields","f","parseEditDistance","parseBoost","parseInt","isNaN","__assign","assign","__values","iterator","done","__read","ar","error","__spread","SearchMessageType","docs","documents","Map","path","hash","location","title","text","linked","set","setupSearchDocumentMap","highlight","_","data","trim","document","setupSearchHighlighter","lang","multiLanguage","JSON","groups","sections","article","section","err","stringify","handler","SETUP","base","scripts","self","importScripts","setupLunrLanguages","DUMP","QUERY","RESULT","addEventListener","ev","postMessage"],"mappings":"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uBAAyB,SAAUC,GACtC,IAAIC,EAAQD,EAAUE,QAAO,SAAUnD,EAAMoD,GAE3C,OADApD,EAAKoD,GAAYA,EACVpD,IACN,IAEH,OAAO,SAAUK,GACf,GAAIA,GAAS6C,EAAM7C,EAAMlF,cAAgBkF,EAAMlF,WAAY,OAAOkF,IAiBtEpG,EAAKO,eAAiBP,EAAK+I,uBAAuB,CAChD,IACA,OACA,QACA,SACA,QACA,MACA,SACA,OACA,KACA,QACA,KACA,MACA,MACA,MACA,KACA,KACA,KACA,UACA,OACA,MACA,KACA,MACA,SACA,QACA,OACA,MACA,KACA,OACA,SACA,OACA,OACA,QACA,MACA,OACA,MACA,MACA,MACA,MACA,OACA,KACA,MACA,OACA,MACA,MACA,MACA,UACA,IACA,KACA,KACA,OACA,KACA,KACA,MACA,OACA,QACA,MACA,OACA,SACA,MACA,KACA,QACA,OACA,OACA,KACA,UACA,KACA,MACA,MACA,KACA,MACA,QACA,KACA,OACA,KACA,QACA,MACA,MACA,SACA,OACA,MACA,OACA,MACA,SACA,QACA,KACA,OACA,OACA,OACA,MACA,QACA,OACA,OACA,QACA,QACA,OACA,OACA,MACA,KACA,MACA,OACA,KACA,QACA,MACA,KACA,OACA,OACA,OACA,QACA,QACA,QACA,MACA,OACA,MACA,OACA,OACA,QACA,MACA,MACA,SAGF/I,EAAKyE,SAASG,iBAAiB5E,EAAKO,eAAgB;;;;IAqBpDP,EAAKM,QAAU,SAAU8F,GACvB,OAAOA,EAAMxC,QAAO,SAAUxG,GAC5B,OAAOA,EAAEyL,QAAQ,OAAQ,IAAIA,QAAQ,OAAQ,QAIjD7I,EAAKyE,SAASG,iBAAiB5E,EAAKM,QAAS;;;;IA2B7CN,EAAKoJ,SAAW,WACdlL,KAAKmL,OAAQ,EACbnL,KAAKoL,MAAQ,GACbpL,KAAKqL,GAAKvJ,EAAKoJ,SAASI,QACxBxJ,EAAKoJ,SAASI,SAAW,GAW3BxJ,EAAKoJ,SAASI,QAAU,EASxBxJ,EAAKoJ,SAASK,UAAY,SAAUC,GAGlC,IAFA,IAAIxJ,EAAU,IAAIF,EAAK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","file":"assets/javascripts/worker/search.edc88caf.min.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 4);\n","/*!\n * escape-html\n * Copyright(c) 2012-2013 TJ Holowaychuk\n * Copyright(c) 2015 Andreas Lubbe\n * Copyright(c) 2015 Tiancheng \"Timothy\" Gu\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module variables.\n * @private\n */\n\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = escapeHtml;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n var str = '' + string;\n var match = matchHtmlRegExp.exec(str);\n\n if (!match) {\n return str;\n }\n\n var escape;\n var html = '';\n var index = 0;\n var lastIndex = 0;\n\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34: // \"\n escape = '"';\n break;\n case 38: // &\n escape = '&';\n break;\n case 39: // '\n escape = ''';\n break;\n case 60: // <\n escape = '<';\n break;\n case 62: // >\n escape = '>';\n break;\n default:\n continue;\n }\n\n if (lastIndex !== index) {\n html += str.substring(lastIndex, index);\n }\n\n lastIndex = index + 1;\n html += escape;\n }\n\n return lastIndex !== index\n ? html + str.substring(lastIndex, index)\n : html;\n}\n","module.exports = global[\"lunr\"] = require(\"-!./lunr.js\");","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","/**\n * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.8\n * Copyright (C) 2019 Oliver Nightingale\n * @license MIT\n */\n\n;(function(){\n\n/**\n * A convenience function for configuring and constructing\n * a new lunr Index.\n *\n * A lunr.Builder instance is created and the pipeline setup\n * with a trimmer, stop word filter and stemmer.\n *\n * This builder object is yielded to the configuration function\n * that is passed as a parameter, allowing the list of fields\n * and other builder parameters to be customised.\n *\n * All documents _must_ be added within the passed config function.\n *\n * @example\n * var idx = lunr(function () {\n * this.field('title')\n * this.field('body')\n * this.ref('id')\n *\n * documents.forEach(function (doc) {\n * this.add(doc)\n * }, this)\n * })\n *\n * @see {@link lunr.Builder}\n * @see {@link lunr.Pipeline}\n * @see {@link lunr.trimmer}\n * @see {@link lunr.stopWordFilter}\n * @see {@link lunr.stemmer}\n * @namespace {function} lunr\n */\nvar lunr = function (config) {\n var builder = new lunr.Builder\n\n builder.pipeline.add(\n lunr.trimmer,\n lunr.stopWordFilter,\n lunr.stemmer\n )\n\n builder.searchPipeline.add(\n lunr.stemmer\n )\n\n config.call(builder, builder)\n return builder.build()\n}\n\nlunr.version = \"2.3.8\"\n/*!\n * lunr.utils\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * A namespace containing utils for the rest of the lunr library\n * @namespace lunr.utils\n */\nlunr.utils = {}\n\n/**\n * Print a warning message to the console.\n *\n * @param {String} message The message to be printed.\n * @memberOf lunr.utils\n * @function\n */\nlunr.utils.warn = (function (global) {\n /* eslint-disable no-console */\n return function (message) {\n if (global.console && console.warn) {\n console.warn(message)\n }\n }\n /* eslint-enable no-console */\n})(this)\n\n/**\n * Convert an object to a string.\n *\n * In the case of `null` and `undefined` the function returns\n * the empty string, in all other cases the result of calling\n * `toString` on the passed object is returned.\n *\n * @param {Any} obj The object to convert to a string.\n * @return {String} string representation of the passed object.\n * @memberOf lunr.utils\n */\nlunr.utils.asString = function (obj) {\n if (obj === void 0 || obj === null) {\n return \"\"\n } else {\n return obj.toString()\n }\n}\n\n/**\n * Clones an object.\n *\n * Will create a copy of an existing object such that any mutations\n * on the copy cannot affect the original.\n *\n * Only shallow objects are supported, passing a nested object to this\n * function will cause a TypeError.\n *\n * Objects with primitives, and arrays of primitives are supported.\n *\n * @param {Object} obj The object to clone.\n * @return {Object} a clone of the passed object.\n * @throws {TypeError} when a nested object is passed.\n * @memberOf Utils\n */\nlunr.utils.clone = function (obj) {\n if (obj === null || obj === undefined) {\n return obj\n }\n\n var clone = Object.create(null),\n keys = Object.keys(obj)\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i],\n val = obj[key]\n\n if (Array.isArray(val)) {\n clone[key] = val.slice()\n continue\n }\n\n if (typeof val === 'string' ||\n typeof val === 'number' ||\n typeof val === 'boolean') {\n clone[key] = val\n continue\n }\n\n throw new TypeError(\"clone is not deep and does not support nested objects\")\n }\n\n return clone\n}\nlunr.FieldRef = function (docRef, fieldName, stringValue) {\n this.docRef = docRef\n this.fieldName = fieldName\n this._stringValue = stringValue\n}\n\nlunr.FieldRef.joiner = \"/\"\n\nlunr.FieldRef.fromString = function (s) {\n var n = s.indexOf(lunr.FieldRef.joiner)\n\n if (n === -1) {\n throw \"malformed field ref string\"\n }\n\n var fieldRef = s.slice(0, n),\n docRef = s.slice(n + 1)\n\n return new lunr.FieldRef (docRef, fieldRef, s)\n}\n\nlunr.FieldRef.prototype.toString = function () {\n if (this._stringValue == undefined) {\n this._stringValue = this.fieldName + lunr.FieldRef.joiner + this.docRef\n }\n\n return this._stringValue\n}\n/*!\n * lunr.Set\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * A lunr set.\n *\n * @constructor\n */\nlunr.Set = function (elements) {\n this.elements = Object.create(null)\n\n if (elements) {\n this.length = elements.length\n\n for (var i = 0; i < this.length; i++) {\n this.elements[elements[i]] = true\n }\n } else {\n this.length = 0\n }\n}\n\n/**\n * A complete set that contains all elements.\n *\n * @static\n * @readonly\n * @type {lunr.Set}\n */\nlunr.Set.complete = {\n intersect: function (other) {\n return other\n },\n\n union: function (other) {\n return other\n },\n\n contains: function () {\n return true\n }\n}\n\n/**\n * An empty set that contains no elements.\n *\n * @static\n * @readonly\n * @type {lunr.Set}\n */\nlunr.Set.empty = {\n intersect: function () {\n return this\n },\n\n union: function (other) {\n return other\n },\n\n contains: function () {\n return false\n }\n}\n\n/**\n * Returns true if this set contains the specified object.\n *\n * @param {object} object - Object whose presence in this set is to be tested.\n * @returns {boolean} - True if this set contains the specified object.\n */\nlunr.Set.prototype.contains = function (object) {\n return !!this.elements[object]\n}\n\n/**\n * Returns a new set containing only the elements that are present in both\n * this set and the specified set.\n *\n * @param {lunr.Set} other - set to intersect with this set.\n * @returns {lunr.Set} a new set that is the intersection of this and the specified set.\n */\n\nlunr.Set.prototype.intersect = function (other) {\n var a, b, elements, intersection = []\n\n if (other === lunr.Set.complete) {\n return this\n }\n\n if (other === lunr.Set.empty) {\n return other\n }\n\n if (this.length < other.length) {\n a = this\n b = other\n } else {\n a = other\n b = this\n }\n\n elements = Object.keys(a.elements)\n\n for (var i = 0; i < elements.length; i++) {\n var element = elements[i]\n if (element in b.elements) {\n intersection.push(element)\n }\n }\n\n return new lunr.Set (intersection)\n}\n\n/**\n * Returns a new set combining the elements of this and the specified set.\n *\n * @param {lunr.Set} other - set to union with this set.\n * @return {lunr.Set} a new set that is the union of this and the specified set.\n */\n\nlunr.Set.prototype.union = function (other) {\n if (other === lunr.Set.complete) {\n return lunr.Set.complete\n }\n\n if (other === lunr.Set.empty) {\n return this\n }\n\n return new lunr.Set(Object.keys(this.elements).concat(Object.keys(other.elements)))\n}\n/**\n * A function to calculate the inverse document frequency for\n * a posting. This is shared between the builder and the index\n *\n * @private\n * @param {object} posting - The posting for a given term\n * @param {number} documentCount - The total number of documents.\n */\nlunr.idf = function (posting, documentCount) {\n var documentsWithTerm = 0\n\n for (var fieldName in posting) {\n if (fieldName == '_index') continue // Ignore the term index, its not a field\n documentsWithTerm += Object.keys(posting[fieldName]).length\n }\n\n var x = (documentCount - documentsWithTerm + 0.5) / (documentsWithTerm + 0.5)\n\n return Math.log(1 + Math.abs(x))\n}\n\n/**\n * A token wraps a string representation of a token\n * as it is passed through the text processing pipeline.\n *\n * @constructor\n * @param {string} [str=''] - The string token being wrapped.\n * @param {object} [metadata={}] - Metadata associated with this token.\n */\nlunr.Token = function (str, metadata) {\n this.str = str || \"\"\n this.metadata = metadata || {}\n}\n\n/**\n * Returns the token string that is being wrapped by this object.\n *\n * @returns {string}\n */\nlunr.Token.prototype.toString = function () {\n return this.str\n}\n\n/**\n * A token update function is used when updating or optionally\n * when cloning a token.\n *\n * @callback lunr.Token~updateFunction\n * @param {string} str - The string representation of the token.\n * @param {Object} metadata - All metadata associated with this token.\n */\n\n/**\n * Applies the given function to the wrapped string token.\n *\n * @example\n * token.update(function (str, metadata) {\n * return str.toUpperCase()\n * })\n *\n * @param {lunr.Token~updateFunction} fn - A function to apply to the token string.\n * @returns {lunr.Token}\n */\nlunr.Token.prototype.update = function (fn) {\n this.str = fn(this.str, this.metadata)\n return this\n}\n\n/**\n * Creates a clone of this token. Optionally a function can be\n * applied to the cloned token.\n *\n * @param {lunr.Token~updateFunction} [fn] - An optional function to apply to the cloned token.\n * @returns {lunr.Token}\n */\nlunr.Token.prototype.clone = function (fn) {\n fn = fn || function (s) { return s }\n return new lunr.Token (fn(this.str, this.metadata), this.metadata)\n}\n/*!\n * lunr.tokenizer\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * A function for splitting a string into tokens ready to be inserted into\n * the search index. Uses `lunr.tokenizer.separator` to split strings, change\n * the value of this property to change how strings are split into tokens.\n *\n * This tokenizer will convert its parameter to a string by calling `toString` and\n * then will split this string on the character in `lunr.tokenizer.separator`.\n * Arrays will have their elements converted to strings and wrapped in a lunr.Token.\n *\n * Optional metadata can be passed to the tokenizer, this metadata will be cloned and\n * added as metadata to every token that is created from the object to be tokenized.\n *\n * @static\n * @param {?(string|object|object[])} obj - The object to convert into tokens\n * @param {?object} metadata - Optional metadata to associate with every token\n * @returns {lunr.Token[]}\n * @see {@link lunr.Pipeline}\n */\nlunr.tokenizer = function (obj, metadata) {\n if (obj == null || obj == undefined) {\n return []\n }\n\n if (Array.isArray(obj)) {\n return obj.map(function (t) {\n return new lunr.Token(\n lunr.utils.asString(t).toLowerCase(),\n lunr.utils.clone(metadata)\n )\n })\n }\n\n var str = obj.toString().toLowerCase(),\n len = str.length,\n tokens = []\n\n for (var sliceEnd = 0, sliceStart = 0; sliceEnd <= len; sliceEnd++) {\n var char = str.charAt(sliceEnd),\n sliceLength = sliceEnd - sliceStart\n\n if ((char.match(lunr.tokenizer.separator) || sliceEnd == len)) {\n\n if (sliceLength > 0) {\n var tokenMetadata = lunr.utils.clone(metadata) || {}\n tokenMetadata[\"position\"] = [sliceStart, sliceLength]\n tokenMetadata[\"index\"] = tokens.length\n\n tokens.push(\n new lunr.Token (\n str.slice(sliceStart, sliceEnd),\n tokenMetadata\n )\n )\n }\n\n sliceStart = sliceEnd + 1\n }\n\n }\n\n return tokens\n}\n\n/**\n * The separator used to split a string into tokens. Override this property to change the behaviour of\n * `lunr.tokenizer` behaviour when tokenizing strings. By default this splits on whitespace and hyphens.\n *\n * @static\n * @see lunr.tokenizer\n */\nlunr.tokenizer.separator = /[\\s\\-]+/\n/*!\n * lunr.Pipeline\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * lunr.Pipelines maintain an ordered list of functions to be applied to all\n * tokens in documents entering the search index and queries being ran against\n * the index.\n *\n * An instance of lunr.Index created with the lunr shortcut will contain a\n * pipeline with a stop word filter and an English language stemmer. Extra\n * functions can be added before or after either of these functions or these\n * default functions can be removed.\n *\n * When run the pipeline will call each function in turn, passing a token, the\n * index of that token in the original list of all tokens and finally a list of\n * all the original tokens.\n *\n * The output of functions in the pipeline will be passed to the next function\n * in the pipeline. To exclude a token from entering the index the function\n * should return undefined, the rest of the pipeline will not be called with\n * this token.\n *\n * For serialisation of pipelines to work, all functions used in an instance of\n * a pipeline should be registered with lunr.Pipeline. Registered functions can\n * then be loaded. If trying to load a serialised pipeline that uses functions\n * that are not registered an error will be thrown.\n *\n * If not planning on serialising the pipeline then registering pipeline functions\n * is not necessary.\n *\n * @constructor\n */\nlunr.Pipeline = function () {\n this._stack = []\n}\n\nlunr.Pipeline.registeredFunctions = Object.create(null)\n\n/**\n * A pipeline function maps lunr.Token to lunr.Token. A lunr.Token contains the token\n * string as well as all known metadata. A pipeline function can mutate the token string\n * or mutate (or add) metadata for a given token.\n *\n * A pipeline function can indicate that the passed token should be discarded by returning\n * null, undefined or an empty string. This token will not be passed to any downstream pipeline\n * functions and will not be added to the index.\n *\n * Multiple tokens can be returned by returning an array of tokens. Each token will be passed\n * to any downstream pipeline functions and all will returned tokens will be added to the index.\n *\n * Any number of pipeline functions may be chained together using a lunr.Pipeline.\n *\n * @interface lunr.PipelineFunction\n * @param {lunr.Token} token - A token from the document being processed.\n * @param {number} i - The index of this token in the complete list of tokens for this document/field.\n * @param {lunr.Token[]} tokens - All tokens for this document/field.\n * @returns {(?lunr.Token|lunr.Token[])}\n */\n\n/**\n * Register a function with the pipeline.\n *\n * Functions that are used in the pipeline should be registered if the pipeline\n * needs to be serialised, or a serialised pipeline needs to be loaded.\n *\n * Registering a function does not add it to a pipeline, functions must still be\n * added to instances of the pipeline for them to be used when running a pipeline.\n *\n * @param {lunr.PipelineFunction} fn - The function to check for.\n * @param {String} label - The label to register this function with\n */\nlunr.Pipeline.registerFunction = function (fn, label) {\n if (label in this.registeredFunctions) {\n lunr.utils.warn('Overwriting existing registered function: ' + label)\n }\n\n fn.label = label\n lunr.Pipeline.registeredFunctions[fn.label] = fn\n}\n\n/**\n * Warns if the function is not registered as a Pipeline function.\n *\n * @param {lunr.PipelineFunction} fn - The function to check for.\n * @private\n */\nlunr.Pipeline.warnIfFunctionNotRegistered = function (fn) {\n var isRegistered = fn.label && (fn.label in this.registeredFunctions)\n\n if (!isRegistered) {\n lunr.utils.warn('Function is not registered with pipeline. This may cause problems when serialising the index.\\n', fn)\n }\n}\n\n/**\n * Loads a previously serialised pipeline.\n *\n * All functions to be loaded must already be registered with lunr.Pipeline.\n * If any function from the serialised data has not been registered then an\n * error will be thrown.\n *\n * @param {Object} serialised - The serialised pipeline to load.\n * @returns {lunr.Pipeline}\n */\nlunr.Pipeline.load = function (serialised) {\n var pipeline = new lunr.Pipeline\n\n serialised.forEach(function (fnName) {\n var fn = lunr.Pipeline.registeredFunctions[fnName]\n\n if (fn) {\n pipeline.add(fn)\n } else {\n throw new Error('Cannot load unregistered function: ' + fnName)\n }\n })\n\n return pipeline\n}\n\n/**\n * Adds new functions to the end of the pipeline.\n *\n * Logs a warning if the function has not been registered.\n *\n * @param {lunr.PipelineFunction[]} functions - Any number of functions to add to the pipeline.\n */\nlunr.Pipeline.prototype.add = function () {\n var fns = Array.prototype.slice.call(arguments)\n\n fns.forEach(function (fn) {\n lunr.Pipeline.warnIfFunctionNotRegistered(fn)\n this._stack.push(fn)\n }, this)\n}\n\n/**\n * Adds a single function after a function that already exists in the\n * pipeline.\n *\n * Logs a warning if the function has not been registered.\n *\n * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline.\n * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline.\n */\nlunr.Pipeline.prototype.after = function (existingFn, newFn) {\n lunr.Pipeline.warnIfFunctionNotRegistered(newFn)\n\n var pos = this._stack.indexOf(existingFn)\n if (pos == -1) {\n throw new Error('Cannot find existingFn')\n }\n\n pos = pos + 1\n this._stack.splice(pos, 0, newFn)\n}\n\n/**\n * Adds a single function before a function that already exists in the\n * pipeline.\n *\n * Logs a warning if the function has not been registered.\n *\n * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline.\n * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline.\n */\nlunr.Pipeline.prototype.before = function (existingFn, newFn) {\n lunr.Pipeline.warnIfFunctionNotRegistered(newFn)\n\n var pos = this._stack.indexOf(existingFn)\n if (pos == -1) {\n throw new Error('Cannot find existingFn')\n }\n\n this._stack.splice(pos, 0, newFn)\n}\n\n/**\n * Removes a function from the pipeline.\n *\n * @param {lunr.PipelineFunction} fn The function to remove from the pipeline.\n */\nlunr.Pipeline.prototype.remove = function (fn) {\n var pos = this._stack.indexOf(fn)\n if (pos == -1) {\n return\n }\n\n this._stack.splice(pos, 1)\n}\n\n/**\n * Runs the current list of functions that make up the pipeline against the\n * passed tokens.\n *\n * @param {Array} tokens The tokens to run through the pipeline.\n * @returns {Array}\n */\nlunr.Pipeline.prototype.run = function (tokens) {\n var stackLength = this._stack.length\n\n for (var i = 0; i < stackLength; i++) {\n var fn = this._stack[i]\n var memo = []\n\n for (var j = 0; j < tokens.length; j++) {\n var result = fn(tokens[j], j, tokens)\n\n if (result === null || result === void 0 || result === '') continue\n\n if (Array.isArray(result)) {\n for (var k = 0; k < result.length; k++) {\n memo.push(result[k])\n }\n } else {\n memo.push(result)\n }\n }\n\n tokens = memo\n }\n\n return tokens\n}\n\n/**\n * Convenience method for passing a string through a pipeline and getting\n * strings out. This method takes care of wrapping the passed string in a\n * token and mapping the resulting tokens back to strings.\n *\n * @param {string} str - The string to pass through the pipeline.\n * @param {?object} metadata - Optional metadata to associate with the token\n * passed to the pipeline.\n * @returns {string[]}\n */\nlunr.Pipeline.prototype.runString = function (str, metadata) {\n var token = new lunr.Token (str, metadata)\n\n return this.run([token]).map(function (t) {\n return t.toString()\n })\n}\n\n/**\n * Resets the pipeline by removing any existing processors.\n *\n */\nlunr.Pipeline.prototype.reset = function () {\n this._stack = []\n}\n\n/**\n * Returns a representation of the pipeline ready for serialisation.\n *\n * Logs a warning if the function has not been registered.\n *\n * @returns {Array}\n */\nlunr.Pipeline.prototype.toJSON = function () {\n return this._stack.map(function (fn) {\n lunr.Pipeline.warnIfFunctionNotRegistered(fn)\n\n return fn.label\n })\n}\n/*!\n * lunr.Vector\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * A vector is used to construct the vector space of documents and queries. These\n * vectors support operations to determine the similarity between two documents or\n * a document and a query.\n *\n * Normally no parameters are required for initializing a vector, but in the case of\n * loading a previously dumped vector the raw elements can be provided to the constructor.\n *\n * For performance reasons vectors are implemented with a flat array, where an elements\n * index is immediately followed by its value. E.g. [index, value, index, value]. This\n * allows the underlying array to be as sparse as possible and still offer decent\n * performance when being used for vector calculations.\n *\n * @constructor\n * @param {Number[]} [elements] - The flat list of element index and element value pairs.\n */\nlunr.Vector = function (elements) {\n this._magnitude = 0\n this.elements = elements || []\n}\n\n\n/**\n * Calculates the position within the vector to insert a given index.\n *\n * This is used internally by insert and upsert. If there are duplicate indexes then\n * the position is returned as if the value for that index were to be updated, but it\n * is the callers responsibility to check whether there is a duplicate at that index\n *\n * @param {Number} insertIdx - The index at which the element should be inserted.\n * @returns {Number}\n */\nlunr.Vector.prototype.positionForIndex = function (index) {\n // For an empty vector the tuple can be inserted at the beginning\n if (this.elements.length == 0) {\n return 0\n }\n\n var start = 0,\n end = this.elements.length / 2,\n sliceLength = end - start,\n pivotPoint = Math.floor(sliceLength / 2),\n pivotIndex = this.elements[pivotPoint * 2]\n\n while (sliceLength > 1) {\n if (pivotIndex < index) {\n start = pivotPoint\n }\n\n if (pivotIndex > index) {\n end = pivotPoint\n }\n\n if (pivotIndex == index) {\n break\n }\n\n sliceLength = end - start\n pivotPoint = start + Math.floor(sliceLength / 2)\n pivotIndex = this.elements[pivotPoint * 2]\n }\n\n if (pivotIndex == index) {\n return pivotPoint * 2\n }\n\n if (pivotIndex > index) {\n return pivotPoint * 2\n }\n\n if (pivotIndex < index) {\n return (pivotPoint + 1) * 2\n }\n}\n\n/**\n * Inserts an element at an index within the vector.\n *\n * Does not allow duplicates, will throw an error if there is already an entry\n * for this index.\n *\n * @param {Number} insertIdx - The index at which the element should be inserted.\n * @param {Number} val - The value to be inserted into the vector.\n */\nlunr.Vector.prototype.insert = function (insertIdx, val) {\n this.upsert(insertIdx, val, function () {\n throw \"duplicate index\"\n })\n}\n\n/**\n * Inserts or updates an existing index within the vector.\n *\n * @param {Number} insertIdx - The index at which the element should be inserted.\n * @param {Number} val - The value to be inserted into the vector.\n * @param {function} fn - A function that is called for updates, the existing value and the\n * requested value are passed as arguments\n */\nlunr.Vector.prototype.upsert = function (insertIdx, val, fn) {\n this._magnitude = 0\n var position = this.positionForIndex(insertIdx)\n\n if (this.elements[position] == insertIdx) {\n this.elements[position + 1] = fn(this.elements[position + 1], val)\n } else {\n this.elements.splice(position, 0, insertIdx, val)\n }\n}\n\n/**\n * Calculates the magnitude of this vector.\n *\n * @returns {Number}\n */\nlunr.Vector.prototype.magnitude = function () {\n if (this._magnitude) return this._magnitude\n\n var sumOfSquares = 0,\n elementsLength = this.elements.length\n\n for (var i = 1; i < elementsLength; i += 2) {\n var val = this.elements[i]\n sumOfSquares += val * val\n }\n\n return this._magnitude = Math.sqrt(sumOfSquares)\n}\n\n/**\n * Calculates the dot product of this vector and another vector.\n *\n * @param {lunr.Vector} otherVector - The vector to compute the dot product with.\n * @returns {Number}\n */\nlunr.Vector.prototype.dot = function (otherVector) {\n var dotProduct = 0,\n a = this.elements, b = otherVector.elements,\n aLen = a.length, bLen = b.length,\n aVal = 0, bVal = 0,\n i = 0, j = 0\n\n while (i < aLen && j < bLen) {\n aVal = a[i], bVal = b[j]\n if (aVal < bVal) {\n i += 2\n } else if (aVal > bVal) {\n j += 2\n } else if (aVal == bVal) {\n dotProduct += a[i + 1] * b[j + 1]\n i += 2\n j += 2\n }\n }\n\n return dotProduct\n}\n\n/**\n * Calculates the similarity between this vector and another vector.\n *\n * @param {lunr.Vector} otherVector - The other vector to calculate the\n * similarity with.\n * @returns {Number}\n */\nlunr.Vector.prototype.similarity = function (otherVector) {\n return this.dot(otherVector) / this.magnitude() || 0\n}\n\n/**\n * Converts the vector to an array of the elements within the vector.\n *\n * @returns {Number[]}\n */\nlunr.Vector.prototype.toArray = function () {\n var output = new Array (this.elements.length / 2)\n\n for (var i = 1, j = 0; i < this.elements.length; i += 2, j++) {\n output[j] = this.elements[i]\n }\n\n return output\n}\n\n/**\n * A JSON serializable representation of the vector.\n *\n * @returns {Number[]}\n */\nlunr.Vector.prototype.toJSON = function () {\n return this.elements\n}\n/* eslint-disable */\n/*!\n * lunr.stemmer\n * Copyright (C) 2019 Oliver Nightingale\n * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt\n */\n\n/**\n * lunr.stemmer is an english language stemmer, this is a JavaScript\n * implementation of the PorterStemmer taken from http://tartarus.org/~martin\n *\n * @static\n * @implements {lunr.PipelineFunction}\n * @param {lunr.Token} token - The string to stem\n * @returns {lunr.Token}\n * @see {@link lunr.Pipeline}\n * @function\n */\nlunr.stemmer = (function(){\n var step2list = {\n \"ational\" : \"ate\",\n \"tional\" : \"tion\",\n \"enci\" : \"ence\",\n \"anci\" : \"ance\",\n \"izer\" : \"ize\",\n \"bli\" : \"ble\",\n \"alli\" : \"al\",\n \"entli\" : \"ent\",\n \"eli\" : \"e\",\n \"ousli\" : \"ous\",\n \"ization\" : \"ize\",\n \"ation\" : \"ate\",\n \"ator\" : \"ate\",\n \"alism\" : \"al\",\n \"iveness\" : \"ive\",\n \"fulness\" : \"ful\",\n \"ousness\" : \"ous\",\n \"aliti\" : \"al\",\n \"iviti\" : \"ive\",\n \"biliti\" : \"ble\",\n \"logi\" : \"log\"\n },\n\n step3list = {\n \"icate\" : \"ic\",\n \"ative\" : \"\",\n \"alize\" : \"al\",\n \"iciti\" : \"ic\",\n \"ical\" : \"ic\",\n \"ful\" : \"\",\n \"ness\" : \"\"\n },\n\n c = \"[^aeiou]\", // consonant\n v = \"[aeiouy]\", // vowel\n C = c + \"[^aeiouy]*\", // consonant sequence\n V = v + \"[aeiou]*\", // vowel sequence\n\n mgr0 = \"^(\" + C + \")?\" + V + C, // [C]VC... is m>0\n meq1 = \"^(\" + C + \")?\" + V + C + \"(\" + V + \")?$\", // [C]VC[V] is m=1\n mgr1 = \"^(\" + C + \")?\" + V + C + V + C, // [C]VCVC... is m>1\n s_v = \"^(\" + C + \")?\" + v; // vowel in stem\n\n var re_mgr0 = new RegExp(mgr0);\n var re_mgr1 = new RegExp(mgr1);\n var re_meq1 = new RegExp(meq1);\n var re_s_v = new RegExp(s_v);\n\n var re_1a = /^(.+?)(ss|i)es$/;\n var re2_1a = /^(.+?)([^s])s$/;\n var re_1b = /^(.+?)eed$/;\n var re2_1b = /^(.+?)(ed|ing)$/;\n var re_1b_2 = /.$/;\n var re2_1b_2 = /(at|bl|iz)$/;\n var re3_1b_2 = new RegExp(\"([^aeiouylsz])\\\\1$\");\n var re4_1b_2 = new RegExp(\"^\" + C + v + \"[^aeiouwxy]$\");\n\n var re_1c = /^(.+?[^aeiou])y$/;\n var re_2 = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;\n\n var re_3 = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;\n\n var re_4 = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;\n var re2_4 = /^(.+?)(s|t)(ion)$/;\n\n var re_5 = /^(.+?)e$/;\n var re_5_1 = /ll$/;\n var re3_5 = new RegExp(\"^\" + C + v + \"[^aeiouwxy]$\");\n\n var porterStemmer = function porterStemmer(w) {\n var stem,\n suffix,\n firstch,\n re,\n re2,\n re3,\n re4;\n\n if (w.length < 3) { return w; }\n\n firstch = w.substr(0,1);\n if (firstch == \"y\") {\n w = firstch.toUpperCase() + w.substr(1);\n }\n\n // Step 1a\n re = re_1a\n re2 = re2_1a;\n\n if (re.test(w)) { w = w.replace(re,\"$1$2\"); }\n else if (re2.test(w)) { w = w.replace(re2,\"$1$2\"); }\n\n // Step 1b\n re = re_1b;\n re2 = re2_1b;\n if (re.test(w)) {\n var fp = re.exec(w);\n re = re_mgr0;\n if (re.test(fp[1])) {\n re = re_1b_2;\n w = w.replace(re,\"\");\n }\n } else if (re2.test(w)) {\n var fp = re2.exec(w);\n stem = fp[1];\n re2 = re_s_v;\n if (re2.test(stem)) {\n w = stem;\n re2 = re2_1b_2;\n re3 = re3_1b_2;\n re4 = re4_1b_2;\n if (re2.test(w)) { w = w + \"e\"; }\n else if (re3.test(w)) { re = re_1b_2; w = w.replace(re,\"\"); }\n else if (re4.test(w)) { w = w + \"e\"; }\n }\n }\n\n // Step 1c - replace suffix y or Y by i if preceded by a non-vowel which is not the first letter of the word (so cry -> cri, by -> by, say -> say)\n re = re_1c;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n w = stem + \"i\";\n }\n\n // Step 2\n re = re_2;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n suffix = fp[2];\n re = re_mgr0;\n if (re.test(stem)) {\n w = stem + step2list[suffix];\n }\n }\n\n // Step 3\n re = re_3;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n suffix = fp[2];\n re = re_mgr0;\n if (re.test(stem)) {\n w = stem + step3list[suffix];\n }\n }\n\n // Step 4\n re = re_4;\n re2 = re2_4;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n re = re_mgr1;\n if (re.test(stem)) {\n w = stem;\n }\n } else if (re2.test(w)) {\n var fp = re2.exec(w);\n stem = fp[1] + fp[2];\n re2 = re_mgr1;\n if (re2.test(stem)) {\n w = stem;\n }\n }\n\n // Step 5\n re = re_5;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n re = re_mgr1;\n re2 = re_meq1;\n re3 = re3_5;\n if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) {\n w = stem;\n }\n }\n\n re = re_5_1;\n re2 = re_mgr1;\n if (re.test(w) && re2.test(w)) {\n re = re_1b_2;\n w = w.replace(re,\"\");\n }\n\n // and turn initial Y back to y\n\n if (firstch == \"y\") {\n w = firstch.toLowerCase() + w.substr(1);\n }\n\n return w;\n };\n\n return function (token) {\n return token.update(porterStemmer);\n }\n})();\n\nlunr.Pipeline.registerFunction(lunr.stemmer, 'stemmer')\n/*!\n * lunr.stopWordFilter\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * lunr.generateStopWordFilter builds a stopWordFilter function from the provided\n * list of stop words.\n *\n * The built in lunr.stopWordFilter is built using this generator and can be used\n * to generate custom stopWordFilters for applications or non English languages.\n *\n * @function\n * @param {Array} token The token to pass through the filter\n * @returns {lunr.PipelineFunction}\n * @see lunr.Pipeline\n * @see lunr.stopWordFilter\n */\nlunr.generateStopWordFilter = function (stopWords) {\n var words = stopWords.reduce(function (memo, stopWord) {\n memo[stopWord] = stopWord\n return memo\n }, {})\n\n return function (token) {\n if (token && words[token.toString()] !== token.toString()) return token\n }\n}\n\n/**\n * lunr.stopWordFilter is an English language stop word list filter, any words\n * contained in the list will not be passed through the filter.\n *\n * This is intended to be used in the Pipeline. If the token does not pass the\n * filter then undefined will be returned.\n *\n * @function\n * @implements {lunr.PipelineFunction}\n * @params {lunr.Token} token - A token to check for being a stop word.\n * @returns {lunr.Token}\n * @see {@link lunr.Pipeline}\n */\nlunr.stopWordFilter = lunr.generateStopWordFilter([\n 'a',\n 'able',\n 'about',\n 'across',\n 'after',\n 'all',\n 'almost',\n 'also',\n 'am',\n 'among',\n 'an',\n 'and',\n 'any',\n 'are',\n 'as',\n 'at',\n 'be',\n 'because',\n 'been',\n 'but',\n 'by',\n 'can',\n 'cannot',\n 'could',\n 'dear',\n 'did',\n 'do',\n 'does',\n 'either',\n 'else',\n 'ever',\n 'every',\n 'for',\n 'from',\n 'get',\n 'got',\n 'had',\n 'has',\n 'have',\n 'he',\n 'her',\n 'hers',\n 'him',\n 'his',\n 'how',\n 'however',\n 'i',\n 'if',\n 'in',\n 'into',\n 'is',\n 'it',\n 'its',\n 'just',\n 'least',\n 'let',\n 'like',\n 'likely',\n 'may',\n 'me',\n 'might',\n 'most',\n 'must',\n 'my',\n 'neither',\n 'no',\n 'nor',\n 'not',\n 'of',\n 'off',\n 'often',\n 'on',\n 'only',\n 'or',\n 'other',\n 'our',\n 'own',\n 'rather',\n 'said',\n 'say',\n 'says',\n 'she',\n 'should',\n 'since',\n 'so',\n 'some',\n 'than',\n 'that',\n 'the',\n 'their',\n 'them',\n 'then',\n 'there',\n 'these',\n 'they',\n 'this',\n 'tis',\n 'to',\n 'too',\n 'twas',\n 'us',\n 'wants',\n 'was',\n 'we',\n 'were',\n 'what',\n 'when',\n 'where',\n 'which',\n 'while',\n 'who',\n 'whom',\n 'why',\n 'will',\n 'with',\n 'would',\n 'yet',\n 'you',\n 'your'\n])\n\nlunr.Pipeline.registerFunction(lunr.stopWordFilter, 'stopWordFilter')\n/*!\n * lunr.trimmer\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * lunr.trimmer is a pipeline function for trimming non word\n * characters from the beginning and end of tokens before they\n * enter the index.\n *\n * This implementation may not work correctly for non latin\n * characters and should either be removed or adapted for use\n * with languages with non-latin characters.\n *\n * @static\n * @implements {lunr.PipelineFunction}\n * @param {lunr.Token} token The token to pass through the filter\n * @returns {lunr.Token}\n * @see lunr.Pipeline\n */\nlunr.trimmer = function (token) {\n return token.update(function (s) {\n return s.replace(/^\\W+/, '').replace(/\\W+$/, '')\n })\n}\n\nlunr.Pipeline.registerFunction(lunr.trimmer, 'trimmer')\n/*!\n * lunr.TokenSet\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * A token set is used to store the unique list of all tokens\n * within an index. Token sets are also used to represent an\n * incoming query to the index, this query token set and index\n * token set are then intersected to find which tokens to look\n * up in the inverted index.\n *\n * A token set can hold multiple tokens, as in the case of the\n * index token set, or it can hold a single token as in the\n * case of a simple query token set.\n *\n * Additionally token sets are used to perform wildcard matching.\n * Leading, contained and trailing wildcards are supported, and\n * from this edit distance matching can also be provided.\n *\n * Token sets are implemented as a minimal finite state automata,\n * where both common prefixes and suffixes are shared between tokens.\n * This helps to reduce the space used for storing the token set.\n *\n * @constructor\n */\nlunr.TokenSet = function () {\n this.final = false\n this.edges = {}\n this.id = lunr.TokenSet._nextId\n lunr.TokenSet._nextId += 1\n}\n\n/**\n * Keeps track of the next, auto increment, identifier to assign\n * to a new tokenSet.\n *\n * TokenSets require a unique identifier to be correctly minimised.\n *\n * @private\n */\nlunr.TokenSet._nextId = 1\n\n/**\n * Creates a TokenSet instance from the given sorted array of words.\n *\n * @param {String[]} arr - A sorted array of strings to create the set from.\n * @returns {lunr.TokenSet}\n * @throws Will throw an error if the input array is not sorted.\n */\nlunr.TokenSet.fromArray = function (arr) {\n var builder = new lunr.TokenSet.Builder\n\n for (var i = 0, len = arr.length; i < len; i++) {\n builder.insert(arr[i])\n }\n\n builder.finish()\n return builder.root\n}\n\n/**\n * Creates a token set from a query clause.\n *\n * @private\n * @param {Object} clause - A single clause from lunr.Query.\n * @param {string} clause.term - The query clause term.\n * @param {number} [clause.editDistance] - The optional edit distance for the term.\n * @returns {lunr.TokenSet}\n */\nlunr.TokenSet.fromClause = function (clause) {\n if ('editDistance' in clause) {\n return lunr.TokenSet.fromFuzzyString(clause.term, clause.editDistance)\n } else {\n return lunr.TokenSet.fromString(clause.term)\n }\n}\n\n/**\n * Creates a token set representing a single string with a specified\n * edit distance.\n *\n * Insertions, deletions, substitutions and transpositions are each\n * treated as an edit distance of 1.\n *\n * Increasing the allowed edit distance will have a dramatic impact\n * on the performance of both creating and intersecting these TokenSets.\n * It is advised to keep the edit distance less than 3.\n *\n * @param {string} str - The string to create the token set from.\n * @param {number} editDistance - The allowed edit distance to match.\n * @returns {lunr.Vector}\n */\nlunr.TokenSet.fromFuzzyString = function (str, editDistance) {\n var root = new lunr.TokenSet\n\n var stack = [{\n node: root,\n editsRemaining: editDistance,\n str: str\n }]\n\n while (stack.length) {\n var frame = stack.pop()\n\n // no edit\n if (frame.str.length > 0) {\n var char = frame.str.charAt(0),\n noEditNode\n\n if (char in frame.node.edges) {\n noEditNode = frame.node.edges[char]\n } else {\n noEditNode = new lunr.TokenSet\n frame.node.edges[char] = noEditNode\n }\n\n if (frame.str.length == 1) {\n noEditNode.final = true\n }\n\n stack.push({\n node: noEditNode,\n editsRemaining: frame.editsRemaining,\n str: frame.str.slice(1)\n })\n }\n\n if (frame.editsRemaining == 0) {\n continue\n }\n\n // insertion\n if (\"*\" in frame.node.edges) {\n var insertionNode = frame.node.edges[\"*\"]\n } else {\n var insertionNode = new lunr.TokenSet\n frame.node.edges[\"*\"] = insertionNode\n }\n\n if (frame.str.length == 0) {\n insertionNode.final = true\n }\n\n stack.push({\n node: insertionNode,\n editsRemaining: frame.editsRemaining - 1,\n str: frame.str\n })\n\n // deletion\n // can only do a deletion if we have enough edits remaining\n // and if there are characters left to delete in the string\n if (frame.str.length > 1) {\n stack.push({\n node: frame.node,\n editsRemaining: frame.editsRemaining - 1,\n str: frame.str.slice(1)\n })\n }\n\n // deletion\n // just removing the last character from the str\n if (frame.str.length == 1) {\n frame.node.final = true\n }\n\n // substitution\n // can only do a substitution if we have enough edits remaining\n // and if there are characters left to substitute\n if (frame.str.length >= 1) {\n if (\"*\" in frame.node.edges) {\n var substitutionNode = frame.node.edges[\"*\"]\n } else {\n var substitutionNode = new lunr.TokenSet\n frame.node.edges[\"*\"] = substitutionNode\n }\n\n if (frame.str.length == 1) {\n substitutionNode.final = true\n }\n\n stack.push({\n node: substitutionNode,\n editsRemaining: frame.editsRemaining - 1,\n str: frame.str.slice(1)\n })\n }\n\n // transposition\n // can only do a transposition if there are edits remaining\n // and there are enough characters to transpose\n if (frame.str.length > 1) {\n var charA = frame.str.charAt(0),\n charB = frame.str.charAt(1),\n transposeNode\n\n if (charB in frame.node.edges) {\n transposeNode = frame.node.edges[charB]\n } else {\n transposeNode = new lunr.TokenSet\n frame.node.edges[charB] = transposeNode\n }\n\n if (frame.str.length == 1) {\n transposeNode.final = true\n }\n\n stack.push({\n node: transposeNode,\n editsRemaining: frame.editsRemaining - 1,\n str: charA + frame.str.slice(2)\n })\n }\n }\n\n return root\n}\n\n/**\n * Creates a TokenSet from a string.\n *\n * The string may contain one or more wildcard characters (*)\n * that will allow wildcard matching when intersecting with\n * another TokenSet.\n *\n * @param {string} str - The string to create a TokenSet from.\n * @returns {lunr.TokenSet}\n */\nlunr.TokenSet.fromString = function (str) {\n var node = new lunr.TokenSet,\n root = node\n\n /*\n * Iterates through all characters within the passed string\n * appending a node for each character.\n *\n * When a wildcard character is found then a self\n * referencing edge is introduced to continually match\n * any number of any characters.\n */\n for (var i = 0, len = str.length; i < len; i++) {\n var char = str[i],\n final = (i == len - 1)\n\n if (char == \"*\") {\n node.edges[char] = node\n node.final = final\n\n } else {\n var next = new lunr.TokenSet\n next.final = final\n\n node.edges[char] = next\n node = next\n }\n }\n\n return root\n}\n\n/**\n * Converts this TokenSet into an array of strings\n * contained within the TokenSet.\n *\n * This is not intended to be used on a TokenSet that\n * contains wildcards, in these cases the results are\n * undefined and are likely to cause an infinite loop.\n *\n * @returns {string[]}\n */\nlunr.TokenSet.prototype.toArray = function () {\n var words = []\n\n var stack = [{\n prefix: \"\",\n node: this\n }]\n\n while (stack.length) {\n var frame = stack.pop(),\n edges = Object.keys(frame.node.edges),\n len = edges.length\n\n if (frame.node.final) {\n /* In Safari, at this point the prefix is sometimes corrupted, see:\n * https://github.com/olivernn/lunr.js/issues/279 Calling any\n * String.prototype method forces Safari to \"cast\" this string to what\n * it's supposed to be, fixing the bug. */\n frame.prefix.charAt(0)\n words.push(frame.prefix)\n }\n\n for (var i = 0; i < len; i++) {\n var edge = edges[i]\n\n stack.push({\n prefix: frame.prefix.concat(edge),\n node: frame.node.edges[edge]\n })\n }\n }\n\n return words\n}\n\n/**\n * Generates a string representation of a TokenSet.\n *\n * This is intended to allow TokenSets to be used as keys\n * in objects, largely to aid the construction and minimisation\n * of a TokenSet. As such it is not designed to be a human\n * friendly representation of the TokenSet.\n *\n * @returns {string}\n */\nlunr.TokenSet.prototype.toString = function () {\n // NOTE: Using Object.keys here as this.edges is very likely\n // to enter 'hash-mode' with many keys being added\n //\n // avoiding a for-in loop here as it leads to the function\n // being de-optimised (at least in V8). From some simple\n // benchmarks the performance is comparable, but allowing\n // V8 to optimize may mean easy performance wins in the future.\n\n if (this._str) {\n return this._str\n }\n\n var str = this.final ? '1' : '0',\n labels = Object.keys(this.edges).sort(),\n len = labels.length\n\n for (var i = 0; i < len; i++) {\n var label = labels[i],\n node = this.edges[label]\n\n str = str + label + node.id\n }\n\n return str\n}\n\n/**\n * Returns a new TokenSet that is the intersection of\n * this TokenSet and the passed TokenSet.\n *\n * This intersection will take into account any wildcards\n * contained within the TokenSet.\n *\n * @param {lunr.TokenSet} b - An other TokenSet to intersect with.\n * @returns {lunr.TokenSet}\n */\nlunr.TokenSet.prototype.intersect = function (b) {\n var output = new lunr.TokenSet,\n frame = undefined\n\n var stack = [{\n qNode: b,\n output: output,\n node: this\n }]\n\n while (stack.length) {\n frame = stack.pop()\n\n // NOTE: As with the #toString method, we are using\n // Object.keys and a for loop instead of a for-in loop\n // as both of these objects enter 'hash' mode, causing\n // the function to be de-optimised in V8\n var qEdges = Object.keys(frame.qNode.edges),\n qLen = qEdges.length,\n nEdges = Object.keys(frame.node.edges),\n nLen = nEdges.length\n\n for (var q = 0; q < qLen; q++) {\n var qEdge = qEdges[q]\n\n for (var n = 0; n < nLen; n++) {\n var nEdge = nEdges[n]\n\n if (nEdge == qEdge || qEdge == '*') {\n var node = frame.node.edges[nEdge],\n qNode = frame.qNode.edges[qEdge],\n final = node.final && qNode.final,\n next = undefined\n\n if (nEdge in frame.output.edges) {\n // an edge already exists for this character\n // no need to create a new node, just set the finality\n // bit unless this node is already final\n next = frame.output.edges[nEdge]\n next.final = next.final || final\n\n } else {\n // no edge exists yet, must create one\n // set the finality bit and insert it\n // into the output\n next = new lunr.TokenSet\n next.final = final\n frame.output.edges[nEdge] = next\n }\n\n stack.push({\n qNode: qNode,\n output: next,\n node: node\n })\n }\n }\n }\n }\n\n return output\n}\nlunr.TokenSet.Builder = function () {\n this.previousWord = \"\"\n this.root = new lunr.TokenSet\n this.uncheckedNodes = []\n this.minimizedNodes = {}\n}\n\nlunr.TokenSet.Builder.prototype.insert = function (word) {\n var node,\n commonPrefix = 0\n\n if (word < this.previousWord) {\n throw new Error (\"Out of order word insertion\")\n }\n\n for (var i = 0; i < word.length && i < this.previousWord.length; i++) {\n if (word[i] != this.previousWord[i]) break\n commonPrefix++\n }\n\n this.minimize(commonPrefix)\n\n if (this.uncheckedNodes.length == 0) {\n node = this.root\n } else {\n node = this.uncheckedNodes[this.uncheckedNodes.length - 1].child\n }\n\n for (var i = commonPrefix; i < word.length; i++) {\n var nextNode = new lunr.TokenSet,\n char = word[i]\n\n node.edges[char] = nextNode\n\n this.uncheckedNodes.push({\n parent: node,\n char: char,\n child: nextNode\n })\n\n node = nextNode\n }\n\n node.final = true\n this.previousWord = word\n}\n\nlunr.TokenSet.Builder.prototype.finish = function () {\n this.minimize(0)\n}\n\nlunr.TokenSet.Builder.prototype.minimize = function (downTo) {\n for (var i = this.uncheckedNodes.length - 1; i >= downTo; i--) {\n var node = this.uncheckedNodes[i],\n childKey = node.child.toString()\n\n if (childKey in this.minimizedNodes) {\n node.parent.edges[node.char] = this.minimizedNodes[childKey]\n } else {\n // Cache the key for this node since\n // we know it can't change anymore\n node.child._str = childKey\n\n this.minimizedNodes[childKey] = node.child\n }\n\n this.uncheckedNodes.pop()\n }\n}\n/*!\n * lunr.Index\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * An index contains the built index of all documents and provides a query interface\n * to the index.\n *\n * Usually instances of lunr.Index will not be created using this constructor, instead\n * lunr.Builder should be used to construct new indexes, or lunr.Index.load should be\n * used to load previously built and serialized indexes.\n *\n * @constructor\n * @param {Object} attrs - The attributes of the built search index.\n * @param {Object} attrs.invertedIndex - An index of term/field to document reference.\n * @param {Object} attrs.fieldVectors - Field vectors\n * @param {lunr.TokenSet} attrs.tokenSet - An set of all corpus tokens.\n * @param {string[]} attrs.fields - The names of indexed document fields.\n * @param {lunr.Pipeline} attrs.pipeline - The pipeline to use for search terms.\n */\nlunr.Index = function (attrs) {\n this.invertedIndex = attrs.invertedIndex\n this.fieldVectors = attrs.fieldVectors\n this.tokenSet = attrs.tokenSet\n this.fields = attrs.fields\n this.pipeline = attrs.pipeline\n}\n\n/**\n * A result contains details of a document matching a search query.\n * @typedef {Object} lunr.Index~Result\n * @property {string} ref - The reference of the document this result represents.\n * @property {number} score - A number between 0 and 1 representing how similar this document is to the query.\n * @property {lunr.MatchData} matchData - Contains metadata about this match including which term(s) caused the match.\n */\n\n/**\n * Although lunr provides the ability to create queries using lunr.Query, it also provides a simple\n * query language which itself is parsed into an instance of lunr.Query.\n *\n * For programmatically building queries it is advised to directly use lunr.Query, the query language\n * is best used for human entered text rather than program generated text.\n *\n * At its simplest queries can just be a single term, e.g. `hello`, multiple terms are also supported\n * and will be combined with OR, e.g `hello world` will match documents that contain either 'hello'\n * or 'world', though those that contain both will rank higher in the results.\n *\n * Wildcards can be included in terms to match one or more unspecified characters, these wildcards can\n * be inserted anywhere within the term, and more than one wildcard can exist in a single term. Adding\n * wildcards will increase the number of documents that will be found but can also have a negative\n * impact on query performance, especially with wildcards at the beginning of a term.\n *\n * Terms can be restricted to specific fields, e.g. `title:hello`, only documents with the term\n * hello in the title field will match this query. Using a field not present in the index will lead\n * to an error being thrown.\n *\n * Modifiers can also be added to terms, lunr supports edit distance and boost modifiers on terms. A term\n * boost will make documents matching that term score higher, e.g. `foo^5`. Edit distance is also supported\n * to provide fuzzy matching, e.g. 'hello~2' will match documents with hello with an edit distance of 2.\n * Avoid large values for edit distance to improve query performance.\n *\n * Each term also supports a presence modifier. By default a term's presence in document is optional, however\n * this can be changed to either required or prohibited. For a term's presence to be required in a document the\n * term should be prefixed with a '+', e.g. `+foo bar` is a search for documents that must contain 'foo' and\n * optionally contain 'bar'. Conversely a leading '-' sets the terms presence to prohibited, i.e. it must not\n * appear in a document, e.g. `-foo bar` is a search for documents that do not contain 'foo' but may contain 'bar'.\n *\n * To escape special characters the backslash character '\\' can be used, this allows searches to include\n * characters that would normally be considered modifiers, e.g. `foo\\~2` will search for a term \"foo~2\" instead\n * of attempting to apply a boost of 2 to the search term \"foo\".\n *\n * @typedef {string} lunr.Index~QueryString\n * @example Simple single term query\n * hello\n * @example Multiple term query\n * hello world\n * @example term scoped to a field\n * title:hello\n * @example term with a boost of 10\n * hello^10\n * @example term with an edit distance of 2\n * hello~2\n * @example terms with presence modifiers\n * -foo +bar baz\n */\n\n/**\n * Performs a search against the index using lunr query syntax.\n *\n * Results will be returned sorted by their score, the most relevant results\n * will be returned first. For details on how the score is calculated, please see\n * the {@link https://lunrjs.com/guides/searching.html#scoring|guide}.\n *\n * For more programmatic querying use lunr.Index#query.\n *\n * @param {lunr.Index~QueryString} queryString - A string containing a lunr query.\n * @throws {lunr.QueryParseError} If the passed query string cannot be parsed.\n * @returns {lunr.Index~Result[]}\n */\nlunr.Index.prototype.search = function (queryString) {\n return this.query(function (query) {\n var parser = new lunr.QueryParser(queryString, query)\n parser.parse()\n })\n}\n\n/**\n * A query builder callback provides a query object to be used to express\n * the query to perform on the index.\n *\n * @callback lunr.Index~queryBuilder\n * @param {lunr.Query} query - The query object to build up.\n * @this lunr.Query\n */\n\n/**\n * Performs a query against the index using the yielded lunr.Query object.\n *\n * If performing programmatic queries against the index, this method is preferred\n * over lunr.Index#search so as to avoid the additional query parsing overhead.\n *\n * A query object is yielded to the supplied function which should be used to\n * express the query to be run against the index.\n *\n * Note that although this function takes a callback parameter it is _not_ an\n * asynchronous operation, the callback is just yielded a query object to be\n * customized.\n *\n * @param {lunr.Index~queryBuilder} fn - A function that is used to build the query.\n * @returns {lunr.Index~Result[]}\n */\nlunr.Index.prototype.query = function (fn) {\n // for each query clause\n // * process terms\n // * expand terms from token set\n // * find matching documents and metadata\n // * get document vectors\n // * score documents\n\n var query = new lunr.Query(this.fields),\n matchingFields = Object.create(null),\n queryVectors = Object.create(null),\n termFieldCache = Object.create(null),\n requiredMatches = Object.create(null),\n prohibitedMatches = Object.create(null)\n\n /*\n * To support field level boosts a query vector is created per\n * field. An empty vector is eagerly created to support negated\n * queries.\n */\n for (var i = 0; i < this.fields.length; i++) {\n queryVectors[this.fields[i]] = new lunr.Vector\n }\n\n fn.call(query, query)\n\n for (var i = 0; i < query.clauses.length; i++) {\n /*\n * Unless the pipeline has been disabled for this term, which is\n * the case for terms with wildcards, we need to pass the clause\n * term through the search pipeline. A pipeline returns an array\n * of processed terms. Pipeline functions may expand the passed\n * term, which means we may end up performing multiple index lookups\n * for a single query term.\n */\n var clause = query.clauses[i],\n terms = null,\n clauseMatches = lunr.Set.complete\n\n if (clause.usePipeline) {\n terms = this.pipeline.runString(clause.term, {\n fields: clause.fields\n })\n } else {\n terms = [clause.term]\n }\n\n for (var m = 0; m < terms.length; m++) {\n var term = terms[m]\n\n /*\n * Each term returned from the pipeline needs to use the same query\n * clause object, e.g. the same boost and or edit distance. The\n * simplest way to do this is to re-use the clause object but mutate\n * its term property.\n */\n clause.term = term\n\n /*\n * From the term in the clause we create a token set which will then\n * be used to intersect the indexes token set to get a list of terms\n * to lookup in the inverted index\n */\n var termTokenSet = lunr.TokenSet.fromClause(clause),\n expandedTerms = this.tokenSet.intersect(termTokenSet).toArray()\n\n /*\n * If a term marked as required does not exist in the tokenSet it is\n * impossible for the search to return any matches. We set all the field\n * scoped required matches set to empty and stop examining any further\n * clauses.\n */\n if (expandedTerms.length === 0 && clause.presence === lunr.Query.presence.REQUIRED) {\n for (var k = 0; k < clause.fields.length; k++) {\n var field = clause.fields[k]\n requiredMatches[field] = lunr.Set.empty\n }\n\n break\n }\n\n for (var j = 0; j < expandedTerms.length; j++) {\n /*\n * For each term get the posting and termIndex, this is required for\n * building the query vector.\n */\n var expandedTerm = expandedTerms[j],\n posting = this.invertedIndex[expandedTerm],\n termIndex = posting._index\n\n for (var k = 0; k < clause.fields.length; k++) {\n /*\n * For each field that this query term is scoped by (by default\n * all fields are in scope) we need to get all the document refs\n * that have this term in that field.\n *\n * The posting is the entry in the invertedIndex for the matching\n * term from above.\n */\n var field = clause.fields[k],\n fieldPosting = posting[field],\n matchingDocumentRefs = Object.keys(fieldPosting),\n termField = expandedTerm + \"/\" + field,\n matchingDocumentsSet = new lunr.Set(matchingDocumentRefs)\n\n /*\n * if the presence of this term is required ensure that the matching\n * documents are added to the set of required matches for this clause.\n *\n */\n if (clause.presence == lunr.Query.presence.REQUIRED) {\n clauseMatches = clauseMatches.union(matchingDocumentsSet)\n\n if (requiredMatches[field] === undefined) {\n requiredMatches[field] = lunr.Set.complete\n }\n }\n\n /*\n * if the presence of this term is prohibited ensure that the matching\n * documents are added to the set of prohibited matches for this field,\n * creating that set if it does not yet exist.\n */\n if (clause.presence == lunr.Query.presence.PROHIBITED) {\n if (prohibitedMatches[field] === undefined) {\n prohibitedMatches[field] = lunr.Set.empty\n }\n\n prohibitedMatches[field] = prohibitedMatches[field].union(matchingDocumentsSet)\n\n /*\n * Prohibited matches should not be part of the query vector used for\n * similarity scoring and no metadata should be extracted so we continue\n * to the next field\n */\n continue\n }\n\n /*\n * The query field vector is populated using the termIndex found for\n * the term and a unit value with the appropriate boost applied.\n * Using upsert because there could already be an entry in the vector\n * for the term we are working with. In that case we just add the scores\n * together.\n */\n queryVectors[field].upsert(termIndex, clause.boost, function (a, b) { return a + b })\n\n /**\n * If we've already seen this term, field combo then we've already collected\n * the matching documents and metadata, no need to go through all that again\n */\n if (termFieldCache[termField]) {\n continue\n }\n\n for (var l = 0; l < matchingDocumentRefs.length; l++) {\n /*\n * All metadata for this term/field/document triple\n * are then extracted and collected into an instance\n * of lunr.MatchData ready to be returned in the query\n * results\n */\n var matchingDocumentRef = matchingDocumentRefs[l],\n matchingFieldRef = new lunr.FieldRef (matchingDocumentRef, field),\n metadata = fieldPosting[matchingDocumentRef],\n fieldMatch\n\n if ((fieldMatch = matchingFields[matchingFieldRef]) === undefined) {\n matchingFields[matchingFieldRef] = new lunr.MatchData (expandedTerm, field, metadata)\n } else {\n fieldMatch.add(expandedTerm, field, metadata)\n }\n\n }\n\n termFieldCache[termField] = true\n }\n }\n }\n\n /**\n * If the presence was required we need to update the requiredMatches field sets.\n * We do this after all fields for the term have collected their matches because\n * the clause terms presence is required in _any_ of the fields not _all_ of the\n * fields.\n */\n if (clause.presence === lunr.Query.presence.REQUIRED) {\n for (var k = 0; k < clause.fields.length; k++) {\n var field = clause.fields[k]\n requiredMatches[field] = requiredMatches[field].intersect(clauseMatches)\n }\n }\n }\n\n /**\n * Need to combine the field scoped required and prohibited\n * matching documents into a global set of required and prohibited\n * matches\n */\n var allRequiredMatches = lunr.Set.complete,\n allProhibitedMatches = lunr.Set.empty\n\n for (var i = 0; i < this.fields.length; i++) {\n var field = this.fields[i]\n\n if (requiredMatches[field]) {\n allRequiredMatches = allRequiredMatches.intersect(requiredMatches[field])\n }\n\n if (prohibitedMatches[field]) {\n allProhibitedMatches = allProhibitedMatches.union(prohibitedMatches[field])\n }\n }\n\n var matchingFieldRefs = Object.keys(matchingFields),\n results = [],\n matches = Object.create(null)\n\n /*\n * If the query is negated (contains only prohibited terms)\n * we need to get _all_ fieldRefs currently existing in the\n * index. This is only done when we know that the query is\n * entirely prohibited terms to avoid any cost of getting all\n * fieldRefs unnecessarily.\n *\n * Additionally, blank MatchData must be created to correctly\n * populate the results.\n */\n if (query.isNegated()) {\n matchingFieldRefs = Object.keys(this.fieldVectors)\n\n for (var i = 0; i < matchingFieldRefs.length; i++) {\n var matchingFieldRef = matchingFieldRefs[i]\n var fieldRef = lunr.FieldRef.fromString(matchingFieldRef)\n matchingFields[matchingFieldRef] = new lunr.MatchData\n }\n }\n\n for (var i = 0; i < matchingFieldRefs.length; i++) {\n /*\n * Currently we have document fields that match the query, but we\n * need to return documents. The matchData and scores are combined\n * from multiple fields belonging to the same document.\n *\n * Scores are calculated by field, using the query vectors created\n * above, and combined into a final document score using addition.\n */\n var fieldRef = lunr.FieldRef.fromString(matchingFieldRefs[i]),\n docRef = fieldRef.docRef\n\n if (!allRequiredMatches.contains(docRef)) {\n continue\n }\n\n if (allProhibitedMatches.contains(docRef)) {\n continue\n }\n\n var fieldVector = this.fieldVectors[fieldRef],\n score = queryVectors[fieldRef.fieldName].similarity(fieldVector),\n docMatch\n\n if ((docMatch = matches[docRef]) !== undefined) {\n docMatch.score += score\n docMatch.matchData.combine(matchingFields[fieldRef])\n } else {\n var match = {\n ref: docRef,\n score: score,\n matchData: matchingFields[fieldRef]\n }\n matches[docRef] = match\n results.push(match)\n }\n }\n\n /*\n * Sort the results objects by score, highest first.\n */\n return results.sort(function (a, b) {\n return b.score - a.score\n })\n}\n\n/**\n * Prepares the index for JSON serialization.\n *\n * The schema for this JSON blob will be described in a\n * separate JSON schema file.\n *\n * @returns {Object}\n */\nlunr.Index.prototype.toJSON = function () {\n var invertedIndex = Object.keys(this.invertedIndex)\n .sort()\n .map(function (term) {\n return [term, this.invertedIndex[term]]\n }, this)\n\n var fieldVectors = Object.keys(this.fieldVectors)\n .map(function (ref) {\n return [ref, this.fieldVectors[ref].toJSON()]\n }, this)\n\n return {\n version: lunr.version,\n fields: this.fields,\n fieldVectors: fieldVectors,\n invertedIndex: invertedIndex,\n pipeline: this.pipeline.toJSON()\n }\n}\n\n/**\n * Loads a previously serialized lunr.Index\n *\n * @param {Object} serializedIndex - A previously serialized lunr.Index\n * @returns {lunr.Index}\n */\nlunr.Index.load = function (serializedIndex) {\n var attrs = {},\n fieldVectors = {},\n serializedVectors = serializedIndex.fieldVectors,\n invertedIndex = Object.create(null),\n serializedInvertedIndex = serializedIndex.invertedIndex,\n tokenSetBuilder = new lunr.TokenSet.Builder,\n pipeline = lunr.Pipeline.load(serializedIndex.pipeline)\n\n if (serializedIndex.version != lunr.version) {\n lunr.utils.warn(\"Version mismatch when loading serialised index. Current version of lunr '\" + lunr.version + \"' does not match serialized index '\" + serializedIndex.version + \"'\")\n }\n\n for (var i = 0; i < serializedVectors.length; i++) {\n var tuple = serializedVectors[i],\n ref = tuple[0],\n elements = tuple[1]\n\n fieldVectors[ref] = new lunr.Vector(elements)\n }\n\n for (var i = 0; i < serializedInvertedIndex.length; i++) {\n var tuple = serializedInvertedIndex[i],\n term = tuple[0],\n posting = tuple[1]\n\n tokenSetBuilder.insert(term)\n invertedIndex[term] = posting\n }\n\n tokenSetBuilder.finish()\n\n attrs.fields = serializedIndex.fields\n\n attrs.fieldVectors = fieldVectors\n attrs.invertedIndex = invertedIndex\n attrs.tokenSet = tokenSetBuilder.root\n attrs.pipeline = pipeline\n\n return new lunr.Index(attrs)\n}\n/*!\n * lunr.Builder\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * lunr.Builder performs indexing on a set of documents and\n * returns instances of lunr.Index ready for querying.\n *\n * All configuration of the index is done via the builder, the\n * fields to index, the document reference, the text processing\n * pipeline and document scoring parameters are all set on the\n * builder before indexing.\n *\n * @constructor\n * @property {string} _ref - Internal reference to the document reference field.\n * @property {string[]} _fields - Internal reference to the document fields to index.\n * @property {object} invertedIndex - The inverted index maps terms to document fields.\n * @property {object} documentTermFrequencies - Keeps track of document term frequencies.\n * @property {object} documentLengths - Keeps track of the length of documents added to the index.\n * @property {lunr.tokenizer} tokenizer - Function for splitting strings into tokens for indexing.\n * @property {lunr.Pipeline} pipeline - The pipeline performs text processing on tokens before indexing.\n * @property {lunr.Pipeline} searchPipeline - A pipeline for processing search terms before querying the index.\n * @property {number} documentCount - Keeps track of the total number of documents indexed.\n * @property {number} _b - A parameter to control field length normalization, setting this to 0 disabled normalization, 1 fully normalizes field lengths, the default value is 0.75.\n * @property {number} _k1 - A parameter to control how quickly an increase in term frequency results in term frequency saturation, the default value is 1.2.\n * @property {number} termIndex - A counter incremented for each unique term, used to identify a terms position in the vector space.\n * @property {array} metadataWhitelist - A list of metadata keys that have been whitelisted for entry in the index.\n */\nlunr.Builder = function () {\n this._ref = \"id\"\n this._fields = Object.create(null)\n this._documents = Object.create(null)\n this.invertedIndex = Object.create(null)\n this.fieldTermFrequencies = {}\n this.fieldLengths = {}\n this.tokenizer = lunr.tokenizer\n this.pipeline = new lunr.Pipeline\n this.searchPipeline = new lunr.Pipeline\n this.documentCount = 0\n this._b = 0.75\n this._k1 = 1.2\n this.termIndex = 0\n this.metadataWhitelist = []\n}\n\n/**\n * Sets the document field used as the document reference. Every document must have this field.\n * The type of this field in the document should be a string, if it is not a string it will be\n * coerced into a string by calling toString.\n *\n * The default ref is 'id'.\n *\n * The ref should _not_ be changed during indexing, it should be set before any documents are\n * added to the index. Changing it during indexing can lead to inconsistent results.\n *\n * @param {string} ref - The name of the reference field in the document.\n */\nlunr.Builder.prototype.ref = function (ref) {\n this._ref = ref\n}\n\n/**\n * A function that is used to extract a field from a document.\n *\n * Lunr expects a field to be at the top level of a document, if however the field\n * is deeply nested within a document an extractor function can be used to extract\n * the right field for indexing.\n *\n * @callback fieldExtractor\n * @param {object} doc - The document being added to the index.\n * @returns {?(string|object|object[])} obj - The object that will be indexed for this field.\n * @example Extracting a nested field\n * function (doc) { return doc.nested.field }\n */\n\n/**\n * Adds a field to the list of document fields that will be indexed. Every document being\n * indexed should have this field. Null values for this field in indexed documents will\n * not cause errors but will limit the chance of that document being retrieved by searches.\n *\n * All fields should be added before adding documents to the index. Adding fields after\n * a document has been indexed will have no effect on already indexed documents.\n *\n * Fields can be boosted at build time. This allows terms within that field to have more\n * importance when ranking search results. Use a field boost to specify that matches within\n * one field are more important than other fields.\n *\n * @param {string} fieldName - The name of a field to index in all documents.\n * @param {object} attributes - Optional attributes associated with this field.\n * @param {number} [attributes.boost=1] - Boost applied to all terms within this field.\n * @param {fieldExtractor} [attributes.extractor] - Function to extract a field from a document.\n * @throws {RangeError} fieldName cannot contain unsupported characters '/'\n */\nlunr.Builder.prototype.field = function (fieldName, attributes) {\n if (/\\//.test(fieldName)) {\n throw new RangeError (\"Field '\" + fieldName + \"' contains illegal character '/'\")\n }\n\n this._fields[fieldName] = attributes || {}\n}\n\n/**\n * A parameter to tune the amount of field length normalisation that is applied when\n * calculating relevance scores. A value of 0 will completely disable any normalisation\n * and a value of 1 will fully normalise field lengths. The default is 0.75. Values of b\n * will be clamped to the range 0 - 1.\n *\n * @param {number} number - The value to set for this tuning parameter.\n */\nlunr.Builder.prototype.b = function (number) {\n if (number < 0) {\n this._b = 0\n } else if (number > 1) {\n this._b = 1\n } else {\n this._b = number\n }\n}\n\n/**\n * A parameter that controls the speed at which a rise in term frequency results in term\n * frequency saturation. The default value is 1.2. Setting this to a higher value will give\n * slower saturation levels, a lower value will result in quicker saturation.\n *\n * @param {number} number - The value to set for this tuning parameter.\n */\nlunr.Builder.prototype.k1 = function (number) {\n this._k1 = number\n}\n\n/**\n * Adds a document to the index.\n *\n * Before adding fields to the index the index should have been fully setup, with the document\n * ref and all fields to index already having been specified.\n *\n * The document must have a field name as specified by the ref (by default this is 'id') and\n * it should have all fields defined for indexing, though null or undefined values will not\n * cause errors.\n *\n * Entire documents can be boosted at build time. Applying a boost to a document indicates that\n * this document should rank higher in search results than other documents.\n *\n * @param {object} doc - The document to add to the index.\n * @param {object} attributes - Optional attributes associated with this document.\n * @param {number} [attributes.boost=1] - Boost applied to all terms within this document.\n */\nlunr.Builder.prototype.add = function (doc, attributes) {\n var docRef = doc[this._ref],\n fields = Object.keys(this._fields)\n\n this._documents[docRef] = attributes || {}\n this.documentCount += 1\n\n for (var i = 0; i < fields.length; i++) {\n var fieldName = fields[i],\n extractor = this._fields[fieldName].extractor,\n field = extractor ? extractor(doc) : doc[fieldName],\n tokens = this.tokenizer(field, {\n fields: [fieldName]\n }),\n terms = this.pipeline.run(tokens),\n fieldRef = new lunr.FieldRef (docRef, fieldName),\n fieldTerms = Object.create(null)\n\n this.fieldTermFrequencies[fieldRef] = fieldTerms\n this.fieldLengths[fieldRef] = 0\n\n // store the length of this field for this document\n this.fieldLengths[fieldRef] += terms.length\n\n // calculate term frequencies for this field\n for (var j = 0; j < terms.length; j++) {\n var term = terms[j]\n\n if (fieldTerms[term] == undefined) {\n fieldTerms[term] = 0\n }\n\n fieldTerms[term] += 1\n\n // add to inverted index\n // create an initial posting if one doesn't exist\n if (this.invertedIndex[term] == undefined) {\n var posting = Object.create(null)\n posting[\"_index\"] = this.termIndex\n this.termIndex += 1\n\n for (var k = 0; k < fields.length; k++) {\n posting[fields[k]] = Object.create(null)\n }\n\n this.invertedIndex[term] = posting\n }\n\n // add an entry for this term/fieldName/docRef to the invertedIndex\n if (this.invertedIndex[term][fieldName][docRef] == undefined) {\n this.invertedIndex[term][fieldName][docRef] = Object.create(null)\n }\n\n // store all whitelisted metadata about this token in the\n // inverted index\n for (var l = 0; l < this.metadataWhitelist.length; l++) {\n var metadataKey = this.metadataWhitelist[l],\n metadata = term.metadata[metadataKey]\n\n if (this.invertedIndex[term][fieldName][docRef][metadataKey] == undefined) {\n this.invertedIndex[term][fieldName][docRef][metadataKey] = []\n }\n\n this.invertedIndex[term][fieldName][docRef][metadataKey].push(metadata)\n }\n }\n\n }\n}\n\n/**\n * Calculates the average document length for this index\n *\n * @private\n */\nlunr.Builder.prototype.calculateAverageFieldLengths = function () {\n\n var fieldRefs = Object.keys(this.fieldLengths),\n numberOfFields = fieldRefs.length,\n accumulator = {},\n documentsWithField = {}\n\n for (var i = 0; i < numberOfFields; i++) {\n var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]),\n field = fieldRef.fieldName\n\n documentsWithField[field] || (documentsWithField[field] = 0)\n documentsWithField[field] += 1\n\n accumulator[field] || (accumulator[field] = 0)\n accumulator[field] += this.fieldLengths[fieldRef]\n }\n\n var fields = Object.keys(this._fields)\n\n for (var i = 0; i < fields.length; i++) {\n var fieldName = fields[i]\n accumulator[fieldName] = accumulator[fieldName] / documentsWithField[fieldName]\n }\n\n this.averageFieldLength = accumulator\n}\n\n/**\n * Builds a vector space model of every document using lunr.Vector\n *\n * @private\n */\nlunr.Builder.prototype.createFieldVectors = function () {\n var fieldVectors = {},\n fieldRefs = Object.keys(this.fieldTermFrequencies),\n fieldRefsLength = fieldRefs.length,\n termIdfCache = Object.create(null)\n\n for (var i = 0; i < fieldRefsLength; i++) {\n var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]),\n fieldName = fieldRef.fieldName,\n fieldLength = this.fieldLengths[fieldRef],\n fieldVector = new lunr.Vector,\n termFrequencies = this.fieldTermFrequencies[fieldRef],\n terms = Object.keys(termFrequencies),\n termsLength = terms.length\n\n\n var fieldBoost = this._fields[fieldName].boost || 1,\n docBoost = this._documents[fieldRef.docRef].boost || 1\n\n for (var j = 0; j < termsLength; j++) {\n var term = terms[j],\n tf = termFrequencies[term],\n termIndex = this.invertedIndex[term]._index,\n idf, score, scoreWithPrecision\n\n if (termIdfCache[term] === undefined) {\n idf = lunr.idf(this.invertedIndex[term], this.documentCount)\n termIdfCache[term] = idf\n } else {\n idf = termIdfCache[term]\n }\n\n score = idf * ((this._k1 + 1) * tf) / (this._k1 * (1 - this._b + this._b * (fieldLength / this.averageFieldLength[fieldName])) + tf)\n score *= fieldBoost\n score *= docBoost\n scoreWithPrecision = Math.round(score * 1000) / 1000\n // Converts 1.23456789 to 1.234.\n // Reducing the precision so that the vectors take up less\n // space when serialised. Doing it now so that they behave\n // the same before and after serialisation. Also, this is\n // the fastest approach to reducing a number's precision in\n // JavaScript.\n\n fieldVector.insert(termIndex, scoreWithPrecision)\n }\n\n fieldVectors[fieldRef] = fieldVector\n }\n\n this.fieldVectors = fieldVectors\n}\n\n/**\n * Creates a token set of all tokens in the index using lunr.TokenSet\n *\n * @private\n */\nlunr.Builder.prototype.createTokenSet = function () {\n this.tokenSet = lunr.TokenSet.fromArray(\n Object.keys(this.invertedIndex).sort()\n )\n}\n\n/**\n * Builds the index, creating an instance of lunr.Index.\n *\n * This completes the indexing process and should only be called\n * once all documents have been added to the index.\n *\n * @returns {lunr.Index}\n */\nlunr.Builder.prototype.build = function () {\n this.calculateAverageFieldLengths()\n this.createFieldVectors()\n this.createTokenSet()\n\n return new lunr.Index({\n invertedIndex: this.invertedIndex,\n fieldVectors: this.fieldVectors,\n tokenSet: this.tokenSet,\n fields: Object.keys(this._fields),\n pipeline: this.searchPipeline\n })\n}\n\n/**\n * Applies a plugin to the index builder.\n *\n * A plugin is a function that is called with the index builder as its context.\n * Plugins can be used to customise or extend the behaviour of the index\n * in some way. A plugin is just a function, that encapsulated the custom\n * behaviour that should be applied when building the index.\n *\n * The plugin function will be called with the index builder as its argument, additional\n * arguments can also be passed when calling use. The function will be called\n * with the index builder as its context.\n *\n * @param {Function} plugin The plugin to apply.\n */\nlunr.Builder.prototype.use = function (fn) {\n var args = Array.prototype.slice.call(arguments, 1)\n args.unshift(this)\n fn.apply(this, args)\n}\n/**\n * Contains and collects metadata about a matching document.\n * A single instance of lunr.MatchData is returned as part of every\n * lunr.Index~Result.\n *\n * @constructor\n * @param {string} term - The term this match data is associated with\n * @param {string} field - The field in which the term was found\n * @param {object} metadata - The metadata recorded about this term in this field\n * @property {object} metadata - A cloned collection of metadata associated with this document.\n * @see {@link lunr.Index~Result}\n */\nlunr.MatchData = function (term, field, metadata) {\n var clonedMetadata = Object.create(null),\n metadataKeys = Object.keys(metadata || {})\n\n // Cloning the metadata to prevent the original\n // being mutated during match data combination.\n // Metadata is kept in an array within the inverted\n // index so cloning the data can be done with\n // Array#slice\n for (var i = 0; i < metadataKeys.length; i++) {\n var key = metadataKeys[i]\n clonedMetadata[key] = metadata[key].slice()\n }\n\n this.metadata = Object.create(null)\n\n if (term !== undefined) {\n this.metadata[term] = Object.create(null)\n this.metadata[term][field] = clonedMetadata\n }\n}\n\n/**\n * An instance of lunr.MatchData will be created for every term that matches a\n * document. However only one instance is required in a lunr.Index~Result. This\n * method combines metadata from another instance of lunr.MatchData with this\n * objects metadata.\n *\n * @param {lunr.MatchData} otherMatchData - Another instance of match data to merge with this one.\n * @see {@link lunr.Index~Result}\n */\nlunr.MatchData.prototype.combine = function (otherMatchData) {\n var terms = Object.keys(otherMatchData.metadata)\n\n for (var i = 0; i < terms.length; i++) {\n var term = terms[i],\n fields = Object.keys(otherMatchData.metadata[term])\n\n if (this.metadata[term] == undefined) {\n this.metadata[term] = Object.create(null)\n }\n\n for (var j = 0; j < fields.length; j++) {\n var field = fields[j],\n keys = Object.keys(otherMatchData.metadata[term][field])\n\n if (this.metadata[term][field] == undefined) {\n this.metadata[term][field] = Object.create(null)\n }\n\n for (var k = 0; k < keys.length; k++) {\n var key = keys[k]\n\n if (this.metadata[term][field][key] == undefined) {\n this.metadata[term][field][key] = otherMatchData.metadata[term][field][key]\n } else {\n this.metadata[term][field][key] = this.metadata[term][field][key].concat(otherMatchData.metadata[term][field][key])\n }\n\n }\n }\n }\n}\n\n/**\n * Add metadata for a term/field pair to this instance of match data.\n *\n * @param {string} term - The term this match data is associated with\n * @param {string} field - The field in which the term was found\n * @param {object} metadata - The metadata recorded about this term in this field\n */\nlunr.MatchData.prototype.add = function (term, field, metadata) {\n if (!(term in this.metadata)) {\n this.metadata[term] = Object.create(null)\n this.metadata[term][field] = metadata\n return\n }\n\n if (!(field in this.metadata[term])) {\n this.metadata[term][field] = metadata\n return\n }\n\n var metadataKeys = Object.keys(metadata)\n\n for (var i = 0; i < metadataKeys.length; i++) {\n var key = metadataKeys[i]\n\n if (key in this.metadata[term][field]) {\n this.metadata[term][field][key] = this.metadata[term][field][key].concat(metadata[key])\n } else {\n this.metadata[term][field][key] = metadata[key]\n }\n }\n}\n/**\n * A lunr.Query provides a programmatic way of defining queries to be performed\n * against a {@link lunr.Index}.\n *\n * Prefer constructing a lunr.Query using the {@link lunr.Index#query} method\n * so the query object is pre-initialized with the right index fields.\n *\n * @constructor\n * @property {lunr.Query~Clause[]} clauses - An array of query clauses.\n * @property {string[]} allFields - An array of all available fields in a lunr.Index.\n */\nlunr.Query = function (allFields) {\n this.clauses = []\n this.allFields = allFields\n}\n\n/**\n * Constants for indicating what kind of automatic wildcard insertion will be used when constructing a query clause.\n *\n * This allows wildcards to be added to the beginning and end of a term without having to manually do any string\n * concatenation.\n *\n * The wildcard constants can be bitwise combined to select both leading and trailing wildcards.\n *\n * @constant\n * @default\n * @property {number} wildcard.NONE - The term will have no wildcards inserted, this is the default behaviour\n * @property {number} wildcard.LEADING - Prepend the term with a wildcard, unless a leading wildcard already exists\n * @property {number} wildcard.TRAILING - Append a wildcard to the term, unless a trailing wildcard already exists\n * @see lunr.Query~Clause\n * @see lunr.Query#clause\n * @see lunr.Query#term\n * @example query term with trailing wildcard\n * query.term('foo', { wildcard: lunr.Query.wildcard.TRAILING })\n * @example query term with leading and trailing wildcard\n * query.term('foo', {\n * wildcard: lunr.Query.wildcard.LEADING | lunr.Query.wildcard.TRAILING\n * })\n */\n\nlunr.Query.wildcard = new String (\"*\")\nlunr.Query.wildcard.NONE = 0\nlunr.Query.wildcard.LEADING = 1\nlunr.Query.wildcard.TRAILING = 2\n\n/**\n * Constants for indicating what kind of presence a term must have in matching documents.\n *\n * @constant\n * @enum {number}\n * @see lunr.Query~Clause\n * @see lunr.Query#clause\n * @see lunr.Query#term\n * @example query term with required presence\n * query.term('foo', { presence: lunr.Query.presence.REQUIRED })\n */\nlunr.Query.presence = {\n /**\n * Term's presence in a document is optional, this is the default value.\n */\n OPTIONAL: 1,\n\n /**\n * Term's presence in a document is required, documents that do not contain\n * this term will not be returned.\n */\n REQUIRED: 2,\n\n /**\n * Term's presence in a document is prohibited, documents that do contain\n * this term will not be returned.\n */\n PROHIBITED: 3\n}\n\n/**\n * A single clause in a {@link lunr.Query} contains a term and details on how to\n * match that term against a {@link lunr.Index}.\n *\n * @typedef {Object} lunr.Query~Clause\n * @property {string[]} fields - The fields in an index this clause should be matched against.\n * @property {number} [boost=1] - Any boost that should be applied when matching this clause.\n * @property {number} [editDistance] - Whether the term should have fuzzy matching applied, and how fuzzy the match should be.\n * @property {boolean} [usePipeline] - Whether the term should be passed through the search pipeline.\n * @property {number} [wildcard=lunr.Query.wildcard.NONE] - Whether the term should have wildcards appended or prepended.\n * @property {number} [presence=lunr.Query.presence.OPTIONAL] - The terms presence in any matching documents.\n */\n\n/**\n * Adds a {@link lunr.Query~Clause} to this query.\n *\n * Unless the clause contains the fields to be matched all fields will be matched. In addition\n * a default boost of 1 is applied to the clause.\n *\n * @param {lunr.Query~Clause} clause - The clause to add to this query.\n * @see lunr.Query~Clause\n * @returns {lunr.Query}\n */\nlunr.Query.prototype.clause = function (clause) {\n if (!('fields' in clause)) {\n clause.fields = this.allFields\n }\n\n if (!('boost' in clause)) {\n clause.boost = 1\n }\n\n if (!('usePipeline' in clause)) {\n clause.usePipeline = true\n }\n\n if (!('wildcard' in clause)) {\n clause.wildcard = lunr.Query.wildcard.NONE\n }\n\n if ((clause.wildcard & lunr.Query.wildcard.LEADING) && (clause.term.charAt(0) != lunr.Query.wildcard)) {\n clause.term = \"*\" + clause.term\n }\n\n if ((clause.wildcard & lunr.Query.wildcard.TRAILING) && (clause.term.slice(-1) != lunr.Query.wildcard)) {\n clause.term = \"\" + clause.term + \"*\"\n }\n\n if (!('presence' in clause)) {\n clause.presence = lunr.Query.presence.OPTIONAL\n }\n\n this.clauses.push(clause)\n\n return this\n}\n\n/**\n * A negated query is one in which every clause has a presence of\n * prohibited. These queries require some special processing to return\n * the expected results.\n *\n * @returns boolean\n */\nlunr.Query.prototype.isNegated = function () {\n for (var i = 0; i < this.clauses.length; i++) {\n if (this.clauses[i].presence != lunr.Query.presence.PROHIBITED) {\n return false\n }\n }\n\n return true\n}\n\n/**\n * Adds a term to the current query, under the covers this will create a {@link lunr.Query~Clause}\n * to the list of clauses that make up this query.\n *\n * The term is used as is, i.e. no tokenization will be performed by this method. Instead conversion\n * to a token or token-like string should be done before calling this method.\n *\n * The term will be converted to a string by calling `toString`. Multiple terms can be passed as an\n * array, each term in the array will share the same options.\n *\n * @param {object|object[]} term - The term(s) to add to the query.\n * @param {object} [options] - Any additional properties to add to the query clause.\n * @returns {lunr.Query}\n * @see lunr.Query#clause\n * @see lunr.Query~Clause\n * @example adding a single term to a query\n * query.term(\"foo\")\n * @example adding a single term to a query and specifying search fields, term boost and automatic trailing wildcard\n * query.term(\"foo\", {\n * fields: [\"title\"],\n * boost: 10,\n * wildcard: lunr.Query.wildcard.TRAILING\n * })\n * @example using lunr.tokenizer to convert a string to tokens before using them as terms\n * query.term(lunr.tokenizer(\"foo bar\"))\n */\nlunr.Query.prototype.term = function (term, options) {\n if (Array.isArray(term)) {\n term.forEach(function (t) { this.term(t, lunr.utils.clone(options)) }, this)\n return this\n }\n\n var clause = options || {}\n clause.term = term.toString()\n\n this.clause(clause)\n\n return this\n}\nlunr.QueryParseError = function (message, start, end) {\n this.name = \"QueryParseError\"\n this.message = message\n this.start = start\n this.end = end\n}\n\nlunr.QueryParseError.prototype = new Error\nlunr.QueryLexer = function (str) {\n this.lexemes = []\n this.str = str\n this.length = str.length\n this.pos = 0\n this.start = 0\n this.escapeCharPositions = []\n}\n\nlunr.QueryLexer.prototype.run = function () {\n var state = lunr.QueryLexer.lexText\n\n while (state) {\n state = state(this)\n }\n}\n\nlunr.QueryLexer.prototype.sliceString = function () {\n var subSlices = [],\n sliceStart = this.start,\n sliceEnd = this.pos\n\n for (var i = 0; i < this.escapeCharPositions.length; i++) {\n sliceEnd = this.escapeCharPositions[i]\n subSlices.push(this.str.slice(sliceStart, sliceEnd))\n sliceStart = sliceEnd + 1\n }\n\n subSlices.push(this.str.slice(sliceStart, this.pos))\n this.escapeCharPositions.length = 0\n\n return subSlices.join('')\n}\n\nlunr.QueryLexer.prototype.emit = function (type) {\n this.lexemes.push({\n type: type,\n str: this.sliceString(),\n start: this.start,\n end: this.pos\n })\n\n this.start = this.pos\n}\n\nlunr.QueryLexer.prototype.escapeCharacter = function () {\n this.escapeCharPositions.push(this.pos - 1)\n this.pos += 1\n}\n\nlunr.QueryLexer.prototype.next = function () {\n if (this.pos >= this.length) {\n return lunr.QueryLexer.EOS\n }\n\n var char = this.str.charAt(this.pos)\n this.pos += 1\n return char\n}\n\nlunr.QueryLexer.prototype.width = function () {\n return this.pos - this.start\n}\n\nlunr.QueryLexer.prototype.ignore = function () {\n if (this.start == this.pos) {\n this.pos += 1\n }\n\n this.start = this.pos\n}\n\nlunr.QueryLexer.prototype.backup = function () {\n this.pos -= 1\n}\n\nlunr.QueryLexer.prototype.acceptDigitRun = function () {\n var char, charCode\n\n do {\n char = this.next()\n charCode = char.charCodeAt(0)\n } while (charCode > 47 && charCode < 58)\n\n if (char != lunr.QueryLexer.EOS) {\n this.backup()\n }\n}\n\nlunr.QueryLexer.prototype.more = function () {\n return this.pos < this.length\n}\n\nlunr.QueryLexer.EOS = 'EOS'\nlunr.QueryLexer.FIELD = 'FIELD'\nlunr.QueryLexer.TERM = 'TERM'\nlunr.QueryLexer.EDIT_DISTANCE = 'EDIT_DISTANCE'\nlunr.QueryLexer.BOOST = 'BOOST'\nlunr.QueryLexer.PRESENCE = 'PRESENCE'\n\nlunr.QueryLexer.lexField = function (lexer) {\n lexer.backup()\n lexer.emit(lunr.QueryLexer.FIELD)\n lexer.ignore()\n return lunr.QueryLexer.lexText\n}\n\nlunr.QueryLexer.lexTerm = function (lexer) {\n if (lexer.width() > 1) {\n lexer.backup()\n lexer.emit(lunr.QueryLexer.TERM)\n }\n\n lexer.ignore()\n\n if (lexer.more()) {\n return lunr.QueryLexer.lexText\n }\n}\n\nlunr.QueryLexer.lexEditDistance = function (lexer) {\n lexer.ignore()\n lexer.acceptDigitRun()\n lexer.emit(lunr.QueryLexer.EDIT_DISTANCE)\n return lunr.QueryLexer.lexText\n}\n\nlunr.QueryLexer.lexBoost = function (lexer) {\n lexer.ignore()\n lexer.acceptDigitRun()\n lexer.emit(lunr.QueryLexer.BOOST)\n return lunr.QueryLexer.lexText\n}\n\nlunr.QueryLexer.lexEOS = function (lexer) {\n if (lexer.width() > 0) {\n lexer.emit(lunr.QueryLexer.TERM)\n }\n}\n\n// This matches the separator used when tokenising fields\n// within a document. These should match otherwise it is\n// not possible to search for some tokens within a document.\n//\n// It is possible for the user to change the separator on the\n// tokenizer so it _might_ clash with any other of the special\n// characters already used within the search string, e.g. :.\n//\n// This means that it is possible to change the separator in\n// such a way that makes some words unsearchable using a search\n// string.\nlunr.QueryLexer.termSeparator = lunr.tokenizer.separator\n\nlunr.QueryLexer.lexText = function (lexer) {\n while (true) {\n var char = lexer.next()\n\n if (char == lunr.QueryLexer.EOS) {\n return lunr.QueryLexer.lexEOS\n }\n\n // Escape character is '\\'\n if (char.charCodeAt(0) == 92) {\n lexer.escapeCharacter()\n continue\n }\n\n if (char == \":\") {\n return lunr.QueryLexer.lexField\n }\n\n if (char == \"~\") {\n lexer.backup()\n if (lexer.width() > 0) {\n lexer.emit(lunr.QueryLexer.TERM)\n }\n return lunr.QueryLexer.lexEditDistance\n }\n\n if (char == \"^\") {\n lexer.backup()\n if (lexer.width() > 0) {\n lexer.emit(lunr.QueryLexer.TERM)\n }\n return lunr.QueryLexer.lexBoost\n }\n\n // \"+\" indicates term presence is required\n // checking for length to ensure that only\n // leading \"+\" are considered\n if (char == \"+\" && lexer.width() === 1) {\n lexer.emit(lunr.QueryLexer.PRESENCE)\n return lunr.QueryLexer.lexText\n }\n\n // \"-\" indicates term presence is prohibited\n // checking for length to ensure that only\n // leading \"-\" are considered\n if (char == \"-\" && lexer.width() === 1) {\n lexer.emit(lunr.QueryLexer.PRESENCE)\n return lunr.QueryLexer.lexText\n }\n\n if (char.match(lunr.QueryLexer.termSeparator)) {\n return lunr.QueryLexer.lexTerm\n }\n }\n}\n\nlunr.QueryParser = function (str, query) {\n this.lexer = new lunr.QueryLexer (str)\n this.query = query\n this.currentClause = {}\n this.lexemeIdx = 0\n}\n\nlunr.QueryParser.prototype.parse = function () {\n this.lexer.run()\n this.lexemes = this.lexer.lexemes\n\n var state = lunr.QueryParser.parseClause\n\n while (state) {\n state = state(this)\n }\n\n return this.query\n}\n\nlunr.QueryParser.prototype.peekLexeme = function () {\n return this.lexemes[this.lexemeIdx]\n}\n\nlunr.QueryParser.prototype.consumeLexeme = function () {\n var lexeme = this.peekLexeme()\n this.lexemeIdx += 1\n return lexeme\n}\n\nlunr.QueryParser.prototype.nextClause = function () {\n var completedClause = this.currentClause\n this.query.clause(completedClause)\n this.currentClause = {}\n}\n\nlunr.QueryParser.parseClause = function (parser) {\n var lexeme = parser.peekLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n switch (lexeme.type) {\n case lunr.QueryLexer.PRESENCE:\n return lunr.QueryParser.parsePresence\n case lunr.QueryLexer.FIELD:\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.TERM:\n return lunr.QueryParser.parseTerm\n default:\n var errorMessage = \"expected either a field or a term, found \" + lexeme.type\n\n if (lexeme.str.length >= 1) {\n errorMessage += \" with value '\" + lexeme.str + \"'\"\n }\n\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n}\n\nlunr.QueryParser.parsePresence = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n switch (lexeme.str) {\n case \"-\":\n parser.currentClause.presence = lunr.Query.presence.PROHIBITED\n break\n case \"+\":\n parser.currentClause.presence = lunr.Query.presence.REQUIRED\n break\n default:\n var errorMessage = \"unrecognised presence operator'\" + lexeme.str + \"'\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n var errorMessage = \"expecting term or field, found nothing\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.FIELD:\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.TERM:\n return lunr.QueryParser.parseTerm\n default:\n var errorMessage = \"expecting term or field, found '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\nlunr.QueryParser.parseField = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n if (parser.query.allFields.indexOf(lexeme.str) == -1) {\n var possibleFields = parser.query.allFields.map(function (f) { return \"'\" + f + \"'\" }).join(', '),\n errorMessage = \"unrecognised field '\" + lexeme.str + \"', possible fields: \" + possibleFields\n\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n parser.currentClause.fields = [lexeme.str]\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n var errorMessage = \"expecting term, found nothing\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.TERM:\n return lunr.QueryParser.parseTerm\n default:\n var errorMessage = \"expecting term, found '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\nlunr.QueryParser.parseTerm = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n parser.currentClause.term = lexeme.str.toLowerCase()\n\n if (lexeme.str.indexOf(\"*\") != -1) {\n parser.currentClause.usePipeline = false\n }\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n parser.nextClause()\n return\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.TERM:\n parser.nextClause()\n return lunr.QueryParser.parseTerm\n case lunr.QueryLexer.FIELD:\n parser.nextClause()\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.EDIT_DISTANCE:\n return lunr.QueryParser.parseEditDistance\n case lunr.QueryLexer.BOOST:\n return lunr.QueryParser.parseBoost\n case lunr.QueryLexer.PRESENCE:\n parser.nextClause()\n return lunr.QueryParser.parsePresence\n default:\n var errorMessage = \"Unexpected lexeme type '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\nlunr.QueryParser.parseEditDistance = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n var editDistance = parseInt(lexeme.str, 10)\n\n if (isNaN(editDistance)) {\n var errorMessage = \"edit distance must be numeric\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n parser.currentClause.editDistance = editDistance\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n parser.nextClause()\n return\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.TERM:\n parser.nextClause()\n return lunr.QueryParser.parseTerm\n case lunr.QueryLexer.FIELD:\n parser.nextClause()\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.EDIT_DISTANCE:\n return lunr.QueryParser.parseEditDistance\n case lunr.QueryLexer.BOOST:\n return lunr.QueryParser.parseBoost\n case lunr.QueryLexer.PRESENCE:\n parser.nextClause()\n return lunr.QueryParser.parsePresence\n default:\n var errorMessage = \"Unexpected lexeme type '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\nlunr.QueryParser.parseBoost = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n var boost = parseInt(lexeme.str, 10)\n\n if (isNaN(boost)) {\n var errorMessage = \"boost must be numeric\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n parser.currentClause.boost = boost\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n parser.nextClause()\n return\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.TERM:\n parser.nextClause()\n return lunr.QueryParser.parseTerm\n case lunr.QueryLexer.FIELD:\n parser.nextClause()\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.EDIT_DISTANCE:\n return lunr.QueryParser.parseEditDistance\n case lunr.QueryLexer.BOOST:\n return lunr.QueryParser.parseBoost\n case lunr.QueryLexer.PRESENCE:\n parser.nextClause()\n return lunr.QueryParser.parsePresence\n default:\n var errorMessage = \"Unexpected lexeme type '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\n /**\n * export the module via AMD, CommonJS or as a browser global\n * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js\n */\n ;(function (root, factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(factory)\n } else if (typeof exports === 'object') {\n /**\n * Node. Does not work with strict CommonJS, but\n * only CommonJS-like enviroments that support module.exports,\n * like Node.\n */\n module.exports = factory()\n } else {\n // Browser globals (root is window)\n root.lunr = factory()\n }\n }(this, function () {\n /**\n * Just return a value to define the module export.\n * This example returns an object, but the module\n * can return a function as the exported value.\n */\n return lunr\n }))\n})();\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n ArticleDocument,\n SearchDocumentMap,\n SectionDocument,\n setupSearchDocumentMap\n} from \"../document\"\nimport {\n SearchHighlightFactoryFn,\n setupSearchHighlighter\n} from \"../highlight\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search index configuration\n */\nexport interface SearchIndexConfig {\n lang: string[] /* Search languages */\n separator: string /* Search separator */\n}\n\n/**\n * Search index document\n */\nexport interface SearchIndexDocument {\n location: string /* Document location */\n title: string /* Document title */\n text: string /* Document text */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Search index pipeline function\n */\nexport type SearchIndexPipelineFn =\n | \"stemmer\" /* Stemmer */\n | \"stopWordFilter\" /* Stop word filter */\n | \"trimmer\" /* Trimmer */\n\n/**\n * Search index pipeline\n */\nexport type SearchIndexPipeline = SearchIndexPipelineFn[]\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Search index options\n *\n * This interfaces describes the format of the `search_index.json` file which\n * is automatically built by the MkDocs search plugin.\n */\nexport interface SearchIndexOptions {\n config: SearchIndexConfig /* Search index configuration */\n docs: SearchIndexDocument[] /* Search index documents */\n pipeline?: SearchIndexPipeline /* Search index pipeline */\n index?: object | string /* Prebuilt or serialized index */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Search result\n */\nexport interface SearchResult {\n article: ArticleDocument /* Article document */\n sections: SectionDocument[] /* Section documents */\n}\n\n/* ----------------------------------------------------------------------------\n * Class\n * ------------------------------------------------------------------------- */\n\n/**\n * Search index\n *\n * Note that `lunr` is injected via Webpack, as it will otherwise also be\n * bundled in the application bundle.\n */\nexport class SearchIndex {\n\n /**\n * Search document mapping\n *\n * A mapping of URLs (including hash fragments) to the actual articles and\n * sections of the documentation. The search document mapping must be created\n * regardless of whether the index was prebuilt or not, as `lunr` itself will\n * only store the actual index.\n */\n protected documents: SearchDocumentMap\n\n /**\n * Search highlight factory function\n */\n protected highlight: SearchHighlightFactoryFn\n\n /**\n * The `lunr` search index\n */\n protected index: lunr.Index\n\n /**\n * Create a search index\n *\n * @param options - Options\n */\n public constructor({ config, docs, pipeline, index }: SearchIndexOptions) {\n this.documents = setupSearchDocumentMap(docs)\n this.highlight = setupSearchHighlighter(config)\n\n /* If no index was given, create it */\n if (typeof index === \"undefined\") {\n this.index = lunr(function() {\n pipeline = pipeline || [\"trimmer\", \"stopWordFilter\"]\n\n /* Set up pipeline according to configuration */\n this.pipeline.reset()\n for (const fn of pipeline)\n this.pipeline.add(lunr[fn])\n\n /* Set up alternate search languages */\n if (config.lang.length === 1 && config.lang[0] !== \"en\") {\n this.use((lunr as any)[config.lang[0]])\n } else if (config.lang.length > 1) {\n this.use((lunr as any).multiLanguage(...config.lang))\n }\n\n /* Setup fields and reference */\n this.field(\"title\", { boost: 10 })\n this.field(\"text\")\n this.ref(\"location\")\n\n /* Index documents */\n for (const doc of docs)\n this.add(doc)\n })\n\n /* Prebuilt or serialized index */\n } else {\n this.index = lunr.Index.load(\n typeof index === \"string\"\n ? JSON.parse(index)\n : index\n )\n }\n }\n\n /**\n * Search for matching documents\n *\n * The search index which MkDocs provides is divided up into articles, which\n * contain the whole content of the individual pages, and sections, which only\n * contain the contents of the subsections obtained by breaking the individual\n * pages up at `h1` ... `h6`. As there may be many sections on different pages\n * with indentical titles (for example within this very project, e.g. \"Usage\"\n * or \"Installation\"), they need to be put into the context of the containing\n * page. For this reason, section results are grouped within their respective\n * articles which are the top-level results that are returned.\n *\n * @param query - Query string\n *\n * @return Search results\n */\n public search(query: string): SearchResult[] {\n if (query) {\n try {\n\n /* Group sections by containing article */\n const groups = this.index.search(query)\n .reduce((results, result) => {\n const document = this.documents.get(result.ref)\n if (typeof document !== \"undefined\") {\n if (\"parent\" in document) {\n const ref = document.parent.location\n results.set(ref, [...results.get(ref) || [], result])\n } else {\n const ref = document.location\n results.set(ref, results.get(ref) || [])\n }\n }\n return results\n }, new Map())\n\n /* Create highlighter for query */\n const fn = this.highlight(query)\n\n /* Map groups to search documents */\n return [...groups].map(([ref, sections]) => ({\n article: fn(this.documents.get(ref) as ArticleDocument),\n sections: sections.map(section => {\n return fn(this.documents.get(section.ref) as SectionDocument)\n })\n }))\n\n /* Log errors to console (for now) */\n } catch (err) {\n // tslint:disable-next-line no-console\n console.warn(`Invalid query: ${query} – see https://bit.ly/2s3ChXG`)\n }\n }\n\n /* Return nothing in case of error or empty query */\n return []\n }\n\n /**\n * Serialize search index\n *\n * @return String representation\n */\n public toString(): string {\n return JSON.stringify(this.index)\n }\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SearchIndexOptions, SearchResult } from \"integrations/search\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search message type\n */\nexport const enum SearchMessageType {\n SETUP, /* Search index setup */\n DUMP, /* Search index dump */\n QUERY, /* Search query */\n RESULT /* Search results */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * A message containing the data necessary to setup the search index\n */\nexport interface SearchSetupMessage {\n type: SearchMessageType.SETUP /* Message type */\n data: SearchIndexOptions /* Message data */\n}\n\n/**\n * A message containing the a dump of the search index\n */\nexport interface SearchDumpMessage {\n type: SearchMessageType.DUMP /* Message type */\n data: string /* Message data */\n}\n\n/**\n * A message containing a search query\n */\nexport interface SearchQueryMessage {\n type: SearchMessageType.QUERY /* Message type */\n data: string /* Message data */\n}\n\n/**\n * A message containing results for a search query\n */\nexport interface SearchResultMessage {\n type: SearchMessageType.RESULT /* Message type */\n data: SearchResult[] /* Message data */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * A message exchanged with the search worker\n */\nexport type SearchMessage =\n | SearchSetupMessage\n | SearchDumpMessage\n | SearchQueryMessage\n | SearchResultMessage\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Type guard for search setup messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchSetupMessage(\n message: SearchMessage\n): message is SearchSetupMessage {\n return message.type === SearchMessageType.SETUP\n}\n\n/**\n * Type guard for search dump messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchDumpMessage(\n message: SearchMessage\n): message is SearchDumpMessage {\n return message.type === SearchMessageType.DUMP\n}\n\n/**\n * Type guard for search query messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchQueryMessage(\n message: SearchMessage\n): message is SearchQueryMessage {\n return message.type === SearchMessageType.QUERY\n}\n\n/**\n * Type guard for search result messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchResultMessage(\n message: SearchMessage\n): message is SearchResultMessage {\n return message.type === SearchMessageType.RESULT\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport \"expose-loader?lunr!lunr\"\n\nimport { SearchIndex, SearchIndexConfig } from \"integrations/search\"\n\nimport { SearchMessage, SearchMessageType } from \"../message\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Search index\n */\nlet index: SearchIndex\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup multi-language support through `lunr-languages`\n *\n * This function will automatically import the stemmers necessary to process\n * the languages which were given through the search index configuration.\n *\n * @param config - Search index configuration\n */\nfunction setupLunrLanguages(config: SearchIndexConfig): void {\n const base = \"../lunr\"\n\n /* Add scripts for languages */\n const scripts = []\n for (const lang of config.lang) {\n if (lang === \"ja\") scripts.push(`${base}/tinyseg.min.js`)\n if (lang !== \"en\") scripts.push(`${base}/min/lunr.${lang}.min.js`)\n }\n\n /* Add multi-language support */\n if (config.lang.length > 1)\n scripts.push(`${base}/min/lunr.multi.min.js`)\n\n /* Load scripts synchronously */\n if (scripts.length)\n self.importScripts(\n `${base}/min/lunr.stemmer.support.min.js`,\n ...scripts\n )\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Message handler\n *\n * @param message - Source message\n *\n * @return Target message\n */\nexport function handler(message: SearchMessage): SearchMessage {\n switch (message.type) {\n\n /* Setup search index */\n case SearchMessageType.SETUP:\n setupLunrLanguages(message.data.config)\n index = new SearchIndex(message.data)\n return {\n type: SearchMessageType.DUMP,\n data: index.toString()\n }\n\n /* Query search index */\n case SearchMessageType.QUERY:\n return {\n type: SearchMessageType.RESULT,\n data: index ? index.search(message.data) : []\n }\n\n /* All other messages */\n default:\n throw new TypeError(\"Invalid message type\")\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Worker\n * ------------------------------------------------------------------------- */\n\nself.addEventListener(\"message\", ev => {\n self.postMessage(handler(ev.data))\n})\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport * as escapeHTML from \"escape-html\"\n\nimport { SearchIndexDocument } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * A top-level article\n */\nexport interface ArticleDocument extends SearchIndexDocument {\n linked: boolean /* Whether the section was linked */\n}\n\n/**\n * A section of an article\n */\nexport interface SectionDocument extends SearchIndexDocument {\n parent: ArticleDocument /* Parent article */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Search document\n */\nexport type SearchDocument =\n | ArticleDocument\n | SectionDocument\n\n/**\n * Search document mapping\n */\nexport type SearchDocumentMap = Map\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Create a search document mapping\n *\n * @param docs - Search index documents\n *\n * @return Search document map\n */\nexport function setupSearchDocumentMap(\n docs: SearchIndexDocument[]\n): SearchDocumentMap {\n const documents = new Map()\n for (const doc of docs) {\n const [path, hash] = doc.location.split(\"#\")\n\n /* Extract location and title */\n const location = doc.location\n const title = doc.title\n\n /* Escape and cleanup text */\n const text = escapeHTML(doc.text)\n .replace(/\\s+(?=[,.:;!?])/g, \"\")\n .replace(/\\s+/g, \" \")\n\n /* Handle section */\n if (hash) {\n const parent = documents.get(path) as ArticleDocument\n\n /* Ignore first section, override article */\n if (!parent.linked) {\n parent.title = doc.title\n parent.text = text\n parent.linked = true\n\n /* Add subsequent section */\n } else {\n documents.set(location, {\n location,\n title,\n text,\n parent\n })\n }\n\n /* Add article */\n } else {\n documents.set(location, {\n location,\n title,\n text,\n linked: false\n })\n }\n }\n return documents\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SearchIndexConfig } from \"../_\"\nimport { SearchDocument } from \"../document\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search highlight function\n *\n * @template T - Search document type\n *\n * @param document - Search document\n *\n * @return Highlighted document\n */\nexport type SearchHighlightFn =\n (document: Readonly) => T\n\n/**\n * Search highlight factory function\n *\n * @param query - Query string\n *\n * @return Search highlight function\n */\nexport type SearchHighlightFactoryFn =\n (query: string) => SearchHighlightFn\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Create a search highlighter\n *\n * @param config - Search index configuration\n *\n * @return Search highlight factory function\n */\nexport function setupSearchHighlighter(\n config: SearchIndexConfig\n): SearchHighlightFactoryFn {\n const separator = new RegExp(config.separator, \"img\")\n const highlight = (_: unknown, data: string, term: string) => {\n return `${data}${term}`\n }\n\n /* Return factory function */\n return (query: string) => {\n query = query\n .replace(/[\\s*+-:~^]+/g, \" \")\n .trim()\n\n /* Create search term match expression */\n const match = new RegExp(`(^|${config.separator})(${\n query\n .replace(/[|\\\\{}()[\\]^$+*?.-]/g, \"\\\\$&\") // TODO: taken from escape-string-regexp\n .replace(separator, \"|\")\n })`, \"img\")\n\n /* Highlight document */\n return document => ({\n ...document,\n title: document.title.replace(match, highlight),\n text: document.text.replace(match, highlight)\n })\n }\n}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/material/assets/manifest.json b/material/assets/manifest.json index 0e311feb4..f63f3652c 100644 --- a/material/assets/manifest.json +++ b/material/assets/manifest.json @@ -1,10 +1,10 @@ { - "assets/javascripts/bundle.js": "assets/javascripts/bundle.8ceb0d66.min.js", - "assets/javascripts/bundle.js.map": "assets/javascripts/bundle.8ceb0d66.min.js.map", - "assets/javascripts/vendor.js": "assets/javascripts/vendor.000c9aa0.min.js", - "assets/javascripts/vendor.js.map": "assets/javascripts/vendor.000c9aa0.min.js.map", - "assets/javascripts/worker/search.js": "assets/javascripts/worker/search.926ffd9e.min.js", - "assets/javascripts/worker/search.js.map": "assets/javascripts/worker/search.926ffd9e.min.js.map", - "assets/stylesheets/main.css": "assets/stylesheets/main.c05f2dae.min.css", - "assets/stylesheets/palette.css": "assets/stylesheets/palette.f5f04e6f.min.css" + "assets/javascripts/bundle.js": "assets/javascripts/bundle.js", + "assets/javascripts/bundle.js.map": "assets/javascripts/bundle.js.map", + "assets/javascripts/vendor.js": "assets/javascripts/vendor.js", + "assets/javascripts/vendor.js.map": "assets/javascripts/vendor.js.map", + "assets/javascripts/worker/search.js": "assets/javascripts/worker/search.js", + "assets/javascripts/worker/search.js.map": "assets/javascripts/worker/search.js.map", + "assets/stylesheets/main.css": "assets/stylesheets/main.css", + "assets/stylesheets/palette.css": "assets/stylesheets/palette.css" } \ No newline at end of file diff --git a/material/assets/stylesheets/main.14bb5ffa.min.css b/material/assets/stylesheets/main.14bb5ffa.min.css new file mode 100644 index 000000000..33bc6527e --- /dev/null +++ b/material/assets/stylesheets/main.14bb5ffa.min.css @@ -0,0 +1 @@ +html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}html{-webkit-text-size-adjust:none;-moz-text-size-adjust:none;-ms-text-size-adjust:none;text-size-adjust:none}body{margin:0}hr{overflow:visible;box-sizing:content-box}a{-webkit-text-decoration-skip:objects}a,button,label,input{-webkit-tap-highlight-color:transparent}a{color:inherit;text-decoration:none}small{font-size:80%}sub,sup{position:relative;font-size:80%;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}table{border-collapse:separate;border-spacing:0}td,th{font-weight:normal;vertical-align:top}button{margin:0;padding:0;border:0;background:transparent;font-size:inherit}input{border:0;outline:0}:root{--md-default-fg-color: hsla(0, 0%, 0%, 0.87);--md-default-fg-color--light: hsla(0, 0%, 0%, 0.54);--md-default-fg-color--lighter: hsla(0, 0%, 0%, 0.26);--md-default-fg-color--lightest: hsla(0, 0%, 0%, 0.07);--md-default-bg-color: hsla(0, 0%, 100%, 1);--md-default-bg-color--light: hsla(0, 0%, 100%, 0.7);--md-default-bg-color--lighter: hsla(0, 0%, 100%, 0.3);--md-default-bg-color--lightest: hsla(0, 0%, 100%, 0.12);--md-primary-fg-color: hsla(231deg, 48%, 48%, 1);--md-primary-fg-color--light: hsla(230deg, 44%, 64%, 1);--md-primary-fg-color--dark: hsla(232deg, 54%, 41%, 1);--md-primary-bg-color: var(--md-default-bg-color);--md-primary-bg-color--light: var(--md-default-bg-color--light);--md-accent-fg-color: hsla(231deg, 99%, 66%, 1);--md-accent-fg-color--transparent: hsla(231deg, 99%, 66%, 0.1);--md-accent-bg-color: var(--md-default-bg-color);--md-accent-bg-color--light: var(--md-default-bg-color--light);--md-code-bg-color: hsla(0, 0%, 92.5%, 0.5);--md-code-fg-color: hsla(200, 18%, 26%, 1)}.md-icon svg{display:block;width:1.2rem;height:1.2rem;margin:0 auto;fill:currentColor}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body,input{color:var(--md-default-fg-color);-webkit-font-feature-settings:"kern","liga";font-feature-settings:"kern","liga";font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}code,pre,kbd{color:var(--md-default-fg-color);-webkit-font-feature-settings:"kern";font-feature-settings:"kern";font-family:"Courier New",Courier,monospace}.md-typeset{font-size:.8rem;line-height:1.6;-webkit-print-color-adjust:exact}.md-typeset p,.md-typeset ul,.md-typeset ol,.md-typeset blockquote{margin:1em 0}.md-typeset h1{margin:0 0 2rem;color:var(--md-default-fg-color--light);font-size:1.5625rem;font-weight:300;letter-spacing:-0.01em;line-height:1.3}.md-typeset h2{margin:2rem 0 .8rem;font-size:1.25rem;font-weight:300;letter-spacing:-0.01em;line-height:1.4}.md-typeset h3{margin:1.6rem 0 .8rem;font-size:1rem;font-weight:400;letter-spacing:-0.01em;line-height:1.5}.md-typeset h2+h3{margin-top:.8rem}.md-typeset h4{margin:.8rem 0;font-size:.8rem;font-weight:700;letter-spacing:-0.01em}.md-typeset h5,.md-typeset h6{margin:.8rem 0;color:var(--md-default-fg-color--light);font-size:.64rem;font-weight:700;letter-spacing:-0.01em}.md-typeset h5{text-transform:uppercase}.md-typeset hr{margin:1.5em 0;border-bottom:.05rem dotted var(--md-default-fg-color--lighter)}.md-typeset a{color:var(--md-primary-fg-color);word-break:break-word}.md-typeset a,.md-typeset a::before{transition:color 125ms}.md-typeset a:focus,.md-typeset a:hover{color:var(--md-accent-fg-color)}.md-typeset code,.md-typeset pre,.md-typeset kbd{background-color:var(--md-code-bg-color);color:var(--md-code-fg-color);font-size:85%;direction:ltr}.md-typeset code{margin:0 .2941176471em;padding:.0735294118em 0;border-radius:.1rem;box-shadow:.2941176471em 0 0 var(--md-code-bg-color),-0.2941176471em 0 0 var(--md-code-bg-color);word-break:break-word;-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset h1 code,.md-typeset h2 code,.md-typeset h3 code,.md-typeset h4 code,.md-typeset h5 code,.md-typeset h6 code{margin:0;background-color:transparent;box-shadow:none}.md-typeset a>code{margin:inherit;padding:inherit;border-radius:initial;background-color:inherit;color:inherit;box-shadow:none}.md-typeset pre{position:relative;margin:1em 0;border-radius:.1rem;line-height:1.4;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-overflow-scrolling:touch}.md-typeset pre>code{display:block;margin:0;padding:.525rem .6rem;background-color:transparent;font-size:inherit;box-shadow:none;-webkit-box-decoration-break:slice;box-decoration-break:slice;overflow:auto;word-break:normal}.md-typeset pre>code::-webkit-scrollbar{width:.2rem;height:.2rem}.md-typeset pre>code::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-typeset pre>code::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}.md-typeset kbd{display:inline-block;padding:0 .5882352941em;border-radius:.1rem;font-size:.75em;line-height:1.5;box-shadow:0 .1rem 0 .05rem var(--md-default-fg-color--lighter),0 .1rem 0 var(--md-default-fg-color--lighter),inset 0 -0.1rem .2rem var(--md-default-bg-color);word-break:break-word;vertical-align:text-top}.md-typeset mark{margin:0 .25em;padding:.0625em 0;border-radius:.1rem;background-color:rgba(255,235,59,.5);box-shadow:.25em 0 0 rgba(255,235,59,.5),-0.25em 0 0 rgba(255,235,59,.5);word-break:break-word;-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset abbr{border-bottom:.05rem dotted var(--md-default-fg-color--light);text-decoration:none;cursor:help}.md-typeset small{opacity:.75}.md-typeset sup,.md-typeset sub{margin-left:.078125em}[dir=rtl] .md-typeset sup,[dir=rtl] .md-typeset sub{margin-right:.078125em;margin-left:initial}.md-typeset blockquote{padding-left:.6rem;border-left:.2rem solid var(--md-default-fg-color--lighter);color:var(--md-default-fg-color--light)}[dir=rtl] .md-typeset blockquote{padding-right:.6rem;padding-left:initial;border-right:.2rem solid var(--md-default-fg-color--lighter);border-left:initial}.md-typeset ul{list-style-type:disc}.md-typeset ul,.md-typeset ol{margin-left:.625em;padding:0}[dir=rtl] .md-typeset ul,[dir=rtl] .md-typeset ol{margin-right:.625em;margin-left:initial}.md-typeset ul ol,.md-typeset ol ol{list-style-type:lower-alpha}.md-typeset ul ol ol,.md-typeset ol ol ol{list-style-type:lower-roman}.md-typeset ul li,.md-typeset ol li{margin-bottom:.5em;margin-left:1.25em}[dir=rtl] .md-typeset ul li,[dir=rtl] .md-typeset ol li{margin-right:1.25em;margin-left:initial}.md-typeset ul li p,.md-typeset ul li blockquote,.md-typeset ol li p,.md-typeset ol li blockquote{margin:.5em 0}.md-typeset ul li:last-child,.md-typeset ol li:last-child{margin-bottom:0}.md-typeset ul li ul,.md-typeset ul li ol,.md-typeset ol li ul,.md-typeset ol li ol{margin:.5em 0 .5em .625em}[dir=rtl] .md-typeset ul li ul,[dir=rtl] .md-typeset ul li ol,[dir=rtl] .md-typeset ol li ul,[dir=rtl] .md-typeset ol li ol{margin-right:.625em;margin-left:initial}.md-typeset dd{margin:1em 0 1em 1.875em}[dir=rtl] .md-typeset dd{margin-right:1.875em;margin-left:initial}.md-typeset iframe,.md-typeset img,.md-typeset svg{max-width:100%}.md-typeset table:not([class]){display:inline-block;max-width:100%;border-radius:.1rem;background:var(--md-default-bg-color);font-size:.64rem;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .05rem rgba(0,0,0,.1);overflow:auto;-webkit-overflow-scrolling:touch}.md-typeset table:not([class])+*{margin-top:1.5em}.md-typeset table:not([class]) th:not([align]),.md-typeset table:not([class]) td:not([align]){text-align:left}[dir=rtl] .md-typeset table:not([class]) th:not([align]),[dir=rtl] .md-typeset table:not([class]) td:not([align]){text-align:right}.md-typeset table:not([class]) th{min-width:5rem;padding:.6rem .8rem;background-color:var(--md-default-fg-color--light);color:var(--md-default-bg-color);vertical-align:top}.md-typeset table:not([class]) td{padding:.6rem .8rem;border-top:.05rem solid var(--md-default-fg-color--lightest);vertical-align:top}.md-typeset table:not([class]) tr{transition:background-color 125ms}.md-typeset table:not([class]) tr:hover{background-color:rgba(0,0,0,.035);box-shadow:0 .05rem 0 var(--md-default-bg-color) inset}.md-typeset table:not([class]) tr:first-child td{border-top:0}.md-typeset table:not([class]) a{word-break:normal}.md-typeset__scrollwrap{margin:1em -0.8rem;overflow-x:auto;-webkit-overflow-scrolling:touch}.md-typeset .md-typeset__table{display:inline-block;margin-bottom:.5em;padding:0 .8rem}.md-typeset .md-typeset__table table{display:table;width:100%;margin:0;overflow:hidden}html{height:100%;background-color:var(--md-default-bg-color);font-size:125%;overflow-x:hidden}body{display:flex;position:relative;flex-direction:column;width:100%;min-height:100%;font-size:.5rem}hr{display:block;height:.05rem;padding:0;border:0}.md-grid{max-width:61rem;margin-right:auto;margin-left:auto}.md-container{display:flex;flex-direction:column;flex-grow:1}.md-main{flex-grow:1}.md-main__inner{height:100%;padding-top:1.5rem;padding-bottom:.05rem}.md-ellipsis{display:block;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.md-toggle{display:none}.md-overlay{position:fixed;top:0;width:0;height:0;transition:width 0ms 250ms,height 0ms 250ms,opacity 250ms;background-color:var(--md-default-fg-color--light);opacity:0;z-index:3}.md-skip{position:fixed;margin:.5rem;padding:.3rem .5rem;transform:translateY(0.4rem);border-radius:.1rem;background-color:var(--md-default-fg-color);color:var(--md-default-bg-color);font-size:.64rem;opacity:0}.md-skip:focus{transform:translateY(0);transition:transform 250ms cubic-bezier(0.4, 0, 0.2, 1),opacity 175ms 75ms;opacity:1;z-index:10}@page{margin:25mm}.md-announce{background-color:var(--md-default-fg-color)}.md-announce__inner{min-height:2.4rem;padding:0 .8rem;color:var(--md-default-bg-color);font-size:.7rem;line-height:2.4rem}.md-clipboard{position:absolute;top:.4rem;right:.4rem;width:1.2rem;height:1.2rem;transition:color 250ms;border-radius:.1rem;color:var(--md-default-fg-color--lightest);cursor:pointer;z-index:1;-webkit-backface-visibility:hidden;backface-visibility:hidden}.md-clipboard svg{width:.9rem;height:.9rem}pre:hover .md-clipboard{color:var(--md-default-fg-color--light)}pre .md-clipboard:focus,pre .md-clipboard:hover{color:var(--md-accent-fg-color)}.md-content__inner{margin:0 .8rem 1.2rem;padding-top:.6rem}.md-content__inner::before{display:block;height:.4rem;content:""}.md-content__inner>:last-child{margin-bottom:0}.md-content__button{margin:.4rem 0;margin-left:.4rem;padding:0;float:right}[dir=rtl] .md-content__button{margin-right:.4rem;margin-left:initial;float:left}[dir=rtl] .md-content__button svg{transform:scaleX(-1)}.md-typeset .md-content__button{color:var(--md-default-fg-color--lighter)}.md-content__button svg{display:inline;vertical-align:top}.md-dialog{box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);display:block;position:fixed;right:.8rem;bottom:.8rem;left:initial;min-width:11.1rem;padding:.4rem .6rem;transform:translateY(100%);transition:transform 0ms 400ms,opacity 400ms;border:none;border-radius:.1rem;background:var(--md-default-fg-color);color:var(--md-default-bg-color);font-size:.7rem;opacity:0;z-index:2}[dir=rtl] .md-dialog{right:initial;left:.8rem}.md-dialog[data-md-state=open]{transform:translateY(0);transition:transform 400ms cubic-bezier(0.075, 0.85, 0.175, 1),opacity 400ms;opacity:1}.md-header{position:-webkit-sticky;position:sticky;top:0;right:0;left:0;height:2.4rem;transition:background-color 250ms,color 250ms;background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);box-shadow:0 0 .2rem rgba(0,0,0,0),0 .2rem .4rem rgba(0,0,0,0);z-index:2}.no-js .md-header{transition:none;box-shadow:none}.md-header[data-md-state=shadow]{transition:background-color 250ms,color 250ms,box-shadow 250ms;box-shadow:0 0 .2rem rgba(0,0,0,.1),0 .2rem .4rem rgba(0,0,0,.2)}.md-header-nav{display:flex;padding:0 .2rem}.md-header-nav__button{position:relative;margin:.2rem;padding:.4rem;transition:opacity 250ms;cursor:pointer;z-index:1}[dir=rtl] .md-header-nav__button svg{transform:scaleX(-1)}.md-header-nav__button:focus,.md-header-nav__button:hover{opacity:.7}.md-header-nav__button.md-logo{margin:.2rem;padding:.4rem}.md-header-nav__button.md-logo img,.md-header-nav__button.md-logo svg{display:block;width:1.2rem;height:1.2rem;fill:currentColor}.no-js .md-header-nav__button[for=__search]{display:none}.md-header-nav__topic{display:block;position:absolute;width:100%;padding:0 1rem;transition:transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1),opacity 150ms;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden}.md-header-nav__topic+.md-header-nav__topic{transform:translateX(1.25rem);transition:transform 400ms cubic-bezier(1, 0.7, 0.1, 0.1),opacity 150ms;opacity:0;z-index:-1;pointer-events:none}[dir=rtl] .md-header-nav__topic+.md-header-nav__topic{transform:translateX(-1.25rem)}.no-js .md-header-nav__topic{position:initial}.no-js .md-header-nav__topic+.md-header-nav__topic{display:none}.md-header-nav__title{flex-grow:1;font-size:.9rem;line-height:2.4rem}.md-header-nav__title[data-md-state=active] .md-header-nav__topic{transform:translateX(-1.25rem);transition:transform 400ms cubic-bezier(1, 0.7, 0.1, 0.1),opacity 150ms;opacity:0;z-index:-1;pointer-events:none}[dir=rtl] .md-header-nav__title[data-md-state=active] .md-header-nav__topic{transform:translateX(1.25rem)}.md-header-nav__title[data-md-state=active] .md-header-nav__topic+.md-header-nav__topic{transform:translateX(0);transition:transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1),opacity 150ms;opacity:1;z-index:0;pointer-events:initial}.md-header-nav__title>.md-header-nav__ellipsis{position:relative;width:100%;height:100%}.md-header-nav__source{display:none}.md-hero{transition:background 250ms;background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);font-size:1rem;overflow:hidden}.md-hero__inner{margin-top:1rem;padding:.8rem .8rem .4rem;transition:transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1),opacity 250ms;transition-delay:100ms}[data-md-state=hidden] .md-hero__inner{pointer-events:none;transform:translateY(0.625rem);transition:transform 0ms 400ms,opacity 100ms 0ms;opacity:0}.md-hero--expand .md-hero__inner{margin-bottom:1.2rem}.md-footer{background-color:var(--md-default-fg-color);color:var(--md-default-bg-color)}.md-footer-nav__inner{padding:.2rem;overflow:auto}.md-footer-nav__link{display:flex;padding-top:1.4rem;padding-bottom:.4rem;transition:opacity 250ms}.md-footer-nav__link:focus,.md-footer-nav__link:hover{opacity:.7}.md-footer-nav__link--prev{width:25%;float:left}[dir=rtl] .md-footer-nav__link--prev{float:right}[dir=rtl] .md-footer-nav__link--prev svg{transform:scaleX(-1)}.md-footer-nav__link--next{width:75%;float:right;text-align:right}[dir=rtl] .md-footer-nav__link--next{float:left;text-align:left}[dir=rtl] .md-footer-nav__link--next svg{transform:scaleX(-1)}.md-footer-nav__title{position:relative;flex-grow:1;max-width:calc(100% - 2.4rem);padding:0 1rem;font-size:.9rem;line-height:2.4rem}.md-footer-nav__button{margin:.2rem;padding:.4rem}.md-footer-nav__direction{position:absolute;right:0;left:0;margin-top:-1rem;padding:0 1rem;color:var(--md-default-bg-color--light);font-size:.64rem}.md-footer-meta{background-color:var(--md-default-fg-color--lighter)}.md-footer-meta__inner{padding:.2rem;overflow:auto}html .md-footer-meta.md-typeset a{color:var(--md-default-bg-color--light)}html .md-footer-meta.md-typeset a:focus,html .md-footer-meta.md-typeset a:hover{color:var(--md-default-bg-color)}.md-footer-copyright{margin:0 .6rem;padding:.4rem 0;color:var(--md-default-bg-color--lighter);font-size:.64rem}.md-footer-copyright__highlight{color:var(--md-default-bg-color--light)}.md-footer-social{margin:0 .4rem;padding:.2rem 0 .6rem}.md-footer-social__link{display:inline-block;width:1.6rem;height:1.6rem;transition:color 250ms;text-align:center}.md-footer-social__link::before{line-height:1.9}.md-footer-social__link svg{width:.8rem;vertical-align:-25%;fill:currentColor}.md-nav{font-size:.7rem;line-height:1.3}.md-nav__title{display:block;padding:0 .6rem;font-weight:700;text-overflow:ellipsis;overflow:hidden}.md-nav__title .md-nav__button{display:none}.md-nav__title .md-nav__button img{width:100%;height:auto}.md-nav__title .md-nav__button.md-logo img,.md-nav__title .md-nav__button.md-logo svg{display:block;width:2.4rem;height:2.4rem}.md-nav__title .md-nav__button.md-logo svg{fill:currentColor}.md-nav__list{margin:0;padding:0;list-style:none}.md-nav__item{padding:0 .6rem}.md-nav__item:last-child{padding-bottom:.6rem}.md-nav__item .md-nav__item{padding-right:0}[dir=rtl] .md-nav__item .md-nav__item{padding-right:.6rem;padding-left:0}.md-nav__item .md-nav__item:last-child{padding-bottom:0}.md-nav__link{display:block;margin-top:.625em;transition:color 125ms;text-overflow:ellipsis;cursor:pointer;overflow:hidden;scroll-snap-align:start}html .md-nav__link[for=__toc]{display:none}html .md-nav__link[for=__toc]~.md-nav{display:none}.md-nav__link[data-md-state=blur]{color:var(--md-default-fg-color--light)}.md-nav__item .md-nav__link--active{color:var(--md-primary-fg-color)}.md-nav__item--nested>.md-nav__link{color:inherit}.md-nav__link:focus,.md-nav__link:hover{color:var(--md-accent-fg-color)}.md-nav__source{display:none}.md-search{position:relative}.no-js .md-search{display:none}.md-search__overlay{opacity:0;z-index:1}.md-search__inner{-webkit-backface-visibility:hidden;backface-visibility:hidden}.md-search__form{position:relative}.md-search__input{position:relative;padding:0 2.2rem 0 3.6rem;text-overflow:ellipsis;z-index:2}[dir=rtl] .md-search__input{padding:0 3.6rem 0 2.2rem}.md-search__input::-webkit-input-placeholder{-webkit-transition:color 250ms;transition:color 250ms}.md-search__input::-moz-placeholder{-moz-transition:color 250ms;transition:color 250ms}.md-search__input::-ms-input-placeholder{-ms-transition:color 250ms;transition:color 250ms}.md-search__input::placeholder{transition:color 250ms}.md-search__input::-webkit-input-placeholder{color:var(--md-default-fg-color--light)}.md-search__input::-moz-placeholder{color:var(--md-default-fg-color--light)}.md-search__input::-ms-input-placeholder{color:var(--md-default-fg-color--light)}.md-search__input~.md-search__icon,.md-search__input::placeholder{color:var(--md-default-fg-color--light)}.md-search__input::-ms-clear{display:none}.md-search__icon{position:absolute;width:1.2rem;height:1.2rem;transition:color 250ms,opacity 250ms;cursor:pointer;z-index:2}.md-search__icon:hover{opacity:.7}.md-search__icon[for=__search]{top:.3rem;left:.5rem}[dir=rtl] .md-search__icon[for=__search]{right:.5rem;left:initial}[dir=rtl] .md-search__icon[for=__search] svg{transform:scaleX(-1)}.md-search__icon[type=reset]{top:.3rem;right:.5rem;transform:scale(0.75);transition:transform 150ms cubic-bezier(0.1, 0.7, 0.1, 1),opacity 150ms;opacity:0;pointer-events:none}[dir=rtl] .md-search__icon[type=reset]{right:initial;left:.5rem}[data-md-toggle=search]:checked~.md-header .md-search__input:valid~.md-search__icon[type=reset]{transform:scale(1);opacity:1;pointer-events:initial}[data-md-toggle=search]:checked~.md-header .md-search__input:valid~.md-search__icon[type=reset]:hover{opacity:.7}.md-search__output{position:absolute;width:100%;border-radius:0 0 .1rem .1rem;overflow:hidden;z-index:1}.md-search__scrollwrap{height:100%;background-color:var(--md-default-bg-color);box-shadow:inset 0 .05rem 0 var(--md-default-fg-color--lightest);overflow-y:auto;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-scroll-snap-type:y mandatory;-ms-scroll-snap-type:y mandatory;scroll-snap-type:y mandatory;-webkit-overflow-scrolling:touch}.md-search-result{color:var(--md-default-fg-color);word-break:break-word}.md-search-result__meta{padding:0 .8rem;background-color:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--light);font-size:.64rem;line-height:1.8rem;scroll-snap-align:start}.md-search-result__list{margin:0;padding:0;border-top:.05rem solid var(--md-default-fg-color--lightest);list-style:none}.md-search-result__item{box-shadow:0 -0.05rem 0 var(--md-default-fg-color--lightest)}.md-search-result__link{display:block;transition:background 250ms;outline:0;overflow:hidden;scroll-snap-align:start}.md-search-result__link:focus,.md-search-result__link:hover{background-color:var(--md-accent-fg-color--transparent)}.md-search-result__link:focus .md-search-result__article::before,.md-search-result__link:hover .md-search-result__article::before{opacity:.7}.md-search-result__link:last-child .md-search-result__teaser{margin-bottom:.6rem}.md-search-result__article{position:relative;padding:0 .8rem;overflow:auto}.md-search-result__article--document .md-search-result__title{margin:.55rem 0;font-size:.8rem;font-weight:400;line-height:1.4}.md-search-result__icon{position:absolute;left:0;margin:.1rem;padding:.4rem;color:var(--md-default-fg-color--light)}[dir=rtl] .md-search-result__icon{right:0;left:initial}[dir=rtl] .md-search-result__icon svg{transform:scaleX(-1)}.md-search-result__title{margin:.5em 0;font-size:.64rem;font-weight:700;line-height:1.4}.md-search-result__teaser{display:-webkit-box;max-height:1.65rem;margin:.5em 0;color:var(--md-default-fg-color--light);font-size:.64rem;line-height:1.4;text-overflow:ellipsis;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:2}.md-search-result em{font-style:normal;font-weight:700;text-decoration:underline}.md-sidebar{position:absolute;width:12.1rem;padding:1.2rem 0;overflow:hidden}.md-sidebar[data-md-state=lock]{position:fixed;top:2.4rem}.md-sidebar--secondary{display:none}.md-sidebar__scrollwrap{max-height:100%;margin:0 .2rem;overflow-y:auto;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-scroll-snap-type:y mandatory;-ms-scroll-snap-type:y mandatory;scroll-snap-type:y mandatory}.md-sidebar__scrollwrap::-webkit-scrollbar{width:.2rem;height:.2rem}.md-sidebar__scrollwrap::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}@-webkit-keyframes md-source__facts--done{0%{height:0}100%{height:.65rem}}@keyframes md-source__facts--done{0%{height:0}100%{height:.65rem}}@-webkit-keyframes md-source__fact--done{0%{transform:translateY(100%);opacity:0}50%{opacity:0}100%{transform:translateY(0%);opacity:1}}@keyframes md-source__fact--done{0%{transform:translateY(100%);opacity:0}50%{opacity:0}100%{transform:translateY(0%);opacity:1}}.md-source{display:block;transition:opacity 250ms;font-size:.65rem;line-height:1.25;white-space:nowrap;-webkit-backface-visibility:hidden;backface-visibility:hidden}[dir=rtl] .md-source{padding-right:initial;padding-left:.6rem}.md-source:hover{opacity:.7}.md-source__icon{display:inline-block;width:2.4rem;height:2.4rem;vertical-align:middle}.md-source__icon svg{margin-top:.6rem;margin-left:.6rem}[dir=rtl] .md-source__icon svg{margin-right:.6rem;margin-left:initial}.md-source__icon+.md-source__repository{margin-left:-2rem;padding-left:2rem}[dir=rtl] .md-source__icon+.md-source__repository{margin-right:-2rem;margin-left:initial;padding-right:2rem;padding-left:initial}.md-source__repository{display:inline-block;max-width:calc(100% - 1.2rem);margin-left:.6rem;font-weight:700;text-overflow:ellipsis;overflow:hidden;vertical-align:middle}.md-source__facts{margin:0;padding:0;font-size:.55rem;font-weight:700;list-style-type:none;opacity:.75;overflow:hidden}[data-md-state=done] .md-source__facts{-webkit-animation:md-source__facts--done 250ms ease-in;animation:md-source__facts--done 250ms ease-in}.md-source__fact{float:left}[dir=rtl] .md-source__fact{float:right}[data-md-state=done] .md-source__fact{-webkit-animation:md-source__fact--done 400ms ease-out;animation:md-source__fact--done 400ms ease-out}.md-source__fact::before{margin:0 .1rem;content:"·"}.md-source__fact:first-child::before{display:none}.md-tabs{width:100%;transition:background 250ms;background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);overflow:auto}.no-js .md-tabs{transition:none}.md-tabs__list{margin:0;margin-left:.2rem;padding:0;list-style:none;white-space:nowrap}[dir=rtl] .md-tabs__list{margin-right:.2rem;margin-left:initial}.md-tabs__item{display:inline-block;height:2.4rem;padding-right:.6rem;padding-left:.6rem}.md-tabs__link{display:block;margin-top:.8rem;transition:transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1),opacity 250ms;font-size:.7rem;opacity:.7}.no-js .md-tabs__link{transition:none}.md-tabs__link--active,.md-tabs__link:hover{color:inherit;opacity:1}.md-tabs__item:nth-child(2) .md-tabs__link{transition-delay:20ms}.md-tabs__item:nth-child(3) .md-tabs__link{transition-delay:40ms}.md-tabs__item:nth-child(4) .md-tabs__link{transition-delay:60ms}.md-tabs__item:nth-child(5) .md-tabs__link{transition-delay:80ms}.md-tabs__item:nth-child(6) .md-tabs__link{transition-delay:100ms}.md-tabs__item:nth-child(7) .md-tabs__link{transition-delay:120ms}.md-tabs__item:nth-child(8) .md-tabs__link{transition-delay:140ms}.md-tabs__item:nth-child(9) .md-tabs__link{transition-delay:160ms}.md-tabs__item:nth-child(10) .md-tabs__link{transition-delay:180ms}.md-tabs__item:nth-child(11) .md-tabs__link{transition-delay:200ms}.md-tabs__item:nth-child(12) .md-tabs__link{transition-delay:220ms}.md-tabs__item:nth-child(13) .md-tabs__link{transition-delay:240ms}.md-tabs__item:nth-child(14) .md-tabs__link{transition-delay:260ms}.md-tabs__item:nth-child(15) .md-tabs__link{transition-delay:280ms}.md-tabs__item:nth-child(16) .md-tabs__link{transition-delay:300ms}.md-tabs[data-md-state=hidden]{pointer-events:none}.md-tabs[data-md-state=hidden] .md-tabs__link{transform:translateY(50%);transition:color 250ms,transform 0ms 400ms,opacity 100ms;opacity:0}.md-typeset .admonition,.md-typeset details{margin:1.5625em 0;padding:0 .6rem;border-left:.2rem solid #448aff;border-radius:.1rem;font-size:.64rem;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .05rem rgba(0,0,0,.1);overflow:auto}[dir=rtl] .md-typeset .admonition,[dir=rtl] .md-typeset details{border-right:.2rem solid #448aff;border-left:none}html .md-typeset .admonition>:last-child,html .md-typeset details>:last-child{margin-bottom:.6rem}.md-typeset .admonition .admonition,.md-typeset details .admonition,.md-typeset .admonition details,.md-typeset details details{margin:1em 0}.md-typeset .admonition.tldr,.md-typeset details.tldr,.md-typeset .admonition.summary,.md-typeset details.summary,.md-typeset .admonition.abstract,.md-typeset details.abstract{border-left-color:#00b0ff}.md-typeset .admonition.tldr>:first-child,.md-typeset details.tldr>:first-child,.md-typeset .admonition.summary>:first-child,.md-typeset details.summary>:first-child,.md-typeset .admonition.abstract>:first-child,.md-typeset details.abstract>:first-child{background-color:rgba(0,176,255,.1)}.md-typeset .admonition.tldr>:first-child::before,.md-typeset details.tldr>:first-child::before,.md-typeset .admonition.summary>:first-child::before,.md-typeset details.summary>:first-child::before,.md-typeset .admonition.abstract>:first-child::before,.md-typeset details.abstract>:first-child::before{background-color:#00b0ff;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .admonition.todo,.md-typeset details.todo,.md-typeset .admonition.info,.md-typeset details.info{border-left-color:#00b8d4}.md-typeset .admonition.todo>:first-child,.md-typeset details.todo>:first-child,.md-typeset .admonition.info>:first-child,.md-typeset details.info>:first-child{background-color:rgba(0,184,212,.1)}.md-typeset .admonition.todo>:first-child::before,.md-typeset details.todo>:first-child::before,.md-typeset .admonition.info>:first-child::before,.md-typeset details.info>:first-child::before{background-color:#00b8d4;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .admonition.important,.md-typeset details.important,.md-typeset .admonition.hint,.md-typeset details.hint,.md-typeset .admonition.tip,.md-typeset details.tip{border-left-color:#00bfa5}.md-typeset .admonition.important>:first-child,.md-typeset details.important>:first-child,.md-typeset .admonition.hint>:first-child,.md-typeset details.hint>:first-child,.md-typeset .admonition.tip>:first-child,.md-typeset details.tip>:first-child{background-color:rgba(0,191,165,.1)}.md-typeset .admonition.important>:first-child::before,.md-typeset details.important>:first-child::before,.md-typeset .admonition.hint>:first-child::before,.md-typeset details.hint>:first-child::before,.md-typeset .admonition.tip>:first-child::before,.md-typeset details.tip>:first-child::before{background-color:#00bfa5;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .admonition.done,.md-typeset details.done,.md-typeset .admonition.check,.md-typeset details.check,.md-typeset .admonition.success,.md-typeset details.success{border-left-color:#00c853}.md-typeset .admonition.done>:first-child,.md-typeset details.done>:first-child,.md-typeset .admonition.check>:first-child,.md-typeset details.check>:first-child,.md-typeset .admonition.success>:first-child,.md-typeset details.success>:first-child{background-color:rgba(0,200,83,.1)}.md-typeset .admonition.done>:first-child::before,.md-typeset details.done>:first-child::before,.md-typeset .admonition.check>:first-child::before,.md-typeset details.check>:first-child::before,.md-typeset .admonition.success>:first-child::before,.md-typeset details.success>:first-child::before{background-color:#00c853;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .admonition.faq,.md-typeset details.faq,.md-typeset .admonition.help,.md-typeset details.help,.md-typeset .admonition.question,.md-typeset details.question{border-left-color:#64dd17}.md-typeset .admonition.faq>:first-child,.md-typeset details.faq>:first-child,.md-typeset .admonition.help>:first-child,.md-typeset details.help>:first-child,.md-typeset .admonition.question>:first-child,.md-typeset details.question>:first-child{background-color:rgba(100,221,23,.1)}.md-typeset .admonition.faq>:first-child::before,.md-typeset details.faq>:first-child::before,.md-typeset .admonition.help>:first-child::before,.md-typeset details.help>:first-child::before,.md-typeset .admonition.question>:first-child::before,.md-typeset details.question>:first-child::before{background-color:#64dd17;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .admonition.attention,.md-typeset details.attention,.md-typeset .admonition.caution,.md-typeset details.caution,.md-typeset .admonition.warning,.md-typeset details.warning{border-left-color:#ff9100}.md-typeset .admonition.attention>:first-child,.md-typeset details.attention>:first-child,.md-typeset .admonition.caution>:first-child,.md-typeset details.caution>:first-child,.md-typeset .admonition.warning>:first-child,.md-typeset details.warning>:first-child{background-color:rgba(255,145,0,.1)}.md-typeset .admonition.attention>:first-child::before,.md-typeset details.attention>:first-child::before,.md-typeset .admonition.caution>:first-child::before,.md-typeset details.caution>:first-child::before,.md-typeset .admonition.warning>:first-child::before,.md-typeset details.warning>:first-child::before{background-color:#ff9100;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .admonition.missing,.md-typeset details.missing,.md-typeset .admonition.fail,.md-typeset details.fail,.md-typeset .admonition.failure,.md-typeset details.failure{border-left-color:#ff5252}.md-typeset .admonition.missing>:first-child,.md-typeset details.missing>:first-child,.md-typeset .admonition.fail>:first-child,.md-typeset details.fail>:first-child,.md-typeset .admonition.failure>:first-child,.md-typeset details.failure>:first-child{background-color:rgba(255,82,82,.1)}.md-typeset .admonition.missing>:first-child::before,.md-typeset details.missing>:first-child::before,.md-typeset .admonition.fail>:first-child::before,.md-typeset details.fail>:first-child::before,.md-typeset .admonition.failure>:first-child::before,.md-typeset details.failure>:first-child::before{background-color:#ff5252;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .admonition.error,.md-typeset details.error,.md-typeset .admonition.danger,.md-typeset details.danger{border-left-color:#ff1744}.md-typeset .admonition.error>:first-child,.md-typeset details.error>:first-child,.md-typeset .admonition.danger>:first-child,.md-typeset details.danger>:first-child{background-color:rgba(255,23,68,.1)}.md-typeset .admonition.error>:first-child::before,.md-typeset details.error>:first-child::before,.md-typeset .admonition.danger>:first-child::before,.md-typeset details.danger>:first-child::before{background-color:#ff1744;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .admonition.bug,.md-typeset details.bug{border-left-color:#f50057}.md-typeset .admonition.bug>:first-child,.md-typeset details.bug>:first-child{background-color:rgba(245,0,87,.1)}.md-typeset .admonition.bug>:first-child::before,.md-typeset details.bug>:first-child::before{background-color:#f50057;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .admonition.example,.md-typeset details.example{border-left-color:#651fff}.md-typeset .admonition.example>:first-child,.md-typeset details.example>:first-child{background-color:rgba(101,31,255,.1)}.md-typeset .admonition.example>:first-child::before,.md-typeset details.example>:first-child::before{background-color:#651fff;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .admonition.cite,.md-typeset details.cite,.md-typeset .admonition.quote,.md-typeset details.quote{border-left-color:#9e9e9e}.md-typeset .admonition.cite>:first-child,.md-typeset details.cite>:first-child,.md-typeset .admonition.quote>:first-child,.md-typeset details.quote>:first-child{background-color:rgba(158,158,158,.1)}.md-typeset .admonition.cite>:first-child::before,.md-typeset details.cite>:first-child::before,.md-typeset .admonition.quote>:first-child::before,.md-typeset details.quote>:first-child::before{background-color:#9e9e9e;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .admonition-title,.md-typeset summary{margin:0 -0.6rem;padding:.4rem .6rem .4rem 2rem;background-color:rgba(68,138,255,.1);font-weight:700}[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{padding:.4rem 2rem .4rem .6rem}.md-typeset .admonition-title:last-child,.md-typeset summary:last-child{margin-bottom:0}.md-typeset .admonition-title::before,.md-typeset summary::before{position:absolute;width:1rem;height:1rem;margin-left:-1.4rem;background-color:#448aff;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,");content:""}[dir=rtl] .md-typeset .admonition-title::before,[dir=rtl] .md-typeset summary::before{margin-right:-1.4rem;margin-left:initial}.codehilite .o,.highlight .o{color:inherit}.codehilite .ow,.highlight .ow{color:inherit}.codehilite .ge,.highlight .ge{color:#000}.codehilite .gr,.highlight .gr{color:#a00}.codehilite .gh,.highlight .gh{color:#999}.codehilite .go,.highlight .go{color:#888}.codehilite .gp,.highlight .gp{color:#555}.codehilite .gs,.highlight .gs{color:inherit}.codehilite .gu,.highlight .gu{color:#aaa}.codehilite .gt,.highlight .gt{color:#a00}.codehilite .gd,.highlight .gd{background-color:#fdd}.codehilite .gi,.highlight .gi{background-color:#dfd}.codehilite .k,.highlight .k{color:#3b78e7}.codehilite .kc,.highlight .kc{color:#a71d5d}.codehilite .kd,.highlight .kd{color:#3b78e7}.codehilite .kn,.highlight .kn{color:#3b78e7}.codehilite .kp,.highlight .kp{color:#a71d5d}.codehilite .kr,.highlight .kr{color:#3e61a2}.codehilite .kt,.highlight .kt{color:#3e61a2}.codehilite .c,.highlight .c{color:#999}.codehilite .cm,.highlight .cm{color:#999}.codehilite .cp,.highlight .cp{color:#666}.codehilite .c1,.highlight .c1{color:#999}.codehilite .ch,.highlight .ch{color:#999}.codehilite .cs,.highlight .cs{color:#999}.codehilite .na,.highlight .na{color:#c2185b}.codehilite .nb,.highlight .nb{color:#c2185b}.codehilite .bp,.highlight .bp{color:#3e61a2}.codehilite .nc,.highlight .nc{color:#c2185b}.codehilite .no,.highlight .no{color:#3e61a2}.codehilite .nd,.highlight .nd{color:#666}.codehilite .ni,.highlight .ni{color:#666}.codehilite .ne,.highlight .ne{color:#c2185b}.codehilite .nf,.highlight .nf{color:#c2185b}.codehilite .nl,.highlight .nl{color:#3b5179}.codehilite .nn,.highlight .nn{color:#ec407a}.codehilite .nt,.highlight .nt{color:#3b78e7}.codehilite .nv,.highlight .nv{color:#3e61a2}.codehilite .vc,.highlight .vc{color:#3e61a2}.codehilite .vg,.highlight .vg{color:#3e61a2}.codehilite .vi,.highlight .vi{color:#3e61a2}.codehilite .nx,.highlight .nx{color:#ec407a}.codehilite .m,.highlight .m{color:#e74c3c}.codehilite .mf,.highlight .mf{color:#e74c3c}.codehilite .mh,.highlight .mh{color:#e74c3c}.codehilite .mi,.highlight .mi{color:#e74c3c}.codehilite .il,.highlight .il{color:#e74c3c}.codehilite .mo,.highlight .mo{color:#e74c3c}.codehilite .s,.highlight .s{color:#0d904f}.codehilite .sb,.highlight .sb{color:#0d904f}.codehilite .sc,.highlight .sc{color:#0d904f}.codehilite .sd,.highlight .sd{color:#999}.codehilite .s2,.highlight .s2{color:#0d904f}.codehilite .se,.highlight .se{color:#183691}.codehilite .sh,.highlight .sh{color:#183691}.codehilite .si,.highlight .si{color:#183691}.codehilite .sx,.highlight .sx{color:#183691}.codehilite .sr,.highlight .sr{color:#009926}.codehilite .s1,.highlight .s1{color:#0d904f}.codehilite .ss,.highlight .ss{color:#0d904f}.codehilite .err,.highlight .err{color:#a61717}.codehilite .w,.highlight .w{color:transparent}.codehilite .hll,.highlight .hll{display:block;margin:0 -0.6rem;padding:0 .6rem;background-color:rgba(255,235,59,.5)}.codehilitetable,.highlighttable{display:block;overflow:hidden}.codehilitetable tbody,.highlighttable tbody,.codehilitetable td,.highlighttable td{display:block;padding:0}.codehilitetable tr,.highlighttable tr{display:flex}.codehilitetable pre,.highlighttable pre,.codehilitetable .linenodiv,.highlighttable .linenodiv{margin:0;border-radius:0}.codehilitetable .linenodiv,.highlighttable .linenodiv{padding:.525rem .6rem}.codehilitetable .linenos,.highlighttable .linenos{color:var(--md-default-fg-color--lighter);box-shadow:inset 0 0 0 .05rem var(--md-code-bg-color);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.codehilitetable .linenos pre,.highlighttable .linenos pre{background-color:transparent;color:inherit;text-align:right}.codehilitetable .code,.highlighttable .code{flex:1;overflow:hidden}.md-typeset>.codehilitetable,.md-typeset>.highlighttable{margin:1em 0;border-radius:.2em}.md-typeset [id^="fnref:"]{display:inline-block}.md-typeset [id^="fnref:"]:target{margin-top:-3.8rem;padding-top:3.8rem;pointer-events:none}.md-typeset [id^="fn:"]::before{display:none;height:0;content:""}.md-typeset [id^="fn:"]:target::before{display:block;margin-top:-3.5rem;padding-top:3.5rem;pointer-events:none}.md-typeset .footnote{color:var(--md-default-fg-color--light);font-size:.64rem}.md-typeset .footnote ol{margin-left:0}.md-typeset .footnote li{transition:color 250ms}.md-typeset .footnote li:target{color:var(--md-default-fg-color)}.md-typeset .footnote li :first-child{margin-top:0}.md-typeset .footnote li:hover .footnote-backref,.md-typeset .footnote li:target .footnote-backref{transform:translateX(0);opacity:1}.md-typeset .footnote li:hover .footnote-backref:hover,.md-typeset .footnote li:target .footnote-backref{color:var(--md-accent-fg-color)}.md-typeset .footnote-ref{display:inline-block;pointer-events:initial}.md-typeset .footnote-ref::before{display:inline;margin:0 .2em;border-left:.05rem solid var(--md-default-fg-color--lighter);font-size:1.25em;content:"";vertical-align:-0.25rem}.md-typeset .footnote-backref{display:inline-block;transform:translateX(0.25rem);transition:transform 250ms 250ms,color 250ms,opacity 125ms 250ms;color:var(--md-default-fg-color--lighter);font-size:0;opacity:0;vertical-align:text-bottom}[dir=rtl] .md-typeset .footnote-backref{transform:translateX(-0.25rem)}.md-typeset .footnote-backref::before{display:inline-block;width:.8rem;height:.8rem;background-color:currentColor;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,");content:""}[dir=rtl] .md-typeset .footnote-backref::before svg{transform:scaleX(-1)}.md-typeset .headerlink{display:inline-block;margin-left:.5rem;transform:translate(0, 0.25rem);transition:transform 250ms 250ms,color 250ms,opacity 125ms 250ms,visibility 0ms 500ms;opacity:0;visibility:hidden}[dir=rtl] .md-typeset .headerlink{margin-right:.5rem;margin-left:initial}html body .md-typeset .headerlink{color:var(--md-default-fg-color--lighter)}.md-typeset :hover .headerlink,.md-typeset :target .headerlink,.md-typeset .headerlink:focus{transform:translate(0, 0);transition:transform 250ms 250ms,color 250ms,opacity 125ms 250ms,visibility 0ms;opacity:1;visibility:visible}.md-typeset .headerlink:focus,.md-typeset .headerlink:hover,.md-typeset :target .headerlink{color:var(--md-accent-fg-color)}.md-typeset h3[id]::before,.md-typeset h2[id]::before,.md-typeset h1[id]::before{display:block;margin-top:-0.4rem;padding-top:.4rem;content:""}.md-typeset h3[id]:target::before,.md-typeset h2[id]:target::before,.md-typeset h1[id]:target::before{margin-top:-3.4rem;padding-top:3.4rem}.md-typeset h4[id]::before{display:block;margin-top:-0.45rem;padding-top:.45rem;content:""}.md-typeset h4[id]:target::before{margin-top:-3.45rem;padding-top:3.45rem}.md-typeset h6[id]::before,.md-typeset h5[id]::before{display:block;margin-top:-0.6rem;padding-top:.6rem;content:""}.md-typeset h6[id]:target::before,.md-typeset h5[id]:target::before{margin-top:-3.6rem;padding-top:3.6rem}.md-typeset .MJXc-display{margin:.75em 0;padding:.75em 0;overflow:auto;-webkit-overflow-scrolling:touch}.md-typeset .MathJax_CHTML{outline:0}.md-typeset del.critic,.md-typeset ins.critic,.md-typeset .critic.comment{margin:0 .25em;padding:.0625em 0;border-radius:.1rem;-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset del.critic{background-color:#fdd;box-shadow:.25em 0 0 #fdd,-0.25em 0 0 #fdd}.md-typeset ins.critic{background-color:#dfd;box-shadow:.25em 0 0 #dfd,-0.25em 0 0 #dfd}.md-typeset .critic.comment{color:#999}.md-typeset .critic.comment::before{content:"/* "}.md-typeset .critic.comment::after{content:" */"}.md-typeset .critic.block{display:block;margin:1em 0;padding-right:.8rem;padding-left:.8rem;box-shadow:none}.md-typeset .critic.block :first-child{margin-top:.5em}.md-typeset .critic.block :last-child{margin-bottom:.5em}.md-typeset details{display:block;padding-top:0}.md-typeset details[open]>summary::after{transform:rotate(180deg)}.md-typeset details:not([open]){padding-bottom:0}.md-typeset details:not([open])>summary{border-bottom:none}.md-typeset details summary{position:relative;padding-right:2rem}[dir=rtl] .md-typeset details summary{padding-left:2rem}.md-typeset summary{display:block;outline:none;cursor:pointer}.md-typeset summary::-webkit-details-marker{display:none}.md-typeset summary::after{position:absolute;right:.6rem;width:1rem;height:1rem;background-color:var(--md-default-fg-color--lighter);-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,");content:""}[dir=rtl] .md-typeset summary::after{right:initial;left:.6rem}.md-typeset .emojione,.md-typeset .twemoji,.md-typeset .gemoji{width:1rem;vertical-align:text-top}.highlight [data-linenos]::before{display:inline-block;position:-webkit-sticky;position:sticky;left:-0.6rem;margin-right:.6rem;margin-left:-0.6rem;padding-left:.6rem;border-right:.05rem solid var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--lighter);content:attr(data-linenos);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.md-typeset code.codehilite,.md-typeset code.highlight{margin:0 .2941176471em;padding:.0735294118em 0}.md-typeset .tabbed-content{display:none;order:99;width:100%;background-color:var(--md-code-bg-color)}.md-typeset .tabbed-content pre{margin:0;border-radius:0}.md-typeset .tabbed-set{display:flex;position:relative;flex-wrap:wrap;margin:1em 0;border:.05rem solid var(--md-default-fg-color--lightest);border-radius:.1rem}.md-typeset .tabbed-set>input{display:none}.md-typeset .tabbed-set>input:checked+label{border-color:var(--md-accent-fg-color);color:var(--md-accent-fg-color)}.md-typeset .tabbed-set>input:checked+label+.tabbed-content{display:block;padding:0 .6rem}.md-typeset .tabbed-set>input:checked+label+.tabbed-content>:last-child{margin-bottom:.6rem}.md-typeset .tabbed-set>input:checked+label+.tabbed-content>pre:only-child,.md-typeset .tabbed-set>input:checked+label+.tabbed-content>.highlight:only-child,.md-typeset .tabbed-set>input:checked+label+.tabbed-content>.highlighttable:only-child,.md-typeset .tabbed-set>input:checked+label+.tabbed-content>.codehilite:only-child,.md-typeset .tabbed-set>input:checked+label+.tabbed-content>.codehilitetable:only-child{margin:0 -0.6rem}.md-typeset .tabbed-set>input:checked+label+.tabbed-content>pre:only-child pre,.md-typeset .tabbed-set>input:checked+label+.tabbed-content>.highlight:only-child pre,.md-typeset .tabbed-set>input:checked+label+.tabbed-content>.highlighttable:only-child pre,.md-typeset .tabbed-set>input:checked+label+.tabbed-content>.codehilite:only-child pre,.md-typeset .tabbed-set>input:checked+label+.tabbed-content>.codehilitetable:only-child pre{background:transparent}.md-typeset .tabbed-set>label{width:auto;padding:.6rem;padding-bottom:.5rem;transition:color 125ms,border 250ms;border-bottom:.1rem solid transparent;color:var(--md-default-fg-color--light);font-size:.64rem;font-weight:700;cursor:pointer}html .md-typeset .tabbed-set>label:hover{color:var(--md-accent-fg-color)}.md-typeset .task-list-item{position:relative;list-style-type:none}.md-typeset .task-list-item [type=checkbox]{position:absolute;top:.45em;left:-2em}[dir=rtl] .md-typeset .task-list-item [type=checkbox]{right:-2em;left:initial}.md-typeset .task-list-control .task-list-indicator::before{position:absolute;top:.15em;left:-1.5em;width:1.25em;height:1.25em;background-color:var(--md-default-fg-color--lightest);-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,");content:""}[dir=rtl] .md-typeset .task-list-control .task-list-indicator::before{right:-1.5em;left:initial}.md-typeset .task-list-control [type=checkbox]:checked+.task-list-indicator::before{background-color:#00e676;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .task-list-control [type=checkbox]{opacity:0;z-index:-1}@media print{.md-typeset a::after{color:var(--md-default-fg-color--light);content:" [" attr(href) "]"}.md-typeset code,.md-typeset pre,.md-typeset kbd{white-space:pre-wrap}.md-clipboard{display:none}.md-content__button{display:none}.md-dialog{display:none}.md-header{display:none}.md-footer{display:none}.md-sidebar{display:none}.md-tabs{display:none}.md-typeset .headerlink{display:none}}@media screen and (max-width: 44.9375em){.md-typeset>pre{margin:1em -0.8rem;border-radius:0}.md-typeset>pre>code{padding:.525rem .8rem}.md-footer-nav__link--prev .md-footer-nav__title{display:none}.md-search-result__teaser{max-height:2.5rem;-webkit-line-clamp:3}.codehilite .hll,.highlight .hll{margin:0 -0.8rem;padding:0 .8rem}.md-typeset>.codehilite,.md-typeset>.highlight{margin:1em -0.8rem}.md-typeset>.codehilite code,.md-typeset>.highlight code{padding:.525rem .8rem}.md-typeset>.codehilitetable,.md-typeset>.highlighttable{margin:1em -0.8rem;border-radius:0}.md-typeset>.codehilitetable .linenodiv,.md-typeset>.highlighttable .linenodiv{padding:.5rem .8rem}.md-typeset>p>.MJXc-display{margin:.75em -0.8rem;padding:.25em .8rem}.highlight [data-linenos]::before{left:-1.6rem;margin-left:-1.6rem;padding-left:1.6rem}.md-typeset>.tabbed-set{margin:1em -0.8rem;border:0;border-top:.05rem solid var(--md-default-fg-color--lightest);border-radius:0}.md-typeset>.tabbed-set code{padding:.525rem .8rem}.md-typeset>.tabbed-set input:first-child+label{margin-left:.2rem}}@media screen and (min-width: 100em){html{font-size:137.5%}}@media screen and (min-width: 125em){html{font-size:150%}}@media screen and (max-width: 59.9375em){body[data-md-state=lock]{position:fixed}html .md-nav__link[for=__toc]{display:block;padding-right:2.4rem}html .md-nav__link[for=__toc]+.md-nav__link{display:none}html .md-nav__link[for=__toc]~.md-nav{display:flex}html [dir=rtl] .md-nav__link{padding-right:.8rem;padding-left:2.4rem}.md-nav__source{display:block;padding:0 .2rem;background-color:var(--md-primary-fg-color--dark);color:var(--md-primary-bg-color)}.md-search__overlay{position:absolute;top:.2rem;left:-2.2rem;width:2rem;height:2rem;transform-origin:center;transition:transform 300ms 100ms,opacity 200ms 200ms;border-radius:1rem;background-color:var(--md-default-bg-color);overflow:hidden;pointer-events:none}[dir=rtl] .md-search__overlay{right:-2.2rem;left:initial}[data-md-toggle=search]:checked~.md-header .md-search__overlay{transition:transform 400ms,opacity 100ms;opacity:1}.md-search__inner{position:fixed;top:0;left:100%;width:100%;height:100%;transform:translateX(5%);transition:right 0ms 300ms,left 0ms 300ms,transform 150ms 150ms cubic-bezier(0.4, 0, 0.2, 1),opacity 150ms 150ms;opacity:0;z-index:2}[data-md-toggle=search]:checked~.md-header .md-search__inner{left:0;transform:translateX(0);transition:right 0ms 0ms,left 0ms 0ms,transform 150ms 150ms cubic-bezier(0.1, 0.7, 0.1, 1),opacity 150ms 150ms;opacity:1}[dir=rtl] [data-md-toggle=search]:checked~.md-header .md-search__inner{right:0;left:initial}html [dir=rtl] .md-search__inner{right:100%;left:initial;transform:translateX(-5%)}.md-search__input{width:100%;height:2.4rem;font-size:.9rem}.md-search__icon[for=__search]{top:.6rem;left:.8rem}[dir=rtl] .md-search__icon[for=__search]{right:.8rem;left:initial}.md-search__icon[for=__search] svg:first-child{display:none}.md-search__icon[type=reset]{top:.6rem;right:.8rem}[dir=rtl] .md-search__icon[type=reset]{right:initial;left:.8rem}.md-search__output{top:2.4rem;bottom:0}.md-search-result__icon{display:none}}@media screen and (max-width: 76.1875em){[data-md-toggle=drawer]:checked~.md-overlay{width:100%;height:100%;transition:width 0ms,height 0ms,opacity 250ms;opacity:1}.md-header-nav__button.md-logo{display:none}.md-hero__inner{margin-top:2.4rem;margin-bottom:1.2rem}.md-nav{background-color:var(--md-default-bg-color)}.md-nav--primary,.md-nav--primary .md-nav{display:flex;position:absolute;top:0;right:0;left:0;flex-direction:column;height:100%;z-index:1}.md-nav--primary .md-nav__title,.md-nav--primary .md-nav__item{font-size:.8rem;line-height:1.5}.md-nav--primary .md-nav__title{position:relative;height:5.6rem;padding:3rem .8rem .2rem;background-color:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--light);font-weight:400;line-height:2.4rem;white-space:nowrap;cursor:pointer}.md-nav--primary .md-nav__title .md-nav__icon{display:block;position:absolute;top:.4rem;left:.4rem;width:1.2rem;height:1.2rem;margin:.2rem}[dir=rtl] .md-nav--primary .md-nav__title .md-nav__icon{right:.4rem;left:initial}.md-nav--primary .md-nav__title~.md-nav__list{background-color:var(--md-default-bg-color);box-shadow:inset 0 .05rem 0 var(--md-default-fg-color--lightest);overflow-y:auto;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-scroll-snap-type:y mandatory;-ms-scroll-snap-type:y mandatory;scroll-snap-type:y mandatory}.md-nav--primary .md-nav__title~.md-nav__list>.md-nav__item:first-child{border-top:0}.md-nav--primary .md-nav__title[for=__drawer]{position:relative;background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color)}.md-nav--primary .md-nav__title[for=__drawer] .md-nav__button{display:block;position:absolute;top:.2rem;left:.2rem;margin:.2rem;padding:.4rem;font-size:2.4rem}html [dir=rtl] .md-nav--primary .md-nav__title[for=__drawer] .md-nav__button{right:.2rem;left:initial}.md-nav--primary .md-nav__list{flex:1}.md-nav--primary .md-nav__item{padding:0;border-top:.05rem solid var(--md-default-fg-color--lightest)}[dir=rtl] .md-nav--primary .md-nav__item{padding:0}.md-nav--primary .md-nav__item--nested>.md-nav__link{padding-right:2.4rem}[dir=rtl] .md-nav--primary .md-nav__item--nested>.md-nav__link{padding-right:.8rem;padding-left:2.4rem}.md-nav--primary .md-nav__item--active>.md-nav__link{color:var(--md-primary-fg-color)}.md-nav--primary .md-nav__link{position:relative;margin-top:0;padding:.6rem .8rem}.md-nav--primary .md-nav__link .md-nav__icon{position:absolute;top:50%;right:.6rem;margin-top:-0.6rem;color:inherit;font-size:1.2rem}[dir=rtl] .md-nav--primary .md-nav__link .md-nav__icon{right:initial;left:.6rem}[dir=rtl] .md-nav--primary .md-nav__icon svg{transform:scale(-1)}.md-nav--primary .md-nav--secondary .md-nav__link{position:static}.md-nav--primary .md-nav--secondary .md-nav{position:static;background-color:transparent}.md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-left:1.4rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-right:1.4rem;padding-left:initial}.md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-left:2rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-right:2rem;padding-left:initial}.md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-left:2.6rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-right:2.6rem;padding-left:initial}.md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-left:3.2rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-right:3.2rem;padding-left:initial}.md-nav__toggle~.md-nav{display:flex;transform:translateX(100%);transition:transform 250ms cubic-bezier(0.8, 0, 0.6, 1),opacity 125ms 50ms;opacity:0}[dir=rtl] .md-nav__toggle~.md-nav{transform:translateX(-100%)}.md-nav__toggle:checked~.md-nav{transform:translateX(0);transition:transform 250ms cubic-bezier(0.4, 0, 0.2, 1),opacity 125ms 125ms;opacity:1}.md-sidebar--primary{position:fixed;top:0;left:-12.1rem;width:12.1rem;height:100%;transform:translateX(0);transition:transform 250ms cubic-bezier(0.4, 0, 0.2, 1),box-shadow 250ms;background-color:var(--md-default-bg-color);z-index:3}[dir=rtl] .md-sidebar--primary{right:-12.1rem;left:initial}[data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{box-shadow:0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12),0 5px 5px -3px rgba(0,0,0,.4);transform:translateX(12.1rem)}[dir=rtl] [data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{transform:translateX(-12.1rem)}.md-sidebar--primary .md-sidebar__scrollwrap{overflow:hidden}.md-sidebar--primary .md-sidebar__scrollwrap{position:absolute;top:0;right:0;bottom:0;left:0;margin:0;-webkit-scroll-snap-type:none;-ms-scroll-snap-type:none;scroll-snap-type:none}.md-tabs{display:none}}@media screen and (min-width: 60em){.md-content{margin-right:12.1rem}[dir=rtl] .md-content{margin-right:initial;margin-left:12.1rem}.md-header-nav__button[for=__search]{display:none}.md-header-nav__source{display:block;width:11.7rem;max-width:11.7rem;margin-left:1rem}[dir=rtl] .md-header-nav__source{margin-right:1rem;margin-left:initial}.md-nav--secondary .md-nav__title[for=__toc]{scroll-snap-align:start}.md-nav--secondary .md-nav__title .md-nav__icon{display:none}.md-search{padding:.2rem 0}.md-search__overlay{position:fixed;top:0;left:0;width:0;height:0;transition:width 0ms 250ms,height 0ms 250ms,opacity 250ms;background-color:var(--md-default-fg-color--light);cursor:pointer}[dir=rtl] .md-search__overlay{right:0;left:initial}[data-md-toggle=search]:checked~.md-header .md-search__overlay{width:100%;height:100%;transition:width 0ms,height 0ms,opacity 250ms;opacity:1}.md-search__inner{position:relative;width:11.7rem;padding:.1rem 0;float:right;transition:width 250ms cubic-bezier(0.1, 0.7, 0.1, 1)}[dir=rtl] .md-search__inner{float:left}.md-search__form{border-radius:.1rem}.md-search__input{width:100%;height:1.8rem;padding-left:2.2rem;transition:background-color 250ms,color 250ms;border-radius:.1rem;background-color:var(--md-default-fg-color--lighter);color:inherit;font-size:.8rem}[dir=rtl] .md-search__input{padding-right:2.2rem}.md-search__input+.md-search__icon{color:var(--md-primary-bg-color)}.md-search__input::-webkit-input-placeholder{color:var(--md-primary-bg-color--light)}.md-search__input::-moz-placeholder{color:var(--md-primary-bg-color--light)}.md-search__input::-ms-input-placeholder{color:var(--md-primary-bg-color--light)}.md-search__input::placeholder{color:var(--md-primary-bg-color--light)}.md-search__input:hover{background-color:var(--md-default-bg-color--lightest)}[data-md-toggle=search]:checked~.md-header .md-search__input{border-radius:.1rem .1rem 0 0;background-color:var(--md-default-bg-color);color:var(--md-default-fg-color);text-overflow:clip}[data-md-toggle=search]:checked~.md-header .md-search__input::-webkit-input-placeholder{color:var(--md-default-fg-color--light)}[data-md-toggle=search]:checked~.md-header .md-search__input::-moz-placeholder{color:var(--md-default-fg-color--light)}[data-md-toggle=search]:checked~.md-header .md-search__input::-ms-input-placeholder{color:var(--md-default-fg-color--light)}[data-md-toggle=search]:checked~.md-header .md-search__input+.md-search__icon,[data-md-toggle=search]:checked~.md-header .md-search__input::placeholder{color:var(--md-default-fg-color--light)}.md-search__icon[for=__search] svg:last-child{display:none}.md-search__output{top:1.9rem;transition:opacity 400ms;opacity:0}[data-md-toggle=search]:checked~.md-header .md-search__output{box-shadow:0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12),0 3px 5px -1px rgba(0,0,0,.4);opacity:1}.md-search__scrollwrap{max-height:0}[data-md-toggle=search]:checked~.md-header .md-search__scrollwrap{max-height:75vh}.md-search__scrollwrap::-webkit-scrollbar{width:.2rem;height:.2rem}.md-search__scrollwrap::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}.md-search-result__meta{padding-left:2.2rem}[dir=rtl] .md-search-result__meta{padding-right:2.2rem;padding-left:initial}.md-search-result__article{padding-left:2.2rem}[dir=rtl] .md-search-result__article{padding-right:2.2rem;padding-left:.8rem}.md-sidebar--secondary{display:block;margin-left:calc(100% - 12.1rem)}[dir=rtl] .md-sidebar--secondary{margin-right:calc(100% - 12.1rem);margin-left:initial}.md-sidebar--secondary .md-sidebar__scrollwrap{-webkit-overflow-scrolling:touch}}@media screen and (min-width: 76.25em){.md-content{margin-left:12.1rem}[dir=rtl] .md-content{margin-right:12.1rem}.md-content__inner{margin-right:1.2rem;margin-left:1.2rem}.md-header-nav__button[for=__drawer]{display:none}.md-header-nav__source{margin-left:1.4rem}[dir=rtl] .md-header-nav__source{margin-right:1.4rem}.md-nav{transition:max-height 250ms cubic-bezier(0.86, 0, 0.07, 1)}.md-nav--primary .md-nav__title[for=__drawer]{scroll-snap-align:start}.md-nav--primary .md-nav__title .md-nav__icon{display:none}.md-nav__toggle~.md-nav{display:none}.md-nav__toggle:checked~.md-nav{display:block}.md-nav__item--nested>.md-nav>.md-nav__title{display:none}.md-nav__icon{height:.9rem;float:right;transition:transform 250ms}.md-nav__icon svg{display:inline-block;width:.9rem;height:.9rem;vertical-align:-0.1rem}.md-nav__item--nested .md-nav__toggle:checked~.md-nav__link .md-nav__icon{transform:rotateZ(90deg)}[data-md-toggle=search]:checked~.md-header .md-search__inner{width:34.4rem}.md-search__scrollwrap{width:34.4rem}.md-sidebar--secondary{margin-left:48.9rem}[dir=rtl] .md-sidebar--secondary{margin-right:48.9rem;margin-left:initial}.md-tabs~.md-main .md-nav--primary>.md-nav__list>.md-nav__item--nested{display:none}.md-tabs--active~.md-main .md-nav--primary .md-nav__title{display:block;padding:0 .6rem;pointer-events:none;scroll-snap-align:start}.md-tabs--active~.md-main .md-nav--primary .md-nav__title[for=__drawer]{display:none}.md-tabs--active~.md-main .md-nav--primary>.md-nav__list>.md-nav__item{display:none}.md-tabs--active~.md-main .md-nav--primary>.md-nav__list>.md-nav__item--active{display:block;padding:0}.md-tabs--active~.md-main .md-nav--primary>.md-nav__list>.md-nav__item--active>.md-nav__link{display:none}.md-tabs--active~.md-main .md-nav[data-md-level="1"]>.md-nav__list>.md-nav__item{padding:0 .6rem}.md-tabs--active~.md-main .md-nav[data-md-level="1"] .md-nav .md-nav__title{display:none}}@media screen and (min-width: 45em){.md-footer-nav__link{width:50%}.md-footer-copyright{max-width:75%;float:left}[dir=rtl] .md-footer-copyright{float:right}.md-footer-social{padding:.6rem 0;float:right}[dir=rtl] .md-footer-social{float:left}}@media screen and (max-width: 29.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(45)}}@media screen and (min-width: 30em)and (max-width: 44.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(60)}}@media screen and (min-width: 45em)and (max-width: 59.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(75)}}@media screen and (min-width: 60em)and (max-width: 76.1875em){[data-md-toggle=search]:checked~.md-header .md-search__inner{width:23.4rem}.md-search__scrollwrap{width:23.4rem}.md-search-result__teaser{max-height:2.5rem;-webkit-line-clamp:3}}@media(-webkit-max-device-pixel-ratio: 1), (max-resolution: 1dppx){.md-search__scrollwrap{transform:translateZ(0)}} \ No newline at end of file diff --git a/material/assets/stylesheets/main.c05f2dae.min.css b/material/assets/stylesheets/main.c05f2dae.min.css deleted file mode 100644 index 79c14ee2f..000000000 --- a/material/assets/stylesheets/main.c05f2dae.min.css +++ /dev/null @@ -1 +0,0 @@ -html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}html{-webkit-text-size-adjust:none;-moz-text-size-adjust:none;-ms-text-size-adjust:none;text-size-adjust:none}body{margin:0}hr{overflow:visible;box-sizing:content-box}a{-webkit-text-decoration-skip:objects}a,button,label,input{-webkit-tap-highlight-color:transparent}a{color:inherit;text-decoration:none}small{font-size:80%}sub,sup{position:relative;font-size:80%;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}table{border-collapse:separate;border-spacing:0}td,th{font-weight:normal;vertical-align:top}button{margin:0;padding:0;border:0;background:transparent;font-size:inherit}input{border:0;outline:0}:root{--md-default-fg-color: hsla(0, 0%, 0%, 0.87);--md-default-fg-color--light: hsla(0, 0%, 0%, 0.54);--md-default-fg-color--lighter: hsla(0, 0%, 0%, 0.26);--md-default-fg-color--lightest: hsla(0, 0%, 0%, 0.07);--md-default-bg-color: hsla(0, 0%, 100%, 1);--md-default-bg-color--light: hsla(0, 0%, 100%, 0.7);--md-default-bg-color--lighter: hsla(0, 0%, 100%, 0.3);--md-default-bg-color--lightest: hsla(0, 0%, 100%, 0.12);--md-primary-fg-color: hsla(231deg, 48%, 48%, 1);--md-primary-fg-color--light: hsla(230deg, 44%, 64%, 1);--md-primary-fg-color--dark: hsla(232deg, 54%, 41%, 1);--md-primary-bg-color: var(--md-default-bg-color);--md-primary-bg-color--light: var(--md-default-bg-color--light);--md-accent-fg-color: hsla(231deg, 99%, 66%, 1);--md-accent-fg-color--transparent: hsla(231deg, 99%, 66%, 0.1);--md-accent-bg-color: var(--md-default-bg-color);--md-accent-bg-color--light: var(--md-default-bg-color--light);--md-code-bg-color: hsla(0, 0%, 92.5%, 0.5);--md-code-fg-color: hsla(200, 18%, 26%, 1)}.md-icon svg{display:block;width:1.2rem;height:1.2rem;margin:0 auto;fill:currentColor}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body,input{color:var(--md-default-fg-color);-webkit-font-feature-settings:"kern","liga";font-feature-settings:"kern","liga";font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}code,pre,kbd{color:var(--md-default-fg-color);-webkit-font-feature-settings:"kern";font-feature-settings:"kern";font-family:"Courier New",Courier,monospace}.md-typeset{font-size:.8rem;line-height:1.6;-webkit-print-color-adjust:exact}.md-typeset p,.md-typeset ul,.md-typeset ol,.md-typeset blockquote{margin:1em 0}.md-typeset h1{margin:0 0 2rem;color:var(--md-default-fg-color--light);font-size:1.5625rem;font-weight:300;letter-spacing:-0.01em;line-height:1.3}.md-typeset h2{margin:2rem 0 .8rem;font-size:1.25rem;font-weight:300;letter-spacing:-0.01em;line-height:1.4}.md-typeset h3{margin:1.6rem 0 .8rem;font-size:1rem;font-weight:400;letter-spacing:-0.01em;line-height:1.5}.md-typeset h2+h3{margin-top:.8rem}.md-typeset h4{margin:.8rem 0;font-size:.8rem;font-weight:700;letter-spacing:-0.01em}.md-typeset h5,.md-typeset h6{margin:.8rem 0;color:var(--md-default-fg-color--light);font-size:.64rem;font-weight:700;letter-spacing:-0.01em}.md-typeset h5{text-transform:uppercase}.md-typeset hr{margin:1.5em 0;border-bottom:.05rem dotted var(--md-default-fg-color--lighter)}.md-typeset a{color:var(--md-primary-fg-color);word-break:break-word}.md-typeset a,.md-typeset a::before{transition:color 125ms}.md-typeset a:focus,.md-typeset a:hover{color:var(--md-accent-fg-color)}.md-typeset code,.md-typeset pre,.md-typeset kbd{background-color:var(--md-code-bg-color);color:var(--md-code-fg-color);font-size:85%;direction:ltr}.md-typeset code{margin:0 .2941176471em;padding:.0735294118em 0;border-radius:.1rem;box-shadow:.2941176471em 0 0 var(--md-code-bg-color),-0.2941176471em 0 0 var(--md-code-bg-color);word-break:break-word;-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset h1 code,.md-typeset h2 code,.md-typeset h3 code,.md-typeset h4 code,.md-typeset h5 code,.md-typeset h6 code{margin:0;background-color:transparent;box-shadow:none}.md-typeset a>code{margin:inherit;padding:inherit;border-radius:initial;background-color:inherit;color:inherit;box-shadow:none}.md-typeset pre{position:relative;margin:1em 0;border-radius:.1rem;line-height:1.4;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-overflow-scrolling:touch}.md-typeset pre>code{display:block;margin:0;padding:.525rem .6rem;background-color:transparent;font-size:inherit;box-shadow:none;-webkit-box-decoration-break:slice;box-decoration-break:slice;overflow:auto;word-break:normal}.md-typeset pre>code::-webkit-scrollbar{width:.2rem;height:.2rem}.md-typeset pre>code::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-typeset pre>code::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}.md-typeset kbd{display:inline-block;padding:0 .5882352941em;border-radius:.1rem;font-size:.75em;line-height:1.5;box-shadow:0 .1rem 0 .05rem var(--md-default-fg-color--lighter),0 .1rem 0 var(--md-default-fg-color--lighter),inset 0 -0.1rem .2rem var(--md-default-bg-color);word-break:break-word;vertical-align:text-top}.md-typeset mark{margin:0 .25em;padding:.0625em 0;border-radius:.1rem;background-color:rgba(255,235,59,.5);box-shadow:.25em 0 0 rgba(255,235,59,.5),-0.25em 0 0 rgba(255,235,59,.5);word-break:break-word;-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset abbr{border-bottom:.05rem dotted var(--md-default-fg-color--light);text-decoration:none;cursor:help}.md-typeset small{opacity:.75}.md-typeset sup,.md-typeset sub{margin-left:.078125em}[dir=rtl] .md-typeset sup,[dir=rtl] .md-typeset sub{margin-right:.078125em;margin-left:initial}.md-typeset blockquote{padding-left:.6rem;border-left:.2rem solid var(--md-default-fg-color--lighter);color:var(--md-default-fg-color--light)}[dir=rtl] .md-typeset blockquote{padding-right:.6rem;padding-left:initial;border-right:.2rem solid var(--md-default-fg-color--lighter);border-left:initial}.md-typeset ul{list-style-type:disc}.md-typeset ul,.md-typeset ol{margin-left:.625em;padding:0}[dir=rtl] .md-typeset ul,[dir=rtl] .md-typeset ol{margin-right:.625em;margin-left:initial}.md-typeset ul ol,.md-typeset ol ol{list-style-type:lower-alpha}.md-typeset ul ol ol,.md-typeset ol ol ol{list-style-type:lower-roman}.md-typeset ul li,.md-typeset ol li{margin-bottom:.5em;margin-left:1.25em}[dir=rtl] .md-typeset ul li,[dir=rtl] .md-typeset ol li{margin-right:1.25em;margin-left:initial}.md-typeset ul li p,.md-typeset ul li blockquote,.md-typeset ol li p,.md-typeset ol li blockquote{margin:.5em 0}.md-typeset ul li:last-child,.md-typeset ol li:last-child{margin-bottom:0}.md-typeset ul li ul,.md-typeset ul li ol,.md-typeset ol li ul,.md-typeset ol li ol{margin:.5em 0 .5em .625em}[dir=rtl] .md-typeset ul li ul,[dir=rtl] .md-typeset ul li ol,[dir=rtl] .md-typeset ol li ul,[dir=rtl] .md-typeset ol li ol{margin-right:.625em;margin-left:initial}.md-typeset dd{margin:1em 0 1em 1.875em}[dir=rtl] .md-typeset dd{margin-right:1.875em;margin-left:initial}.md-typeset iframe,.md-typeset img,.md-typeset svg{max-width:100%}.md-typeset table:not([class]){display:inline-block;max-width:100%;border-radius:.1rem;background:var(--md-default-bg-color);font-size:.64rem;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .05rem rgba(0,0,0,.1);overflow:auto;-webkit-overflow-scrolling:touch}.md-typeset table:not([class])+*{margin-top:1.5em}.md-typeset table:not([class]) th:not([align]),.md-typeset table:not([class]) td:not([align]){text-align:left}[dir=rtl] .md-typeset table:not([class]) th:not([align]),[dir=rtl] .md-typeset table:not([class]) td:not([align]){text-align:right}.md-typeset table:not([class]) th{min-width:5rem;padding:.6rem .8rem;background-color:var(--md-default-fg-color--light);color:var(--md-default-bg-color);vertical-align:top}.md-typeset table:not([class]) td{padding:.6rem .8rem;border-top:.05rem solid var(--md-default-fg-color--lightest);vertical-align:top}.md-typeset table:not([class]) tr{transition:background-color 125ms}.md-typeset table:not([class]) tr:hover{background-color:rgba(0,0,0,.035);box-shadow:0 .05rem 0 var(--md-default-bg-color) inset}.md-typeset table:not([class]) tr:first-child td{border-top:0}.md-typeset table:not([class]) a{word-break:normal}.md-typeset__scrollwrap{margin:1em -0.8rem;overflow-x:auto;-webkit-overflow-scrolling:touch}.md-typeset .md-typeset__table{display:inline-block;margin-bottom:.5em;padding:0 .8rem}.md-typeset .md-typeset__table table{display:table;width:100%;margin:0;overflow:hidden}html{height:100%;background-color:var(--md-default-bg-color);font-size:125%;overflow-x:hidden}body{display:flex;position:relative;flex-direction:column;width:100%;min-height:100%;font-size:.5rem}hr{display:block;height:.05rem;padding:0;border:0}.md-grid{max-width:61rem;margin-right:auto;margin-left:auto}.md-container{display:flex;flex-direction:column;flex-grow:1}.md-main{flex-grow:1}.md-main__inner{height:100%;padding-top:1.5rem;padding-bottom:.05rem}.md-ellipsis{display:block;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.md-toggle{display:none}.md-overlay{position:fixed;top:0;width:0;height:0;transition:width 0ms 250ms,height 0ms 250ms,opacity 250ms;background-color:var(--md-default-fg-color--light);opacity:0;z-index:3}.md-skip{position:fixed;margin:.5rem;padding:.3rem .5rem;transform:translateY(0.4rem);border-radius:.1rem;background-color:var(--md-default-fg-color);color:var(--md-default-bg-color);font-size:.64rem;opacity:0}.md-skip:focus{transform:translateY(0);transition:transform 250ms cubic-bezier(0.4, 0, 0.2, 1),opacity 175ms 75ms;opacity:1;z-index:10}@page{margin:25mm}.md-announce{background-color:var(--md-default-fg-color)}.md-announce__inner{min-height:2.4rem;padding:0 .8rem;color:var(--md-default-bg-color);font-size:.7rem;line-height:2.4rem}.md-clipboard{position:absolute;top:.4rem;right:.4rem;width:1.2rem;height:1.2rem;transition:color 250ms;border-radius:.1rem;color:var(--md-default-fg-color--lightest);cursor:pointer;z-index:1;-webkit-backface-visibility:hidden;backface-visibility:hidden}.md-clipboard svg{width:.9rem;height:.9rem}pre:hover .md-clipboard{color:var(--md-default-fg-color--light)}pre .md-clipboard:focus,pre .md-clipboard:hover{color:var(--md-accent-fg-color)}.md-content__inner{margin:0 .8rem 1.2rem;padding-top:.6rem}.md-content__inner::before{display:block;height:.4rem;content:""}.md-content__inner>:last-child{margin-bottom:0}.md-content__button{margin:.4rem 0;margin-left:.4rem;padding:0;float:right}[dir=rtl] .md-content__button{margin-right:.4rem;margin-left:initial;float:left}[dir=rtl] .md-content__button svg{transform:scaleX(-1)}.md-typeset .md-content__button{color:var(--md-default-fg-color--lighter)}.md-content__button svg{display:inline;vertical-align:top}.md-dialog{box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);display:block;position:fixed;right:.8rem;bottom:.8rem;left:initial;min-width:11.1rem;padding:.4rem .6rem;transform:translateY(100%);transition:transform 0ms 400ms,opacity 400ms;border:none;border-radius:.1rem;background:var(--md-default-fg-color);color:var(--md-default-bg-color);font-size:.7rem;opacity:0;z-index:2}[dir=rtl] .md-dialog{right:initial;left:.8rem}.md-dialog[data-md-state=open]{transform:translateY(0);transition:transform 400ms cubic-bezier(0.075, 0.85, 0.175, 1),opacity 400ms;opacity:1}.md-header{position:-webkit-sticky;position:sticky;top:0;right:0;left:0;height:2.4rem;transition:background-color 250ms,color 250ms;background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);box-shadow:0 0 .2rem rgba(0,0,0,0),0 .2rem .4rem rgba(0,0,0,0);-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:2}.no-js .md-header{transition:none;box-shadow:none}.md-header[data-md-state=shadow]{transition:background-color 250ms,color 250ms,box-shadow 250ms;box-shadow:0 0 .2rem rgba(0,0,0,.1),0 .2rem .4rem rgba(0,0,0,.2)}.md-header-nav{display:flex;padding:0 .2rem}.md-header-nav__button{position:relative;margin:.2rem;padding:.4rem;transition:opacity 250ms;cursor:pointer;z-index:1}[dir=rtl] .md-header-nav__button svg{transform:scaleX(-1)}.md-header-nav__button:focus,.md-header-nav__button:hover{opacity:.7}.md-header-nav__button.md-logo{margin:.2rem;padding:.4rem}.md-header-nav__button.md-logo img,.md-header-nav__button.md-logo svg{display:block;width:1.2rem;height:1.2rem;fill:currentColor}.no-js .md-header-nav__button[for=__search]{display:none}.md-header-nav__topic{display:block;position:absolute;width:100%;padding:0 1rem;transition:transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1),opacity 150ms;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.md-header-nav__topic+.md-header-nav__topic{transform:translateX(1.25rem);transition:transform 400ms cubic-bezier(1, 0.7, 0.1, 0.1),opacity 150ms;opacity:0;z-index:-1;pointer-events:none}[dir=rtl] .md-header-nav__topic+.md-header-nav__topic{transform:translateX(-1.25rem)}.no-js .md-header-nav__topic{position:initial}.no-js .md-header-nav__topic+.md-header-nav__topic{display:none}.md-header-nav__title{flex-grow:1;font-size:.9rem;line-height:2.4rem}.md-header-nav__title[data-md-state=active] .md-header-nav__topic{transform:translateX(-1.25rem);transition:transform 400ms cubic-bezier(1, 0.7, 0.1, 0.1),opacity 150ms;opacity:0;z-index:-1;pointer-events:none}[dir=rtl] .md-header-nav__title[data-md-state=active] .md-header-nav__topic{transform:translateX(1.25rem)}.md-header-nav__title[data-md-state=active] .md-header-nav__topic+.md-header-nav__topic{transform:translateX(0);transition:transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1),opacity 150ms;opacity:1;z-index:0;pointer-events:initial}.md-header-nav__title>.md-header-nav__ellipsis{position:relative;width:100%;height:100%}.md-header-nav__source{display:none}.md-hero{transition:background 250ms;background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);font-size:1rem;overflow:hidden}.md-hero__inner{margin-top:1rem;padding:.8rem .8rem .4rem;transition:transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1),opacity 250ms;transition-delay:100ms}[data-md-state=hidden] .md-hero__inner{pointer-events:none;transform:translateY(0.625rem);transition:transform 0ms 400ms,opacity 100ms 0ms;opacity:0}.md-hero--expand .md-hero__inner{margin-bottom:1.2rem}.md-footer{background-color:var(--md-default-fg-color);color:var(--md-default-bg-color)}.md-footer-nav__inner{padding:.2rem;overflow:auto}.md-footer-nav__link{display:flex;padding-top:1.4rem;padding-bottom:.4rem;transition:opacity 250ms}.md-footer-nav__link:focus,.md-footer-nav__link:hover{opacity:.7}.md-footer-nav__link--prev{width:25%;float:left}[dir=rtl] .md-footer-nav__link--prev{float:right}[dir=rtl] .md-footer-nav__link--prev svg{transform:scaleX(-1)}.md-footer-nav__link--next{width:75%;float:right;text-align:right}[dir=rtl] .md-footer-nav__link--next{float:left;text-align:left}[dir=rtl] .md-footer-nav__link--next svg{transform:scaleX(-1)}.md-footer-nav__title{position:relative;flex-grow:1;max-width:calc(100% - 2.4rem);padding:0 1rem;font-size:.9rem;line-height:2.4rem}.md-footer-nav__button{margin:.2rem;padding:.4rem}.md-footer-nav__direction{position:absolute;right:0;left:0;margin-top:-1rem;padding:0 1rem;color:var(--md-default-bg-color--light);font-size:.75rem}.md-footer-meta{background-color:var(--md-default-fg-color--lighter)}.md-footer-meta__inner{padding:.2rem;overflow:auto}html .md-footer-meta.md-typeset a{color:var(--md-default-bg-color--light)}html .md-footer-meta.md-typeset a:focus,html .md-footer-meta.md-typeset a:hover{color:var(--md-default-bg-color)}.md-footer-copyright{margin:0 .6rem;padding:.4rem 0;color:var(--md-default-bg-color--lighter);font-size:.64rem}.md-footer-copyright__highlight{color:var(--md-default-bg-color--light)}.md-footer-social{margin:0 .4rem;padding:.2rem 0 .6rem}.md-footer-social__link{display:inline-block;width:1.6rem;height:1.6rem;transition:color 250ms;text-align:center}.md-footer-social__link::before{line-height:1.9}.md-footer-social__link svg{width:.8rem;vertical-align:-25%;fill:currentColor}.md-nav{font-size:.7rem;line-height:1.3}.md-nav__title{display:block;padding:0 .6rem;font-weight:700;text-overflow:ellipsis;overflow:hidden}.md-nav__title .md-nav__button{display:none}.md-nav__title .md-nav__button img{width:100%;height:auto}.md-nav__title .md-nav__button.md-logo svg img,.md-nav__title .md-nav__button.md-logo svg svg{display:block;width:1.2rem;height:1.2rem;fill:currentColor}.md-nav__list{margin:0;padding:0;list-style:none}.md-nav__item{padding:0 .6rem}.md-nav__item:last-child{padding-bottom:.6rem}.md-nav__item .md-nav__item{padding-right:0}[dir=rtl] .md-nav__item .md-nav__item{padding-right:.6rem;padding-left:0}.md-nav__item .md-nav__item:last-child{padding-bottom:0}.md-nav__link{display:block;margin-top:.625em;transition:color 125ms;text-overflow:ellipsis;cursor:pointer;overflow:hidden;scroll-snap-align:start}html .md-nav__link[for=__toc]{display:none}html .md-nav__link[for=__toc]~.md-nav{display:none}.md-nav__link[data-md-state=blur]{color:var(--md-default-fg-color--light)}.md-nav__item .md-nav__link--active{color:var(--md-primary-fg-color)}.md-nav__item--nested>.md-nav__link{color:inherit}.md-nav__link:focus,.md-nav__link:hover{color:var(--md-accent-fg-color)}.md-nav__source{display:none}.md-search{position:relative}.no-js .md-search{display:none}.md-search__overlay{opacity:0;z-index:1}.md-search__inner{-webkit-backface-visibility:hidden;backface-visibility:hidden}.md-search__form{position:relative}.md-search__input{position:relative;padding:0 2.2rem 0 3.6rem;text-overflow:ellipsis;z-index:2}[dir=rtl] .md-search__input{padding:0 3.6rem 0 2.2rem}.md-search__input::-webkit-input-placeholder{-webkit-transition:color 250ms cubic-bezier(0.1, 0.7, 0.1, 1);transition:color 250ms cubic-bezier(0.1, 0.7, 0.1, 1)}.md-search__input::-moz-placeholder{-moz-transition:color 250ms cubic-bezier(0.1, 0.7, 0.1, 1);transition:color 250ms cubic-bezier(0.1, 0.7, 0.1, 1)}.md-search__input::-ms-input-placeholder{-ms-transition:color 250ms cubic-bezier(0.1, 0.7, 0.1, 1);transition:color 250ms cubic-bezier(0.1, 0.7, 0.1, 1)}.md-search__input::placeholder{transition:color 250ms cubic-bezier(0.1, 0.7, 0.1, 1)}.md-search__input::-webkit-input-placeholder{color:var(--md-default-fg-color--light)}.md-search__input::-moz-placeholder{color:var(--md-default-fg-color--light)}.md-search__input::-ms-input-placeholder{color:var(--md-default-fg-color--light)}.md-search__input~.md-search__icon,.md-search__input::placeholder{color:var(--md-default-fg-color--light)}.md-search__input::-ms-clear{display:none}.md-search__icon{position:absolute;width:1.2rem;height:1.2rem;transition:color 250ms cubic-bezier(0.1, 0.7, 0.1, 1),opacity 250ms;cursor:pointer;z-index:2}.md-search__icon:hover{opacity:.7}.md-search__icon[for=__search]{top:.3rem;left:.5rem}[dir=rtl] .md-search__icon[for=__search]{right:.5rem;left:initial}[dir=rtl] .md-search__icon[for=__search] svg{transform:scaleX(-1)}.md-search__icon[type=reset]{top:.3rem;right:.5rem;transform:scale(0.75);transition:transform 150ms cubic-bezier(0.1, 0.7, 0.1, 1),opacity 150ms;opacity:0;pointer-events:none}[dir=rtl] .md-search__icon[type=reset]{right:initial;left:.5rem}[data-md-toggle=search]:checked~.md-header .md-search__input:valid~.md-search__icon[type=reset]{transform:scale(1);opacity:1;pointer-events:initial}[data-md-toggle=search]:checked~.md-header .md-search__input:valid~.md-search__icon[type=reset]:hover{opacity:.7}.md-search__output{position:absolute;width:100%;border-radius:0 0 .1rem .1rem;overflow:hidden;z-index:1}.md-search__scrollwrap{height:100%;background-color:var(--md-default-bg-color);box-shadow:inset 0 .05rem 0 var(--md-default-fg-color--lightest);overflow-y:auto;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-scroll-snap-type:y mandatory;-ms-scroll-snap-type:y mandatory;scroll-snap-type:y mandatory;-webkit-overflow-scrolling:touch}.md-search-result{color:var(--md-default-fg-color);word-break:break-word}.md-search-result__meta{padding:0 .8rem;background-color:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--light);font-size:.64rem;line-height:1.8rem;scroll-snap-align:start}.md-search-result__list{margin:0;padding:0;border-top:.05rem solid var(--md-default-fg-color--lightest);list-style:none}.md-search-result__item{box-shadow:0 -0.05rem 0 var(--md-default-fg-color--lightest)}.md-search-result__link{display:block;transition:background 250ms;outline:0;overflow:hidden;scroll-snap-align:start}.md-search-result__link:focus,.md-search-result__link:hover{background-color:var(--md-accent-fg-color--transparent)}.md-search-result__link:focus .md-search-result__article::before,.md-search-result__link:hover .md-search-result__article::before{opacity:.7}.md-search-result__link:last-child .md-search-result__teaser{margin-bottom:.6rem}.md-search-result__article{position:relative;padding:0 .8rem;overflow:auto}.md-search-result__article--document .md-search-result__title{margin:.55rem 0;font-size:.8rem;font-weight:400;line-height:1.4}.md-search-result__icon{position:absolute;left:0;margin:.1rem;padding:.4rem;color:var(--md-default-fg-color--light)}[dir=rtl] .md-search-result__icon{right:0;left:initial}[dir=rtl] .md-search-result__icon svg{transform:scaleX(-1)}.md-search-result__title{margin:.5em 0;font-size:.64rem;font-weight:700;line-height:1.4}.md-search-result__teaser{display:-webkit-box;max-height:1.65rem;margin:.5em 0;color:var(--md-default-fg-color--light);font-size:.64rem;line-height:1.4;text-overflow:ellipsis;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:2}.md-search-result em{font-style:normal;font-weight:700;text-decoration:underline}.md-sidebar{position:absolute;width:12.1rem;padding:1.2rem 0;overflow:hidden}.md-sidebar[data-md-state=lock]{position:fixed;top:2.4rem}.md-sidebar--secondary{display:none}.md-sidebar__scrollwrap{max-height:100%;margin:0 .2rem;overflow-y:auto;-webkit-scroll-snap-type:y mandatory;-ms-scroll-snap-type:y mandatory;scroll-snap-type:y mandatory;-webkit-backface-visibility:hidden;backface-visibility:hidden}.md-sidebar__scrollwrap::-webkit-scrollbar{width:.2rem;height:.2rem}.md-sidebar__scrollwrap::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}@-webkit-keyframes md-source__facts--done{0%{height:0}100%{height:.65rem}}@keyframes md-source__facts--done{0%{height:0}100%{height:.65rem}}@-webkit-keyframes md-source__fact--done{0%{transform:translateY(100%);opacity:0}50%{opacity:0}100%{transform:translateY(0%);opacity:1}}@keyframes md-source__fact--done{0%{transform:translateY(100%);opacity:0}50%{opacity:0}100%{transform:translateY(0%);opacity:1}}.md-source{display:block;padding-right:.6rem;transition:opacity 250ms;font-size:.65rem;line-height:1.2;white-space:nowrap;-webkit-backface-visibility:hidden;backface-visibility:hidden}[dir=rtl] .md-source{padding-right:initial;padding-left:.6rem}.md-source:hover{opacity:.7}.md-source__icon{display:inline-block;width:2.4rem;height:2.4rem;vertical-align:middle}.md-source__icon svg{margin-top:.6rem;margin-left:.6rem}[dir=rtl] .md-source__icon svg{margin-right:.6rem;margin-left:initial}.md-source__icon+.md-source__repository{margin-left:-2rem;padding-left:2rem}[dir=rtl] .md-source__icon+.md-source__repository{margin-right:-2rem;margin-left:initial;padding-right:2rem;padding-left:initial}.md-source__repository{display:inline-block;max-width:100%;margin-left:.6rem;font-weight:700;text-overflow:ellipsis;overflow:hidden;vertical-align:middle}.md-source__facts{margin:0;padding:0;font-size:.55rem;font-weight:700;list-style-type:none;opacity:.75;overflow:hidden}[data-md-state=done] .md-source__facts{-webkit-animation:md-source__facts--done 250ms ease-in;animation:md-source__facts--done 250ms ease-in}.md-source__fact{float:left}[dir=rtl] .md-source__fact{float:right}[data-md-state=done] .md-source__fact{-webkit-animation:md-source__fact--done 400ms ease-out;animation:md-source__fact--done 400ms ease-out}.md-source__fact::before{margin:0 .1rem;content:"·"}.md-source__fact:first-child::before{display:none}.md-tabs{width:100%;transition:background 250ms;background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);overflow:auto}.no-js .md-tabs{transition:none}.md-tabs__list{margin:0;margin-left:.2rem;padding:0;list-style:none;white-space:nowrap}[dir=rtl] .md-tabs__list{margin-right:.2rem;margin-left:initial}.md-tabs__item{display:inline-block;height:2.4rem;padding-right:.6rem;padding-left:.6rem}.md-tabs__link{display:block;margin-top:.8rem;transition:transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1),opacity 250ms;font-size:.7rem;opacity:.7}.no-js .md-tabs__link{transition:none}.md-tabs__link--active,.md-tabs__link:hover{color:inherit;opacity:1}.md-tabs__item:nth-child(2) .md-tabs__link{transition-delay:20ms}.md-tabs__item:nth-child(3) .md-tabs__link{transition-delay:40ms}.md-tabs__item:nth-child(4) .md-tabs__link{transition-delay:60ms}.md-tabs__item:nth-child(5) .md-tabs__link{transition-delay:80ms}.md-tabs__item:nth-child(6) .md-tabs__link{transition-delay:100ms}.md-tabs__item:nth-child(7) .md-tabs__link{transition-delay:120ms}.md-tabs__item:nth-child(8) .md-tabs__link{transition-delay:140ms}.md-tabs__item:nth-child(9) .md-tabs__link{transition-delay:160ms}.md-tabs__item:nth-child(10) .md-tabs__link{transition-delay:180ms}.md-tabs__item:nth-child(11) .md-tabs__link{transition-delay:200ms}.md-tabs__item:nth-child(12) .md-tabs__link{transition-delay:220ms}.md-tabs__item:nth-child(13) .md-tabs__link{transition-delay:240ms}.md-tabs__item:nth-child(14) .md-tabs__link{transition-delay:260ms}.md-tabs__item:nth-child(15) .md-tabs__link{transition-delay:280ms}.md-tabs__item:nth-child(16) .md-tabs__link{transition-delay:300ms}.md-tabs[data-md-state=hidden]{pointer-events:none}.md-tabs[data-md-state=hidden] .md-tabs__link{transform:translateY(50%);transition:color 250ms,transform 0ms 400ms,opacity 100ms;opacity:0}.md-typeset .admonition,.md-typeset details{margin:1.5625em 0;padding:0 .6rem;border-left:.2rem solid #448aff;border-radius:.1rem;font-size:.64rem;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .05rem rgba(0,0,0,.1);overflow:auto}[dir=rtl] .md-typeset .admonition,[dir=rtl] .md-typeset details{border-right:.2rem solid #448aff;border-left:none}html .md-typeset .admonition>:last-child,html .md-typeset details>:last-child{margin-bottom:.6rem}.md-typeset .admonition .admonition,.md-typeset details .admonition,.md-typeset .admonition details,.md-typeset details details{margin:1em 0}.md-typeset .admonition.tldr,.md-typeset details.tldr,.md-typeset .admonition.summary,.md-typeset details.summary,.md-typeset .admonition.abstract,.md-typeset details.abstract{border-left-color:#00b0ff}.md-typeset .admonition.tldr>:first-child,.md-typeset details.tldr>:first-child,.md-typeset .admonition.summary>:first-child,.md-typeset details.summary>:first-child,.md-typeset .admonition.abstract>:first-child,.md-typeset details.abstract>:first-child{background-color:rgba(0,176,255,.1)}.md-typeset .admonition.tldr>:first-child::before,.md-typeset details.tldr>:first-child::before,.md-typeset .admonition.summary>:first-child::before,.md-typeset details.summary>:first-child::before,.md-typeset .admonition.abstract>:first-child::before,.md-typeset details.abstract>:first-child::before{background-color:#00b0ff;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .admonition.todo,.md-typeset details.todo,.md-typeset .admonition.info,.md-typeset details.info{border-left-color:#00b8d4}.md-typeset .admonition.todo>:first-child,.md-typeset details.todo>:first-child,.md-typeset .admonition.info>:first-child,.md-typeset details.info>:first-child{background-color:rgba(0,184,212,.1)}.md-typeset .admonition.todo>:first-child::before,.md-typeset details.todo>:first-child::before,.md-typeset .admonition.info>:first-child::before,.md-typeset details.info>:first-child::before{background-color:#00b8d4;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .admonition.important,.md-typeset details.important,.md-typeset .admonition.hint,.md-typeset details.hint,.md-typeset .admonition.tip,.md-typeset details.tip{border-left-color:#00bfa5}.md-typeset .admonition.important>:first-child,.md-typeset details.important>:first-child,.md-typeset .admonition.hint>:first-child,.md-typeset details.hint>:first-child,.md-typeset .admonition.tip>:first-child,.md-typeset details.tip>:first-child{background-color:rgba(0,191,165,.1)}.md-typeset .admonition.important>:first-child::before,.md-typeset details.important>:first-child::before,.md-typeset .admonition.hint>:first-child::before,.md-typeset details.hint>:first-child::before,.md-typeset .admonition.tip>:first-child::before,.md-typeset details.tip>:first-child::before{background-color:#00bfa5;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .admonition.done,.md-typeset details.done,.md-typeset .admonition.check,.md-typeset details.check,.md-typeset .admonition.success,.md-typeset details.success{border-left-color:#00c853}.md-typeset .admonition.done>:first-child,.md-typeset details.done>:first-child,.md-typeset .admonition.check>:first-child,.md-typeset details.check>:first-child,.md-typeset .admonition.success>:first-child,.md-typeset details.success>:first-child{background-color:rgba(0,200,83,.1)}.md-typeset .admonition.done>:first-child::before,.md-typeset details.done>:first-child::before,.md-typeset .admonition.check>:first-child::before,.md-typeset details.check>:first-child::before,.md-typeset .admonition.success>:first-child::before,.md-typeset details.success>:first-child::before{background-color:#00c853;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .admonition.faq,.md-typeset details.faq,.md-typeset .admonition.help,.md-typeset details.help,.md-typeset .admonition.question,.md-typeset details.question{border-left-color:#64dd17}.md-typeset .admonition.faq>:first-child,.md-typeset details.faq>:first-child,.md-typeset .admonition.help>:first-child,.md-typeset details.help>:first-child,.md-typeset .admonition.question>:first-child,.md-typeset details.question>:first-child{background-color:rgba(100,221,23,.1)}.md-typeset .admonition.faq>:first-child::before,.md-typeset details.faq>:first-child::before,.md-typeset .admonition.help>:first-child::before,.md-typeset details.help>:first-child::before,.md-typeset .admonition.question>:first-child::before,.md-typeset details.question>:first-child::before{background-color:#64dd17;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .admonition.attention,.md-typeset details.attention,.md-typeset .admonition.caution,.md-typeset details.caution,.md-typeset .admonition.warning,.md-typeset details.warning{border-left-color:#ff9100}.md-typeset .admonition.attention>:first-child,.md-typeset details.attention>:first-child,.md-typeset .admonition.caution>:first-child,.md-typeset details.caution>:first-child,.md-typeset .admonition.warning>:first-child,.md-typeset details.warning>:first-child{background-color:rgba(255,145,0,.1)}.md-typeset .admonition.attention>:first-child::before,.md-typeset details.attention>:first-child::before,.md-typeset .admonition.caution>:first-child::before,.md-typeset details.caution>:first-child::before,.md-typeset .admonition.warning>:first-child::before,.md-typeset details.warning>:first-child::before{background-color:#ff9100;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .admonition.missing,.md-typeset details.missing,.md-typeset .admonition.fail,.md-typeset details.fail,.md-typeset .admonition.failure,.md-typeset details.failure{border-left-color:#ff5252}.md-typeset .admonition.missing>:first-child,.md-typeset details.missing>:first-child,.md-typeset .admonition.fail>:first-child,.md-typeset details.fail>:first-child,.md-typeset .admonition.failure>:first-child,.md-typeset details.failure>:first-child{background-color:rgba(255,82,82,.1)}.md-typeset .admonition.missing>:first-child::before,.md-typeset details.missing>:first-child::before,.md-typeset .admonition.fail>:first-child::before,.md-typeset details.fail>:first-child::before,.md-typeset .admonition.failure>:first-child::before,.md-typeset details.failure>:first-child::before{background-color:#ff5252;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .admonition.error,.md-typeset details.error,.md-typeset .admonition.danger,.md-typeset details.danger{border-left-color:#ff1744}.md-typeset .admonition.error>:first-child,.md-typeset details.error>:first-child,.md-typeset .admonition.danger>:first-child,.md-typeset details.danger>:first-child{background-color:rgba(255,23,68,.1)}.md-typeset .admonition.error>:first-child::before,.md-typeset details.error>:first-child::before,.md-typeset .admonition.danger>:first-child::before,.md-typeset details.danger>:first-child::before{background-color:#ff1744;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .admonition.bug,.md-typeset details.bug{border-left-color:#f50057}.md-typeset .admonition.bug>:first-child,.md-typeset details.bug>:first-child{background-color:rgba(245,0,87,.1)}.md-typeset .admonition.bug>:first-child::before,.md-typeset details.bug>:first-child::before{background-color:#f50057;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .admonition.example,.md-typeset details.example{border-left-color:#651fff}.md-typeset .admonition.example>:first-child,.md-typeset details.example>:first-child{background-color:rgba(101,31,255,.1)}.md-typeset .admonition.example>:first-child::before,.md-typeset details.example>:first-child::before{background-color:#651fff;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .admonition.cite,.md-typeset details.cite,.md-typeset .admonition.quote,.md-typeset details.quote{border-left-color:#9e9e9e}.md-typeset .admonition.cite>:first-child,.md-typeset details.cite>:first-child,.md-typeset .admonition.quote>:first-child,.md-typeset details.quote>:first-child{background-color:rgba(158,158,158,.1)}.md-typeset .admonition.cite>:first-child::before,.md-typeset details.cite>:first-child::before,.md-typeset .admonition.quote>:first-child::before,.md-typeset details.quote>:first-child::before{background-color:#9e9e9e;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .admonition-title,.md-typeset summary{margin:0 -0.6rem;padding:.4rem .6rem .4rem 2rem;background-color:rgba(68,138,255,.1);font-weight:700}[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{padding:.4rem 2rem .4rem .6rem}.md-typeset .admonition-title:last-child,.md-typeset summary:last-child{margin-bottom:0}.md-typeset .admonition-title::before,.md-typeset summary::before{position:absolute;width:1rem;height:1rem;margin-left:-1.4rem;background-color:#448aff;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,");content:""}[dir=rtl] .md-typeset .admonition-title::before,[dir=rtl] .md-typeset summary::before{margin-right:-1.4rem;margin-left:initial}.codehilite .o,.highlight .o{color:inherit}.codehilite .ow,.highlight .ow{color:inherit}.codehilite .ge,.highlight .ge{color:#000}.codehilite .gr,.highlight .gr{color:#a00}.codehilite .gh,.highlight .gh{color:#999}.codehilite .go,.highlight .go{color:#888}.codehilite .gp,.highlight .gp{color:#555}.codehilite .gs,.highlight .gs{color:inherit}.codehilite .gu,.highlight .gu{color:#aaa}.codehilite .gt,.highlight .gt{color:#a00}.codehilite .gd,.highlight .gd{background-color:#fdd}.codehilite .gi,.highlight .gi{background-color:#dfd}.codehilite .k,.highlight .k{color:#3b78e7}.codehilite .kc,.highlight .kc{color:#a71d5d}.codehilite .kd,.highlight .kd{color:#3b78e7}.codehilite .kn,.highlight .kn{color:#3b78e7}.codehilite .kp,.highlight .kp{color:#a71d5d}.codehilite .kr,.highlight .kr{color:#3e61a2}.codehilite .kt,.highlight .kt{color:#3e61a2}.codehilite .c,.highlight .c{color:#999}.codehilite .cm,.highlight .cm{color:#999}.codehilite .cp,.highlight .cp{color:#666}.codehilite .c1,.highlight .c1{color:#999}.codehilite .ch,.highlight .ch{color:#999}.codehilite .cs,.highlight .cs{color:#999}.codehilite .na,.highlight .na{color:#c2185b}.codehilite .nb,.highlight .nb{color:#c2185b}.codehilite .bp,.highlight .bp{color:#3e61a2}.codehilite .nc,.highlight .nc{color:#c2185b}.codehilite .no,.highlight .no{color:#3e61a2}.codehilite .nd,.highlight .nd{color:#666}.codehilite .ni,.highlight .ni{color:#666}.codehilite .ne,.highlight .ne{color:#c2185b}.codehilite .nf,.highlight .nf{color:#c2185b}.codehilite .nl,.highlight .nl{color:#3b5179}.codehilite .nn,.highlight .nn{color:#ec407a}.codehilite .nt,.highlight .nt{color:#3b78e7}.codehilite .nv,.highlight .nv{color:#3e61a2}.codehilite .vc,.highlight .vc{color:#3e61a2}.codehilite .vg,.highlight .vg{color:#3e61a2}.codehilite .vi,.highlight .vi{color:#3e61a2}.codehilite .nx,.highlight .nx{color:#ec407a}.codehilite .m,.highlight .m{color:#e74c3c}.codehilite .mf,.highlight .mf{color:#e74c3c}.codehilite .mh,.highlight .mh{color:#e74c3c}.codehilite .mi,.highlight .mi{color:#e74c3c}.codehilite .il,.highlight .il{color:#e74c3c}.codehilite .mo,.highlight .mo{color:#e74c3c}.codehilite .s,.highlight .s{color:#0d904f}.codehilite .sb,.highlight .sb{color:#0d904f}.codehilite .sc,.highlight .sc{color:#0d904f}.codehilite .sd,.highlight .sd{color:#999}.codehilite .s2,.highlight .s2{color:#0d904f}.codehilite .se,.highlight .se{color:#183691}.codehilite .sh,.highlight .sh{color:#183691}.codehilite .si,.highlight .si{color:#183691}.codehilite .sx,.highlight .sx{color:#183691}.codehilite .sr,.highlight .sr{color:#009926}.codehilite .s1,.highlight .s1{color:#0d904f}.codehilite .ss,.highlight .ss{color:#0d904f}.codehilite .err,.highlight .err{color:#a61717}.codehilite .w,.highlight .w{color:transparent}.codehilite .hll,.highlight .hll{display:block;margin:0 -0.6rem;padding:0 .6rem;background-color:rgba(255,235,59,.5)}.codehilitetable,.highlighttable{display:block;overflow:hidden}.codehilitetable tbody,.highlighttable tbody,.codehilitetable td,.highlighttable td{display:block;padding:0}.codehilitetable tr,.highlighttable tr{display:flex}.codehilitetable pre,.highlighttable pre,.codehilitetable .linenodiv,.highlighttable .linenodiv{margin:0;border-radius:0}.codehilitetable .linenodiv,.highlighttable .linenodiv{padding:.525rem .6rem}.codehilitetable .linenos,.highlighttable .linenos{color:var(--md-default-fg-color--lighter);box-shadow:inset 0 0 0 .05rem var(--md-code-bg-color);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.codehilitetable .linenos pre,.highlighttable .linenos pre{background-color:transparent;color:inherit;text-align:right}.codehilitetable .code,.highlighttable .code{flex:1;overflow:hidden}.md-typeset>.codehilitetable,.md-typeset>.highlighttable{margin:1em 0;border-radius:.2em}.md-typeset [id^="fnref:"]{display:inline-block}.md-typeset [id^="fnref:"]:target{margin-top:-3.8rem;padding-top:3.8rem;pointer-events:none}.md-typeset [id^="fn:"]::before{display:none;height:0;content:""}.md-typeset [id^="fn:"]:target::before{display:block;margin-top:-3.5rem;padding-top:3.5rem;pointer-events:none}.md-typeset .footnote{color:var(--md-default-fg-color--light);font-size:.64rem}.md-typeset .footnote ol{margin-left:0}.md-typeset .footnote li{transition:color 250ms}.md-typeset .footnote li:target{color:var(--md-default-fg-color)}.md-typeset .footnote li :first-child{margin-top:0}.md-typeset .footnote li:hover .footnote-backref,.md-typeset .footnote li:target .footnote-backref{transform:translateX(0);opacity:1}.md-typeset .footnote li:hover .footnote-backref:hover,.md-typeset .footnote li:target .footnote-backref{color:var(--md-accent-fg-color)}.md-typeset .footnote-ref{display:inline-block;pointer-events:initial}.md-typeset .footnote-ref::before{display:inline;margin:0 .2em;border-left:.05rem solid var(--md-default-fg-color--lighter);font-size:1.25em;content:"";vertical-align:-0.25rem}.md-typeset .footnote-backref{display:inline-block;transform:translateX(0.25rem);transition:transform 250ms 250ms,color 250ms,opacity 125ms 250ms;color:var(--md-default-fg-color--lighter);font-size:0;opacity:0;vertical-align:text-bottom}[dir=rtl] .md-typeset .footnote-backref{transform:translateX(-0.25rem)}.md-typeset .footnote-backref::before{display:inline-block;width:.8rem;height:.8rem;background-color:currentColor;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,");content:""}[dir=rtl] .md-typeset .footnote-backref::before svg{transform:scaleX(-1)}.md-typeset .headerlink{display:inline-block;margin-left:.5rem;transform:translate(0, 0.25rem);transition:transform 250ms 250ms,color 250ms,opacity 125ms 250ms,visibility 0ms 500ms;opacity:0;visibility:hidden}[dir=rtl] .md-typeset .headerlink{margin-right:.5rem;margin-left:initial}html body .md-typeset .headerlink{color:var(--md-default-fg-color--lighter)}.md-typeset :hover .headerlink,.md-typeset :target .headerlink,.md-typeset .headerlink:focus{transform:translate(0, 0);transition:transform 250ms 250ms,color 250ms,opacity 125ms 250ms,visibility 0ms;opacity:1;visibility:visible}.md-typeset .headerlink:focus,.md-typeset .headerlink:hover,.md-typeset :target .headerlink{color:var(--md-accent-fg-color)}.md-typeset h3[id]::before,.md-typeset h2[id]::before,.md-typeset h1[id]::before{display:block;margin-top:-0.4rem;padding-top:.4rem;content:""}.md-typeset h3[id]:target::before,.md-typeset h2[id]:target::before,.md-typeset h1[id]:target::before{margin-top:-3.4rem;padding-top:3.4rem}.md-typeset h4[id]::before{display:block;margin-top:-0.45rem;padding-top:.45rem;content:""}.md-typeset h4[id]:target::before{margin-top:-3.45rem;padding-top:3.45rem}.md-typeset h6[id]::before,.md-typeset h5[id]::before{display:block;margin-top:-0.6rem;padding-top:.6rem;content:""}.md-typeset h6[id]:target::before,.md-typeset h5[id]:target::before{margin-top:-3.6rem;padding-top:3.6rem}.md-typeset .MJXc-display{margin:.75em 0;padding:.75em 0;overflow:auto;-webkit-overflow-scrolling:touch}.md-typeset .MathJax_CHTML{outline:0}.md-typeset del.critic,.md-typeset ins.critic,.md-typeset .critic.comment{margin:0 .25em;padding:.0625em 0;border-radius:.1rem;-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset del.critic{background-color:#fdd;box-shadow:.25em 0 0 #fdd,-0.25em 0 0 #fdd}.md-typeset ins.critic{background-color:#dfd;box-shadow:.25em 0 0 #dfd,-0.25em 0 0 #dfd}.md-typeset .critic.comment{color:#999}.md-typeset .critic.comment::before{content:"/* "}.md-typeset .critic.comment::after{content:" */"}.md-typeset .critic.block{display:block;margin:1em 0;padding-right:.8rem;padding-left:.8rem;box-shadow:none}.md-typeset .critic.block :first-child{margin-top:.5em}.md-typeset .critic.block :last-child{margin-bottom:.5em}.md-typeset details{display:block;padding-top:0}.md-typeset details[open]>summary::after{transform:rotate(180deg)}.md-typeset details:not([open]){padding-bottom:0}.md-typeset details:not([open])>summary{border-bottom:none}.md-typeset details summary{position:relative;padding-right:2rem}[dir=rtl] .md-typeset details summary{padding-left:2rem}.md-typeset summary{display:block;outline:none;cursor:pointer}.md-typeset summary::-webkit-details-marker{display:none}.md-typeset summary::after{position:absolute;right:.6rem;width:1rem;height:1rem;background-color:var(--md-default-fg-color--lighter);-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,");content:""}[dir=rtl] .md-typeset summary::after{right:initial;left:.6rem}.md-typeset .emojione,.md-typeset .twemoji,.md-typeset .gemoji{width:1rem;vertical-align:text-top}.highlight [data-linenos]::before{display:inline-block;position:-webkit-sticky;position:sticky;left:-0.6rem;margin-right:.6rem;margin-left:-0.6rem;padding-left:.6rem;border-right:.05rem solid var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--lighter);content:attr(data-linenos);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.md-typeset code.codehilite,.md-typeset code.highlight{margin:0 .2941176471em;padding:.0735294118em 0}.md-typeset .tabbed-content{display:none;order:99;width:100%;background-color:var(--md-code-bg-color)}.md-typeset .tabbed-content pre{margin:0;border-radius:0}.md-typeset .tabbed-set{display:flex;position:relative;flex-wrap:wrap;margin:1em 0;border:.05rem solid var(--md-default-fg-color--lightest);border-radius:.1rem}.md-typeset .tabbed-set>input{display:none}.md-typeset .tabbed-set>input:checked+label{border-color:var(--md-accent-fg-color);color:var(--md-accent-fg-color)}.md-typeset .tabbed-set>input:checked+label+.tabbed-content{display:block;padding:0 .6rem}.md-typeset .tabbed-set>input:checked+label+.tabbed-content>:last-child{margin-bottom:.6rem}.md-typeset .tabbed-set>input:checked+label+.tabbed-content>pre:only-child,.md-typeset .tabbed-set>input:checked+label+.tabbed-content>.highlight:only-child,.md-typeset .tabbed-set>input:checked+label+.tabbed-content>.highlighttable:only-child,.md-typeset .tabbed-set>input:checked+label+.tabbed-content>.codehilite:only-child,.md-typeset .tabbed-set>input:checked+label+.tabbed-content>.codehilitetable:only-child{margin:0 -0.6rem}.md-typeset .tabbed-set>input:checked+label+.tabbed-content>pre:only-child pre,.md-typeset .tabbed-set>input:checked+label+.tabbed-content>.highlight:only-child pre,.md-typeset .tabbed-set>input:checked+label+.tabbed-content>.highlighttable:only-child pre,.md-typeset .tabbed-set>input:checked+label+.tabbed-content>.codehilite:only-child pre,.md-typeset .tabbed-set>input:checked+label+.tabbed-content>.codehilitetable:only-child pre{background:transparent}.md-typeset .tabbed-set>label{width:auto;padding:.6rem;padding-bottom:.5rem;transition:color 125ms,border 250ms;border-bottom:.1rem solid transparent;color:var(--md-default-fg-color--light);font-size:.64rem;font-weight:700;cursor:pointer}html .md-typeset .tabbed-set>label:hover{color:var(--md-accent-fg-color)}.md-typeset .task-list-item{position:relative;list-style-type:none}.md-typeset .task-list-item [type=checkbox]{position:absolute;top:.45em;left:-2em}[dir=rtl] .md-typeset .task-list-item [type=checkbox]{right:-2em;left:initial}.md-typeset .task-list-control .task-list-indicator::before{position:absolute;top:.15em;left:-1.5em;width:1.25em;height:1.25em;background-color:var(--md-default-fg-color--lightest);-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,");content:""}[dir=rtl] .md-typeset .task-list-control .task-list-indicator::before{right:-1.5em;left:initial}.md-typeset .task-list-control [type=checkbox]:checked+.task-list-indicator::before{background-color:#00e676;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .task-list-control [type=checkbox]{opacity:0;z-index:-1}@media print{.md-typeset a::after{color:var(--md-default-fg-color--light);content:" [" attr(href) "]"}.md-typeset code,.md-typeset pre,.md-typeset kbd{white-space:pre-wrap}.md-clipboard{display:none}.md-content__button{display:none}.md-dialog{display:none}.md-header{display:none}.md-footer{display:none}.md-sidebar{display:none}.md-tabs{display:none}.md-typeset .headerlink{display:none}}@media screen and (max-width: 44.9375em){.md-typeset>pre{margin:1em -0.8rem;border-radius:0}.md-typeset>pre>code{padding:.525rem .8rem}.md-footer-nav__link--prev .md-footer-nav__title{display:none}.md-search-result__teaser{max-height:2.5rem;-webkit-line-clamp:3}.codehilite .hll,.highlight .hll{margin:0 -0.8rem;padding:0 .8rem}.md-typeset>.codehilite,.md-typeset>.highlight{margin:1em -0.8rem}.md-typeset>.codehilite code,.md-typeset>.highlight code{padding:.525rem .8rem}.md-typeset>.codehilitetable,.md-typeset>.highlighttable{margin:1em -0.8rem;border-radius:0}.md-typeset>.codehilitetable .linenodiv,.md-typeset>.highlighttable .linenodiv{padding:.5rem .8rem}.md-typeset>p>.MJXc-display{margin:.75em -0.8rem;padding:.25em .8rem}.highlight [data-linenos]::before{left:-1.6rem;margin-left:-1.6rem;padding-left:1.6rem}.md-typeset>.tabbed-set{margin:1em -0.8rem;border:0;border-top:.05rem solid var(--md-default-fg-color--lightest);border-radius:0}.md-typeset>.tabbed-set code{padding:.525rem .8rem}.md-typeset>.tabbed-set input:first-child+label{margin-left:.2rem}}@media screen and (min-width: 100em){html{font-size:137.5%}}@media screen and (min-width: 125em){html{font-size:150%}}@media screen and (max-width: 59.9375em){body[data-md-state=lock]{position:fixed}html .md-nav__link[for=__toc]{display:block;padding-right:2.4rem}html .md-nav__link[for=__toc]+.md-nav__link{display:none}html .md-nav__link[for=__toc]~.md-nav{display:flex}html [dir=rtl] .md-nav__link{padding-right:.8rem;padding-left:2.4rem}.md-nav__source{display:block;padding:0 .2rem;background-color:var(--md-primary-fg-color--dark);color:var(--md-primary-bg-color)}.md-search__overlay{position:absolute;top:.2rem;left:-2.2rem;width:2rem;height:2rem;transform-origin:center;transition:transform 300ms 100ms,opacity 200ms 200ms;border-radius:1rem;background-color:var(--md-default-bg-color);overflow:hidden;pointer-events:none}[dir=rtl] .md-search__overlay{right:-2.2rem;left:initial}[data-md-toggle=search]:checked~.md-header .md-search__overlay{transition:transform 400ms,opacity 100ms;opacity:1}.md-search__inner{position:fixed;top:0;left:100%;width:100%;height:100%;transform:translateX(5%);transition:right 0ms 300ms,left 0ms 300ms,transform 150ms 150ms cubic-bezier(0.4, 0, 0.2, 1),opacity 150ms 150ms;opacity:0;z-index:2}[data-md-toggle=search]:checked~.md-header .md-search__inner{left:0;transform:translateX(0);transition:right 0ms 0ms,left 0ms 0ms,transform 150ms 150ms cubic-bezier(0.1, 0.7, 0.1, 1),opacity 150ms 150ms;opacity:1}[dir=rtl] [data-md-toggle=search]:checked~.md-header .md-search__inner{right:0;left:initial}html [dir=rtl] .md-search__inner{right:100%;left:initial;transform:translateX(-5%)}.md-search__input{width:100%;height:2.4rem;font-size:.9rem}.md-search__icon[for=__search]{top:.6rem;left:.8rem}[dir=rtl] .md-search__icon[for=__search]{right:.8rem;left:initial}.md-search__icon[for=__search] svg:first-child{display:none}.md-search__icon[type=reset]{top:.6rem;right:.8rem}[dir=rtl] .md-search__icon[type=reset]{right:initial;left:.8rem}.md-search__output{top:2.4rem;bottom:0}.md-search-result__icon{display:none}}@media screen and (max-width: 76.1875em){[data-md-toggle=drawer]:checked~.md-overlay{width:100%;height:100%;transition:width 0ms,height 0ms,opacity 250ms;opacity:1}.md-header-nav__button.md-logo{display:none}.md-hero__inner{margin-top:2.4rem;margin-bottom:1.2rem}.md-nav{background-color:var(--md-default-bg-color)}.md-nav--primary,.md-nav--primary .md-nav{display:flex;position:absolute;top:0;right:0;left:0;flex-direction:column;height:100%;z-index:1}.md-nav--primary .md-nav__title,.md-nav--primary .md-nav__item{font-size:.8rem;line-height:1.5}.md-nav--primary .md-nav__title{position:relative;height:5.6rem;padding:3rem .8rem .2rem;background-color:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--light);font-weight:400;line-height:2.4rem;white-space:nowrap;cursor:pointer}.md-nav--primary .md-nav__title .md-nav__icon{display:block;position:absolute;top:.4rem;left:.4rem;width:1.2rem;height:1.2rem;margin:.2rem}[dir=rtl] .md-nav--primary .md-nav__title .md-nav__icon{right:.4rem;left:initial}.md-nav--primary .md-nav__title~.md-nav__list{background-color:var(--md-default-bg-color);box-shadow:inset 0 .05rem 0 var(--md-default-fg-color--lightest);overflow-y:auto;-webkit-scroll-snap-type:y mandatory;-ms-scroll-snap-type:y mandatory;scroll-snap-type:y mandatory}.md-nav--primary .md-nav__title~.md-nav__list>.md-nav__item:first-child{border-top:0}.md-nav--primary .md-nav__title[for=__drawer]{position:relative;background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color)}.md-nav--primary .md-nav__title[for=__drawer] .md-nav__button{display:block;position:absolute;top:.2rem;left:.2rem;width:3.2rem;height:3.2rem;margin:.2rem;padding:.4rem;font-size:2.4rem}html [dir=rtl] .md-nav--primary .md-nav__title[for=__drawer] .md-nav__button{right:.2rem;left:initial}.md-nav--primary .md-nav__list{flex:1}.md-nav--primary .md-nav__item{padding:0;border-top:.05rem solid var(--md-default-fg-color--lightest)}[dir=rtl] .md-nav--primary .md-nav__item{padding:0}.md-nav--primary .md-nav__item--nested>.md-nav__link{padding-right:2.4rem}[dir=rtl] .md-nav--primary .md-nav__item--nested>.md-nav__link{padding-right:.8rem;padding-left:2.4rem}.md-nav--primary .md-nav__item--active>.md-nav__link{color:var(--md-primary-fg-color)}.md-nav--primary .md-nav__link{position:relative;margin-top:0;padding:.6rem .8rem}.md-nav--primary .md-nav__link .md-nav__icon{position:absolute;top:50%;right:.6rem;margin-top:-0.6rem;color:inherit;font-size:1.2rem}[dir=rtl] .md-nav--primary .md-nav__link .md-nav__icon{right:initial;left:.6rem}[dir=rtl] .md-nav--primary .md-nav__icon svg{transform:scale(-1)}.md-nav--primary .md-nav--secondary .md-nav__link{position:static}.md-nav--primary .md-nav--secondary .md-nav{position:static;background-color:transparent}.md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-left:1.4rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-right:1.4rem;padding-left:initial}.md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-left:2rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-right:2rem;padding-left:initial}.md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-left:2.6rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-right:2.6rem;padding-left:initial}.md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-left:3.2rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-right:3.2rem;padding-left:initial}.md-nav__toggle~.md-nav{display:flex;transform:translateX(100%);transition:transform 250ms cubic-bezier(0.8, 0, 0.6, 1),opacity 125ms 50ms;opacity:0}[dir=rtl] .md-nav__toggle~.md-nav{transform:translateX(-100%)}.md-nav__toggle:checked~.md-nav{transform:translateX(0);transition:transform 250ms cubic-bezier(0.4, 0, 0.2, 1),opacity 125ms 125ms;opacity:1}.md-sidebar--primary{position:fixed;top:0;left:-12.1rem;width:12.1rem;height:100%;transform:translateX(0);transition:transform 250ms cubic-bezier(0.4, 0, 0.2, 1),box-shadow 250ms;background-color:var(--md-default-bg-color);z-index:3}[dir=rtl] .md-sidebar--primary{right:-12.1rem;left:initial}[data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{box-shadow:0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12),0 5px 5px -3px rgba(0,0,0,.4);transform:translateX(12.1rem)}[dir=rtl] [data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{transform:translateX(-12.1rem)}.md-sidebar--primary .md-sidebar__scrollwrap{overflow:hidden}.md-sidebar--primary .md-sidebar__scrollwrap{position:absolute;top:0;right:0;bottom:0;left:0;margin:0;-webkit-scroll-snap-type:none;-ms-scroll-snap-type:none;scroll-snap-type:none}.md-tabs{display:none}}@media screen and (min-width: 60em){.md-content{margin-right:12.1rem}[dir=rtl] .md-content{margin-right:initial;margin-left:12.1rem}.md-header-nav__button[for=__search]{display:none}.md-header-nav__source{display:block;width:11.7rem;max-width:11.7rem;margin-left:1rem}[dir=rtl] .md-header-nav__source{margin-right:1rem;margin-left:initial}.md-nav--secondary .md-nav__title[for=__toc]{scroll-snap-align:start}.md-nav--secondary .md-nav__title .md-nav__icon{display:none}.md-search{padding:.2rem 0}.md-search__overlay{position:fixed;top:0;left:0;width:0;height:0;transition:width 0ms 250ms,height 0ms 250ms,opacity 250ms;background-color:var(--md-default-fg-color--light);cursor:pointer}[dir=rtl] .md-search__overlay{right:0;left:initial}[data-md-toggle=search]:checked~.md-header .md-search__overlay{width:100%;height:100%;transition:width 0ms,height 0ms,opacity 250ms;opacity:1}.md-search__inner{position:relative;width:11.7rem;padding:.1rem 0;float:right;transition:width 250ms cubic-bezier(0.1, 0.7, 0.1, 1)}[dir=rtl] .md-search__inner{float:left}.md-search__form{border-radius:.1rem}.md-search__input{width:100%;height:1.8rem;padding-left:2.2rem;transition:background-color 250ms cubic-bezier(0.1, 0.7, 0.1, 1),color 250ms cubic-bezier(0.1, 0.7, 0.1, 1);border-radius:.1rem;background-color:var(--md-default-fg-color--lighter);color:inherit;font-size:.8rem}[dir=rtl] .md-search__input{padding-right:2.2rem}.md-search__input+.md-search__icon{color:var(--md-primary-bg-color)}.md-search__input::-webkit-input-placeholder{color:var(--md-primary-bg-color--light)}.md-search__input::-moz-placeholder{color:var(--md-primary-bg-color--light)}.md-search__input::-ms-input-placeholder{color:var(--md-primary-bg-color--light)}.md-search__input::placeholder{color:var(--md-primary-bg-color--light)}.md-search__input:hover{background-color:var(--md-default-bg-color--lightest)}[data-md-toggle=search]:checked~.md-header .md-search__input{border-radius:.1rem .1rem 0 0;background-color:var(--md-default-bg-color);color:var(--md-default-fg-color);text-overflow:clip}[data-md-toggle=search]:checked~.md-header .md-search__input::-webkit-input-placeholder{color:var(--md-default-fg-color--light)}[data-md-toggle=search]:checked~.md-header .md-search__input::-moz-placeholder{color:var(--md-default-fg-color--light)}[data-md-toggle=search]:checked~.md-header .md-search__input::-ms-input-placeholder{color:var(--md-default-fg-color--light)}[data-md-toggle=search]:checked~.md-header .md-search__input+.md-search__icon,[data-md-toggle=search]:checked~.md-header .md-search__input::placeholder{color:var(--md-default-fg-color--light)}.md-search__icon[for=__search] svg:last-child{display:none}.md-search__output{top:1.9rem;transition:opacity 400ms;opacity:0}[data-md-toggle=search]:checked~.md-header .md-search__output{box-shadow:0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12),0 3px 5px -1px rgba(0,0,0,.4);opacity:1}.md-search__scrollwrap{max-height:0}[data-md-toggle=search]:checked~.md-header .md-search__scrollwrap{max-height:75vh}.md-search__scrollwrap::-webkit-scrollbar{width:.2rem;height:.2rem}.md-search__scrollwrap::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}.md-search-result__meta{padding-left:2.2rem}[dir=rtl] .md-search-result__meta{padding-right:2.2rem;padding-left:initial}.md-search-result__article{padding-left:2.2rem}[dir=rtl] .md-search-result__article{padding-right:2.2rem;padding-left:.8rem}.md-sidebar--secondary{display:block;margin-left:calc(100% - 12.1rem)}[dir=rtl] .md-sidebar--secondary{margin-right:calc(100% - 12.1rem);margin-left:initial}.md-sidebar--secondary .md-sidebar__scrollwrap{-webkit-overflow-scrolling:touch}}@media screen and (min-width: 76.25em){.md-content{margin-left:12.1rem}[dir=rtl] .md-content{margin-right:12.1rem}.md-content__inner{margin-right:1.2rem;margin-left:1.2rem}.md-header-nav__button[for=__drawer]{display:none}.md-header-nav__source{margin-left:1.4rem}[dir=rtl] .md-header-nav__source{margin-right:1.4rem}.md-nav{transition:max-height 250ms cubic-bezier(0.86, 0, 0.07, 1)}.md-nav--primary .md-nav__title[for=__drawer]{scroll-snap-align:start}.md-nav--primary .md-nav__title .md-nav__icon{display:none}.md-nav__toggle~.md-nav{display:none}.md-nav__toggle:checked~.md-nav{display:block}.md-nav__item--nested>.md-nav>.md-nav__title{display:none}.md-nav__icon{height:.9rem;float:right;transition:transform 250ms}.md-nav__icon svg{display:inline-block;width:.9rem;height:.9rem;vertical-align:-0.1rem}.md-nav__item--nested .md-nav__toggle:checked~.md-nav__link .md-nav__icon{transform:rotateZ(90deg)}[data-md-toggle=search]:checked~.md-header .md-search__inner{width:34.4rem}.md-search__scrollwrap{width:34.4rem}.md-sidebar--secondary{margin-left:48.9rem}[dir=rtl] .md-sidebar--secondary{margin-right:48.9rem;margin-left:initial}.md-tabs~.md-main .md-nav--primary>.md-nav__list>.md-nav__item--nested{display:none}.md-tabs--active~.md-main .md-nav--primary .md-nav__title{display:block;padding:0 .6rem;pointer-events:none;scroll-snap-align:start}.md-tabs--active~.md-main .md-nav--primary .md-nav__title[for=__drawer]{display:none}.md-tabs--active~.md-main .md-nav--primary>.md-nav__list>.md-nav__item{display:none}.md-tabs--active~.md-main .md-nav--primary>.md-nav__list>.md-nav__item--active{display:block;padding:0}.md-tabs--active~.md-main .md-nav--primary>.md-nav__list>.md-nav__item--active>.md-nav__link{display:none}.md-tabs--active~.md-main .md-nav[data-md-level="1"]>.md-nav__list>.md-nav__item{padding:0 .6rem}.md-tabs--active~.md-main .md-nav[data-md-level="1"] .md-nav .md-nav__title{display:none}}@media screen and (min-width: 45em){.md-footer-nav__link{width:50%}.md-footer-copyright{max-width:75%;float:left}[dir=rtl] .md-footer-copyright{float:right}.md-footer-social{padding:.6rem 0;float:right}[dir=rtl] .md-footer-social{float:left}}@media screen and (max-width: 29.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(45)}}@media screen and (min-width: 30em)and (max-width: 44.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(60)}}@media screen and (min-width: 45em)and (max-width: 59.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(75)}}@media screen and (min-width: 60em)and (max-width: 76.1875em){[data-md-toggle=search]:checked~.md-header .md-search__inner{width:23.4rem}.md-search__scrollwrap{width:23.4rem}.md-search-result__teaser{max-height:2.5rem;-webkit-line-clamp:3}}@media(-webkit-max-device-pixel-ratio: 1), (max-resolution: 1dppx){.md-search__scrollwrap{transform:translateZ(0)}} \ No newline at end of file diff --git a/material/assets/stylesheets/main.css b/material/assets/stylesheets/main.css new file mode 100644 index 000000000..969e3aee5 --- /dev/null +++ b/material/assets/stylesheets/main.css @@ -0,0 +1,2940 @@ +@charset "UTF-8"; +html { + box-sizing: border-box; +} + +*, +*::before, +*::after { + box-sizing: inherit; +} + +html { + -webkit-text-size-adjust: none; + -moz-text-size-adjust: none; + -ms-text-size-adjust: none; + text-size-adjust: none; +} + +body { + margin: 0; +} + +hr { + overflow: visible; + box-sizing: content-box; +} + +a { + -webkit-text-decoration-skip: objects; +} + +a, +button, +label, +input { + -webkit-tap-highlight-color: transparent; +} + +a { + color: inherit; + text-decoration: none; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 80%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +img { + border-style: none; +} + +table { + border-collapse: separate; + border-spacing: 0; +} + +td, +th { + font-weight: normal; + vertical-align: top; +} + +button { + margin: 0; + padding: 0; + border: 0; + background: transparent; + font-size: inherit; +} + +input { + border: 0; + outline: 0; +} + +:root { + --md-default-fg-color: hsla(0, 0%, 0%, 0.87); + --md-default-fg-color--light: hsla(0, 0%, 0%, 0.54); + --md-default-fg-color--lighter: hsla(0, 0%, 0%, 0.26); + --md-default-fg-color--lightest: hsla(0, 0%, 0%, 0.07); + --md-default-bg-color: hsla(0, 0%, 100%, 1); + --md-default-bg-color--light: hsla(0, 0%, 100%, 0.7); + --md-default-bg-color--lighter: hsla(0, 0%, 100%, 0.3); + --md-default-bg-color--lightest: hsla(0, 0%, 100%, 0.12); + --md-primary-fg-color: hsla(231deg, 48%, 48%, 1); + --md-primary-fg-color--light: hsla(230deg, 44%, 64%, 1); + --md-primary-fg-color--dark: hsla(232deg, 54%, 41%, 1); + --md-primary-bg-color: var(--md-default-bg-color); + --md-primary-bg-color--light: var(--md-default-bg-color--light); + --md-accent-fg-color: hsla(231deg, 99%, 66%, 1); + --md-accent-fg-color--transparent: hsla(231deg, 99%, 66%, 0.1); + --md-accent-bg-color: var(--md-default-bg-color); + --md-accent-bg-color--light: var(--md-default-bg-color--light); + --md-code-bg-color: hsla(0, 0%, 92.5%, 0.5); + --md-code-fg-color: hsla(200, 18%, 26%, 1); +} + +.md-icon svg { + display: block; + width: 1.2rem; + height: 1.2rem; + margin: 0 auto; + fill: currentColor; +} + +body { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +body, +input { + color: var(--md-default-fg-color); + -webkit-font-feature-settings: "kern", "liga"; + font-feature-settings: "kern", "liga"; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +} + +code, +pre, +kbd { + color: var(--md-default-fg-color); + -webkit-font-feature-settings: "kern"; + font-feature-settings: "kern"; + font-family: "Courier New", Courier, monospace; +} + +.md-typeset { + font-size: 0.8rem; + line-height: 1.6; + -webkit-print-color-adjust: exact; +} +.md-typeset p, +.md-typeset ul, +.md-typeset ol, +.md-typeset blockquote { + margin: 1em 0; +} +.md-typeset h1 { + margin: 0 0 2rem; + color: var(--md-default-fg-color--light); + font-size: 1.5625rem; + font-weight: 300; + letter-spacing: -0.01em; + line-height: 1.3; +} +.md-typeset h2 { + margin: 2rem 0 0.8rem; + font-size: 1.25rem; + font-weight: 300; + letter-spacing: -0.01em; + line-height: 1.4; +} +.md-typeset h3 { + margin: 1.6rem 0 0.8rem; + font-size: 1rem; + font-weight: 400; + letter-spacing: -0.01em; + line-height: 1.5; +} +.md-typeset h2 + h3 { + margin-top: 0.8rem; +} +.md-typeset h4 { + margin: 0.8rem 0; + font-size: 0.8rem; + font-weight: 700; + letter-spacing: -0.01em; +} +.md-typeset h5, +.md-typeset h6 { + margin: 0.8rem 0; + color: var(--md-default-fg-color--light); + font-size: 0.64rem; + font-weight: 700; + letter-spacing: -0.01em; +} +.md-typeset h5 { + text-transform: uppercase; +} +.md-typeset hr { + margin: 1.5em 0; + border-bottom: 0.05rem dotted var(--md-default-fg-color--lighter); +} +.md-typeset a { + color: var(--md-primary-fg-color); + word-break: break-word; +} +.md-typeset a, .md-typeset a::before { + transition: color 125ms; +} +.md-typeset a:focus, .md-typeset a:hover { + color: var(--md-accent-fg-color); +} +.md-typeset code, +.md-typeset pre, +.md-typeset kbd { + background-color: var(--md-code-bg-color); + color: var(--md-code-fg-color); + font-size: 85%; + direction: ltr; +} +.md-typeset code { + margin: 0 0.2941176471em; + padding: 0.0735294118em 0; + border-radius: 0.1rem; + box-shadow: 0.2941176471em 0 0 var(--md-code-bg-color), -0.2941176471em 0 0 var(--md-code-bg-color); + word-break: break-word; + -webkit-box-decoration-break: clone; + box-decoration-break: clone; +} +.md-typeset h1 code, +.md-typeset h2 code, +.md-typeset h3 code, +.md-typeset h4 code, +.md-typeset h5 code, +.md-typeset h6 code { + margin: 0; + background-color: transparent; + box-shadow: none; +} +.md-typeset a > code { + margin: inherit; + padding: inherit; + border-radius: initial; + background-color: inherit; + color: inherit; + box-shadow: none; +} +.md-typeset pre { + position: relative; + margin: 1em 0; + border-radius: 0.1rem; + line-height: 1.4; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-overflow-scrolling: touch; +} +.md-typeset pre > code { + display: block; + margin: 0; + padding: 0.525rem 0.6rem; + background-color: transparent; + font-size: inherit; + box-shadow: none; + -webkit-box-decoration-break: slice; + box-decoration-break: slice; + overflow: auto; + word-break: normal; +} +.md-typeset pre > code::-webkit-scrollbar { + width: 0.2rem; + height: 0.2rem; +} +.md-typeset pre > code::-webkit-scrollbar-thumb { + background-color: var(--md-default-fg-color--lighter); +} +.md-typeset pre > code::-webkit-scrollbar-thumb:hover { + background-color: var(--md-accent-fg-color); +} +.md-typeset kbd { + display: inline-block; + padding: 0 0.5882352941em; + border-radius: 0.1rem; + font-size: 0.75em; + line-height: 1.5; + box-shadow: 0 0.1rem 0 0.05rem var(--md-default-fg-color--lighter), 0 0.1rem 0 var(--md-default-fg-color--lighter), inset 0 -0.1rem 0.2rem var(--md-default-bg-color); + word-break: break-word; + vertical-align: text-top; +} +.md-typeset mark { + margin: 0 0.25em; + padding: 0.0625em 0; + border-radius: 0.1rem; + background-color: rgba(255, 235, 59, 0.5); + box-shadow: 0.25em 0 0 rgba(255, 235, 59, 0.5), -0.25em 0 0 rgba(255, 235, 59, 0.5); + word-break: break-word; + -webkit-box-decoration-break: clone; + box-decoration-break: clone; +} +.md-typeset abbr { + border-bottom: 0.05rem dotted var(--md-default-fg-color--light); + text-decoration: none; + cursor: help; +} +.md-typeset small { + opacity: 0.75; +} +.md-typeset sup, +.md-typeset sub { + margin-left: 0.078125em; +} +[dir=rtl] .md-typeset sup, +[dir=rtl] .md-typeset sub { + margin-right: 0.078125em; + margin-left: initial; +} +.md-typeset blockquote { + padding-left: 0.6rem; + border-left: 0.2rem solid var(--md-default-fg-color--lighter); + color: var(--md-default-fg-color--light); +} +[dir=rtl] .md-typeset blockquote { + padding-right: 0.6rem; + padding-left: initial; + border-right: 0.2rem solid var(--md-default-fg-color--lighter); + border-left: initial; +} +.md-typeset ul { + list-style-type: disc; +} +.md-typeset ul, +.md-typeset ol { + margin-left: 0.625em; + padding: 0; +} +[dir=rtl] .md-typeset ul, +[dir=rtl] .md-typeset ol { + margin-right: 0.625em; + margin-left: initial; +} +.md-typeset ul ol, +.md-typeset ol ol { + list-style-type: lower-alpha; +} +.md-typeset ul ol ol, +.md-typeset ol ol ol { + list-style-type: lower-roman; +} +.md-typeset ul li, +.md-typeset ol li { + margin-bottom: 0.5em; + margin-left: 1.25em; +} +[dir=rtl] .md-typeset ul li, +[dir=rtl] .md-typeset ol li { + margin-right: 1.25em; + margin-left: initial; +} +.md-typeset ul li p, +.md-typeset ul li blockquote, +.md-typeset ol li p, +.md-typeset ol li blockquote { + margin: 0.5em 0; +} +.md-typeset ul li:last-child, +.md-typeset ol li:last-child { + margin-bottom: 0; +} +.md-typeset ul li ul, +.md-typeset ul li ol, +.md-typeset ol li ul, +.md-typeset ol li ol { + margin: 0.5em 0 0.5em 0.625em; +} +[dir=rtl] .md-typeset ul li ul, +[dir=rtl] .md-typeset ul li ol, +[dir=rtl] .md-typeset ol li ul, +[dir=rtl] .md-typeset ol li ol { + margin-right: 0.625em; + margin-left: initial; +} +.md-typeset dd { + margin: 1em 0 1em 1.875em; +} +[dir=rtl] .md-typeset dd { + margin-right: 1.875em; + margin-left: initial; +} +.md-typeset iframe, +.md-typeset img, +.md-typeset svg { + max-width: 100%; +} +.md-typeset table:not([class]) { + display: inline-block; + max-width: 100%; + border-radius: 0.1rem; + background: var(--md-default-bg-color); + font-size: 0.64rem; + box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.05rem rgba(0, 0, 0, 0.1); + overflow: auto; + -webkit-overflow-scrolling: touch; +} +.md-typeset table:not([class]) + * { + margin-top: 1.5em; +} +.md-typeset table:not([class]) th:not([align]), +.md-typeset table:not([class]) td:not([align]) { + text-align: left; +} +[dir=rtl] .md-typeset table:not([class]) th:not([align]), +[dir=rtl] .md-typeset table:not([class]) td:not([align]) { + text-align: right; +} +.md-typeset table:not([class]) th { + min-width: 5rem; + padding: 0.6rem 0.8rem; + background-color: var(--md-default-fg-color--light); + color: var(--md-default-bg-color); + vertical-align: top; +} +.md-typeset table:not([class]) td { + padding: 0.6rem 0.8rem; + border-top: 0.05rem solid var(--md-default-fg-color--lightest); + vertical-align: top; +} +.md-typeset table:not([class]) tr { + transition: background-color 125ms; +} +.md-typeset table:not([class]) tr:hover { + background-color: rgba(0, 0, 0, 0.035); + box-shadow: 0 0.05rem 0 var(--md-default-bg-color) inset; +} +.md-typeset table:not([class]) tr:first-child td { + border-top: 0; +} +.md-typeset table:not([class]) a { + word-break: normal; +} +.md-typeset__scrollwrap { + margin: 1em -0.8rem; + overflow-x: auto; + -webkit-overflow-scrolling: touch; +} +.md-typeset .md-typeset__table { + display: inline-block; + margin-bottom: 0.5em; + padding: 0 0.8rem; +} +.md-typeset .md-typeset__table table { + display: table; + width: 100%; + margin: 0; + overflow: hidden; +} + +html { + height: 100%; + background-color: var(--md-default-bg-color); + font-size: 125%; + overflow-x: hidden; +} + +body { + display: flex; + position: relative; + flex-direction: column; + width: 100%; + min-height: 100%; + font-size: 0.5rem; +} + +hr { + display: block; + height: 0.05rem; + padding: 0; + border: 0; +} + +.md-grid { + max-width: 61rem; + margin-right: auto; + margin-left: auto; +} + +.md-container { + display: flex; + flex-direction: column; + flex-grow: 1; +} + +.md-main { + flex-grow: 1; +} +.md-main__inner { + height: 100%; + padding-top: 1.5rem; + padding-bottom: 0.05rem; +} + +.md-ellipsis { + display: block; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +.md-toggle { + display: none; +} + +.md-overlay { + position: fixed; + top: 0; + width: 0; + height: 0; + transition: width 0ms 250ms, height 0ms 250ms, opacity 250ms; + background-color: var(--md-default-fg-color--light); + opacity: 0; + z-index: 3; +} + +.md-skip { + position: fixed; + margin: 0.5rem; + padding: 0.3rem 0.5rem; + transform: translateY(0.4rem); + border-radius: 0.1rem; + background-color: var(--md-default-fg-color); + color: var(--md-default-bg-color); + font-size: 0.64rem; + opacity: 0; +} +.md-skip:focus { + transform: translateY(0); + transition: transform 250ms cubic-bezier(0.4, 0, 0.2, 1), opacity 175ms 75ms; + opacity: 1; + z-index: 10; +} + +@page { + margin: 25mm; +} +.md-announce { + background-color: var(--md-default-fg-color); +} +.md-announce__inner { + min-height: 2.4rem; + padding: 0 0.8rem; + color: var(--md-default-bg-color); + font-size: 0.7rem; + line-height: 2.4rem; +} + +.md-clipboard { + position: absolute; + top: 0.4rem; + right: 0.4rem; + width: 1.2rem; + height: 1.2rem; + transition: color 250ms; + border-radius: 0.1rem; + color: var(--md-default-fg-color--lightest); + cursor: pointer; + z-index: 1; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; +} +.md-clipboard svg { + width: 0.9rem; + height: 0.9rem; +} +pre:hover .md-clipboard { + color: var(--md-default-fg-color--light); +} +pre .md-clipboard:focus, pre .md-clipboard:hover { + color: var(--md-accent-fg-color); +} +.md-content__inner { + margin: 0 0.8rem 1.2rem; + padding-top: 0.6rem; +} +.md-content__inner::before { + display: block; + height: 0.4rem; + content: ""; +} +.md-content__inner > :last-child { + margin-bottom: 0; +} +.md-content__button { + margin: 0.4rem 0; + margin-left: 0.4rem; + padding: 0; + float: right; +} +[dir=rtl] .md-content__button { + margin-right: 0.4rem; + margin-left: initial; + float: left; +} +[dir=rtl] .md-content__button svg { + transform: scaleX(-1); +} +.md-typeset .md-content__button { + color: var(--md-default-fg-color--lighter); +} +.md-content__button svg { + display: inline; + vertical-align: top; +} + +.md-dialog { + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2); + display: block; + position: fixed; + right: 0.8rem; + bottom: 0.8rem; + left: initial; + min-width: 11.1rem; + padding: 0.4rem 0.6rem; + transform: translateY(100%); + transition: transform 0ms 400ms, opacity 400ms; + border: none; + border-radius: 0.1rem; + background: var(--md-default-fg-color); + color: var(--md-default-bg-color); + font-size: 0.7rem; + opacity: 0; + z-index: 2; +} +[dir=rtl] .md-dialog { + right: initial; + left: 0.8rem; +} +.md-dialog[data-md-state=open] { + transform: translateY(0); + transition: transform 400ms cubic-bezier(0.075, 0.85, 0.175, 1), opacity 400ms; + opacity: 1; +} + +.md-header { + position: -webkit-sticky; + position: sticky; + top: 0; + right: 0; + left: 0; + height: 2.4rem; + transition: background-color 250ms, color 250ms; + background-color: var(--md-primary-fg-color); + color: var(--md-primary-bg-color); + box-shadow: 0 0 0.2rem rgba(0, 0, 0, 0), 0 0.2rem 0.4rem rgba(0, 0, 0, 0); + z-index: 2; +} +.no-js .md-header { + transition: none; + box-shadow: none; +} +.md-header[data-md-state=shadow] { + transition: background-color 250ms, color 250ms, box-shadow 250ms; + box-shadow: 0 0 0.2rem rgba(0, 0, 0, 0.1), 0 0.2rem 0.4rem rgba(0, 0, 0, 0.2); +} + +.md-header-nav { + display: flex; + padding: 0 0.2rem; +} +.md-header-nav__button { + position: relative; + margin: 0.2rem; + padding: 0.4rem; + transition: opacity 250ms; + cursor: pointer; + z-index: 1; +} +[dir=rtl] .md-header-nav__button svg { + transform: scaleX(-1); +} +.md-header-nav__button:focus, .md-header-nav__button:hover { + opacity: 0.7; +} +.md-header-nav__button.md-logo { + margin: 0.2rem; + padding: 0.4rem; +} +.md-header-nav__button.md-logo img, +.md-header-nav__button.md-logo svg { + display: block; + width: 1.2rem; + height: 1.2rem; + fill: currentColor; +} +.no-js .md-header-nav__button[for=__search] { + display: none; +} +.md-header-nav__topic { + display: block; + position: absolute; + width: 100%; + padding: 0 1rem; + transition: transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1), opacity 150ms; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; +} +.md-header-nav__topic + .md-header-nav__topic { + transform: translateX(1.25rem); + transition: transform 400ms cubic-bezier(1, 0.7, 0.1, 0.1), opacity 150ms; + opacity: 0; + z-index: -1; + pointer-events: none; +} +[dir=rtl] .md-header-nav__topic + .md-header-nav__topic { + transform: translateX(-1.25rem); +} +.no-js .md-header-nav__topic { + position: initial; +} +.no-js .md-header-nav__topic + .md-header-nav__topic { + display: none; +} +.md-header-nav__title { + flex-grow: 1; + font-size: 0.9rem; + line-height: 2.4rem; +} +.md-header-nav__title[data-md-state=active] .md-header-nav__topic { + transform: translateX(-1.25rem); + transition: transform 400ms cubic-bezier(1, 0.7, 0.1, 0.1), opacity 150ms; + opacity: 0; + z-index: -1; + pointer-events: none; +} +[dir=rtl] .md-header-nav__title[data-md-state=active] .md-header-nav__topic { + transform: translateX(1.25rem); +} +.md-header-nav__title[data-md-state=active] .md-header-nav__topic + .md-header-nav__topic { + transform: translateX(0); + transition: transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1), opacity 150ms; + opacity: 1; + z-index: 0; + pointer-events: initial; +} +.md-header-nav__title > .md-header-nav__ellipsis { + position: relative; + width: 100%; + height: 100%; +} +.md-header-nav__source { + display: none; +} + +.md-hero { + transition: background 250ms; + background-color: var(--md-primary-fg-color); + color: var(--md-primary-bg-color); + font-size: 1rem; + overflow: hidden; +} +.md-hero__inner { + margin-top: 1rem; + padding: 0.8rem 0.8rem 0.4rem; + transition: transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1), opacity 250ms; + transition-delay: 100ms; +} +[data-md-state=hidden] .md-hero__inner { + pointer-events: none; + transform: translateY(0.625rem); + transition: transform 0ms 400ms, opacity 100ms 0ms; + opacity: 0; +} +.md-hero--expand .md-hero__inner { + margin-bottom: 1.2rem; +} + +.md-footer { + background-color: var(--md-default-fg-color); + color: var(--md-default-bg-color); +} + +.md-footer-nav__inner { + padding: 0.2rem; + overflow: auto; +} +.md-footer-nav__link { + display: flex; + padding-top: 1.4rem; + padding-bottom: 0.4rem; + transition: opacity 250ms; +} +.md-footer-nav__link:focus, .md-footer-nav__link:hover { + opacity: 0.7; +} +.md-footer-nav__link--prev { + width: 25%; + float: left; +} +[dir=rtl] .md-footer-nav__link--prev { + float: right; +} +[dir=rtl] .md-footer-nav__link--prev svg { + transform: scaleX(-1); +} +.md-footer-nav__link--next { + width: 75%; + float: right; + text-align: right; +} +[dir=rtl] .md-footer-nav__link--next { + float: left; + text-align: left; +} +[dir=rtl] .md-footer-nav__link--next svg { + transform: scaleX(-1); +} +.md-footer-nav__title { + position: relative; + flex-grow: 1; + max-width: calc(100% - 2.4rem); + padding: 0 1rem; + font-size: 0.9rem; + line-height: 2.4rem; +} +.md-footer-nav__button { + margin: 0.2rem; + padding: 0.4rem; +} +.md-footer-nav__direction { + position: absolute; + right: 0; + left: 0; + margin-top: -1rem; + padding: 0 1rem; + color: var(--md-default-bg-color--light); + font-size: 0.64rem; +} + +.md-footer-meta { + background-color: var(--md-default-fg-color--lighter); +} +.md-footer-meta__inner { + padding: 0.2rem; + overflow: auto; +} +html .md-footer-meta.md-typeset a { + color: var(--md-default-bg-color--light); +} +html .md-footer-meta.md-typeset a:focus, html .md-footer-meta.md-typeset a:hover { + color: var(--md-default-bg-color); +} + +.md-footer-copyright { + margin: 0 0.6rem; + padding: 0.4rem 0; + color: var(--md-default-bg-color--lighter); + font-size: 0.64rem; +} +.md-footer-copyright__highlight { + color: var(--md-default-bg-color--light); +} + +.md-footer-social { + margin: 0 0.4rem; + padding: 0.2rem 0 0.6rem; +} +.md-footer-social__link { + display: inline-block; + width: 1.6rem; + height: 1.6rem; + transition: color 250ms; + text-align: center; +} +.md-footer-social__link::before { + line-height: 1.9; +} +.md-footer-social__link svg { + width: 0.8rem; + vertical-align: -25%; + fill: currentColor; +} + +.md-nav { + font-size: 0.7rem; + line-height: 1.3; +} +.md-nav__title { + display: block; + padding: 0 0.6rem; + font-weight: 700; + text-overflow: ellipsis; + overflow: hidden; +} +.md-nav__title .md-nav__button { + display: none; +} +.md-nav__title .md-nav__button img { + width: 100%; + height: auto; +} +.md-nav__title .md-nav__button.md-logo img, +.md-nav__title .md-nav__button.md-logo svg { + display: block; + width: 2.4rem; + height: 2.4rem; +} +.md-nav__title .md-nav__button.md-logo svg { + fill: currentColor; +} +.md-nav__list { + margin: 0; + padding: 0; + list-style: none; +} +.md-nav__item { + padding: 0 0.6rem; +} +.md-nav__item:last-child { + padding-bottom: 0.6rem; +} +.md-nav__item .md-nav__item { + padding-right: 0; +} +[dir=rtl] .md-nav__item .md-nav__item { + padding-right: 0.6rem; + padding-left: 0; +} +.md-nav__item .md-nav__item:last-child { + padding-bottom: 0; +} +.md-nav__link { + display: block; + margin-top: 0.625em; + transition: color 125ms; + text-overflow: ellipsis; + cursor: pointer; + overflow: hidden; + scroll-snap-align: start; +} +html .md-nav__link[for=__toc] { + display: none; +} +html .md-nav__link[for=__toc] ~ .md-nav { + display: none; +} +.md-nav__link[data-md-state=blur] { + color: var(--md-default-fg-color--light); +} +.md-nav__item .md-nav__link--active { + color: var(--md-primary-fg-color); +} +.md-nav__item--nested > .md-nav__link { + color: inherit; +} +.md-nav__link:focus, .md-nav__link:hover { + color: var(--md-accent-fg-color); +} +.md-nav__source { + display: none; +} + +.md-search { + position: relative; +} +.no-js .md-search { + display: none; +} +.md-search__overlay { + opacity: 0; + z-index: 1; +} +.md-search__inner { + -webkit-backface-visibility: hidden; + backface-visibility: hidden; +} +.md-search__form { + position: relative; +} +.md-search__input { + position: relative; + padding: 0 2.2rem 0 3.6rem; + text-overflow: ellipsis; + z-index: 2; +} +[dir=rtl] .md-search__input { + padding: 0 3.6rem 0 2.2rem; +} +.md-search__input::-webkit-input-placeholder { + -webkit-transition: color 250ms; + transition: color 250ms; +} +.md-search__input::-moz-placeholder { + -moz-transition: color 250ms; + transition: color 250ms; +} +.md-search__input::-ms-input-placeholder { + -ms-transition: color 250ms; + transition: color 250ms; +} +.md-search__input::placeholder { + transition: color 250ms; +} +.md-search__input::-webkit-input-placeholder { + color: var(--md-default-fg-color--light); +} +.md-search__input::-moz-placeholder { + color: var(--md-default-fg-color--light); +} +.md-search__input::-ms-input-placeholder { + color: var(--md-default-fg-color--light); +} +.md-search__input ~ .md-search__icon, .md-search__input::placeholder { + color: var(--md-default-fg-color--light); +} +.md-search__input::-ms-clear { + display: none; +} +.md-search__icon { + position: absolute; + width: 1.2rem; + height: 1.2rem; + transition: color 250ms, opacity 250ms; + cursor: pointer; + z-index: 2; +} +.md-search__icon:hover { + opacity: 0.7; +} +.md-search__icon[for=__search] { + top: 0.3rem; + left: 0.5rem; +} +[dir=rtl] .md-search__icon[for=__search] { + right: 0.5rem; + left: initial; +} +[dir=rtl] .md-search__icon[for=__search] svg { + transform: scaleX(-1); +} +.md-search__icon[type=reset] { + top: 0.3rem; + right: 0.5rem; + transform: scale(0.75); + transition: transform 150ms cubic-bezier(0.1, 0.7, 0.1, 1), opacity 150ms; + opacity: 0; + pointer-events: none; +} +[dir=rtl] .md-search__icon[type=reset] { + right: initial; + left: 0.5rem; +} +[data-md-toggle=search]:checked ~ .md-header .md-search__input:valid ~ .md-search__icon[type=reset] { + transform: scale(1); + opacity: 1; + pointer-events: initial; +} +[data-md-toggle=search]:checked ~ .md-header .md-search__input:valid ~ .md-search__icon[type=reset]:hover { + opacity: 0.7; +} +.md-search__output { + position: absolute; + width: 100%; + border-radius: 0 0 0.1rem 0.1rem; + overflow: hidden; + z-index: 1; +} +.md-search__scrollwrap { + height: 100%; + background-color: var(--md-default-bg-color); + box-shadow: inset 0 0.05rem 0 var(--md-default-fg-color--lightest); + overflow-y: auto; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-scroll-snap-type: y mandatory; + -ms-scroll-snap-type: y mandatory; + scroll-snap-type: y mandatory; + -webkit-overflow-scrolling: touch; +} + +.md-search-result { + color: var(--md-default-fg-color); + word-break: break-word; +} +.md-search-result__meta { + padding: 0 0.8rem; + background-color: var(--md-default-fg-color--lightest); + color: var(--md-default-fg-color--light); + font-size: 0.64rem; + line-height: 1.8rem; + scroll-snap-align: start; +} +.md-search-result__list { + margin: 0; + padding: 0; + border-top: 0.05rem solid var(--md-default-fg-color--lightest); + list-style: none; +} +.md-search-result__item { + box-shadow: 0 -0.05rem 0 var(--md-default-fg-color--lightest); +} +.md-search-result__link { + display: block; + transition: background 250ms; + outline: 0; + overflow: hidden; + scroll-snap-align: start; +} +.md-search-result__link:focus, .md-search-result__link:hover { + background-color: var(--md-accent-fg-color--transparent); +} +.md-search-result__link:focus .md-search-result__article::before, .md-search-result__link:hover .md-search-result__article::before { + opacity: 0.7; +} +.md-search-result__link:last-child .md-search-result__teaser { + margin-bottom: 0.6rem; +} +.md-search-result__article { + position: relative; + padding: 0 0.8rem; + overflow: auto; +} +.md-search-result__article--document .md-search-result__title { + margin: 0.55rem 0; + font-size: 0.8rem; + font-weight: 400; + line-height: 1.4; +} +.md-search-result__icon { + position: absolute; + left: 0; + margin: 0.1rem; + padding: 0.4rem; + color: var(--md-default-fg-color--light); +} +[dir=rtl] .md-search-result__icon { + right: 0; + left: initial; +} +[dir=rtl] .md-search-result__icon svg { + transform: scaleX(-1); +} +.md-search-result__title { + margin: 0.5em 0; + font-size: 0.64rem; + font-weight: 700; + line-height: 1.4; +} +.md-search-result__teaser { + display: -webkit-box; + max-height: 1.65rem; + margin: 0.5em 0; + color: var(--md-default-fg-color--light); + font-size: 0.64rem; + line-height: 1.4; + text-overflow: ellipsis; + overflow: hidden; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; +} +.md-search-result em { + font-style: normal; + font-weight: 700; + text-decoration: underline; +} + +.md-sidebar { + position: absolute; + width: 12.1rem; + padding: 1.2rem 0; + overflow: hidden; +} +.md-sidebar[data-md-state=lock] { + position: fixed; + top: 2.4rem; +} +.md-sidebar--secondary { + display: none; +} +.md-sidebar__scrollwrap { + max-height: 100%; + margin: 0 0.2rem; + overflow-y: auto; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-scroll-snap-type: y mandatory; + -ms-scroll-snap-type: y mandatory; + scroll-snap-type: y mandatory; +} +.md-sidebar__scrollwrap::-webkit-scrollbar { + width: 0.2rem; + height: 0.2rem; +} +.md-sidebar__scrollwrap::-webkit-scrollbar-thumb { + background-color: var(--md-default-fg-color--lighter); +} +.md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover { + background-color: var(--md-accent-fg-color); +} + +@-webkit-keyframes md-source__facts--done { + 0% { + height: 0; + } + 100% { + height: 0.65rem; + } +} + +@keyframes md-source__facts--done { + 0% { + height: 0; + } + 100% { + height: 0.65rem; + } +} +@-webkit-keyframes md-source__fact--done { + 0% { + transform: translateY(100%); + opacity: 0; + } + 50% { + opacity: 0; + } + 100% { + transform: translateY(0%); + opacity: 1; + } +} +@keyframes md-source__fact--done { + 0% { + transform: translateY(100%); + opacity: 0; + } + 50% { + opacity: 0; + } + 100% { + transform: translateY(0%); + opacity: 1; + } +} +.md-source { + display: block; + transition: opacity 250ms; + font-size: 0.65rem; + line-height: 1.25; + white-space: nowrap; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; +} +[dir=rtl] .md-source { + padding-right: initial; + padding-left: 0.6rem; +} +.md-source:hover { + opacity: 0.7; +} +.md-source__icon { + display: inline-block; + width: 2.4rem; + height: 2.4rem; + vertical-align: middle; +} +.md-source__icon svg { + margin-top: 0.6rem; + margin-left: 0.6rem; +} +[dir=rtl] .md-source__icon svg { + margin-right: 0.6rem; + margin-left: initial; +} +.md-source__icon + .md-source__repository { + margin-left: -2rem; + padding-left: 2rem; +} +[dir=rtl] .md-source__icon + .md-source__repository { + margin-right: -2rem; + margin-left: initial; + padding-right: 2rem; + padding-left: initial; +} +.md-source__repository { + display: inline-block; + max-width: calc(100% - 1.2rem); + margin-left: 0.6rem; + font-weight: 700; + text-overflow: ellipsis; + overflow: hidden; + vertical-align: middle; +} +.md-source__facts { + margin: 0; + padding: 0; + font-size: 0.55rem; + font-weight: 700; + list-style-type: none; + opacity: 0.75; + overflow: hidden; +} +[data-md-state=done] .md-source__facts { + -webkit-animation: md-source__facts--done 250ms ease-in; + animation: md-source__facts--done 250ms ease-in; +} +.md-source__fact { + float: left; +} +[dir=rtl] .md-source__fact { + float: right; +} +[data-md-state=done] .md-source__fact { + -webkit-animation: md-source__fact--done 400ms ease-out; + animation: md-source__fact--done 400ms ease-out; +} +.md-source__fact::before { + margin: 0 0.1rem; + content: "·"; +} +.md-source__fact:first-child::before { + display: none; +} + +.md-tabs { + width: 100%; + transition: background 250ms; + background-color: var(--md-primary-fg-color); + color: var(--md-primary-bg-color); + overflow: auto; +} +.no-js .md-tabs { + transition: none; +} +.md-tabs__list { + margin: 0; + margin-left: 0.2rem; + padding: 0; + list-style: none; + white-space: nowrap; +} +[dir=rtl] .md-tabs__list { + margin-right: 0.2rem; + margin-left: initial; +} +.md-tabs__item { + display: inline-block; + height: 2.4rem; + padding-right: 0.6rem; + padding-left: 0.6rem; +} +.md-tabs__link { + display: block; + margin-top: 0.8rem; + transition: transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1), opacity 250ms; + font-size: 0.7rem; + opacity: 0.7; +} +.no-js .md-tabs__link { + transition: none; +} +.md-tabs__link--active, .md-tabs__link:hover { + color: inherit; + opacity: 1; +} +.md-tabs__item:nth-child(2) .md-tabs__link { + transition-delay: 20ms; +} +.md-tabs__item:nth-child(3) .md-tabs__link { + transition-delay: 40ms; +} +.md-tabs__item:nth-child(4) .md-tabs__link { + transition-delay: 60ms; +} +.md-tabs__item:nth-child(5) .md-tabs__link { + transition-delay: 80ms; +} +.md-tabs__item:nth-child(6) .md-tabs__link { + transition-delay: 100ms; +} +.md-tabs__item:nth-child(7) .md-tabs__link { + transition-delay: 120ms; +} +.md-tabs__item:nth-child(8) .md-tabs__link { + transition-delay: 140ms; +} +.md-tabs__item:nth-child(9) .md-tabs__link { + transition-delay: 160ms; +} +.md-tabs__item:nth-child(10) .md-tabs__link { + transition-delay: 180ms; +} +.md-tabs__item:nth-child(11) .md-tabs__link { + transition-delay: 200ms; +} +.md-tabs__item:nth-child(12) .md-tabs__link { + transition-delay: 220ms; +} +.md-tabs__item:nth-child(13) .md-tabs__link { + transition-delay: 240ms; +} +.md-tabs__item:nth-child(14) .md-tabs__link { + transition-delay: 260ms; +} +.md-tabs__item:nth-child(15) .md-tabs__link { + transition-delay: 280ms; +} +.md-tabs__item:nth-child(16) .md-tabs__link { + transition-delay: 300ms; +} +.md-tabs[data-md-state=hidden] { + pointer-events: none; +} +.md-tabs[data-md-state=hidden] .md-tabs__link { + transform: translateY(50%); + transition: color 250ms, transform 0ms 400ms, opacity 100ms; + opacity: 0; +} + +.md-typeset .admonition, .md-typeset details { + margin: 1.5625em 0; + padding: 0 0.6rem; + border-left: 0.2rem solid #448aff; + border-radius: 0.1rem; + font-size: 0.64rem; + box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.05rem rgba(0, 0, 0, 0.1); + overflow: auto; +} +[dir=rtl] .md-typeset .admonition, [dir=rtl] .md-typeset details { + border-right: 0.2rem solid #448aff; + border-left: none; +} +html .md-typeset .admonition > :last-child, html .md-typeset details > :last-child { + margin-bottom: 0.6rem; +} +.md-typeset .admonition .admonition, .md-typeset details .admonition, .md-typeset .admonition details, .md-typeset details details { + margin: 1em 0; +} +.md-typeset .admonition.tldr, .md-typeset details.tldr, .md-typeset .admonition.summary, .md-typeset details.summary, .md-typeset .admonition.abstract, .md-typeset details.abstract { + border-left-color: #00b0ff; +} +.md-typeset .admonition.tldr > :first-child, .md-typeset details.tldr > :first-child, .md-typeset .admonition.summary > :first-child, .md-typeset details.summary > :first-child, .md-typeset .admonition.abstract > :first-child, .md-typeset details.abstract > :first-child { + background-color: rgba(0, 176, 255, 0.1); +} +.md-typeset .admonition.tldr > :first-child::before, .md-typeset details.tldr > :first-child::before, .md-typeset .admonition.summary > :first-child::before, .md-typeset details.summary > :first-child::before, .md-typeset .admonition.abstract > :first-child::before, .md-typeset details.abstract > :first-child::before { + background-color: #00b0ff; + -webkit-mask-image: url("data:image/svg+xml;utf8,"); + mask-image: url("data:image/svg+xml;utf8,"); +} +.md-typeset .admonition.todo, .md-typeset details.todo, .md-typeset .admonition.info, .md-typeset details.info { + border-left-color: #00b8d4; +} +.md-typeset .admonition.todo > :first-child, .md-typeset details.todo > :first-child, .md-typeset .admonition.info > :first-child, .md-typeset details.info > :first-child { + background-color: rgba(0, 184, 212, 0.1); +} +.md-typeset .admonition.todo > :first-child::before, .md-typeset details.todo > :first-child::before, .md-typeset .admonition.info > :first-child::before, .md-typeset details.info > :first-child::before { + background-color: #00b8d4; + -webkit-mask-image: url("data:image/svg+xml;utf8,"); + mask-image: url("data:image/svg+xml;utf8,"); +} +.md-typeset .admonition.important, .md-typeset details.important, .md-typeset .admonition.hint, .md-typeset details.hint, .md-typeset .admonition.tip, .md-typeset details.tip { + border-left-color: #00bfa5; +} +.md-typeset .admonition.important > :first-child, .md-typeset details.important > :first-child, .md-typeset .admonition.hint > :first-child, .md-typeset details.hint > :first-child, .md-typeset .admonition.tip > :first-child, .md-typeset details.tip > :first-child { + background-color: rgba(0, 191, 165, 0.1); +} +.md-typeset .admonition.important > :first-child::before, .md-typeset details.important > :first-child::before, .md-typeset .admonition.hint > :first-child::before, .md-typeset details.hint > :first-child::before, .md-typeset .admonition.tip > :first-child::before, .md-typeset details.tip > :first-child::before { + background-color: #00bfa5; + -webkit-mask-image: url("data:image/svg+xml;utf8,"); + mask-image: url("data:image/svg+xml;utf8,"); +} +.md-typeset .admonition.done, .md-typeset details.done, .md-typeset .admonition.check, .md-typeset details.check, .md-typeset .admonition.success, .md-typeset details.success { + border-left-color: #00c853; +} +.md-typeset .admonition.done > :first-child, .md-typeset details.done > :first-child, .md-typeset .admonition.check > :first-child, .md-typeset details.check > :first-child, .md-typeset .admonition.success > :first-child, .md-typeset details.success > :first-child { + background-color: rgba(0, 200, 83, 0.1); +} +.md-typeset .admonition.done > :first-child::before, .md-typeset details.done > :first-child::before, .md-typeset .admonition.check > :first-child::before, .md-typeset details.check > :first-child::before, .md-typeset .admonition.success > :first-child::before, .md-typeset details.success > :first-child::before { + background-color: #00c853; + -webkit-mask-image: url("data:image/svg+xml;utf8,"); + mask-image: url("data:image/svg+xml;utf8,"); +} +.md-typeset .admonition.faq, .md-typeset details.faq, .md-typeset .admonition.help, .md-typeset details.help, .md-typeset .admonition.question, .md-typeset details.question { + border-left-color: #64dd17; +} +.md-typeset .admonition.faq > :first-child, .md-typeset details.faq > :first-child, .md-typeset .admonition.help > :first-child, .md-typeset details.help > :first-child, .md-typeset .admonition.question > :first-child, .md-typeset details.question > :first-child { + background-color: rgba(100, 221, 23, 0.1); +} +.md-typeset .admonition.faq > :first-child::before, .md-typeset details.faq > :first-child::before, .md-typeset .admonition.help > :first-child::before, .md-typeset details.help > :first-child::before, .md-typeset .admonition.question > :first-child::before, .md-typeset details.question > :first-child::before { + background-color: #64dd17; + -webkit-mask-image: url("data:image/svg+xml;utf8,"); + mask-image: url("data:image/svg+xml;utf8,"); +} +.md-typeset .admonition.attention, .md-typeset details.attention, .md-typeset .admonition.caution, .md-typeset details.caution, .md-typeset .admonition.warning, .md-typeset details.warning { + border-left-color: #ff9100; +} +.md-typeset .admonition.attention > :first-child, .md-typeset details.attention > :first-child, .md-typeset .admonition.caution > :first-child, .md-typeset details.caution > :first-child, .md-typeset .admonition.warning > :first-child, .md-typeset details.warning > :first-child { + background-color: rgba(255, 145, 0, 0.1); +} +.md-typeset .admonition.attention > :first-child::before, .md-typeset details.attention > :first-child::before, .md-typeset .admonition.caution > :first-child::before, .md-typeset details.caution > :first-child::before, .md-typeset .admonition.warning > :first-child::before, .md-typeset details.warning > :first-child::before { + background-color: #ff9100; + -webkit-mask-image: url("data:image/svg+xml;utf8,"); + mask-image: url("data:image/svg+xml;utf8,"); +} +.md-typeset .admonition.missing, .md-typeset details.missing, .md-typeset .admonition.fail, .md-typeset details.fail, .md-typeset .admonition.failure, .md-typeset details.failure { + border-left-color: #ff5252; +} +.md-typeset .admonition.missing > :first-child, .md-typeset details.missing > :first-child, .md-typeset .admonition.fail > :first-child, .md-typeset details.fail > :first-child, .md-typeset .admonition.failure > :first-child, .md-typeset details.failure > :first-child { + background-color: rgba(255, 82, 82, 0.1); +} +.md-typeset .admonition.missing > :first-child::before, .md-typeset details.missing > :first-child::before, .md-typeset .admonition.fail > :first-child::before, .md-typeset details.fail > :first-child::before, .md-typeset .admonition.failure > :first-child::before, .md-typeset details.failure > :first-child::before { + background-color: #ff5252; + -webkit-mask-image: url("data:image/svg+xml;utf8,"); + mask-image: url("data:image/svg+xml;utf8,"); +} +.md-typeset .admonition.error, .md-typeset details.error, .md-typeset .admonition.danger, .md-typeset details.danger { + border-left-color: #ff1744; +} +.md-typeset .admonition.error > :first-child, .md-typeset details.error > :first-child, .md-typeset .admonition.danger > :first-child, .md-typeset details.danger > :first-child { + background-color: rgba(255, 23, 68, 0.1); +} +.md-typeset .admonition.error > :first-child::before, .md-typeset details.error > :first-child::before, .md-typeset .admonition.danger > :first-child::before, .md-typeset details.danger > :first-child::before { + background-color: #ff1744; + -webkit-mask-image: url("data:image/svg+xml;utf8,"); + mask-image: url("data:image/svg+xml;utf8,"); +} +.md-typeset .admonition.bug, .md-typeset details.bug { + border-left-color: #f50057; +} +.md-typeset .admonition.bug > :first-child, .md-typeset details.bug > :first-child { + background-color: rgba(245, 0, 87, 0.1); +} +.md-typeset .admonition.bug > :first-child::before, .md-typeset details.bug > :first-child::before { + background-color: #f50057; + -webkit-mask-image: url("data:image/svg+xml;utf8,"); + mask-image: url("data:image/svg+xml;utf8,"); +} +.md-typeset .admonition.example, .md-typeset details.example { + border-left-color: #651fff; +} +.md-typeset .admonition.example > :first-child, .md-typeset details.example > :first-child { + background-color: rgba(101, 31, 255, 0.1); +} +.md-typeset .admonition.example > :first-child::before, .md-typeset details.example > :first-child::before { + background-color: #651fff; + -webkit-mask-image: url("data:image/svg+xml;utf8,"); + mask-image: url("data:image/svg+xml;utf8,"); +} +.md-typeset .admonition.cite, .md-typeset details.cite, .md-typeset .admonition.quote, .md-typeset details.quote { + border-left-color: #9e9e9e; +} +.md-typeset .admonition.cite > :first-child, .md-typeset details.cite > :first-child, .md-typeset .admonition.quote > :first-child, .md-typeset details.quote > :first-child { + background-color: rgba(158, 158, 158, 0.1); +} +.md-typeset .admonition.cite > :first-child::before, .md-typeset details.cite > :first-child::before, .md-typeset .admonition.quote > :first-child::before, .md-typeset details.quote > :first-child::before { + background-color: #9e9e9e; + -webkit-mask-image: url("data:image/svg+xml;utf8,"); + mask-image: url("data:image/svg+xml;utf8,"); +} +.md-typeset .admonition-title, .md-typeset summary { + margin: 0 -0.6rem; + padding: 0.4rem 0.6rem 0.4rem 2rem; + background-color: rgba(68, 138, 255, 0.1); + font-weight: 700; +} +[dir=rtl] .md-typeset .admonition-title, [dir=rtl] .md-typeset summary { + padding: 0.4rem 2rem 0.4rem 0.6rem; +} +.md-typeset .admonition-title:last-child, .md-typeset summary:last-child { + margin-bottom: 0; +} +.md-typeset .admonition-title::before, .md-typeset summary::before { + position: absolute; + width: 1rem; + height: 1rem; + margin-left: -1.4rem; + background-color: #448aff; + -webkit-mask-image: url("data:image/svg+xml;utf8,"); + mask-image: url("data:image/svg+xml;utf8,"); + content: ""; +} +[dir=rtl] .md-typeset .admonition-title::before, [dir=rtl] .md-typeset summary::before { + margin-right: -1.4rem; + margin-left: initial; +} + +.codehilite .o, .highlight .o { + color: inherit; +} +.codehilite .ow, .highlight .ow { + color: inherit; +} +.codehilite .ge, .highlight .ge { + color: #000000; +} +.codehilite .gr, .highlight .gr { + color: #AA0000; +} +.codehilite .gh, .highlight .gh { + color: #999999; +} +.codehilite .go, .highlight .go { + color: #888888; +} +.codehilite .gp, .highlight .gp { + color: #555555; +} +.codehilite .gs, .highlight .gs { + color: inherit; +} +.codehilite .gu, .highlight .gu { + color: #AAAAAA; +} +.codehilite .gt, .highlight .gt { + color: #AA0000; +} +.codehilite .gd, .highlight .gd { + background-color: #FFDDDD; +} +.codehilite .gi, .highlight .gi { + background-color: #DDFFDD; +} +.codehilite .k, .highlight .k { + color: #3B78E7; +} +.codehilite .kc, .highlight .kc { + color: #A71D5D; +} +.codehilite .kd, .highlight .kd { + color: #3B78E7; +} +.codehilite .kn, .highlight .kn { + color: #3B78E7; +} +.codehilite .kp, .highlight .kp { + color: #A71D5D; +} +.codehilite .kr, .highlight .kr { + color: #3E61A2; +} +.codehilite .kt, .highlight .kt { + color: #3E61A2; +} +.codehilite .c, .highlight .c { + color: #999999; +} +.codehilite .cm, .highlight .cm { + color: #999999; +} +.codehilite .cp, .highlight .cp { + color: #666666; +} +.codehilite .c1, .highlight .c1 { + color: #999999; +} +.codehilite .ch, .highlight .ch { + color: #999999; +} +.codehilite .cs, .highlight .cs { + color: #999999; +} +.codehilite .na, .highlight .na { + color: #C2185B; +} +.codehilite .nb, .highlight .nb { + color: #C2185B; +} +.codehilite .bp, .highlight .bp { + color: #3E61A2; +} +.codehilite .nc, .highlight .nc { + color: #C2185B; +} +.codehilite .no, .highlight .no { + color: #3E61A2; +} +.codehilite .nd, .highlight .nd { + color: #666666; +} +.codehilite .ni, .highlight .ni { + color: #666666; +} +.codehilite .ne, .highlight .ne { + color: #C2185B; +} +.codehilite .nf, .highlight .nf { + color: #C2185B; +} +.codehilite .nl, .highlight .nl { + color: #3B5179; +} +.codehilite .nn, .highlight .nn { + color: #EC407A; +} +.codehilite .nt, .highlight .nt { + color: #3B78E7; +} +.codehilite .nv, .highlight .nv { + color: #3E61A2; +} +.codehilite .vc, .highlight .vc { + color: #3E61A2; +} +.codehilite .vg, .highlight .vg { + color: #3E61A2; +} +.codehilite .vi, .highlight .vi { + color: #3E61A2; +} +.codehilite .nx, .highlight .nx { + color: #EC407A; +} +.codehilite .m, .highlight .m { + color: #E74C3C; +} +.codehilite .mf, .highlight .mf { + color: #E74C3C; +} +.codehilite .mh, .highlight .mh { + color: #E74C3C; +} +.codehilite .mi, .highlight .mi { + color: #E74C3C; +} +.codehilite .il, .highlight .il { + color: #E74C3C; +} +.codehilite .mo, .highlight .mo { + color: #E74C3C; +} +.codehilite .s, .highlight .s { + color: #0D904F; +} +.codehilite .sb, .highlight .sb { + color: #0D904F; +} +.codehilite .sc, .highlight .sc { + color: #0D904F; +} +.codehilite .sd, .highlight .sd { + color: #999999; +} +.codehilite .s2, .highlight .s2 { + color: #0D904F; +} +.codehilite .se, .highlight .se { + color: #183691; +} +.codehilite .sh, .highlight .sh { + color: #183691; +} +.codehilite .si, .highlight .si { + color: #183691; +} +.codehilite .sx, .highlight .sx { + color: #183691; +} +.codehilite .sr, .highlight .sr { + color: #009926; +} +.codehilite .s1, .highlight .s1 { + color: #0D904F; +} +.codehilite .ss, .highlight .ss { + color: #0D904F; +} +.codehilite .err, .highlight .err { + color: #A61717; +} +.codehilite .w, .highlight .w { + color: transparent; +} +.codehilite .hll, .highlight .hll { + display: block; + margin: 0 -0.6rem; + padding: 0 0.6rem; + background-color: rgba(255, 235, 59, 0.5); +} + +.codehilitetable, .highlighttable { + display: block; + overflow: hidden; +} +.codehilitetable tbody, .highlighttable tbody, +.codehilitetable td, +.highlighttable td { + display: block; + padding: 0; +} +.codehilitetable tr, .highlighttable tr { + display: flex; +} +.codehilitetable pre, .highlighttable pre, +.codehilitetable .linenodiv, +.highlighttable .linenodiv { + margin: 0; + border-radius: 0; +} +.codehilitetable .linenodiv, .highlighttable .linenodiv { + padding: 0.525rem 0.6rem; +} +.codehilitetable .linenos, .highlighttable .linenos { + color: var(--md-default-fg-color--lighter); + box-shadow: inset 0 0 0 0.05rem var(--md-code-bg-color); + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.codehilitetable .linenos pre, .highlighttable .linenos pre { + background-color: transparent; + color: inherit; + text-align: right; +} +.codehilitetable .code, .highlighttable .code { + flex: 1; + overflow: hidden; +} + +.md-typeset > .codehilitetable, .md-typeset > .highlighttable { + margin: 1em 0; + border-radius: 0.2em; +} + +.md-typeset [id^="fnref:"] { + display: inline-block; +} +.md-typeset [id^="fnref:"]:target { + margin-top: -3.8rem; + padding-top: 3.8rem; + pointer-events: none; +} +.md-typeset [id^="fn:"]::before { + display: none; + height: 0; + content: ""; +} +.md-typeset [id^="fn:"]:target::before { + display: block; + margin-top: -3.5rem; + padding-top: 3.5rem; + pointer-events: none; +} +.md-typeset .footnote { + color: var(--md-default-fg-color--light); + font-size: 0.64rem; +} +.md-typeset .footnote ol { + margin-left: 0; +} +.md-typeset .footnote li { + transition: color 250ms; +} +.md-typeset .footnote li:target { + color: var(--md-default-fg-color); +} +.md-typeset .footnote li :first-child { + margin-top: 0; +} +.md-typeset .footnote li:hover .footnote-backref, .md-typeset .footnote li:target .footnote-backref { + transform: translateX(0); + opacity: 1; +} +.md-typeset .footnote li:hover .footnote-backref:hover, .md-typeset .footnote li:target .footnote-backref { + color: var(--md-accent-fg-color); +} +.md-typeset .footnote-ref { + display: inline-block; + pointer-events: initial; +} +.md-typeset .footnote-ref::before { + display: inline; + margin: 0 0.2em; + border-left: 0.05rem solid var(--md-default-fg-color--lighter); + font-size: 1.25em; + content: ""; + vertical-align: -0.25rem; +} +.md-typeset .footnote-backref { + display: inline-block; + transform: translateX(0.25rem); + transition: transform 250ms 250ms, color 250ms, opacity 125ms 250ms; + color: var(--md-default-fg-color--lighter); + font-size: 0; + opacity: 0; + vertical-align: text-bottom; +} +[dir=rtl] .md-typeset .footnote-backref { + transform: translateX(-0.25rem); +} +.md-typeset .footnote-backref::before { + display: inline-block; + width: 0.8rem; + height: 0.8rem; + background-color: currentColor; + -webkit-mask-image: url("data:image/svg+xml;utf8,"); + mask-image: url("data:image/svg+xml;utf8,"); + content: ""; +} +[dir=rtl] .md-typeset .footnote-backref::before svg { + transform: scaleX(-1); +} + +.md-typeset .headerlink { + display: inline-block; + margin-left: 0.5rem; + transform: translate(0, 0.25rem); + transition: transform 250ms 250ms, color 250ms, opacity 125ms 250ms, visibility 0ms 500ms; + opacity: 0; + visibility: hidden; +} +[dir=rtl] .md-typeset .headerlink { + margin-right: 0.5rem; + margin-left: initial; +} +html body .md-typeset .headerlink { + color: var(--md-default-fg-color--lighter); +} +.md-typeset :hover .headerlink, +.md-typeset :target .headerlink, +.md-typeset .headerlink:focus { + transform: translate(0, 0); + transition: transform 250ms 250ms, color 250ms, opacity 125ms 250ms, visibility 0ms; + opacity: 1; + visibility: visible; +} +.md-typeset .headerlink:focus, +.md-typeset .headerlink:hover, +.md-typeset :target .headerlink { + color: var(--md-accent-fg-color); +} +.md-typeset h3[id]::before, .md-typeset h2[id]::before, .md-typeset h1[id]::before { + display: block; + margin-top: -0.4rem; + padding-top: 0.4rem; + content: ""; +} +.md-typeset h3[id]:target::before, .md-typeset h2[id]:target::before, .md-typeset h1[id]:target::before { + margin-top: -3.4rem; + padding-top: 3.4rem; +} +.md-typeset h4[id]::before { + display: block; + margin-top: -0.45rem; + padding-top: 0.45rem; + content: ""; +} +.md-typeset h4[id]:target::before { + margin-top: -3.45rem; + padding-top: 3.45rem; +} +.md-typeset h6[id]::before, .md-typeset h5[id]::before { + display: block; + margin-top: -0.6rem; + padding-top: 0.6rem; + content: ""; +} +.md-typeset h6[id]:target::before, .md-typeset h5[id]:target::before { + margin-top: -3.6rem; + padding-top: 3.6rem; +} +.md-typeset .MJXc-display { + margin: 0.75em 0; + padding: 0.75em 0; + overflow: auto; + -webkit-overflow-scrolling: touch; +} +.md-typeset .MathJax_CHTML { + outline: 0; +} + +.md-typeset del.critic, +.md-typeset ins.critic, +.md-typeset .critic.comment { + margin: 0 0.25em; + padding: 0.0625em 0; + border-radius: 0.1rem; + -webkit-box-decoration-break: clone; + box-decoration-break: clone; +} +.md-typeset del.critic { + background-color: #FFDDDD; + box-shadow: 0.25em 0 0 #FFDDDD, -0.25em 0 0 #FFDDDD; +} +.md-typeset ins.critic { + background-color: #DDFFDD; + box-shadow: 0.25em 0 0 #DDFFDD, -0.25em 0 0 #DDFFDD; +} +.md-typeset .critic.comment { + color: #999999; +} +.md-typeset .critic.comment::before { + content: "/* "; +} +.md-typeset .critic.comment::after { + content: " */"; +} +.md-typeset .critic.block { + display: block; + margin: 1em 0; + padding-right: 0.8rem; + padding-left: 0.8rem; + box-shadow: none; +} +.md-typeset .critic.block :first-child { + margin-top: 0.5em; +} +.md-typeset .critic.block :last-child { + margin-bottom: 0.5em; +} + +.md-typeset details { + display: block; + padding-top: 0; +} +.md-typeset details[open] > summary::after { + transform: rotate(180deg); +} +.md-typeset details:not([open]) { + padding-bottom: 0; +} +.md-typeset details:not([open]) > summary { + border-bottom: none; +} +.md-typeset details summary { + position: relative; + padding-right: 2rem; +} +[dir=rtl] .md-typeset details summary { + padding-left: 2rem; +} +.md-typeset summary { + display: block; + outline: none; + cursor: pointer; +} +.md-typeset summary::-webkit-details-marker { + display: none; +} +.md-typeset summary::after { + position: absolute; + right: 0.6rem; + width: 1rem; + height: 1rem; + background-color: var(--md-default-fg-color--lighter); + -webkit-mask-image: url("data:image/svg+xml;utf8,"); + mask-image: url("data:image/svg+xml;utf8,"); + content: ""; +} +[dir=rtl] .md-typeset summary::after { + right: initial; + left: 0.6rem; +} + +.md-typeset .emojione, +.md-typeset .twemoji, +.md-typeset .gemoji { + width: 1rem; + vertical-align: text-top; +} + +.highlight [data-linenos]::before { + display: inline-block; + position: -webkit-sticky; + position: sticky; + left: -0.6rem; + margin-right: 0.6rem; + margin-left: -0.6rem; + padding-left: 0.6rem; + border-right: 0.05rem solid var(--md-default-fg-color--lightest); + color: var(--md-default-fg-color--lighter); + content: attr(data-linenos); + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.md-typeset code.codehilite, .md-typeset code.highlight { + margin: 0 0.2941176471em; + padding: 0.0735294118em 0; +} + +.md-typeset .tabbed-content { + display: none; + order: 99; + width: 100%; + background-color: var(--md-code-bg-color); +} +.md-typeset .tabbed-content pre { + margin: 0; + border-radius: 0; +} +.md-typeset .tabbed-set { + display: flex; + position: relative; + flex-wrap: wrap; + margin: 1em 0; + border: 0.05rem solid var(--md-default-fg-color--lightest); + border-radius: 0.1rem; +} +.md-typeset .tabbed-set > input { + display: none; +} +.md-typeset .tabbed-set > input:checked + label { + border-color: var(--md-accent-fg-color); + color: var(--md-accent-fg-color); +} +.md-typeset .tabbed-set > input:checked + label + .tabbed-content { + display: block; + padding: 0 0.6rem; +} +.md-typeset .tabbed-set > input:checked + label + .tabbed-content > :last-child { + margin-bottom: 0.6rem; +} +.md-typeset .tabbed-set > input:checked + label + .tabbed-content > pre:only-child, +.md-typeset .tabbed-set > input:checked + label + .tabbed-content > .highlight:only-child, +.md-typeset .tabbed-set > input:checked + label + .tabbed-content > .highlighttable:only-child, +.md-typeset .tabbed-set > input:checked + label + .tabbed-content > .codehilite:only-child, +.md-typeset .tabbed-set > input:checked + label + .tabbed-content > .codehilitetable:only-child { + margin: 0 -0.6rem; +} +.md-typeset .tabbed-set > input:checked + label + .tabbed-content > pre:only-child pre, +.md-typeset .tabbed-set > input:checked + label + .tabbed-content > .highlight:only-child pre, +.md-typeset .tabbed-set > input:checked + label + .tabbed-content > .highlighttable:only-child pre, +.md-typeset .tabbed-set > input:checked + label + .tabbed-content > .codehilite:only-child pre, +.md-typeset .tabbed-set > input:checked + label + .tabbed-content > .codehilitetable:only-child pre { + background: transparent; +} +.md-typeset .tabbed-set > label { + width: auto; + padding: 0.6rem; + padding-bottom: 0.5rem; + transition: color 125ms, border 250ms; + border-bottom: 0.1rem solid transparent; + color: var(--md-default-fg-color--light); + font-size: 0.64rem; + font-weight: 700; + cursor: pointer; +} +html .md-typeset .tabbed-set > label:hover { + color: var(--md-accent-fg-color); +} + +.md-typeset .task-list-item { + position: relative; + list-style-type: none; +} +.md-typeset .task-list-item [type=checkbox] { + position: absolute; + top: 0.45em; + left: -2em; +} +[dir=rtl] .md-typeset .task-list-item [type=checkbox] { + right: -2em; + left: initial; +} +.md-typeset .task-list-control .task-list-indicator::before { + position: absolute; + top: 0.15em; + left: -1.5em; + width: 1.25em; + height: 1.25em; + background-color: var(--md-default-fg-color--lightest); + -webkit-mask-image: url("data:image/svg+xml;utf8,"); + mask-image: url("data:image/svg+xml;utf8,"); + content: ""; +} +[dir=rtl] .md-typeset .task-list-control .task-list-indicator::before { + right: -1.5em; + left: initial; +} +.md-typeset .task-list-control [type=checkbox]:checked + .task-list-indicator::before { + background-color: #00e676; + -webkit-mask-image: url("data:image/svg+xml;utf8,"); + mask-image: url("data:image/svg+xml;utf8,"); +} +.md-typeset .task-list-control [type=checkbox] { + opacity: 0; + z-index: -1; +} +@media print { + .md-typeset a::after { + color: var(--md-default-fg-color--light); + content: " [" attr(href) "]"; + } + .md-typeset code, +.md-typeset pre, +.md-typeset kbd { + white-space: pre-wrap; + } + .md-clipboard { + display: none; + } + .md-content__button { + display: none; + } + .md-dialog { + display: none; + } + .md-header { + display: none; + } + .md-footer { + display: none; + } + .md-sidebar { + display: none; + } + .md-tabs { + display: none; + } + .md-typeset .headerlink { + display: none; + } +} +@media screen and (max-width: 44.9375em) { + .md-typeset > pre { + margin: 1em -0.8rem; + border-radius: 0; + } + .md-typeset > pre > code { + padding: 0.525rem 0.8rem; + } + .md-footer-nav__link--prev .md-footer-nav__title { + display: none; + } + .md-search-result__teaser { + max-height: 2.5rem; + -webkit-line-clamp: 3; + } + .codehilite .hll, .highlight .hll { + margin: 0 -0.8rem; + padding: 0 0.8rem; + } + .md-typeset > .codehilite, .md-typeset > .highlight { + margin: 1em -0.8rem; + } + .md-typeset > .codehilite code, .md-typeset > .highlight code { + padding: 0.525rem 0.8rem; + } + .md-typeset > .codehilitetable, .md-typeset > .highlighttable { + margin: 1em -0.8rem; + border-radius: 0; + } + .md-typeset > .codehilitetable .linenodiv, .md-typeset > .highlighttable .linenodiv { + padding: 0.5rem 0.8rem; + } + .md-typeset > p > .MJXc-display { + margin: 0.75em -0.8rem; + padding: 0.25em 0.8rem; + } + .highlight [data-linenos]::before { + left: -1.6rem; + margin-left: -1.6rem; + padding-left: 1.6rem; + } + .md-typeset > .tabbed-set { + margin: 1em -0.8rem; + border: 0; + border-top: 0.05rem solid var(--md-default-fg-color--lightest); + border-radius: 0; + } + .md-typeset > .tabbed-set code { + padding: 0.525rem 0.8rem; + } + .md-typeset > .tabbed-set input:first-child + label { + margin-left: 0.2rem; + } +} +@media screen and (min-width: 100em) { + html { + font-size: 137.5%; + } +} +@media screen and (min-width: 125em) { + html { + font-size: 150%; + } +} +@media screen and (max-width: 59.9375em) { + body[data-md-state=lock] { + position: fixed; + } + html .md-nav__link[for=__toc] { + display: block; + padding-right: 2.4rem; + } + html .md-nav__link[for=__toc] + .md-nav__link { + display: none; + } + html .md-nav__link[for=__toc] ~ .md-nav { + display: flex; + } + html [dir=rtl] .md-nav__link { + padding-right: 0.8rem; + padding-left: 2.4rem; + } + .md-nav__source { + display: block; + padding: 0 0.2rem; + background-color: var(--md-primary-fg-color--dark); + color: var(--md-primary-bg-color); + } + .md-search__overlay { + position: absolute; + top: 0.2rem; + left: -2.2rem; + width: 2rem; + height: 2rem; + transform-origin: center; + transition: transform 300ms 100ms, opacity 200ms 200ms; + border-radius: 1rem; + background-color: var(--md-default-bg-color); + overflow: hidden; + pointer-events: none; + } + [dir=rtl] .md-search__overlay { + right: -2.2rem; + left: initial; + } + [data-md-toggle=search]:checked ~ .md-header .md-search__overlay { + transition: transform 400ms, opacity 100ms; + opacity: 1; + } + .md-search__inner { + position: fixed; + top: 0; + left: 100%; + width: 100%; + height: 100%; + transform: translateX(5%); + transition: right 0ms 300ms, left 0ms 300ms, transform 150ms 150ms cubic-bezier(0.4, 0, 0.2, 1), opacity 150ms 150ms; + opacity: 0; + z-index: 2; + } + [data-md-toggle=search]:checked ~ .md-header .md-search__inner { + left: 0; + transform: translateX(0); + transition: right 0ms 0ms, left 0ms 0ms, transform 150ms 150ms cubic-bezier(0.1, 0.7, 0.1, 1), opacity 150ms 150ms; + opacity: 1; + } + [dir=rtl] [data-md-toggle=search]:checked ~ .md-header .md-search__inner { + right: 0; + left: initial; + } + html [dir=rtl] .md-search__inner { + right: 100%; + left: initial; + transform: translateX(-5%); + } + .md-search__input { + width: 100%; + height: 2.4rem; + font-size: 0.9rem; + } + .md-search__icon[for=__search] { + top: 0.6rem; + left: 0.8rem; + } + [dir=rtl] .md-search__icon[for=__search] { + right: 0.8rem; + left: initial; + } + .md-search__icon[for=__search] svg:first-child { + display: none; + } + .md-search__icon[type=reset] { + top: 0.6rem; + right: 0.8rem; + } + [dir=rtl] .md-search__icon[type=reset] { + right: initial; + left: 0.8rem; + } + .md-search__output { + top: 2.4rem; + bottom: 0; + } + .md-search-result__icon { + display: none; + } +} +@media screen and (max-width: 76.1875em) { + [data-md-toggle=drawer]:checked ~ .md-overlay { + width: 100%; + height: 100%; + transition: width 0ms, height 0ms, opacity 250ms; + opacity: 1; + } + .md-header-nav__button.md-logo { + display: none; + } + .md-hero__inner { + margin-top: 2.4rem; + margin-bottom: 1.2rem; + } + .md-nav { + background-color: var(--md-default-bg-color); + } + .md-nav--primary, .md-nav--primary .md-nav { + display: flex; + position: absolute; + top: 0; + right: 0; + left: 0; + flex-direction: column; + height: 100%; + z-index: 1; + } + .md-nav--primary .md-nav__title, +.md-nav--primary .md-nav__item { + font-size: 0.8rem; + line-height: 1.5; + } + .md-nav--primary .md-nav__title { + position: relative; + height: 5.6rem; + padding: 3rem 0.8rem 0.2rem; + background-color: var(--md-default-fg-color--lightest); + color: var(--md-default-fg-color--light); + font-weight: 400; + line-height: 2.4rem; + white-space: nowrap; + cursor: pointer; + } + .md-nav--primary .md-nav__title .md-nav__icon { + display: block; + position: absolute; + top: 0.4rem; + left: 0.4rem; + width: 1.2rem; + height: 1.2rem; + margin: 0.2rem; + } + [dir=rtl] .md-nav--primary .md-nav__title .md-nav__icon { + right: 0.4rem; + left: initial; + } + .md-nav--primary .md-nav__title ~ .md-nav__list { + background-color: var(--md-default-bg-color); + box-shadow: inset 0 0.05rem 0 var(--md-default-fg-color--lightest); + overflow-y: auto; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-scroll-snap-type: y mandatory; + -ms-scroll-snap-type: y mandatory; + scroll-snap-type: y mandatory; + } + .md-nav--primary .md-nav__title ~ .md-nav__list > .md-nav__item:first-child { + border-top: 0; + } + .md-nav--primary .md-nav__title[for=__drawer] { + position: relative; + background-color: var(--md-primary-fg-color); + color: var(--md-primary-bg-color); + } + .md-nav--primary .md-nav__title[for=__drawer] .md-nav__button { + display: block; + position: absolute; + top: 0.2rem; + left: 0.2rem; + margin: 0.2rem; + padding: 0.4rem; + font-size: 2.4rem; + } + html [dir=rtl] .md-nav--primary .md-nav__title[for=__drawer] .md-nav__button { + right: 0.2rem; + left: initial; + } + .md-nav--primary .md-nav__list { + flex: 1; + } + .md-nav--primary .md-nav__item { + padding: 0; + border-top: 0.05rem solid var(--md-default-fg-color--lightest); + } + [dir=rtl] .md-nav--primary .md-nav__item { + padding: 0; + } + .md-nav--primary .md-nav__item--nested > .md-nav__link { + padding-right: 2.4rem; + } + [dir=rtl] .md-nav--primary .md-nav__item--nested > .md-nav__link { + padding-right: 0.8rem; + padding-left: 2.4rem; + } + .md-nav--primary .md-nav__item--active > .md-nav__link { + color: var(--md-primary-fg-color); + } + .md-nav--primary .md-nav__link { + position: relative; + margin-top: 0; + padding: 0.6rem 0.8rem; + } + .md-nav--primary .md-nav__link .md-nav__icon { + position: absolute; + top: 50%; + right: 0.6rem; + margin-top: -0.6rem; + color: inherit; + font-size: 1.2rem; + } + [dir=rtl] .md-nav--primary .md-nav__link .md-nav__icon { + right: initial; + left: 0.6rem; + } + [dir=rtl] .md-nav--primary .md-nav__icon svg { + transform: scale(-1); + } + .md-nav--primary .md-nav--secondary .md-nav__link { + position: static; + } + .md-nav--primary .md-nav--secondary .md-nav { + position: static; + background-color: transparent; + } + .md-nav--primary .md-nav--secondary .md-nav .md-nav__link { + padding-left: 1.4rem; + } + [dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav__link { + padding-right: 1.4rem; + padding-left: initial; + } + .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link { + padding-left: 2rem; + } + [dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link { + padding-right: 2rem; + padding-left: initial; + } + .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link { + padding-left: 2.6rem; + } + [dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link { + padding-right: 2.6rem; + padding-left: initial; + } + .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link { + padding-left: 3.2rem; + } + [dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link { + padding-right: 3.2rem; + padding-left: initial; + } + .md-nav__toggle ~ .md-nav { + display: flex; + transform: translateX(100%); + transition: transform 250ms cubic-bezier(0.8, 0, 0.6, 1), opacity 125ms 50ms; + opacity: 0; + } + [dir=rtl] .md-nav__toggle ~ .md-nav { + transform: translateX(-100%); + } + .md-nav__toggle:checked ~ .md-nav { + transform: translateX(0); + transition: transform 250ms cubic-bezier(0.4, 0, 0.2, 1), opacity 125ms 125ms; + opacity: 1; + } + .md-sidebar--primary { + position: fixed; + top: 0; + left: -12.1rem; + width: 12.1rem; + height: 100%; + transform: translateX(0); + transition: transform 250ms cubic-bezier(0.4, 0, 0.2, 1), box-shadow 250ms; + background-color: var(--md-default-bg-color); + z-index: 3; + } + [dir=rtl] .md-sidebar--primary { + right: -12.1rem; + left: initial; + } + [data-md-toggle=drawer]:checked ~ .md-container .md-sidebar--primary { + box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.4); + transform: translateX(12.1rem); + } + [dir=rtl] [data-md-toggle=drawer]:checked ~ .md-container .md-sidebar--primary { + transform: translateX(-12.1rem); + } + .md-sidebar--primary .md-sidebar__scrollwrap { + overflow: hidden; + } + .md-sidebar--primary .md-sidebar__scrollwrap { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + margin: 0; + -webkit-scroll-snap-type: none; + -ms-scroll-snap-type: none; + scroll-snap-type: none; + } + .md-tabs { + display: none; + } +} +@media screen and (min-width: 60em) { + .md-content { + margin-right: 12.1rem; + } + [dir=rtl] .md-content { + margin-right: initial; + margin-left: 12.1rem; + } + .md-header-nav__button[for=__search] { + display: none; + } + .md-header-nav__source { + display: block; + width: 11.7rem; + max-width: 11.7rem; + margin-left: 1rem; + } + [dir=rtl] .md-header-nav__source { + margin-right: 1rem; + margin-left: initial; + } + .md-nav--secondary .md-nav__title[for=__toc] { + scroll-snap-align: start; + } + .md-nav--secondary .md-nav__title .md-nav__icon { + display: none; + } + .md-search { + padding: 0.2rem 0; + } + .md-search__overlay { + position: fixed; + top: 0; + left: 0; + width: 0; + height: 0; + transition: width 0ms 250ms, height 0ms 250ms, opacity 250ms; + background-color: var(--md-default-fg-color--light); + cursor: pointer; + } + [dir=rtl] .md-search__overlay { + right: 0; + left: initial; + } + [data-md-toggle=search]:checked ~ .md-header .md-search__overlay { + width: 100%; + height: 100%; + transition: width 0ms, height 0ms, opacity 250ms; + opacity: 1; + } + .md-search__inner { + position: relative; + width: 11.7rem; + padding: 0.1rem 0; + float: right; + transition: width 250ms cubic-bezier(0.1, 0.7, 0.1, 1); + } + [dir=rtl] .md-search__inner { + float: left; + } + .md-search__form { + border-radius: 0.1rem; + } + .md-search__input { + width: 100%; + height: 1.8rem; + padding-left: 2.2rem; + transition: background-color 250ms, color 250ms; + border-radius: 0.1rem; + background-color: var(--md-default-fg-color--lighter); + color: inherit; + font-size: 0.8rem; + } + [dir=rtl] .md-search__input { + padding-right: 2.2rem; + } + .md-search__input + .md-search__icon { + color: var(--md-primary-bg-color); + } + .md-search__input::-webkit-input-placeholder { + color: var(--md-primary-bg-color--light); + } + .md-search__input::-moz-placeholder { + color: var(--md-primary-bg-color--light); + } + .md-search__input::-ms-input-placeholder { + color: var(--md-primary-bg-color--light); + } + .md-search__input::placeholder { + color: var(--md-primary-bg-color--light); + } + .md-search__input:hover { + background-color: var(--md-default-bg-color--lightest); + } + [data-md-toggle=search]:checked ~ .md-header .md-search__input { + border-radius: 0.1rem 0.1rem 0 0; + background-color: var(--md-default-bg-color); + color: var(--md-default-fg-color); + text-overflow: clip; + } + [data-md-toggle=search]:checked ~ .md-header .md-search__input::-webkit-input-placeholder { + color: var(--md-default-fg-color--light); + } + [data-md-toggle=search]:checked ~ .md-header .md-search__input::-moz-placeholder { + color: var(--md-default-fg-color--light); + } + [data-md-toggle=search]:checked ~ .md-header .md-search__input::-ms-input-placeholder { + color: var(--md-default-fg-color--light); + } + [data-md-toggle=search]:checked ~ .md-header .md-search__input + .md-search__icon, [data-md-toggle=search]:checked ~ .md-header .md-search__input::placeholder { + color: var(--md-default-fg-color--light); + } + .md-search__icon[for=__search] svg:last-child { + display: none; + } + .md-search__output { + top: 1.9rem; + transition: opacity 400ms; + opacity: 0; + } + [data-md-toggle=search]:checked ~ .md-header .md-search__output { + box-shadow: 0 6px 10px 0 rgba(0, 0, 0, 0.14), 0 1px 18px 0 rgba(0, 0, 0, 0.12), 0 3px 5px -1px rgba(0, 0, 0, 0.4); + opacity: 1; + } + .md-search__scrollwrap { + max-height: 0; + } + [data-md-toggle=search]:checked ~ .md-header .md-search__scrollwrap { + max-height: 75vh; + } + .md-search__scrollwrap::-webkit-scrollbar { + width: 0.2rem; + height: 0.2rem; + } + .md-search__scrollwrap::-webkit-scrollbar-thumb { + background-color: var(--md-default-fg-color--lighter); + } + .md-search__scrollwrap::-webkit-scrollbar-thumb:hover { + background-color: var(--md-accent-fg-color); + } + .md-search-result__meta { + padding-left: 2.2rem; + } + [dir=rtl] .md-search-result__meta { + padding-right: 2.2rem; + padding-left: initial; + } + .md-search-result__article { + padding-left: 2.2rem; + } + [dir=rtl] .md-search-result__article { + padding-right: 2.2rem; + padding-left: 0.8rem; + } + .md-sidebar--secondary { + display: block; + margin-left: calc(100% - 12.1rem); + } + [dir=rtl] .md-sidebar--secondary { + margin-right: calc(100% - 12.1rem); + margin-left: initial; + } + .md-sidebar--secondary .md-sidebar__scrollwrap { + -webkit-overflow-scrolling: touch; + } +} +@media screen and (min-width: 76.25em) { + .md-content { + margin-left: 12.1rem; + } + [dir=rtl] .md-content { + margin-right: 12.1rem; + } + .md-content__inner { + margin-right: 1.2rem; + margin-left: 1.2rem; + } + .md-header-nav__button[for=__drawer] { + display: none; + } + .md-header-nav__source { + margin-left: 1.4rem; + } + [dir=rtl] .md-header-nav__source { + margin-right: 1.4rem; + } + .md-nav { + transition: max-height 250ms cubic-bezier(0.86, 0, 0.07, 1); + } + .md-nav--primary .md-nav__title[for=__drawer] { + scroll-snap-align: start; + } + .md-nav--primary .md-nav__title .md-nav__icon { + display: none; + } + .md-nav__toggle ~ .md-nav { + display: none; + } + .md-nav__toggle:checked ~ .md-nav { + display: block; + } + .md-nav__item--nested > .md-nav > .md-nav__title { + display: none; + } + .md-nav__icon { + height: 0.9rem; + float: right; + transition: transform 250ms; + } + .md-nav__icon svg { + display: inline-block; + width: 0.9rem; + height: 0.9rem; + vertical-align: -0.1rem; + } + .md-nav__item--nested .md-nav__toggle:checked ~ .md-nav__link .md-nav__icon { + transform: rotateZ(90deg); + } + [data-md-toggle=search]:checked ~ .md-header .md-search__inner { + width: 34.4rem; + } + .md-search__scrollwrap { + width: 34.4rem; + } + .md-sidebar--secondary { + margin-left: 48.9rem; + } + [dir=rtl] .md-sidebar--secondary { + margin-right: 48.9rem; + margin-left: initial; + } + .md-tabs ~ .md-main .md-nav--primary > .md-nav__list > .md-nav__item--nested { + display: none; + } + .md-tabs--active ~ .md-main .md-nav--primary .md-nav__title { + display: block; + padding: 0 0.6rem; + pointer-events: none; + scroll-snap-align: start; + } + .md-tabs--active ~ .md-main .md-nav--primary .md-nav__title[for=__drawer] { + display: none; + } + .md-tabs--active ~ .md-main .md-nav--primary > .md-nav__list > .md-nav__item { + display: none; + } + .md-tabs--active ~ .md-main .md-nav--primary > .md-nav__list > .md-nav__item--active { + display: block; + padding: 0; + } + .md-tabs--active ~ .md-main .md-nav--primary > .md-nav__list > .md-nav__item--active > .md-nav__link { + display: none; + } + .md-tabs--active ~ .md-main .md-nav[data-md-level="1"] > .md-nav__list > .md-nav__item { + padding: 0 0.6rem; + } + .md-tabs--active ~ .md-main .md-nav[data-md-level="1"] .md-nav .md-nav__title { + display: none; + } +} +@media screen and (min-width: 45em) { + .md-footer-nav__link { + width: 50%; + } + .md-footer-copyright { + max-width: 75%; + float: left; + } + [dir=rtl] .md-footer-copyright { + float: right; + } + .md-footer-social { + padding: 0.6rem 0; + float: right; + } + [dir=rtl] .md-footer-social { + float: left; + } +} +@media screen and (max-width: 29.9375em) { + [data-md-toggle=search]:checked ~ .md-header .md-search__overlay { + transform: scale(45); + } +} +@media screen and (min-width: 30em) and (max-width: 44.9375em) { + [data-md-toggle=search]:checked ~ .md-header .md-search__overlay { + transform: scale(60); + } +} +@media screen and (min-width: 45em) and (max-width: 59.9375em) { + [data-md-toggle=search]:checked ~ .md-header .md-search__overlay { + transform: scale(75); + } +} +@media screen and (min-width: 60em) and (max-width: 76.1875em) { + [data-md-toggle=search]:checked ~ .md-header .md-search__inner { + width: 23.4rem; + } + .md-search__scrollwrap { + width: 23.4rem; + } + .md-search-result__teaser { + max-height: 2.5rem; + -webkit-line-clamp: 3; + } +} +@media (-webkit-max-device-pixel-ratio: 1), (max-resolution: 1dppx) { + .md-search__scrollwrap { + transform: translateZ(0); + } +} +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/main.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/base/_reset.scss */ +/*# sourceURL=main.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/base/_colors.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/base/_icons.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/base/_typeset.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/layout/_base.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/layout/_announce.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/layout/_clipboard.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/layout/_content.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/layout/_dialog.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/node_modules/material-shadows/material-shadows.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/layout/_header.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/layout/_hero.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/layout/_footer.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/layout/_nav.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/layout/_search.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/layout/_sidebar.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/layout/_source.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/layout/_tabs.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/extensions/_admonition.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/extensions/_codehilite.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/extensions/_footnotes.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/extensions/_permalinks.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/extensions/pymdown/_arithmatex.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/extensions/pymdown/_critic.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/extensions/pymdown/_details.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/extensions/pymdown/_emoji.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/extensions/pymdown/_highlight.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/extensions/pymdown/_inlinehilite.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/extensions/pymdown/_tabbed.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/extensions/pymdown/_tasklist.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/utilities/_break.scss */ +/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9zcXVpZGZ1bmsvRGVza3RvcC9HZW5lcmFsL1NvdXJjZXMvbWtkb2NzLW1hdGVyaWFsLXR5cGVzY3JpcHQvc3JjL2Fzc2V0cy9zdHlsZXNoZWV0cy9tYWluLnNjc3MiLCIvVXNlcnMvc3F1aWRmdW5rL0Rlc2t0b3AvR2VuZXJhbC9Tb3VyY2VzL21rZG9jcy1tYXRlcmlhbC10eXBlc2NyaXB0L3NyYy9hc3NldHMvc3R5bGVzaGVldHMvYmFzZS9fcmVzZXQuc2NzcyIsIm1haW4uc2NzcyIsIi9Vc2Vycy9zcXVpZGZ1bmsvRGVza3RvcC9HZW5lcmFsL1NvdXJjZXMvbWtkb2NzLW1hdGVyaWFsLXR5cGVzY3JpcHQvc3JjL2Fzc2V0cy9zdHlsZXNoZWV0cy9iYXNlL19jb2xvcnMuc2NzcyIsIi9Vc2Vycy9zcXVpZGZ1bmsvRGVza3RvcC9HZW5lcmFsL1NvdXJjZXMvbWtkb2NzLW1hdGVyaWFsLXR5cGVzY3JpcHQvc3JjL2Fzc2V0cy9zdHlsZXNoZWV0cy9iYXNlL19pY29ucy5zY3NzIiwiL1VzZXJzL3NxdWlkZnVuay9EZXNrdG9wL0dlbmVyYWwvU291cmNlcy9ta2RvY3MtbWF0ZXJpYWwtdHlwZXNjcmlwdC9zcmMvYXNzZXRzL3N0eWxlc2hlZXRzL2Jhc2UvX3R5cGVzZXQuc2NzcyIsIi9Vc2Vycy9zcXVpZGZ1bmsvRGVza3RvcC9HZW5lcmFsL1NvdXJjZXMvbWtkb2NzLW1hdGVyaWFsLXR5cGVzY3JpcHQvc3JjL2Fzc2V0cy9zdHlsZXNoZWV0cy9sYXlvdXQvX2Jhc2Uuc2NzcyIsIi9Vc2Vycy9zcXVpZGZ1bmsvRGVza3RvcC9HZW5lcmFsL1NvdXJjZXMvbWtkb2NzLW1hdGVyaWFsLXR5cGVzY3JpcHQvc3JjL2Fzc2V0cy9zdHlsZXNoZWV0cy9sYXlvdXQvX2Fubm91bmNlLnNjc3MiLCIvVXNlcnMvc3F1aWRmdW5rL0Rlc2t0b3AvR2VuZXJhbC9Tb3VyY2VzL21rZG9jcy1tYXRlcmlhbC10eXBlc2NyaXB0L3NyYy9hc3NldHMvc3R5bGVzaGVldHMvbGF5b3V0L19jbGlwYm9hcmQuc2NzcyIsIi9Vc2Vycy9zcXVpZGZ1bmsvRGVza3RvcC9HZW5lcmFsL1NvdXJjZXMvbWtkb2NzLW1hdGVyaWFsLXR5cGVzY3JpcHQvc3JjL2Fzc2V0cy9zdHlsZXNoZWV0cy9sYXlvdXQvX2NvbnRlbnQuc2NzcyIsIi9Vc2Vycy9zcXVpZGZ1bmsvRGVza3RvcC9HZW5lcmFsL1NvdXJjZXMvbWtkb2NzLW1hdGVyaWFsLXR5cGVzY3JpcHQvc3JjL2Fzc2V0cy9zdHlsZXNoZWV0cy9sYXlvdXQvX2RpYWxvZy5zY3NzIiwiL1VzZXJzL3NxdWlkZnVuay9EZXNrdG9wL0dlbmVyYWwvU291cmNlcy9ta2RvY3MtbWF0ZXJpYWwtdHlwZXNjcmlwdC9ub2RlX21vZHVsZXMvbWF0ZXJpYWwtc2hhZG93cy9tYXRlcmlhbC1zaGFkb3dzLnNjc3MiLCIvVXNlcnMvc3F1aWRmdW5rL0Rlc2t0b3AvR2VuZXJhbC9Tb3VyY2VzL21rZG9jcy1tYXRlcmlhbC10eXBlc2NyaXB0L3NyYy9hc3NldHMvc3R5bGVzaGVldHMvbGF5b3V0L19oZWFkZXIuc2NzcyIsIi9Vc2Vycy9zcXVpZGZ1bmsvRGVza3RvcC9HZW5lcmFsL1NvdXJjZXMvbWtkb2NzLW1hdGVyaWFsLXR5cGVzY3JpcHQvc3JjL2Fzc2V0cy9zdHlsZXNoZWV0cy9sYXlvdXQvX2hlcm8uc2NzcyIsIi9Vc2Vycy9zcXVpZGZ1bmsvRGVza3RvcC9HZW5lcmFsL1NvdXJjZXMvbWtkb2NzLW1hdGVyaWFsLXR5cGVzY3JpcHQvc3JjL2Fzc2V0cy9zdHlsZXNoZWV0cy9sYXlvdXQvX2Zvb3Rlci5zY3NzIiwiL1VzZXJzL3NxdWlkZnVuay9EZXNrdG9wL0dlbmVyYWwvU291cmNlcy9ta2RvY3MtbWF0ZXJpYWwtdHlwZXNjcmlwdC9zcmMvYXNzZXRzL3N0eWxlc2hlZXRzL2xheW91dC9fbmF2LnNjc3MiLCIvVXNlcnMvc3F1aWRmdW5rL0Rlc2t0b3AvR2VuZXJhbC9Tb3VyY2VzL21rZG9jcy1tYXRlcmlhbC10eXBlc2NyaXB0L3NyYy9hc3NldHMvc3R5bGVzaGVldHMvbGF5b3V0L19zZWFyY2guc2NzcyIsIi9Vc2Vycy9zcXVpZGZ1bmsvRGVza3RvcC9HZW5lcmFsL1NvdXJjZXMvbWtkb2NzLW1hdGVyaWFsLXR5cGVzY3JpcHQvc3JjL2Fzc2V0cy9zdHlsZXNoZWV0cy9sYXlvdXQvX3NpZGViYXIuc2NzcyIsIi9Vc2Vycy9zcXVpZGZ1bmsvRGVza3RvcC9HZW5lcmFsL1NvdXJjZXMvbWtkb2NzLW1hdGVyaWFsLXR5cGVzY3JpcHQvc3JjL2Fzc2V0cy9zdHlsZXNoZWV0cy9sYXlvdXQvX3NvdXJjZS5zY3NzIiwiL1VzZXJzL3NxdWlkZnVuay9EZXNrdG9wL0dlbmVyYWwvU291cmNlcy9ta2RvY3MtbWF0ZXJpYWwtdHlwZXNjcmlwdC9zcmMvYXNzZXRzL3N0eWxlc2hlZXRzL2xheW91dC9fdGFicy5zY3NzIiwiL1VzZXJzL3NxdWlkZnVuay9EZXNrdG9wL0dlbmVyYWwvU291cmNlcy9ta2RvY3MtbWF0ZXJpYWwtdHlwZXNjcmlwdC9zcmMvYXNzZXRzL3N0eWxlc2hlZXRzL2V4dGVuc2lvbnMvX2FkbW9uaXRpb24uc2NzcyIsIi9Vc2Vycy9zcXVpZGZ1bmsvRGVza3RvcC9HZW5lcmFsL1NvdXJjZXMvbWtkb2NzLW1hdGVyaWFsLXR5cGVzY3JpcHQvc3JjL2Fzc2V0cy9zdHlsZXNoZWV0cy9leHRlbnNpb25zL19jb2RlaGlsaXRlLnNjc3MiLCIvVXNlcnMvc3F1aWRmdW5rL0Rlc2t0b3AvR2VuZXJhbC9Tb3VyY2VzL21rZG9jcy1tYXRlcmlhbC10eXBlc2NyaXB0L3NyYy9hc3NldHMvc3R5bGVzaGVldHMvZXh0ZW5zaW9ucy9fZm9vdG5vdGVzLnNjc3MiLCIvVXNlcnMvc3F1aWRmdW5rL0Rlc2t0b3AvR2VuZXJhbC9Tb3VyY2VzL21rZG9jcy1tYXRlcmlhbC10eXBlc2NyaXB0L3NyYy9hc3NldHMvc3R5bGVzaGVldHMvZXh0ZW5zaW9ucy9fcGVybWFsaW5rcy5zY3NzIiwiL1VzZXJzL3NxdWlkZnVuay9EZXNrdG9wL0dlbmVyYWwvU291cmNlcy9ta2RvY3MtbWF0ZXJpYWwtdHlwZXNjcmlwdC9zcmMvYXNzZXRzL3N0eWxlc2hlZXRzL2V4dGVuc2lvbnMvcHltZG93bi9fYXJpdGhtYXRleC5zY3NzIiwiL1VzZXJzL3NxdWlkZnVuay9EZXNrdG9wL0dlbmVyYWwvU291cmNlcy9ta2RvY3MtbWF0ZXJpYWwtdHlwZXNjcmlwdC9zcmMvYXNzZXRzL3N0eWxlc2hlZXRzL2V4dGVuc2lvbnMvcHltZG93bi9fY3JpdGljLnNjc3MiLCIvVXNlcnMvc3F1aWRmdW5rL0Rlc2t0b3AvR2VuZXJhbC9Tb3VyY2VzL21rZG9jcy1tYXRlcmlhbC10eXBlc2NyaXB0L3NyYy9hc3NldHMvc3R5bGVzaGVldHMvZXh0ZW5zaW9ucy9weW1kb3duL19kZXRhaWxzLnNjc3MiLCIvVXNlcnMvc3F1aWRmdW5rL0Rlc2t0b3AvR2VuZXJhbC9Tb3VyY2VzL21rZG9jcy1tYXRlcmlhbC10eXBlc2NyaXB0L3NyYy9hc3NldHMvc3R5bGVzaGVldHMvZXh0ZW5zaW9ucy9weW1kb3duL19lbW9qaS5zY3NzIiwiL1VzZXJzL3NxdWlkZnVuay9EZXNrdG9wL0dlbmVyYWwvU291cmNlcy9ta2RvY3MtbWF0ZXJpYWwtdHlwZXNjcmlwdC9zcmMvYXNzZXRzL3N0eWxlc2hlZXRzL2V4dGVuc2lvbnMvcHltZG93bi9faGlnaGxpZ2h0LnNjc3MiLCIvVXNlcnMvc3F1aWRmdW5rL0Rlc2t0b3AvR2VuZXJhbC9Tb3VyY2VzL21rZG9jcy1tYXRlcmlhbC10eXBlc2NyaXB0L3NyYy9hc3NldHMvc3R5bGVzaGVldHMvZXh0ZW5zaW9ucy9weW1kb3duL19pbmxpbmVoaWxpdGUuc2NzcyIsIi9Vc2Vycy9zcXVpZGZ1bmsvRGVza3RvcC9HZW5lcmFsL1NvdXJjZXMvbWtkb2NzLW1hdGVyaWFsLXR5cGVzY3JpcHQvc3JjL2Fzc2V0cy9zdHlsZXNoZWV0cy9leHRlbnNpb25zL3B5bWRvd24vX3RhYmJlZC5zY3NzIiwiL1VzZXJzL3NxdWlkZnVuay9EZXNrdG9wL0dlbmVyYWwvU291cmNlcy9ta2RvY3MtbWF0ZXJpYWwtdHlwZXNjcmlwdC9zcmMvYXNzZXRzL3N0eWxlc2hlZXRzL2V4dGVuc2lvbnMvcHltZG93bi9fdGFza2xpc3Quc2NzcyIsIi9Vc2Vycy9zcXVpZGZ1bmsvRGVza3RvcC9HZW5lcmFsL1NvdXJjZXMvbWtkb2NzLW1hdGVyaWFsLXR5cGVzY3JpcHQvc3JjL2Fzc2V0cy9zdHlsZXNoZWV0cy91dGlsaXRpZXMvX2JyZWFrLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQUE7QUM2QkE7RUFDRSxzQkFBQTtBQzNCRjs7QUQrQkE7OztFQUdFLG1CQUFBO0FDNUJGOztBRGdDQTtFQUNFLDhCQUFBO0tBQUEsMkJBQUE7TUFBQSwwQkFBQTtVQUFBLHNCQUFBO0FDMUJGOztBRDhCQTtFQUNFLFNBQUE7QUMzQkY7O0FEK0JBO0VBQ0UsaUJBQUE7RUFDQSx1QkFBQTtBQzVCRjs7QURnQ0E7RUFDRSxxQ0FBQTtBQzdCRjs7QURpQ0E7Ozs7RUFJRSx3Q0FBQTtBQzlCRjs7QURrQ0E7RUFDRSxjQUFBO0VBQ0EscUJBQUE7QUMvQkY7O0FEbUNBO0VBQ0UsY0FBQTtBQ2hDRjs7QURvQ0E7O0VBRUUsa0JBQUE7RUFDQSxjQUFBO0VBQ0EsY0FBQTtFQUNBLHdCQUFBO0FDakNGOztBRHFDQTtFQUNFLGVBQUE7QUNsQ0Y7O0FEc0NBO0VBQ0UsV0FBQTtBQ25DRjs7QUR1Q0E7RUFDRSxrQkFBQTtBQ3BDRjs7QUR3Q0E7RUFDRSx5QkFBQTtFQUNBLGlCQUFBO0FDckNGOztBRHlDQTs7RUFFRSxtQkFBQTtFQUNBLG1CQUFBO0FDdENGOztBRDBDQTtFQUNFLFNBQUE7RUFDQSxVQUFBO0VBQ0EsU0FBQTtFQUNBLHVCQUFBO0VBQ0Esa0JBQUE7QUN2Q0Y7O0FEMkNBO0VBQ0UsU0FBQTtFQUNBLFVBQUE7QUN4Q0Y7O0FDL0RBO0VBR0UsNENBQUE7RUFDQSxtREFBQTtFQUNBLHFEQUFBO0VBQ0Esc0RBQUE7RUFDQSwyQ0FBQTtFQUNBLG9EQUFBO0VBQ0Esc0RBQUE7RUFDQSx3REFBQTtFQUdBLGdEQUFBO0VBQ0EsdURB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LGNBQUE7QW5CcytDUjtBbUJuK0NFO0VBQU0sY0FBQTtBbkJzK0NSO0FtQnIrQ0U7RUFBTSxjQUFBO0FuQncrQ1I7QW1CditDRTtFQUFNLGNBQUE7QW5CMCtDUjtBbUJ6K0NFO0VBQU0sY0FBQTtBbkI0K0NSO0FtQjMrQ0U7RUFBTSxjQUFBO0FuQjgrQ1I7QW1CNytDRTtFQUFNLGNBQUE7QW5CZy9DUjtBbUIvK0NFO0VBQU0sY0FBQTtBbkJrL0NSO0FtQmovQ0U7RUFBTSxjQUFBO0FuQm8vQ1I7QW1Cbi9DRTtFQUFNLGNBQUE7QW5Ccy9DUjtBbUJyL0NFO0VBQU0sY0FBQTtBbkJ3L0NSO0FtQnYvQ0U7RUFBTSxjQUFBO0FuQjAvQ1I7QW1Cei9DRTtFQUFNLGNBQUE7QW5CNC9DUjtBbUIzL0NFO0VBQU0sY0FBQTtBbkI4L0NSO0FtQjcvQ0U7RUFBTSxjQUFBO0FuQmdnRFI7QW1CLy9DRTtFQUFNLGNBQUE7QW5Ca2dEUjtBbUJqZ0RFO0VBQU0sY0FBQTtBbkJvZ0RSO0FtQm5nREU7RUFBTSxjQUFBO0FuQnNnRFI7QW1CbmdERTtFQUFNLGNBQUE7QW5Cc2dEUjtBbUJyZ0RFO0VBQU0sY0FBQTtBbkJ3Z0RSO0FtQnZnREU7RUFBTSxjQUFBO0FuQjBnRFI7QW1CemdERTtFQUFNLGNBQUE7QW5CNGdEUjtBbUIzZ0RFO0VBQU0sY0FBQTtBbkI4Z0RSO0FtQjdnREU7RUFBTSxjQUFBO0FuQmdoRFI7QW1CN2dERTtFQUFNLGNBQUE7QW5CZ2hEUjtBbUIvZ0RFO0VBQU0sY0FBQTtBbkJraERSO0FtQmpoREU7RUFBTSxjQUFBO0FuQm9oRFI7QW1CbmhERTtFQUFNLGNBQUE7QW5Cc2hEUjtBbUJyaERFO0VBQU0sY0FBQTtBbkJ3aERSO0FtQnZoREU7RUFBTSxjQUFBO0FuQjBoRFI7QW1CemhERTtFQUFNLGNBQUE7QW5CNGhEUjtBbUIzaERFO0VBQU0sY0FBQTtBbkI4aERSO0FtQjdoREU7RUFBTSxjQUFBO0FuQmdpRFI7QW1CL2hERTtFQUFNLGNBQUE7QW5Ca2lEUjtBbUJqaURFO0VBQU0sY0FBQTtBbkJvaURSO0Ft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QmpGRjtJQVNJLG9CQUFBO0Vkb3VGTjtBQUNGO0E4QjdwRk07RWhCakZGO0lBY0ksb0JBQUE7RWRvdUZOO0FBQ0Y7QThCbHFGTTtFaEJnQ0Y7SUFJSSxjQUFBO0Vka29GTjtFY3Q1RUE7SUFpQkksY0FBQTtFZHc0RUo7RWNsdUVBO0lBb0JJLGtCQUFBO0lBQ0EscUJBQUE7RWRpdEVKO0FBQ0Y7QWNuNUVJO0VBWEY7SUFZSSx3QkFBQTtFZHM1RUo7QUFDRiIsImZpbGUiOiJtYWluLnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyJAY2hhcnNldCBcIlVURi04XCI7XG5odG1sIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuKixcbio6OmJlZm9yZSxcbio6OmFmdGVyIHtcbiAgYm94LXNpemluZzogaW5oZXJpdDtcbn1cblxuaHRtbCB7XG4gIHRleHQtc2l6ZS1hZGp1c3Q6IG5vbmU7XG59XG5cbmJvZHkge1xuICBtYXJnaW46IDA7XG59XG5cbmhyIHtcbiAgb3ZlcmZsb3c6IHZpc2libGU7XG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xufVxuXG5hIHtcbiAgLXdlYmtpdC10ZXh0LWRlY29yYXRpb24tc2tpcDogb2JqZWN0cztcbn1cblxuYSxcbmJ1dHRvbixcbmxhYmVsLFxuaW5wdXQge1xuICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG5hIHtcbiAgY29sb3I6IGluaGVyaXQ7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuc21hbGwge1xuICBmb250LXNpemU6IDgwJTtcbn1cblxuc3ViLFxuc3VwIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmb250LXNpemU6IDgwJTtcbiAgbGluZS1oZWlnaHQ6IDA7XG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbn1cblxuc3ViIHtcbiAgYm90dG9tOiAtMC4yNWVtO1xufVxuXG5zdXAge1xuICB0b3A6IC0wLjVlbTtcbn1cblxuaW1nIHtcbiAgYm9yZGVyLXN0eWxlOiBub25lO1xufVxuXG50YWJsZSB7XG4gIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7XG4gIGJvcmRlci1zcGFjaW5nOiAwO1xufVxuXG50ZCxcbnRoIHtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcbn1cblxuYnV0dG9uIHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBib3JkZXI6IDA7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBmb250LXNpemU6IGluaGVyaXQ7XG59XG5cbmlucHV0IHtcbiAgYm9yZGVyOiAwO1xuICBvdXRsaW5lOiAwO1xufVxuXG46cm9vdCB7XG4gIC0tbWQtZGVmYXVsdC1mZy1jb2xvcjogaHNsYSgwLCAwJSwgMCUsIDAuODcpO1xuICAtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0OiBoc2xhKDAsIDAlLCAwJSwgMC41NCk7XG4gIC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcjogaHNsYSgwLCAwJSwgMCUsIDAuMjYpO1xuICAtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0OiBoc2xhKDAsIDAlLCAwJSwgMC4wNyk7XG4gIC0tbWQtZGVmYXVsdC1iZy1jb2xvcjogaHNsYSgwLCAwJSwgMTAwJSwgMSk7XG4gIC0tbWQtZGVmYXVsdC1iZy1jb2xvci0tbGlnaHQ6IGhzbGEoMCwgMCUsIDEwMCUsIDAuNyk7XG4gIC0tbWQtZGVmYXVsdC1iZy1jb2xvci0tbGlnaHRlcjogaHNsYSgwLCAwJSwgMTAwJSwgMC4zKTtcbiAgLS1tZC1kZWZhdWx0LWJnLWNvbG9yLS1saWdodGVzdDogaHNsYSgwLCAwJSwgMTAwJSwgMC4xMik7XG4gIC0tbWQtcHJpbWFyeS1mZy1jb2xvcjogaHNsYSgyMzFkZWcsIDQ4JSwgNDglLCAxKTtcbiAgLS1tZC1wcmltYXJ5LWZnLWNvbG9yLS1saWdodDogaHNsYSgyMzBkZWcsIDQ0JSwgNjQlLCAxKTtcbiAgLS1tZC1wcmltYXJ5LWZnLWNvbG9yLS1kYXJrOiBoc2xhKDIzMmRlZywgNTQlLCA0MSUsIDEpO1xuICAtLW1kLXByaW1hcnktYmctY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3IpO1xuICAtLW1kLXByaW1hcnktYmctY29sb3ItLWxpZ2h0OiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yLS1saWdodCk7XG4gIC0tbWQtYWNjZW50LWZnLWNvbG9yOiBoc2xhKDIzMWRlZywgOTklLCA2NiUsIDEpO1xuICAtLW1kLWFjY2VudC1mZy1jb2xvci0tdHJhbnNwYXJlbnQ6IGhzbGEoMjMxZGVnLCA5OSUsIDY2JSwgMC4xKTtcbiAgLS1tZC1hY2NlbnQtYmctY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3IpO1xuICAtLW1kLWFjY2VudC1iZy1jb2xvci0tbGlnaHQ6IHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3ItLWxpZ2h0KTtcbiAgLS1tZC1jb2RlLWJnLWNvbG9yOiBoc2xhKDAsIDAlLCA5Mi41JSwgMC41KTtcbiAgLS1tZC1jb2RlLWZnLWNvbG9yOiBoc2xhKDIwMCwgMTglLCAyNiUsIDEpO1xufVxuXG4ubWQtaWNvbiBzdmcge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEuMnJlbTtcbiAgaGVpZ2h0OiAxLjJyZW07XG4gIG1hcmdpbjogMCBhdXRvO1xuICBmaWxsOiBjdXJyZW50Q29sb3I7XG59XG5cbmJvZHkge1xuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbn1cblxuYm9keSxcbmlucHV0IHtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3IpO1xuICBmb250LWZlYXR1cmUtc2V0dGluZ3M6IFwia2VyblwiLCBcImxpZ2FcIjtcbiAgZm9udC1mYW1pbHk6IFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbn1cblxuY29kZSxcbnByZSxcbmtiZCB7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yKTtcbiAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiBcImtlcm5cIjtcbiAgZm9udC1mYW1pbHk6IFwiQ291cmllciBOZXdcIiwgQ291cmllciwgbW9ub3NwYWNlO1xufVxuXG4ubWQtdHlwZXNldCB7XG4gIGZvbnQtc2l6ZTogMC44cmVtO1xuICBsaW5lLWhlaWdodDogMS42O1xuICAtd2Via2l0LXByaW50LWNvbG9yLWFkanVzdDogZXhhY3Q7XG59XG4ubWQtdHlwZXNldCBwLFxuLm1kLXR5cGVzZXQgdWwsXG4ubWQtdHlwZXNldCBvbCxcbi5tZC10eXBlc2V0IGJsb2NrcXVvdGUge1xuICBtYXJnaW46IDFlbSAwO1xufVxuLm1kLXR5cGVzZXQgaDEge1xuICBtYXJnaW46IDAgMCAycmVtO1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuICBmb250LXNpemU6IDEuNTYyNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjM7XG59XG4ubWQtdHlwZXNldCBoMiB7XG4gIG1hcmdpbjogMnJlbSAwIDAuOHJlbTtcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xuICBmb250LXdlaWdodDogMzAwO1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cbi5tZC10eXBlc2V0IGgzIHtcbiAgbWFyZ2luOiAxLjZyZW0gMCAwLjhyZW07XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG59XG4ubWQtdHlwZXNldCBoMiArIGgzIHtcbiAgbWFyZ2luLXRvcDogMC44cmVtO1xufVxuLm1kLXR5cGVzZXQgaDQge1xuICBtYXJnaW46IDAuOHJlbSAwO1xuICBmb250LXNpemU6IDAuOHJlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG59XG4ubWQtdHlwZXNldCBoNSxcbi5tZC10eXBlc2V0IGg2IHtcbiAgbWFyZ2luOiAwLjhyZW0gMDtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgZm9udC1zaXplOiAwLjY0cmVtO1xuICBmb250LXdlaWdodDogNzAwO1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcbn1cbi5tZC10eXBlc2V0IGg1IHtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbn1cbi5tZC10eXBlc2V0IGhyIHtcbiAgbWFyZ2luOiAxLjVlbSAwO1xuICBib3JkZXItYm90dG9tOiAwLjA1cmVtIGRvdHRlZCB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVyKTtcbn1cbi5tZC10eXBlc2V0IGEge1xuICBjb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1mZy1jb2xvcik7XG4gIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG59XG4ubWQtdHlwZXNldCBhLCAubWQtdHlwZXNldCBhOjpiZWZvcmUge1xuICB0cmFuc2l0aW9uOiBjb2xvciAxMjVtcztcbn1cbi5tZC10eXBlc2V0IGE6Zm9jdXMsIC5tZC10eXBlc2V0IGE6aG92ZXIge1xuICBjb2xvcjogdmFyKC0tbWQtYWNjZW50LWZnLWNvbG9yKTtcbn1cbkBtZWRpYSBwcmludCB7XG4gIC5tZC10eXBlc2V0IGE6OmFmdGVyIHtcbiAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuICAgIGNvbnRlbnQ6IFwiIFtcIiBhdHRyKGhyZWYpIFwiXVwiO1xuICB9XG59XG4ubWQtdHlwZXNldCBjb2RlLFxuLm1kLXR5cGVzZXQgcHJlLFxuLm1kLXR5cGVzZXQga2JkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtY29kZS1iZy1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1tZC1jb2RlLWZnLWNvbG9yKTtcbiAgZm9udC1zaXplOiA4NSU7XG4gIGRpcmVjdGlvbjogbHRyO1xufVxuQG1lZGlhIHByaW50IHtcbiAgLm1kLXR5cGVzZXQgY29kZSxcbi5tZC10eXBlc2V0IHByZSxcbi5tZC10eXBlc2V0IGtiZCB7XG4gICAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICB9XG59XG4ubWQtdHlwZXNldCBjb2RlIHtcbiAgbWFyZ2luOiAwIDAuMjk0MTE3NjQ3MWVtO1xuICBwYWRkaW5nOiAwLjA3MzUyOTQxMThlbSAwO1xuICBib3JkZXItcmFkaXVzOiAwLjFyZW07XG4gIGJveC1zaGFkb3c6IDAuMjk0MTE3NjQ3MWVtIDAgMCB2YXIoLS1tZC1jb2RlLWJnLWNvbG9yKSwgLTAuMjk0MTE3NjQ3MWVtIDAgMCB2YXIoLS1tZC1jb2RlLWJnLWNvbG9yKTtcbiAgd29yZC1icmVhazogYnJlYWstd29yZDtcbiAgYm94LWRlY29yYXRpb24tYnJlYWs6IGNsb25lO1xufVxuLm1kLXR5cGVzZXQgaDEgY29kZSxcbi5tZC10eXBlc2V0IGgyIGNvZGUsXG4ubWQtdHlwZXNldCBoMyBjb2RlLFxuLm1kLXR5cGVzZXQgaDQgY29kZSxcbi5tZC10eXBlc2V0IGg1IGNvZGUsXG4ubWQtdHlwZXNldCBoNiBjb2RlIHtcbiAgbWFyZ2luOiAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm94LXNoYWRvdzogbm9uZTtcbn1cbi5tZC10eXBlc2V0IGEgPiBjb2RlIHtcbiAgbWFyZ2luOiBpbmhlcml0O1xuICBwYWRkaW5nOiBpbmhlcml0O1xuICBib3JkZXItcmFkaXVzOiBpbml0aWFsO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xuICBjb2xvcjogaW5oZXJpdDtcbiAgYm94LXNoYWRvdzogbm9uZTtcbn1cbi5tZC10eXBlc2V0IHByZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luOiAxZW0gMDtcbiAgYm9yZGVyLXJhZGl1czogMC4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xuICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcbn1cbi5tZC10eXBlc2V0IHByZSA+IGNvZGUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwLjUyNXJlbSAwLjZyZW07XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBmb250LXNpemU6IGluaGVyaXQ7XG4gIGJveC1zaGFkb3c6IG5vbmU7XG4gIGJveC1kZWNvcmF0aW9uLWJyZWFrOiBzbGljZTtcbiAgb3ZlcmZsb3c6IGF1dG87XG4gIHdvcmQtYnJlYWs6IG5vcm1hbDtcbn1cbi5tZC10eXBlc2V0IHByZSA+IGNvZGU6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgd2lkdGg6IDAuMnJlbTtcbiAgaGVpZ2h0OiAwLjJyZW07XG59XG4ubWQtdHlwZXNldCBwcmUgPiBjb2RlOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpO1xufVxuLm1kLXR5cGVzZXQgcHJlID4gY29kZTo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1hY2NlbnQtZmctY29sb3IpO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDQuOTM3NWVtKSB7XG4gIC5tZC10eXBlc2V0ID4gcHJlIHtcbiAgICBtYXJnaW46IDFlbSAtMC44cmVtO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gIH1cbiAgLm1kLXR5cGVzZXQgPiBwcmUgPiBjb2RlIHtcbiAgICBwYWRkaW5nOiAwLjUyNXJlbSAwLjhyZW07XG4gIH1cbn1cbi5tZC10eXBlc2V0IGtiZCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZzogMCAwLjU4ODIzNTI5NDFlbTtcbiAgYm9yZGVyLXJhZGl1czogMC4xcmVtO1xuICBmb250LXNpemU6IDAuNzVlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgYm94LXNoYWRvdzogMCAwLjFyZW0gMCAwLjA1cmVtIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpLCAwIDAuMXJlbSAwIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpLCBpbnNldCAwIC0wLjFyZW0gMC4ycmVtIHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3IpO1xuICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuICB2ZXJ0aWNhbC1hbGlnbjogdGV4dC10b3A7XG59XG4ubWQtdHlwZXNldCBtYXJrIHtcbiAgbWFyZ2luOiAwIDAuMjVlbTtcbiAgcGFkZGluZzogMC4wNjI1ZW0gMDtcbiAgYm9yZGVyLXJhZGl1czogMC4xcmVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjM1LCA1OSwgMC41KTtcbiAgYm94LXNoYWRvdzogMC4yNWVtIDAgMCByZ2JhKDI1NSwgMjM1LCA1OSwgMC41KSwgLTAuMjVlbSAwIDAgcmdiYSgyNTUsIDIzNSwgNTksIDAuNSk7XG4gIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG4gIGJveC1kZWNvcmF0aW9uLWJyZWFrOiBjbG9uZTtcbn1cbi5tZC10eXBlc2V0IGFiYnIge1xuICBib3JkZXItYm90dG9tOiAwLjA1cmVtIGRvdHRlZCB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgY3Vyc29yOiBoZWxwO1xufVxuLm1kLXR5cGVzZXQgc21hbGwge1xuICBvcGFjaXR5OiAwLjc1O1xufVxuLm1kLXR5cGVzZXQgc3VwLFxuLm1kLXR5cGVzZXQgc3ViIHtcbiAgbWFyZ2luLWxlZnQ6IDAuMDc4MTI1ZW07XG59XG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgc3VwLFxuW2Rpcj1ydGxdIC5tZC10eXBlc2V0IHN1YiB7XG4gIG1hcmdpbi1yaWdodDogMC4wNzgxMjVlbTtcbiAgbWFyZ2luLWxlZnQ6IGluaXRpYWw7XG59XG4ubWQtdHlwZXNldCBibG9ja3F1b3RlIHtcbiAgcGFkZGluZy1sZWZ0OiAwLjZyZW07XG4gIGJvcmRlci1sZWZ0OiAwLjJyZW0gc29saWQgdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG59XG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgYmxvY2txdW90ZSB7XG4gIHBhZGRpbmctcmlnaHQ6IDAuNnJlbTtcbiAgcGFkZGluZy1sZWZ0OiBpbml0aWFsO1xuICBib3JkZXItcmlnaHQ6IDAuMnJlbSBzb2xpZCB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVyKTtcbiAgYm9yZGVyLWxlZnQ6IGluaXRpYWw7XG59XG4ubWQtdHlwZXNldCB1bCB7XG4gIGxpc3Qtc3R5bGUtdHlwZTogZGlzYztcbn1cbi5tZC10eXBlc2V0IHVsLFxuLm1kLXR5cGVzZXQgb2wge1xuICBtYXJnaW4tbGVmdDogMC42MjVlbTtcbiAgcGFkZGluZzogMDtcbn1cbltkaXI9cnRsXSAubWQtdHlwZXNldCB1bCxcbltkaXI9cnRsXSAubWQtdHlwZXNldCBvbCB7XG4gIG1hcmdpbi1yaWdodDogMC42MjVlbTtcbiAgbWFyZ2luLWxlZnQ6IGluaXRpYWw7XG59XG4ubWQtdHlwZXNldCB1bCBvbCxcbi5tZC10eXBlc2V0IG9sIG9sIHtcbiAgbGlzdC1zdHlsZS10eXBlOiBsb3dlci1hbHBoYTtcbn1cbi5tZC10eXBlc2V0IHVsIG9sIG9sLFxuLm1kLXR5cGVzZXQgb2wgb2wgb2wge1xuICBsaXN0LXN0eWxlLXR5cGU6IGxvd2VyLXJvbWFuO1xufVxuLm1kLXR5cGVzZXQgdWwgbGksXG4ubWQtdHlwZXNldCBvbCBsaSB7XG4gIG1hcmdpbi1ib3R0b206IDAuNWVtO1xuICBtYXJnaW4tbGVmdDogMS4yNWVtO1xufVxuW2Rpcj1ydGxdIC5tZC10eXBlc2V0IHVsIGxpLFxuW2Rpcj1ydGxdIC5tZC10eXBlc2V0IG9sIGxpIHtcbiAgbWFyZ2luLXJpZ2h0OiAxLjI1ZW07XG4gIG1hcmdpbi1sZWZ0OiBpbml0aWFsO1xufVxuLm1kLXR5cGVzZXQgdWwgbGkgcCxcbi5tZC10eXBlc2V0IHVsIGxpIGJsb2NrcXVvdGUsXG4ubWQtdHlwZXNldCBvbCBsaSBwLFxuLm1kLXR5cGVzZXQgb2wgbGkgYmxvY2txdW90ZSB7XG4gIG1hcmdpbjogMC41ZW0gMDtcbn1cbi5tZC10eXBlc2V0IHVsIGxpOmxhc3QtY2hpbGQsXG4ubWQtdHlwZXNldCBvbCBsaTpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cbi5tZC10eXBlc2V0IHVsIGxpIHVsLFxuLm1kLXR5cGVzZXQgdWwgbGkgb2wsXG4ubWQtdHlwZXNldCBvbCBsaSB1bCxcbi5tZC10eXBlc2V0IG9sIGxpIG9sIHtcbiAgbWFyZ2luOiAwLjVlbSAwIDAuNWVtIDAuNjI1ZW07XG59XG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgdWwgbGkgdWwsXG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgdWwgbGkgb2wsXG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgb2wgbGkgdWwsXG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgb2wgbGkgb2wge1xuICBtYXJnaW4tcmlnaHQ6IDAuNjI1ZW07XG4gIG1hcmdpbi1sZWZ0OiBpbml0aWFsO1xufVxuLm1kLXR5cGVzZXQgZGQge1xuICBtYXJnaW46IDFlbSAwIDFlbSAxLjg3NWVtO1xufVxuW2Rpcj1ydGxdIC5tZC10eXBlc2V0IGRkIHtcbiAgbWFyZ2luLXJpZ2h0OiAxLjg3NWVtO1xuICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbn1cbi5tZC10eXBlc2V0IGlmcmFtZSxcbi5tZC10eXBlc2V0IGltZyxcbi5tZC10eXBlc2V0IHN2ZyB7XG4gIG1heC13aWR0aDogMTAwJTtcbn1cbi5tZC10eXBlc2V0IHRhYmxlOm5vdChbY2xhc3NdKSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBib3JkZXItcmFkaXVzOiAwLjFyZW07XG4gIGJhY2tncm91bmQ6IHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3IpO1xuICBmb250LXNpemU6IDAuNjRyZW07XG4gIGJveC1zaGFkb3c6IDAgMC4ycmVtIDAuNXJlbSByZ2JhKDAsIDAsIDAsIDAuMDUpLCAwIDAgMC4wNXJlbSByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gIG92ZXJmbG93OiBhdXRvO1xuICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG59XG4ubWQtdHlwZXNldCB0YWJsZTpub3QoW2NsYXNzXSkgKyAqIHtcbiAgbWFyZ2luLXRvcDogMS41ZW07XG59XG4ubWQtdHlwZXNldCB0YWJsZTpub3QoW2NsYXNzXSkgdGg6bm90KFthbGlnbl0pLFxuLm1kLXR5cGVzZXQgdGFibGU6bm90KFtjbGFzc10pIHRkOm5vdChbYWxpZ25dKSB7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgdGFibGU6bm90KFtjbGFzc10pIHRoOm5vdChbYWxpZ25dKSxcbltkaXI9cnRsXSAubWQtdHlwZXNldCB0YWJsZTpub3QoW2NsYXNzXSkgdGQ6bm90KFthbGlnbl0pIHtcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG59XG4ubWQtdHlwZXNldCB0YWJsZTpub3QoW2NsYXNzXSkgdGgge1xuICBtaW4td2lkdGg6IDVyZW07XG4gIHBhZGRpbmc6IDAuNnJlbSAwLjhyZW07XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3IpO1xuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xufVxuLm1kLXR5cGVzZXQgdGFibGU6bm90KFtjbGFzc10pIHRkIHtcbiAgcGFkZGluZzogMC42cmVtIDAuOHJlbTtcbiAgYm9yZGVyLXRvcDogMC4wNXJlbSBzb2xpZCB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVzdCk7XG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG59XG4ubWQtdHlwZXNldCB0YWJsZTpub3QoW2NsYXNzXSkgdHIge1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDEyNW1zO1xufVxuLm1kLXR5cGVzZXQgdGFibGU6bm90KFtjbGFzc10pIHRyOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjAzNSk7XG4gIGJveC1zaGFkb3c6IDAgMC4wNXJlbSAwIHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3IpIGluc2V0O1xufVxuLm1kLXR5cGVzZXQgdGFibGU6bm90KFtjbGFzc10pIHRyOmZpcnN0LWNoaWxkIHRkIHtcbiAgYm9yZGVyLXRvcDogMDtcbn1cbi5tZC10eXBlc2V0IHRhYmxlOm5vdChbY2xhc3NdKSBhIHtcbiAgd29yZC1icmVhazogbm9ybWFsO1xufVxuLm1kLXR5cGVzZXRfX3Njcm9sbHdyYXAge1xuICBtYXJnaW46IDFlbSAtMC44cmVtO1xuICBvdmVyZmxvdy14OiBhdXRvO1xuICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG59XG4ubWQtdHlwZXNldCAubWQtdHlwZXNldF9fdGFibGUge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1hcmdpbi1ib3R0b206IDAuNWVtO1xuICBwYWRkaW5nOiAwIDAuOHJlbTtcbn1cbi5tZC10eXBlc2V0IC5tZC10eXBlc2V0X190YWJsZSB0YWJsZSB7XG4gIGRpc3BsYXk6IHRhYmxlO1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luOiAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG5odG1sIHtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcbiAgZm9udC1zaXplOiAxMjUlO1xuICBvdmVyZmxvdy14OiBoaWRkZW47XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDBlbSkge1xuICBodG1sIHtcbiAgICBmb250LXNpemU6IDEzNy41JTtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTI1ZW0pIHtcbiAgaHRtbCB7XG4gICAgZm9udC1zaXplOiAxNTAlO1xuICB9XG59XG5cbmJvZHkge1xuICBkaXNwbGF5OiBmbGV4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHdpZHRoOiAxMDAlO1xuICBtaW4taGVpZ2h0OiAxMDAlO1xuICBmb250LXNpemU6IDAuNXJlbTtcbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDU5LjkzNzVlbSkge1xuICBib2R5W2RhdGEtbWQtc3RhdGU9bG9ja10ge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgfVxufVxuXG5ociB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBoZWlnaHQ6IDAuMDVyZW07XG4gIHBhZGRpbmc6IDA7XG4gIGJvcmRlcjogMDtcbn1cblxuLm1kLWdyaWQge1xuICBtYXgtd2lkdGg6IDYxcmVtO1xuICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xufVxuXG4ubWQtY29udGFpbmVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZmxleC1ncm93OiAxO1xufVxuXG4ubWQtbWFpbiB7XG4gIGZsZXgtZ3JvdzogMTtcbn1cbi5tZC1tYWluX19pbm5lciB7XG4gIGhlaWdodDogMTAwJTtcbiAgcGFkZGluZy10b3A6IDEuNXJlbTtcbiAgcGFkZGluZy1ib3R0b206IDAuMDVyZW07XG59XG5cbi5tZC1lbGxpcHNpcyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLm1kLXRvZ2dsZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5tZC1vdmVybGF5IHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIHdpZHRoOiAwO1xuICBoZWlnaHQ6IDA7XG4gIHRyYW5zaXRpb246IHdpZHRoIDBtcyAyNTBtcywgaGVpZ2h0IDBtcyAyNTBtcywgb3BhY2l0eSAyNTBtcztcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuICBvcGFjaXR5OiAwO1xuICB6LWluZGV4OiAzO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzYuMTg3NWVtKSB7XG4gIFtkYXRhLW1kLXRvZ2dsZT1kcmF3ZXJdOmNoZWNrZWQgfiAubWQtb3ZlcmxheSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHRyYW5zaXRpb246IHdpZHRoIDBtcywgaGVpZ2h0IDBtcywgb3BhY2l0eSAyNTBtcztcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG5cbi5tZC1za2lwIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBtYXJnaW46IDAuNXJlbTtcbiAgcGFkZGluZzogMC4zcmVtIDAuNXJlbTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDAuNHJlbSk7XG4gIGJvcmRlci1yYWRpdXM6IDAuMXJlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcbiAgZm9udC1zaXplOiAwLjY0cmVtO1xuICBvcGFjaXR5OiAwO1xufVxuLm1kLXNraXA6Zm9jdXMge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAyNTBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpLCBvcGFjaXR5IDE3NW1zIDc1bXM7XG4gIG9wYWNpdHk6IDE7XG4gIHotaW5kZXg6IDEwO1xufVxuXG5AcGFnZSB7XG4gIG1hcmdpbjogMjVtbTtcbn1cbi5tZC1hbm5vdW5jZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3IpO1xufVxuLm1kLWFubm91bmNlX19pbm5lciB7XG4gIG1pbi1oZWlnaHQ6IDIuNHJlbTtcbiAgcGFkZGluZzogMCAwLjhyZW07XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcbiAgZm9udC1zaXplOiAwLjdyZW07XG4gIGxpbmUtaGVpZ2h0OiAyLjRyZW07XG59XG5cbi5tZC1jbGlwYm9hcmQge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMC40cmVtO1xuICByaWdodDogMC40cmVtO1xuICB3aWR0aDogMS4ycmVtO1xuICBoZWlnaHQ6IDEuMnJlbTtcbiAgdHJhbnNpdGlvbjogY29sb3IgMjUwbXM7XG4gIGJvcmRlci1yYWRpdXM6IDAuMXJlbTtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0KTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB6LWluZGV4OiAxO1xuICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG59XG5AbWVkaWEgcHJpbnQge1xuICAubWQtY2xpcGJvYXJkIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG4ubWQtY2xpcGJvYXJkIHN2ZyB7XG4gIHdpZHRoOiAwLjlyZW07XG4gIGhlaWdodDogMC45cmVtO1xufVxucHJlOmhvdmVyIC5tZC1jbGlwYm9hcmQge1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xufVxucHJlIC5tZC1jbGlwYm9hcmQ6Zm9jdXMsIHByZSAubWQtY2xpcGJvYXJkOmhvdmVyIHtcbiAgY29sb3I6IHZhcigtLW1kLWFjY2VudC1mZy1jb2xvcik7XG59XG5cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDYwZW0pIHtcbiAgLm1kLWNvbnRlbnQge1xuICAgIG1hcmdpbi1yaWdodDogMTIuMXJlbTtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLWNvbnRlbnQge1xuICAgIG1hcmdpbi1yaWdodDogaW5pdGlhbDtcbiAgICBtYXJnaW4tbGVmdDogMTIuMXJlbTtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzYuMjVlbSkge1xuICAubWQtY29udGVudCB7XG4gICAgbWFyZ2luLWxlZnQ6IDEyLjFyZW07XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1jb250ZW50IHtcbiAgICBtYXJnaW4tcmlnaHQ6IDEyLjFyZW07XG4gIH1cbn1cbi5tZC1jb250ZW50X19pbm5lciB7XG4gIG1hcmdpbjogMCAwLjhyZW0gMS4ycmVtO1xuICBwYWRkaW5nLXRvcDogMC42cmVtO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzYuMjVlbSkge1xuICAubWQtY29udGVudF9faW5uZXIge1xuICAgIG1hcmdpbi1yaWdodDogMS4ycmVtO1xuICAgIG1hcmdpbi1sZWZ0OiAxLjJyZW07XG4gIH1cbn1cbi5tZC1jb250ZW50X19pbm5lcjo6YmVmb3JlIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGhlaWdodDogMC40cmVtO1xuICBjb250ZW50OiBcIlwiO1xufVxuLm1kLWNvbnRlbnRfX2lubmVyID4gOmxhc3QtY2hpbGQge1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuLm1kLWNvbnRlbnRfX2J1dHRvbiB7XG4gIG1hcmdpbjogMC40cmVtIDA7XG4gIG1hcmdpbi1sZWZ0OiAwLjRyZW07XG4gIHBhZGRpbmc6IDA7XG4gIGZsb2F0OiByaWdodDtcbn1cbltkaXI9cnRsXSAubWQtY29udGVudF9fYnV0dG9uIHtcbiAgbWFyZ2luLXJpZ2h0OiAwLjRyZW07XG4gIG1hcmdpbi1sZWZ0OiBpbml0aWFsO1xuICBmbG9hdDogbGVmdDtcbn1cbltkaXI9cnRsXSAubWQtY29udGVudF9fYnV0dG9uIHN2ZyB7XG4gIHRyYW5zZm9ybTogc2NhbGVYKC0xKTtcbn1cbi5tZC10eXBlc2V0IC5tZC1jb250ZW50X19idXR0b24ge1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG59XG4ubWQtY29udGVudF9fYnV0dG9uIHN2ZyB7XG4gIGRpc3BsYXk6IGlubGluZTtcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcbn1cbkBtZWRpYSBwcmludCB7XG4gIC5tZC1jb250ZW50X19idXR0b24ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cblxuLm1kLWRpYWxvZyB7XG4gIGJveC1zaGFkb3c6IDAgMnB4IDJweCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksIDAgMXB4IDVweCAwIHJnYmEoMCwgMCwgMCwgMC4xMiksIDAgM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgcmlnaHQ6IDAuOHJlbTtcbiAgYm90dG9tOiAwLjhyZW07XG4gIGxlZnQ6IGluaXRpYWw7XG4gIG1pbi13aWR0aDogMTEuMXJlbTtcbiAgcGFkZGluZzogMC40cmVtIDAuNnJlbTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMG1zIDQwMG1zLCBvcGFjaXR5IDQwMG1zO1xuICBib3JkZXI6IG5vbmU7XG4gIGJvcmRlci1yYWRpdXM6IDAuMXJlbTtcbiAgYmFja2dyb3VuZDogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcbiAgZm9udC1zaXplOiAwLjdyZW07XG4gIG9wYWNpdHk6IDA7XG4gIHotaW5kZXg6IDI7XG59XG5bZGlyPXJ0bF0gLm1kLWRpYWxvZyB7XG4gIHJpZ2h0OiBpbml0aWFsO1xuICBsZWZ0OiAwLjhyZW07XG59XG4ubWQtZGlhbG9nW2RhdGEtbWQtc3RhdGU9b3Blbl0ge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4wNzUsIDAuODUsIDAuMTc1LCAxKSwgb3BhY2l0eSA0MDBtcztcbiAgb3BhY2l0eTogMTtcbn1cbkBtZWRpYSBwcmludCB7XG4gIC5tZC1kaWFsb2cge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cblxuLm1kLWhlYWRlciB7XG4gIHBvc2l0aW9uOiBzdGlja3k7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGxlZnQ6IDA7XG4gIGhlaWdodDogMi40cmVtO1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDI1MG1zLCBjb2xvciAyNTBtcztcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1mZy1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1tZC1wcmltYXJ5LWJnLWNvbG9yKTtcbiAgYm94LXNoYWRvdzogMCAwIDAuMnJlbSByZ2JhKDAsIDAsIDAsIDApLCAwIDAuMnJlbSAwLjRyZW0gcmdiYSgwLCAwLCAwLCAwKTtcbiAgei1pbmRleDogMjtcbn1cbi5uby1qcyAubWQtaGVhZGVyIHtcbiAgdHJhbnNpdGlvbjogbm9uZTtcbiAgYm94LXNoYWRvdzogbm9uZTtcbn1cbi5tZC1oZWFkZXJbZGF0YS1tZC1zdGF0ZT1zaGFkb3ddIHtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAyNTBtcywgY29sb3IgMjUwbXMsIGJveC1zaGFkb3cgMjUwbXM7XG4gIGJveC1zaGFkb3c6IDAgMCAwLjJyZW0gcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDAuMnJlbSAwLjRyZW0gcmdiYSgwLCAwLCAwLCAwLjIpO1xufVxuQG1lZGlhIHByaW50IHtcbiAgLm1kLWhlYWRlciB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuXG4ubWQtaGVhZGVyLW5hdiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBhZGRpbmc6IDAgMC4ycmVtO1xufVxuLm1kLWhlYWRlci1uYXZfX2J1dHRvbiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luOiAwLjJyZW07XG4gIHBhZGRpbmc6IDAuNHJlbTtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAyNTBtcztcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB6LWluZGV4OiAxO1xufVxuW2Rpcj1ydGxdIC5tZC1oZWFkZXItbmF2X19idXR0b24gc3ZnIHtcbiAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpO1xufVxuLm1kLWhlYWRlci1uYXZfX2J1dHRvbjpmb2N1cywgLm1kLWhlYWRlci1uYXZfX2J1dHRvbjpob3ZlciB7XG4gIG9wYWNpdHk6IDAuNztcbn1cbi5tZC1oZWFkZXItbmF2X19idXR0b24ubWQtbG9nbyB7XG4gIG1hcmdpbjogMC4ycmVtO1xuICBwYWRkaW5nOiAwLjRyZW07XG59XG4ubWQtaGVhZGVyLW5hdl9fYnV0dG9uLm1kLWxvZ28gaW1nLFxuLm1kLWhlYWRlci1uYXZfX2J1dHRvbi5tZC1sb2dvIHN2ZyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMS4ycmVtO1xuICBoZWlnaHQ6IDEuMnJlbTtcbiAgZmlsbDogY3VycmVudENvbG9yO1xufVxuLm5vLWpzIC5tZC1oZWFkZXItbmF2X19idXR0b25bZm9yPV9fc2VhcmNoXSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2MGVtKSB7XG4gIC5tZC1oZWFkZXItbmF2X19idXR0b25bZm9yPV9fc2VhcmNoXSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzYuMTg3NWVtKSB7XG4gIC5tZC1oZWFkZXItbmF2X19idXR0b24ubWQtbG9nbyB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzYuMjVlbSkge1xuICAubWQtaGVhZGVyLW5hdl9fYnV0dG9uW2Zvcj1fX2RyYXdlcl0ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbi5tZC1oZWFkZXItbmF2X190b3BpYyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nOiAwIDFyZW07XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4xLCAwLjcsIDAuMSwgMSksIG9wYWNpdHkgMTUwbXM7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG59XG4ubWQtaGVhZGVyLW5hdl9fdG9waWMgKyAubWQtaGVhZGVyLW5hdl9fdG9waWMge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMS4yNXJlbSk7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMSwgMC43LCAwLjEsIDAuMSksIG9wYWNpdHkgMTUwbXM7XG4gIG9wYWNpdHk6IDA7XG4gIHotaW5kZXg6IC0xO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cbltkaXI9cnRsXSAubWQtaGVhZGVyLW5hdl9fdG9waWMgKyAubWQtaGVhZGVyLW5hdl9fdG9waWMge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEuMjVyZW0pO1xufVxuLm5vLWpzIC5tZC1oZWFkZXItbmF2X190b3BpYyB7XG4gIHBvc2l0aW9uOiBpbml0aWFsO1xufVxuLm5vLWpzIC5tZC1oZWFkZXItbmF2X190b3BpYyArIC5tZC1oZWFkZXItbmF2X190b3BpYyB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ubWQtaGVhZGVyLW5hdl9fdGl0bGUge1xuICBmbGV4LWdyb3c6IDE7XG4gIGZvbnQtc2l6ZTogMC45cmVtO1xuICBsaW5lLWhlaWdodDogMi40cmVtO1xufVxuLm1kLWhlYWRlci1uYXZfX3RpdGxlW2RhdGEtbWQtc3RhdGU9YWN0aXZlXSAubWQtaGVhZGVyLW5hdl9fdG9waWMge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEuMjVyZW0pO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDEsIDAuNywgMC4xLCAwLjEpLCBvcGFjaXR5IDE1MG1zO1xuICBvcGFjaXR5OiAwO1xuICB6LWluZGV4OiAtMTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5bZGlyPXJ0bF0gLm1kLWhlYWRlci1uYXZfX3RpdGxlW2RhdGEtbWQtc3RhdGU9YWN0aXZlXSAubWQtaGVhZGVyLW5hdl9fdG9waWMge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMS4yNXJlbSk7XG59XG4ubWQtaGVhZGVyLW5hdl9fdGl0bGVbZGF0YS1tZC1zdGF0ZT1hY3RpdmVdIC5tZC1oZWFkZXItbmF2X190b3BpYyArIC5tZC1oZWFkZXItbmF2X190b3BpYyB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjEsIDAuNywgMC4xLCAxKSwgb3BhY2l0eSAxNTBtcztcbiAgb3BhY2l0eTogMTtcbiAgei1pbmRleDogMDtcbiAgcG9pbnRlci1ldmVudHM6IGluaXRpYWw7XG59XG4ubWQtaGVhZGVyLW5hdl9fdGl0bGUgPiAubWQtaGVhZGVyLW5hdl9fZWxsaXBzaXMge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG59XG4ubWQtaGVhZGVyLW5hdl9fc291cmNlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDYwZW0pIHtcbiAgLm1kLWhlYWRlci1uYXZfX3NvdXJjZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IDExLjdyZW07XG4gICAgbWF4LXdpZHRoOiAxMS43cmVtO1xuICAgIG1hcmdpbi1sZWZ0OiAxcmVtO1xuICB9XG4gIFtkaXI9cnRsXSAubWQtaGVhZGVyLW5hdl9fc291cmNlIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDFyZW07XG4gICAgbWFyZ2luLWxlZnQ6IGluaXRpYWw7XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2LjI1ZW0pIHtcbiAgLm1kLWhlYWRlci1uYXZfX3NvdXJjZSB7XG4gICAgbWFyZ2luLWxlZnQ6IDEuNHJlbTtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLWhlYWRlci1uYXZfX3NvdXJjZSB7XG4gICAgbWFyZ2luLXJpZ2h0OiAxLjRyZW07XG4gIH1cbn1cblxuLm1kLWhlcm8ge1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDI1MG1zO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1wcmltYXJ5LWZnLWNvbG9yKTtcbiAgY29sb3I6IHZhcigtLW1kLXByaW1hcnktYmctY29sb3IpO1xuICBmb250LXNpemU6IDFyZW07XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ubWQtaGVyb19faW5uZXIge1xuICBtYXJnaW4tdG9wOiAxcmVtO1xuICBwYWRkaW5nOiAwLjhyZW0gMC44cmVtIDAuNHJlbTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjEsIDAuNywgMC4xLCAxKSwgb3BhY2l0eSAyNTBtcztcbiAgdHJhbnNpdGlvbi1kZWxheTogMTAwbXM7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3Ni4xODc1ZW0pIHtcbiAgLm1kLWhlcm9fX2lubmVyIHtcbiAgICBtYXJnaW4tdG9wOiAyLjRyZW07XG4gICAgbWFyZ2luLWJvdHRvbTogMS4ycmVtO1xuICB9XG59XG5bZGF0YS1tZC1zdGF0ZT1oaWRkZW5dIC5tZC1oZXJvX19pbm5lciB7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMC42MjVyZW0pO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMG1zIDQwMG1zLCBvcGFjaXR5IDEwMG1zIDBtcztcbiAgb3BhY2l0eTogMDtcbn1cbi5tZC1oZXJvLS1leHBhbmQgLm1kLWhlcm9fX2lubmVyIHtcbiAgbWFyZ2luLWJvdHRvbTogMS4ycmVtO1xufVxuXG4ubWQtZm9vdGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcbn1cbkBtZWRpYSBwcmludCB7XG4gIC5tZC1mb290ZXIge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cblxuLm1kLWZvb3Rlci1uYXZfX2lubmVyIHtcbiAgcGFkZGluZzogMC4ycmVtO1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi5tZC1mb290ZXItbmF2X19saW5rIHtcbiAgZGlzcGxheTogZmxleDtcbiAgcGFkZGluZy10b3A6IDEuNHJlbTtcbiAgcGFkZGluZy1ib3R0b206IDAuNHJlbTtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAyNTBtcztcbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDQ1ZW0pIHtcbiAgLm1kLWZvb3Rlci1uYXZfX2xpbmsge1xuICAgIHdpZHRoOiA1MCU7XG4gIH1cbn1cbi5tZC1mb290ZXItbmF2X19saW5rOmZvY3VzLCAubWQtZm9vdGVyLW5hdl9fbGluazpob3ZlciB7XG4gIG9wYWNpdHk6IDAuNztcbn1cbi5tZC1mb290ZXItbmF2X19saW5rLS1wcmV2IHtcbiAgd2lkdGg6IDI1JTtcbiAgZmxvYXQ6IGxlZnQ7XG59XG5bZGlyPXJ0bF0gLm1kLWZvb3Rlci1uYXZfX2xpbmstLXByZXYge1xuICBmbG9hdDogcmlnaHQ7XG59XG5bZGlyPXJ0bF0gLm1kLWZvb3Rlci1uYXZfX2xpbmstLXByZXYgc3ZnIHtcbiAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDQuOTM3NWVtKSB7XG4gIC5tZC1mb290ZXItbmF2X19saW5rLS1wcmV2IC5tZC1mb290ZXItbmF2X190aXRsZSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuLm1kLWZvb3Rlci1uYXZfX2xpbmstLW5leHQge1xuICB3aWR0aDogNzUlO1xuICBmbG9hdDogcmlnaHQ7XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xufVxuW2Rpcj1ydGxdIC5tZC1mb290ZXItbmF2X19saW5rLS1uZXh0IHtcbiAgZmxvYXQ6IGxlZnQ7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5bZGlyPXJ0bF0gLm1kLWZvb3Rlci1uYXZfX2xpbmstLW5leHQgc3ZnIHtcbiAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpO1xufVxuLm1kLWZvb3Rlci1uYXZfX3RpdGxlIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmbGV4LWdyb3c6IDE7XG4gIG1heC13aWR0aDogY2FsYygxMDAlIC0gMi40cmVtKTtcbiAgcGFkZGluZzogMCAxcmVtO1xuICBmb250LXNpemU6IDAuOXJlbTtcbiAgbGluZS1oZWlnaHQ6IDIuNHJlbTtcbn1cbi5tZC1mb290ZXItbmF2X19idXR0b24ge1xuICBtYXJnaW46IDAuMnJlbTtcbiAgcGFkZGluZzogMC40cmVtO1xufVxuLm1kLWZvb3Rlci1uYXZfX2RpcmVjdGlvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDA7XG4gIGxlZnQ6IDA7XG4gIG1hcmdpbi10b3A6IC0xcmVtO1xuICBwYWRkaW5nOiAwIDFyZW07XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yLS1saWdodCk7XG4gIGZvbnQtc2l6ZTogMC42NHJlbTtcbn1cblxuLm1kLWZvb3Rlci1tZXRhIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG59XG4ubWQtZm9vdGVyLW1ldGFfX2lubmVyIHtcbiAgcGFkZGluZzogMC4ycmVtO1xuICBvdmVyZmxvdzogYXV0bztcbn1cbmh0bWwgLm1kLWZvb3Rlci1tZXRhLm1kLXR5cGVzZXQgYSB7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yLS1saWdodCk7XG59XG5odG1sIC5tZC1mb290ZXItbWV0YS5tZC10eXBlc2V0IGE6Zm9jdXMsIGh0bWwgLm1kLWZvb3Rlci1tZXRhLm1kLXR5cGVzZXQgYTpob3ZlciB7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcbn1cblxuLm1kLWZvb3Rlci1jb3B5cmlnaHQge1xuICBtYXJnaW46IDAgMC42cmVtO1xuICBwYWRkaW5nOiAwLjRyZW0gMDtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3ItLWxpZ2h0ZXIpO1xuICBmb250LXNpemU6IDAuNjRyZW07XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0NWVtKSB7XG4gIC5tZC1mb290ZXItY29weXJpZ2h0IHtcbiAgICBtYXgtd2lkdGg6IDc1JTtcbiAgICBmbG9hdDogbGVmdDtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLWZvb3Rlci1jb3B5cmlnaHQge1xuICAgIGZsb2F0OiByaWdodDtcbiAgfVxufVxuLm1kLWZvb3Rlci1jb3B5cmlnaHRfX2hpZ2hsaWdodCB7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yLS1saWdodCk7XG59XG5cbi5tZC1mb290ZXItc29jaWFsIHtcbiAgbWFyZ2luOiAwIDAuNHJlbTtcbiAgcGFkZGluZzogMC4ycmVtIDAgMC42cmVtO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDVlbSkge1xuICAubWQtZm9vdGVyLXNvY2lhbCB7XG4gICAgcGFkZGluZzogMC42cmVtIDA7XG4gICAgZmxvYXQ6IHJpZ2h0O1xuICB9XG4gIFtkaXI9cnRsXSAubWQtZm9vdGVyLXNvY2lhbCB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gIH1cbn1cbi5tZC1mb290ZXItc29jaWFsX19saW5rIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMS42cmVtO1xuICBoZWlnaHQ6IDEuNnJlbTtcbiAgdHJhbnNpdGlvbjogY29sb3IgMjUwbXM7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi5tZC1mb290ZXItc29jaWFsX19saW5rOjpiZWZvcmUge1xuICBsaW5lLWhlaWdodDogMS45O1xufVxuLm1kLWZvb3Rlci1zb2NpYWxfX2xpbmsgc3ZnIHtcbiAgd2lkdGg6IDAuOHJlbTtcbiAgdmVydGljYWwtYWxpZ246IC0yNSU7XG4gIGZpbGw6IGN1cnJlbnRDb2xvcjtcbn1cblxuLm1kLW5hdiB7XG4gIGZvbnQtc2l6ZTogMC43cmVtO1xuICBsaW5lLWhlaWdodDogMS4zO1xufVxuLm1kLW5hdl9fdGl0bGUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogMCAwLjZyZW07XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm1kLW5hdl9fdGl0bGUgLm1kLW5hdl9fYnV0dG9uIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5tZC1uYXZfX3RpdGxlIC5tZC1uYXZfX2J1dHRvbiBpbWcge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiBhdXRvO1xufVxuLm1kLW5hdl9fdGl0bGUgLm1kLW5hdl9fYnV0dG9uLm1kLWxvZ28gaW1nLFxuLm1kLW5hdl9fdGl0bGUgLm1kLW5hdl9fYnV0dG9uLm1kLWxvZ28gc3ZnIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAyLjRyZW07XG4gIGhlaWdodDogMi40cmVtO1xufVxuLm1kLW5hdl9fdGl0bGUgLm1kLW5hdl9fYnV0dG9uLm1kLWxvZ28gc3ZnIHtcbiAgZmlsbDogY3VycmVudENvbG9yO1xufVxuLm1kLW5hdl9fbGlzdCB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbn1cbi5tZC1uYXZfX2l0ZW0ge1xuICBwYWRkaW5nOiAwIDAuNnJlbTtcbn1cbi5tZC1uYXZfX2l0ZW06bGFzdC1jaGlsZCB7XG4gIHBhZGRpbmctYm90dG9tOiAwLjZyZW07XG59XG4ubWQtbmF2X19pdGVtIC5tZC1uYXZfX2l0ZW0ge1xuICBwYWRkaW5nLXJpZ2h0OiAwO1xufVxuW2Rpcj1ydGxdIC5tZC1uYXZfX2l0ZW0gLm1kLW5hdl9faXRlbSB7XG4gIHBhZGRpbmctcmlnaHQ6IDAuNnJlbTtcbiAgcGFkZGluZy1sZWZ0OiAwO1xufVxuLm1kLW5hdl9faXRlbSAubWQtbmF2X19pdGVtOmxhc3QtY2hpbGQge1xuICBwYWRkaW5nLWJvdHRvbTogMDtcbn1cbi5tZC1uYXZfX2xpbmsge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luLXRvcDogMC42MjVlbTtcbiAgdHJhbnNpdGlvbjogY29sb3IgMTI1bXM7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHNjcm9sbC1zbmFwLWFsaWduOiBzdGFydDtcbn1cbmh0bWwgLm1kLW5hdl9fbGlua1tmb3I9X190b2NdIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbmh0bWwgLm1kLW5hdl9fbGlua1tmb3I9X190b2NdIH4gLm1kLW5hdiB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ubWQtbmF2X19saW5rW2RhdGEtbWQtc3RhdGU9Ymx1cl0ge1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xufVxuLm1kLW5hdl9faXRlbSAubWQtbmF2X19saW5rLS1hY3RpdmUge1xuICBjb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1mZy1jb2xvcik7XG59XG4ubWQtbmF2X19pdGVtLS1uZXN0ZWQgPiAubWQtbmF2X19saW5rIHtcbiAgY29sb3I6IGluaGVyaXQ7XG59XG4ubWQtbmF2X19saW5rOmZvY3VzLCAubWQtbmF2X19saW5rOmhvdmVyIHtcbiAgY29sb3I6IHZhcigtLW1kLWFjY2VudC1mZy1jb2xvcik7XG59XG4ubWQtbmF2X19zb3VyY2Uge1xuICBkaXNwbGF5OiBub25lO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzYuMTg3NWVtKSB7XG4gIC5tZC1uYXYge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3IpO1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnksIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdiB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgei1pbmRleDogMTtcbiAgfVxuICAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXZfX3RpdGxlLFxuLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2X19pdGVtIHtcbiAgICBmb250LXNpemU6IDAuOHJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41O1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9fdGl0bGUge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBoZWlnaHQ6IDUuNnJlbTtcbiAgICBwYWRkaW5nOiAzcmVtIDAuOHJlbSAwLjJyZW07XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlc3QpO1xuICAgIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBsaW5lLWhlaWdodDogMi40cmVtO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9fdGl0bGUgLm1kLW5hdl9faWNvbiB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMC40cmVtO1xuICAgIGxlZnQ6IDAuNHJlbTtcbiAgICB3aWR0aDogMS4ycmVtO1xuICAgIGhlaWdodDogMS4ycmVtO1xuICAgIG1hcmdpbjogMC4ycmVtO1xuICB9XG4gIFtkaXI9cnRsXSAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXZfX3RpdGxlIC5tZC1uYXZfX2ljb24ge1xuICAgIHJpZ2h0OiAwLjRyZW07XG4gICAgbGVmdDogaW5pdGlhbDtcbiAgfVxuICAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXZfX3RpdGxlIH4gLm1kLW5hdl9fbGlzdCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gICAgYm94LXNoYWRvdzogaW5zZXQgMCAwLjA1cmVtIDAgdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlc3QpO1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgIHNjcm9sbC1zbmFwLXR5cGU6IHkgbWFuZGF0b3J5O1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9fdGl0bGUgfiAubWQtbmF2X19saXN0ID4gLm1kLW5hdl9faXRlbTpmaXJzdC1jaGlsZCB7XG4gICAgYm9yZGVyLXRvcDogMDtcbiAgfVxuICAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXZfX3RpdGxlW2Zvcj1fX2RyYXdlcl0ge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1wcmltYXJ5LWZnLWNvbG9yKTtcbiAgICBjb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1iZy1jb2xvcik7XG4gIH1cbiAgLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2X190aXRsZVtmb3I9X19kcmF3ZXJdIC5tZC1uYXZfX2J1dHRvbiB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMC4ycmVtO1xuICAgIGxlZnQ6IDAuMnJlbTtcbiAgICBtYXJnaW46IDAuMnJlbTtcbiAgICBwYWRkaW5nOiAwLjRyZW07XG4gICAgZm9udC1zaXplOiAyLjRyZW07XG4gIH1cbiAgaHRtbCBbZGlyPXJ0bF0gLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2X190aXRsZVtmb3I9X19kcmF3ZXJdIC5tZC1uYXZfX2J1dHRvbiB7XG4gICAgcmlnaHQ6IDAuMnJlbTtcbiAgICBsZWZ0OiBpbml0aWFsO1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9fbGlzdCB7XG4gICAgZmxleDogMTtcbiAgfVxuICAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXZfX2l0ZW0ge1xuICAgIHBhZGRpbmc6IDA7XG4gICAgYm9yZGVyLXRvcDogMC4wNXJlbSBzb2xpZCB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVzdCk7XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9faXRlbSB7XG4gICAgcGFkZGluZzogMDtcbiAgfVxuICAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXZfX2l0ZW0tLW5lc3RlZCA+IC5tZC1uYXZfX2xpbmsge1xuICAgIHBhZGRpbmctcmlnaHQ6IDIuNHJlbTtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2X19pdGVtLS1uZXN0ZWQgPiAubWQtbmF2X19saW5rIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjhyZW07XG4gICAgcGFkZGluZy1sZWZ0OiAyLjRyZW07XG4gIH1cbiAgLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2X19pdGVtLS1hY3RpdmUgPiAubWQtbmF2X19saW5rIHtcbiAgICBjb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1mZy1jb2xvcik7XG4gIH1cbiAgLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2X19saW5rIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICBwYWRkaW5nOiAwLjZyZW0gMC44cmVtO1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9fbGluayAubWQtbmF2X19pY29uIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiA1MCU7XG4gICAgcmlnaHQ6IDAuNnJlbTtcbiAgICBtYXJnaW4tdG9wOiAtMC42cmVtO1xuICAgIGNvbG9yOiBpbmhlcml0O1xuICAgIGZvbnQtc2l6ZTogMS4ycmVtO1xuICB9XG4gIFtkaXI9cnRsXSAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXZfX2xpbmsgLm1kLW5hdl9faWNvbiB7XG4gICAgcmlnaHQ6IGluaXRpYWw7XG4gICAgbGVmdDogMC42cmVtO1xuICB9XG4gIFtkaXI9cnRsXSAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXZfX2ljb24gc3ZnIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKC0xKTtcbiAgfVxuICAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXYtLXNlY29uZGFyeSAubWQtbmF2X19saW5rIHtcbiAgICBwb3NpdGlvbjogc3RhdGljO1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdi0tc2Vjb25kYXJ5IC5tZC1uYXYge1xuICAgIHBvc2l0aW9uOiBzdGF0aWM7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIH1cbiAgLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2LS1zZWNvbmRhcnkgLm1kLW5hdiAubWQtbmF2X19saW5rIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDEuNHJlbTtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2LS1zZWNvbmRhcnkgLm1kLW5hdiAubWQtbmF2X19saW5rIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAxLjRyZW07XG4gICAgcGFkZGluZy1sZWZ0OiBpbml0aWFsO1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdi0tc2Vjb25kYXJ5IC5tZC1uYXYgLm1kLW5hdiAubWQtbmF2X19saW5rIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDJyZW07XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdi0tc2Vjb25kYXJ5IC5tZC1uYXYgLm1kLW5hdiAubWQtbmF2X19saW5rIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAycmVtO1xuICAgIHBhZGRpbmctbGVmdDogaW5pdGlhbDtcbiAgfVxuICAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXYtLXNlY29uZGFyeSAubWQtbmF2IC5tZC1uYXYgLm1kLW5hdiAubWQtbmF2X19saW5rIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDIuNnJlbTtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2LS1zZWNvbmRhcnkgLm1kLW5hdiAubWQtbmF2IC5tZC1uYXYgLm1kLW5hdl9fbGluayB7XG4gICAgcGFkZGluZy1yaWdodDogMi42cmVtO1xuICAgIHBhZGRpbmctbGVmdDogaW5pdGlhbDtcbiAgfVxuICAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXYtLXNlY29uZGFyeSAubWQtbmF2IC5tZC1uYXYgLm1kLW5hdiAubWQtbmF2IC5tZC1uYXZfX2xpbmsge1xuICAgIHBhZGRpbmctbGVmdDogMy4ycmVtO1xuICB9XG4gIFtkaXI9cnRsXSAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXYtLXNlY29uZGFyeSAubWQtbmF2IC5tZC1uYXYgLm1kLW5hdiAubWQtbmF2IC5tZC1uYXZfX2xpbmsge1xuICAgIHBhZGRpbmctcmlnaHQ6IDMuMnJlbTtcbiAgICBwYWRkaW5nLWxlZnQ6IGluaXRpYWw7XG4gIH1cbiAgLm1kLW5hdl9fdG9nZ2xlIH4gLm1kLW5hdiB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDI1MG1zIGN1YmljLWJlemllcigwLjgsIDAsIDAuNiwgMSksIG9wYWNpdHkgMTI1bXMgNTBtcztcbiAgICBvcGFjaXR5OiAwO1xuICB9XG4gIFtkaXI9cnRsXSAubWQtbmF2X190b2dnbGUgfiAubWQtbmF2IHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpO1xuICB9XG4gIC5tZC1uYXZfX3RvZ2dsZTpjaGVja2VkIH4gLm1kLW5hdiB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAyNTBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpLCBvcGFjaXR5IDEyNW1zIDEyNW1zO1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDU5LjkzNzVlbSkge1xuICBodG1sIC5tZC1uYXZfX2xpbmtbZm9yPV9fdG9jXSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcGFkZGluZy1yaWdodDogMi40cmVtO1xuICB9XG4gIGh0bWwgLm1kLW5hdl9fbGlua1tmb3I9X190b2NdICsgLm1kLW5hdl9fbGluayB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuICBodG1sIC5tZC1uYXZfX2xpbmtbZm9yPV9fdG9jXSB+IC5tZC1uYXYge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gIH1cbiAgaHRtbCBbZGlyPXJ0bF0gLm1kLW5hdl9fbGluayB7XG4gICAgcGFkZGluZy1yaWdodDogMC44cmVtO1xuICAgIHBhZGRpbmctbGVmdDogMi40cmVtO1xuICB9XG4gIC5tZC1uYXZfX3NvdXJjZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcGFkZGluZzogMCAwLjJyZW07XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1mZy1jb2xvci0tZGFyayk7XG4gICAgY29sb3I6IHZhcigtLW1kLXByaW1hcnktYmctY29sb3IpO1xuICB9XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2MGVtKSB7XG4gIC5tZC1uYXYtLXNlY29uZGFyeSAubWQtbmF2X190aXRsZVtmb3I9X190b2NdIHtcbiAgICBzY3JvbGwtc25hcC1hbGlnbjogc3RhcnQ7XG4gIH1cbiAgLm1kLW5hdi0tc2Vjb25kYXJ5IC5tZC1uYXZfX3RpdGxlIC5tZC1uYXZfX2ljb24ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2LjI1ZW0pIHtcbiAgLm1kLW5hdiB7XG4gICAgdHJhbnNpdGlvbjogbWF4LWhlaWdodCAyNTBtcyBjdWJpYy1iZXppZXIoMC44NiwgMCwgMC4wNywgMSk7XG4gIH1cbiAgLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2X190aXRsZVtmb3I9X19kcmF3ZXJdIHtcbiAgICBzY3JvbGwtc25hcC1hbGlnbjogc3RhcnQ7XG4gIH1cbiAgLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2X190aXRsZSAubWQtbmF2X19pY29uIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5tZC1uYXZfX3RvZ2dsZSB+IC5tZC1uYXYge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbiAgLm1kLW5hdl9fdG9nZ2xlOmNoZWNrZWQgfiAubWQtbmF2IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxuICAubWQtbmF2X19pdGVtLS1uZXN0ZWQgPiAubWQtbmF2ID4gLm1kLW5hdl9fdGl0bGUge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbiAgLm1kLW5hdl9faWNvbiB7XG4gICAgaGVpZ2h0OiAwLjlyZW07XG4gICAgZmxvYXQ6IHJpZ2h0O1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAyNTBtcztcbiAgfVxuICAubWQtbmF2X19pY29uIHN2ZyB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdpZHRoOiAwLjlyZW07XG4gICAgaGVpZ2h0OiAwLjlyZW07XG4gICAgdmVydGljYWwtYWxpZ246IC0wLjFyZW07XG4gIH1cbiAgLm1kLW5hdl9faXRlbS0tbmVzdGVkIC5tZC1uYXZfX3RvZ2dsZTpjaGVja2VkIH4gLm1kLW5hdl9fbGluayAubWQtbmF2X19pY29uIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZVooOTBkZWcpO1xuICB9XG59XG5cbi5tZC1zZWFyY2gge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4ubm8tanMgLm1kLXNlYXJjaCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2MGVtKSB7XG4gIC5tZC1zZWFyY2gge1xuICAgIHBhZGRpbmc6IDAuMnJlbSAwO1xuICB9XG59XG4ubWQtc2VhcmNoX19vdmVybGF5IHtcbiAgb3BhY2l0eTogMDtcbiAgei1pbmRleDogMTtcbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDU5LjkzNzVlbSkge1xuICAubWQtc2VhcmNoX19vdmVybGF5IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwLjJyZW07XG4gICAgbGVmdDogLTIuMnJlbTtcbiAgICB3aWR0aDogMnJlbTtcbiAgICBoZWlnaHQ6IDJyZW07XG4gICAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyO1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAzMDBtcyAxMDBtcywgb3BhY2l0eSAyMDBtcyAyMDBtcztcbiAgICBib3JkZXItcmFkaXVzOiAxcmVtO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3IpO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1zZWFyY2hfX292ZXJsYXkge1xuICAgIHJpZ2h0OiAtMi4ycmVtO1xuICAgIGxlZnQ6IGluaXRpYWw7XG4gIH1cbiAgW2RhdGEtbWQtdG9nZ2xlPXNlYXJjaF06Y2hlY2tlZCB+IC5tZC1oZWFkZXIgLm1kLXNlYXJjaF9fb3ZlcmxheSB7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDQwMG1zLCBvcGFjaXR5IDEwMG1zO1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDI5LjkzNzVlbSkge1xuICBbZGF0YS1tZC10b2dnbGU9c2VhcmNoXTpjaGVja2VkIH4gLm1kLWhlYWRlciAubWQtc2VhcmNoX19vdmVybGF5IHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDQ1KTtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMzBlbSkgYW5kIChtYXgtd2lkdGg6IDQ0LjkzNzVlbSkge1xuICBbZGF0YS1tZC10b2dnbGU9c2VhcmNoXTpjaGVja2VkIH4gLm1kLWhlYWRlciAubWQtc2VhcmNoX19vdmVybGF5IHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDYwKTtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDVlbSkgYW5kIChtYXgtd2lkdGg6IDU5LjkzNzVlbSkge1xuICBbZGF0YS1tZC10b2dnbGU9c2VhcmNoXTpjaGVja2VkIH4gLm1kLWhlYWRlciAubWQtc2VhcmNoX19vdmVybGF5IHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDc1KTtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjBlbSkge1xuICAubWQtc2VhcmNoX19vdmVybGF5IHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgd2lkdGg6IDA7XG4gICAgaGVpZ2h0OiAwO1xuICAgIHRyYW5zaXRpb246IHdpZHRoIDBtcyAyNTBtcywgaGVpZ2h0IDBtcyAyNTBtcywgb3BhY2l0eSAyNTBtcztcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG4gIFtkaXI9cnRsXSAubWQtc2VhcmNoX19vdmVybGF5IHtcbiAgICByaWdodDogMDtcbiAgICBsZWZ0OiBpbml0aWFsO1xuICB9XG4gIFtkYXRhLW1kLXRvZ2dsZT1zZWFyY2hdOmNoZWNrZWQgfiAubWQtaGVhZGVyIC5tZC1zZWFyY2hfX292ZXJsYXkge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICB0cmFuc2l0aW9uOiB3aWR0aCAwbXMsIGhlaWdodCAwbXMsIG9wYWNpdHkgMjUwbXM7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxufVxuLm1kLXNlYXJjaF9faW5uZXIge1xuICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1OS45Mzc1ZW0pIHtcbiAgLm1kLXNlYXJjaF9faW5uZXIge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMTAwJTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDUlKTtcbiAgICB0cmFuc2l0aW9uOiByaWdodCAwbXMgMzAwbXMsIGxlZnQgMG1zIDMwMG1zLCB0cmFuc2Zvcm0gMTUwbXMgMTUwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSwgb3BhY2l0eSAxNTBtcyAxNTBtcztcbiAgICBvcGFjaXR5OiAwO1xuICAgIHotaW5kZXg6IDI7XG4gIH1cbiAgW2RhdGEtbWQtdG9nZ2xlPXNlYXJjaF06Y2hlY2tlZCB+IC5tZC1oZWFkZXIgLm1kLXNlYXJjaF9faW5uZXIge1xuICAgIGxlZnQ6IDA7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xuICAgIHRyYW5zaXRpb246IHJpZ2h0IDBtcyAwbXMsIGxlZnQgMG1zIDBtcywgdHJhbnNmb3JtIDE1MG1zIDE1MG1zIGN1YmljLWJlemllcigwLjEsIDAuNywgMC4xLCAxKSwgb3BhY2l0eSAxNTBtcyAxNTBtcztcbiAgICBvcGFjaXR5OiAxO1xuICB9XG4gIFtkaXI9cnRsXSBbZGF0YS1tZC10b2dnbGU9c2VhcmNoXTpjaGVja2VkIH4gLm1kLWhlYWRlciAubWQtc2VhcmNoX19pbm5lciB7XG4gICAgcmlnaHQ6IDA7XG4gICAgbGVmdDogaW5pdGlhbDtcbiAgfVxuICBodG1sIFtkaXI9cnRsXSAubWQtc2VhcmNoX19pbm5lciB7XG4gICAgcmlnaHQ6IDEwMCU7XG4gICAgbGVmdDogaW5pdGlhbDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUlKTtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjBlbSkge1xuICAubWQtc2VhcmNoX19pbm5lciB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHdpZHRoOiAxMS43cmVtO1xuICAgIHBhZGRpbmc6IDAuMXJlbSAwO1xuICAgIGZsb2F0OiByaWdodDtcbiAgICB0cmFuc2l0aW9uOiB3aWR0aCAyNTBtcyBjdWJpYy1iZXppZXIoMC4xLCAwLjcsIDAuMSwgMSk7XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1zZWFyY2hfX2lubmVyIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjBlbSkgYW5kIChtYXgtd2lkdGg6IDc2LjE4NzVlbSkge1xuICBbZGF0YS1tZC10b2dnbGU9c2VhcmNoXTpjaGVja2VkIH4gLm1kLWhlYWRlciAubWQtc2VhcmNoX19pbm5lciB7XG4gICAgd2lkdGg6IDIzLjRyZW07XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2LjI1ZW0pIHtcbiAgW2RhdGEtbWQtdG9nZ2xlPXNlYXJjaF06Y2hlY2tlZCB+IC5tZC1oZWFkZXIgLm1kLXNlYXJjaF9faW5uZXIge1xuICAgIHdpZHRoOiAzNC40cmVtO1xuICB9XG59XG4ubWQtc2VhcmNoX19mb3JtIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjBlbSkge1xuICAubWQtc2VhcmNoX19mb3JtIHtcbiAgICBib3JkZXItcmFkaXVzOiAwLjFyZW07XG4gIH1cbn1cbi5tZC1zZWFyY2hfX2lucHV0IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nOiAwIDIuMnJlbSAwIDMuNnJlbTtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIHotaW5kZXg6IDI7XG59XG5bZGlyPXJ0bF0gLm1kLXNlYXJjaF9faW5wdXQge1xuICBwYWRkaW5nOiAwIDMuNnJlbSAwIDIuMnJlbTtcbn1cbi5tZC1zZWFyY2hfX2lucHV0OjpwbGFjZWhvbGRlciB7XG4gIHRyYW5zaXRpb246IGNvbG9yIDI1MG1zO1xufVxuLm1kLXNlYXJjaF9faW5wdXQgfiAubWQtc2VhcmNoX19pY29uLCAubWQtc2VhcmNoX19pbnB1dDo6cGxhY2Vob2xkZXIge1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xufVxuLm1kLXNlYXJjaF9faW5wdXQ6Oi1tcy1jbGVhciB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1OS45Mzc1ZW0pIHtcbiAgLm1kLXNlYXJjaF9faW5wdXQge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMi40cmVtO1xuICAgIGZvbnQtc2l6ZTogMC45cmVtO1xuICB9XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2MGVtKSB7XG4gIC5tZC1zZWFyY2hfX2lucHV0IHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEuOHJlbTtcbiAgICBwYWRkaW5nLWxlZnQ6IDIuMnJlbTtcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDI1MG1zLCBjb2xvciAyNTBtcztcbiAgICBib3JkZXItcmFkaXVzOiAwLjFyZW07XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG4gICAgY29sb3I6IGluaGVyaXQ7XG4gICAgZm9udC1zaXplOiAwLjhyZW07XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1zZWFyY2hfX2lucHV0IHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAyLjJyZW07XG4gIH1cbiAgLm1kLXNlYXJjaF9faW5wdXQgKyAubWQtc2VhcmNoX19pY29uIHtcbiAgICBjb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1iZy1jb2xvcik7XG4gIH1cbiAgLm1kLXNlYXJjaF9faW5wdXQ6OnBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1iZy1jb2xvci0tbGlnaHQpO1xuICB9XG4gIC5tZC1zZWFyY2hfX2lucHV0OmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yLS1saWdodGVzdCk7XG4gIH1cbiAgW2RhdGEtbWQtdG9nZ2xlPXNlYXJjaF06Y2hlY2tlZCB+IC5tZC1oZWFkZXIgLm1kLXNlYXJjaF9faW5wdXQge1xuICAgIGJvcmRlci1yYWRpdXM6IDAuMXJlbSAwLjFyZW0gMCAwO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3IpO1xuICAgIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yKTtcbiAgICB0ZXh0LW92ZXJmbG93OiBjbGlwO1xuICB9XG4gIFtkYXRhLW1kLXRvZ2dsZT1zZWFyY2hdOmNoZWNrZWQgfiAubWQtaGVhZGVyIC5tZC1zZWFyY2hfX2lucHV0ICsgLm1kLXNlYXJjaF9faWNvbiwgW2RhdGEtbWQtdG9nZ2xlPXNlYXJjaF06Y2hlY2tlZCB+IC5tZC1oZWFkZXIgLm1kLXNlYXJjaF9faW5wdXQ6OnBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuICB9XG59XG4ubWQtc2VhcmNoX19pY29uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMS4ycmVtO1xuICBoZWlnaHQ6IDEuMnJlbTtcbiAgdHJhbnNpdGlvbjogY29sb3IgMjUwbXMsIG9wYWNpdHkgMjUwbXM7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgei1pbmRleDogMjtcbn1cbi5tZC1zZWFyY2hfX2ljb246aG92ZXIge1xuICBvcGFjaXR5OiAwLjc7XG59XG4ubWQtc2VhcmNoX19pY29uW2Zvcj1fX3NlYXJjaF0ge1xuICB0b3A6IDAuM3JlbTtcbiAgbGVmdDogMC41cmVtO1xufVxuW2Rpcj1ydGxdIC5tZC1zZWFyY2hfX2ljb25bZm9yPV9fc2VhcmNoXSB7XG4gIHJpZ2h0OiAwLjVyZW07XG4gIGxlZnQ6IGluaXRpYWw7XG59XG5bZGlyPXJ0bF0gLm1kLXNlYXJjaF9faWNvbltmb3I9X19zZWFyY2hdIHN2ZyB7XG4gIHRyYW5zZm9ybTogc2NhbGVYKC0xKTtcbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDU5LjkzNzVlbSkge1xuICAubWQtc2VhcmNoX19pY29uW2Zvcj1fX3NlYXJjaF0ge1xuICAgIHRvcDogMC42cmVtO1xuICAgIGxlZnQ6IDAuOHJlbTtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLXNlYXJjaF9faWNvbltmb3I9X19zZWFyY2hdIHtcbiAgICByaWdodDogMC44cmVtO1xuICAgIGxlZnQ6IGluaXRpYWw7XG4gIH1cbiAgLm1kLXNlYXJjaF9faWNvbltmb3I9X19zZWFyY2hdIHN2ZzpmaXJzdC1jaGlsZCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjBlbSkge1xuICAubWQtc2VhcmNoX19pY29uW2Zvcj1fX3NlYXJjaF0gc3ZnOmxhc3QtY2hpbGQge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbi5tZC1zZWFyY2hfX2ljb25bdHlwZT1yZXNldF0ge1xuICB0b3A6IDAuM3JlbTtcbiAgcmlnaHQ6IDAuNXJlbTtcbiAgdHJhbnNmb3JtOiBzY2FsZSgwLjc1KTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDE1MG1zIGN1YmljLWJlemllcigwLjEsIDAuNywgMC4xLCAxKSwgb3BhY2l0eSAxNTBtcztcbiAgb3BhY2l0eTogMDtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5bZGlyPXJ0bF0gLm1kLXNlYXJjaF9faWNvblt0eXBlPXJlc2V0XSB7XG4gIHJpZ2h0OiBpbml0aWFsO1xuICBsZWZ0OiAwLjVyZW07XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1OS45Mzc1ZW0pIHtcbiAgLm1kLXNlYXJjaF9faWNvblt0eXBlPXJlc2V0XSB7XG4gICAgdG9wOiAwLjZyZW07XG4gICAgcmlnaHQ6IDAuOHJlbTtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLXNlYXJjaF9faWNvblt0eXBlPXJlc2V0XSB7XG4gICAgcmlnaHQ6IGluaXRpYWw7XG4gICAgbGVmdDogMC44cmVtO1xuICB9XG59XG5bZGF0YS1tZC10b2dnbGU9c2VhcmNoXTpjaGVja2VkIH4gLm1kLWhlYWRlciAubWQtc2VhcmNoX19pbnB1dDp2YWxpZCB+IC5tZC1zZWFyY2hfX2ljb25bdHlwZT1yZXNldF0ge1xuICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICBvcGFjaXR5OiAxO1xuICBwb2ludGVyLWV2ZW50czogaW5pdGlhbDtcbn1cbltkYXRhLW1kLXRvZ2dsZT1zZWFyY2hdOmNoZWNrZWQgfiAubWQtaGVhZGVyIC5tZC1zZWFyY2hfX2lucHV0OnZhbGlkIH4gLm1kLXNlYXJjaF9faWNvblt0eXBlPXJlc2V0XTpob3ZlciB7XG4gIG9wYWNpdHk6IDAuNztcbn1cbi5tZC1zZWFyY2hfX291dHB1dCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDEwMCU7XG4gIGJvcmRlci1yYWRpdXM6IDAgMCAwLjFyZW0gMC4xcmVtO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB6LWluZGV4OiAxO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNTkuOTM3NWVtKSB7XG4gIC5tZC1zZWFyY2hfX291dHB1dCB7XG4gICAgdG9wOiAyLjRyZW07XG4gICAgYm90dG9tOiAwO1xuICB9XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2MGVtKSB7XG4gIC5tZC1zZWFyY2hfX291dHB1dCB7XG4gICAgdG9wOiAxLjlyZW07XG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSA0MDBtcztcbiAgICBvcGFjaXR5OiAwO1xuICB9XG4gIFtkYXRhLW1kLXRvZ2dsZT1zZWFyY2hdOmNoZWNrZWQgfiAubWQtaGVhZGVyIC5tZC1zZWFyY2hfX291dHB1dCB7XG4gICAgYm94LXNoYWRvdzogMCA2cHggMTBweCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksIDAgMXB4IDE4cHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpLCAwIDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuNCk7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxufVxuLm1kLXNlYXJjaF9fc2Nyb2xsd3JhcCB7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMC4wNXJlbSAwIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0KTtcbiAgb3ZlcmZsb3cteTogYXV0bztcbiAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xuICBzY3JvbGwtc25hcC10eXBlOiB5IG1hbmRhdG9yeTtcbiAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xufVxuQG1lZGlhIChtYXgtcmVzb2x1dGlvbjogMWRwcHgpIHtcbiAgLm1kLXNlYXJjaF9fc2Nyb2xsd3JhcCB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApO1xuICB9XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2MGVtKSBhbmQgKG1heC13aWR0aDogNzYuMTg3NWVtKSB7XG4gIC5tZC1zZWFyY2hfX3Njcm9sbHdyYXAge1xuICAgIHdpZHRoOiAyMy40cmVtO1xuICB9XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3Ni4yNWVtKSB7XG4gIC5tZC1zZWFyY2hfX3Njcm9sbHdyYXAge1xuICAgIHdpZHRoOiAzNC40cmVtO1xuICB9XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2MGVtKSB7XG4gIC5tZC1zZWFyY2hfX3Njcm9sbHdyYXAge1xuICAgIG1heC1oZWlnaHQ6IDA7XG4gIH1cbiAgW2RhdGEtbWQtdG9nZ2xlPXNlYXJjaF06Y2hlY2tlZCB+IC5tZC1oZWFkZXIgLm1kLXNlYXJjaF9fc2Nyb2xsd3JhcCB7XG4gICAgbWF4LWhlaWdodDogNzV2aDtcbiAgfVxuICAubWQtc2VhcmNoX19zY3JvbGx3cmFwOjotd2Via2l0LXNjcm9sbGJhciB7XG4gICAgd2lkdGg6IDAuMnJlbTtcbiAgICBoZWlnaHQ6IDAuMnJlbTtcbiAgfVxuICAubWQtc2VhcmNoX19zY3JvbGx3cmFwOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG4gIH1cbiAgLm1kLXNlYXJjaF9fc2Nyb2xsd3JhcDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWFjY2VudC1mZy1jb2xvcik7XG4gIH1cbn1cblxuLm1kLXNlYXJjaC1yZXN1bHQge1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvcik7XG4gIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG59XG4ubWQtc2VhcmNoLXJlc3VsdF9fbWV0YSB7XG4gIHBhZGRpbmc6IDAgMC44cmVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVzdCk7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG4gIGZvbnQtc2l6ZTogMC42NHJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuOHJlbTtcbiAgc2Nyb2xsLXNuYXAtYWxpZ246IHN0YXJ0O1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjBlbSkge1xuICAubWQtc2VhcmNoLXJlc3VsdF9fbWV0YSB7XG4gICAgcGFkZGluZy1sZWZ0OiAyLjJyZW07XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1zZWFyY2gtcmVzdWx0X19tZXRhIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAyLjJyZW07XG4gICAgcGFkZGluZy1sZWZ0OiBpbml0aWFsO1xuICB9XG59XG4ubWQtc2VhcmNoLXJlc3VsdF9fbGlzdCB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgYm9yZGVyLXRvcDogMC4wNXJlbSBzb2xpZCB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVzdCk7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG59XG4ubWQtc2VhcmNoLXJlc3VsdF9faXRlbSB7XG4gIGJveC1zaGFkb3c6IDAgLTAuMDVyZW0gMCB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVzdCk7XG59XG4ubWQtc2VhcmNoLXJlc3VsdF9fbGluayB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDI1MG1zO1xuICBvdXRsaW5lOiAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBzY3JvbGwtc25hcC1hbGlnbjogc3RhcnQ7XG59XG4ubWQtc2VhcmNoLXJlc3VsdF9fbGluazpmb2N1cywgLm1kLXNlYXJjaC1yZXN1bHRfX2xpbms6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1hY2NlbnQtZmctY29sb3ItLXRyYW5zcGFyZW50KTtcbn1cbi5tZC1zZWFyY2gtcmVzdWx0X19saW5rOmZvY3VzIC5tZC1zZWFyY2gtcmVzdWx0X19hcnRpY2xlOjpiZWZvcmUsIC5tZC1zZWFyY2gtcmVzdWx0X19saW5rOmhvdmVyIC5tZC1zZWFyY2gtcmVzdWx0X19hcnRpY2xlOjpiZWZvcmUge1xuICBvcGFjaXR5OiAwLjc7XG59XG4ubWQtc2VhcmNoLXJlc3VsdF9fbGluazpsYXN0LWNoaWxkIC5tZC1zZWFyY2gtcmVzdWx0X190ZWFzZXIge1xuICBtYXJnaW4tYm90dG9tOiAwLjZyZW07XG59XG4ubWQtc2VhcmNoLXJlc3VsdF9fYXJ0aWNsZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgcGFkZGluZzogMCAwLjhyZW07XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjBlbSkge1xuICAubWQtc2VhcmNoLXJlc3VsdF9fYXJ0aWNsZSB7XG4gICAgcGFkZGluZy1sZWZ0OiAyLjJyZW07XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1zZWFyY2gtcmVzdWx0X19hcnRpY2xlIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAyLjJyZW07XG4gICAgcGFkZGluZy1sZWZ0OiAwLjhyZW07XG4gIH1cbn1cbi5tZC1zZWFyY2gtcmVzdWx0X19hcnRpY2xlLS1kb2N1bWVudCAubWQtc2VhcmNoLXJlc3VsdF9fdGl0bGUge1xuICBtYXJnaW46IDAuNTVyZW0gMDtcbiAgZm9udC1zaXplOiAwLjhyZW07XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG4ubWQtc2VhcmNoLXJlc3VsdF9faWNvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogMDtcbiAgbWFyZ2luOiAwLjFyZW07XG4gIHBhZGRpbmc6IDAuNHJlbTtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbn1cbltkaXI9cnRsXSAubWQtc2VhcmNoLXJlc3VsdF9faWNvbiB7XG4gIHJpZ2h0OiAwO1xuICBsZWZ0OiBpbml0aWFsO1xufVxuW2Rpcj1ydGxdIC5tZC1zZWFyY2gtcmVzdWx0X19pY29uIHN2ZyB7XG4gIHRyYW5zZm9ybTogc2NhbGVYKC0xKTtcbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDU5LjkzNzVlbSkge1xuICAubWQtc2VhcmNoLXJlc3VsdF9faWNvbiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuLm1kLXNlYXJjaC1yZXN1bHRfX3RpdGxlIHtcbiAgbWFyZ2luOiAwLjVlbSAwO1xuICBmb250LXNpemU6IDAuNjRyZW07XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG4ubWQtc2VhcmNoLXJlc3VsdF9fdGVhc2VyIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIG1heC1oZWlnaHQ6IDEuNjVyZW07XG4gIG1hcmdpbjogMC41ZW0gMDtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgZm9udC1zaXplOiAwLjY0cmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgLXdlYmtpdC1saW5lLWNsYW1wOiAyO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDQuOTM3NWVtKSB7XG4gIC5tZC1zZWFyY2gtcmVzdWx0X190ZWFzZXIge1xuICAgIG1heC1oZWlnaHQ6IDIuNXJlbTtcbiAgICAtd2Via2l0LWxpbmUtY2xhbXA6IDM7XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDYwZW0pIGFuZCAobWF4LXdpZHRoOiA3Ni4xODc1ZW0pIHtcbiAgLm1kLXNlYXJjaC1yZXN1bHRfX3RlYXNlciB7XG4gICAgbWF4LWhlaWdodDogMi41cmVtO1xuICAgIC13ZWJraXQtbGluZS1jbGFtcDogMztcbiAgfVxufVxuLm1kLXNlYXJjaC1yZXN1bHQgZW0ge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG4ubWQtc2lkZWJhciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDEyLjFyZW07XG4gIHBhZGRpbmc6IDEuMnJlbSAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuQG1lZGlhIHByaW50IHtcbiAgLm1kLXNpZGViYXIge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbi5tZC1zaWRlYmFyW2RhdGEtbWQtc3RhdGU9bG9ja10ge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMi40cmVtO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzYuMTg3NWVtKSB7XG4gIC5tZC1zaWRlYmFyLS1wcmltYXJ5IHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IC0xMi4xcmVtO1xuICAgIHdpZHRoOiAxMi4xcmVtO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDI1MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSksIGJveC1zaGFkb3cgMjUwbXM7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gICAgei1pbmRleDogMztcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLXNpZGViYXItLXByaW1hcnkge1xuICAgIHJpZ2h0OiAtMTIuMXJlbTtcbiAgICBsZWZ0OiBpbml0aWFsO1xuICB9XG4gIFtkYXRhLW1kLXRvZ2dsZT1kcmF3ZXJdOmNoZWNrZWQgfiAubWQtY29udGFpbmVyIC5tZC1zaWRlYmFyLS1wcmltYXJ5IHtcbiAgICBib3gtc2hhZG93OiAwIDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwIDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpLCAwIDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuNCk7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEyLjFyZW0pO1xuICB9XG4gIFtkaXI9cnRsXSBbZGF0YS1tZC10b2dnbGU9ZHJhd2VyXTpjaGVja2VkIH4gLm1kLWNvbnRhaW5lciAubWQtc2lkZWJhci0tcHJpbWFyeSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMi4xcmVtKTtcbiAgfVxuICAubWQtc2lkZWJhci0tcHJpbWFyeSAubWQtc2lkZWJhcl9fc2Nyb2xsd3JhcCB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgfVxufVxuLm1kLXNpZGViYXItLXNlY29uZGFyeSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2MGVtKSB7XG4gIC5tZC1zaWRlYmFyLS1zZWNvbmRhcnkge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbi1sZWZ0OiBjYWxjKDEwMCUgLSAxMi4xcmVtKTtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLXNpZGViYXItLXNlY29uZGFyeSB7XG4gICAgbWFyZ2luLXJpZ2h0OiBjYWxjKDEwMCUgLSAxMi4xcmVtKTtcbiAgICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbiAgfVxuICAubWQtc2lkZWJhci0tc2Vjb25kYXJ5IC5tZC1zaWRlYmFyX19zY3JvbGx3cmFwIHtcbiAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2LjI1ZW0pIHtcbiAgLm1kLXNpZGViYXItLXNlY29uZGFyeSB7XG4gICAgbWFyZ2luLWxlZnQ6IDQ4LjlyZW07XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1zaWRlYmFyLS1zZWNvbmRhcnkge1xuICAgIG1hcmdpbi1yaWdodDogNDguOXJlbTtcbiAgICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbiAgfVxufVxuLm1kLXNpZGViYXJfX3Njcm9sbHdyYXAge1xuICBtYXgtaGVpZ2h0OiAxMDAlO1xuICBtYXJnaW46IDAgMC4ycmVtO1xuICBvdmVyZmxvdy15OiBhdXRvO1xuICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG4gIHNjcm9sbC1zbmFwLXR5cGU6IHkgbWFuZGF0b3J5O1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzYuMTg3NWVtKSB7XG4gIC5tZC1zaWRlYmFyLS1wcmltYXJ5IC5tZC1zaWRlYmFyX19zY3JvbGx3cmFwIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBsZWZ0OiAwO1xuICAgIG1hcmdpbjogMDtcbiAgICBzY3JvbGwtc25hcC10eXBlOiBub25lO1xuICB9XG59XG4ubWQtc2lkZWJhcl9fc2Nyb2xsd3JhcDo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICB3aWR0aDogMC4ycmVtO1xuICBoZWlnaHQ6IDAuMnJlbTtcbn1cbi5tZC1zaWRlYmFyX19zY3JvbGx3cmFwOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpO1xufVxuLm1kLXNpZGViYXJfX3Njcm9sbHdyYXA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtYWNjZW50LWZnLWNvbG9yKTtcbn1cblxuQGtleWZyYW1lcyBtZC1zb3VyY2VfX2ZhY3RzLS1kb25lIHtcbiAgMCUge1xuICAgIGhlaWdodDogMDtcbiAgfVxuICAxMDAlIHtcbiAgICBoZWlnaHQ6IDAuNjVyZW07XG4gIH1cbn1cbkBrZXlmcmFtZXMgbWQtc291cmNlX19mYWN0LS1kb25lIHtcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG4gIDUwJSB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCUpO1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cbi5tZC1zb3VyY2Uge1xuICBkaXNwbGF5OiBibG9jaztcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAyNTBtcztcbiAgZm9udC1zaXplOiAwLjY1cmVtO1xuICBsaW5lLWhlaWdodDogMS4yNTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xufVxuW2Rpcj1ydGxdIC5tZC1zb3VyY2Uge1xuICBwYWRkaW5nLXJpZ2h0OiBpbml0aWFsO1xuICBwYWRkaW5nLWxlZnQ6IDAuNnJlbTtcbn1cbi5tZC1zb3VyY2U6aG92ZXIge1xuICBvcGFjaXR5OiAwLjc7XG59XG4ubWQtc291cmNlX19pY29uIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMi40cmVtO1xuICBoZWlnaHQ6IDIuNHJlbTtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi5tZC1zb3VyY2VfX2ljb24gc3ZnIHtcbiAgbWFyZ2luLXRvcDogMC42cmVtO1xuICBtYXJnaW4tbGVmdDogMC42cmVtO1xufVxuW2Rpcj1ydGxdIC5tZC1zb3VyY2VfX2ljb24gc3ZnIHtcbiAgbWFyZ2luLXJpZ2h0OiAwLjZyZW07XG4gIG1hcmdpbi1sZWZ0OiBpbml0aWFsO1xufVxuLm1kLXNvdXJjZV9faWNvbiArIC5tZC1zb3VyY2VfX3JlcG9zaXRvcnkge1xuICBtYXJnaW4tbGVmdDogLTJyZW07XG4gIHBhZGRpbmctbGVmdDogMnJlbTtcbn1cbltkaXI9cnRsXSAubWQtc291cmNlX19pY29uICsgLm1kLXNvdXJjZV9fcmVwb3NpdG9yeSB7XG4gIG1hcmdpbi1yaWdodDogLTJyZW07XG4gIG1hcmdpbi1sZWZ0OiBpbml0aWFsO1xuICBwYWRkaW5nLXJpZ2h0OiAycmVtO1xuICBwYWRkaW5nLWxlZnQ6IGluaXRpYWw7XG59XG4ubWQtc291cmNlX19yZXBvc2l0b3J5IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXgtd2lkdGg6IGNhbGMoMTAwJSAtIDEuMnJlbSk7XG4gIG1hcmdpbi1sZWZ0OiAwLjZyZW07XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLm1kLXNvdXJjZV9fZmFjdHMge1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIGZvbnQtc2l6ZTogMC41NXJlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICBvcGFjaXR5OiAwLjc1O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuW2RhdGEtbWQtc3RhdGU9ZG9uZV0gLm1kLXNvdXJjZV9fZmFjdHMge1xuICBhbmltYXRpb246IG1kLXNvdXJjZV9fZmFjdHMtLWRvbmUgMjUwbXMgZWFzZS1pbjtcbn1cbi5tZC1zb3VyY2VfX2ZhY3Qge1xuICBmbG9hdDogbGVmdDtcbn1cbltkaXI9cnRsXSAubWQtc291cmNlX19mYWN0IHtcbiAgZmxvYXQ6IHJpZ2h0O1xufVxuW2RhdGEtbWQtc3RhdGU9ZG9uZV0gLm1kLXNvdXJjZV9fZmFjdCB7XG4gIGFuaW1hdGlvbjogbWQtc291cmNlX19mYWN0LS1kb25lIDQwMG1zIGVhc2Utb3V0O1xufVxuLm1kLXNvdXJjZV9fZmFjdDo6YmVmb3JlIHtcbiAgbWFyZ2luOiAwIDAuMXJlbTtcbiAgY29udGVudDogXCLCt1wiO1xufVxuLm1kLXNvdXJjZV9fZmFjdDpmaXJzdC1jaGlsZDo6YmVmb3JlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLm1kLXRhYnMge1xuICB3aWR0aDogMTAwJTtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAyNTBtcztcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1mZy1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1tZC1wcmltYXJ5LWJnLWNvbG9yKTtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4ubm8tanMgLm1kLXRhYnMge1xuICB0cmFuc2l0aW9uOiBub25lO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzYuMTg3NWVtKSB7XG4gIC5tZC10YWJzIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5AbWVkaWEgcHJpbnQge1xuICAubWQtdGFicyB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuLm1kLXRhYnNfX2xpc3Qge1xuICBtYXJnaW46IDA7XG4gIG1hcmdpbi1sZWZ0OiAwLjJyZW07XG4gIHBhZGRpbmc6IDA7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5bZGlyPXJ0bF0gLm1kLXRhYnNfX2xpc3Qge1xuICBtYXJnaW4tcmlnaHQ6IDAuMnJlbTtcbiAgbWFyZ2luLWxlZnQ6IGluaXRpYWw7XG59XG4ubWQtdGFic19faXRlbSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgaGVpZ2h0OiAyLjRyZW07XG4gIHBhZGRpbmctcmlnaHQ6IDAuNnJlbTtcbiAgcGFkZGluZy1sZWZ0OiAwLjZyZW07XG59XG4ubWQtdGFic19fbGluayB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW4tdG9wOiAwLjhyZW07XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4xLCAwLjcsIDAuMSwgMSksIG9wYWNpdHkgMjUwbXM7XG4gIGZvbnQtc2l6ZTogMC43cmVtO1xuICBvcGFjaXR5OiAwLjc7XG59XG4ubm8tanMgLm1kLXRhYnNfX2xpbmsge1xuICB0cmFuc2l0aW9uOiBub25lO1xufVxuLm1kLXRhYnNfX2xpbmstLWFjdGl2ZSwgLm1kLXRhYnNfX2xpbms6aG92ZXIge1xuICBjb2xvcjogaW5oZXJpdDtcbiAgb3BhY2l0eTogMTtcbn1cbi5tZC10YWJzX19pdGVtOm50aC1jaGlsZCgyKSAubWQtdGFic19fbGluayB7XG4gIHRyYW5zaXRpb24tZGVsYXk6IDIwbXM7XG59XG4ubWQtdGFic19faXRlbTpudGgtY2hpbGQoMykgLm1kLXRhYnNfX2xpbmsge1xuICB0cmFuc2l0aW9uLWRlbGF5OiA0MG1zO1xufVxuLm1kLXRhYnNfX2l0ZW06bnRoLWNoaWxkKDQpIC5tZC10YWJzX19saW5rIHtcbiAgdHJhbnNpdGlvbi1kZWxheTogNjBtcztcbn1cbi5tZC10YWJzX19pdGVtOm50aC1jaGlsZCg1KSAubWQtdGFic19fbGluayB7XG4gIHRyYW5zaXRpb24tZGVsYXk6IDgwbXM7XG59XG4ubWQtdGFic19faXRlbTpudGgtY2hpbGQoNikgLm1kLXRhYnNfX2xpbmsge1xuICB0cmFuc2l0aW9uLWRlbGF5OiAxMDBtcztcbn1cbi5tZC10YWJzX19pdGVtOm50aC1jaGlsZCg3KSAubWQtdGFic19fbGluayB7XG4gIHRyYW5zaXRpb24tZGVsYXk6IDEyMG1zO1xufVxuLm1kLXRhYnNfX2l0ZW06bnRoLWNoaWxkKDgpIC5tZC10YWJzX19saW5rIHtcbiAgdHJhbnNpdGlvbi1kZWxheTogMTQwbXM7XG59XG4ubWQtdGFic19faXRlbTpudGgtY2hpbGQoOSkgLm1kLXRhYnNfX2xpbmsge1xuICB0cmFuc2l0aW9uLWRlbGF5OiAxNjBtcztcbn1cbi5tZC10YWJzX19pdGVtOm50aC1jaGlsZCgxMCkgLm1kLXRhYnNfX2xpbmsge1xuICB0cmFuc2l0aW9uLWRlbGF5OiAxODBtcztcbn1cbi5tZC10YWJzX19pdGVtOm50aC1jaGlsZCgxMSkgLm1kLXRhYnNfX2xpbmsge1xuICB0cmFuc2l0aW9uLWRlbGF5OiAyMDBtcztcbn1cbi5tZC10YWJzX19pdGVtOm50aC1jaGlsZCgxMikgLm1kLXRhYnNfX2xpbmsge1xuICB0cmFuc2l0aW9uLWRlbGF5OiAyMjBtcztcbn1cbi5tZC10YWJzX19pdGVtOm50aC1jaGlsZCgxMykgLm1kLXRhYnNfX2xpbmsge1xuICB0cmFuc2l0aW9uLWRlbGF5OiAyNDBtcztcbn1cbi5tZC10YWJzX19pdGVtOm50aC1jaGlsZCgxNCkgLm1kLXRhYnNfX2xpbmsge1xuICB0cmFuc2l0aW9uLWRlbGF5OiAyNjBtcztcbn1cbi5tZC10YWJzX19pdGVtOm50aC1jaGlsZCgxNSkgLm1kLXRhYnNfX2xpbmsge1xuICB0cmFuc2l0aW9uLWRlbGF5OiAyODBtcztcbn1cbi5tZC10YWJzX19pdGVtOm50aC1jaGlsZCgxNikgLm1kLXRhYnNfX2xpbmsge1xuICB0cmFuc2l0aW9uLWRlbGF5OiAzMDBtcztcbn1cbi5tZC10YWJzW2RhdGEtbWQtc3RhdGU9aGlkZGVuXSB7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuLm1kLXRhYnNbZGF0YS1tZC1zdGF0ZT1oaWRkZW5dIC5tZC10YWJzX19saW5rIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDUwJSk7XG4gIHRyYW5zaXRpb246IGNvbG9yIDI1MG1zLCB0cmFuc2Zvcm0gMG1zIDQwMG1zLCBvcGFjaXR5IDEwMG1zO1xuICBvcGFjaXR5OiAwO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzYuMjVlbSkge1xuICAubWQtdGFicyB+IC5tZC1tYWluIC5tZC1uYXYtLXByaW1hcnkgPiAubWQtbmF2X19saXN0ID4gLm1kLW5hdl9faXRlbS0tbmVzdGVkIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5tZC10YWJzLS1hY3RpdmUgfiAubWQtbWFpbiAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXZfX3RpdGxlIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nOiAwIDAuNnJlbTtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICBzY3JvbGwtc25hcC1hbGlnbjogc3RhcnQ7XG4gIH1cbiAgLm1kLXRhYnMtLWFjdGl2ZSB+IC5tZC1tYWluIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9fdGl0bGVbZm9yPV9fZHJhd2VyXSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuICAubWQtdGFicy0tYWN0aXZlIH4gLm1kLW1haW4gLm1kLW5hdi0tcHJpbWFyeSA+IC5tZC1uYXZfX2xpc3QgPiAubWQtbmF2X19pdGVtIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5tZC10YWJzLS1hY3RpdmUgfiAubWQtbWFpbiAubWQtbmF2LS1wcmltYXJ5ID4gLm1kLW5hdl9fbGlzdCA+IC5tZC1uYXZfX2l0ZW0tLWFjdGl2ZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcGFkZGluZzogMDtcbiAgfVxuICAubWQtdGFicy0tYWN0aXZlIH4gLm1kLW1haW4gLm1kLW5hdi0tcHJpbWFyeSA+IC5tZC1uYXZfX2xpc3QgPiAubWQtbmF2X19pdGVtLS1hY3RpdmUgPiAubWQtbmF2X19saW5rIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5tZC10YWJzLS1hY3RpdmUgfiAubWQtbWFpbiAubWQtbmF2W2RhdGEtbWQtbGV2ZWw9XCIxXCJdID4gLm1kLW5hdl9fbGlzdCA+IC5tZC1uYXZfX2l0ZW0ge1xuICAgIHBhZGRpbmc6IDAgMC42cmVtO1xuICB9XG4gIC5tZC10YWJzLS1hY3RpdmUgfiAubWQtbWFpbiAubWQtbmF2W2RhdGEtbWQtbGV2ZWw9XCIxXCJdIC5tZC1uYXYgLm1kLW5hdl9fdGl0bGUge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cblxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24sIC5tZC10eXBlc2V0IGRldGFpbHMge1xuICBtYXJnaW46IDEuNTYyNWVtIDA7XG4gIHBhZGRpbmc6IDAgMC42cmVtO1xuICBib3JkZXItbGVmdDogMC4ycmVtIHNvbGlkICM0NDhhZmY7XG4gIGJvcmRlci1yYWRpdXM6IDAuMXJlbTtcbiAgZm9udC1zaXplOiAwLjY0cmVtO1xuICBib3gtc2hhZG93OiAwIDAuMnJlbSAwLjVyZW0gcmdiYSgwLCAwLCAwLCAwLjA1KSwgMCAwIDAuMDVyZW0gcmdiYSgwLCAwLCAwLCAwLjEpO1xuICBvdmVyZmxvdzogYXV0bztcbn1cbltkaXI9cnRsXSAubWQtdHlwZXNldCAuYWRtb25pdGlvbiwgW2Rpcj1ydGxdIC5tZC10eXBlc2V0IGRldGFpbHMge1xuICBib3JkZXItcmlnaHQ6IDAuMnJlbSBzb2xpZCAjNDQ4YWZmO1xuICBib3JkZXItbGVmdDogbm9uZTtcbn1cbmh0bWwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24gPiA6bGFzdC1jaGlsZCwgaHRtbCAubWQtdHlwZXNldCBkZXRhaWxzID4gOmxhc3QtY2hpbGQge1xuICBtYXJnaW4tYm90dG9tOiAwLjZyZW07XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbiAuYWRtb25pdGlvbiwgLm1kLXR5cGVzZXQgZGV0YWlscyAuYWRtb25pdGlvbiwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24gZGV0YWlscywgLm1kLXR5cGVzZXQgZGV0YWlscyBkZXRhaWxzIHtcbiAgbWFyZ2luOiAxZW0gMDtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnRsZHIsIC5tZC10eXBlc2V0IGRldGFpbHMudGxkciwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uc3VtbWFyeSwgLm1kLXR5cGVzZXQgZGV0YWlscy5zdW1tYXJ5LCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5hYnN0cmFjdCwgLm1kLXR5cGVzZXQgZGV0YWlscy5hYnN0cmFjdCB7XG4gIGJvcmRlci1sZWZ0LWNvbG9yOiAjMDBiMGZmO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24udGxkciA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgZGV0YWlscy50bGRyID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5zdW1tYXJ5ID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLnN1bW1hcnkgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmFic3RyYWN0ID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmFic3RyYWN0ID4gOmZpcnN0LWNoaWxkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAxNzYsIDI1NSwgMC4xKTtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnRsZHIgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy50bGRyID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnN1bW1hcnkgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5zdW1tYXJ5ID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmFic3RyYWN0ID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMuYWJzdHJhY3QgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwMGIwZmY7XG4gIG1hc2staW1hZ2U6IHVybChcInt7IHRleHQtc3ViamVjdCB9fVwiKTtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnRvZG8sIC5tZC10eXBlc2V0IGRldGFpbHMudG9kbywgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uaW5mbywgLm1kLXR5cGVzZXQgZGV0YWlscy5pbmZvIHtcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICMwMGI4ZDQ7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi50b2RvID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLnRvZG8gPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmluZm8gPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IGRldGFpbHMuaW5mbyA+IDpmaXJzdC1jaGlsZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMTg0LCAyMTIsIDAuMSk7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi50b2RvID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMudG9kbyA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5pbmZvID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMuaW5mbyA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwYjhkNDtcbiAgbWFzay1pbWFnZTogdXJsKFwie3sgaW5mb3JtYXRpb24gfX1cIik7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5pbXBvcnRhbnQsIC5tZC10eXBlc2V0IGRldGFpbHMuaW1wb3J0YW50LCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5oaW50LCAubWQtdHlwZXNldCBkZXRhaWxzLmhpbnQsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnRpcCwgLm1kLXR5cGVzZXQgZGV0YWlscy50aXAge1xuICBib3JkZXItbGVmdC1jb2xvcjogIzAwYmZhNTtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmltcG9ydGFudCA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgZGV0YWlscy5pbXBvcnRhbnQgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmhpbnQgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IGRldGFpbHMuaGludCA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24udGlwID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLnRpcCA+IDpmaXJzdC1jaGlsZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMTkxLCAxNjUsIDAuMSk7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5pbXBvcnRhbnQgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5pbXBvcnRhbnQgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uaGludCA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCBkZXRhaWxzLmhpbnQgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24udGlwID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMudGlwID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBiZmE1O1xuICBtYXNrLWltYWdlOiB1cmwoXCJ7eyBmaXJlIH19XCIpO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uZG9uZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5kb25lLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5jaGVjaywgLm1kLXR5cGVzZXQgZGV0YWlscy5jaGVjaywgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uc3VjY2VzcywgLm1kLXR5cGVzZXQgZGV0YWlscy5zdWNjZXNzIHtcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICMwMGM4NTM7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5kb25lID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmRvbmUgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmNoZWNrID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmNoZWNrID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5zdWNjZXNzID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLnN1Y2Nlc3MgPiA6Zmlyc3QtY2hpbGQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDIwMCwgODMsIDAuMSk7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5kb25lID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMuZG9uZSA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5jaGVjayA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCBkZXRhaWxzLmNoZWNrID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnN1Y2Nlc3MgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5zdWNjZXNzID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBjODUzO1xuICBtYXNrLWltYWdlOiB1cmwoXCJ7eyBjaGVjay1jaXJjbGUgfX1cIik7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5mYXEsIC5tZC10eXBlc2V0IGRldGFpbHMuZmFxLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5oZWxwLCAubWQtdHlwZXNldCBkZXRhaWxzLmhlbHAsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnF1ZXN0aW9uLCAubWQtdHlwZXNldCBkZXRhaWxzLnF1ZXN0aW9uIHtcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICM2NGRkMTc7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5mYXEgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IGRldGFpbHMuZmFxID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5oZWxwID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmhlbHAgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnF1ZXN0aW9uID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLnF1ZXN0aW9uID4gOmZpcnN0LWNoaWxkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxMDAsIDIyMSwgMjMsIDAuMSk7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5mYXEgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5mYXEgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uaGVscCA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCBkZXRhaWxzLmhlbHAgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24ucXVlc3Rpb24gPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5xdWVzdGlvbiA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzY0ZGQxNztcbiAgbWFzay1pbWFnZTogdXJsKFwie3sgaGVscC1jaXJjbGUgfX1cIik7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5hdHRlbnRpb24sIC5tZC10eXBlc2V0IGRldGFpbHMuYXR0ZW50aW9uLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5jYXV0aW9uLCAubWQtdHlwZXNldCBkZXRhaWxzLmNhdXRpb24sIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLndhcm5pbmcsIC5tZC10eXBlc2V0IGRldGFpbHMud2FybmluZyB7XG4gIGJvcmRlci1sZWZ0LWNvbG9yOiAjZmY5MTAwO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uYXR0ZW50aW9uID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmF0dGVudGlvbiA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uY2F1dGlvbiA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgZGV0YWlscy5jYXV0aW9uID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi53YXJuaW5nID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLndhcm5pbmcgPiA6Zmlyc3QtY2hpbGQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMTQ1LCAwLCAwLjEpO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uYXR0ZW50aW9uID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMuYXR0ZW50aW9uID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmNhdXRpb24gPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5jYXV0aW9uID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLndhcm5pbmcgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy53YXJuaW5nID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY5MTAwO1xuICBtYXNrLWltYWdlOiB1cmwoXCJ7eyBhbGVydCB9fVwiKTtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLm1pc3NpbmcsIC5tZC10eXBlc2V0IGRldGFpbHMubWlzc2luZywgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uZmFpbCwgLm1kLXR5cGVzZXQgZGV0YWlscy5mYWlsLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5mYWlsdXJlLCAubWQtdHlwZXNldCBkZXRhaWxzLmZhaWx1cmUge1xuICBib3JkZXItbGVmdC1jb2xvcjogI2ZmNTI1Mjtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLm1pc3NpbmcgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IGRldGFpbHMubWlzc2luZyA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uZmFpbCA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgZGV0YWlscy5mYWlsID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5mYWlsdXJlID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmZhaWx1cmUgPiA6Zmlyc3QtY2hpbGQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgODIsIDgyLCAwLjEpO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24ubWlzc2luZyA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCBkZXRhaWxzLm1pc3NpbmcgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uZmFpbCA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCBkZXRhaWxzLmZhaWwgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uZmFpbHVyZSA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCBkZXRhaWxzLmZhaWx1cmUgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjUyNTI7XG4gIG1hc2staW1hZ2U6IHVybChcInt7IGNsb3NlLWNpcmNsZSB9fVwiKTtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmVycm9yLCAubWQtdHlwZXNldCBkZXRhaWxzLmVycm9yLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5kYW5nZXIsIC5tZC10eXBlc2V0IGRldGFpbHMuZGFuZ2VyIHtcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICNmZjE3NDQ7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5lcnJvciA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgZGV0YWlscy5lcnJvciA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uZGFuZ2VyID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmRhbmdlciA+IDpmaXJzdC1jaGlsZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyMywgNjgsIDAuMSk7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5lcnJvciA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCBkZXRhaWxzLmVycm9yID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmRhbmdlciA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCBkZXRhaWxzLmRhbmdlciA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmMTc0NDtcbiAgbWFzay1pbWFnZTogdXJsKFwie3sgZmxhc2gtY2lyY2xlIH19XCIpO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uYnVnLCAubWQtdHlwZXNldCBkZXRhaWxzLmJ1ZyB7XG4gIGJvcmRlci1sZWZ0LWNvbG9yOiAjZjUwMDU3O1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uYnVnID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmJ1ZyA+IDpmaXJzdC1jaGlsZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjQ1LCAwLCA4NywgMC4xKTtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmJ1ZyA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCBkZXRhaWxzLmJ1ZyA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1MDA1NztcbiAgbWFzay1pbWFnZTogdXJsKFwie3sgYnVnIH19XCIpO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uZXhhbXBsZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5leGFtcGxlIHtcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICM2NTFmZmY7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5leGFtcGxlID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmV4YW1wbGUgPiA6Zmlyc3QtY2hpbGQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDEwMSwgMzEsIDI1NSwgMC4xKTtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmV4YW1wbGUgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5leGFtcGxlID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjUxZmZmO1xuICBtYXNrLWltYWdlOiB1cmwoXCJ7eyBmb3JtYXQtbGlzdC1udW1iZXJlZCB9fVwiKTtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmNpdGUsIC5tZC10eXBlc2V0IGRldGFpbHMuY2l0ZSwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24ucXVvdGUsIC5tZC10eXBlc2V0IGRldGFpbHMucXVvdGUge1xuICBib3JkZXItbGVmdC1jb2xvcjogIzllOWU5ZTtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmNpdGUgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IGRldGFpbHMuY2l0ZSA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24ucXVvdGUgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IGRldGFpbHMucXVvdGUgPiA6Zmlyc3QtY2hpbGQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDE1OCwgMTU4LCAxNTgsIDAuMSk7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5jaXRlID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMuY2l0ZSA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5xdW90ZSA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCBkZXRhaWxzLnF1b3RlID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOWU5ZTllO1xuICBtYXNrLWltYWdlOiB1cmwoXCJ7eyBmb3JtYXQtcXVvdGUtY2xvc2UgfX1cIik7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi10aXRsZSwgLm1kLXR5cGVzZXQgc3VtbWFyeSB7XG4gIG1hcmdpbjogMCAtMC42cmVtO1xuICBwYWRkaW5nOiAwLjRyZW0gMC42cmVtIDAuNHJlbSAycmVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDY4LCAxMzgsIDI1NSwgMC4xKTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbn1cbltkaXI9cnRsXSAubWQtdHlwZXNldCAuYWRtb25pdGlvbi10aXRsZSwgW2Rpcj1ydGxdIC5tZC10eXBlc2V0IHN1bW1hcnkge1xuICBwYWRkaW5nOiAwLjRyZW0gMnJlbSAwLjRyZW0gMC42cmVtO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24tdGl0bGU6bGFzdC1jaGlsZCwgLm1kLXR5cGVzZXQgc3VtbWFyeTpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLXRpdGxlOjpiZWZvcmUsIC5tZC10eXBlc2V0IHN1bW1hcnk6OmJlZm9yZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDFyZW07XG4gIGhlaWdodDogMXJlbTtcbiAgbWFyZ2luLWxlZnQ6IC0xLjRyZW07XG4gIGJhY2tncm91bmQtY29sb3I6ICM0NDhhZmY7XG4gIG1hc2staW1hZ2U6IHVybChcInt7IHBlbmNpbCB9fVwiKTtcbiAgY29udGVudDogXCJcIjtcbn1cbltkaXI9cnRsXSAubWQtdHlwZXNldCAuYWRtb25pdGlvbi10aXRsZTo6YmVmb3JlLCBbZGlyPXJ0bF0gLm1kLXR5cGVzZXQgc3VtbWFyeTo6YmVmb3JlIHtcbiAgbWFyZ2luLXJpZ2h0OiAtMS40cmVtO1xuICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbn1cblxuLmNvZGVoaWxpdGUgLm8sIC5oaWdobGlnaHQgLm8ge1xuICBjb2xvcjogaW5oZXJpdDtcbn1cbi5jb2RlaGlsaXRlIC5vdywgLmhpZ2hsaWdodCAub3cge1xuICBjb2xvcjogaW5oZXJpdDtcbn1cbi5jb2RlaGlsaXRlIC5nZSwgLmhpZ2hsaWdodCAuZ2Uge1xuICBjb2xvcjogIzAwMDAwMDtcbn1cbi5jb2RlaGlsaXRlIC5nciwgLmhpZ2hsaWdodCAuZ3Ige1xuICBjb2xvcjogI0FBMDAwMDtcbn1cbi5jb2RlaGlsaXRlIC5naCwgLmhpZ2hsaWdodCAuZ2gge1xuICBjb2xvcjogIzk5OTk5OTtcbn1cbi5jb2RlaGlsaXRlIC5nbywgLmhpZ2hsaWdodCAuZ28ge1xuICBjb2xvcjogIzg4ODg4ODtcbn1cbi5jb2RlaGlsaXRlIC5ncCwgLmhpZ2hsaWdodCAuZ3Age1xuICBjb2xvcjogIzU1NTU1NTtcbn1cbi5jb2RlaGlsaXRlIC5ncywgLmhpZ2hsaWdodCAuZ3Mge1xuICBjb2xvcjogaW5oZXJpdDtcbn1cbi5jb2RlaGlsaXRlIC5ndSwgLmhpZ2hsaWdodCAuZ3Uge1xuICBjb2xvcjogI0FBQUFBQTtcbn1cbi5jb2RlaGlsaXRlIC5ndCwgLmhpZ2hsaWdodCAuZ3Qge1xuICBjb2xvcjogI0FBMDAwMDtcbn1cbi5jb2RlaGlsaXRlIC5nZCwgLmhpZ2hsaWdodCAuZ2Qge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZEREREO1xufVxuLmNvZGVoaWxpdGUgLmdpLCAuaGlnaGxpZ2h0IC5naSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNEREZGREQ7XG59XG4uY29kZWhpbGl0ZSAuaywgLmhpZ2hsaWdodCAuayB7XG4gIGNvbG9yOiAjM0I3OEU3O1xufVxuLmNvZGVoaWxpdGUgLmtjLCAuaGlnaGxpZ2h0IC5rYyB7XG4gIGNvbG9yOiAjQTcxRDVEO1xufVxuLmNvZGVoaWxpdGUgLmtkLCAuaGlnaGxpZ2h0IC5rZCB7XG4gIGNvbG9yOiAjM0I3OEU3O1xufVxuLmNvZGVoaWxpdGUgLmtuLCAuaGlnaGxpZ2h0IC5rbiB7XG4gIGNvbG9yOiAjM0I3OEU3O1xufVxuLmNvZGVoaWxpdGUgLmtwLCAuaGlnaGxpZ2h0IC5rcCB7XG4gIGNvbG9yOiAjQTcxRDVEO1xufVxuLmNvZGVoaWxpdGUgLmtyLCAuaGlnaGxpZ2h0IC5rciB7XG4gIGNvbG9yOiAjM0U2MUEyO1xufVxuLmNvZGVoaWxpdGUgLmt0LCAuaGlnaGxpZ2h0IC5rdCB7XG4gIGNvbG9yOiAjM0U2MUEyO1xufVxuLmNvZGVoaWxpdGUgLmMsIC5oaWdobGlnaHQgLmMge1xuICBjb2xvcjogIzk5OTk5OTtcbn1cbi5jb2RlaGlsaXRlIC5jbSwgLmhpZ2hsaWdodCAuY20ge1xuICBjb2xvcjogIzk5OTk5OTtcbn1cbi5jb2RlaGlsaXRlIC5jcCwgLmhpZ2hsaWdodCAuY3Age1xuICBjb2xvcjogIzY2NjY2Njtcbn1cbi5jb2RlaGlsaXRlIC5jMSwgLmhpZ2hsaWdodCAuYzEge1xuICBjb2xvcjogIzk5OTk5OTtcbn1cbi5jb2RlaGlsaXRlIC5jaCwgLmhpZ2hsaWdodCAuY2gge1xuICBjb2xvcjogIzk5OTk5OTtcbn1cbi5jb2RlaGlsaXRlIC5jcywgLmhpZ2hsaWdodCAuY3Mge1xuICBjb2xvcjogIzk5OTk5OTtcbn1cbi5jb2RlaGlsaXRlIC5uYSwgLmhpZ2hsaWdodCAubmEge1xuICBjb2xvcjogI0MyMTg1Qjtcbn1cbi5jb2RlaGlsaXRlIC5uYiwgLmhpZ2hsaWdodCAubmIge1xuICBjb2xvcjogI0MyMTg1Qjtcbn1cbi5jb2RlaGlsaXRlIC5icCwgLmhpZ2hsaWdodCAuYnAge1xuICBjb2xvcjogIzNFNjFBMjtcbn1cbi5jb2RlaGlsaXRlIC5uYywgLmhpZ2hsaWdodCAubmMge1xuICBjb2xvcjogI0MyMTg1Qjtcbn1cbi5jb2RlaGlsaXRlIC5ubywgLmhpZ2hsaWdodCAubm8ge1xuICBjb2xvcjogIzNFNjFBMjtcbn1cbi5jb2RlaGlsaXRlIC5uZCwgLmhpZ2hsaWdodCAubmQge1xuICBjb2xvcjogIzY2NjY2Njtcbn1cbi5jb2RlaGlsaXRlIC5uaSwgLmhpZ2hsaWdodCAubmkge1xuICBjb2xvcjogIzY2NjY2Njtcbn1cbi5jb2RlaGlsaXRlIC5uZSwgLmhpZ2hsaWdodCAubmUge1xuICBjb2xvcjogI0MyMTg1Qjtcbn1cbi5jb2RlaGlsaXRlIC5uZiwgLmhpZ2hsaWdodCAubmYge1xuICBjb2xvcjogI0MyMTg1Qjtcbn1cbi5jb2RlaGlsaXRlIC5ubCwgLmhpZ2hsaWdodCAubmwge1xuICBjb2xvcjogIzNCNTE3OTtcbn1cbi5jb2RlaGlsaXRlIC5ubiwgLmhpZ2hsaWdodCAubm4ge1xuICBjb2xvcjogI0VDNDA3QTtcbn1cbi5jb2RlaGlsaXRlIC5udCwgLmhpZ2hsaWdodCAubnQge1xuICBjb2xvcjogIzNCNzhFNztcbn1cbi5jb2RlaGlsaXRlIC5udiwgLmhpZ2hsaWdodCAubnYge1xuICBjb2xvcjogIzNFNjFBMjtcbn1cbi5jb2RlaGlsaXRlIC52YywgLmhpZ2hsaWdodCAudmMge1xuICBjb2xvcjogIzNFNjFBMjtcbn1cbi5jb2RlaGlsaXRlIC52ZywgLmhpZ2hsaWdodCAudmcge1xuICBjb2xvcjogIzNFNjFBMjtcbn1cbi5jb2RlaGlsaXRlIC52aSwgLmhpZ2hsaWdodCAudmkge1xuICBjb2xvcjogIzNFNjFBMjtcbn1cbi5jb2RlaGlsaXRlIC5ueCwgLmhpZ2hsaWdodCAubngge1xuICBjb2xvcjogI0VDNDA3QTtcbn1cbi5jb2RlaGlsaXRlIC5tLCAuaGlnaGxpZ2h0IC5tIHtcbiAgY29sb3I6ICNFNzRDM0M7XG59XG4uY29kZWhpbGl0ZSAubWYsIC5oaWdobGlnaHQgLm1mIHtcbiAgY29sb3I6ICNFNzRDM0M7XG59XG4uY29kZWhpbGl0ZSAubWgsIC5oaWdobGlnaHQgLm1oIHtcbiAgY29sb3I6ICNFNzRDM0M7XG59XG4uY29kZWhpbGl0ZSAubWksIC5oaWdobGlnaHQgLm1pIHtcbiAgY29sb3I6ICNFNzRDM0M7XG59XG4uY29kZWhpbGl0ZSAuaWwsIC5oaWdobGlnaHQgLmlsIHtcbiAgY29sb3I6ICNFNzRDM0M7XG59XG4uY29kZWhpbGl0ZSAubW8sIC5oaWdobGlnaHQgLm1vIHtcbiAgY29sb3I6ICNFNzRDM0M7XG59XG4uY29kZWhpbGl0ZSAucywgLmhpZ2hsaWdodCAucyB7XG4gIGNvbG9yOiAjMEQ5MDRGO1xufVxuLmNvZGVoaWxpdGUgLnNiLCAuaGlnaGxpZ2h0IC5zYiB7XG4gIGNvbG9yOiAjMEQ5MDRGO1xufVxuLmNvZGVoaWxpdGUgLnNjLCAuaGlnaGxpZ2h0IC5zYyB7XG4gIGNvbG9yOiAjMEQ5MDRGO1xufVxuLmNvZGVoaWxpdGUgLnNkLCAuaGlnaGxpZ2h0IC5zZCB7XG4gIGNvbG9yOiAjOTk5OTk5O1xufVxuLmNvZGVoaWxpdGUgLnMyLCAuaGlnaGxpZ2h0IC5zMiB7XG4gIGNvbG9yOiAjMEQ5MDRGO1xufVxuLmNvZGVoaWxpdGUgLnNlLCAuaGlnaGxpZ2h0IC5zZSB7XG4gIGNvbG9yOiAjMTgzNjkxO1xufVxuLmNvZGVoaWxpdGUgLnNoLCAuaGlnaGxpZ2h0IC5zaCB7XG4gIGNvbG9yOiAjMTgzNjkxO1xufVxuLmNvZGVoaWxpdGUgLnNpLCAuaGlnaGxpZ2h0IC5zaSB7XG4gIGNvbG9yOiAjMTgzNjkxO1xufVxuLmNvZGVoaWxpdGUgLnN4LCAuaGlnaGxpZ2h0IC5zeCB7XG4gIGNvbG9yOiAjMTgzNjkxO1xufVxuLmNvZGVoaWxpdGUgLnNyLCAuaGlnaGxpZ2h0IC5zciB7XG4gIGNvbG9yOiAjMDA5OTI2O1xufVxuLmNvZGVoaWxpdGUgLnMxLCAuaGlnaGxpZ2h0IC5zMSB7XG4gIGNvbG9yOiAjMEQ5MDRGO1xufVxuLmNvZGVoaWxpdGUgLnNzLCAuaGlnaGxpZ2h0IC5zcyB7XG4gIGNvbG9yOiAjMEQ5MDRGO1xufVxuLmNvZGVoaWxpdGUgLmVyciwgLmhpZ2hsaWdodCAuZXJyIHtcbiAgY29sb3I6ICNBNjE3MTc7XG59XG4uY29kZWhpbGl0ZSAudywgLmhpZ2hsaWdodCAudyB7XG4gIGNvbG9yOiB0cmFuc3BhcmVudDtcbn1cbi5jb2RlaGlsaXRlIC5obGwsIC5oaWdobGlnaHQgLmhsbCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW46IDAgLTAuNnJlbTtcbiAgcGFkZGluZzogMCAwLjZyZW07XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyMzUsIDU5LCAwLjUpO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDQuOTM3NWVtKSB7XG4gIC5jb2RlaGlsaXRlIC5obGwsIC5oaWdobGlnaHQgLmhsbCB7XG4gICAgbWFyZ2luOiAwIC0wLjhyZW07XG4gICAgcGFkZGluZzogMCAwLjhyZW07XG4gIH1cbn1cblxuLmNvZGVoaWxpdGV0YWJsZSwgLmhpZ2hsaWdodHRhYmxlIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uY29kZWhpbGl0ZXRhYmxlIHRib2R5LCAuaGlnaGxpZ2h0dGFibGUgdGJvZHksXG4uY29kZWhpbGl0ZXRhYmxlIHRkLFxuLmhpZ2hsaWdodHRhYmxlIHRkIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDA7XG59XG4uY29kZWhpbGl0ZXRhYmxlIHRyLCAuaGlnaGxpZ2h0dGFibGUgdHIge1xuICBkaXNwbGF5OiBmbGV4O1xufVxuLmNvZGVoaWxpdGV0YWJsZSBwcmUsIC5oaWdobGlnaHR0YWJsZSBwcmUsXG4uY29kZWhpbGl0ZXRhYmxlIC5saW5lbm9kaXYsXG4uaGlnaGxpZ2h0dGFibGUgLmxpbmVub2RpdiB7XG4gIG1hcmdpbjogMDtcbiAgYm9yZGVyLXJhZGl1czogMDtcbn1cbi5jb2RlaGlsaXRldGFibGUgLmxpbmVub2RpdiwgLmhpZ2hsaWdodHRhYmxlIC5saW5lbm9kaXYge1xuICBwYWRkaW5nOiAwLjUyNXJlbSAwLjZyZW07XG59XG4uY29kZWhpbGl0ZXRhYmxlIC5saW5lbm9zLCAuaGlnaGxpZ2h0dGFibGUgLmxpbmVub3Mge1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDAuMDVyZW0gdmFyKC0tbWQtY29kZS1iZy1jb2xvcik7XG4gIHVzZXItc2VsZWN0OiBub25lO1xufVxuLmNvZGVoaWxpdGV0YWJsZSAubGluZW5vcyBwcmUsIC5oaWdobGlnaHR0YWJsZSAubGluZW5vcyBwcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgY29sb3I6IGluaGVyaXQ7XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xufVxuLmNvZGVoaWxpdGV0YWJsZSAuY29kZSwgLmhpZ2hsaWdodHRhYmxlIC5jb2RlIHtcbiAgZmxleDogMTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLm1kLXR5cGVzZXQgPiAuY29kZWhpbGl0ZXRhYmxlLCAubWQtdHlwZXNldCA+IC5oaWdobGlnaHR0YWJsZSB7XG4gIG1hcmdpbjogMWVtIDA7XG4gIGJvcmRlci1yYWRpdXM6IDAuMmVtO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDQuOTM3NWVtKSB7XG4gIC5tZC10eXBlc2V0ID4gLmNvZGVoaWxpdGUsIC5tZC10eXBlc2V0ID4gLmhpZ2hsaWdodCB7XG4gICAgbWFyZ2luOiAxZW0gLTAuOHJlbTtcbiAgfVxuICAubWQtdHlwZXNldCA+IC5jb2RlaGlsaXRlIGNvZGUsIC5tZC10eXBlc2V0ID4gLmhpZ2hsaWdodCBjb2RlIHtcbiAgICBwYWRkaW5nOiAwLjUyNXJlbSAwLjhyZW07XG4gIH1cbiAgLm1kLXR5cGVzZXQgPiAuY29kZWhpbGl0ZXRhYmxlLCAubWQtdHlwZXNldCA+IC5oaWdobGlnaHR0YWJsZSB7XG4gICAgbWFyZ2luOiAxZW0gLTAuOHJlbTtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICB9XG4gIC5tZC10eXBlc2V0ID4gLmNvZGVoaWxpdGV0YWJsZSAubGluZW5vZGl2LCAubWQtdHlwZXNldCA+IC5oaWdobGlnaHR0YWJsZSAubGluZW5vZGl2IHtcbiAgICBwYWRkaW5nOiAwLjVyZW0gMC44cmVtO1xuICB9XG59XG5cbi5tZC10eXBlc2V0IFtpZF49XCJmbnJlZjpcIl0ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG4ubWQtdHlwZXNldCBbaWRePVwiZm5yZWY6XCJdOnRhcmdldCB7XG4gIG1hcmdpbi10b3A6IC0zLjhyZW07XG4gIHBhZGRpbmctdG9wOiAzLjhyZW07XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuLm1kLXR5cGVzZXQgW2lkXj1cImZuOlwiXTo6YmVmb3JlIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgaGVpZ2h0OiAwO1xuICBjb250ZW50OiBcIlwiO1xufVxuLm1kLXR5cGVzZXQgW2lkXj1cImZuOlwiXTp0YXJnZXQ6OmJlZm9yZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW4tdG9wOiAtMy41cmVtO1xuICBwYWRkaW5nLXRvcDogMy41cmVtO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cbi5tZC10eXBlc2V0IC5mb290bm90ZSB7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG4gIGZvbnQtc2l6ZTogMC42NHJlbTtcbn1cbi5tZC10eXBlc2V0IC5mb290bm90ZSBvbCB7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuLm1kLXR5cGVzZXQgLmZvb3Rub3RlIGxpIHtcbiAgdHJhbnNpdGlvbjogY29sb3IgMjUwbXM7XG59XG4ubWQtdHlwZXNldCAuZm9vdG5vdGUgbGk6dGFyZ2V0IHtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3IpO1xufVxuLm1kLXR5cGVzZXQgLmZvb3Rub3RlIGxpIDpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG4ubWQtdHlwZXNldCAuZm9vdG5vdGUgbGk6aG92ZXIgLmZvb3Rub3RlLWJhY2tyZWYsIC5tZC10eXBlc2V0IC5mb290bm90ZSBsaTp0YXJnZXQgLmZvb3Rub3RlLWJhY2tyZWYge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG4gIG9wYWNpdHk6IDE7XG59XG4ubWQtdHlwZXNldCAuZm9vdG5vdGUgbGk6aG92ZXIgLmZvb3Rub3RlLWJhY2tyZWY6aG92ZXIsIC5tZC10eXBlc2V0IC5mb290bm90ZSBsaTp0YXJnZXQgLmZvb3Rub3RlLWJhY2tyZWYge1xuICBjb2xvcjogdmFyKC0tbWQtYWNjZW50LWZnLWNvbG9yKTtcbn1cbi5tZC10eXBlc2V0IC5mb290bm90ZS1yZWYge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBvaW50ZXItZXZlbnRzOiBpbml0aWFsO1xufVxuLm1kLXR5cGVzZXQgLmZvb3Rub3RlLXJlZjo6YmVmb3JlIHtcbiAgZGlzcGxheTogaW5saW5lO1xuICBtYXJnaW46IDAgMC4yZW07XG4gIGJvcmRlci1sZWZ0OiAwLjA1cmVtIHNvbGlkIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpO1xuICBmb250LXNpemU6IDEuMjVlbTtcbiAgY29udGVudDogXCJcIjtcbiAgdmVydGljYWwtYWxpZ246IC0wLjI1cmVtO1xufVxuLm1kLXR5cGVzZXQgLmZvb3Rub3RlLWJhY2tyZWYge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwLjI1cmVtKTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDI1MG1zIDI1MG1zLCBjb2xvciAyNTBtcywgb3BhY2l0eSAxMjVtcyAyNTBtcztcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpO1xuICBmb250LXNpemU6IDA7XG4gIG9wYWNpdHk6IDA7XG4gIHZlcnRpY2FsLWFsaWduOiB0ZXh0LWJvdHRvbTtcbn1cbltkaXI9cnRsXSAubWQtdHlwZXNldCAuZm9vdG5vdGUtYmFja3JlZiB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMC4yNXJlbSk7XG59XG4ubWQtdHlwZXNldCAuZm9vdG5vdGUtYmFja3JlZjo6YmVmb3JlIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMC44cmVtO1xuICBoZWlnaHQ6IDAuOHJlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogY3VycmVudENvbG9yO1xuICBtYXNrLWltYWdlOiB1cmwoXCJ7eyBrZXlib2FyZC1yZXR1cm4gfX1cIik7XG4gIGNvbnRlbnQ6IFwiXCI7XG59XG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgLmZvb3Rub3RlLWJhY2tyZWY6OmJlZm9yZSBzdmcge1xuICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7XG59XG5cbi5tZC10eXBlc2V0IC5oZWFkZXJsaW5rIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW4tbGVmdDogMC41cmVtO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwLjI1cmVtKTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDI1MG1zIDI1MG1zLCBjb2xvciAyNTBtcywgb3BhY2l0eSAxMjVtcyAyNTBtcywgdmlzaWJpbGl0eSAwbXMgNTAwbXM7XG4gIG9wYWNpdHk6IDA7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbn1cbltkaXI9cnRsXSAubWQtdHlwZXNldCAuaGVhZGVybGluayB7XG4gIG1hcmdpbi1yaWdodDogMC41cmVtO1xuICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbn1cbmh0bWwgYm9keSAubWQtdHlwZXNldCAuaGVhZGVybGluayB7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVyKTtcbn1cbkBtZWRpYSBwcmludCB7XG4gIC5tZC10eXBlc2V0IC5oZWFkZXJsaW5rIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG4ubWQtdHlwZXNldCA6aG92ZXIgLmhlYWRlcmxpbmssXG4ubWQtdHlwZXNldCA6dGFyZ2V0IC5oZWFkZXJsaW5rLFxuLm1kLXR5cGVzZXQgLmhlYWRlcmxpbms6Zm9jdXMge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDI1MG1zIDI1MG1zLCBjb2xvciAyNTBtcywgb3BhY2l0eSAxMjVtcyAyNTBtcywgdmlzaWJpbGl0eSAwbXM7XG4gIG9wYWNpdHk6IDE7XG4gIHZpc2liaWxpdHk6IHZpc2libGU7XG59XG4ubWQtdHlwZXNldCAuaGVhZGVybGluazpmb2N1cyxcbi5tZC10eXBlc2V0IC5oZWFkZXJsaW5rOmhvdmVyLFxuLm1kLXR5cGVzZXQgOnRhcmdldCAuaGVhZGVybGluayB7XG4gIGNvbG9yOiB2YXIoLS1tZC1hY2NlbnQtZmctY29sb3IpO1xufVxuLm1kLXR5cGVzZXQgaDNbaWRdOjpiZWZvcmUsIC5tZC10eXBlc2V0IGgyW2lkXTo6YmVmb3JlLCAubWQtdHlwZXNldCBoMVtpZF06OmJlZm9yZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW4tdG9wOiAtMC40cmVtO1xuICBwYWRkaW5nLXRvcDogMC40cmVtO1xuICBjb250ZW50OiBcIlwiO1xufVxuLm1kLXR5cGVzZXQgaDNbaWRdOnRhcmdldDo6YmVmb3JlLCAubWQtdHlwZXNldCBoMltpZF06dGFyZ2V0OjpiZWZvcmUsIC5tZC10eXBlc2V0IGgxW2lkXTp0YXJnZXQ6OmJlZm9yZSB7XG4gIG1hcmdpbi10b3A6IC0zLjRyZW07XG4gIHBhZGRpbmctdG9wOiAzLjRyZW07XG59XG4ubWQtdHlwZXNldCBoNFtpZF06OmJlZm9yZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW4tdG9wOiAtMC40NXJlbTtcbiAgcGFkZGluZy10b3A6IDAuNDVyZW07XG4gIGNvbnRlbnQ6IFwiXCI7XG59XG4ubWQtdHlwZXNldCBoNFtpZF06dGFyZ2V0OjpiZWZvcmUge1xuICBtYXJnaW4tdG9wOiAtMy40NXJlbTtcbiAgcGFkZGluZy10b3A6IDMuNDVyZW07XG59XG4ubWQtdHlwZXNldCBoNltpZF06OmJlZm9yZSwgLm1kLXR5cGVzZXQgaDVbaWRdOjpiZWZvcmUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luLXRvcDogLTAuNnJlbTtcbiAgcGFkZGluZy10b3A6IDAuNnJlbTtcbiAgY29udGVudDogXCJcIjtcbn1cbi5tZC10eXBlc2V0IGg2W2lkXTp0YXJnZXQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgaDVbaWRdOnRhcmdldDo6YmVmb3JlIHtcbiAgbWFyZ2luLXRvcDogLTMuNnJlbTtcbiAgcGFkZGluZy10b3A6IDMuNnJlbTtcbn1cbi5tZC10eXBlc2V0IC5NSlhjLWRpc3BsYXkge1xuICBtYXJnaW46IDAuNzVlbSAwO1xuICBwYWRkaW5nOiAwLjc1ZW0gMDtcbiAgb3ZlcmZsb3c6IGF1dG87XG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ0LjkzNzVlbSkge1xuICAubWQtdHlwZXNldCA+IHAgPiAuTUpYYy1kaXNwbGF5IHtcbiAgICBtYXJnaW46IDAuNzVlbSAtMC44cmVtO1xuICAgIHBhZGRpbmc6IDAuMjVlbSAwLjhyZW07XG4gIH1cbn1cbi5tZC10eXBlc2V0IC5NYXRoSmF4X0NIVE1MIHtcbiAgb3V0bGluZTogMDtcbn1cblxuLm1kLXR5cGVzZXQgZGVsLmNyaXRpYyxcbi5tZC10eXBlc2V0IGlucy5jcml0aWMsXG4ubWQtdHlwZXNldCAuY3JpdGljLmNvbW1lbnQge1xuICBtYXJnaW46IDAgMC4yNWVtO1xuICBwYWRkaW5nOiAwLjA2MjVlbSAwO1xuICBib3JkZXItcmFkaXVzOiAwLjFyZW07XG4gIGJveC1kZWNvcmF0aW9uLWJyZWFrOiBjbG9uZTtcbn1cbi5tZC10eXBlc2V0IGRlbC5jcml0aWMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZEREREO1xuICBib3gtc2hhZG93OiAwLjI1ZW0gMCAwICNGRkREREQsIC0wLjI1ZW0gMCAwICNGRkREREQ7XG59XG4ubWQtdHlwZXNldCBpbnMuY3JpdGljIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0RERkZERDtcbiAgYm94LXNoYWRvdzogMC4yNWVtIDAgMCAjRERGRkRELCAtMC4yNWVtIDAgMCAjRERGRkREO1xufVxuLm1kLXR5cGVzZXQgLmNyaXRpYy5jb21tZW50IHtcbiAgY29sb3I6ICM5OTk5OTk7XG59XG4ubWQtdHlwZXNldCAuY3JpdGljLmNvbW1lbnQ6OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiLyogXCI7XG59XG4ubWQtdHlwZXNldCAuY3JpdGljLmNvbW1lbnQ6OmFmdGVyIHtcbiAgY29udGVudDogXCIgKi9cIjtcbn1cbi5tZC10eXBlc2V0IC5jcml0aWMuYmxvY2sge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luOiAxZW0gMDtcbiAgcGFkZGluZy1yaWdodDogMC44cmVtO1xuICBwYWRkaW5nLWxlZnQ6IDAuOHJlbTtcbiAgYm94LXNoYWRvdzogbm9uZTtcbn1cbi5tZC10eXBlc2V0IC5jcml0aWMuYmxvY2sgOmZpcnN0LWNoaWxkIHtcbiAgbWFyZ2luLXRvcDogMC41ZW07XG59XG4ubWQtdHlwZXNldCAuY3JpdGljLmJsb2NrIDpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLWJvdHRvbTogMC41ZW07XG59XG5cbi5tZC10eXBlc2V0IGRldGFpbHMge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZy10b3A6IDA7XG59XG4ubWQtdHlwZXNldCBkZXRhaWxzW29wZW5dID4gc3VtbWFyeTo6YWZ0ZXIge1xuICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xufVxuLm1kLXR5cGVzZXQgZGV0YWlsczpub3QoW29wZW5dKSB7XG4gIHBhZGRpbmctYm90dG9tOiAwO1xufVxuLm1kLXR5cGVzZXQgZGV0YWlsczpub3QoW29wZW5dKSA+IHN1bW1hcnkge1xuICBib3JkZXItYm90dG9tOiBub25lO1xufVxuLm1kLXR5cGVzZXQgZGV0YWlscyBzdW1tYXJ5IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nLXJpZ2h0OiAycmVtO1xufVxuW2Rpcj1ydGxdIC5tZC10eXBlc2V0IGRldGFpbHMgc3VtbWFyeSB7XG4gIHBhZGRpbmctbGVmdDogMnJlbTtcbn1cbi5tZC10eXBlc2V0IHN1bW1hcnkge1xuICBkaXNwbGF5OiBibG9jaztcbiAgb3V0bGluZTogbm9uZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLm1kLXR5cGVzZXQgc3VtbWFyeTo6LXdlYmtpdC1kZXRhaWxzLW1hcmtlciB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ubWQtdHlwZXNldCBzdW1tYXJ5OjphZnRlciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDAuNnJlbTtcbiAgd2lkdGg6IDFyZW07XG4gIGhlaWdodDogMXJlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG4gIG1hc2staW1hZ2U6IHVybChcInt7IGNoZXZyb24tZG93biB9fVwiKTtcbiAgY29udGVudDogXCJcIjtcbn1cbltkaXI9cnRsXSAubWQtdHlwZXNldCBzdW1tYXJ5OjphZnRlciB7XG4gIHJpZ2h0OiBpbml0aWFsO1xuICBsZWZ0OiAwLjZyZW07XG59XG5cbi5tZC10eXBlc2V0IC5lbW9qaW9uZSxcbi5tZC10eXBlc2V0IC50d2Vtb2ppLFxuLm1kLXR5cGVzZXQgLmdlbW9qaSB7XG4gIHdpZHRoOiAxcmVtO1xuICB2ZXJ0aWNhbC1hbGlnbjogdGV4dC10b3A7XG59XG5cbi5oaWdobGlnaHQgW2RhdGEtbGluZW5vc106OmJlZm9yZSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcG9zaXRpb246IHN0aWNreTtcbiAgbGVmdDogLTAuNnJlbTtcbiAgbWFyZ2luLXJpZ2h0OiAwLjZyZW07XG4gIG1hcmdpbi1sZWZ0OiAtMC42cmVtO1xuICBwYWRkaW5nLWxlZnQ6IDAuNnJlbTtcbiAgYm9yZGVyLXJpZ2h0OiAwLjA1cmVtIHNvbGlkIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0KTtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpO1xuICBjb250ZW50OiBhdHRyKGRhdGEtbGluZW5vcyk7XG4gIHVzZXItc2VsZWN0OiBub25lO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDQuOTM3NWVtKSB7XG4gIC5oaWdobGlnaHQgW2RhdGEtbGluZW5vc106OmJlZm9yZSB7XG4gICAgbGVmdDogLTEuNnJlbTtcbiAgICBtYXJnaW4tbGVmdDogLTEuNnJlbTtcbiAgICBwYWRkaW5nLWxlZnQ6IDEuNnJlbTtcbiAgfVxufVxuXG4ubWQtdHlwZXNldCBjb2RlLmNvZGVoaWxpdGUsIC5tZC10eXBlc2V0IGNvZGUuaGlnaGxpZ2h0IHtcbiAgbWFyZ2luOiAwIDAuMjk0MTE3NjQ3MWVtO1xuICBwYWRkaW5nOiAwLjA3MzUyOTQxMThlbSAwO1xufVxuXG4ubWQtdHlwZXNldCAudGFiYmVkLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xuICBvcmRlcjogOTk7XG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1jb2RlLWJnLWNvbG9yKTtcbn1cbi5tZC10eXBlc2V0IC50YWJiZWQtY29udGVudCBwcmUge1xuICBtYXJnaW46IDA7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBtYXJnaW46IDFlbSAwO1xuICBib3JkZXI6IDAuMDVyZW0gc29saWQgdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlc3QpO1xuICBib3JkZXItcmFkaXVzOiAwLjFyZW07XG59XG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGlucHV0IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5tZC10eXBlc2V0IC50YWJiZWQtc2V0ID4gaW5wdXQ6Y2hlY2tlZCArIGxhYmVsIHtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1tZC1hY2NlbnQtZmctY29sb3IpO1xuICBjb2xvcjogdmFyKC0tbWQtYWNjZW50LWZnLWNvbG9yKTtcbn1cbi5tZC10eXBlc2V0IC50YWJiZWQtc2V0ID4gaW5wdXQ6Y2hlY2tlZCArIGxhYmVsICsgLnRhYmJlZC1jb250ZW50IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDAgMC42cmVtO1xufVxuLm1kLXR5cGVzZXQgLnRhYmJlZC1zZXQgPiBpbnB1dDpjaGVja2VkICsgbGFiZWwgKyAudGFiYmVkLWNvbnRlbnQgPiA6bGFzdC1jaGlsZCB7XG4gIG1hcmdpbi1ib3R0b206IDAuNnJlbTtcbn1cbi5tZC10eXBlc2V0IC50YWJiZWQtc2V0ID4gaW5wdXQ6Y2hlY2tlZCArIGxhYmVsICsgLnRhYmJlZC1jb250ZW50ID4gcHJlOm9ubHktY2hpbGQsXG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGlucHV0OmNoZWNrZWQgKyBsYWJlbCArIC50YWJiZWQtY29udGVudCA+IC5oaWdobGlnaHQ6b25seS1jaGlsZCxcbi5tZC10eXBlc2V0IC50YWJiZWQtc2V0ID4gaW5wdXQ6Y2hlY2tlZCArIGxhYmVsICsgLnRhYmJlZC1jb250ZW50ID4gLmhpZ2hsaWdodHRhYmxlOm9ubHktY2hpbGQsXG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGlucHV0OmNoZWNrZWQgKyBsYWJlbCArIC50YWJiZWQtY29udGVudCA+IC5jb2RlaGlsaXRlOm9ubHktY2hpbGQsXG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGlucHV0OmNoZWNrZWQgKyBsYWJlbCArIC50YWJiZWQtY29udGVudCA+IC5jb2RlaGlsaXRldGFibGU6b25seS1jaGlsZCB7XG4gIG1hcmdpbjogMCAtMC42cmVtO1xufVxuLm1kLXR5cGVzZXQgLnRhYmJlZC1zZXQgPiBpbnB1dDpjaGVja2VkICsgbGFiZWwgKyAudGFiYmVkLWNvbnRlbnQgPiBwcmU6b25seS1jaGlsZCBwcmUsXG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGlucHV0OmNoZWNrZWQgKyBsYWJlbCArIC50YWJiZWQtY29udGVudCA+IC5oaWdobGlnaHQ6b25seS1jaGlsZCBwcmUsXG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGlucHV0OmNoZWNrZWQgKyBsYWJlbCArIC50YWJiZWQtY29udGVudCA+IC5oaWdobGlnaHR0YWJsZTpvbmx5LWNoaWxkIHByZSxcbi5tZC10eXBlc2V0IC50YWJiZWQtc2V0ID4gaW5wdXQ6Y2hlY2tlZCArIGxhYmVsICsgLnRhYmJlZC1jb250ZW50ID4gLmNvZGVoaWxpdGU6b25seS1jaGlsZCBwcmUsXG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGlucHV0OmNoZWNrZWQgKyBsYWJlbCArIC50YWJiZWQtY29udGVudCA+IC5jb2RlaGlsaXRldGFibGU6b25seS1jaGlsZCBwcmUge1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbn1cbi5tZC10eXBlc2V0IC50YWJiZWQtc2V0ID4gbGFiZWwge1xuICB3aWR0aDogYXV0bztcbiAgcGFkZGluZzogMC42cmVtO1xuICBwYWRkaW5nLWJvdHRvbTogMC41cmVtO1xuICB0cmFuc2l0aW9uOiBjb2xvciAxMjVtcywgYm9yZGVyIDI1MG1zO1xuICBib3JkZXItYm90dG9tOiAwLjFyZW0gc29saWQgdHJhbnNwYXJlbnQ7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG4gIGZvbnQtc2l6ZTogMC42NHJlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuaHRtbCAubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGxhYmVsOmhvdmVyIHtcbiAgY29sb3I6IHZhcigtLW1kLWFjY2VudC1mZy1jb2xvcik7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0NC45Mzc1ZW0pIHtcbiAgLm1kLXR5cGVzZXQgPiAudGFiYmVkLXNldCB7XG4gICAgbWFyZ2luOiAxZW0gLTAuOHJlbTtcbiAgICBib3JkZXI6IDA7XG4gICAgYm9yZGVyLXRvcDogMC4wNXJlbSBzb2xpZCB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVzdCk7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgfVxuICAubWQtdHlwZXNldCA+IC50YWJiZWQtc2V0IGNvZGUge1xuICAgIHBhZGRpbmc6IDAuNTI1cmVtIDAuOHJlbTtcbiAgfVxuICAubWQtdHlwZXNldCA+IC50YWJiZWQtc2V0IGlucHV0OmZpcnN0LWNoaWxkICsgbGFiZWwge1xuICAgIG1hcmdpbi1sZWZ0OiAwLjJyZW07XG4gIH1cbn1cblxuLm1kLXR5cGVzZXQgLnRhc2stbGlzdC1pdGVtIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG59XG4ubWQtdHlwZXNldCAudGFzay1saXN0LWl0ZW0gW3R5cGU9Y2hlY2tib3hdIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDAuNDVlbTtcbiAgbGVmdDogLTJlbTtcbn1cbltkaXI9cnRsXSAubWQtdHlwZXNldCAudGFzay1saXN0LWl0ZW0gW3R5cGU9Y2hlY2tib3hdIHtcbiAgcmlnaHQ6IC0yZW07XG4gIGxlZnQ6IGluaXRpYWw7XG59XG4ubWQtdHlwZXNldCAudGFzay1saXN0LWNvbnRyb2wgLnRhc2stbGlzdC1pbmRpY2F0b3I6OmJlZm9yZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwLjE1ZW07XG4gIGxlZnQ6IC0xLjVlbTtcbiAgd2lkdGg6IDEuMjVlbTtcbiAgaGVpZ2h0OiAxLjI1ZW07XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0KTtcbiAgbWFzay1pbWFnZTogdXJsKFwie3sgY2hlY2tib3gtYmxhbmstY2lyY2xlIH19XCIpO1xuICBjb250ZW50OiBcIlwiO1xufVxuW2Rpcj1ydGxdIC5tZC10eXBlc2V0IC50YXNrLWxpc3QtY29udHJvbCAudGFzay1saXN0LWluZGljYXRvcjo6YmVmb3JlIHtcbiAgcmlnaHQ6IC0xLjVlbTtcbiAgbGVmdDogaW5pdGlhbDtcbn1cbi5tZC10eXBlc2V0IC50YXNrLWxpc3QtY29udHJvbCBbdHlwZT1jaGVja2JveF06Y2hlY2tlZCArIC50YXNrLWxpc3QtaW5kaWNhdG9yOjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBlNjc2O1xuICBtYXNrLWltYWdlOiB1cmwoXCJ7eyBjaGVjay1jaXJjbGUgfX1cIik7XG59XG4ubWQtdHlwZXNldCAudGFzay1saXN0LWNvbnRyb2wgW3R5cGU9Y2hlY2tib3hdIHtcbiAgb3BhY2l0eTogMDtcbiAgei1pbmRleDogLTE7XG59IiwiLy8vL1xuLy8vIENvcHlyaWdodCAoYykgMjAxNi0yMDIwIE1hcnRpbiBEb25hdGggPG1hcnRpbi5kb25hdGhAc3F1aWRmdW5rLmNvbT5cbi8vL1xuLy8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLFxuLy8vIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vLyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSxcbi8vLyBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGVcbi8vLyBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy8vXG4vLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vL1xuLy8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTExcbi8vLyBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HXG4vLy8gRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUlxuLy8vIERFQUxJTkdTXG4vLy8vXG5cbi8vIHN0eWxlbGludC1kaXNhYmxlIG5vLWR1cGxpY2F0ZS1zZWxlY3RvcnNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gRW5mb3JjZSBjb3JyZWN0IGJveCBtb2RlbFxuaHRtbCB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbi8vIEFsbCBlbGVtZW50cyBzaGFsbCBpbmhlcml0IHRoZSBkb2N1bWVudCBkZWZhdWx0XG4qLFxuKjo6YmVmb3JlLFxuKjo6YWZ0ZXIge1xuICBib3gtc2l6aW5nOiBpbmhlcml0O1xufVxuXG4vLyBQcmV2ZW50IGFkanVzdG1lbnRzIG9mIGZvbnQgc2l6ZSBhZnRlciBvcmllbnRhdGlvbiBjaGFuZ2VzIGluIElFIGFuZCBpT1Ncbmh0bWwge1xuICB0ZXh0LXNpemUtYWRqdXN0OiBub25lO1xufVxuXG4vLyBSZW1vdmUgbWFyZ2luIGluIGFsbCBicm93c2Vyc1xuYm9keSB7XG4gIG1hcmdpbjogMDtcbn1cblxuLy8gUmVzZXQgaG9yaXpvbnRhbCBydWxlcyBpbiBGRlxuaHIge1xuICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XG59XG5cbi8vIFJlbW92ZSBnYXBzIGluIHVuZGVybGluZWQgbGlua3MgaW4gaU9TID49IDggYW5kIFNhZmFyaSA+PSA4XG5hIHtcbiAgLXdlYmtpdC10ZXh0LWRlY29yYXRpb24tc2tpcDogb2JqZWN0czsgLy8gc3R5bGVsaW50LWRpc2FibGUtbGluZVxufVxuXG4vLyBSZXNldCB0YXAgb3V0bGluZXMgb24gaU9TIGFuZCBBbmRyb2lkXG5hLFxuYnV0dG9uLFxubGFiZWwsXG5pbnB1dCB7XG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG5cbi8vIFJlc2V0IGxpbmsgc3R5bGVzXG5hIHtcbiAgY29sb3I6IGluaGVyaXQ7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLy8gTm9ybWFsaXplIGZvbnQtc2l6ZSBpbiBhbGwgYnJvd3NlcnNcbnNtYWxsIHtcbiAgZm9udC1zaXplOiA4MCU7XG59XG5cbi8vIFByZXZlbnQgc3Vic2NyaXB0IGFuZCBzdXBlcnNjcmlwdCBmcm9tIGFmZmVjdGluZyBsaW5lLWhlaWdodFxuc3ViLFxuc3VwIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmb250LXNpemU6IDgwJTtcbiAgbGluZS1oZWlnaHQ6IDA7XG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbn1cblxuLy8gQ29ycmVjdCBzdWJzY3JpcHQgb2Zmc2V0XG5zdWIge1xuICBib3R0b206IC0wLjI1ZW07XG59XG5cbi8vIENvcnJlY3Qgc3VwZXJzY3JpcHQgb2Zmc2V0XG5zdXAge1xuICB0b3A6IC0wLjVlbTtcbn1cblxuLy8gUmVtb3ZlIGJvcmRlcnMgb24gaW1hZ2VzXG5pbWcge1xuICBib3JkZXItc3R5bGU6IG5vbmU7XG59XG5cbi8vIFJlc2V0IHRhYmxlIHN0eWxlc1xudGFibGUge1xuICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlO1xuICBib3JkZXItc3BhY2luZzogMDtcbn1cblxuLy8gUmVzZXQgdGFibGUgY2VsbCBzdHlsZXNcbnRkLFxudGgge1xuICBmb250LXdlaWdodDogbm9ybWFsOyAvLyBzdHlsZWxpbnQtZGlzYWJsZS1saW5lXG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG59XG5cbi8vIFJlc2V0IChuYXRpdmUpIGJ1dHRvbiBzdHlsZXNcbmJ1dHRvbiB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgYm9yZGVyOiAwO1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgZm9udC1zaXplOiBpbmhlcml0O1xufVxuXG4vLyBSZXNldCAobmF0aXZlKSBpbnB1dCBzdHlsZXNcbmlucHV0IHtcbiAgYm9yZGVyOiAwO1xuICBvdXRsaW5lOiAwO1xufVxuIiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuaHRtbCB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbiosXG4qOjpiZWZvcmUsXG4qOjphZnRlciB7XG4gIGJveC1zaXppbmc6IGluaGVyaXQ7XG59XG5cbmh0bWwge1xuICAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IG5vbmU7XG4gICAgIC1tb3otdGV4dC1zaXplLWFkanVzdDogbm9uZTtcbiAgICAgIC1tcy10ZXh0LXNpemUtYWRqdXN0OiBub25lO1xuICAgICAgICAgIHRleHQtc2l6ZS1hZGp1c3Q6IG5vbmU7XG59XG5cbmJvZHkge1xuICBtYXJnaW46IDA7XG59XG5cbmhyIHtcbiAgb3ZlcmZsb3c6IHZpc2libGU7XG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xufVxuXG5hIHtcbiAgLXdlYmtpdC10ZXh0LWRlY29yYXRpb24tc2tpcDogb2JqZWN0cztcbn1cblxuYSxcbmJ1dHRvbixcbmxhYmVsLFxuaW5wdXQge1xuICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG5hIHtcbiAgY29sb3I6IGluaGVyaXQ7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuc21hbGwge1xuICBmb250LXNpemU6IDgwJTtcbn1cblxuc3ViLFxuc3VwIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmb250LXNpemU6IDgwJTtcbiAgbGluZS1oZWlnaHQ6IDA7XG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbn1cblxuc3ViIHtcbiAgYm90dG9tOiAtMC4yNWVtO1xufVxuXG5zdXAge1xuICB0b3A6IC0wLjVlbTtcbn1cblxuaW1nIHtcbiAgYm9yZGVyLXN0eWxlOiBub25lO1xufVxuXG50YWJsZSB7XG4gIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7XG4gIGJvcmRlci1zcGFjaW5nOiAwO1xufVxuXG50ZCxcbnRoIHtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcbn1cblxuYnV0dG9uIHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBib3JkZXI6IDA7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBmb250LXNpemU6IGluaGVyaXQ7XG59XG5cbmlucHV0IHtcbiAgYm9yZGVyOiAwO1xuICBvdXRsaW5lOiAwO1xufVxuXG46cm9vdCB7XG4gIC0tbWQtZGVmYXVsdC1mZy1jb2xvcjogaHNsYSgwLCAwJSwgMCUsIDAuODcpO1xuICAtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0OiBoc2xhKDAsIDAlLCAwJSwgMC41NCk7XG4gIC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcjogaHNsYSgwLCAwJSwgMCUsIDAuMjYpO1xuICAtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0OiBoc2xhKDAsIDAlLCAwJSwgMC4wNyk7XG4gIC0tbWQtZGVmYXVsdC1iZy1jb2xvcjogaHNsYSgwLCAwJSwgMTAwJSwgMSk7XG4gIC0tbWQtZGVmYXVsdC1iZy1jb2xvci0tbGlnaHQ6IGhzbGEoMCwgMCUsIDEwMCUsIDAuNyk7XG4gIC0tbWQtZGVmYXVsdC1iZy1jb2xvci0tbGlnaHRlcjogaHNsYSgwLCAwJSwgMTAwJSwgMC4zKTtcbiAgLS1tZC1kZWZhdWx0LWJnLWNvbG9yLS1saWdodGVzdDogaHNsYSgwLCAwJSwgMTAwJSwgMC4xMik7XG4gIC0tbWQtcHJpbWFyeS1mZy1jb2xvcjogaHNsYSgyMzFkZWcsIDQ4JSwgNDglLCAxKTtcbiAgLS1tZC1wcmltYXJ5LWZnLWNvbG9yLS1saWdodDogaHNsYSgyMzBkZWcsIDQ0JSwgNjQlLCAxKTtcbiAgLS1tZC1wcmltYXJ5LWZnLWNvbG9yLS1kYXJrOiBoc2xhKDIzMmRlZywgNTQlLCA0MSUsIDEpO1xuICAtLW1kLXByaW1hcnktYmctY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3IpO1xuICAtLW1kLXByaW1hcnktYmctY29sb3ItLWxpZ2h0OiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yLS1saWdodCk7XG4gIC0tbWQtYWNjZW50LWZnLWNvbG9yOiBoc2xhKDIzMWRlZywgOTklLCA2NiUsIDEpO1xuICAtLW1kLWFjY2VudC1mZy1jb2xvci0tdHJhbnNwYXJlbnQ6IGhzbGEoMjMxZGVnLCA5OSUsIDY2JSwgMC4xKTtcbiAgLS1tZC1hY2NlbnQtYmctY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3IpO1xuICAtLW1kLWFjY2VudC1iZy1jb2xvci0tbGlnaHQ6IHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3ItLWxpZ2h0KTtcbiAgLS1tZC1jb2RlLWJnLWNvbG9yOiBoc2xhKDAsIDAlLCA5Mi41JSwgMC41KTtcbiAgLS1tZC1jb2RlLWZnLWNvbG9yOiBoc2xhKDIwMCwgMTglLCAyNiUsIDEpO1xufVxuXG4ubWQtaWNvbiBzdmcge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEuMnJlbTtcbiAgaGVpZ2h0OiAxLjJyZW07XG4gIG1hcmdpbjogMCBhdXRvO1xuICBmaWxsOiBjdXJyZW50Q29sb3I7XG59XG5cbmJvZHkge1xuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbn1cblxuYm9keSxcbmlucHV0IHtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3IpO1xuICAtd2Via2l0LWZvbnQtZmVhdHVyZS1zZXR0aW5nczogXCJrZXJuXCIsIFwibGlnYVwiO1xuICAgICAgICAgIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogXCJrZXJuXCIsIFwibGlnYVwiO1xuICBmb250LWZhbWlseTogXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmO1xufVxuXG5jb2RlLFxucHJlLFxua2JkIHtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3IpO1xuICAtd2Via2l0LWZvbnQtZmVhdHVyZS1zZXR0aW5nczogXCJrZXJuXCI7XG4gICAgICAgICAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiBcImtlcm5cIjtcbiAgZm9udC1mYW1pbHk6IFwiQ291cmllciBOZXdcIiwgQ291cmllciwgbW9ub3NwYWNlO1xufVxuXG4ubWQtdHlwZXNldCB7XG4gIGZvbnQtc2l6ZTogMC44cmVtO1xuICBsaW5lLWhlaWdodDogMS42O1xuICAtd2Via2l0LXByaW50LWNvbG9yLWFkanVzdDogZXhhY3Q7XG59XG4ubWQtdHlwZXNldCBwLFxuLm1kLXR5cGVzZXQgdWwsXG4ubWQtdHlwZXNldCBvbCxcbi5tZC10eXBlc2V0IGJsb2NrcXVvdGUge1xuICBtYXJnaW46IDFlbSAwO1xufVxuLm1kLXR5cGVzZXQgaDEge1xuICBtYXJnaW46IDAgMCAycmVtO1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuICBmb250LXNpemU6IDEuNTYyNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjM7XG59XG4ubWQtdHlwZXNldCBoMiB7XG4gIG1hcmdpbjogMnJlbSAwIDAuOHJlbTtcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xuICBmb250LXdlaWdodDogMzAwO1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cbi5tZC10eXBlc2V0IGgzIHtcbiAgbWFyZ2luOiAxLjZyZW0gMCAwLjhyZW07XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG59XG4ubWQtdHlwZXNldCBoMiArIGgzIHtcbiAgbWFyZ2luLXRvcDogMC44cmVtO1xufVxuLm1kLXR5cGVzZXQgaDQge1xuICBtYXJnaW46IDAuOHJlbSAwO1xuICBmb250LXNpemU6IDAuOHJlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG59XG4ubWQtdHlwZXNldCBoNSxcbi5tZC10eXBlc2V0IGg2IHtcbiAgbWFyZ2luOiAwLjhyZW0gMDtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgZm9udC1zaXplOiAwLjY0cmVtO1xuICBmb250LXdlaWdodDogNzAwO1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcbn1cbi5tZC10eXBlc2V0IGg1IHtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbn1cbi5tZC10eXBlc2V0IGhyIHtcbiAgbWFyZ2luOiAxLjVlbSAwO1xuICBib3JkZXItYm90dG9tOiAwLjA1cmVtIGRvdHRlZCB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVyKTtcbn1cbi5tZC10eXBlc2V0IGEge1xuICBjb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1mZy1jb2xvcik7XG4gIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG59XG4ubWQtdHlwZXNldCBhLCAubWQtdHlwZXNldCBhOjpiZWZvcmUge1xuICB0cmFuc2l0aW9uOiBjb2xvciAxMjVtcztcbn1cbi5tZC10eXBlc2V0IGE6Zm9jdXMsIC5tZC10eXBlc2V0IGE6aG92ZXIge1xuICBjb2xvcjogdmFyKC0tbWQtYWNjZW50LWZnLWNvbG9yKTtcbn1cbi5tZC10eXBlc2V0IGNvZGUsXG4ubWQtdHlwZXNldCBwcmUsXG4ubWQtdHlwZXNldCBrYmQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1jb2RlLWJnLWNvbG9yKTtcbiAgY29sb3I6IHZhcigtLW1kLWNvZGUtZmctY29sb3IpO1xuICBmb250LXNpemU6IDg1JTtcbiAgZGlyZWN0aW9uOiBsdHI7XG59XG4ubWQtdHlwZXNldCBjb2RlIHtcbiAgbWFyZ2luOiAwIDAuMjk0MTE3NjQ3MWVtO1xuICBwYWRkaW5nOiAwLjA3MzUyOTQxMThlbSAwO1xuICBib3JkZXItcmFkaXVzOiAwLjFyZW07XG4gIGJveC1zaGFkb3c6IDAuMjk0MTE3NjQ3MWVtIDAgMCB2YXIoLS1tZC1jb2RlLWJnLWNvbG9yKSwgLTAuMjk0MTE3NjQ3MWVtIDAgMCB2YXIoLS1tZC1jb2RlLWJnLWNvbG9yKTtcbiAgd29yZC1icmVhazogYnJlYWstd29yZDtcbiAgLXdlYmtpdC1ib3gtZGVjb3JhdGlvbi1icmVhazogY2xvbmU7XG4gICAgICAgICAgYm94LWRlY29yYXRpb24tYnJlYWs6IGNsb25lO1xufVxuLm1kLXR5cGVzZXQgaDEgY29kZSxcbi5tZC10eXBlc2V0IGgyIGNvZGUsXG4ubWQtdHlwZXNldCBoMyBjb2RlLFxuLm1kLXR5cGVzZXQgaDQgY29kZSxcbi5tZC10eXBlc2V0IGg1IGNvZGUsXG4ubWQtdHlwZXNldCBoNiBjb2RlIHtcbiAgbWFyZ2luOiAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm94LXNoYWRvdzogbm9uZTtcbn1cbi5tZC10eXBlc2V0IGEgPiBjb2RlIHtcbiAgbWFyZ2luOiBpbmhlcml0O1xuICBwYWRkaW5nOiBpbmhlcml0O1xuICBib3JkZXItcmFkaXVzOiBpbml0aWFsO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xuICBjb2xvcjogaW5oZXJpdDtcbiAgYm94LXNoYWRvdzogbm9uZTtcbn1cbi5tZC10eXBlc2V0IHByZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luOiAxZW0gMDtcbiAgYm9yZGVyLXJhZGl1czogMC4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xuICAtd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgICAgICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcbn1cbi5tZC10eXBlc2V0IHByZSA+IGNvZGUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwLjUyNXJlbSAwLjZyZW07XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBmb250LXNpemU6IGluaGVyaXQ7XG4gIGJveC1zaGFkb3c6IG5vbmU7XG4gIC13ZWJraXQtYm94LWRlY29yYXRpb24tYnJlYWs6IHNsaWNlO1xuICAgICAgICAgIGJveC1kZWNvcmF0aW9uLWJyZWFrOiBzbGljZTtcbiAgb3ZlcmZsb3c6IGF1dG87XG4gIHdvcmQtYnJlYWs6IG5vcm1hbDtcbn1cbi5tZC10eXBlc2V0IHByZSA+IGNvZGU6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgd2lkdGg6IDAuMnJlbTtcbiAgaGVpZ2h0OiAwLjJyZW07XG59XG4ubWQtdHlwZXNldCBwcmUgPiBjb2RlOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpO1xufVxuLm1kLXR5cGVzZXQgcHJlID4gY29kZTo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1hY2NlbnQtZmctY29sb3IpO1xufVxuLm1kLXR5cGVzZXQga2JkIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwYWRkaW5nOiAwIDAuNTg4MjM1Mjk0MWVtO1xuICBib3JkZXItcmFkaXVzOiAwLjFyZW07XG4gIGZvbnQtc2l6ZTogMC43NWVtO1xuICBsaW5lLWhlaWdodDogMS41O1xuICBib3gtc2hhZG93OiAwIDAuMXJlbSAwIDAuMDVyZW0gdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlciksIDAgMC4xcmVtIDAgdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlciksIGluc2V0IDAgLTAuMXJlbSAwLjJyZW0gdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG4gIHZlcnRpY2FsLWFsaWduOiB0ZXh0LXRvcDtcbn1cbi5tZC10eXBlc2V0IG1hcmsge1xuICBtYXJnaW46IDAgMC4yNWVtO1xuICBwYWRkaW5nOiAwLjA2MjVlbSAwO1xuICBib3JkZXItcmFkaXVzOiAwLjFyZW07XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyMzUsIDU5LCAwLjUpO1xuICBib3gtc2hhZG93OiAwLjI1ZW0gMCAwIHJnYmEoMjU1LCAyMzUsIDU5LCAwLjUpLCAtMC4yNWVtIDAgMCByZ2JhKDI1NSwgMjM1LCA1OSwgMC41KTtcbiAgd29yZC1icmVhazogYnJlYWstd29yZDtcbiAgLXdlYmtpdC1ib3gtZGVjb3JhdGlvbi1icmVhazogY2xvbmU7XG4gICAgICAgICAgYm94LWRlY29yYXRpb24tYnJlYWs6IGNsb25lO1xufVxuLm1kLXR5cGVzZXQgYWJiciB7XG4gIGJvcmRlci1ib3R0b206IDAuMDVyZW0gZG90dGVkIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBjdXJzb3I6IGhlbHA7XG59XG4ubWQtdHlwZXNldCBzbWFsbCB7XG4gIG9wYWNpdHk6IDAuNzU7XG59XG4ubWQtdHlwZXNldCBzdXAsXG4ubWQtdHlwZXNldCBzdWIge1xuICBtYXJnaW4tbGVmdDogMC4wNzgxMjVlbTtcbn1cbltkaXI9cnRsXSAubWQtdHlwZXNldCBzdXAsXG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgc3ViIHtcbiAgbWFyZ2luLXJpZ2h0OiAwLjA3ODEyNWVtO1xuICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbn1cbi5tZC10eXBlc2V0IGJsb2NrcXVvdGUge1xuICBwYWRkaW5nLWxlZnQ6IDAuNnJlbTtcbiAgYm9yZGVyLWxlZnQ6IDAuMnJlbSBzb2xpZCB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVyKTtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbn1cbltkaXI9cnRsXSAubWQtdHlwZXNldCBibG9ja3F1b3RlIHtcbiAgcGFkZGluZy1yaWdodDogMC42cmVtO1xuICBwYWRkaW5nLWxlZnQ6IGluaXRpYWw7XG4gIGJvcmRlci1yaWdodDogMC4ycmVtIHNvbGlkIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpO1xuICBib3JkZXItbGVmdDogaW5pdGlhbDtcbn1cbi5tZC10eXBlc2V0IHVsIHtcbiAgbGlzdC1zdHlsZS10eXBlOiBkaXNjO1xufVxuLm1kLXR5cGVzZXQgdWwsXG4ubWQtdHlwZXNldCBvbCB7XG4gIG1hcmdpbi1sZWZ0OiAwLjYyNWVtO1xuICBwYWRkaW5nOiAwO1xufVxuW2Rpcj1ydGxdIC5tZC10eXBlc2V0IHVsLFxuW2Rpcj1ydGxdIC5tZC10eXBlc2V0IG9sIHtcbiAgbWFyZ2luLXJpZ2h0OiAwLjYyNWVtO1xuICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbn1cbi5tZC10eXBlc2V0IHVsIG9sLFxuLm1kLXR5cGVzZXQgb2wgb2wge1xuICBsaXN0LXN0eWxlLXR5cGU6IGxvd2VyLWFscGhhO1xufVxuLm1kLXR5cGVzZXQgdWwgb2wgb2wsXG4ubWQtdHlwZXNldCBvbCBvbCBvbCB7XG4gIGxpc3Qtc3R5bGUtdHlwZTogbG93ZXItcm9tYW47XG59XG4ubWQtdHlwZXNldCB1bCBsaSxcbi5tZC10eXBlc2V0IG9sIGxpIHtcbiAgbWFyZ2luLWJvdHRvbTogMC41ZW07XG4gIG1hcmdpbi1sZWZ0OiAxLjI1ZW07XG59XG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgdWwgbGksXG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgb2wgbGkge1xuICBtYXJnaW4tcmlnaHQ6IDEuMjVlbTtcbiAgbWFyZ2luLWxlZnQ6IGluaXRpYWw7XG59XG4ubWQtdHlwZXNldCB1bCBsaSBwLFxuLm1kLXR5cGVzZXQgdWwgbGkgYmxvY2txdW90ZSxcbi5tZC10eXBlc2V0IG9sIGxpIHAsXG4ubWQtdHlwZXNldCBvbCBsaSBibG9ja3F1b3RlIHtcbiAgbWFyZ2luOiAwLjVlbSAwO1xufVxuLm1kLXR5cGVzZXQgdWwgbGk6bGFzdC1jaGlsZCxcbi5tZC10eXBlc2V0IG9sIGxpOmxhc3QtY2hpbGQge1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuLm1kLXR5cGVzZXQgdWwgbGkgdWwsXG4ubWQtdHlwZXNldCB1bCBsaSBvbCxcbi5tZC10eXBlc2V0IG9sIGxpIHVsLFxuLm1kLXR5cGVzZXQgb2wgbGkgb2wge1xuICBtYXJnaW46IDAuNWVtIDAgMC41ZW0gMC42MjVlbTtcbn1cbltkaXI9cnRsXSAubWQtdHlwZXNldCB1bCBsaSB1bCxcbltkaXI9cnRsXSAubWQtdHlwZXNldCB1bCBsaSBvbCxcbltkaXI9cnRsXSAubWQtdHlwZXNldCBvbCBsaSB1bCxcbltkaXI9cnRsXSAubWQtdHlwZXNldCBvbCBsaSBvbCB7XG4gIG1hcmdpbi1yaWdodDogMC42MjVlbTtcbiAgbWFyZ2luLWxlZnQ6IGluaXRpYWw7XG59XG4ubWQtdHlwZXNldCBkZCB7XG4gIG1hcmdpbjogMWVtIDAgMWVtIDEuODc1ZW07XG59XG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgZGQge1xuICBtYXJnaW4tcmlnaHQ6IDEuODc1ZW07XG4gIG1hcmdpbi1sZWZ0OiBpbml0aWFsO1xufVxuLm1kLXR5cGVzZXQgaWZyYW1lLFxuLm1kLXR5cGVzZXQgaW1nLFxuLm1kLXR5cGVzZXQgc3ZnIHtcbiAgbWF4LXdpZHRoOiAxMDAlO1xufVxuLm1kLXR5cGVzZXQgdGFibGU6bm90KFtjbGFzc10pIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIGJvcmRlci1yYWRpdXM6IDAuMXJlbTtcbiAgYmFja2dyb3VuZDogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gIGZvbnQtc2l6ZTogMC42NHJlbTtcbiAgYm94LXNoYWRvdzogMCAwLjJyZW0gMC41cmVtIHJnYmEoMCwgMCwgMCwgMC4wNSksIDAgMCAwLjA1cmVtIHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgb3ZlcmZsb3c6IGF1dG87XG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcbn1cbi5tZC10eXBlc2V0IHRhYmxlOm5vdChbY2xhc3NdKSArICoge1xuICBtYXJnaW4tdG9wOiAxLjVlbTtcbn1cbi5tZC10eXBlc2V0IHRhYmxlOm5vdChbY2xhc3NdKSB0aDpub3QoW2FsaWduXSksXG4ubWQtdHlwZXNldCB0YWJsZTpub3QoW2NsYXNzXSkgdGQ6bm90KFthbGlnbl0pIHtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cbltkaXI9cnRsXSAubWQtdHlwZXNldCB0YWJsZTpub3QoW2NsYXNzXSkgdGg6bm90KFthbGlnbl0pLFxuW2Rpcj1ydGxdIC5tZC10eXBlc2V0IHRhYmxlOm5vdChbY2xhc3NdKSB0ZDpub3QoW2FsaWduXSkge1xuICB0ZXh0LWFsaWduOiByaWdodDtcbn1cbi5tZC10eXBlc2V0IHRhYmxlOm5vdChbY2xhc3NdKSB0aCB7XG4gIG1pbi13aWR0aDogNXJlbTtcbiAgcGFkZGluZzogMC42cmVtIDAuOHJlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG59XG4ubWQtdHlwZXNldCB0YWJsZTpub3QoW2NsYXNzXSkgdGQge1xuICBwYWRkaW5nOiAwLjZyZW0gMC44cmVtO1xuICBib3JkZXItdG9wOiAwLjA1cmVtIHNvbGlkIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0KTtcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcbn1cbi5tZC10eXBlc2V0IHRhYmxlOm5vdChbY2xhc3NdKSB0ciB7XG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMTI1bXM7XG59XG4ubWQtdHlwZXNldCB0YWJsZTpub3QoW2NsYXNzXSkgdHI6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDM1KTtcbiAgYm94LXNoYWRvdzogMCAwLjA1cmVtIDAgdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcikgaW5zZXQ7XG59XG4ubWQtdHlwZXNldCB0YWJsZTpub3QoW2NsYXNzXSkgdHI6Zmlyc3QtY2hpbGQgdGQge1xuICBib3JkZXItdG9wOiAwO1xufVxuLm1kLXR5cGVzZXQgdGFibGU6bm90KFtjbGFzc10pIGEge1xuICB3b3JkLWJyZWFrOiBub3JtYWw7XG59XG4ubWQtdHlwZXNldF9fc2Nyb2xsd3JhcCB7XG4gIG1hcmdpbjogMWVtIC0wLjhyZW07XG4gIG92ZXJmbG93LXg6IGF1dG87XG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcbn1cbi5tZC10eXBlc2V0IC5tZC10eXBlc2V0X190YWJsZSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWFyZ2luLWJvdHRvbTogMC41ZW07XG4gIHBhZGRpbmc6IDAgMC44cmVtO1xufVxuLm1kLXR5cGVzZXQgLm1kLXR5cGVzZXRfX3RhYmxlIHRhYmxlIHtcbiAgZGlzcGxheTogdGFibGU7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW46IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbmh0bWwge1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3IpO1xuICBmb250LXNpemU6IDEyNSU7XG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcbn1cblxuYm9keSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6IDEwMCU7XG4gIG1pbi1oZWlnaHQ6IDEwMCU7XG4gIGZvbnQtc2l6ZTogMC41cmVtO1xufVxuXG5ociB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBoZWlnaHQ6IDAuMDVyZW07XG4gIHBhZGRpbmc6IDA7XG4gIGJvcmRlcjogMDtcbn1cblxuLm1kLWdyaWQge1xuICBtYXgtd2lkdGg6IDYxcmVtO1xuICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xufVxuXG4ubWQtY29udGFpbmVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZmxleC1ncm93OiAxO1xufVxuXG4ubWQtbWFpbiB7XG4gIGZsZXgtZ3JvdzogMTtcbn1cbi5tZC1tYWluX19pbm5lciB7XG4gIGhlaWdodDogMTAwJTtcbiAgcGFkZGluZy10b3A6IDEuNXJlbTtcbiAgcGFkZGluZy1ib3R0b206IDAuMDVyZW07XG59XG5cbi5tZC1lbGxpcHNpcyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLm1kLXRvZ2dsZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5tZC1vdmVybGF5IHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIHdpZHRoOiAwO1xuICBoZWlnaHQ6IDA7XG4gIHRyYW5zaXRpb246IHdpZHRoIDBtcyAyNTBtcywgaGVpZ2h0IDBtcyAyNTBtcywgb3BhY2l0eSAyNTBtcztcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuICBvcGFjaXR5OiAwO1xuICB6LWluZGV4OiAzO1xufVxuXG4ubWQtc2tpcCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgbWFyZ2luOiAwLjVyZW07XG4gIHBhZGRpbmc6IDAuM3JlbSAwLjVyZW07XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwLjRyZW0pO1xuICBib3JkZXItcmFkaXVzOiAwLjFyZW07XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3IpO1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gIGZvbnQtc2l6ZTogMC42NHJlbTtcbiAgb3BhY2l0eTogMDtcbn1cbi5tZC1za2lwOmZvY3VzIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMjUwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSwgb3BhY2l0eSAxNzVtcyA3NW1zO1xuICBvcGFjaXR5OiAxO1xuICB6LWluZGV4OiAxMDtcbn1cblxuQHBhZ2Uge1xuICBtYXJnaW46IDI1bW07XG59XG4ubWQtYW5ub3VuY2Uge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yKTtcbn1cbi5tZC1hbm5vdW5jZV9faW5uZXIge1xuICBtaW4taGVpZ2h0OiAyLjRyZW07XG4gIHBhZGRpbmc6IDAgMC44cmVtO1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gIGZvbnQtc2l6ZTogMC43cmVtO1xuICBsaW5lLWhlaWdodDogMi40cmVtO1xufVxuXG4ubWQtY2xpcGJvYXJkIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDAuNHJlbTtcbiAgcmlnaHQ6IDAuNHJlbTtcbiAgd2lkdGg6IDEuMnJlbTtcbiAgaGVpZ2h0OiAxLjJyZW07XG4gIHRyYW5zaXRpb246IGNvbG9yIDI1MG1zO1xuICBib3JkZXItcmFkaXVzOiAwLjFyZW07XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVzdCk7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgei1pbmRleDogMTtcbiAgLXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgICAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xufVxuLm1kLWNsaXBib2FyZCBzdmcge1xuICB3aWR0aDogMC45cmVtO1xuICBoZWlnaHQ6IDAuOXJlbTtcbn1cbnByZTpob3ZlciAubWQtY2xpcGJvYXJkIHtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbn1cbnByZSAubWQtY2xpcGJvYXJkOmZvY3VzLCBwcmUgLm1kLWNsaXBib2FyZDpob3ZlciB7XG4gIGNvbG9yOiB2YXIoLS1tZC1hY2NlbnQtZmctY29sb3IpO1xufVxuLm1kLWNvbnRlbnRfX2lubmVyIHtcbiAgbWFyZ2luOiAwIDAuOHJlbSAxLjJyZW07XG4gIHBhZGRpbmctdG9wOiAwLjZyZW07XG59XG4ubWQtY29udGVudF9faW5uZXI6OmJlZm9yZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBoZWlnaHQ6IDAuNHJlbTtcbiAgY29udGVudDogXCJcIjtcbn1cbi5tZC1jb250ZW50X19pbm5lciA+IDpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cbi5tZC1jb250ZW50X19idXR0b24ge1xuICBtYXJnaW46IDAuNHJlbSAwO1xuICBtYXJnaW4tbGVmdDogMC40cmVtO1xuICBwYWRkaW5nOiAwO1xuICBmbG9hdDogcmlnaHQ7XG59XG5bZGlyPXJ0bF0gLm1kLWNvbnRlbnRfX2J1dHRvbiB7XG4gIG1hcmdpbi1yaWdodDogMC40cmVtO1xuICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbiAgZmxvYXQ6IGxlZnQ7XG59XG5bZGlyPXJ0bF0gLm1kLWNvbnRlbnRfX2J1dHRvbiBzdmcge1xuICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7XG59XG4ubWQtdHlwZXNldCAubWQtY29udGVudF9fYnV0dG9uIHtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpO1xufVxuLm1kLWNvbnRlbnRfX2J1dHRvbiBzdmcge1xuICBkaXNwbGF5OiBpbmxpbmU7XG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG59XG5cbi5tZC1kaWFsb2cge1xuICBib3gtc2hhZG93OiAwIDJweCAycHggMCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwIDFweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpLCAwIDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMik7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHJpZ2h0OiAwLjhyZW07XG4gIGJvdHRvbTogMC44cmVtO1xuICBsZWZ0OiBpbml0aWFsO1xuICBtaW4td2lkdGg6IDExLjFyZW07XG4gIHBhZGRpbmc6IDAuNHJlbSAwLjZyZW07XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDBtcyA0MDBtcywgb3BhY2l0eSA0MDBtcztcbiAgYm9yZGVyOiBub25lO1xuICBib3JkZXItcmFkaXVzOiAwLjFyZW07XG4gIGJhY2tncm91bmQ6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3IpO1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gIGZvbnQtc2l6ZTogMC43cmVtO1xuICBvcGFjaXR5OiAwO1xuICB6LWluZGV4OiAyO1xufVxuW2Rpcj1ydGxdIC5tZC1kaWFsb2cge1xuICByaWdodDogaW5pdGlhbDtcbiAgbGVmdDogMC44cmVtO1xufVxuLm1kLWRpYWxvZ1tkYXRhLW1kLXN0YXRlPW9wZW5dIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMDc1LCAwLjg1LCAwLjE3NSwgMSksIG9wYWNpdHkgNDAwbXM7XG4gIG9wYWNpdHk6IDE7XG59XG5cbi5tZC1oZWFkZXIge1xuICBwb3NpdGlvbjogLXdlYmtpdC1zdGlja3k7XG4gIHBvc2l0aW9uOiBzdGlja3k7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGxlZnQ6IDA7XG4gIGhlaWdodDogMi40cmVtO1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDI1MG1zLCBjb2xvciAyNTBtcztcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1mZy1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1tZC1wcmltYXJ5LWJnLWNvbG9yKTtcbiAgYm94LXNoYWRvdzogMCAwIDAuMnJlbSByZ2JhKDAsIDAsIDAsIDApLCAwIDAuMnJlbSAwLjRyZW0gcmdiYSgwLCAwLCAwLCAwKTtcbiAgei1pbmRleDogMjtcbn1cbi5uby1qcyAubWQtaGVhZGVyIHtcbiAgdHJhbnNpdGlvbjogbm9uZTtcbiAgYm94LXNoYWRvdzogbm9uZTtcbn1cbi5tZC1oZWFkZXJbZGF0YS1tZC1zdGF0ZT1zaGFkb3ddIHtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAyNTBtcywgY29sb3IgMjUwbXMsIGJveC1zaGFkb3cgMjUwbXM7XG4gIGJveC1zaGFkb3c6IDAgMCAwLjJyZW0gcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDAuMnJlbSAwLjRyZW0gcmdiYSgwLCAwLCAwLCAwLjIpO1xufVxuXG4ubWQtaGVhZGVyLW5hdiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBhZGRpbmc6IDAgMC4ycmVtO1xufVxuLm1kLWhlYWRlci1uYXZfX2J1dHRvbiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luOiAwLjJyZW07XG4gIHBhZGRpbmc6IDAuNHJlbTtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAyNTBtcztcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB6LWluZGV4OiAxO1xufVxuW2Rpcj1ydGxdIC5tZC1oZWFkZXItbmF2X19idXR0b24gc3ZnIHtcbiAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpO1xufVxuLm1kLWhlYWRlci1uYXZfX2J1dHRvbjpmb2N1cywgLm1kLWhlYWRlci1uYXZfX2J1dHRvbjpob3ZlciB7XG4gIG9wYWNpdHk6IDAuNztcbn1cbi5tZC1oZWFkZXItbmF2X19idXR0b24ubWQtbG9nbyB7XG4gIG1hcmdpbjogMC4ycmVtO1xuICBwYWRkaW5nOiAwLjRyZW07XG59XG4ubWQtaGVhZGVyLW5hdl9fYnV0dG9uLm1kLWxvZ28gaW1nLFxuLm1kLWhlYWRlci1uYXZfX2J1dHRvbi5tZC1sb2dvIHN2ZyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMS4ycmVtO1xuICBoZWlnaHQ6IDEuMnJlbTtcbiAgZmlsbDogY3VycmVudENvbG9yO1xufVxuLm5vLWpzIC5tZC1oZWFkZXItbmF2X19idXR0b25bZm9yPV9fc2VhcmNoXSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ubWQtaGVhZGVyLW5hdl9fdG9waWMge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogMCAxcmVtO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMSwgMC43LCAwLjEsIDEpLCBvcGFjaXR5IDE1MG1zO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgLXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgICAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xufVxuLm1kLWhlYWRlci1uYXZfX3RvcGljICsgLm1kLWhlYWRlci1uYXZfX3RvcGljIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEuMjVyZW0pO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDEsIDAuNywgMC4xLCAwLjEpLCBvcGFjaXR5IDE1MG1zO1xuICBvcGFjaXR5OiAwO1xuICB6LWluZGV4OiAtMTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5bZGlyPXJ0bF0gLm1kLWhlYWRlci1uYXZfX3RvcGljICsgLm1kLWhlYWRlci1uYXZfX3RvcGljIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xLjI1cmVtKTtcbn1cbi5uby1qcyAubWQtaGVhZGVyLW5hdl9fdG9waWMge1xuICBwb3NpdGlvbjogaW5pdGlhbDtcbn1cbi5uby1qcyAubWQtaGVhZGVyLW5hdl9fdG9waWMgKyAubWQtaGVhZGVyLW5hdl9fdG9waWMge1xuICBkaXNwbGF5OiBub25lO1xufVxuLm1kLWhlYWRlci1uYXZfX3RpdGxlIHtcbiAgZmxleC1ncm93OiAxO1xuICBmb250LXNpemU6IDAuOXJlbTtcbiAgbGluZS1oZWlnaHQ6IDIuNHJlbTtcbn1cbi5tZC1oZWFkZXItbmF2X190aXRsZVtkYXRhLW1kLXN0YXRlPWFjdGl2ZV0gLm1kLWhlYWRlci1uYXZfX3RvcGljIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xLjI1cmVtKTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigxLCAwLjcsIDAuMSwgMC4xKSwgb3BhY2l0eSAxNTBtcztcbiAgb3BhY2l0eTogMDtcbiAgei1pbmRleDogLTE7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuW2Rpcj1ydGxdIC5tZC1oZWFkZXItbmF2X190aXRsZVtkYXRhLW1kLXN0YXRlPWFjdGl2ZV0gLm1kLWhlYWRlci1uYXZfX3RvcGljIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEuMjVyZW0pO1xufVxuLm1kLWhlYWRlci1uYXZfX3RpdGxlW2RhdGEtbWQtc3RhdGU9YWN0aXZlXSAubWQtaGVhZGVyLW5hdl9fdG9waWMgKyAubWQtaGVhZGVyLW5hdl9fdG9waWMge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4xLCAwLjcsIDAuMSwgMSksIG9wYWNpdHkgMTUwbXM7XG4gIG9wYWNpdHk6IDE7XG4gIHotaW5kZXg6IDA7XG4gIHBvaW50ZXItZXZlbnRzOiBpbml0aWFsO1xufVxuLm1kLWhlYWRlci1uYXZfX3RpdGxlID4gLm1kLWhlYWRlci1uYXZfX2VsbGlwc2lzIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuLm1kLWhlYWRlci1uYXZfX3NvdXJjZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5tZC1oZXJvIHtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAyNTBtcztcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1mZy1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1tZC1wcmltYXJ5LWJnLWNvbG9yKTtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm1kLWhlcm9fX2lubmVyIHtcbiAgbWFyZ2luLXRvcDogMXJlbTtcbiAgcGFkZGluZzogMC44cmVtIDAuOHJlbSAwLjRyZW07XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4xLCAwLjcsIDAuMSwgMSksIG9wYWNpdHkgMjUwbXM7XG4gIHRyYW5zaXRpb24tZGVsYXk6IDEwMG1zO1xufVxuW2RhdGEtbWQtc3RhdGU9aGlkZGVuXSAubWQtaGVyb19faW5uZXIge1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDAuNjI1cmVtKTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDBtcyA0MDBtcywgb3BhY2l0eSAxMDBtcyAwbXM7XG4gIG9wYWNpdHk6IDA7XG59XG4ubWQtaGVyby0tZXhwYW5kIC5tZC1oZXJvX19pbm5lciB7XG4gIG1hcmdpbi1ib3R0b206IDEuMnJlbTtcbn1cblxuLm1kLWZvb3RlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3IpO1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG59XG5cbi5tZC1mb290ZXItbmF2X19pbm5lciB7XG4gIHBhZGRpbmc6IDAuMnJlbTtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4ubWQtZm9vdGVyLW5hdl9fbGluayB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBhZGRpbmctdG9wOiAxLjRyZW07XG4gIHBhZGRpbmctYm90dG9tOiAwLjRyZW07XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMjUwbXM7XG59XG4ubWQtZm9vdGVyLW5hdl9fbGluazpmb2N1cywgLm1kLWZvb3Rlci1uYXZfX2xpbms6aG92ZXIge1xuICBvcGFjaXR5OiAwLjc7XG59XG4ubWQtZm9vdGVyLW5hdl9fbGluay0tcHJldiB7XG4gIHdpZHRoOiAyNSU7XG4gIGZsb2F0OiBsZWZ0O1xufVxuW2Rpcj1ydGxdIC5tZC1mb290ZXItbmF2X19saW5rLS1wcmV2IHtcbiAgZmxvYXQ6IHJpZ2h0O1xufVxuW2Rpcj1ydGxdIC5tZC1mb290ZXItbmF2X19saW5rLS1wcmV2IHN2ZyB7XG4gIHRyYW5zZm9ybTogc2NhbGVYKC0xKTtcbn1cbi5tZC1mb290ZXItbmF2X19saW5rLS1uZXh0IHtcbiAgd2lkdGg6IDc1JTtcbiAgZmxvYXQ6IHJpZ2h0O1xuICB0ZXh0LWFsaWduOiByaWdodDtcbn1cbltkaXI9cnRsXSAubWQtZm9vdGVyLW5hdl9fbGluay0tbmV4dCB7XG4gIGZsb2F0OiBsZWZ0O1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuW2Rpcj1ydGxdIC5tZC1mb290ZXItbmF2X19saW5rLS1uZXh0IHN2ZyB7XG4gIHRyYW5zZm9ybTogc2NhbGVYKC0xKTtcbn1cbi5tZC1mb290ZXItbmF2X190aXRsZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZmxleC1ncm93OiAxO1xuICBtYXgtd2lkdGg6IGNhbGMoMTAwJSAtIDIuNHJlbSk7XG4gIHBhZGRpbmc6IDAgMXJlbTtcbiAgZm9udC1zaXplOiAwLjlyZW07XG4gIGxpbmUtaGVpZ2h0OiAyLjRyZW07XG59XG4ubWQtZm9vdGVyLW5hdl9fYnV0dG9uIHtcbiAgbWFyZ2luOiAwLjJyZW07XG4gIHBhZGRpbmc6IDAuNHJlbTtcbn1cbi5tZC1mb290ZXItbmF2X19kaXJlY3Rpb24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiAwO1xuICBsZWZ0OiAwO1xuICBtYXJnaW4tdG9wOiAtMXJlbTtcbiAgcGFkZGluZzogMCAxcmVtO1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvci0tbGlnaHQpO1xuICBmb250LXNpemU6IDAuNjRyZW07XG59XG5cbi5tZC1mb290ZXItbWV0YSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpO1xufVxuLm1kLWZvb3Rlci1tZXRhX19pbm5lciB7XG4gIHBhZGRpbmc6IDAuMnJlbTtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG5odG1sIC5tZC1mb290ZXItbWV0YS5tZC10eXBlc2V0IGEge1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvci0tbGlnaHQpO1xufVxuaHRtbCAubWQtZm9vdGVyLW1ldGEubWQtdHlwZXNldCBhOmZvY3VzLCBodG1sIC5tZC1mb290ZXItbWV0YS5tZC10eXBlc2V0IGE6aG92ZXIge1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG59XG5cbi5tZC1mb290ZXItY29weXJpZ2h0IHtcbiAgbWFyZ2luOiAwIDAuNnJlbTtcbiAgcGFkZGluZzogMC40cmVtIDA7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yLS1saWdodGVyKTtcbiAgZm9udC1zaXplOiAwLjY0cmVtO1xufVxuLm1kLWZvb3Rlci1jb3B5cmlnaHRfX2hpZ2hsaWdodCB7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yLS1saWdodCk7XG59XG5cbi5tZC1mb290ZXItc29jaWFsIHtcbiAgbWFyZ2luOiAwIDAuNHJlbTtcbiAgcGFkZGluZzogMC4ycmVtIDAgMC42cmVtO1xufVxuLm1kLWZvb3Rlci1zb2NpYWxfX2xpbmsge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiAxLjZyZW07XG4gIGhlaWdodDogMS42cmVtO1xuICB0cmFuc2l0aW9uOiBjb2xvciAyNTBtcztcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLm1kLWZvb3Rlci1zb2NpYWxfX2xpbms6OmJlZm9yZSB7XG4gIGxpbmUtaGVpZ2h0OiAxLjk7XG59XG4ubWQtZm9vdGVyLXNvY2lhbF9fbGluayBzdmcge1xuICB3aWR0aDogMC44cmVtO1xuICB2ZXJ0aWNhbC1hbGlnbjogLTI1JTtcbiAgZmlsbDogY3VycmVudENvbG9yO1xufVxuXG4ubWQtbmF2IHtcbiAgZm9udC1zaXplOiAwLjdyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjM7XG59XG4ubWQtbmF2X190aXRsZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nOiAwIDAuNnJlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ubWQtbmF2X190aXRsZSAubWQtbmF2X19idXR0b24ge1xuICBkaXNwbGF5OiBub25lO1xufVxuLm1kLW5hdl9fdGl0bGUgLm1kLW5hdl9fYnV0dG9uIGltZyB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IGF1dG87XG59XG4ubWQtbmF2X190aXRsZSAubWQtbmF2X19idXR0b24ubWQtbG9nbyBpbWcsXG4ubWQtbmF2X190aXRsZSAubWQtbmF2X19idXR0b24ubWQtbG9nbyBzdmcge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDIuNHJlbTtcbiAgaGVpZ2h0OiAyLjRyZW07XG59XG4ubWQtbmF2X190aXRsZSAubWQtbmF2X19idXR0b24ubWQtbG9nbyBzdmcge1xuICBmaWxsOiBjdXJyZW50Q29sb3I7XG59XG4ubWQtbmF2X19saXN0IHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBsaXN0LXN0eWxlOiBub25lO1xufVxuLm1kLW5hdl9faXRlbSB7XG4gIHBhZGRpbmc6IDAgMC42cmVtO1xufVxuLm1kLW5hdl9faXRlbTpsYXN0LWNoaWxkIHtcbiAgcGFkZGluZy1ib3R0b206IDAuNnJlbTtcbn1cbi5tZC1uYXZfX2l0ZW0gLm1kLW5hdl9faXRlbSB7XG4gIHBhZGRpbmctcmlnaHQ6IDA7XG59XG5bZGlyPXJ0bF0gLm1kLW5hdl9faXRlbSAubWQtbmF2X19pdGVtIHtcbiAgcGFkZGluZy1yaWdodDogMC42cmVtO1xuICBwYWRkaW5nLWxlZnQ6IDA7XG59XG4ubWQtbmF2X19pdGVtIC5tZC1uYXZfX2l0ZW06bGFzdC1jaGlsZCB7XG4gIHBhZGRpbmctYm90dG9tOiAwO1xufVxuLm1kLW5hdl9fbGluayB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW4tdG9wOiAwLjYyNWVtO1xuICB0cmFuc2l0aW9uOiBjb2xvciAxMjVtcztcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgc2Nyb2xsLXNuYXAtYWxpZ246IHN0YXJ0O1xufVxuaHRtbCAubWQtbmF2X19saW5rW2Zvcj1fX3RvY10ge1xuICBkaXNwbGF5OiBub25lO1xufVxuaHRtbCAubWQtbmF2X19saW5rW2Zvcj1fX3RvY10gfiAubWQtbmF2IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5tZC1uYXZfX2xpbmtbZGF0YS1tZC1zdGF0ZT1ibHVyXSB7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG59XG4ubWQtbmF2X19pdGVtIC5tZC1uYXZfX2xpbmstLWFjdGl2ZSB7XG4gIGNvbG9yOiB2YXIoLS1tZC1wcmltYXJ5LWZnLWNvbG9yKTtcbn1cbi5tZC1uYXZfX2l0ZW0tLW5lc3RlZCA+IC5tZC1uYXZfX2xpbmsge1xuICBjb2xvcjogaW5oZXJpdDtcbn1cbi5tZC1uYXZfX2xpbms6Zm9jdXMsIC5tZC1uYXZfX2xpbms6aG92ZXIge1xuICBjb2xvcjogdmFyKC0tbWQtYWNjZW50LWZnLWNvbG9yKTtcbn1cbi5tZC1uYXZfX3NvdXJjZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5tZC1zZWFyY2gge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4ubm8tanMgLm1kLXNlYXJjaCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ubWQtc2VhcmNoX19vdmVybGF5IHtcbiAgb3BhY2l0eTogMDtcbiAgei1pbmRleDogMTtcbn1cbi5tZC1zZWFyY2hfX2lubmVyIHtcbiAgLXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgICAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xufVxuLm1kLXNlYXJjaF9fZm9ybSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi5tZC1zZWFyY2hfX2lucHV0IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nOiAwIDIuMnJlbSAwIDMuNnJlbTtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIHotaW5kZXg6IDI7XG59XG5bZGlyPXJ0bF0gLm1kLXNlYXJjaF9faW5wdXQge1xuICBwYWRkaW5nOiAwIDMuNnJlbSAwIDIuMnJlbTtcbn1cbi5tZC1zZWFyY2hfX2lucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBjb2xvciAyNTBtcztcbiAgdHJhbnNpdGlvbjogY29sb3IgMjUwbXM7XG59XG4ubWQtc2VhcmNoX19pbnB1dDo6LW1vei1wbGFjZWhvbGRlciB7XG4gIC1tb3otdHJhbnNpdGlvbjogY29sb3IgMjUwbXM7XG4gIHRyYW5zaXRpb246IGNvbG9yIDI1MG1zO1xufVxuLm1kLXNlYXJjaF9faW5wdXQ6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XG4gIC1tcy10cmFuc2l0aW9uOiBjb2xvciAyNTBtcztcbiAgdHJhbnNpdGlvbjogY29sb3IgMjUwbXM7XG59XG4ubWQtc2VhcmNoX19pbnB1dDo6cGxhY2Vob2xkZXIge1xuICB0cmFuc2l0aW9uOiBjb2xvciAyNTBtcztcbn1cbi5tZC1zZWFyY2hfX2lucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbn1cbi5tZC1zZWFyY2hfX2lucHV0OjotbW96LXBsYWNlaG9sZGVyIHtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbn1cbi5tZC1zZWFyY2hfX2lucHV0OjotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xufVxuLm1kLXNlYXJjaF9faW5wdXQgfiAubWQtc2VhcmNoX19pY29uLCAubWQtc2VhcmNoX19pbnB1dDo6cGxhY2Vob2xkZXIge1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xufVxuLm1kLXNlYXJjaF9faW5wdXQ6Oi1tcy1jbGVhciB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ubWQtc2VhcmNoX19pY29uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMS4ycmVtO1xuICBoZWlnaHQ6IDEuMnJlbTtcbiAgdHJhbnNpdGlvbjogY29sb3IgMjUwbXMsIG9wYWNpdHkgMjUwbXM7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgei1pbmRleDogMjtcbn1cbi5tZC1zZWFyY2hfX2ljb246aG92ZXIge1xuICBvcGFjaXR5OiAwLjc7XG59XG4ubWQtc2VhcmNoX19pY29uW2Zvcj1fX3NlYXJjaF0ge1xuICB0b3A6IDAuM3JlbTtcbiAgbGVmdDogMC41cmVtO1xufVxuW2Rpcj1ydGxdIC5tZC1zZWFyY2hfX2ljb25bZm9yPV9fc2VhcmNoXSB7XG4gIHJpZ2h0OiAwLjVyZW07XG4gIGxlZnQ6IGluaXRpYWw7XG59XG5bZGlyPXJ0bF0gLm1kLXNlYXJjaF9faWNvbltmb3I9X19zZWFyY2hdIHN2ZyB7XG4gIHRyYW5zZm9ybTogc2NhbGVYKC0xKTtcbn1cbi5tZC1zZWFyY2hfX2ljb25bdHlwZT1yZXNldF0ge1xuICB0b3A6IDAuM3JlbTtcbiAgcmlnaHQ6IDAuNXJlbTtcbiAgdHJhbnNmb3JtOiBzY2FsZSgwLjc1KTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDE1MG1zIGN1YmljLWJlemllcigwLjEsIDAuNywgMC4xLCAxKSwgb3BhY2l0eSAxNTBtcztcbiAgb3BhY2l0eTogMDtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5bZGlyPXJ0bF0gLm1kLXNlYXJjaF9faWNvblt0eXBlPXJlc2V0XSB7XG4gIHJpZ2h0OiBpbml0aWFsO1xuICBsZWZ0OiAwLjVyZW07XG59XG5bZGF0YS1tZC10b2dnbGU9c2VhcmNoXTpjaGVja2VkIH4gLm1kLWhlYWRlciAubWQtc2VhcmNoX19pbnB1dDp2YWxpZCB+IC5tZC1zZWFyY2hfX2ljb25bdHlwZT1yZXNldF0ge1xuICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICBvcGFjaXR5OiAxO1xuICBwb2ludGVyLWV2ZW50czogaW5pdGlhbDtcbn1cbltkYXRhLW1kLXRvZ2dsZT1zZWFyY2hdOmNoZWNrZWQgfiAubWQtaGVhZGVyIC5tZC1zZWFyY2hfX2lucHV0OnZhbGlkIH4gLm1kLXNlYXJjaF9faWNvblt0eXBlPXJlc2V0XTpob3ZlciB7XG4gIG9wYWNpdHk6IDAuNztcbn1cbi5tZC1zZWFyY2hfX291dHB1dCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDEwMCU7XG4gIGJvcmRlci1yYWRpdXM6IDAgMCAwLjFyZW0gMC4xcmVtO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB6LWluZGV4OiAxO1xufVxuLm1kLXNlYXJjaF9fc2Nyb2xsd3JhcCB7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMC4wNXJlbSAwIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0KTtcbiAgb3ZlcmZsb3cteTogYXV0bztcbiAgLXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgICAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xuICAtd2Via2l0LXNjcm9sbC1zbmFwLXR5cGU6IHkgbWFuZGF0b3J5O1xuICAgICAgLW1zLXNjcm9sbC1zbmFwLXR5cGU6IHkgbWFuZGF0b3J5O1xuICAgICAgICAgIHNjcm9sbC1zbmFwLXR5cGU6IHkgbWFuZGF0b3J5O1xuICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG59XG5cbi5tZC1zZWFyY2gtcmVzdWx0IHtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3IpO1xuICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xufVxuLm1kLXNlYXJjaC1yZXN1bHRfX21ldGEge1xuICBwYWRkaW5nOiAwIDAuOHJlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlc3QpO1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuICBmb250LXNpemU6IDAuNjRyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjhyZW07XG4gIHNjcm9sbC1zbmFwLWFsaWduOiBzdGFydDtcbn1cbi5tZC1zZWFyY2gtcmVzdWx0X19saXN0IHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBib3JkZXItdG9wOiAwLjA1cmVtIHNvbGlkIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0KTtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbn1cbi5tZC1zZWFyY2gtcmVzdWx0X19pdGVtIHtcbiAgYm94LXNoYWRvdzogMCAtMC4wNXJlbSAwIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0KTtcbn1cbi5tZC1zZWFyY2gtcmVzdWx0X19saW5rIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQgMjUwbXM7XG4gIG91dGxpbmU6IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHNjcm9sbC1zbmFwLWFsaWduOiBzdGFydDtcbn1cbi5tZC1zZWFyY2gtcmVzdWx0X19saW5rOmZvY3VzLCAubWQtc2VhcmNoLXJlc3VsdF9fbGluazpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWFjY2VudC1mZy1jb2xvci0tdHJhbnNwYXJlbnQpO1xufVxuLm1kLXNlYXJjaC1yZXN1bHRfX2xpbms6Zm9jdXMgLm1kLXNlYXJjaC1yZXN1bHRfX2FydGljbGU6OmJlZm9yZSwgLm1kLXNlYXJjaC1yZXN1bHRfX2xpbms6aG92ZXIgLm1kLXNlYXJjaC1yZXN1bHRfX2FydGljbGU6OmJlZm9yZSB7XG4gIG9wYWNpdHk6IDAuNztcbn1cbi5tZC1zZWFyY2gtcmVzdWx0X19saW5rOmxhc3QtY2hpbGQgLm1kLXNlYXJjaC1yZXN1bHRfX3RlYXNlciB7XG4gIG1hcmdpbi1ib3R0b206IDAuNnJlbTtcbn1cbi5tZC1zZWFyY2gtcmVzdWx0X19hcnRpY2xlIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nOiAwIDAuOHJlbTtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4ubWQtc2VhcmNoLXJlc3VsdF9fYXJ0aWNsZS0tZG9jdW1lbnQgLm1kLXNlYXJjaC1yZXN1bHRfX3RpdGxlIHtcbiAgbWFyZ2luOiAwLjU1cmVtIDA7XG4gIGZvbnQtc2l6ZTogMC44cmVtO1xuICBmb250LXdlaWdodDogNDAwO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuLm1kLXNlYXJjaC1yZXN1bHRfX2ljb24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDA7XG4gIG1hcmdpbjogMC4xcmVtO1xuICBwYWRkaW5nOiAwLjRyZW07XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG59XG5bZGlyPXJ0bF0gLm1kLXNlYXJjaC1yZXN1bHRfX2ljb24ge1xuICByaWdodDogMDtcbiAgbGVmdDogaW5pdGlhbDtcbn1cbltkaXI9cnRsXSAubWQtc2VhcmNoLXJlc3VsdF9faWNvbiBzdmcge1xuICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7XG59XG4ubWQtc2VhcmNoLXJlc3VsdF9fdGl0bGUge1xuICBtYXJnaW46IDAuNWVtIDA7XG4gIGZvbnQtc2l6ZTogMC42NHJlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cbi5tZC1zZWFyY2gtcmVzdWx0X190ZWFzZXIge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgbWF4LWhlaWdodDogMS42NXJlbTtcbiAgbWFyZ2luOiAwLjVlbSAwO1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuICBmb250LXNpemU6IDAuNjRyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAtd2Via2l0LWxpbmUtY2xhbXA6IDI7XG59XG4ubWQtc2VhcmNoLXJlc3VsdCBlbSB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5cbi5tZC1zaWRlYmFyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMTIuMXJlbTtcbiAgcGFkZGluZzogMS4ycmVtIDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ubWQtc2lkZWJhcltkYXRhLW1kLXN0YXRlPWxvY2tdIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDIuNHJlbTtcbn1cbi5tZC1zaWRlYmFyLS1zZWNvbmRhcnkge1xuICBkaXNwbGF5OiBub25lO1xufVxuLm1kLXNpZGViYXJfX3Njcm9sbHdyYXAge1xuICBtYXgtaGVpZ2h0OiAxMDAlO1xuICBtYXJnaW46IDAgMC4ycmVtO1xuICBvdmVyZmxvdy15OiBhdXRvO1xuICAtd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgICAgICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG4gIC13ZWJraXQtc2Nyb2xsLXNuYXAtdHlwZTogeSBtYW5kYXRvcnk7XG4gICAgICAtbXMtc2Nyb2xsLXNuYXAtdHlwZTogeSBtYW5kYXRvcnk7XG4gICAgICAgICAgc2Nyb2xsLXNuYXAtdHlwZTogeSBtYW5kYXRvcnk7XG59XG4ubWQtc2lkZWJhcl9fc2Nyb2xsd3JhcDo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICB3aWR0aDogMC4ycmVtO1xuICBoZWlnaHQ6IDAuMnJlbTtcbn1cbi5tZC1zaWRlYmFyX19zY3JvbGx3cmFwOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpO1xufVxuLm1kLXNpZGViYXJfX3Njcm9sbHdyYXA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtYWNjZW50LWZnLWNvbG9yKTtcbn1cblxuQC13ZWJraXQta2V5ZnJhbWVzIG1kLXNvdXJjZV9fZmFjdHMtLWRvbmUge1xuICAwJSB7XG4gICAgaGVpZ2h0OiAwO1xuICB9XG4gIDEwMCUge1xuICAgIGhlaWdodDogMC42NXJlbTtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIG1kLXNvdXJjZV9fZmFjdHMtLWRvbmUge1xuICAwJSB7XG4gICAgaGVpZ2h0OiAwO1xuICB9XG4gIDEwMCUge1xuICAgIGhlaWdodDogMC42NXJlbTtcbiAgfVxufVxuQC13ZWJraXQta2V5ZnJhbWVzIG1kLXNvdXJjZV9fZmFjdC0tZG9uZSB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTAwJSk7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICA1MCUge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDAlKTtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG5Aa2V5ZnJhbWVzIG1kLXNvdXJjZV9fZmFjdC0tZG9uZSB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTAwJSk7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICA1MCUge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDAlKTtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG4ubWQtc291cmNlIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMjUwbXM7XG4gIGZvbnQtc2l6ZTogMC42NXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuMjU7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIC13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgICAgIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcbn1cbltkaXI9cnRsXSAubWQtc291cmNlIHtcbiAgcGFkZGluZy1yaWdodDogaW5pdGlhbDtcbiAgcGFkZGluZy1sZWZ0OiAwLjZyZW07XG59XG4ubWQtc291cmNlOmhvdmVyIHtcbiAgb3BhY2l0eTogMC43O1xufVxuLm1kLXNvdXJjZV9faWNvbiB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6IDIuNHJlbTtcbiAgaGVpZ2h0OiAyLjRyZW07XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4ubWQtc291cmNlX19pY29uIHN2ZyB7XG4gIG1hcmdpbi10b3A6IDAuNnJlbTtcbiAgbWFyZ2luLWxlZnQ6IDAuNnJlbTtcbn1cbltkaXI9cnRsXSAubWQtc291cmNlX19pY29uIHN2ZyB7XG4gIG1hcmdpbi1yaWdodDogMC42cmVtO1xuICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbn1cbi5tZC1zb3VyY2VfX2ljb24gKyAubWQtc291cmNlX19yZXBvc2l0b3J5IHtcbiAgbWFyZ2luLWxlZnQ6IC0ycmVtO1xuICBwYWRkaW5nLWxlZnQ6IDJyZW07XG59XG5bZGlyPXJ0bF0gLm1kLXNvdXJjZV9faWNvbiArIC5tZC1zb3VyY2VfX3JlcG9zaXRvcnkge1xuICBtYXJnaW4tcmlnaHQ6IC0ycmVtO1xuICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbiAgcGFkZGluZy1yaWdodDogMnJlbTtcbiAgcGFkZGluZy1sZWZ0OiBpbml0aWFsO1xufVxuLm1kLXNvdXJjZV9fcmVwb3NpdG9yeSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWF4LXdpZHRoOiBjYWxjKDEwMCUgLSAxLjJyZW0pO1xuICBtYXJnaW4tbGVmdDogMC42cmVtO1xuICBmb250LXdlaWdodDogNzAwO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi5tZC1zb3VyY2VfX2ZhY3RzIHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBmb250LXNpemU6IDAuNTVyZW07XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgb3BhY2l0eTogMC43NTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbltkYXRhLW1kLXN0YXRlPWRvbmVdIC5tZC1zb3VyY2VfX2ZhY3RzIHtcbiAgLXdlYmtpdC1hbmltYXRpb246IG1kLXNvdXJjZV9fZmFjdHMtLWRvbmUgMjUwbXMgZWFzZS1pbjtcbiAgICAgICAgICBhbmltYXRpb246IG1kLXNvdXJjZV9fZmFjdHMtLWRvbmUgMjUwbXMgZWFzZS1pbjtcbn1cbi5tZC1zb3VyY2VfX2ZhY3Qge1xuICBmbG9hdDogbGVmdDtcbn1cbltkaXI9cnRsXSAubWQtc291cmNlX19mYWN0IHtcbiAgZmxvYXQ6IHJpZ2h0O1xufVxuW2RhdGEtbWQtc3RhdGU9ZG9uZV0gLm1kLXNvdXJjZV9fZmFjdCB7XG4gIC13ZWJraXQtYW5pbWF0aW9uOiBtZC1zb3VyY2VfX2ZhY3QtLWRvbmUgNDAwbXMgZWFzZS1vdXQ7XG4gICAgICAgICAgYW5pbWF0aW9uOiBtZC1zb3VyY2VfX2ZhY3QtLWRvbmUgNDAwbXMgZWFzZS1vdXQ7XG59XG4ubWQtc291cmNlX19mYWN0OjpiZWZvcmUge1xuICBtYXJnaW46IDAgMC4xcmVtO1xuICBjb250ZW50OiBcIsK3XCI7XG59XG4ubWQtc291cmNlX19mYWN0OmZpcnN0LWNoaWxkOjpiZWZvcmUge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4ubWQtdGFicyB7XG4gIHdpZHRoOiAxMDAlO1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDI1MG1zO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1wcmltYXJ5LWZnLWNvbG9yKTtcbiAgY29sb3I6IHZhcigtLW1kLXByaW1hcnktYmctY29sb3IpO1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi5uby1qcyAubWQtdGFicyB7XG4gIHRyYW5zaXRpb246IG5vbmU7XG59XG4ubWQtdGFic19fbGlzdCB7XG4gIG1hcmdpbjogMDtcbiAgbWFyZ2luLWxlZnQ6IDAuMnJlbTtcbiAgcGFkZGluZzogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cbltkaXI9cnRsXSAubWQtdGFic19fbGlzdCB7XG4gIG1hcmdpbi1yaWdodDogMC4ycmVtO1xuICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbn1cbi5tZC10YWJzX19pdGVtIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBoZWlnaHQ6IDIuNHJlbTtcbiAgcGFkZGluZy1yaWdodDogMC42cmVtO1xuICBwYWRkaW5nLWxlZnQ6IDAuNnJlbTtcbn1cbi5tZC10YWJzX19saW5rIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbi10b3A6IDAuOHJlbTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjEsIDAuNywgMC4xLCAxKSwgb3BhY2l0eSAyNTBtcztcbiAgZm9udC1zaXplOiAwLjdyZW07XG4gIG9wYWNpdHk6IDAuNztcbn1cbi5uby1qcyAubWQtdGFic19fbGluayB7XG4gIHRyYW5zaXRpb246IG5vbmU7XG59XG4ubWQtdGFic19fbGluay0tYWN0aXZlLCAubWQtdGFic19fbGluazpob3ZlciB7XG4gIGNvbG9yOiBpbmhlcml0O1xuICBvcGFjaXR5OiAxO1xufVxuLm1kLXRhYnNfX2l0ZW06bnRoLWNoaWxkKDIpIC5tZC10YWJzX19saW5rIHtcbiAgdHJhbnNpdGlvbi1kZWxheTogMjBtcztcbn1cbi5tZC10YWJzX19pdGVtOm50aC1jaGlsZCgzKSAubWQtdGFic19fbGluayB7XG4gIHRyYW5zaXRpb24tZGVsYXk6IDQwbXM7XG59XG4ubWQtdGFic19faXRlbTpudGgtY2hpbGQoNCkgLm1kLXRhYnNfX2xpbmsge1xuICB0cmFuc2l0aW9uLWRlbGF5OiA2MG1zO1xufVxuLm1kLXRhYnNfX2l0ZW06bnRoLWNoaWxkKDUpIC5tZC10YWJzX19saW5rIHtcbiAgdHJhbnNpdGlvbi1kZWxheTogODBtcztcbn1cbi5tZC10YWJzX19pdGVtOm50aC1jaGlsZCg2KSAubWQtdGFic19fbGluayB7XG4gIHRyYW5zaXRpb24tZGVsYXk6IDEwMG1zO1xufVxuLm1kLXRhYnNfX2l0ZW06bnRoLWNoaWxkKDcpIC5tZC10YWJzX19saW5rIHtcbiAgdHJhbnNpdGlvbi1kZWxheTogMTIwbXM7XG59XG4ubWQtdGFic19faXRlbTpudGgtY2hpbGQoOCkgLm1kLXRhYnNfX2xpbmsge1xuICB0cmFuc2l0aW9uLWRlbGF5OiAxNDBtcztcbn1cbi5tZC10YWJzX19pdGVtOm50aC1jaGlsZCg5KSAubWQtdGFic19fbGluayB7XG4gIHRyYW5zaXRpb24tZGVsYXk6IDE2MG1zO1xufVxuLm1kLXRhYnNfX2l0ZW06bnRoLWNoaWxkKDEwKSAubWQtdGFic19fbGluayB7XG4gIHRyYW5zaXRpb24tZGVsYXk6IDE4MG1zO1xufVxuLm1kLXRhYnNfX2l0ZW06bnRoLWNoaWxkKDExKSAubWQtdGFic19fbGluayB7XG4gIHRyYW5zaXRpb24tZGVsYXk6IDIwMG1zO1xufVxuLm1kLXRhYnNfX2l0ZW06bnRoLWNoaWxkKDEyKSAubWQtdGFic19fbGluayB7XG4gIHRyYW5zaXRpb24tZGVsYXk6IDIyMG1zO1xufVxuLm1kLXRhYnNfX2l0ZW06bnRoLWNoaWxkKDEzKSAubWQtdGFic19fbGluayB7XG4gIHRyYW5zaXRpb24tZGVsYXk6IDI0MG1zO1xufVxuLm1kLXRhYnNfX2l0ZW06bnRoLWNoaWxkKDE0KSAubWQtdGFic19fbGluayB7XG4gIHRyYW5zaXRpb24tZGVsYXk6IDI2MG1zO1xufVxuLm1kLXRhYnNfX2l0ZW06bnRoLWNoaWxkKDE1KSAubWQtdGFic19fbGluayB7XG4gIHRyYW5zaXRpb24tZGVsYXk6IDI4MG1zO1xufVxuLm1kLXRhYnNfX2l0ZW06bnRoLWNoaWxkKDE2KSAubWQtdGFic19fbGluayB7XG4gIHRyYW5zaXRpb24tZGVsYXk6IDMwMG1zO1xufVxuLm1kLXRhYnNbZGF0YS1tZC1zdGF0ZT1oaWRkZW5dIHtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG4ubWQtdGFic1tkYXRhLW1kLXN0YXRlPWhpZGRlbl0gLm1kLXRhYnNfX2xpbmsge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNTAlKTtcbiAgdHJhbnNpdGlvbjogY29sb3IgMjUwbXMsIHRyYW5zZm9ybSAwbXMgNDAwbXMsIG9wYWNpdHkgMTAwbXM7XG4gIG9wYWNpdHk6IDA7XG59XG5cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLCAubWQtdHlwZXNldCBkZXRhaWxzIHtcbiAgbWFyZ2luOiAxLjU2MjVlbSAwO1xuICBwYWRkaW5nOiAwIDAuNnJlbTtcbiAgYm9yZGVyLWxlZnQ6IDAuMnJlbSBzb2xpZCAjNDQ4YWZmO1xuICBib3JkZXItcmFkaXVzOiAwLjFyZW07XG4gIGZvbnQtc2l6ZTogMC42NHJlbTtcbiAgYm94LXNoYWRvdzogMCAwLjJyZW0gMC41cmVtIHJnYmEoMCwgMCwgMCwgMC4wNSksIDAgMCAwLjA1cmVtIHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24sIFtkaXI9cnRsXSAubWQtdHlwZXNldCBkZXRhaWxzIHtcbiAgYm9yZGVyLXJpZ2h0OiAwLjJyZW0gc29saWQgIzQ0OGFmZjtcbiAgYm9yZGVyLWxlZnQ6IG5vbmU7XG59XG5odG1sIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uID4gOmxhc3QtY2hpbGQsIGh0bWwgLm1kLXR5cGVzZXQgZGV0YWlscyA+IDpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLWJvdHRvbTogMC42cmVtO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24gLmFkbW9uaXRpb24sIC5tZC10eXBlc2V0IGRldGFpbHMgLmFkbW9uaXRpb24sIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uIGRldGFpbHMsIC5tZC10eXBlc2V0IGRldGFpbHMgZGV0YWlscyB7XG4gIG1hcmdpbjogMWVtIDA7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi50bGRyLCAubWQtdHlwZXNldCBkZXRhaWxzLnRsZHIsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnN1bW1hcnksIC5tZC10eXBlc2V0IGRldGFpbHMuc3VtbWFyeSwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uYWJzdHJhY3QsIC5tZC10eXBlc2V0IGRldGFpbHMuYWJzdHJhY3Qge1xuICBib3JkZXItbGVmdC1jb2xvcjogIzAwYjBmZjtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnRsZHIgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IGRldGFpbHMudGxkciA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uc3VtbWFyeSA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgZGV0YWlscy5zdW1tYXJ5ID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5hYnN0cmFjdCA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgZGV0YWlscy5hYnN0cmFjdCA+IDpmaXJzdC1jaGlsZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMTc2LCAyNTUsIDAuMSk7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi50bGRyID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMudGxkciA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5zdW1tYXJ5ID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMuc3VtbWFyeSA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5hYnN0cmFjdCA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCBkZXRhaWxzLmFic3RyYWN0ID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBiMGZmO1xuICAtd2Via2l0LW1hc2staW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk00LDVIMjBWN0g0VjVNNCw5SDIwVjExSDRWOU00LDEzSDIwVjE1SDRWMTNNNCwxN0gxNFYxOUg0VjE3WlxcXCIgLz48L3N2Zz5cIik7XG4gICAgICAgICAgbWFzay1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCI+PHBhdGggZD1cXFwiTTQsNUgyMFY3SDRWNU00LDlIMjBWMTFINFY5TTQsMTNIMjBWMTVINFYxM000LDE3SDE0VjE5SDRWMTdaXFxcIiAvPjwvc3ZnPlwiKTtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnRvZG8sIC5tZC10eXBlc2V0IGRldGFpbHMudG9kbywgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uaW5mbywgLm1kLXR5cGVzZXQgZGV0YWlscy5pbmZvIHtcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICMwMGI4ZDQ7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi50b2RvID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLnRvZG8gPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmluZm8gPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IGRldGFpbHMuaW5mbyA+IDpmaXJzdC1jaGlsZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMTg0LCAyMTIsIDAuMSk7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi50b2RvID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMudG9kbyA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5pbmZvID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMuaW5mbyA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwYjhkNDtcbiAgLXdlYmtpdC1tYXNrLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgdmlld0JveD1cXFwiMCAwIDI0IDI0XFxcIj48cGF0aCBkPVxcXCJNMTMsOUgxMVY3SDEzTTEzLDE3SDExVjExSDEzTTEyLDJBMTAsMTAgMCAwLDAgMiwxMkExMCwxMCAwIDAsMCAxMiwyMkExMCwxMCAwIDAsMCAyMiwxMkExMCwxMCAwIDAsMCAxMiwyWlxcXCIgLz48L3N2Zz5cIik7XG4gICAgICAgICAgbWFzay1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCI+PHBhdGggZD1cXFwiTTEzLDlIMTFWN0gxM00xMywxN0gxMVYxMUgxM00xMiwyQTEwLDEwIDAgMCwwIDIsMTJBMTAsMTAgMCAwLDAgMTIsMjJBMTAsMTAgMCAwLDAgMjIsMTJBMTAsMTAgMCAwLDAgMTIsMlpcXFwiIC8+PC9zdmc+XCIpO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uaW1wb3J0YW50LCAubWQtdHlwZXNldCBkZXRhaWxzLmltcG9ydGFudCwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uaGludCwgLm1kLXR5cGVzZXQgZGV0YWlscy5oaW50LCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi50aXAsIC5tZC10eXBlc2V0IGRldGFpbHMudGlwIHtcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICMwMGJmYTU7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5pbXBvcnRhbnQgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IGRldGFpbHMuaW1wb3J0YW50ID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5oaW50ID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmhpbnQgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnRpcCA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgZGV0YWlscy50aXAgPiA6Zmlyc3QtY2hpbGQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDE5MSwgMTY1LCAwLjEpO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uaW1wb3J0YW50ID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMuaW1wb3J0YW50ID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmhpbnQgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5oaW50ID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnRpcCA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCBkZXRhaWxzLnRpcCA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwYmZhNTtcbiAgLXdlYmtpdC1tYXNrLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgdmlld0JveD1cXFwiMCAwIDI0IDI0XFxcIj48cGF0aCBkPVxcXCJNMTcuNTUsMTEuMkMxNy4zMiwxMC45IDE3LjA1LDEwLjY0IDE2Ljc5LDEwLjM4QzE2LjE0LDkuNzggMTUuMzksOS4zNSAxNC43Niw4LjcyQzEzLjMsNy4yNiAxMyw0Ljg1IDEzLjkxLDNDMTMsMy4yMyAxMi4xNiwzLjc1IDExLjQ2LDQuMzJDOC45Miw2LjQgNy45MiwxMC4wNyA5LjEyLDEzLjIyQzkuMTYsMTMuMzIgOS4yLDEzLjQyIDkuMiwxMy41NUM5LjIsMTMuNzcgOS4wNSwxMy45NyA4Ljg1LDE0LjA1QzguNjMsMTQuMTUgOC4zOSwxNC4wOSA4LjIxLDEzLjkzQzguMTUsMTMuODggOC4xMSwxMy44MyA4LjA2LDEzLjc2QzYuOTYsMTIuMzMgNi43OCwxMC4yOCA3LjUzLDguNjRDNS44OSwxMCA1LDEyLjMgNS4xNCwxNC40N0M1LjE4LDE0Ljk3IDUuMjQsMTUuNDcgNS40MSwxNS45N0M1LjU1LDE2LjU3IDUuODEsMTcuMTcgNi4xMywxNy43QzcuMTcsMTkuNDMgOSwyMC42NyAxMC45NywyMC45MkMxMy4wNywyMS4xOSAxNS4zMiwyMC44IDE2LjkzLDE5LjMyQzE4LjczLDE3LjY2IDE5LjM4LDE1IDE4LjQzLDEyLjcyTDE4LjMsMTIuNDZDMTguMSwxMiAxNy44MywxMS41OSAxNy41LDExLjIxTDE3LjU1LDExLjJNMTQuNDUsMTcuNUMxNC4xNywxNy43NCAxMy43MiwxOCAxMy4zNywxOC4xQzEyLjI3LDE4LjUgMTEuMTcsMTcuOTQgMTAuNSwxNy4yOEMxMS42OSwxNyAxMi4zOSwxNi4xMiAxMi41OSwxNS4yM0MxMi43NiwxNC40MyAxMi40NSwxMy43NyAxMi4zMiwxM0MxMi4yLDEyLjI2IDEyLjIyLDExLjYzIDEyLjUsMTAuOTRDMTIuNjcsMTEuMzIgMTIuODcsMTEuNyAxMy4xLDEyQzEzLjg2LDEzIDE1LjA1LDEzLjQ0IDE1LjMsMTQuOEMxNS4zNCwxNC45NCAxNS4zNiwxNS4wOCAxNS4zNiwxNS4yM0MxNS4zOSwxNi4wNSAxNS4wNCwxNi45NSAxNC40NCwxNy41SDE0LjQ1WlxcXCIgLz48L3N2Zz5cIik7XG4gICAgICAgICAgbWFzay1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCI+PHBhdGggZD1cXFwiTTE3LjU1LDExLjJDMTcuMzIsMTAuOSAxNy4wNSwxMC42NCAxNi43OSwxMC4zOEMxNi4xNCw5Ljc4IDE1LjM5LDkuMzUgMTQuNzYsOC43MkMxMy4zLDcuMjYgMTMsNC44NSAxMy45MSwzQzEzLDMuMjMgMTIuMTYsMy43NSAxMS40Niw0LjMyQzguOTIsNi40IDcuOTIsMTAuMDcgOS4xMiwxMy4yMkM5LjE2LDEzLjMyIDkuMiwxMy40MiA5LjIsMTMuNTVDOS4yLDEzLjc3IDkuMDUsMTMuOTcgOC44NSwxNC4wNUM4LjYzLDE0LjE1IDguMzksMTQuMDkgOC4yMSwxMy45M0M4LjE1LDEzLjg4IDguMTEsMTMuODMgOC4wNiwxMy43NkM2Ljk2LDEyLjMzIDYuNzgsMTAuMjggNy41Myw4LjY0QzUuODksMTAgNSwxMi4zIDUuMTQsMTQuNDdDNS4xOCwxNC45NyA1LjI0LDE1LjQ3IDUuNDEsMTUuOTdDNS41NSwxNi41NyA1LjgxLDE3LjE3IDYuMTMsMTcuN0M3LjE3LDE5LjQzIDksMjAuNjcgMTAuOTcsMjAuOTJDMTMuMDcsMjEuMTkgMTUuMzIsMjAuOCAxNi45MywxOS4zMkMxOC43MywxNy42NiAxOS4zOCwxNSAxOC40MywxMi43MkwxOC4zLDEyLjQ2QzE4LjEsMTIgMTcuODMsMTEuNTkgMTcuNSwxMS4yMUwxNy41NSwxMS4yTTE0LjQ1LDE3LjVDMTQuMTcsMTcuNzQgMTMuNzIsMTggMTMuMzcsMTguMUMxMi4yNywxOC41IDExLjE3LDE3Ljk0IDEwLjUsMTcuMjhDMTEuNjksMTcgMTIuMzksMTYuMTIgMTIuNTksMTUuMjNDMTIuNzYsMTQuNDMgMTIuNDUsMTMuNzcgMTIuMzIsMTNDMTIuMiwxMi4yNiAxMi4yMiwxMS42MyAxMi41LDEwLjk0QzEyLjY3LDExLjMyIDEyLjg3LDExLjcgMTMuMSwxMkMxMy44NiwxMyAxNS4wNSwxMy40NCAxNS4zLDE0LjhDMTUuMzQsMTQuOTQgMTUuMzYsMTUuMDggMTUuMzYsMTUuMjNDMTUuMzksMTYuMDUgMTUuMDQsMTYuOTUgMTQuNDQsMTcuNUgxNC40NVpcXFwiIC8+PC9zdmc+XCIpO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uZG9uZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5kb25lLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5jaGVjaywgLm1kLXR5cGVzZXQgZGV0YWlscy5jaGVjaywgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uc3VjY2VzcywgLm1kLXR5cGVzZXQgZGV0YWlscy5zdWNjZXNzIHtcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICMwMGM4NTM7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5kb25lID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmRvbmUgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmNoZWNrID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmNoZWNrID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5zdWNjZXNzID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLnN1Y2Nlc3MgPiA6Zmlyc3QtY2hpbGQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDIwMCwgODMsIDAuMSk7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5kb25lID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMuZG9uZSA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5jaGVjayA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCBkZXRhaWxzLmNoZWNrID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnN1Y2Nlc3MgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5zdWNjZXNzID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBjODUzO1xuICAtd2Via2l0LW1hc2staW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk0xMiwyQTEwLDEwIDAgMCwxIDIyLDEyQTEwLDEwIDAgMCwxIDEyLDIyQTEwLDEwIDAgMCwxIDIsMTJBMTAsMTAgMCAwLDEgMTIsMk0xMSwxNi41TDE4LDkuNUwxNi41OSw4LjA5TDExLDEzLjY3TDcuOTEsMTAuNTlMNi41LDEyTDExLDE2LjVaXFxcIiAvPjwvc3ZnPlwiKTtcbiAgICAgICAgICBtYXNrLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgdmlld0JveD1cXFwiMCAwIDI0IDI0XFxcIj48cGF0aCBkPVxcXCJNMTIsMkExMCwxMCAwIDAsMSAyMiwxMkExMCwxMCAwIDAsMSAxMiwyMkExMCwxMCAwIDAsMSAyLDEyQTEwLDEwIDAgMCwxIDEyLDJNMTEsMTYuNUwxOCw5LjVMMTYuNTksOC4wOUwxMSwxMy42N0w3LjkxLDEwLjU5TDYuNSwxMkwxMSwxNi41WlxcXCIgLz48L3N2Zz5cIik7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5mYXEsIC5tZC10eXBlc2V0IGRldGFpbHMuZmFxLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5oZWxwLCAubWQtdHlwZXNldCBkZXRhaWxzLmhlbHAsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnF1ZXN0aW9uLCAubWQtdHlwZXNldCBkZXRhaWxzLnF1ZXN0aW9uIHtcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICM2NGRkMTc7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5mYXEgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IGRldGFpbHMuZmFxID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5oZWxwID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmhlbHAgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnF1ZXN0aW9uID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLnF1ZXN0aW9uID4gOmZpcnN0LWNoaWxkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxMDAsIDIyMSwgMjMsIDAuMSk7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5mYXEgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5mYXEgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uaGVscCA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCBkZXRhaWxzLmhlbHAgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24ucXVlc3Rpb24gPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5xdWVzdGlvbiA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzY0ZGQxNztcbiAgLXdlYmtpdC1tYXNrLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgdmlld0JveD1cXFwiMCAwIDI0IDI0XFxcIj48cGF0aCBkPVxcXCJNMTUuMDcsMTEuMjVMMTQuMTcsMTIuMTdDMTMuNDUsMTIuODkgMTMsMTMuNSAxMywxNUgxMVYxNC41QzExLDEzLjM5IDExLjQ1LDEyLjM5IDEyLjE3LDExLjY3TDEzLjQxLDEwLjQxQzEzLjc4LDEwLjA1IDE0LDkuNTUgMTQsOUMxNCw3Ljg5IDEzLjEsNyAxMiw3QTIsMiAwIDAsMCAxMCw5SDhBNCw0IDAgMCwxIDEyLDVBNCw0IDAgMCwxIDE2LDlDMTYsOS44OCAxNS42NCwxMC42NyAxNS4wNywxMS4yNU0xMywxOUgxMVYxN0gxM00xMiwyQTEwLDEwIDAgMCwwIDIsMTJBMTAsMTAgMCAwLDAgMTIsMjJBMTAsMTAgMCAwLDAgMjIsMTJDMjIsNi40NyAxNy41LDIgMTIsMlpcXFwiIC8+PC9zdmc+XCIpO1xuICAgICAgICAgIG1hc2staW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk0xNS4wNywxMS4yNUwxNC4xNywxMi4xN0MxMy40NSwxMi44OSAxMywxMy41IDEzLDE1SDExVjE0LjVDMTEsMTMuMzkgMTEuNDUsMTIuMzkgMTIuMTcsMTEuNjdMMTMuNDEsMTAuNDFDMTMuNzgsMTAuMDUgMTQsOS41NSAxNCw5QzE0LDcuODkgMTMuMSw3IDEyLDdBMiwyIDAgMCwwIDEwLDlIOEE0LDQgMCAwLDEgMTIsNUE0LDQgMCAwLDEgMTYsOUMxNiw5Ljg4IDE1LjY0LDEwLjY3IDE1LjA3LDExLjI1TTEzLDE5SDExVjE3SDEzTTEyLDJBMTAsMTAgMCAwLDAgMiwxMkExMCwxMCAwIDAsMCAxMiwyMkExMCwxMCAwIDAsMCAyMiwxMkMyMiw2LjQ3IDE3LjUsMiAxMiwyWlxcXCIgLz48L3N2Zz5cIik7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5hdHRlbnRpb24sIC5tZC10eXBlc2V0IGRldGFpbHMuYXR0ZW50aW9uLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5jYXV0aW9uLCAubWQtdHlwZXNldCBkZXRhaWxzLmNhdXRpb24sIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLndhcm5pbmcsIC5tZC10eXBlc2V0IGRldGFpbHMud2FybmluZyB7XG4gIGJvcmRlci1sZWZ0LWNvbG9yOiAjZmY5MTAwO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uYXR0ZW50aW9uID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmF0dGVudGlvbiA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uY2F1dGlvbiA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgZGV0YWlscy5jYXV0aW9uID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi53YXJuaW5nID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLndhcm5pbmcgPiA6Zmlyc3QtY2hpbGQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMTQ1LCAwLCAwLjEpO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uYXR0ZW50aW9uID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMuYXR0ZW50aW9uID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmNhdXRpb24gPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5jYXV0aW9uID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLndhcm5pbmcgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy53YXJuaW5nID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY5MTAwO1xuICAtd2Via2l0LW1hc2staW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk0xMywxNEgxMVYxMEgxM00xMywxOEgxMVYxNkgxM00xLDIxSDIzTDEyLDJMMSwyMVpcXFwiIC8+PC9zdmc+XCIpO1xuICAgICAgICAgIG1hc2staW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk0xMywxNEgxMVYxMEgxM00xMywxOEgxMVYxNkgxM00xLDIxSDIzTDEyLDJMMSwyMVpcXFwiIC8+PC9zdmc+XCIpO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24ubWlzc2luZywgLm1kLXR5cGVzZXQgZGV0YWlscy5taXNzaW5nLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5mYWlsLCAubWQtdHlwZXNldCBkZXRhaWxzLmZhaWwsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmZhaWx1cmUsIC5tZC10eXBlc2V0IGRldGFpbHMuZmFpbHVyZSB7XG4gIGJvcmRlci1sZWZ0LWNvbG9yOiAjZmY1MjUyO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24ubWlzc2luZyA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgZGV0YWlscy5taXNzaW5nID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5mYWlsID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmZhaWwgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmZhaWx1cmUgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IGRldGFpbHMuZmFpbHVyZSA+IDpmaXJzdC1jaGlsZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCA4MiwgODIsIDAuMSk7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5taXNzaW5nID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMubWlzc2luZyA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5mYWlsID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMuZmFpbCA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5mYWlsdXJlID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMuZmFpbHVyZSA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmNTI1MjtcbiAgLXdlYmtpdC1tYXNrLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgdmlld0JveD1cXFwiMCAwIDI0IDI0XFxcIj48cGF0aCBkPVxcXCJNMTIsMkMxNy41MywyIDIyLDYuNDcgMjIsMTJDMjIsMTcuNTMgMTcuNTMsMjIgMTIsMjJDNi40NywyMiAyLDE3LjUzIDIsMTJDMiw2LjQ3IDYuNDcsMiAxMiwyTTE1LjU5LDdMMTIsMTAuNTlMOC40MSw3TDcsOC40MUwxMC41OSwxMkw3LDE1LjU5TDguNDEsMTdMMTIsMTMuNDFMMTUuNTksMTdMMTcsMTUuNTlMMTMuNDEsMTJMMTcsOC40MUwxNS41OSw3WlxcXCIgLz48L3N2Zz5cIik7XG4gICAgICAgICAgbWFzay1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCI+PHBhdGggZD1cXFwiTTEyLDJDMTcuNTMsMiAyMiw2LjQ3IDIyLDEyQzIyLDE3LjUzIDE3LjUzLDIyIDEyLDIyQzYuNDcsMjIgMiwxNy41MyAyLDEyQzIsNi40NyA2LjQ3LDIgMTIsMk0xNS41OSw3TDEyLDEwLjU5TDguNDEsN0w3LDguNDFMMTAuNTksMTJMNywxNS41OUw4LjQxLDE3TDEyLDEzLjQxTDE1LjU5LDE3TDE3LDE1LjU5TDEzLjQxLDEyTDE3LDguNDFMMTUuNTksN1pcXFwiIC8+PC9zdmc+XCIpO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uZXJyb3IsIC5tZC10eXBlc2V0IGRldGFpbHMuZXJyb3IsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmRhbmdlciwgLm1kLXR5cGVzZXQgZGV0YWlscy5kYW5nZXIge1xuICBib3JkZXItbGVmdC1jb2xvcjogI2ZmMTc0NDtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmVycm9yID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmVycm9yID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5kYW5nZXIgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IGRldGFpbHMuZGFuZ2VyID4gOmZpcnN0LWNoaWxkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDIzLCA2OCwgMC4xKTtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmVycm9yID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMuZXJyb3IgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uZGFuZ2VyID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMuZGFuZ2VyID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmYxNzQ0O1xuICAtd2Via2l0LW1hc2staW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk0xMS41LDIwTDE2LjM2LDEwLjI3SDEzVjRMOCwxMy43M0gxMS41VjIwTTEyLDJDMTQuNzUsMiAxNy4xLDMgMTkuMDUsNC45NUMyMSw2LjkgMjIsOS4yNSAyMiwxMkMyMiwxNC43NSAyMSwxNy4xIDE5LjA1LDE5LjA1QzE3LjEsMjEgMTQuNzUsMjIgMTIsMjJDOS4yNSwyMiA2LjksMjEgNC45NSwxOS4wNUMzLDE3LjEgMiwxNC43NSAyLDEyQzIsOS4yNSAzLDYuOSA0Ljk1LDQuOTVDNi45LDMgOS4yNSwyIDEyLDJaXFxcIiAvPjwvc3ZnPlwiKTtcbiAgICAgICAgICBtYXNrLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgdmlld0JveD1cXFwiMCAwIDI0IDI0XFxcIj48cGF0aCBkPVxcXCJNMTEuNSwyMEwxNi4zNiwxMC4yN0gxM1Y0TDgsMTMuNzNIMTEuNVYyME0xMiwyQzE0Ljc1LDIgMTcuMSwzIDE5LjA1LDQuOTVDMjEsNi45IDIyLDkuMjUgMjIsMTJDMjIsMTQuNzUgMjEsMTcuMSAxOS4wNSwxOS4wNUMxNy4xLDIxIDE0Ljc1LDIyIDEyLDIyQzkuMjUsMjIgNi45LDIxIDQuOTUsMTkuMDVDMywxNy4xIDIsMTQuNzUgMiwxMkMyLDkuMjUgMyw2LjkgNC45NSw0Ljk1QzYuOSwzIDkuMjUsMiAxMiwyWlxcXCIgLz48L3N2Zz5cIik7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5idWcsIC5tZC10eXBlc2V0IGRldGFpbHMuYnVnIHtcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICNmNTAwNTc7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5idWcgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IGRldGFpbHMuYnVnID4gOmZpcnN0LWNoaWxkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNDUsIDAsIDg3LCAwLjEpO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uYnVnID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMuYnVnID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjUwMDU3O1xuICAtd2Via2l0LW1hc2staW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk0xNCwxMkgxMFYxMEgxNE0xNCwxNkgxMFYxNEgxNE0yMCw4SDE3LjE5QzE2Ljc0LDcuMjIgMTYuMTIsNi41NSAxNS4zNyw2LjA0TDE3LDQuNDFMMTUuNTksM0wxMy40Miw1LjE3QzEyLjk2LDUuMDYgMTIuNSw1IDEyLDVDMTEuNSw1IDExLjA0LDUuMDYgMTAuNTksNS4xN0w4LjQxLDNMNyw0LjQxTDguNjIsNi4wNEM3Ljg4LDYuNTUgNy4yNiw3LjIyIDYuODEsOEg0VjEwSDYuMDlDNi4wNCwxMC4zMyA2LDEwLjY2IDYsMTFWMTJINFYxNEg2VjE1QzYsMTUuMzQgNi4wNCwxNS42NyA2LjA5LDE2SDRWMThINi44MUM3Ljg1LDE5Ljc5IDkuNzgsMjEgMTIsMjFDMTQuMjIsMjEgMTYuMTUsMTkuNzkgMTcuMTksMThIMjBWMTZIMTcuOTFDMTcuOTYsMTUuNjcgMTgsMTUuMzQgMTgsMTVWMTRIMjBWMTJIMThWMTFDMTgsMTAuNjYgMTcuOTYsMTAuMzMgMTcuOTEsMTBIMjBWOFpcXFwiIC8+PC9zdmc+XCIpO1xuICAgICAgICAgIG1hc2staW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk0xNCwxMkgxMFYxMEgxNE0xNCwxNkgxMFYxNEgxNE0yMCw4SDE3LjE5QzE2Ljc0LDcuMjIgMTYuMTIsNi41NSAxNS4zNyw2LjA0TDE3LDQuNDFMMTUuNTksM0wxMy40Miw1LjE3QzEyLjk2LDUuMDYgMTIuNSw1IDEyLDVDMTEuNSw1IDExLjA0LDUuMDYgMTAuNTksNS4xN0w4LjQxLDNMNyw0LjQxTDguNjIsNi4wNEM3Ljg4LDYuNTUgNy4yNiw3LjIyIDYuODEsOEg0VjEwSDYuMDlDNi4wNCwxMC4zMyA2LDEwLjY2IDYsMTFWMTJINFYxNEg2VjE1QzYsMTUuMzQgNi4wNCwxNS42NyA2LjA5LDE2SDRWMThINi44MUM3Ljg1LDE5Ljc5IDkuNzgsMjEgMTIsMjFDMTQuMjIsMjEgMTYuMTUsMTkuNzkgMTcuMTksMThIMjBWMTZIMTcuOTFDMTcuOTYsMTUuNjcgMTgsMTUuMzQgMTgsMTVWMTRIMjBWMTJIMThWMTFDMTgsMTAuNjYgMTcuOTYsMTAuMzMgMTcuOTEsMTBIMjBWOFpcXFwiIC8+PC9zdmc+XCIpO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uZXhhbXBsZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5leGFtcGxlIHtcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICM2NTFmZmY7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5leGFtcGxlID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmV4YW1wbGUgPiA6Zmlyc3QtY2hpbGQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDEwMSwgMzEsIDI1NSwgMC4xKTtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmV4YW1wbGUgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5leGFtcGxlID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjUxZmZmO1xuICAtd2Via2l0LW1hc2staW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk03LDEzVjExSDIxVjEzSDdNNywxOVYxN0gyMVYxOUg3TTcsN1Y1SDIxVjdIN00zLDhWNUgyVjRINFY4SDNNMiwxN1YxNkg1VjIwSDJWMTlINFYxOC41SDNWMTcuNUg0VjE3SDJNNC4yNSwxMEEwLjc1LDAuNzUgMCAwLDEgNSwxMC43NUM1LDEwLjk1IDQuOTIsMTEuMTQgNC43OSwxMS4yN0wzLjEyLDEzSDVWMTRIMlYxMy4wOEw0LDExSDJWMTBINC4yNVpcXFwiIC8+PC9zdmc+XCIpO1xuICAgICAgICAgIG1hc2staW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk03LDEzVjExSDIxVjEzSDdNNywxOVYxN0gyMVYxOUg3TTcsN1Y1SDIxVjdIN00zLDhWNUgyVjRINFY4SDNNMiwxN1YxNkg1VjIwSDJWMTlINFYxOC41SDNWMTcuNUg0VjE3SDJNNC4yNSwxMEEwLjc1LDAuNzUgMCAwLDEgNSwxMC43NUM1LDEwLjk1IDQuOTIsMTEuMTQgNC43OSwxMS4yN0wzLjEyLDEzSDVWMTRIMlYxMy4wOEw0LDExSDJWMTBINC4yNVpcXFwiIC8+PC9zdmc+XCIpO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uY2l0ZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5jaXRlLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5xdW90ZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5xdW90ZSB7XG4gIGJvcmRlci1sZWZ0LWNvbG9yOiAjOWU5ZTllO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uY2l0ZSA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgZGV0YWlscy5jaXRlID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5xdW90ZSA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgZGV0YWlscy5xdW90ZSA+IDpmaXJzdC1jaGlsZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMTU4LCAxNTgsIDE1OCwgMC4xKTtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmNpdGUgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5jaXRlID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnF1b3RlID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMucXVvdGUgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM5ZTllOWU7XG4gIC13ZWJraXQtbWFzay1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCI+PHBhdGggZD1cXFwiTTE0LDE3SDE3TDE5LDEzVjdIMTNWMTNIMTZNNiwxN0g5TDExLDEzVjdINVYxM0g4TDYsMTdaXFxcIiAvPjwvc3ZnPlwiKTtcbiAgICAgICAgICBtYXNrLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgdmlld0JveD1cXFwiMCAwIDI0IDI0XFxcIj48cGF0aCBkPVxcXCJNMTQsMTdIMTdMMTksMTNWN0gxM1YxM0gxNk02LDE3SDlMMTEsMTNWN0g1VjEzSDhMNiwxN1pcXFwiIC8+PC9zdmc+XCIpO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24tdGl0bGUsIC5tZC10eXBlc2V0IHN1bW1hcnkge1xuICBtYXJnaW46IDAgLTAuNnJlbTtcbiAgcGFkZGluZzogMC40cmVtIDAuNnJlbSAwLjRyZW0gMnJlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSg2OCwgMTM4LCAyNTUsIDAuMSk7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG59XG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24tdGl0bGUsIFtkaXI9cnRsXSAubWQtdHlwZXNldCBzdW1tYXJ5IHtcbiAgcGFkZGluZzogMC40cmVtIDJyZW0gMC40cmVtIDAuNnJlbTtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLXRpdGxlOmxhc3QtY2hpbGQsIC5tZC10eXBlc2V0IHN1bW1hcnk6bGFzdC1jaGlsZCB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi10aXRsZTo6YmVmb3JlLCAubWQtdHlwZXNldCBzdW1tYXJ5OjpiZWZvcmUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdpZHRoOiAxcmVtO1xuICBoZWlnaHQ6IDFyZW07XG4gIG1hcmdpbi1sZWZ0OiAtMS40cmVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDQ4YWZmO1xuICAtd2Via2l0LW1hc2staW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk0yMC43MSw3LjA0QzIxLjEsNi42NSAyMS4xLDYgMjAuNzEsNS42M0wxOC4zNywzLjI5QzE4LDIuOSAxNy4zNSwyLjkgMTYuOTYsMy4yOUwxNS4xMiw1LjEyTDE4Ljg3LDguODdNMywxNy4yNVYyMUg2Ljc1TDE3LjgxLDkuOTNMMTQuMDYsNi4xOEwzLDE3LjI1WlxcXCIgLz48L3N2Zz5cIik7XG4gICAgICAgICAgbWFzay1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCI+PHBhdGggZD1cXFwiTTIwLjcxLDcuMDRDMjEuMSw2LjY1IDIxLjEsNiAyMC43MSw1LjYzTDE4LjM3LDMuMjlDMTgsMi45IDE3LjM1LDIuOSAxNi45NiwzLjI5TDE1LjEyLDUuMTJMMTguODcsOC44N00zLDE3LjI1VjIxSDYuNzVMMTcuODEsOS45M0wxNC4wNiw2LjE4TDMsMTcuMjVaXFxcIiAvPjwvc3ZnPlwiKTtcbiAgY29udGVudDogXCJcIjtcbn1cbltkaXI9cnRsXSAubWQtdHlwZXNldCAuYWRtb25pdGlvbi10aXRsZTo6YmVmb3JlLCBbZGlyPXJ0bF0gLm1kLXR5cGVzZXQgc3VtbWFyeTo6YmVmb3JlIHtcbiAgbWFyZ2luLXJpZ2h0OiAtMS40cmVtO1xuICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbn1cblxuLmNvZGVoaWxpdGUgLm8sIC5oaWdobGlnaHQgLm8ge1xuICBjb2xvcjogaW5oZXJpdDtcbn1cbi5jb2RlaGlsaXRlIC5vdywgLmhpZ2hsaWdodCAub3cge1xuICBjb2xvcjogaW5oZXJpdDtcbn1cbi5jb2RlaGlsaXRlIC5nZSwgLmhpZ2hsaWdodCAuZ2Uge1xuICBjb2xvcjogIzAwMDAwMDtcbn1cbi5jb2RlaGlsaXRlIC5nciwgLmhpZ2hsaWdodCAuZ3Ige1xuICBjb2xvcjogI0FBMDAwMDtcbn1cbi5jb2RlaGlsaXRlIC5naCwgLmhpZ2hsaWdodCAuZ2gge1xuICBjb2xvcjogIzk5OTk5OTtcbn1cbi5jb2RlaGlsaXRlIC5nbywgLmhpZ2hsaWdodCAuZ28ge1xuICBjb2xvcjogIzg4ODg4ODtcbn1cbi5jb2RlaGlsaXRlIC5ncCwgLmhpZ2hsaWdodCAuZ3Age1xuICBjb2xvcjogIzU1NTU1NTtcbn1cbi5jb2RlaGlsaXRlIC5ncywgLmhpZ2hsaWdodCAuZ3Mge1xuICBjb2xvcjogaW5oZXJpdDtcbn1cbi5jb2RlaGlsaXRlIC5ndSwgLmhpZ2hsaWdodCAuZ3Uge1xuICBjb2xvcjogI0FBQUFBQTtcbn1cbi5jb2RlaGlsaXRlIC5ndCwgLmhpZ2hsaWdodCAuZ3Qge1xuICBjb2xvcjogI0FBMDAwMDtcbn1cbi5jb2RlaGlsaXRlIC5nZCwgLmhpZ2hsaWdodCAuZ2Qge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZEREREO1xufVxuLmNvZGVoaWxpdGUgLmdpLCAuaGlnaGxpZ2h0IC5naSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNEREZGREQ7XG59XG4uY29kZWhpbGl0ZSAuaywgLmhpZ2hsaWdodCAuayB7XG4gIGNvbG9yOiAjM0I3OEU3O1xufVxuLmNvZGVoaWxpdGUgLmtjLCAuaGlnaGxpZ2h0IC5rYyB7XG4gIGNvbG9yOiAjQTcxRDVEO1xufVxuLmNvZGVoaWxpdGUgLmtkLCAuaGlnaGxpZ2h0IC5rZCB7XG4gIGNvbG9yOiAjM0I3OEU3O1xufVxuLmNvZGVoaWxpdGUgLmtuLCAuaGlnaGxpZ2h0IC5rbiB7XG4gIGNvbG9yOiAjM0I3OEU3O1xufVxuLmNvZGVoaWxpdGUgLmtwLCAuaGlnaGxpZ2h0IC5rcCB7XG4gIGNvbG9yOiAjQTcxRDVEO1xufVxuLmNvZGVoaWxpdGUgLmtyLCAuaGlnaGxpZ2h0IC5rciB7XG4gIGNvbG9yOiAjM0U2MUEyO1xufVxuLmNvZGVoaWxpdGUgLmt0LCAuaGlnaGxpZ2h0IC5rdCB7XG4gIGNvbG9yOiAjM0U2MUEyO1xufVxuLmNvZGVoaWxpdGUgLmMsIC5oaWdobGlnaHQgLmMge1xuICBjb2xvcjogIzk5OTk5OTtcbn1cbi5jb2RlaGlsaXRlIC5jbSwgLmhpZ2hsaWdodCAuY20ge1xuICBjb2xvcjogIzk5OTk5OTtcbn1cbi5jb2RlaGlsaXRlIC5jcCwgLmhpZ2hsaWdodCAuY3Age1xuICBjb2xvcjogIzY2NjY2Njtcbn1cbi5jb2RlaGlsaXRlIC5jMSwgLmhpZ2hsaWdodCAuYzEge1xuICBjb2xvcjogIzk5OTk5OTtcbn1cbi5jb2RlaGlsaXRlIC5jaCwgLmhpZ2hsaWdodCAuY2gge1xuICBjb2xvcjogIzk5OTk5OTtcbn1cbi5jb2RlaGlsaXRlIC5jcywgLmhpZ2hsaWdodCAuY3Mge1xuICBjb2xvcjogIzk5OTk5OTtcbn1cbi5jb2RlaGlsaXRlIC5uYSwgLmhpZ2hsaWdodCAubmEge1xuICBjb2xvcjogI0MyMTg1Qjtcbn1cbi5jb2RlaGlsaXRlIC5uYiwgLmhpZ2hsaWdodCAubmIge1xuICBjb2xvcjogI0MyMTg1Qjtcbn1cbi5jb2RlaGlsaXRlIC5icCwgLmhpZ2hsaWdodCAuYnAge1xuICBjb2xvcjogIzNFNjFBMjtcbn1cbi5jb2RlaGlsaXRlIC5uYywgLmhpZ2hsaWdodCAubmMge1xuICBjb2xvcjogI0MyMTg1Qjtcbn1cbi5jb2RlaGlsaXRlIC5ubywgLmhpZ2hsaWdodCAubm8ge1xuICBjb2xvcjogIzNFNjFBMjtcbn1cbi5jb2RlaGlsaXRlIC5uZCwgLmhpZ2hsaWdodCAubmQge1xuICBjb2xvcjogIzY2NjY2Njtcbn1cbi5jb2RlaGlsaXRlIC5uaSwgLmhpZ2hsaWdodCAubmkge1xuICBjb2xvcjogIzY2NjY2Njtcbn1cbi5jb2RlaGlsaXRlIC5uZSwgLmhpZ2hsaWdodCAubmUge1xuICBjb2xvcjogI0MyMTg1Qjtcbn1cbi5jb2RlaGlsaXRlIC5uZiwgLmhpZ2hsaWdodCAubmYge1xuICBjb2xvcjogI0MyMTg1Qjtcbn1cbi5jb2RlaGlsaXRlIC5ubCwgLmhpZ2hsaWdodCAubmwge1xuICBjb2xvcjogIzNCNTE3OTtcbn1cbi5jb2RlaGlsaXRlIC5ubiwgLmhpZ2hsaWdodCAubm4ge1xuICBjb2xvcjogI0VDNDA3QTtcbn1cbi5jb2RlaGlsaXRlIC5udCwgLmhpZ2hsaWdodCAubnQge1xuICBjb2xvcjogIzNCNzhFNztcbn1cbi5jb2RlaGlsaXRlIC5udiwgLmhpZ2hsaWdodCAubnYge1xuICBjb2xvcjogIzNFNjFBMjtcbn1cbi5jb2RlaGlsaXRlIC52YywgLmhpZ2hsaWdodCAudmMge1xuICBjb2xvcjogIzNFNjFBMjtcbn1cbi5jb2RlaGlsaXRlIC52ZywgLmhpZ2hsaWdodCAudmcge1xuICBjb2xvcjogIzNFNjFBMjtcbn1cbi5jb2RlaGlsaXRlIC52aSwgLmhpZ2hsaWdodCAudmkge1xuICBjb2xvcjogIzNFNjFBMjtcbn1cbi5jb2RlaGlsaXRlIC5ueCwgLmhpZ2hsaWdodCAubngge1xuICBjb2xvcjogI0VDNDA3QTtcbn1cbi5jb2RlaGlsaXRlIC5tLCAuaGlnaGxpZ2h0IC5tIHtcbiAgY29sb3I6ICNFNzRDM0M7XG59XG4uY29kZWhpbGl0ZSAubWYsIC5oaWdobGlnaHQgLm1mIHtcbiAgY29sb3I6ICNFNzRDM0M7XG59XG4uY29kZWhpbGl0ZSAubWgsIC5oaWdobGlnaHQgLm1oIHtcbiAgY29sb3I6ICNFNzRDM0M7XG59XG4uY29kZWhpbGl0ZSAubWksIC5oaWdobGlnaHQgLm1pIHtcbiAgY29sb3I6ICNFNzRDM0M7XG59XG4uY29kZWhpbGl0ZSAuaWwsIC5oaWdobGlnaHQgLmlsIHtcbiAgY29sb3I6ICNFNzRDM0M7XG59XG4uY29kZWhpbGl0ZSAubW8sIC5oaWdobGlnaHQgLm1vIHtcbiAgY29sb3I6ICNFNzRDM0M7XG59XG4uY29kZWhpbGl0ZSAucywgLmhpZ2hsaWdodCAucyB7XG4gIGNvbG9yOiAjMEQ5MDRGO1xufVxuLmNvZGVoaWxpdGUgLnNiLCAuaGlnaGxpZ2h0IC5zYiB7XG4gIGNvbG9yOiAjMEQ5MDRGO1xufVxuLmNvZGVoaWxpdGUgLnNjLCAuaGlnaGxpZ2h0IC5zYyB7XG4gIGNvbG9yOiAjMEQ5MDRGO1xufVxuLmNvZGVoaWxpdGUgLnNkLCAuaGlnaGxpZ2h0IC5zZCB7XG4gIGNvbG9yOiAjOTk5OTk5O1xufVxuLmNvZGVoaWxpdGUgLnMyLCAuaGlnaGxpZ2h0IC5zMiB7XG4gIGNvbG9yOiAjMEQ5MDRGO1xufVxuLmNvZGVoaWxpdGUgLnNlLCAuaGlnaGxpZ2h0IC5zZSB7XG4gIGNvbG9yOiAjMTgzNjkxO1xufVxuLmNvZGVoaWxpdGUgLnNoLCAuaGlnaGxpZ2h0IC5zaCB7XG4gIGNvbG9yOiAjMTgzNjkxO1xufVxuLmNvZGVoaWxpdGUgLnNpLCAuaGlnaGxpZ2h0IC5zaSB7XG4gIGNvbG9yOiAjMTgzNjkxO1xufVxuLmNvZGVoaWxpdGUgLnN4LCAuaGlnaGxpZ2h0IC5zeCB7XG4gIGNvbG9yOiAjMTgzNjkxO1xufVxuLmNvZGVoaWxpdGUgLnNyLCAuaGlnaGxpZ2h0IC5zciB7XG4gIGNvbG9yOiAjMDA5OTI2O1xufVxuLmNvZGVoaWxpdGUgLnMxLCAuaGlnaGxpZ2h0IC5zMSB7XG4gIGNvbG9yOiAjMEQ5MDRGO1xufVxuLmNvZGVoaWxpdGUgLnNzLCAuaGlnaGxpZ2h0IC5zcyB7XG4gIGNvbG9yOiAjMEQ5MDRGO1xufVxuLmNvZGVoaWxpdGUgLmVyciwgLmhpZ2hsaWdodCAuZXJyIHtcbiAgY29sb3I6ICNBNjE3MTc7XG59XG4uY29kZWhpbGl0ZSAudywgLmhpZ2hsaWdodCAudyB7XG4gIGNvbG9yOiB0cmFuc3BhcmVudDtcbn1cbi5jb2RlaGlsaXRlIC5obGwsIC5oaWdobGlnaHQgLmhsbCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW46IDAgLTAuNnJlbTtcbiAgcGFkZGluZzogMCAwLjZyZW07XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyMzUsIDU5LCAwLjUpO1xufVxuXG4uY29kZWhpbGl0ZXRhYmxlLCAuaGlnaGxpZ2h0dGFibGUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5jb2RlaGlsaXRldGFibGUgdGJvZHksIC5oaWdobGlnaHR0YWJsZSB0Ym9keSxcbi5jb2RlaGlsaXRldGFibGUgdGQsXG4uaGlnaGxpZ2h0dGFibGUgdGQge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogMDtcbn1cbi5jb2RlaGlsaXRldGFibGUgdHIsIC5oaWdobGlnaHR0YWJsZSB0ciB7XG4gIGRpc3BsYXk6IGZsZXg7XG59XG4uY29kZWhpbGl0ZXRhYmxlIHByZSwgLmhpZ2hsaWdodHRhYmxlIHByZSxcbi5jb2RlaGlsaXRldGFibGUgLmxpbmVub2Rpdixcbi5oaWdobGlnaHR0YWJsZSAubGluZW5vZGl2IHtcbiAgbWFyZ2luOiAwO1xuICBib3JkZXItcmFkaXVzOiAwO1xufVxuLmNvZGVoaWxpdGV0YWJsZSAubGluZW5vZGl2LCAuaGlnaGxpZ2h0dGFibGUgLmxpbmVub2RpdiB7XG4gIHBhZGRpbmc6IDAuNTI1cmVtIDAuNnJlbTtcbn1cbi5jb2RlaGlsaXRldGFibGUgLmxpbmVub3MsIC5oaWdobGlnaHR0YWJsZSAubGluZW5vcyB7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVyKTtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMC4wNXJlbSB2YXIoLS1tZC1jb2RlLWJnLWNvbG9yKTtcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbn1cbi5jb2RlaGlsaXRldGFibGUgLmxpbmVub3MgcHJlLCAuaGlnaGxpZ2h0dGFibGUgLmxpbmVub3MgcHJlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGNvbG9yOiBpbmhlcml0O1xuICB0ZXh0LWFsaWduOiByaWdodDtcbn1cbi5jb2RlaGlsaXRldGFibGUgLmNvZGUsIC5oaWdobGlnaHR0YWJsZSAuY29kZSB7XG4gIGZsZXg6IDE7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5tZC10eXBlc2V0ID4gLmNvZGVoaWxpdGV0YWJsZSwgLm1kLXR5cGVzZXQgPiAuaGlnaGxpZ2h0dGFibGUge1xuICBtYXJnaW46IDFlbSAwO1xuICBib3JkZXItcmFkaXVzOiAwLjJlbTtcbn1cblxuLm1kLXR5cGVzZXQgW2lkXj1cImZucmVmOlwiXSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cbi5tZC10eXBlc2V0IFtpZF49XCJmbnJlZjpcIl06dGFyZ2V0IHtcbiAgbWFyZ2luLXRvcDogLTMuOHJlbTtcbiAgcGFkZGluZy10b3A6IDMuOHJlbTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG4ubWQtdHlwZXNldCBbaWRePVwiZm46XCJdOjpiZWZvcmUge1xuICBkaXNwbGF5OiBub25lO1xuICBoZWlnaHQ6IDA7XG4gIGNvbnRlbnQ6IFwiXCI7XG59XG4ubWQtdHlwZXNldCBbaWRePVwiZm46XCJdOnRhcmdldDo6YmVmb3JlIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbi10b3A6IC0zLjVyZW07XG4gIHBhZGRpbmctdG9wOiAzLjVyZW07XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuLm1kLXR5cGVzZXQgLmZvb3Rub3RlIHtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgZm9udC1zaXplOiAwLjY0cmVtO1xufVxuLm1kLXR5cGVzZXQgLmZvb3Rub3RlIG9sIHtcbiAgbWFyZ2luLWxlZnQ6IDA7XG59XG4ubWQtdHlwZXNldCAuZm9vdG5vdGUgbGkge1xuICB0cmFuc2l0aW9uOiBjb2xvciAyNTBtcztcbn1cbi5tZC10eXBlc2V0IC5mb290bm90ZSBsaTp0YXJnZXQge1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvcik7XG59XG4ubWQtdHlwZXNldCAuZm9vdG5vdGUgbGkgOmZpcnN0LWNoaWxkIHtcbiAgbWFyZ2luLXRvcDogMDtcbn1cbi5tZC10eXBlc2V0IC5mb290bm90ZSBsaTpob3ZlciAuZm9vdG5vdGUtYmFja3JlZiwgLm1kLXR5cGVzZXQgLmZvb3Rub3RlIGxpOnRhcmdldCAuZm9vdG5vdGUtYmFja3JlZiB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcbiAgb3BhY2l0eTogMTtcbn1cbi5tZC10eXBlc2V0IC5mb290bm90ZSBsaTpob3ZlciAuZm9vdG5vdGUtYmFja3JlZjpob3ZlciwgLm1kLXR5cGVzZXQgLmZvb3Rub3RlIGxpOnRhcmdldCAuZm9vdG5vdGUtYmFja3JlZiB7XG4gIGNvbG9yOiB2YXIoLS1tZC1hY2NlbnQtZmctY29sb3IpO1xufVxuLm1kLXR5cGVzZXQgLmZvb3Rub3RlLXJlZiB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcG9pbnRlci1ldmVudHM6IGluaXRpYWw7XG59XG4ubWQtdHlwZXNldCAuZm9vdG5vdGUtcmVmOjpiZWZvcmUge1xuICBkaXNwbGF5OiBpbmxpbmU7XG4gIG1hcmdpbjogMCAwLjJlbTtcbiAgYm9yZGVyLWxlZnQ6IDAuMDVyZW0gc29saWQgdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG4gIGZvbnQtc2l6ZTogMS4yNWVtO1xuICBjb250ZW50OiBcIlwiO1xuICB2ZXJ0aWNhbC1hbGlnbjogLTAuMjVyZW07XG59XG4ubWQtdHlwZXNldCAuZm9vdG5vdGUtYmFja3JlZiB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDAuMjVyZW0pO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMjUwbXMgMjUwbXMsIGNvbG9yIDI1MG1zLCBvcGFjaXR5IDEyNW1zIDI1MG1zO1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG4gIGZvbnQtc2l6ZTogMDtcbiAgb3BhY2l0eTogMDtcbiAgdmVydGljYWwtYWxpZ246IHRleHQtYm90dG9tO1xufVxuW2Rpcj1ydGxdIC5tZC10eXBlc2V0IC5mb290bm90ZS1iYWNrcmVmIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0wLjI1cmVtKTtcbn1cbi5tZC10eXBlc2V0IC5mb290bm90ZS1iYWNrcmVmOjpiZWZvcmUge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiAwLjhyZW07XG4gIGhlaWdodDogMC44cmVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBjdXJyZW50Q29sb3I7XG4gIC13ZWJraXQtbWFzay1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCI+PHBhdGggZD1cXFwiTTE5LDdWMTFINS44M0w5LjQxLDcuNDFMOCw2TDIsMTJMOCwxOEw5LjQxLDE2LjU4TDUuODMsMTNIMjFWN0gxOVpcXFwiIC8+PC9zdmc+XCIpO1xuICAgICAgICAgIG1hc2staW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk0xOSw3VjExSDUuODNMOS40MSw3LjQxTDgsNkwyLDEyTDgsMThMOS40MSwxNi41OEw1LjgzLDEzSDIxVjdIMTlaXFxcIiAvPjwvc3ZnPlwiKTtcbiAgY29udGVudDogXCJcIjtcbn1cbltkaXI9cnRsXSAubWQtdHlwZXNldCAuZm9vdG5vdGUtYmFja3JlZjo6YmVmb3JlIHN2ZyB7XG4gIHRyYW5zZm9ybTogc2NhbGVYKC0xKTtcbn1cblxuLm1kLXR5cGVzZXQgLmhlYWRlcmxpbmsge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1hcmdpbi1sZWZ0OiAwLjVyZW07XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDAuMjVyZW0pO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMjUwbXMgMjUwbXMsIGNvbG9yIDI1MG1zLCBvcGFjaXR5IDEyNW1zIDI1MG1zLCB2aXNpYmlsaXR5IDBtcyA1MDBtcztcbiAgb3BhY2l0eTogMDtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xufVxuW2Rpcj1ydGxdIC5tZC10eXBlc2V0IC5oZWFkZXJsaW5rIHtcbiAgbWFyZ2luLXJpZ2h0OiAwLjVyZW07XG4gIG1hcmdpbi1sZWZ0OiBpbml0aWFsO1xufVxuaHRtbCBib2R5IC5tZC10eXBlc2V0IC5oZWFkZXJsaW5rIHtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpO1xufVxuLm1kLXR5cGVzZXQgOmhvdmVyIC5oZWFkZXJsaW5rLFxuLm1kLXR5cGVzZXQgOnRhcmdldCAuaGVhZGVybGluayxcbi5tZC10eXBlc2V0IC5oZWFkZXJsaW5rOmZvY3VzIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCk7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAyNTBtcyAyNTBtcywgY29sb3IgMjUwbXMsIG9wYWNpdHkgMTI1bXMgMjUwbXMsIHZpc2liaWxpdHkgMG1zO1xuICBvcGFjaXR5OiAxO1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xufVxuLm1kLXR5cGVzZXQgLmhlYWRlcmxpbms6Zm9jdXMsXG4ubWQtdHlwZXNldCAuaGVhZGVybGluazpob3Zlcixcbi5tZC10eXBlc2V0IDp0YXJnZXQgLmhlYWRlcmxpbmsge1xuICBjb2xvcjogdmFyKC0tbWQtYWNjZW50LWZnLWNvbG9yKTtcbn1cbi5tZC10eXBlc2V0IGgzW2lkXTo6YmVmb3JlLCAubWQtdHlwZXNldCBoMltpZF06OmJlZm9yZSwgLm1kLXR5cGVzZXQgaDFbaWRdOjpiZWZvcmUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luLXRvcDogLTAuNHJlbTtcbiAgcGFkZGluZy10b3A6IDAuNHJlbTtcbiAgY29udGVudDogXCJcIjtcbn1cbi5tZC10eXBlc2V0IGgzW2lkXTp0YXJnZXQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgaDJbaWRdOnRhcmdldDo6YmVmb3JlLCAubWQtdHlwZXNldCBoMVtpZF06dGFyZ2V0OjpiZWZvcmUge1xuICBtYXJnaW4tdG9wOiAtMy40cmVtO1xuICBwYWRkaW5nLXRvcDogMy40cmVtO1xufVxuLm1kLXR5cGVzZXQgaDRbaWRdOjpiZWZvcmUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luLXRvcDogLTAuNDVyZW07XG4gIHBhZGRpbmctdG9wOiAwLjQ1cmVtO1xuICBjb250ZW50OiBcIlwiO1xufVxuLm1kLXR5cGVzZXQgaDRbaWRdOnRhcmdldDo6YmVmb3JlIHtcbiAgbWFyZ2luLXRvcDogLTMuNDVyZW07XG4gIHBhZGRpbmctdG9wOiAzLjQ1cmVtO1xufVxuLm1kLXR5cGVzZXQgaDZbaWRdOjpiZWZvcmUsIC5tZC10eXBlc2V0IGg1W2lkXTo6YmVmb3JlIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbi10b3A6IC0wLjZyZW07XG4gIHBhZGRpbmctdG9wOiAwLjZyZW07XG4gIGNvbnRlbnQ6IFwiXCI7XG59XG4ubWQtdHlwZXNldCBoNltpZF06dGFyZ2V0OjpiZWZvcmUsIC5tZC10eXBlc2V0IGg1W2lkXTp0YXJnZXQ6OmJlZm9yZSB7XG4gIG1hcmdpbi10b3A6IC0zLjZyZW07XG4gIHBhZGRpbmctdG9wOiAzLjZyZW07XG59XG4ubWQtdHlwZXNldCAuTUpYYy1kaXNwbGF5IHtcbiAgbWFyZ2luOiAwLjc1ZW0gMDtcbiAgcGFkZGluZzogMC43NWVtIDA7XG4gIG92ZXJmbG93OiBhdXRvO1xuICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG59XG4ubWQtdHlwZXNldCAuTWF0aEpheF9DSFRNTCB7XG4gIG91dGxpbmU6IDA7XG59XG5cbi5tZC10eXBlc2V0IGRlbC5jcml0aWMsXG4ubWQtdHlwZXNldCBpbnMuY3JpdGljLFxuLm1kLXR5cGVzZXQgLmNyaXRpYy5jb21tZW50IHtcbiAgbWFyZ2luOiAwIDAuMjVlbTtcbiAgcGFkZGluZzogMC4wNjI1ZW0gMDtcbiAgYm9yZGVyLXJhZGl1czogMC4xcmVtO1xuICAtd2Via2l0LWJveC1kZWNvcmF0aW9uLWJyZWFrOiBjbG9uZTtcbiAgICAgICAgICBib3gtZGVjb3JhdGlvbi1icmVhazogY2xvbmU7XG59XG4ubWQtdHlwZXNldCBkZWwuY3JpdGljIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRERERDtcbiAgYm94LXNoYWRvdzogMC4yNWVtIDAgMCAjRkZERERELCAtMC4yNWVtIDAgMCAjRkZEREREO1xufVxuLm1kLXR5cGVzZXQgaW5zLmNyaXRpYyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNEREZGREQ7XG4gIGJveC1zaGFkb3c6IDAuMjVlbSAwIDAgI0RERkZERCwgLTAuMjVlbSAwIDAgI0RERkZERDtcbn1cbi5tZC10eXBlc2V0IC5jcml0aWMuY29tbWVudCB7XG4gIGNvbG9yOiAjOTk5OTk5O1xufVxuLm1kLXR5cGVzZXQgLmNyaXRpYy5jb21tZW50OjpiZWZvcmUge1xuICBjb250ZW50OiBcIi8qIFwiO1xufVxuLm1kLXR5cGVzZXQgLmNyaXRpYy5jb21tZW50OjphZnRlciB7XG4gIGNvbnRlbnQ6IFwiICovXCI7XG59XG4ubWQtdHlwZXNldCAuY3JpdGljLmJsb2NrIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbjogMWVtIDA7XG4gIHBhZGRpbmctcmlnaHQ6IDAuOHJlbTtcbiAgcGFkZGluZy1sZWZ0OiAwLjhyZW07XG4gIGJveC1zaGFkb3c6IG5vbmU7XG59XG4ubWQtdHlwZXNldCAuY3JpdGljLmJsb2NrIDpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi10b3A6IDAuNWVtO1xufVxuLm1kLXR5cGVzZXQgLmNyaXRpYy5ibG9jayA6bGFzdC1jaGlsZCB7XG4gIG1hcmdpbi1ib3R0b206IDAuNWVtO1xufVxuXG4ubWQtdHlwZXNldCBkZXRhaWxzIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmctdG9wOiAwO1xufVxuLm1kLXR5cGVzZXQgZGV0YWlsc1tvcGVuXSA+IHN1bW1hcnk6OmFmdGVyIHtcbiAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbn1cbi5tZC10eXBlc2V0IGRldGFpbHM6bm90KFtvcGVuXSkge1xuICBwYWRkaW5nLWJvdHRvbTogMDtcbn1cbi5tZC10eXBlc2V0IGRldGFpbHM6bm90KFtvcGVuXSkgPiBzdW1tYXJ5IHtcbiAgYm9yZGVyLWJvdHRvbTogbm9uZTtcbn1cbi5tZC10eXBlc2V0IGRldGFpbHMgc3VtbWFyeSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgcGFkZGluZy1yaWdodDogMnJlbTtcbn1cbltkaXI9cnRsXSAubWQtdHlwZXNldCBkZXRhaWxzIHN1bW1hcnkge1xuICBwYWRkaW5nLWxlZnQ6IDJyZW07XG59XG4ubWQtdHlwZXNldCBzdW1tYXJ5IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG91dGxpbmU6IG5vbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5tZC10eXBlc2V0IHN1bW1hcnk6Oi13ZWJraXQtZGV0YWlscy1tYXJrZXIge1xuICBkaXNwbGF5OiBub25lO1xufVxuLm1kLXR5cGVzZXQgc3VtbWFyeTo6YWZ0ZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiAwLjZyZW07XG4gIHdpZHRoOiAxcmVtO1xuICBoZWlnaHQ6IDFyZW07XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpO1xuICAtd2Via2l0LW1hc2staW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk03LjQxLDguNThMMTIsMTMuMTdMMTYuNTksOC41OEwxOCwxMEwxMiwxNkw2LDEwTDcuNDEsOC41OFpcXFwiIC8+PC9zdmc+XCIpO1xuICAgICAgICAgIG1hc2staW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk03LjQxLDguNThMMTIsMTMuMTdMMTYuNTksOC41OEwxOCwxMEwxMiwxNkw2LDEwTDcuNDEsOC41OFpcXFwiIC8+PC9zdmc+XCIpO1xuICBjb250ZW50OiBcIlwiO1xufVxuW2Rpcj1ydGxdIC5tZC10eXBlc2V0IHN1bW1hcnk6OmFmdGVyIHtcbiAgcmlnaHQ6IGluaXRpYWw7XG4gIGxlZnQ6IDAuNnJlbTtcbn1cblxuLm1kLXR5cGVzZXQgLmVtb2ppb25lLFxuLm1kLXR5cGVzZXQgLnR3ZW1vamksXG4ubWQtdHlwZXNldCAuZ2Vtb2ppIHtcbiAgd2lkdGg6IDFyZW07XG4gIHZlcnRpY2FsLWFsaWduOiB0ZXh0LXRvcDtcbn1cblxuLmhpZ2hsaWdodCBbZGF0YS1saW5lbm9zXTo6YmVmb3JlIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwb3NpdGlvbjogLXdlYmtpdC1zdGlja3k7XG4gIHBvc2l0aW9uOiBzdGlja3k7XG4gIGxlZnQ6IC0wLjZyZW07XG4gIG1hcmdpbi1yaWdodDogMC42cmVtO1xuICBtYXJnaW4tbGVmdDogLTAuNnJlbTtcbiAgcGFkZGluZy1sZWZ0OiAwLjZyZW07XG4gIGJvcmRlci1yaWdodDogMC4wNXJlbSBzb2xpZCB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVzdCk7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVyKTtcbiAgY29udGVudDogYXR0cihkYXRhLWxpbmVub3MpO1xuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xufVxuXG4ubWQtdHlwZXNldCBjb2RlLmNvZGVoaWxpdGUsIC5tZC10eXBlc2V0IGNvZGUuaGlnaGxpZ2h0IHtcbiAgbWFyZ2luOiAwIDAuMjk0MTE3NjQ3MWVtO1xuICBwYWRkaW5nOiAwLjA3MzUyOTQxMThlbSAwO1xufVxuXG4ubWQtdHlwZXNldCAudGFiYmVkLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xuICBvcmRlcjogOTk7XG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1jb2RlLWJnLWNvbG9yKTtcbn1cbi5tZC10eXBlc2V0IC50YWJiZWQtY29udGVudCBwcmUge1xuICBtYXJnaW46IDA7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBtYXJnaW46IDFlbSAwO1xuICBib3JkZXI6IDAuMDVyZW0gc29saWQgdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlc3QpO1xuICBib3JkZXItcmFkaXVzOiAwLjFyZW07XG59XG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGlucHV0IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5tZC10eXBlc2V0IC50YWJiZWQtc2V0ID4gaW5wdXQ6Y2hlY2tlZCArIGxhYmVsIHtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1tZC1hY2NlbnQtZmctY29sb3IpO1xuICBjb2xvcjogdmFyKC0tbWQtYWNjZW50LWZnLWNvbG9yKTtcbn1cbi5tZC10eXBlc2V0IC50YWJiZWQtc2V0ID4gaW5wdXQ6Y2hlY2tlZCArIGxhYmVsICsgLnRhYmJlZC1jb250ZW50IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDAgMC42cmVtO1xufVxuLm1kLXR5cGVzZXQgLnRhYmJlZC1zZXQgPiBpbnB1dDpjaGVja2VkICsgbGFiZWwgKyAudGFiYmVkLWNvbnRlbnQgPiA6bGFzdC1jaGlsZCB7XG4gIG1hcmdpbi1ib3R0b206IDAuNnJlbTtcbn1cbi5tZC10eXBlc2V0IC50YWJiZWQtc2V0ID4gaW5wdXQ6Y2hlY2tlZCArIGxhYmVsICsgLnRhYmJlZC1jb250ZW50ID4gcHJlOm9ubHktY2hpbGQsXG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGlucHV0OmNoZWNrZWQgKyBsYWJlbCArIC50YWJiZWQtY29udGVudCA+IC5oaWdobGlnaHQ6b25seS1jaGlsZCxcbi5tZC10eXBlc2V0IC50YWJiZWQtc2V0ID4gaW5wdXQ6Y2hlY2tlZCArIGxhYmVsICsgLnRhYmJlZC1jb250ZW50ID4gLmhpZ2hsaWdodHRhYmxlOm9ubHktY2hpbGQsXG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGlucHV0OmNoZWNrZWQgKyBsYWJlbCArIC50YWJiZWQtY29udGVudCA+IC5jb2RlaGlsaXRlOm9ubHktY2hpbGQsXG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGlucHV0OmNoZWNrZWQgKyBsYWJlbCArIC50YWJiZWQtY29udGVudCA+IC5jb2RlaGlsaXRldGFibGU6b25seS1jaGlsZCB7XG4gIG1hcmdpbjogMCAtMC42cmVtO1xufVxuLm1kLXR5cGVzZXQgLnRhYmJlZC1zZXQgPiBpbnB1dDpjaGVja2VkICsgbGFiZWwgKyAudGFiYmVkLWNvbnRlbnQgPiBwcmU6b25seS1jaGlsZCBwcmUsXG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGlucHV0OmNoZWNrZWQgKyBsYWJlbCArIC50YWJiZWQtY29udGVudCA+IC5oaWdobGlnaHQ6b25seS1jaGlsZCBwcmUsXG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGlucHV0OmNoZWNrZWQgKyBsYWJlbCArIC50YWJiZWQtY29udGVudCA+IC5oaWdobGlnaHR0YWJsZTpvbmx5LWNoaWxkIHByZSxcbi5tZC10eXBlc2V0IC50YWJiZWQtc2V0ID4gaW5wdXQ6Y2hlY2tlZCArIGxhYmVsICsgLnRhYmJlZC1jb250ZW50ID4gLmNvZGVoaWxpdGU6b25seS1jaGlsZCBwcmUsXG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGlucHV0OmNoZWNrZWQgKyBsYWJlbCArIC50YWJiZWQtY29udGVudCA+IC5jb2RlaGlsaXRldGFibGU6b25seS1jaGlsZCBwcmUge1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbn1cbi5tZC10eXBlc2V0IC50YWJiZWQtc2V0ID4gbGFiZWwge1xuICB3aWR0aDogYXV0bztcbiAgcGFkZGluZzogMC42cmVtO1xuICBwYWRkaW5nLWJvdHRvbTogMC41cmVtO1xuICB0cmFuc2l0aW9uOiBjb2xvciAxMjVtcywgYm9yZGVyIDI1MG1zO1xuICBib3JkZXItYm90dG9tOiAwLjFyZW0gc29saWQgdHJhbnNwYXJlbnQ7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG4gIGZvbnQtc2l6ZTogMC42NHJlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuaHRtbCAubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGxhYmVsOmhvdmVyIHtcbiAgY29sb3I6IHZhcigtLW1kLWFjY2VudC1mZy1jb2xvcik7XG59XG5cbi5tZC10eXBlc2V0IC50YXNrLWxpc3QtaXRlbSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xufVxuLm1kLXR5cGVzZXQgLnRhc2stbGlzdC1pdGVtIFt0eXBlPWNoZWNrYm94XSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwLjQ1ZW07XG4gIGxlZnQ6IC0yZW07XG59XG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgLnRhc2stbGlzdC1pdGVtIFt0eXBlPWNoZWNrYm94XSB7XG4gIHJpZ2h0OiAtMmVtO1xuICBsZWZ0OiBpbml0aWFsO1xufVxuLm1kLXR5cGVzZXQgLnRhc2stbGlzdC1jb250cm9sIC50YXNrLWxpc3QtaW5kaWNhdG9yOjpiZWZvcmUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMC4xNWVtO1xuICBsZWZ0OiAtMS41ZW07XG4gIHdpZHRoOiAxLjI1ZW07XG4gIGhlaWdodDogMS4yNWVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVzdCk7XG4gIC13ZWJraXQtbWFzay1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCI+PHBhdGggZD1cXFwiTTEyLDJBMTAsMTAgMCAwLDAgMiwxMkExMCwxMCAwIDAsMCAxMiwyMkExMCwxMCAwIDAsMCAyMiwxMkExMCwxMCAwIDAsMCAxMiwyWlxcXCIgLz48L3N2Zz5cIik7XG4gICAgICAgICAgbWFzay1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCI+PHBhdGggZD1cXFwiTTEyLDJBMTAsMTAgMCAwLDAgMiwxMkExMCwxMCAwIDAsMCAxMiwyMkExMCwxMCAwIDAsMCAyMiwxMkExMCwxMCAwIDAsMCAxMiwyWlxcXCIgLz48L3N2Zz5cIik7XG4gIGNvbnRlbnQ6IFwiXCI7XG59XG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgLnRhc2stbGlzdC1jb250cm9sIC50YXNrLWxpc3QtaW5kaWNhdG9yOjpiZWZvcmUge1xuICByaWdodDogLTEuNWVtO1xuICBsZWZ0OiBpbml0aWFsO1xufVxuLm1kLXR5cGVzZXQgLnRhc2stbGlzdC1jb250cm9sIFt0eXBlPWNoZWNrYm94XTpjaGVja2VkICsgLnRhc2stbGlzdC1pbmRpY2F0b3I6OmJlZm9yZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwMGU2NzY7XG4gIC13ZWJraXQtbWFzay1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCI+PHBhdGggZD1cXFwiTTEyLDJBMTAsMTAgMCAwLDEgMjIsMTJBMTAsMTAgMCAwLDEgMTIsMjJBMTAsMTAgMCAwLDEgMiwxMkExMCwxMCAwIDAsMSAxMiwyTTExLDE2LjVMMTgsOS41TDE2LjU5LDguMDlMMTEsMTMuNjdMNy45MSwxMC41OUw2LjUsMTJMMTEsMTYuNVpcXFwiIC8+PC9zdmc+XCIpO1xuICAgICAgICAgIG1hc2staW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk0xMiwyQTEwLDEwIDAgMCwxIDIyLDEyQTEwLDEwIDAgMCwxIDEyLDIyQTEwLDEwIDAgMCwxIDIsMTJBMTAsMTAgMCAwLDEgMTIsMk0xMSwxNi41TDE4LDkuNUwxNi41OSw4LjA5TDExLDEzLjY3TDcuOTEsMTAuNTlMNi41LDEyTDExLDE2LjVaXFxcIiAvPjwvc3ZnPlwiKTtcbn1cbi5tZC10eXBlc2V0IC50YXNrLWxpc3QtY29udHJvbCBbdHlwZT1jaGVja2JveF0ge1xuICBvcGFjaXR5OiAwO1xuICB6LWluZGV4OiAtMTtcbn1cbkBtZWRpYSBwcmludCB7XG4gIC5tZC10eXBlc2V0IGE6OmFmdGVyIHtcbiAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuICAgIGNvbnRlbnQ6IFwiIFtcIiBhdHRyKGhyZWYpIFwiXVwiO1xuICB9XG4gIC5tZC10eXBlc2V0IGNvZGUsXG4ubWQtdHlwZXNldCBwcmUsXG4ubWQtdHlwZXNldCBrYmQge1xuICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcbiAgfVxuICAubWQtY2xpcGJvYXJkIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5tZC1jb250ZW50X19idXR0b24ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbiAgLm1kLWRpYWxvZyB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuICAubWQtaGVhZGVyIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5tZC1mb290ZXIge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbiAgLm1kLXNpZGViYXIge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbiAgLm1kLXRhYnMge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbiAgLm1kLXR5cGVzZXQgLmhlYWRlcmxpbmsge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ0LjkzNzVlbSkge1xuICAubWQtdHlwZXNldCA+IHByZSB7XG4gICAgbWFyZ2luOiAxZW0gLTAuOHJlbTtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICB9XG4gIC5tZC10eXBlc2V0ID4gcHJlID4gY29kZSB7XG4gICAgcGFkZGluZzogMC41MjVyZW0gMC44cmVtO1xuICB9XG4gIC5tZC1mb290ZXItbmF2X19saW5rLS1wcmV2IC5tZC1mb290ZXItbmF2X190aXRsZSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuICAubWQtc2VhcmNoLXJlc3VsdF9fdGVhc2VyIHtcbiAgICBtYXgtaGVpZ2h0OiAyLjVyZW07XG4gICAgLXdlYmtpdC1saW5lLWNsYW1wOiAzO1xuICB9XG4gIC5jb2RlaGlsaXRlIC5obGwsIC5oaWdobGlnaHQgLmhsbCB7XG4gICAgbWFyZ2luOiAwIC0wLjhyZW07XG4gICAgcGFkZGluZzogMCAwLjhyZW07XG4gIH1cbiAgLm1kLXR5cGVzZXQgPiAuY29kZWhpbGl0ZSwgLm1kLXR5cGVzZXQgPiAuaGlnaGxpZ2h0IHtcbiAgICBtYXJnaW46IDFlbSAtMC44cmVtO1xuICB9XG4gIC5tZC10eXBlc2V0ID4gLmNvZGVoaWxpdGUgY29kZSwgLm1kLXR5cGVzZXQgPiAuaGlnaGxpZ2h0IGNvZGUge1xuICAgIHBhZGRpbmc6IDAuNTI1cmVtIDAuOHJlbTtcbiAgfVxuICAubWQtdHlwZXNldCA+IC5jb2RlaGlsaXRldGFibGUsIC5tZC10eXBlc2V0ID4gLmhpZ2hsaWdodHRhYmxlIHtcbiAgICBtYXJnaW46IDFlbSAtMC44cmVtO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gIH1cbiAgLm1kLXR5cGVzZXQgPiAuY29kZWhpbGl0ZXRhYmxlIC5saW5lbm9kaXYsIC5tZC10eXBlc2V0ID4gLmhpZ2hsaWdodHRhYmxlIC5saW5lbm9kaXYge1xuICAgIHBhZGRpbmc6IDAuNXJlbSAwLjhyZW07XG4gIH1cbiAgLm1kLXR5cGVzZXQgPiBwID4gLk1KWGMtZGlzcGxheSB7XG4gICAgbWFyZ2luOiAwLjc1ZW0gLTAuOHJlbTtcbiAgICBwYWRkaW5nOiAwLjI1ZW0gMC44cmVtO1xuICB9XG4gIC5oaWdobGlnaHQgW2RhdGEtbGluZW5vc106OmJlZm9yZSB7XG4gICAgbGVmdDogLTEuNnJlbTtcbiAgICBtYXJnaW4tbGVmdDogLTEuNnJlbTtcbiAgICBwYWRkaW5nLWxlZnQ6IDEuNnJlbTtcbiAgfVxuICAubWQtdHlwZXNldCA+IC50YWJiZWQtc2V0IHtcbiAgICBtYXJnaW46IDFlbSAtMC44cmVtO1xuICAgIGJvcmRlcjogMDtcbiAgICBib3JkZXItdG9wOiAwLjA1cmVtIHNvbGlkIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0KTtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICB9XG4gIC5tZC10eXBlc2V0ID4gLnRhYmJlZC1zZXQgY29kZSB7XG4gICAgcGFkZGluZzogMC41MjVyZW0gMC44cmVtO1xuICB9XG4gIC5tZC10eXBlc2V0ID4gLnRhYmJlZC1zZXQgaW5wdXQ6Zmlyc3QtY2hpbGQgKyBsYWJlbCB7XG4gICAgbWFyZ2luLWxlZnQ6IDAuMnJlbTtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAwZW0pIHtcbiAgaHRtbCB7XG4gICAgZm9udC1zaXplOiAxMzcuNSU7XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEyNWVtKSB7XG4gIGh0bWwge1xuICAgIGZvbnQtc2l6ZTogMTUwJTtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNTkuOTM3NWVtKSB7XG4gIGJvZHlbZGF0YS1tZC1zdGF0ZT1sb2NrXSB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICB9XG4gIGh0bWwgLm1kLW5hdl9fbGlua1tmb3I9X190b2NdIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nLXJpZ2h0OiAyLjRyZW07XG4gIH1cbiAgaHRtbCAubWQtbmF2X19saW5rW2Zvcj1fX3RvY10gKyAubWQtbmF2X19saW5rIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIGh0bWwgLm1kLW5hdl9fbGlua1tmb3I9X190b2NdIH4gLm1kLW5hdiB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgfVxuICBodG1sIFtkaXI9cnRsXSAubWQtbmF2X19saW5rIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjhyZW07XG4gICAgcGFkZGluZy1sZWZ0OiAyLjRyZW07XG4gIH1cbiAgLm1kLW5hdl9fc291cmNlIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nOiAwIDAuMnJlbTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1wcmltYXJ5LWZnLWNvbG9yLS1kYXJrKTtcbiAgICBjb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1iZy1jb2xvcik7XG4gIH1cbiAgLm1kLXNlYXJjaF9fb3ZlcmxheSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMC4ycmVtO1xuICAgIGxlZnQ6IC0yLjJyZW07XG4gICAgd2lkdGg6IDJyZW07XG4gICAgaGVpZ2h0OiAycmVtO1xuICAgIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlcjtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMzAwbXMgMTAwbXMsIG9wYWNpdHkgMjAwbXMgMjAwbXM7XG4gICAgYm9yZGVyLXJhZGl1czogMXJlbTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB9XG4gIFtkaXI9cnRsXSAubWQtc2VhcmNoX19vdmVybGF5IHtcbiAgICByaWdodDogLTIuMnJlbTtcbiAgICBsZWZ0OiBpbml0aWFsO1xuICB9XG4gIFtkYXRhLW1kLXRvZ2dsZT1zZWFyY2hdOmNoZWNrZWQgfiAubWQtaGVhZGVyIC5tZC1zZWFyY2hfX292ZXJsYXkge1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSA0MDBtcywgb3BhY2l0eSAxMDBtcztcbiAgICBvcGFjaXR5OiAxO1xuICB9XG4gIC5tZC1zZWFyY2hfX2lubmVyIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDEwMCU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCg1JSk7XG4gICAgdHJhbnNpdGlvbjogcmlnaHQgMG1zIDMwMG1zLCBsZWZ0IDBtcyAzMDBtcywgdHJhbnNmb3JtIDE1MG1zIDE1MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSksIG9wYWNpdHkgMTUwbXMgMTUwbXM7XG4gICAgb3BhY2l0eTogMDtcbiAgICB6LWluZGV4OiAyO1xuICB9XG4gIFtkYXRhLW1kLXRvZ2dsZT1zZWFyY2hdOmNoZWNrZWQgfiAubWQtaGVhZGVyIC5tZC1zZWFyY2hfX2lubmVyIHtcbiAgICBsZWZ0OiAwO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcbiAgICB0cmFuc2l0aW9uOiByaWdodCAwbXMgMG1zLCBsZWZ0IDBtcyAwbXMsIHRyYW5zZm9ybSAxNTBtcyAxNTBtcyBjdWJpYy1iZXppZXIoMC4xLCAwLjcsIDAuMSwgMSksIG9wYWNpdHkgMTUwbXMgMTUwbXM7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuICBbZGlyPXJ0bF0gW2RhdGEtbWQtdG9nZ2xlPXNlYXJjaF06Y2hlY2tlZCB+IC5tZC1oZWFkZXIgLm1kLXNlYXJjaF9faW5uZXIge1xuICAgIHJpZ2h0OiAwO1xuICAgIGxlZnQ6IGluaXRpYWw7XG4gIH1cbiAgaHRtbCBbZGlyPXJ0bF0gLm1kLXNlYXJjaF9faW5uZXIge1xuICAgIHJpZ2h0OiAxMDAlO1xuICAgIGxlZnQ6IGluaXRpYWw7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01JSk7XG4gIH1cbiAgLm1kLXNlYXJjaF9faW5wdXQge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMi40cmVtO1xuICAgIGZvbnQtc2l6ZTogMC45cmVtO1xuICB9XG4gIC5tZC1zZWFyY2hfX2ljb25bZm9yPV9fc2VhcmNoXSB7XG4gICAgdG9wOiAwLjZyZW07XG4gICAgbGVmdDogMC44cmVtO1xuICB9XG4gIFtkaXI9cnRsXSAubWQtc2VhcmNoX19pY29uW2Zvcj1fX3NlYXJjaF0ge1xuICAgIHJpZ2h0OiAwLjhyZW07XG4gICAgbGVmdDogaW5pdGlhbDtcbiAgfVxuICAubWQtc2VhcmNoX19pY29uW2Zvcj1fX3NlYXJjaF0gc3ZnOmZpcnN0LWNoaWxkIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5tZC1zZWFyY2hfX2ljb25bdHlwZT1yZXNldF0ge1xuICAgIHRvcDogMC42cmVtO1xuICAgIHJpZ2h0OiAwLjhyZW07XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1zZWFyY2hfX2ljb25bdHlwZT1yZXNldF0ge1xuICAgIHJpZ2h0OiBpbml0aWFsO1xuICAgIGxlZnQ6IDAuOHJlbTtcbiAgfVxuICAubWQtc2VhcmNoX19vdXRwdXQge1xuICAgIHRvcDogMi40cmVtO1xuICAgIGJvdHRvbTogMDtcbiAgfVxuICAubWQtc2VhcmNoLXJlc3VsdF9faWNvbiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzYuMTg3NWVtKSB7XG4gIFtkYXRhLW1kLXRvZ2dsZT1kcmF3ZXJdOmNoZWNrZWQgfiAubWQtb3ZlcmxheSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHRyYW5zaXRpb246IHdpZHRoIDBtcywgaGVpZ2h0IDBtcywgb3BhY2l0eSAyNTBtcztcbiAgICBvcGFjaXR5OiAxO1xuICB9XG4gIC5tZC1oZWFkZXItbmF2X19idXR0b24ubWQtbG9nbyB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuICAubWQtaGVyb19faW5uZXIge1xuICAgIG1hcmdpbi10b3A6IDIuNHJlbTtcbiAgICBtYXJnaW4tYm90dG9tOiAxLjJyZW07XG4gIH1cbiAgLm1kLW5hdiB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gIH1cbiAgLm1kLW5hdi0tcHJpbWFyeSwgLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgbGVmdDogMDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICB6LWluZGV4OiAxO1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9fdGl0bGUsXG4ubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXZfX2l0ZW0ge1xuICAgIGZvbnQtc2l6ZTogMC44cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjU7XG4gIH1cbiAgLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2X190aXRsZSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGhlaWdodDogNS42cmVtO1xuICAgIHBhZGRpbmc6IDNyZW0gMC44cmVtIDAuMnJlbTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVzdCk7XG4gICAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIGxpbmUtaGVpZ2h0OiAyLjRyZW07XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gIH1cbiAgLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2X190aXRsZSAubWQtbmF2X19pY29uIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwLjRyZW07XG4gICAgbGVmdDogMC40cmVtO1xuICAgIHdpZHRoOiAxLjJyZW07XG4gICAgaGVpZ2h0OiAxLjJyZW07XG4gICAgbWFyZ2luOiAwLjJyZW07XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9fdGl0bGUgLm1kLW5hdl9faWNvbiB7XG4gICAgcmlnaHQ6IDAuNHJlbTtcbiAgICBsZWZ0OiBpbml0aWFsO1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9fdGl0bGUgfiAubWQtbmF2X19saXN0IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcbiAgICBib3gtc2hhZG93OiBpbnNldCAwIDAuMDVyZW0gMCB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVzdCk7XG4gICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICAtd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgICAgICAgIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAtd2Via2l0LXNjcm9sbC1zbmFwLXR5cGU6IHkgbWFuZGF0b3J5O1xuICAgICAgICAtbXMtc2Nyb2xsLXNuYXAtdHlwZTogeSBtYW5kYXRvcnk7XG4gICAgICAgICAgICBzY3JvbGwtc25hcC10eXBlOiB5IG1hbmRhdG9yeTtcbiAgfVxuICAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXZfX3RpdGxlIH4gLm1kLW5hdl9fbGlzdCA+IC5tZC1uYXZfX2l0ZW06Zmlyc3QtY2hpbGQge1xuICAgIGJvcmRlci10b3A6IDA7XG4gIH1cbiAgLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2X190aXRsZVtmb3I9X19kcmF3ZXJdIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1mZy1jb2xvcik7XG4gICAgY29sb3I6IHZhcigtLW1kLXByaW1hcnktYmctY29sb3IpO1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9fdGl0bGVbZm9yPV9fZHJhd2VyXSAubWQtbmF2X19idXR0b24ge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDAuMnJlbTtcbiAgICBsZWZ0OiAwLjJyZW07XG4gICAgbWFyZ2luOiAwLjJyZW07XG4gICAgcGFkZGluZzogMC40cmVtO1xuICAgIGZvbnQtc2l6ZTogMi40cmVtO1xuICB9XG4gIGh0bWwgW2Rpcj1ydGxdIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9fdGl0bGVbZm9yPV9fZHJhd2VyXSAubWQtbmF2X19idXR0b24ge1xuICAgIHJpZ2h0OiAwLjJyZW07XG4gICAgbGVmdDogaW5pdGlhbDtcbiAgfVxuICAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXZfX2xpc3Qge1xuICAgIGZsZXg6IDE7XG4gIH1cbiAgLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2X19pdGVtIHtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGJvcmRlci10b3A6IDAuMDVyZW0gc29saWQgdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlc3QpO1xuICB9XG4gIFtkaXI9cnRsXSAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXZfX2l0ZW0ge1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cbiAgLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2X19pdGVtLS1uZXN0ZWQgPiAubWQtbmF2X19saW5rIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAyLjRyZW07XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9faXRlbS0tbmVzdGVkID4gLm1kLW5hdl9fbGluayB7XG4gICAgcGFkZGluZy1yaWdodDogMC44cmVtO1xuICAgIHBhZGRpbmctbGVmdDogMi40cmVtO1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9faXRlbS0tYWN0aXZlID4gLm1kLW5hdl9fbGluayB7XG4gICAgY29sb3I6IHZhcigtLW1kLXByaW1hcnktZmctY29sb3IpO1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9fbGluayB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1hcmdpbi10b3A6IDA7XG4gICAgcGFkZGluZzogMC42cmVtIDAuOHJlbTtcbiAgfVxuICAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXZfX2xpbmsgLm1kLW5hdl9faWNvbiB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogNTAlO1xuICAgIHJpZ2h0OiAwLjZyZW07XG4gICAgbWFyZ2luLXRvcDogLTAuNnJlbTtcbiAgICBjb2xvcjogaW5oZXJpdDtcbiAgICBmb250LXNpemU6IDEuMnJlbTtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2X19saW5rIC5tZC1uYXZfX2ljb24ge1xuICAgIHJpZ2h0OiBpbml0aWFsO1xuICAgIGxlZnQ6IDAuNnJlbTtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2X19pY29uIHN2ZyB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgtMSk7XG4gIH1cbiAgLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2LS1zZWNvbmRhcnkgLm1kLW5hdl9fbGluayB7XG4gICAgcG9zaXRpb246IHN0YXRpYztcbiAgfVxuICAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXYtLXNlY29uZGFyeSAubWQtbmF2IHtcbiAgICBwb3NpdGlvbjogc3RhdGljO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdi0tc2Vjb25kYXJ5IC5tZC1uYXYgLm1kLW5hdl9fbGluayB7XG4gICAgcGFkZGluZy1sZWZ0OiAxLjRyZW07XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdi0tc2Vjb25kYXJ5IC5tZC1uYXYgLm1kLW5hdl9fbGluayB7XG4gICAgcGFkZGluZy1yaWdodDogMS40cmVtO1xuICAgIHBhZGRpbmctbGVmdDogaW5pdGlhbDtcbiAgfVxuICAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXYtLXNlY29uZGFyeSAubWQtbmF2IC5tZC1uYXYgLm1kLW5hdl9fbGluayB7XG4gICAgcGFkZGluZy1sZWZ0OiAycmVtO1xuICB9XG4gIFtkaXI9cnRsXSAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXYtLXNlY29uZGFyeSAubWQtbmF2IC5tZC1uYXYgLm1kLW5hdl9fbGluayB7XG4gICAgcGFkZGluZy1yaWdodDogMnJlbTtcbiAgICBwYWRkaW5nLWxlZnQ6IGluaXRpYWw7XG4gIH1cbiAgLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2LS1zZWNvbmRhcnkgLm1kLW5hdiAubWQtbmF2IC5tZC1uYXYgLm1kLW5hdl9fbGluayB7XG4gICAgcGFkZGluZy1sZWZ0OiAyLjZyZW07XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdi0tc2Vjb25kYXJ5IC5tZC1uYXYgLm1kLW5hdiAubWQtbmF2IC5tZC1uYXZfX2xpbmsge1xuICAgIHBhZGRpbmctcmlnaHQ6IDIuNnJlbTtcbiAgICBwYWRkaW5nLWxlZnQ6IGluaXRpYWw7XG4gIH1cbiAgLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2LS1zZWNvbmRhcnkgLm1kLW5hdiAubWQtbmF2IC5tZC1uYXYgLm1kLW5hdiAubWQtbmF2X19saW5rIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDMuMnJlbTtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2LS1zZWNvbmRhcnkgLm1kLW5hdiAubWQtbmF2IC5tZC1uYXYgLm1kLW5hdiAubWQtbmF2X19saW5rIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAzLjJyZW07XG4gICAgcGFkZGluZy1sZWZ0OiBpbml0aWFsO1xuICB9XG4gIC5tZC1uYXZfX3RvZ2dsZSB+IC5tZC1uYXYge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwMCUpO1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAyNTBtcyBjdWJpYy1iZXppZXIoMC44LCAwLCAwLjYsIDEpLCBvcGFjaXR5IDEyNW1zIDUwbXM7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLW5hdl9fdG9nZ2xlIH4gLm1kLW5hdiB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMDAlKTtcbiAgfVxuICAubWQtbmF2X190b2dnbGU6Y2hlY2tlZCB+IC5tZC1uYXYge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMjUwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSwgb3BhY2l0eSAxMjVtcyAxMjVtcztcbiAgICBvcGFjaXR5OiAxO1xuICB9XG4gIC5tZC1zaWRlYmFyLS1wcmltYXJ5IHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IC0xMi4xcmVtO1xuICAgIHdpZHRoOiAxMi4xcmVtO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDI1MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSksIGJveC1zaGFkb3cgMjUwbXM7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gICAgei1pbmRleDogMztcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLXNpZGViYXItLXByaW1hcnkge1xuICAgIHJpZ2h0OiAtMTIuMXJlbTtcbiAgICBsZWZ0OiBpbml0aWFsO1xuICB9XG4gIFtkYXRhLW1kLXRvZ2dsZT1kcmF3ZXJdOmNoZWNrZWQgfiAubWQtY29udGFpbmVyIC5tZC1zaWRlYmFyLS1wcmltYXJ5IHtcbiAgICBib3gtc2hhZG93OiAwIDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwIDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpLCAwIDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuNCk7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEyLjFyZW0pO1xuICB9XG4gIFtkaXI9cnRsXSBbZGF0YS1tZC10b2dnbGU9ZHJhd2VyXTpjaGVja2VkIH4gLm1kLWNvbnRhaW5lciAubWQtc2lkZWJhci0tcHJpbWFyeSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMi4xcmVtKTtcbiAgfVxuICAubWQtc2lkZWJhci0tcHJpbWFyeSAubWQtc2lkZWJhcl9fc2Nyb2xsd3JhcCB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgfVxuICAubWQtc2lkZWJhci0tcHJpbWFyeSAubWQtc2lkZWJhcl9fc2Nyb2xsd3JhcCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICByaWdodDogMDtcbiAgICBib3R0b206IDA7XG4gICAgbGVmdDogMDtcbiAgICBtYXJnaW46IDA7XG4gICAgLXdlYmtpdC1zY3JvbGwtc25hcC10eXBlOiBub25lO1xuICAgICAgICAtbXMtc2Nyb2xsLXNuYXAtdHlwZTogbm9uZTtcbiAgICAgICAgICAgIHNjcm9sbC1zbmFwLXR5cGU6IG5vbmU7XG4gIH1cbiAgLm1kLXRhYnMge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDYwZW0pIHtcbiAgLm1kLWNvbnRlbnQge1xuICAgIG1hcmdpbi1yaWdodDogMTIuMXJlbTtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLWNvbnRlbnQge1xuICAgIG1hcmdpbi1yaWdodDogaW5pdGlhbDtcbiAgICBtYXJnaW4tbGVmdDogMTIuMXJlbTtcbiAgfVxuICAubWQtaGVhZGVyLW5hdl9fYnV0dG9uW2Zvcj1fX3NlYXJjaF0ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbiAgLm1kLWhlYWRlci1uYXZfX3NvdXJjZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IDExLjdyZW07XG4gICAgbWF4LXdpZHRoOiAxMS43cmVtO1xuICAgIG1hcmdpbi1sZWZ0OiAxcmVtO1xuICB9XG4gIFtkaXI9cnRsXSAubWQtaGVhZGVyLW5hdl9fc291cmNlIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDFyZW07XG4gICAgbWFyZ2luLWxlZnQ6IGluaXRpYWw7XG4gIH1cbiAgLm1kLW5hdi0tc2Vjb25kYXJ5IC5tZC1uYXZfX3RpdGxlW2Zvcj1fX3RvY10ge1xuICAgIHNjcm9sbC1zbmFwLWFsaWduOiBzdGFydDtcbiAgfVxuICAubWQtbmF2LS1zZWNvbmRhcnkgLm1kLW5hdl9fdGl0bGUgLm1kLW5hdl9faWNvbiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuICAubWQtc2VhcmNoIHtcbiAgICBwYWRkaW5nOiAwLjJyZW0gMDtcbiAgfVxuICAubWQtc2VhcmNoX19vdmVybGF5IHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgd2lkdGg6IDA7XG4gICAgaGVpZ2h0OiAwO1xuICAgIHRyYW5zaXRpb246IHdpZHRoIDBtcyAyNTBtcywgaGVpZ2h0IDBtcyAyNTBtcywgb3BhY2l0eSAyNTBtcztcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG4gIFtkaXI9cnRsXSAubWQtc2VhcmNoX19vdmVybGF5IHtcbiAgICByaWdodDogMDtcbiAgICBsZWZ0OiBpbml0aWFsO1xuICB9XG4gIFtkYXRhLW1kLXRvZ2dsZT1zZWFyY2hdOmNoZWNrZWQgfiAubWQtaGVhZGVyIC5tZC1zZWFyY2hfX292ZXJsYXkge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICB0cmFuc2l0aW9uOiB3aWR0aCAwbXMsIGhlaWdodCAwbXMsIG9wYWNpdHkgMjUwbXM7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuICAubWQtc2VhcmNoX19pbm5lciB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHdpZHRoOiAxMS43cmVtO1xuICAgIHBhZGRpbmc6IDAuMXJlbSAwO1xuICAgIGZsb2F0OiByaWdodDtcbiAgICB0cmFuc2l0aW9uOiB3aWR0aCAyNTBtcyBjdWJpYy1iZXppZXIoMC4xLCAwLjcsIDAuMSwgMSk7XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1zZWFyY2hfX2lubmVyIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgfVxuICAubWQtc2VhcmNoX19mb3JtIHtcbiAgICBib3JkZXItcmFkaXVzOiAwLjFyZW07XG4gIH1cbiAgLm1kLXNlYXJjaF9faW5wdXQge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMS44cmVtO1xuICAgIHBhZGRpbmctbGVmdDogMi4ycmVtO1xuICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMjUwbXMsIGNvbG9yIDI1MG1zO1xuICAgIGJvcmRlci1yYWRpdXM6IDAuMXJlbTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVyKTtcbiAgICBjb2xvcjogaW5oZXJpdDtcbiAgICBmb250LXNpemU6IDAuOHJlbTtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLXNlYXJjaF9faW5wdXQge1xuICAgIHBhZGRpbmctcmlnaHQ6IDIuMnJlbTtcbiAgfVxuICAubWQtc2VhcmNoX19pbnB1dCArIC5tZC1zZWFyY2hfX2ljb24ge1xuICAgIGNvbG9yOiB2YXIoLS1tZC1wcmltYXJ5LWJnLWNvbG9yKTtcbiAgfVxuICAubWQtc2VhcmNoX19pbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6IHZhcigtLW1kLXByaW1hcnktYmctY29sb3ItLWxpZ2h0KTtcbiAgfVxuICAubWQtc2VhcmNoX19pbnB1dDo6LW1vei1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6IHZhcigtLW1kLXByaW1hcnktYmctY29sb3ItLWxpZ2h0KTtcbiAgfVxuICAubWQtc2VhcmNoX19pbnB1dDo6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1iZy1jb2xvci0tbGlnaHQpO1xuICB9XG4gIC5tZC1zZWFyY2hfX2lucHV0OjpwbGFjZWhvbGRlciB7XG4gICAgY29sb3I6IHZhcigtLW1kLXByaW1hcnktYmctY29sb3ItLWxpZ2h0KTtcbiAgfVxuICAubWQtc2VhcmNoX19pbnB1dDpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvci0tbGlnaHRlc3QpO1xuICB9XG4gIFtkYXRhLW1kLXRvZ2dsZT1zZWFyY2hdOmNoZWNrZWQgfiAubWQtaGVhZGVyIC5tZC1zZWFyY2hfX2lucHV0IHtcbiAgICBib3JkZXItcmFkaXVzOiAwLjFyZW0gMC4xcmVtIDAgMDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcbiAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvcik7XG4gICAgdGV4dC1vdmVyZmxvdzogY2xpcDtcbiAgfVxuICBbZGF0YS1tZC10b2dnbGU9c2VhcmNoXTpjaGVja2VkIH4gLm1kLWhlYWRlciAubWQtc2VhcmNoX19pbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgfVxuICBbZGF0YS1tZC10b2dnbGU9c2VhcmNoXTpjaGVja2VkIH4gLm1kLWhlYWRlciAubWQtc2VhcmNoX19pbnB1dDo6LW1vei1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgfVxuICBbZGF0YS1tZC10b2dnbGU9c2VhcmNoXTpjaGVja2VkIH4gLm1kLWhlYWRlciAubWQtc2VhcmNoX19pbnB1dDo6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuICB9XG4gIFtkYXRhLW1kLXRvZ2dsZT1zZWFyY2hdOmNoZWNrZWQgfiAubWQtaGVhZGVyIC5tZC1zZWFyY2hfX2lucHV0ICsgLm1kLXNlYXJjaF9faWNvbiwgW2RhdGEtbWQtdG9nZ2xlPXNlYXJjaF06Y2hlY2tlZCB+IC5tZC1oZWFkZXIgLm1kLXNlYXJjaF9faW5wdXQ6OnBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuICB9XG4gIC5tZC1zZWFyY2hfX2ljb25bZm9yPV9fc2VhcmNoXSBzdmc6bGFzdC1jaGlsZCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuICAubWQtc2VhcmNoX19vdXRwdXQge1xuICAgIHRvcDogMS45cmVtO1xuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgNDAwbXM7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICBbZGF0YS1tZC10b2dnbGU9c2VhcmNoXTpjaGVja2VkIH4gLm1kLWhlYWRlciAubWQtc2VhcmNoX19vdXRwdXQge1xuICAgIGJveC1zaGFkb3c6IDAgNnB4IDEwcHggMCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwIDFweCAxOHB4IDAgcmdiYSgwLCAwLCAwLCAwLjEyKSwgMCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjQpO1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbiAgLm1kLXNlYXJjaF9fc2Nyb2xsd3JhcCB7XG4gICAgbWF4LWhlaWdodDogMDtcbiAgfVxuICBbZGF0YS1tZC10b2dnbGU9c2VhcmNoXTpjaGVja2VkIH4gLm1kLWhlYWRlciAubWQtc2VhcmNoX19zY3JvbGx3cmFwIHtcbiAgICBtYXgtaGVpZ2h0OiA3NXZoO1xuICB9XG4gIC5tZC1zZWFyY2hfX3Njcm9sbHdyYXA6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgICB3aWR0aDogMC4ycmVtO1xuICAgIGhlaWdodDogMC4ycmVtO1xuICB9XG4gIC5tZC1zZWFyY2hfX3Njcm9sbHdyYXA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVyKTtcbiAgfVxuICAubWQtc2VhcmNoX19zY3JvbGx3cmFwOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtYWNjZW50LWZnLWNvbG9yKTtcbiAgfVxuICAubWQtc2VhcmNoLXJlc3VsdF9fbWV0YSB7XG4gICAgcGFkZGluZy1sZWZ0OiAyLjJyZW07XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1zZWFyY2gtcmVzdWx0X19tZXRhIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAyLjJyZW07XG4gICAgcGFkZGluZy1sZWZ0OiBpbml0aWFsO1xuICB9XG4gIC5tZC1zZWFyY2gtcmVzdWx0X19hcnRpY2xlIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDIuMnJlbTtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLXNlYXJjaC1yZXN1bHRfX2FydGljbGUge1xuICAgIHBhZGRpbmctcmlnaHQ6IDIuMnJlbTtcbiAgICBwYWRkaW5nLWxlZnQ6IDAuOHJlbTtcbiAgfVxuICAubWQtc2lkZWJhci0tc2Vjb25kYXJ5IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW4tbGVmdDogY2FsYygxMDAlIC0gMTIuMXJlbSk7XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1zaWRlYmFyLS1zZWNvbmRhcnkge1xuICAgIG1hcmdpbi1yaWdodDogY2FsYygxMDAlIC0gMTIuMXJlbSk7XG4gICAgbWFyZ2luLWxlZnQ6IGluaXRpYWw7XG4gIH1cbiAgLm1kLXNpZGViYXItLXNlY29uZGFyeSAubWQtc2lkZWJhcl9fc2Nyb2xsd3JhcCB7XG4gICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xuICB9XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3Ni4yNWVtKSB7XG4gIC5tZC1jb250ZW50IHtcbiAgICBtYXJnaW4tbGVmdDogMTIuMXJlbTtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLWNvbnRlbnQge1xuICAgIG1hcmdpbi1yaWdodDogMTIuMXJlbTtcbiAgfVxuICAubWQtY29udGVudF9faW5uZXIge1xuICAgIG1hcmdpbi1yaWdodDogMS4ycmVtO1xuICAgIG1hcmdpbi1sZWZ0OiAxLjJyZW07XG4gIH1cbiAgLm1kLWhlYWRlci1uYXZfX2J1dHRvbltmb3I9X19kcmF3ZXJdIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5tZC1oZWFkZXItbmF2X19zb3VyY2Uge1xuICAgIG1hcmdpbi1sZWZ0OiAxLjRyZW07XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1oZWFkZXItbmF2X19zb3VyY2Uge1xuICAgIG1hcmdpbi1yaWdodDogMS40cmVtO1xuICB9XG4gIC5tZC1uYXYge1xuICAgIHRyYW5zaXRpb246IG1heC1oZWlnaHQgMjUwbXMgY3ViaWMtYmV6aWVyKDAuODYsIDAsIDAuMDcsIDEpO1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9fdGl0bGVbZm9yPV9fZHJhd2VyXSB7XG4gICAgc2Nyb2xsLXNuYXAtYWxpZ246IHN0YXJ0O1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9fdGl0bGUgLm1kLW5hdl9faWNvbiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuICAubWQtbmF2X190b2dnbGUgfiAubWQtbmF2IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5tZC1uYXZfX3RvZ2dsZTpjaGVja2VkIH4gLm1kLW5hdiB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbiAgLm1kLW5hdl9faXRlbS0tbmVzdGVkID4gLm1kLW5hdiA+IC5tZC1uYXZfX3RpdGxlIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5tZC1uYXZfX2ljb24ge1xuICAgIGhlaWdodDogMC45cmVtO1xuICAgIGZsb2F0OiByaWdodDtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMjUwbXM7XG4gIH1cbiAgLm1kLW5hdl9faWNvbiBzdmcge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogMC45cmVtO1xuICAgIGhlaWdodDogMC45cmVtO1xuICAgIHZlcnRpY2FsLWFsaWduOiAtMC4xcmVtO1xuICB9XG4gIC5tZC1uYXZfX2l0ZW0tLW5lc3RlZCAubWQtbmF2X190b2dnbGU6Y2hlY2tlZCB+IC5tZC1uYXZfX2xpbmsgLm1kLW5hdl9faWNvbiB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGVaKDkwZGVnKTtcbiAgfVxuICBbZGF0YS1tZC10b2dnbGU9c2VhcmNoXTpjaGVja2VkIH4gLm1kLWhlYWRlciAubWQtc2VhcmNoX19pbm5lciB7XG4gICAgd2lkdGg6IDM0LjRyZW07XG4gIH1cbiAgLm1kLXNlYXJjaF9fc2Nyb2xsd3JhcCB7XG4gICAgd2lkdGg6IDM0LjRyZW07XG4gIH1cbiAgLm1kLXNpZGViYXItLXNlY29uZGFyeSB7XG4gICAgbWFyZ2luLWxlZnQ6IDQ4LjlyZW07XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1zaWRlYmFyLS1zZWNvbmRhcnkge1xuICAgIG1hcmdpbi1yaWdodDogNDguOXJlbTtcbiAgICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbiAgfVxuICAubWQtdGFicyB+IC5tZC1tYWluIC5tZC1uYXYtLXByaW1hcnkgPiAubWQtbmF2X19saXN0ID4gLm1kLW5hdl9faXRlbS0tbmVzdGVkIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5tZC10YWJzLS1hY3RpdmUgfiAubWQtbWFpbiAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXZfX3RpdGxlIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nOiAwIDAuNnJlbTtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICBzY3JvbGwtc25hcC1hbGlnbjogc3RhcnQ7XG4gIH1cbiAgLm1kLXRhYnMtLWFjdGl2ZSB+IC5tZC1tYWluIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9fdGl0bGVbZm9yPV9fZHJhd2VyXSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuICAubWQtdGFicy0tYWN0aXZlIH4gLm1kLW1haW4gLm1kLW5hdi0tcHJpbWFyeSA+IC5tZC1uYXZfX2xpc3QgPiAubWQtbmF2X19pdGVtIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5tZC10YWJzLS1hY3RpdmUgfiAubWQtbWFpbiAubWQtbmF2LS1wcmltYXJ5ID4gLm1kLW5hdl9fbGlzdCA+IC5tZC1uYXZfX2l0ZW0tLWFjdGl2ZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcGFkZGluZzogMDtcbiAgfVxuICAubWQtdGFicy0tYWN0aXZlIH4gLm1kLW1haW4gLm1kLW5hdi0tcHJpbWFyeSA+IC5tZC1uYXZfX2xpc3QgPiAubWQtbmF2X19pdGVtLS1hY3RpdmUgPiAubWQtbmF2X19saW5rIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5tZC10YWJzLS1hY3RpdmUgfiAubWQtbWFpbiAubWQtbmF2W2RhdGEtbWQtbGV2ZWw9XCIxXCJdID4gLm1kLW5hdl9fbGlzdCA+IC5tZC1uYXZfX2l0ZW0ge1xuICAgIHBhZGRpbmc6IDAgMC42cmVtO1xuICB9XG4gIC5tZC10YWJzLS1hY3RpdmUgfiAubWQtbWFpbiAubWQtbmF2W2RhdGEtbWQtbGV2ZWw9XCIxXCJdIC5tZC1uYXYgLm1kLW5hdl9fdGl0bGUge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDQ1ZW0pIHtcbiAgLm1kLWZvb3Rlci1uYXZfX2xpbmsge1xuICAgIHdpZHRoOiA1MCU7XG4gIH1cbiAgLm1kLWZvb3Rlci1jb3B5cmlnaHQge1xuICAgIG1heC13aWR0aDogNzUlO1xuICAgIGZsb2F0OiBsZWZ0O1xuICB9XG4gIFtkaXI9cnRsXSAubWQtZm9vdGVyLWNvcHlyaWdodCB7XG4gICAgZmxvYXQ6IHJpZ2h0O1xuICB9XG4gIC5tZC1mb290ZXItc29jaWFsIHtcbiAgICBwYWRkaW5nOiAwLjZyZW0gMDtcbiAgICBmbG9hdDogcmlnaHQ7XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1mb290ZXItc29jaWFsIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogMjkuOTM3NWVtKSB7XG4gIFtkYXRhLW1kLXRvZ2dsZT1zZWFyY2hdOmNoZWNrZWQgfiAubWQtaGVhZGVyIC5tZC1zZWFyY2hfX292ZXJsYXkge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoNDUpO1xuICB9XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAzMGVtKSBhbmQgKG1heC13aWR0aDogNDQuOTM3NWVtKSB7XG4gIFtkYXRhLW1kLXRvZ2dsZT1zZWFyY2hdOmNoZWNrZWQgfiAubWQtaGVhZGVyIC5tZC1zZWFyY2hfX292ZXJsYXkge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoNjApO1xuICB9XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0NWVtKSBhbmQgKG1heC13aWR0aDogNTkuOTM3NWVtKSB7XG4gIFtkYXRhLW1kLXRvZ2dsZT1zZWFyY2hdOmNoZWNrZWQgfiAubWQtaGVhZGVyIC5tZC1zZWFyY2hfX292ZXJsYXkge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoNzUpO1xuICB9XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2MGVtKSBhbmQgKG1heC13aWR0aDogNzYuMTg3NWVtKSB7XG4gIFtkYXRhLW1kLXRvZ2dsZT1zZWFyY2hdOmNoZWNrZWQgfiAubWQtaGVhZGVyIC5tZC1zZWFyY2hfX2lubmVyIHtcbiAgICB3aWR0aDogMjMuNHJlbTtcbiAgfVxuICAubWQtc2VhcmNoX19zY3JvbGx3cmFwIHtcbiAgICB3aWR0aDogMjMuNHJlbTtcbiAgfVxuICAubWQtc2VhcmNoLXJlc3VsdF9fdGVhc2VyIHtcbiAgICBtYXgtaGVpZ2h0OiAyLjVyZW07XG4gICAgLXdlYmtpdC1saW5lLWNsYW1wOiAzO1xuICB9XG59XG5AbWVkaWEgKC13ZWJraXQtbWF4LWRldmljZS1waXhlbC1yYXRpbzogMSksIChtYXgtcmVzb2x1dGlvbjogMWRwcHgpIHtcbiAgLm1kLXNlYXJjaF9fc2Nyb2xsd3JhcCB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApO1xuICB9XG59IiwiLy8vL1xuLy8vIENvcHlyaWdodCAoYykgMjAxNi0yMDIwIE1hcnRpbiBEb25hdGggPG1hcnRpbi5kb25hdGhAc3F1aWRmdW5rLmNvbT5cbi8vL1xuLy8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLFxuLy8vIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vLyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSxcbi8vLyBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGVcbi8vLyBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy8vXG4vLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vL1xuLy8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTExcbi8vLyBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HXG4vLy8gRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUlxuLy8vIERFQUxJTkdTXG4vLy8vXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGVzOiBjb2xvcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuOnJvb3Qge1xuXG4gIC8vIERlZmF1bHQgY29sb3Igc2hhZGVzXG4gIC0tbWQtZGVmYXVsdC1mZy1jb2xvcjogICAgICAgICAgICAgICBoc2xhKDAsIDAlLCAwJSwgMC44Nyk7XG4gIC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQ6ICAgICAgICBoc2xhKDAsIDAlLCAwJSwgMC41NCk7XG4gIC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcjogICAgICBoc2xhKDAsIDAlLCAwJSwgMC4yNik7XG4gIC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlc3Q6ICAgICBoc2xhKDAsIDAlLCAwJSwgMC4wNyk7XG4gIC0tbWQtZGVmYXVsdC1iZy1jb2xvcjogICAgICAgICAgICAgICBoc2xhKDAsIDAlLCAxMDAlLCAxKTtcbiAgLS1tZC1kZWZhdWx0LWJnLWNvbG9yLS1saWdodDogICAgICAgIGhzbGEoMCwgMCUsIDEwMCUsIDAuNyk7XG4gIC0tbWQtZGVmYXVsdC1iZy1jb2xvci0tbGlnaHRlcjogICAgICBoc2xhKDAsIDAlLCAxMDAlLCAwLjMpO1xuICAtLW1kLWRlZmF1bHQtYmctY29sb3ItLWxpZ2h0ZXN0OiAgICAgaHNsYSgwLCAwJSwgMTAwJSwgMC4xMik7XG5cbiAgLy8gUHJpbWFyeSBjb2xvciBzaGFkZXNcbiAgLS1tZC1wcmltYXJ5LWZnLWNvbG9yOiAgICAgICAgICAgICAgIGhzbGEoI3toZXgyaHNsKCRjbHItaW5kaWdvLTUwMCl9LCAxKTtcbiAgLS1tZC1wcmltYXJ5LWZnLWNvbG9yLS1saWdodDogICAgICAgIGhzbGEoI3toZXgyaHNsKCRjbHItaW5kaWdvLTMwMCl9LCAxKTtcbiAgLS1tZC1wcmltYXJ5LWZnLWNvbG9yLS1kYXJrOiAgICAgICAgIGhzbGEoI3toZXgyaHNsKCRjbHItaW5kaWdvLTcwMCl9LCAxKTtcbiAgLS1tZC1wcmltYXJ5LWJnLWNvbG9yOiAgICAgICAgICAgICAgIHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3IpO1xuICAtLW1kLXByaW1hcnktYmctY29sb3ItLWxpZ2h0OiAgICAgICAgdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvci0tbGlnaHQpO1xuXG4gIC8vIEFjY2VudCBjb2xvciBzaGFkZXNcbiAgLS1tZC1hY2NlbnQtZmctY29sb3I6ICAgICAgICAgICAgICAgIGhzbGEoI3toZXgyaHNsKCRjbHItaW5kaWdvLWEyMDApfSwgMSk7XG4gIC0tbWQtYWNjZW50LWZnLWNvbG9yLS10cmFuc3BhcmVudDogICBoc2xhKCN7aGV4MmhzbCgkY2xyLWluZGlnby1hMjAwKX0sIDAuMSk7XG4gIC0tbWQtYWNjZW50LWJnLWNvbG9yOiAgICAgICAgICAgICAgICB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcbiAgLS1tZC1hY2NlbnQtYmctY29sb3ItLWxpZ2h0OiAgICAgICAgIHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3ItLWxpZ2h0KTtcblxuICAvLyBDb2RlIGJsb2NrIGNvbG9yIHNoYWRlc1xuICAtLW1kLWNvZGUtYmctY29sb3I6ICAgICAgICAgICAgICAgICAgaHNsYSgwLCAwJSwgOTIuNSUsIDAuNSk7XG4gIC0tbWQtY29kZS1mZy1jb2xvcjogICAgICAgICAgICAgICAgICBoc2xhKDIwMCwgMTglLCAyNiUsIDEpO1xufVxuIiwiLy8vL1xuLy8vIENvcHlyaWdodCAoYykgMjAxNi0yMDIwIE1hcnRpbiBEb25hdGggPG1hcnRpbi5kb25hdGhAc3F1aWRmdW5rLmNvbT5cbi8vL1xuLy8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLFxuLy8vIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vLyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSxcbi8vLyBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGVcbi8vLyBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy8vXG4vLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vL1xuLy8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTExcbi8vLyBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HXG4vLy8gRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUlxuLy8vIERFQUxJTkdTXG4vLy8vXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIEljb25cbi5tZC1pY29uIHtcblxuICAvLyBTVkcgZGVmYXVsdHNcbiAgc3ZnIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB3aWR0aDogcHgycmVtKDI0cHgpO1xuICAgIGhlaWdodDogcHgycmVtKDI0cHgpO1xuICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIGZpbGw6IGN1cnJlbnRDb2xvcjtcbiAgfVxufVxuIiwiLy8vL1xuLy8vIENvcHlyaWdodCAoYykgMjAxNi0yMDIwIE1hcnRpbiBEb25hdGggPG1hcnRpbi5kb25hdGhAc3F1aWRmdW5rLmNvbT5cbi8vL1xuLy8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLFxuLy8vIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vLyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSxcbi8vLyBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGVcbi8vLyBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy8vXG4vLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vL1xuLy8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTExcbi8vLyBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HXG4vLy8gRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUlxuLy8vIERFQUxJTkdTXG4vLy8vXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGVzOiBmb250IGRlZmluaXRpb25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIEVuYWJsZSBmb250LXNtb290aGluZyBpbiBXZWJraXQgYW5kIEZGXG5ib2R5IHtcbiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG59XG5cbi8vIERlZmF1bHQgZm9udHNcbmJvZHksXG5pbnB1dCB7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yKTtcbiAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiBcImtlcm5cIiwgXCJsaWdhXCI7XG4gIGZvbnQtZmFtaWx5OiBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG59XG5cbi8vIFByb3BvcnRpb25hbGx5IHNwYWNlZCBmb250c1xuY29kZSxcbnByZSxcbmtiZCB7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yKTtcbiAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiBcImtlcm5cIjtcbiAgZm9udC1mYW1pbHk6IFwiQ291cmllciBOZXdcIiwgQ291cmllciwgbW9ub3NwYWNlO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSdWxlczogdHlwZXNldHRlZCBjb250ZW50XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIENvbnRlbnQgdGhhdCBpcyB0eXBlc2V0IC0gaWYgcG9zc2libGUsIGFsbCBtYXJnaW5zLCBwYWRkaW5ncyBhbmQgZm9udCBzaXplc1xuLy8gc2hvdWxkIGJlIHNldCBpbiBlbXMsIHNvIG5lc3RlZCBibG9ja3MgKGUuZy4gQWRtb25pdGlvbikgcmVuZGVyIGNvcnJlY3RseSxcbi8vIGV4Y2VwdCBoZWFkbGluZXMgdGhhdCBzaG91bGQgb25seSBhcHBlYXIgb24gdGhlIHRvcCBsZXZlbCBhbmQgbmVlZCB0byBoYXZlXG4vLyBjb25zaXN0ZW50IHNwYWNpbmcgZHVlIHRvIGxheW91dCBjb25zdHJhaW50cy5cbi5tZC10eXBlc2V0IHtcbiAgZm9udC1zaXplOiBtcygwKTtcbiAgbGluZS1oZWlnaHQ6IDEuNjtcblxuICAvLyBDb2xvcnMgc2hvdWxkIGJlIGtlcHQgd2hlbiBwcmludGluZ1xuICAtd2Via2l0LXByaW50LWNvbG9yLWFkanVzdDogZXhhY3Q7IC8vIHN0eWxlbGludC1kaXNhYmxlLWxpbmVcblxuICAvLyBEZWZhdWx0IHNwYWNpbmdcbiAgcCxcbiAgdWwsXG4gIG9sLFxuICBibG9ja3F1b3RlIHtcbiAgICBtYXJnaW46IDFlbSAwO1xuICB9XG5cbiAgLy8gMXN0IGxldmVsIGhlYWRsaW5lXG4gIGgxIHtcbiAgICBtYXJnaW46IDAgMCBweDJyZW0oNDBweCk7XG4gICAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgICBmb250LXNpemU6IG1zKDMpO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuMztcbiAgfVxuXG4gIC8vIDJuZCBsZXZlbCBoZWFkbGluZVxuICBoMiB7XG4gICAgbWFyZ2luOiBweDJyZW0oNDBweCkgMCBweDJyZW0oMTZweCk7XG4gICAgZm9udC1zaXplOiBtcygyKTtcbiAgICBmb250LXdlaWdodDogMzAwO1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gIH1cblxuICAvLyAzcmQgbGV2ZWwgaGVhZGxpbmVcbiAgaDMge1xuICAgIG1hcmdpbjogcHgycmVtKDMycHgpIDAgcHgycmVtKDE2cHgpO1xuICAgIGZvbnQtc2l6ZTogbXMoMSk7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcbiAgICBsaW5lLWhlaWdodDogMS41O1xuICB9XG5cbiAgLy8gM3JkIGxldmVsIGhlYWRsaW5lIGZvbGxvd2luZyBhbiAybmQgbGV2ZWwgaGVhZGxpbmVcbiAgaDIgKyBoMyB7XG4gICAgbWFyZ2luLXRvcDogcHgycmVtKDE2cHgpO1xuICB9XG5cbiAgLy8gNHRoIGxldmVsIGhlYWRsaW5lXG4gIGg0IHtcbiAgICBtYXJnaW46IHB4MnJlbSgxNnB4KSAwO1xuICAgIGZvbnQtc2l6ZTogbXMoMCk7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcbiAgfVxuXG4gIC8vIDV0aCBhbmQgNnRoIGxldmVsIGhlYWRsaW5lXG4gIGg1LFxuICBoNiB7XG4gICAgbWFyZ2luOiBweDJyZW0oMTZweCkgMDtcbiAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuICAgIGZvbnQtc2l6ZTogbXMoLTEpO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gIH1cblxuICAvLyBPdmVycmlkZXMgZm9yIDV0aCBsZXZlbCBoZWFkbGluZVxuICBoNSB7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgfVxuXG4gIC8vIEhvcml6b250YWwgc2VwYXJhdG9yc1xuICBociB7XG4gICAgbWFyZ2luOiAxLjVlbSAwO1xuICAgIGJvcmRlci1ib3R0b206IHB4MnJlbSgxcHgpIGRvdHRlZCB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVyKTtcbiAgfVxuXG4gIC8vIExpbmtzXG4gIGEge1xuICAgIGNvbG9yOiB2YXIoLS1tZC1wcmltYXJ5LWZnLWNvbG9yKTtcbiAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuXG4gICAgLy8gQWxzbyBlbmFibGUgY29sb3IgdHJhbnNpdGlvbiBvbiBwc2V1ZG8gZWxlbWVudHNcbiAgICAmLFxuICAgICY6OmJlZm9yZSB7XG4gICAgICB0cmFuc2l0aW9uOiBjb2xvciAxMjVtcztcbiAgICB9XG5cbiAgICAvLyBGb2N1c2VkIG9yIGhvdmVyIGxpbmtzXG4gICAgJjpmb2N1cyxcbiAgICAmOmhvdmVyIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1tZC1hY2NlbnQtZmctY29sb3IpO1xuICAgIH1cblxuICAgIC8vIEFkZCBVUkxzIGZvciBwcmludFxuICAgIEBtZWRpYSBwcmludCB7XG5cbiAgICAgIC8vIFNob3cgbGluayBVUkxcbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgICAgICAgY29udGVudDogXCIgW1wiIGF0dHIoaHJlZikgXCJdXCI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQ29kZSBibG9ja3NcbiAgY29kZSxcbiAgcHJlLFxuICBrYmQge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWNvZGUtYmctY29sb3IpO1xuICAgIGNvbG9yOiB2YXIoLS1tZC1jb2RlLWZnLWNvbG9yKTtcbiAgICBmb250LXNpemU6IDg1JTtcbiAgICBkaXJlY3Rpb246IGx0cjtcblxuICAgIC8vIFdyYXAgdGV4dCBhbmQgaGlkZSBzY29sbGJhcnNcbiAgICBAbWVkaWEgcHJpbnQge1xuICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICAgIH1cbiAgfVxuXG4gIC8vIElubGluZSBjb2RlIGJsb2NrcywgY29ycmVjdCByZWxhdGl2ZSBlbXMgZm9yIHNtYWxsZXIgZm9udCBzaXplXG4gIGNvZGUge1xuICAgICRmOiAxIC8gMC44NTtcblxuICAgIG1hcmdpbjogMCAwLjI1ZW0gKiAkZjtcbiAgICBwYWRkaW5nOiAwLjA2MjVlbSAqICRmIDA7XG4gICAgYm9yZGVyLXJhZGl1czogcHgycmVtKDJweCk7XG4gICAgYm94LXNoYWRvdzpcbiAgICAgICswLjI1ZW0gKiAkZiAwIDAgdmFyKC0tbWQtY29kZS1iZy1jb2xvciksXG4gICAgICAtMC4yNWVtICogJGYgMCAwIHZhcigtLW1kLWNvZGUtYmctY29sb3IpO1xuICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG4gICAgYm94LWRlY29yYXRpb24tYnJlYWs6IGNsb25lO1xuICB9XG5cbiAgLy8gRGlzYWJsZSBjb250YWluaW5nIGJsb2NrIGluc2lkZSBoZWFkbGluZXNcbiAgaDEgY29kZSxcbiAgaDIgY29kZSxcbiAgaDMgY29kZSxcbiAgaDQgY29kZSxcbiAgaDUgY29kZSxcbiAgaDYgY29kZSB7XG4gICAgbWFyZ2luOiAwO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gIH1cblxuICAvLyBSZXNldCBjb2RlIGlmIGl0J3MgaW5zaWRlIGEgbGlua1xuICBhID4gY29kZSB7XG4gICAgbWFyZ2luOiBpbmhlcml0O1xuICAgIHBhZGRpbmc6IGluaGVyaXQ7XG4gICAgYm9yZGVyLXJhZGl1czogaW5pdGlhbDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xuICAgIGNvbG9yOiBpbmhlcml0O1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gIH1cblxuICAvLyBVbmZvcm1hdHRlZCBjb2RlIGJsb2Nrc1xuICBwcmUge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBtYXJnaW46IDFlbSAwO1xuICAgIGJvcmRlci1yYWRpdXM6IHB4MnJlbSgycHgpO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gICAgLy8gSGFjazogcmVkdWNlIGppdHRlclxuICAgIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG5cbiAgICAvLyBBY3R1YWwgY29udGFpbmVyIHdpdGggY29kZSwgb3ZlcmZsb3dpbmdcbiAgICA+IGNvZGUge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBtYXJnaW46IDA7XG4gICAgICBwYWRkaW5nOiBweDJyZW0oMTAuNXB4KSBweDJyZW0oMTJweCk7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgICBib3gtZGVjb3JhdGlvbi1icmVhazogc2xpY2U7XG4gICAgICBvdmVyZmxvdzogYXV0bztcbiAgICAgIHdvcmQtYnJlYWs6IG5vcm1hbDtcblxuICAgICAgLy8gT3ZlcnJpZGUgbmF0aXZlIHNjcm9sbGJhciBzdHlsZXNcbiAgICAgICY6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgICAgICAgd2lkdGg6IHB4MnJlbSg0cHgpO1xuICAgICAgICBoZWlnaHQ6IHB4MnJlbSg0cHgpO1xuICAgICAgfVxuXG4gICAgICAvLyBTY3JvbGxiYXIgdGh1bWJcbiAgICAgICY6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG5cbiAgICAgICAgLy8gSG92ZXJlZCBzY3JvbGxiYXIgdGh1bWJcbiAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtYWNjZW50LWZnLWNvbG9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFttb2JpbGUgLV06IFN0cmV0Y2ggdG8gd2hvbGUgd2lkdGhcbiAgQGluY2x1ZGUgYnJlYWstdG8tZGV2aWNlKG1vYmlsZSkge1xuXG4gICAgLy8gU3RyZXRjaCB0b3AtbGV2ZWwgY29udGFpbmVyc1xuICAgID4gcHJlIHtcbiAgICAgIG1hcmdpbjogMWVtIHB4MnJlbSgtMTZweCk7XG4gICAgICBib3JkZXItcmFkaXVzOiAwO1xuXG4gICAgICAvLyBBY3R1YWwgY29udGFpbmVyIHdpdGggY29kZSwgb3ZlcmZsb3dpbmdcbiAgICAgID4gY29kZSB7XG4gICAgICAgIHBhZGRpbmc6IHB4MnJlbSgxMC41cHgpIHB4MnJlbSgxNnB4KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBLZXlzdHJva2VzXG4gIGtiZCB7XG4gICAgJGY6IDEgLyAwLjg1O1xuXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHBhZGRpbmc6IDAgMC41ZW0gKiAkZjtcbiAgICBib3JkZXItcmFkaXVzOiBweDJyZW0oMnB4KTtcbiAgICBmb250LXNpemU6IDAuNzVlbTtcbiAgICBsaW5lLWhlaWdodDogMS41O1xuICAgIGJveC1zaGFkb3c6XG4gICAgICAwIHB4MnJlbSgycHgpIDAgcHgycmVtKDFweCkgdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlciksXG4gICAgICAwIHB4MnJlbSgycHgpIDAgICAgICAgICAgICAgdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlciksXG4gICAgICBpbnNldCAwIHB4MnJlbSgtMnB4KSBweDJyZW0oNHB4KSB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcbiAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuICAgIHZlcnRpY2FsLWFsaWduOiB0ZXh0LXRvcDtcbiAgfVxuXG4gIC8vIFRleHQgaGlnaGxpZ2h0aW5nIG1hcmtlclxuICBtYXJrIHtcbiAgICBtYXJnaW46IDAgMC4yNWVtO1xuICAgIHBhZGRpbmc6IDAuMDYyNWVtIDA7XG4gICAgYm9yZGVyLXJhZGl1czogcHgycmVtKDJweCk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnRpemUoJGNsci15ZWxsb3ctNTAwLCAwLjUpO1xuICAgIGJveC1zaGFkb3c6XG4gICAgICArMC4yNWVtIDAgMCB0cmFuc3BhcmVudGl6ZSgkY2xyLXllbGxvdy01MDAsIDAuNSksXG4gICAgICAtMC4yNWVtIDAgMCB0cmFuc3BhcmVudGl6ZSgkY2xyLXllbGxvdy01MDAsIDAuNSk7XG4gICAgd29yZC1icmVhazogYnJlYWstd29yZDtcbiAgICBib3gtZGVjb3JhdGlvbi1icmVhazogY2xvbmU7XG4gIH1cblxuICAvLyBBYmJyZXZpYXRpb25zXG4gIGFiYnIge1xuICAgIGJvcmRlci1ib3R0b206IHB4MnJlbSgxcHgpIGRvdHRlZCB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIGN1cnNvcjogaGVscDtcbiAgfVxuXG4gIC8vIFNtYWxsIHRleHRcbiAgc21hbGwge1xuICAgIG9wYWNpdHk6IDAuNzU7XG4gIH1cblxuICAvLyBTdXBlcnNjcmlwdCBhbmQgc3Vic2NyaXB0XG4gIHN1cCxcbiAgc3ViIHtcbiAgICBtYXJnaW4tbGVmdDogMC4wNjI1ZW0gKiAxIC8gMC44O1xuXG4gICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDAuMDYyNWVtICogMSAvIDAuODtcbiAgICAgIG1hcmdpbi1sZWZ0OiBpbml0aWFsO1xuICAgIH1cbiAgfVxuXG4gIC8vIEJsb2NrcXVvdGVzLCBwb3NzaWJseSBuZXN0ZWRcbiAgYmxvY2txdW90ZSB7XG4gICAgcGFkZGluZy1sZWZ0OiBweDJyZW0oMTJweCk7XG4gICAgYm9yZGVyLWxlZnQ6IHB4MnJlbSg0cHgpIHNvbGlkIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpO1xuICAgIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG5cbiAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IHB4MnJlbSgxMnB4KTtcbiAgICAgIHBhZGRpbmctbGVmdDogaW5pdGlhbDtcbiAgICAgIGJvcmRlci1yaWdodDogcHgycmVtKDRweCkgc29saWQgdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG4gICAgICBib3JkZXItbGVmdDogaW5pdGlhbDtcbiAgICB9XG4gIH1cblxuICAvLyBVbm9yZGVyZWQgbGlzdHNcbiAgdWwge1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogZGlzYztcbiAgfVxuXG4gIC8vIFVub3JkZXJlZCBhbmQgb3JkZXJlZCBsaXN0c1xuICB1bCxcbiAgb2wge1xuICAgIG1hcmdpbi1sZWZ0OiAwLjYyNWVtO1xuICAgIHBhZGRpbmc6IDA7XG5cbiAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMC42MjVlbTtcbiAgICAgIG1hcmdpbi1sZWZ0OiBpbml0aWFsO1xuICAgIH1cblxuICAgIC8vIE5lc3RlZCBvcmRlcmVkIGxpc3RzXG4gICAgb2wge1xuICAgICAgbGlzdC1zdHlsZS10eXBlOiBsb3dlci1hbHBoYTtcblxuICAgICAgLy8gVHJpcGx5IG5lc3RlZCBvcmRlcmVkIGxpc3RcbiAgICAgIG9sIHtcbiAgICAgICAgbGlzdC1zdHlsZS10eXBlOiBsb3dlci1yb21hbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMaXN0IGVsZW1lbnRzXG4gICAgbGkge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMC41ZW07XG4gICAgICBtYXJnaW4tbGVmdDogMS4yNWVtO1xuXG4gICAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDEuMjVlbTtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IGluaXRpYWw7XG4gICAgICB9XG5cbiAgICAgIC8vIERlY3JlYXNlIHZlcnRpY2FsIHNwYWNpbmdcbiAgICAgIHAsXG4gICAgICBibG9ja3F1b3RlIHtcbiAgICAgICAgbWFyZ2luOiAwLjVlbSAwO1xuICAgICAgfVxuXG4gICAgICAvLyBSZW1vdmUgbWFyZ2luIG9uIGxhc3QgZWxlbWVudFxuICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgIH1cblxuICAgICAgLy8gTmVzdGVkIGxpc3RzXG4gICAgICB1bCxcbiAgICAgIG9sIHtcbiAgICAgICAgbWFyZ2luOiAwLjVlbSAwIDAuNWVtIDAuNjI1ZW07XG5cbiAgICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgICAgIG1hcmdpbi1yaWdodDogMC42MjVlbTtcbiAgICAgICAgICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIERlZmluaXRpb24gbGlzdHNcbiAgZGQge1xuICAgIG1hcmdpbjogMWVtIDAgMWVtIDEuODc1ZW07XG5cbiAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMS44NzVlbTtcbiAgICAgIG1hcmdpbi1sZWZ0OiBpbml0aWFsO1xuICAgIH1cbiAgfVxuXG4gIC8vIExpbWl0IHdpZHRoIHRvIGNvbnRhaW5lclxuICBpZnJhbWUsXG4gIGltZyxcbiAgc3ZnIHtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gIH1cblxuICAvLyBEYXRhIHRhYmxlc1xuICB0YWJsZTpub3QoW2NsYXNzXSkge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgYm9yZGVyLXJhZGl1czogcHgycmVtKDJweCk7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gICAgZm9udC1zaXplOiBtcygtMSk7XG4gICAgYm94LXNoYWRvdzpcbiAgICAgIDAgcHgycmVtKDRweCkgcHgycmVtKDEwcHgpIGhzbGEoMCwgMCUsIDAlLCAwLjA1KSxcbiAgICAgIDAgMCAgICAgICAgICAgcHgycmVtKDFweCkgIGhzbGEoMCwgMCUsIDAlLCAwLjEpO1xuICAgIG92ZXJmbG93OiBhdXRvO1xuICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcblxuICAgIC8vIER1ZSB0byBtYXJnaW4gY29sbGFwc2UgYmVjYXVzZSBvZiB0aGUgbmVjZXNzYXJ5IGlubGluZS1ibG9jayBoYWNrLCB3ZVxuICAgIC8vIGNhbm5vdCBpbmNyZWFzZSB0aGUgYm90dG9tIG1hcmdpbiBvbiB0aGUgdGFibGUsIHNvIHdlIGp1c3QgaW5jcmVhc2UgdGhlXG4gICAgLy8gdG9wIG1hcmdpbiBvbiB0aGUgZm9sbG93aW5nIGVsZW1lbnRcbiAgICAmICsgKiB7XG4gICAgICBtYXJnaW4tdG9wOiAxLjVlbTtcbiAgICB9XG5cbiAgICAvLyBUYWJsZSBoZWFkaW5ncyBhbmQgY2VsbHNcbiAgICB0aDpub3QoW2FsaWduXSksXG4gICAgdGQ6bm90KFthbGlnbl0pIHtcbiAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG5cbiAgICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRhYmxlIGhlYWRpbmdzXG4gICAgdGgge1xuICAgICAgbWluLXdpZHRoOiBweDJyZW0oMTAwcHgpO1xuICAgICAgcGFkZGluZzogcHgycmVtKDEycHgpIHB4MnJlbSgxNnB4KTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgICAgIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gICAgfVxuXG4gICAgLy8gVGFibGUgY2VsbHNcbiAgICB0ZCB7XG4gICAgICBwYWRkaW5nOiBweDJyZW0oMTJweCkgcHgycmVtKDE2cHgpO1xuICAgICAgYm9yZGVyLXRvcDogcHgycmVtKDFweCkgc29saWQgdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlc3QpO1xuICAgICAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgICB9XG5cbiAgICAvLyBUYWJsZSByb3dzXG4gICAgdHIge1xuICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAxMjVtcztcblxuICAgICAgLy8gQWRkIGJhY2tncm91bmQgb24gaG92ZXJcbiAgICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDM1KTtcbiAgICAgICAgYm94LXNoYWRvdzogMCBweDJyZW0oMXB4KSAgMCB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKSBpbnNldDtcbiAgICAgIH1cblxuICAgICAgLy8gUmVtb3ZlIHRvcCBib3JkZXIgb24gZmlyc3Qgcm93XG4gICAgICAmOmZpcnN0LWNoaWxkIHRkIHtcbiAgICAgICAgYm9yZGVyLXRvcDogMDtcbiAgICAgIH1cbiAgICB9XG5cblxuICAgIC8vIERvIG5vdCB3cmFwIGxpbmtzIGluIHRhYmxlc1xuICAgIGEge1xuICAgICAgd29yZC1icmVhazogbm9ybWFsO1xuICAgIH1cbiAgfVxuXG4gIC8vIFdyYXBwZXIgZm9yIHNjcm9sbGluZyBvbiBvdmVyZmxvd1xuICAmX19zY3JvbGx3cmFwIHtcbiAgICBtYXJnaW46IDFlbSBweDJyZW0oLTE2cHgpO1xuICAgIG92ZXJmbG93LXg6IGF1dG87XG4gICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xuICB9XG5cbiAgLy8gRGF0YSB0YWJsZSB3cmFwcGVyLCBpbiBjYXNlIEphdmFTY3JpcHQgaXMgYXZhaWxhYmxlXG4gIC5tZC10eXBlc2V0X190YWJsZSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIG1hcmdpbi1ib3R0b206IDAuNWVtO1xuICAgIHBhZGRpbmc6IDAgcHgycmVtKDE2cHgpO1xuXG4gICAgLy8gRGF0YSB0YWJsZXNcbiAgICB0YWJsZSB7XG4gICAgICBkaXNwbGF5OiB0YWJsZTtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB9XG4gIH1cbn1cbiIsIi8vLy9cbi8vLyBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMCBNYXJ0aW4gRG9uYXRoIDxtYXJ0aW4uZG9uYXRoQHNxdWlkZnVuay5jb20+XG4vLy9cbi8vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSxcbi8vLyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLy8gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsXG4vLy8gYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlXG4vLy8gU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vL1xuLy8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vLy9cbi8vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMXG4vLy8gVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lOR1xuLy8vIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVJcbi8vLyBERUFMSU5HU1xuLy8vL1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBWYXJpYWJsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gQWN0aXZlICh0b2dnbGVkKSBkcmF3ZXJcbiRtZC10b2dnbGVfX2RyYXdlci0tY2hlY2tlZDpcbiAgXCJbZGF0YS1tZC10b2dnbGU9XFxcImRyYXdlclxcXCJdOmNoZWNrZWQgflwiO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSdWxlczogYmFzZSBncmlkIGFuZCBjb250YWluZXJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIFN0cmV0Y2ggY29udGFpbmVyIHRvIHZpZXdwb3J0IGFuZCBzZXQgYmFzZSBmb250LXNpemVmb3Igc2ltcGxlIGNhbGN1bGF0aW9uc1xuLy8gYmFzZWQgb24gcmVsYXRpdmUgZW1zIChyZW1zKVxuaHRtbCB7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gIC8vIEhhY2s6IG5vcm1hbGx5LCB3ZSB3b3VsZCBzZXQgdGhlIGJhc2UgZm9udC1zaXplIHRvIDYyLjUlLCBzbyB3ZSBjYW4gYmFzZVxuICAvLyBhbGwgY2FsY3VsYXRpb25zIG9uIDEwcHgsIGJ1dCBDaHJvbWl1bSBhbmQgQ2hyb21lIGRlZmluZSBhIG1pbmltYWwgZm9udFxuICAvLyBzaXplIG9mIDEyIGlmIHRoZSBzeXN0ZW0gbGFuZ3VhZ2UgaXMgc2V0IHRvIENoaW5lc2UuIEZvciB0aGlzIHJlYXNvbiB3ZVxuICAvLyBqdXN0IGRvdWJsZSB0aGUgZm9udC1zaXplLCBzZXQgaXQgdG8gMjBweCB3aGljaCBzZWVtcyB0byBkbyB0aGUgdHJpY2suXG4gIC8vXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vc3F1aWRmdW5rL21rZG9jcy1tYXRlcmlhbC9pc3N1ZXMvOTExXG4gIGZvbnQtc2l6ZTogMTI1JTtcbiAgLy8gSGFjazogc29tZSBicm93c2VycyBvbiBzb21lIG9wZXJhdGluZyBzeXN0ZW1zIGRvbid0IGFjY291bnQgZm9yIHNjcm9sbFxuICAvLyBiYXJzIHdoZW4gZmlyaW5nIG1lZGlhIHF1ZXJpZXMsIHNvIHdlIG5lZWQgdG8gZG8gdGhpcyBmb3Igc2FmZXR5LiBUaGlzXG4gIC8vIGN1cnJlbnRseSBpbXBhY3RzIHRoZSB0YWJsZSBvZiBjb250ZW50cyBjb21wb25lbnQgYmV0d2VlbiAxMjIwIGFuZCAxMjM0cHhcbiAgLy8gYW5kIGlzIHRvIGN1cnJlbnQga25vd2xlZGdlIG5vdCBmaXhhYmxlLlxuICBvdmVyZmxvdy14OiBoaWRkZW47XG5cbiAgLy8gW3NjcmVlbiBtZWRpdW0gK106IFNldCBiYXNlIGZvbnQtc2l6ZSB0byAxMXB4XG4gIEBpbmNsdWRlIGJyZWFrLWZyb20tZGV2aWNlKHNjcmVlbiBtZWRpdW0pIHtcbiAgICBmb250LXNpemU6IDEzNy41MCU7XG4gIH1cblxuICAvLyBbc2NyZWVuIGxhcmdlICtdOiBTZXQgYmFzZSBmb250LXNpemUgdG8gMTJweFxuICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZShzY3JlZW4gbGFyZ2UpIHtcbiAgICBmb250LXNpemU6IDE1MCU7XG4gIH1cbn1cblxuLy8gU3RyZXRjaCBib2R5IHRvIGNvbnRhaW5lciBhbmQgbGVhdmUgcm9vbSBmb3IgZm9vdGVyXG5ib2R5IHtcbiAgZGlzcGxheTogZmxleDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICB3aWR0aDogMTAwJTtcbiAgbWluLWhlaWdodDogMTAwJTtcbiAgLy8gSGFjazogcmVzZXQgZm9udC1zaXplIHRvIDEwcHgsIHNvIHRoZSBzcGFjaW5nIGZvciBhbGwgaW5saW5lIGVsZW1lbnRzIGlzXG4gIC8vIGNvcnJlY3QgYWdhaW4uIE90aGVyd2lzZSB0aGUgc3BhY2luZyB3b3VsZCBiZSBiYXNlZCBvbiAyMHB4LlxuICBmb250LXNpemU6IDAuNXJlbTsgLy8gc3R5bGVsaW50LWRpc2FibGUtbGluZSB1bml0LXdoaXRlbGlzdFxuXG4gIC8vIFt0YWJsZXQgcG9ydHJhaXQgLV06IExvY2sgYm9keSB0byBkaXNhYmxlIHNjcm9sbCBidWJibGluZ1xuICBAaW5jbHVkZSBicmVhay10by1kZXZpY2UodGFibGV0IHBvcnRyYWl0KSB7XG5cbiAgICAvLyBMb2NrIGJvZHkgdG8gdmlld3BvcnQgaGVpZ2h0IChlLmcuIGluIHNlYXJjaCBtb2RlKVxuICAgICZbZGF0YS1tZC1zdGF0ZT1cImxvY2tcIl0ge1xuICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgIH1cbiAgfVxufVxuXG4vLyBIb3Jpem9udGFsIHNlcGFyYXRvcnNcbmhyIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGhlaWdodDogcHgycmVtKDFweCk7XG4gIHBhZGRpbmc6IDA7XG4gIGJvcmRlcjogMDtcbn1cblxuLy8gVGVtcGxhdGUtd2lkZSBncmlkXG4ubWQtZ3JpZCB7XG4gIG1heC13aWR0aDogcHgycmVtKDEyMjBweCk7XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG59XG5cbi8vIENvbnRlbnQgd3JhcHBlclxuLm1kLWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGZsZXgtZ3JvdzogMTtcbn1cblxuLy8gVGhlIG1haW4gY29udGVudCBzaG91bGQgc3RyZXRjaCB0byBtYXhpbXVtIGhlaWdodCBpbiB0aGUgdGFibGVcbi5tZC1tYWluIHtcbiAgZmxleC1ncm93OiAxO1xuXG4gIC8vIEluY3JlYXNlIHRvcCBzcGFjaW5nIG9mIGNvbnRlbnQgYXJlYSB0byBnaXZlIHR5cG9ncmFwaHkgbW9yZSByb29tXG4gICZfX2lubmVyIHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgcGFkZGluZy10b3A6IHB4MnJlbSgyNHB4ICsgNnB4KTtcbiAgICAvLyBIYWNrOiBpbmR1Y2UgbWFyZ2luLWNvbGxhcHNlLCBiZWNhdXNlIG90aGVyd2lzZSB0aGUgc2lkZWJhciBoZWlnaHQgaXNcbiAgICAvLyBub3QgY2FsY3VsYXRlZCBjb3JyZWN0bHkgYW5kIHRoZSBvdmVyZmxvdyBwcm9wZXJ0eSBvbiB0aGlzIGVsZW1lbnQgbXVzdFxuICAgIC8vIGJlIGxlZnQgaW4gaW5pdGlhbCBzdGF0ZSBmb3IgdGFyZ2V0dGVkIGxpbmsgb2Zmc2V0cyB0byB3b3JrIHByb3Blcmx5XG4gICAgcGFkZGluZy1ib3R0b206IHB4MnJlbSgxcHgpO1xuICB9XG59XG5cbi8vIEFwcGx5IGVsbGlwc2lzIGluIGNhc2Ugb2Ygb3ZlcmZsb3dpbmcgdGV4dFxuLm1kLWVsbGlwc2lzIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSdWxlczogbmF2aWdhdGlvbmFsIGVsZW1lbnRzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIFRvZ2dsZSBjaGVja2JveFxuLm1kLXRvZ2dsZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8vIE92ZXJsYXkgYmVsb3cgZXhwYW5kZWQgZHJhd2VyXG4ubWQtb3ZlcmxheSB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAwO1xuICB0cmFuc2l0aW9uOlxuICAgIHdpZHRoICAgICAwbXMgMjUwbXMsXG4gICAgaGVpZ2h0ICAgIDBtcyAyNTBtcyxcbiAgICBvcGFjaXR5IDI1MG1zO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG4gIG9wYWNpdHk6IDA7XG4gIHotaW5kZXg6IDM7XG5cbiAgLy8gW3RhYmxldCAtXTogVHJpZ2dlciBvdmVybGF5XG4gIEBpbmNsdWRlIGJyZWFrLXRvLWRldmljZSh0YWJsZXQpIHtcblxuICAgIC8vIEV4cGFuZGVkIGRyYXdlclxuICAgICN7JG1kLXRvZ2dsZV9fZHJhd2VyLS1jaGVja2VkfSAmIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgdHJhbnNpdGlvbjpcbiAgICAgICAgd2lkdGggICAgIDBtcyxcbiAgICAgICAgaGVpZ2h0ICAgIDBtcyxcbiAgICAgICAgb3BhY2l0eSAyNTBtcztcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGVzOiBza2lwIGxpbmtcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gU2tpcCBsaW5rXG4ubWQtc2tpcCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgbWFyZ2luOiBweDJyZW0oMTBweCk7XG4gIHBhZGRpbmc6IHB4MnJlbSg2cHgpIHB4MnJlbSgxMHB4KTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKHB4MnJlbSg4cHgpKTtcbiAgYm9yZGVyLXJhZGl1czogcHgycmVtKDJweCk7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3IpO1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gIGZvbnQtc2l6ZTogbXMoLTEpO1xuICBvcGFjaXR5OiAwO1xuXG4gIC8vIFNob3cgc2tpcCBsaW5rIG9uIGZvY3VzXG4gICY6Zm9jdXMge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbiAgICB0cmFuc2l0aW9uOlxuICAgICAgdHJhbnNmb3JtIDI1MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSksXG4gICAgICBvcGFjaXR5ICAgMTc1bXMgNzVtcztcbiAgICBvcGFjaXR5OiAxO1xuICAgIHotaW5kZXg6IDEwO1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGVzOiBwcmludCBzdHlsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gQWRkIG1hcmdpbnMgdG8gcGFnZVxuQHBhZ2Uge1xuICBtYXJnaW46IDI1bW07XG59XG4iLCIvLy8vXG4vLy8gQ29weXJpZ2h0IChjKSAyMDE2LTIwMjAgTWFydGluIERvbmF0aCA8bWFydGluLmRvbmF0aEBzcXVpZGZ1bmsuY29tPlxuLy8vXG4vLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksXG4vLy8gdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8vIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLFxuLy8vIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZVxuLy8vIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vLy9cbi8vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy8vXG4vLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTFxuLy8vIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbi8vLyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSXG4vLy8gREVBTElOR1Ncbi8vLy9cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gQW5ub3VuY2VtZW50IGJhclxuLm1kLWFubm91bmNlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvcik7XG5cbiAgLy8gQWN0dWFsIGNvbnRlbnRcbiAgJl9faW5uZXIge1xuICAgIG1pbi1oZWlnaHQ6IHB4MnJlbSg0OHB4KTtcbiAgICBwYWRkaW5nOiAwIHB4MnJlbSgxNnB4KTtcbiAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gICAgZm9udC1zaXplOiBweDJyZW0oMTRweCk7XG4gICAgbGluZS1oZWlnaHQ6IHB4MnJlbSg0OHB4KTtcbiAgfVxufVxuIiwiLy8vL1xuLy8vIENvcHlyaWdodCAoYykgMjAxNi0yMDIwIE1hcnRpbiBEb25hdGggPG1hcnRpbi5kb25hdGhAc3F1aWRmdW5rLmNvbT5cbi8vL1xuLy8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLFxuLy8vIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vLyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSxcbi8vLyBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGVcbi8vLyBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy8vXG4vLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vL1xuLy8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTExcbi8vLyBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HXG4vLy8gRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUlxuLy8vIERFQUxJTkdTXG4vLy8vXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIENvcHkgdG8gY2xpcGJvYXJkXG4ubWQtY2xpcGJvYXJkIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IHB4MnJlbSg4cHgpO1xuICByaWdodDogcHgycmVtKDhweCk7XG4gIHdpZHRoOiBweDJyZW0oMjRweCk7XG4gIGhlaWdodDogcHgycmVtKDI0cHgpO1xuICB0cmFuc2l0aW9uOiBjb2xvciAyNTBtcztcbiAgYm9yZGVyLXJhZGl1czogcHgycmVtKDJweCk7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVzdCk7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgei1pbmRleDogMTtcbiAgLy8gSGFjazogcmVkdWNlIGppdHRlclxuICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG5cbiAgLy8gSGlkZSBmb3IgcHJpbnRcbiAgQG1lZGlhIHByaW50IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgLy8gU2xpZ2h0bHkgc21hbGxlciBpY29uXG4gIHN2ZyB7XG4gICAgd2lkdGg6IHB4MnJlbSgxOHB4KTtcbiAgICBoZWlnaHQ6IHB4MnJlbSgxOHB4KTtcbiAgfVxuXG4gIC8vIFNob3cgb24gY29udGFpbmVyIGhvdmVyXG4gIHByZTpob3ZlciAmIHtcbiAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuICB9XG5cbiAgLy8gRm9jdXNlZCBvciBob3ZlcmVkIGljb25cbiAgcHJlICY6Zm9jdXMsXG4gIHByZSAmOmhvdmVyIHtcbiAgICBjb2xvcjogdmFyKC0tbWQtYWNjZW50LWZnLWNvbG9yKTtcbiAgfVxufVxuIiwiLy8vL1xuLy8vIENvcHlyaWdodCAoYykgMjAxNi0yMDIwIE1hcnRpbiBEb25hdGggPG1hcnRpbi5kb25hdGhAc3F1aWRmdW5rLmNvbT5cbi8vL1xuLy8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLFxuLy8vIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vLyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSxcbi8vLyBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGVcbi8vLyBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy8vXG4vLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vL1xuLy8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTExcbi8vLyBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HXG4vLy8gRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUlxuLy8vIERFQUxJTkdTXG4vLy8vXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIENvbnRlbnQgY29udGFpbmVyXG4ubWQtY29udGVudCB7XG5cbiAgLy8gW3RhYmxldCBsYW5kc2NhcGUgK106IEFkZCBzcGFjZSBmb3IgdGFibGUgb2YgY29udGVudHNcbiAgQGluY2x1ZGUgYnJlYWstZnJvbS1kZXZpY2UodGFibGV0IGxhbmRzY2FwZSkge1xuICAgIG1hcmdpbi1yaWdodDogcHgycmVtKDI0MnB4KTtcblxuICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgbWFyZ2luLXJpZ2h0OiBpbml0aWFsO1xuICAgICAgbWFyZ2luLWxlZnQ6IHB4MnJlbSgyNDJweCk7XG4gICAgfVxuICB9XG5cbiAgLy8gW3NjcmVlbiArXTogQWRkIHNwYWNlIGZvciB0YWJsZSBvZiBjb250ZW50c1xuICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZShzY3JlZW4pIHtcbiAgICBtYXJnaW4tbGVmdDogcHgycmVtKDI0MnB4KTtcblxuICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgbWFyZ2luLXJpZ2h0OiBweDJyZW0oMjQycHgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIERlZmluZSBzcGFjaW5nXG4gICZfX2lubmVyIHtcbiAgICBtYXJnaW46IDAgcHgycmVtKDE2cHgpIHB4MnJlbSgyNHB4KTtcbiAgICBwYWRkaW5nLXRvcDogcHgycmVtKDEycHgpO1xuXG4gICAgLy8gW3NjcmVlbiArXTogSW5jcmVhc2UgaG9yaXpvbnRhbCBzcGFjaW5nXG4gICAgQGluY2x1ZGUgYnJlYWstZnJvbS1kZXZpY2Uoc2NyZWVuKSB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IHB4MnJlbSgyNHB4KTtcbiAgICAgIG1hcmdpbi1sZWZ0OiBweDJyZW0oMjRweCk7XG4gICAgfVxuXG4gICAgLy8gSGFjazogYWRkIHBzZXVkbyBlbGVtZW50IGZvciBzcGFjaW5nLCBhcyB0aGUgb3ZlcmZsb3cgb2YgdGhlIGNvbnRlbnRcbiAgICAvLyBjb250YWluZXIgbWF5IG5vdCBiZSBoaWRkZW4gZHVlIHRvIGFuIGltbWluZW50IG9mZnNldCBlcnJvciBvbiB0YXJnZXRzXG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgaGVpZ2h0OiBweDJyZW0oOHB4KTtcbiAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgfVxuXG4gICAgLy8gSGFjazogcmVtb3ZlIGJvdHRvbSBzcGFjaW5nIG9mIGxhc3QgZWxlbWVudCwgZHVlIHRvIG1hcmdpbiBjb2xsYXBzZVxuICAgID4gOmxhc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB9XG4gIH1cblxuICAvLyBCdXR0b24gbmV4dCB0byB0aGUgdGl0bGVcbiAgJl9fYnV0dG9uIHtcbiAgICBtYXJnaW46IHB4MnJlbSg4cHgpIDA7XG4gICAgbWFyZ2luLWxlZnQ6IHB4MnJlbSg4cHgpO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgZmxvYXQ6IHJpZ2h0O1xuXG4gICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IHB4MnJlbSg4cHgpO1xuICAgICAgbWFyZ2luLWxlZnQ6IGluaXRpYWw7XG4gICAgICBmbG9hdDogbGVmdDtcblxuICAgICAgLy8gRmxpcCBpY29uIHZlcnRpY2FsbHlcbiAgICAgIHN2ZyB7XG4gICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC0xKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPdmVycmlkZSBkZWZhdWx0IGxpbmsgY29sb3IgZm9yIGljb25zXG4gICAgLm1kLXR5cGVzZXQgJiB7XG4gICAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG4gICAgfVxuXG4gICAgLy8gQWxpZ24gdGV4dCB3aXRoIGljb25cbiAgICBzdmcge1xuICAgICAgZGlzcGxheTogaW5saW5lO1xuICAgICAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgICB9XG5cbiAgICAvLyBIaWRlIGZvciBwcmludFxuICAgIEBtZWRpYSBwcmludCB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxufVxuIiwiLy8vL1xuLy8vIENvcHlyaWdodCAoYykgMjAxNi0yMDIwIE1hcnRpbiBEb25hdGggPG1hcnRpbi5kb25hdGhAc3F1aWRmdW5rLmNvbT5cbi8vL1xuLy8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLFxuLy8vIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vLyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSxcbi8vLyBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGVcbi8vLyBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy8vXG4vLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vL1xuLy8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTExcbi8vLyBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HXG4vLy8gRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUlxuLy8vIERFQUxJTkdTXG4vLy8vXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIERpYWxvZyByZW5kZXJlZCBhcyBzbmFja2JhclxuLm1kLWRpYWxvZyB7XG4gIEBpbmNsdWRlIHotZGVwdGgoMik7XG5cbiAgZGlzcGxheTogYmxvY2s7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgcmlnaHQ6IHB4MnJlbSgxNnB4KTtcbiAgYm90dG9tOiBweDJyZW0oMTZweCk7XG4gIGxlZnQ6IGluaXRpYWw7XG4gIG1pbi13aWR0aDogcHgycmVtKDIyMnB4KTtcbiAgcGFkZGluZzogcHgycmVtKDhweCkgcHgycmVtKDEycHgpO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTAwJSk7XG4gIHRyYW5zaXRpb246XG4gICAgdHJhbnNmb3JtIDBtcyAgIDQwMG1zLFxuICAgIG9wYWNpdHkgICA0MDBtcztcbiAgYm9yZGVyOiBub25lO1xuICBib3JkZXItcmFkaXVzOiBweDJyZW0oMnB4KTtcbiAgYmFja2dyb3VuZDogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcbiAgZm9udC1zaXplOiBweDJyZW0oMTRweCk7XG4gIG9wYWNpdHk6IDA7XG4gIHotaW5kZXg6IDI7XG5cbiAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICBbZGlyPVwicnRsXCJdICYge1xuICAgIHJpZ2h0OiBpbml0aWFsO1xuICAgIGxlZnQ6IHB4MnJlbSgxNnB4KTtcbiAgfVxuXG4gIC8vIFNob3cgb3BlbiBkaWFsb2dcbiAgJltkYXRhLW1kLXN0YXRlPVwib3BlblwiXSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xuICAgIHRyYW5zaXRpb246XG4gICAgICB0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMDc1LCAwLjg1LCAwLjE3NSwgMSksXG4gICAgICBvcGFjaXR5ICAgNDAwbXM7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuXG4gIC8vIEhpZGUgZm9yIHByaW50XG4gIEBtZWRpYSBwcmludCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuIiwiLy9cbi8vIE5hbWU6ICAgICAgICAgICBNYXRlcmlhbCBTaGFkb3dzXG4vLyBEZXNjcmlwdGlvbjogICAgTWl4aW5zIGZvciBNYXRlcmlhbCBEZXNpZ24gU2hhZG93cy5cbi8vIFZlcnNpb246ICAgICAgICAzLjAuMVxuLy9cbi8vIEF1dGhvcjogICAgICAgICBEZW5pcyBNYWxpbm9jaGtpblxuLy8gR2l0OiAgICAgICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9tcm1sbmMvbWF0ZXJpYWwtc2hhZG93c1xuLy9cbi8vIHR3aXR0ZXI6ICAgICAgICBAbXJtbG5jXG4vL1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLy8gTWl4aW5zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuQG1peGluIHotZGVwdGgtdHJhbnNpdGlvbigpIHtcbiAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAuMjhzIGN1YmljLWJlemllciguNCwgMCwgLjIsIDEpO1xufVxuXG5AbWl4aW4gei1kZXB0aC1mb2N1cygpIHtcbiAgYm94LXNoYWRvdzogMCAwIDhweCByZ2JhKDAsIDAsIDAsIC4xOCksIDAgOHB4IDE2cHggcmdiYSgwLCAwLCAwLCAuMzYpO1xufVxuXG5AbWl4aW4gei1kZXB0aC0yZHAoKSB7XG4gIGJveC1zaGFkb3c6IDAgMnB4IDJweCAwIHJnYmEoMCwgMCwgMCwgLjE0KSxcbiAgICAgICAgICAgICAgMCAxcHggNXB4IDAgcmdiYSgwLCAwLCAwLCAuMTIpLFxuICAgICAgICAgICAgICAwIDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIC4yKTtcbn1cblxuQG1peGluIHotZGVwdGgtM2RwKCkge1xuICBib3gtc2hhZG93OiAwIDNweCA0cHggMCByZ2JhKDAsIDAsIDAsIC4xNCksXG4gICAgICAgICAgICAgIDAgMXB4IDhweCAwIHJnYmEoMCwgMCwgMCwgLjEyKSxcbiAgICAgICAgICAgICAgMCAzcHggM3B4IC0ycHggcmdiYSgwLCAwLCAwLCAuNCk7XG59XG5cbkBtaXhpbiB6LWRlcHRoLTRkcCgpIHtcbiAgYm94LXNoYWRvdzogMCA0cHggNXB4IDAgcmdiYSgwLCAwLCAwLCAuMTQpLFxuICAgICAgICAgICAgICAwIDFweCAxMHB4IDAgcmdiYSgwLCAwLCAwLCAuMTIpLFxuICAgICAgICAgICAgICAwIDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIC40KTtcbn1cblxuQG1peGluIHotZGVwdGgtNmRwKCkge1xuICBib3gtc2hhZG93OiAwIDZweCAxMHB4IDAgcmdiYSgwLCAwLCAwLCAuMTQpLFxuICAgICAgICAgICAgICAwIDFweCAxOHB4IDAgcmdiYSgwLCAwLCAwLCAuMTIpLFxuICAgICAgICAgICAgICAwIDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIC40KTtcbn1cblxuQG1peGluIHotZGVwdGgtOGRwKCkge1xuICBib3gtc2hhZG93OiAwIDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIC4xNCksXG4gICAgICAgICAgICAgIDAgM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgLjEyKSxcbiAgICAgICAgICAgICAgMCA1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAuNCk7XG59XG5cbkBtaXhpbiB6LWRlcHRoLTE2ZHAoKSB7XG4gIGJveC1zaGFkb3c6IDAgMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIC4xNCksXG4gICAgICAgICAgICAgIDAgIDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIC4xMiksXG4gICAgICAgICAgICAgIDAgIDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAuNCk7XG59XG5cbkBtaXhpbiB6LWRlcHRoLTI0ZHAoKSB7XG4gIGJveC1zaGFkb3c6IDAgIDlweCA0NnB4ICA4cHggcmdiYSgwLCAwLCAwLCAuMTQpLFxuICAgICAgICAgICAgICAwIDI0cHggMzhweCAgM3B4IHJnYmEoMCwgMCwgMCwgLjEyKSxcbiAgICAgICAgICAgICAgMCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIC40KTtcbn1cblxuQG1peGluIHotZGVwdGgoJGRwOiAyKSB7XG4gIEBpZiAkZHAgPT0gMiB7XG4gICAgQGluY2x1ZGUgei1kZXB0aC0yZHAoKTtcbiAgfSBAZWxzZSBpZiAkZHAgPT0gMyB7XG4gICAgQGluY2x1ZGUgei1kZXB0aC0zZHAoKTtcbiAgfSBAZWxzZSBpZiAkZHAgPT0gNCB7XG4gICAgQGluY2x1ZGUgei1kZXB0aC00ZHAoKTtcbiAgfSBAZWxzZSBpZiAkZHAgPT0gNiB7XG4gICAgQGluY2x1ZGUgei1kZXB0aC02ZHAoKTtcbiAgfSBAZWxzZSBpZiAkZHAgPT0gOCB7XG4gICAgQGluY2x1ZGUgei1kZXB0aC04ZHAoKTtcbiAgfSBAZWxzZSBpZiAkZHAgPT0gMTYge1xuICAgIEBpbmNsdWRlIHotZGVwdGgtMTZkcCgpO1xuICB9IEBlbHNlIGlmICRkcCA9PSAyNCB7XG4gICAgQGluY2x1ZGUgei1kZXB0aC0yNGRwKCk7XG4gIH1cbn1cblxuXG4vLyBDbGFzcyBnZW5lcmF0b3Jcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5AbWl4aW4gei1kZXB0aC1jbGFzc2VzKCR0cmFuc2l0aW9uOiBmYWxzZSwgJGZvY3VzOiBmYWxzZSkge1xuICBAaWYgJHRyYW5zaXRpb24gPT0gdHJ1ZSB7XG4gICAgJi10cmFuc2l0aW9uIHtcbiAgICAgIEBpbmNsdWRlIHotZGVwdGgtdHJhbnNpdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIEBpZiAkZm9jdXMgPT0gdHJ1ZSB7XG4gICAgJi1mb2N1cyB7XG4gICAgICBAaW5jbHVkZSB6LWRlcHRoLWZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gVGhlIGF2YWlsYWJsZSB2YWx1ZXMgZm9yIHRoZSBzaGFkb3cgZGVwdGhcbiAgQGVhY2ggJGRlcHRoIGluIDIsIDMsIDQsIDYsIDgsIDE2LCAyNCB7XG4gICAgJi0jeyRkZXB0aH1kcCB7XG4gICAgICBAaW5jbHVkZSB6LWRlcHRoKCRkZXB0aCk7XG4gICAgfVxuICB9XG59XG4iLCIvLy8vXG4vLy8gQ29weXJpZ2h0IChjKSAyMDE2LTIwMjAgTWFydGluIERvbmF0aCA8bWFydGluLmRvbmF0aEBzcXVpZGZ1bmsuY29tPlxuLy8vXG4vLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksXG4vLy8gdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8vIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLFxuLy8vIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZVxuLy8vIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vLy9cbi8vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy8vXG4vLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTFxuLy8vIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbi8vLyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSXG4vLy8gREVBTElOR1Ncbi8vLy9cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gQXBwbGljYXRpb24gaGVhZGVyIChzdGF5cyBhbHdheXMgb24gdG9wKVxuLm1kLWhlYWRlciB7XG4gIHBvc2l0aW9uOiBzdGlja3k7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGxlZnQ6IDA7XG4gIGhlaWdodDogcHgycmVtKDQ4cHgpO1xuICB0cmFuc2l0aW9uOlxuICAgIGJhY2tncm91bmQtY29sb3IgMjUwbXMsXG4gICAgY29sb3IgMjUwbXM7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLXByaW1hcnktZmctY29sb3IpO1xuICBjb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1iZy1jb2xvcik7XG4gIC8vIEhhY2s6IHJlZHVjZSBqaXR0ZXIgYnkgYWRkaW5nIGEgdHJhbnNwYXJlbnQgYm94IHNoYWRvdyBvZiB0aGUgc2FtZSBzaXplXG4gIC8vIHNvIHRoZSBzaXplIG9mIHRoZSBsYXllciBkb2Vzbid0IGNoYW5nZSBkdXJpbmcgYW5pbWF0aW9uXG4gIGJveC1zaGFkb3c6XG4gICAgMCAwICAgICAgICAgICBweDJyZW0oNHB4KSByZ2JhKDAsIDAsIDAsIDApLFxuICAgIDAgcHgycmVtKDRweCkgcHgycmVtKDhweCkgcmdiYSgwLCAwLCAwLCAwKTtcbiAgei1pbmRleDogMjtcblxuICAvLyBBbHdheXMgaGlkZSBzaGFkb3csIGluIGNhc2UgSmF2YVNjcmlwdCBpcyBub3QgYXZhaWxhYmxlXG4gIC5uby1qcyAmIHtcbiAgICB0cmFuc2l0aW9uOiBub25lO1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gIH1cblxuICAvLyBTaG93IGFuZCBhbmltYXRlIHNoYWRvd1xuICAmW2RhdGEtbWQtc3RhdGU9XCJzaGFkb3dcIl0ge1xuICAgIHRyYW5zaXRpb246XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yIDI1MG1zLFxuICAgICAgY29sb3IgICAgICAgICAgICAyNTBtcyxcbiAgICAgIGJveC1zaGFkb3cgICAgICAgMjUwbXM7XG4gICAgYm94LXNoYWRvdzpcbiAgICAgIDAgMCAgICAgICAgICAgcHgycmVtKDRweCkgcmdiYSgwLCAwLCAwLCAwLjEpLFxuICAgICAgMCBweDJyZW0oNHB4KSBweDJyZW0oOHB4KSByZ2JhKDAsIDAsIDAsIDAuMik7XG4gIH1cblxuICAvLyBIaWRlIGZvciBwcmludFxuICBAbWVkaWEgcHJpbnQge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cblxuLy8gTmF2aWdhdGlvbiB3aXRoaW4gaGVhZGVyXG4ubWQtaGVhZGVyLW5hdiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBhZGRpbmc6IDAgcHgycmVtKDRweCk7XG5cbiAgLy8gSWNvbiBidXR0b25zXG4gICZfX2J1dHRvbiB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1hcmdpbjogcHgycmVtKDRweCk7XG4gICAgcGFkZGluZzogcHgycmVtKDhweCk7XG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSAyNTBtcztcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgei1pbmRleDogMTtcblxuICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICBbZGlyPVwicnRsXCJdICYge1xuXG4gICAgICAvLyBGbGlwIGljb24gdmVydGljYWxseVxuICAgICAgc3ZnIHtcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZvY3VzZWQgb3IgaG92ZXJlZCBpY29uXG4gICAgJjpmb2N1cyxcbiAgICAmOmhvdmVyIHtcbiAgICAgIG9wYWNpdHk6IDAuNztcbiAgICB9XG5cbiAgICAvLyBMb2dvXG4gICAgJi5tZC1sb2dvIHtcbiAgICAgIG1hcmdpbjogcHgycmVtKDRweCk7XG4gICAgICBwYWRkaW5nOiBweDJyZW0oOHB4KTtcblxuICAgICAgLy8gSW1hZ2Ugb3IgaWNvblxuICAgICAgaW1nLFxuICAgICAgc3ZnIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHdpZHRoOiBweDJyZW0oMjRweCk7XG4gICAgICAgIGhlaWdodDogcHgycmVtKDI0cHgpO1xuICAgICAgICBmaWxsOiBjdXJyZW50Q29sb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSGlkZSBzZWFyY2ggaWNvbiwgaWYgSmF2YVNjcmlwdCBpcyBub3QgYXZhaWxhYmxlLlxuICAgIC5uby1qcyAmW2Zvcj1cIl9fc2VhcmNoXCJdIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuXG4gICAgLy8gW3RhYmxldCBsYW5kc2NhcGUgK106IEhpZGUgdGhlIHNlYXJjaCBidXR0b25cbiAgICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZSh0YWJsZXQgbGFuZHNjYXBlKSB7XG5cbiAgICAgIC8vIFNlYXJjaCBidXR0b25cbiAgICAgICZbZm9yPVwiX19zZWFyY2hcIl0ge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFt0YWJsZXQgLV06IEhpZGUgdGhlIGxvZ29cbiAgICBAaW5jbHVkZSBicmVhay10by1kZXZpY2UodGFibGV0KSB7XG5cbiAgICAgIC8vIExvZ29cbiAgICAgICYubWQtbG9nbyB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gW3NjcmVlbiArXTogSGlkZSB0aGUgbWVudSBidXR0b25cbiAgICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZShzY3JlZW4pIHtcblxuICAgICAgLy8gTWVudSBidXR0b25cbiAgICAgICZbZm9yPVwiX19kcmF3ZXJcIl0ge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEhlYWRlciB0b3BpY3NcbiAgJl9fdG9waWMge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBwYWRkaW5nOiAwIHB4MnJlbSgyMHB4KTtcbiAgICB0cmFuc2l0aW9uOlxuICAgICAgdHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjEsIDAuNywgMC4xLCAxKSxcbiAgICAgIG9wYWNpdHkgICAxNTBtcztcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgLy8gSGFjazogcmVkdWNlIGppdHRlclxuICAgIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcblxuICAgIC8vIFBhZ2UgdGl0bGVcbiAgICAmICsgJiB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgocHgycmVtKDI1cHgpKTtcbiAgICAgIHRyYW5zaXRpb246XG4gICAgICAgIHRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMSwgMC43LCAwLjEsIDAuMSksXG4gICAgICAgIG9wYWNpdHkgICAxNTBtcztcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgICB6LWluZGV4OiAtMTtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuXG4gICAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgocHgycmVtKC0yNXB4KSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSW5kdWNlIGVsbGlwc2lzLCBpZiBubyBKYXZhU2NyaXB0IGlzIGF2YWlsYWJsZVxuICAgIC5uby1qcyAmIHtcbiAgICAgIHBvc2l0aW9uOiBpbml0aWFsO1xuICAgIH1cblxuICAgIC8vIEhpZGUgcGFnZSB0aXRsZSBhcyBpdCBpcyBpbnZpc2libGUgYW55d2F5IGFuZCB3aWxsIG92ZXJmbG93IHRoZSBoZWFkZXJcbiAgICAubm8tanMgJiArICYge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIH1cblxuICAvLyBIZWFkZXIgdGl0bGUgLSBzZXQgbGluZSBoZWlnaHQgdG8gbWF0Y2ggaWNvbiBmb3IgY29ycmVjdCBhbGlnbm1lbnRcbiAgJl9fdGl0bGUge1xuICAgIGZsZXgtZ3JvdzogMTtcbiAgICBmb250LXNpemU6IHB4MnJlbSgxOHB4KTtcbiAgICBsaW5lLWhlaWdodDogcHgycmVtKDQ4cHgpO1xuXG4gICAgLy8gU2hvdyBwYWdlIHRpdGxlXG4gICAgJltkYXRhLW1kLXN0YXRlPVwiYWN0aXZlXCJdIC5tZC1oZWFkZXItbmF2X190b3BpYyB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgocHgycmVtKC0yNXB4KSk7XG4gICAgICB0cmFuc2l0aW9uOlxuICAgICAgICB0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDEsIDAuNywgMC4xLCAwLjEpLFxuICAgICAgICBvcGFjaXR5ICAgMTUwbXM7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgICAgei1pbmRleDogLTE7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcblxuICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKHB4MnJlbSgyNXB4KSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFBhZ2UgdGl0bGVcbiAgICAgICYgKyAubWQtaGVhZGVyLW5hdl9fdG9waWMge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG4gICAgICAgIHRyYW5zaXRpb246XG4gICAgICAgICAgdHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjEsIDAuNywgMC4xLCAxKSxcbiAgICAgICAgICBvcGFjaXR5ICAgMTUwbXM7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgIHotaW5kZXg6IDA7XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBpbml0aWFsO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFBhdGNoIGVsbGlwc2lzXG4gICAgPiAubWQtaGVhZGVyLW5hdl9fZWxsaXBzaXMge1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgfVxuICB9XG5cbiAgLy8gUmVwb3NpdG9yeSBjb250YWluaW5nIHNvdXJjZVxuICAmX19zb3VyY2Uge1xuICAgIGRpc3BsYXk6IG5vbmU7XG5cbiAgICAvLyBbdGFibGV0IGxhbmRzY2FwZSArXTogU2hvdyB0aGUgcmVwb3Npc3RvcnkgZnJvbSB0YWJsZXRcbiAgICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZSh0YWJsZXQgbGFuZHNjYXBlKSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHdpZHRoOiBweDJyZW0oMjM0cHgpO1xuICAgICAgbWF4LXdpZHRoOiBweDJyZW0oMjM0cHgpO1xuICAgICAgbWFyZ2luLWxlZnQ6IHB4MnJlbSgyMHB4KTtcblxuICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiBweDJyZW0oMjBweCk7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiBpbml0aWFsO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFtzY3JlZW4gK106IEluY3JlYXNlIHNwYWNpbmcgb2Ygc2VhcmNoIGJhclxuICAgIEBpbmNsdWRlIGJyZWFrLWZyb20tZGV2aWNlKHNjcmVlbikge1xuICAgICAgbWFyZ2luLWxlZnQ6IHB4MnJlbSgyOHB4KTtcblxuICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiBweDJyZW0oMjhweCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvLy8vXG4vLy8gQ29weXJpZ2h0IChjKSAyMDE2LTIwMjAgTWFydGluIERvbmF0aCA8bWFydGluLmRvbmF0aEBzcXVpZGZ1bmsuY29tPlxuLy8vXG4vLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksXG4vLy8gdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8vIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLFxuLy8vIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZVxuLy8vIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vLy9cbi8vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy8vXG4vLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTFxuLy8vIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbi8vLyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSXG4vLy8gREVBTElOR1Ncbi8vLy9cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gSGVybyB0ZWFzZXJcbi5tZC1oZXJvIHtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAyNTBtcztcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1mZy1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1tZC1wcmltYXJ5LWJnLWNvbG9yKTtcbiAgZm9udC1zaXplOiBtcygxKTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAvLyBJbm5lciB3cmFwcGVyXG4gICZfX2lubmVyIHtcbiAgICBtYXJnaW4tdG9wOiBweDJyZW0oMjBweCk7XG4gICAgcGFkZGluZzogcHgycmVtKDE2cHgpIHB4MnJlbSgxNnB4KSBweDJyZW0oOHB4KTtcbiAgICB0cmFuc2l0aW9uOlxuICAgICAgdHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjEsIDAuNywgMC4xLCAxKSxcbiAgICAgIG9wYWNpdHkgICAyNTBtcztcbiAgICB0cmFuc2l0aW9uLWRlbGF5OiAxMDBtcztcblxuICAgIC8vIFt0YWJsZXQgLV06IENvbXBlbnNhdGUgZm9yIG1pc3NpbmcgdGFic1xuICAgIEBpbmNsdWRlIGJyZWFrLXRvLWRldmljZSh0YWJsZXQpIHtcbiAgICAgIG1hcmdpbi10b3A6IHB4MnJlbSg0OHB4KTtcbiAgICAgIG1hcmdpbi1ib3R0b206IHB4MnJlbSgyNHB4KTtcbiAgICB9XG5cbiAgICAvLyBGYWRlLW91dCB0YWJzIGJhY2tncm91bmQgdXBvbiBzY3JvbGxpbmdcbiAgICBbZGF0YS1tZC1zdGF0ZT1cImhpZGRlblwiXSAmIHtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKHB4MnJlbSgxMi41cHgpKTtcbiAgICAgIHRyYW5zaXRpb246XG4gICAgICAgIHRyYW5zZm9ybSAgIDBtcyA0MDBtcyxcbiAgICAgICAgb3BhY2l0eSAgIDEwMG1zICAgMG1zO1xuICAgICAgb3BhY2l0eTogMDtcbiAgICB9XG5cbiAgICAvLyBBZGp1c3QgYm90dG9tIHNwYWNpbmcgaWYgdGhlcmUgYXJlIG5vIHRhYnNcbiAgICAubWQtaGVyby0tZXhwYW5kICYge1xuICAgICAgbWFyZ2luLWJvdHRvbTogcHgycmVtKDI0cHgpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8vL1xuLy8vIENvcHlyaWdodCAoYykgMjAxNi0yMDIwIE1hcnRpbiBEb25hdGggPG1hcnRpbi5kb25hdGhAc3F1aWRmdW5rLmNvbT5cbi8vL1xuLy8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLFxuLy8vIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vLyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSxcbi8vLyBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGVcbi8vLyBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy8vXG4vLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vL1xuLy8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTExcbi8vLyBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HXG4vLy8gRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUlxuLy8vIERFQUxJTkdTXG4vLy8vXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIEFwcGxpY2F0aW9uIGZvb3RlclxuLm1kLWZvb3RlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3IpO1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG5cbiAgLy8gSGlkZSBmb3IgcHJpbnRcbiAgQG1lZGlhIHByaW50IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5cbi8vIE5hdmlnYXRpb24gd2l0aGluIGZvb3RlclxuLm1kLWZvb3Rlci1uYXYge1xuXG4gIC8vIFNldCBzcGFjaW5nXG4gICZfX2lubmVyIHtcbiAgICBwYWRkaW5nOiBweDJyZW0oNHB4KTtcbiAgICBvdmVyZmxvdzogYXV0bztcbiAgfVxuXG4gIC8vIExpbmtzIHRvIHByZXZpb3VzIGFuZCBuZXh0IHBhZ2VcbiAgJl9fbGluayB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBwYWRkaW5nLXRvcDogcHgycmVtKDI4cHgpO1xuICAgIHBhZGRpbmctYm90dG9tOiBweDJyZW0oOHB4KTtcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDI1MG1zO1xuXG4gICAgLy8gW3RhYmxldCArXTogU2V0IHByb3BvcnRpb25hbCB3aWR0aFxuICAgIEBpbmNsdWRlIGJyZWFrLWZyb20tZGV2aWNlKHRhYmxldCkge1xuICAgICAgd2lkdGg6IDUwJTtcbiAgICB9XG5cbiAgICAvLyBGb2N1c2VkIG9yIGhvdmVyZWQgbGlua3NcbiAgICAmOmZvY3VzLFxuICAgICY6aG92ZXIge1xuICAgICAgb3BhY2l0eTogMC43O1xuICAgIH1cblxuICAgIC8vIExpbmsgdG8gcHJldmlvdXMgcGFnZVxuICAgICYtLXByZXYge1xuICAgICAgd2lkdGg6IDI1JTtcbiAgICAgIGZsb2F0OiBsZWZ0O1xuXG4gICAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgICBmbG9hdDogcmlnaHQ7XG5cbiAgICAgICAgLy8gRmxpcCBpY29uIHZlcnRpY2FsbHlcbiAgICAgICAgc3ZnIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVGl0bGVcbiAgICAgIC5tZC1mb290ZXItbmF2X190aXRsZSB7XG5cbiAgICAgICAgLy8gW21vYmlsZSAtXTogSGlkZSB0aXRsZSBmb3IgcHJldmlvdXMgcGFnZVxuICAgICAgICBAaW5jbHVkZSBicmVhay10by1kZXZpY2UobW9iaWxlKSB7XG4gICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIExpbmsgdG8gbmV4dCBwYWdlXG4gICAgJi0tbmV4dCB7XG4gICAgICB3aWR0aDogNzUlO1xuICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG5cbiAgICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICAgIGZsb2F0OiBsZWZ0O1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuXG4gICAgICAgIC8vIEZsaXAgaWNvbiB2ZXJ0aWNhbGx5XG4gICAgICAgIHN2ZyB7XG4gICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gTGluayB0aXRsZSAtIHNldCBsaW5lIGhlaWdodCB0byBtYXRjaCBpY29uIGZvciBjb3JyZWN0IGFsaWdubWVudFxuICAmX190aXRsZSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGZsZXgtZ3JvdzogMTtcbiAgICBtYXgtd2lkdGg6IGNhbGMoMTAwJSAtICN7cHgycmVtKDQ4cHgpfSk7XG4gICAgcGFkZGluZzogMCBweDJyZW0oMjBweCk7XG4gICAgZm9udC1zaXplOiBweDJyZW0oMThweCk7XG4gICAgbGluZS1oZWlnaHQ6IHB4MnJlbSg0OHB4KTtcbiAgfVxuXG4gIC8vIExpbmsgYnV0dG9uXG4gICZfX2J1dHRvbiB7XG4gICAgbWFyZ2luOiBweDJyZW0oNHB4KTtcbiAgICBwYWRkaW5nOiBweDJyZW0oOHB4KTtcbiAgfVxuXG4gIC8vIExpbmsgZGlyZWN0aW9uXG4gICZfX2RpcmVjdGlvbiB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgbWFyZ2luLXRvcDogcHgycmVtKC0yMHB4KTtcbiAgICBwYWRkaW5nOiAwIHB4MnJlbSgyMHB4KTtcbiAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvci0tbGlnaHQpO1xuICAgIGZvbnQtc2l6ZTogbXMoLTEpO1xuICB9XG59XG5cbi8vIE5vbi1uYXZpZ2F0aW9uYWwgaW5mb3JtYXRpb25cbi5tZC1mb290ZXItbWV0YSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpO1xuXG4gIC8vIFNldCBzcGFjaW5nXG4gICZfX2lubmVyIHtcbiAgICBwYWRkaW5nOiBweDJyZW0oNHB4KTtcbiAgICBvdmVyZmxvdzogYXV0bztcbiAgfVxuXG4gIC8vIFVzZSBhIGRlY2VudCBjb2xvciBmb3Igbm9uLWhvdmVyZWQgbGlua3MgYW5kIGVuc3VyZSBzcGVjaWZpY2l0eVxuICBodG1sICYubWQtdHlwZXNldCBhIHtcbiAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvci0tbGlnaHQpO1xuXG4gICAgLy8gRm9jdXNlZCBvciBob3ZlcmVkIGxpbmtcbiAgICAmOmZvY3VzLFxuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3IpO1xuICAgIH1cbiAgfVxufVxuXG4vLyBDb3B5cmlnaHQgYW5kIHRoZW1lIGluZm9ybWF0aW9uXG4ubWQtZm9vdGVyLWNvcHlyaWdodCB7XG4gIG1hcmdpbjogMCBweDJyZW0oMTJweCk7XG4gIHBhZGRpbmc6IHB4MnJlbSg4cHgpIDA7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yLS1saWdodGVyKTtcbiAgZm9udC1zaXplOiBtcygtMSk7XG5cbiAgLy8gW3RhYmxldCBwb3J0cmFpdCArXTogU2hvdyBuZXh0IHRvIHNvY2lhbCBtZWRpYSBsaW5rc1xuICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZSh0YWJsZXQgcG9ydHJhaXQpIHtcbiAgICBtYXgtd2lkdGg6IDc1JTtcbiAgICBmbG9hdDogbGVmdDtcblxuICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgIH1cbiAgfVxuXG4gIC8vIEhpZ2hsaWdodCBjb3B5cmlnaHQgaW5mb3JtYXRpb25cbiAgJl9faGlnaGxpZ2h0IHtcbiAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvci0tbGlnaHQpO1xuICB9XG59XG5cbi8vIFNvY2lhbCBtZWRpYSBsaW5rc1xuLm1kLWZvb3Rlci1zb2NpYWwge1xuICBtYXJnaW46IDAgcHgycmVtKDhweCk7XG4gIHBhZGRpbmc6IHB4MnJlbSg0cHgpIDAgcHgycmVtKDEycHgpO1xuXG4gIC8vIFt0YWJsZXQgcG9ydHJhaXQgK106IFNob3cgbmV4dCB0byBjb3B5cmlnaHQgaW5mb3JtYXRpb25cbiAgQGluY2x1ZGUgYnJlYWstZnJvbS1kZXZpY2UodGFibGV0IHBvcnRyYWl0KSB7XG4gICAgcGFkZGluZzogcHgycmVtKDEycHgpIDA7XG4gICAgZmxvYXQ6IHJpZ2h0O1xuXG4gICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICBmbG9hdDogbGVmdDtcbiAgICB9XG4gIH1cblxuICAvLyBMaW5rIHdpdGggaWNvblxuICAmX19saW5rIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgd2lkdGg6IHB4MnJlbSgzMnB4KTtcbiAgICBoZWlnaHQ6IHB4MnJlbSgzMnB4KTtcbiAgICB0cmFuc2l0aW9uOiBjb2xvciAyNTBtcztcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG5cbiAgICAvLyBBZGp1c3QgbGluZS1oZWlnaHQgdG8gbWF0Y2ggaGVpZ2h0IGZvciBjb3JyZWN0IGFsaWdubWVudFxuICAgICY6OmJlZm9yZSB7XG4gICAgICBsaW5lLWhlaWdodDogMS45O1xuICAgIH1cblxuICAgIC8vIFNvY2lhbCBpY29uXG4gICAgc3ZnIHtcbiAgICAgIHdpZHRoOiBweDJyZW0oMTZweCk7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogLTI1JTtcbiAgICAgIGZpbGw6IGN1cnJlbnRDb2xvcjtcbiAgICB9XG4gIH1cbn1cbiIsIi8vLy9cbi8vLyBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMCBNYXJ0aW4gRG9uYXRoIDxtYXJ0aW4uZG9uYXRoQHNxdWlkZnVuay5jb20+XG4vLy9cbi8vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSxcbi8vLyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLy8gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsXG4vLy8gYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlXG4vLy8gU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vL1xuLy8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vLy9cbi8vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMXG4vLy8gVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lOR1xuLy8vIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVJcbi8vLyBERUFMSU5HU1xuLy8vL1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSdWxlc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBOYXZpZ2F0aW9uIGNvbnRhaW5lclxuLm1kLW5hdiB7XG4gIGZvbnQtc2l6ZTogcHgycmVtKDE0cHgpO1xuICBsaW5lLWhlaWdodDogMS4zO1xuXG4gIC8vIExpc3QgdGl0bGVcbiAgJl9fdGl0bGUge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBhZGRpbmc6IDAgcHgycmVtKDEycHgpO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAgIC8vIEhpZGUgYnV0dG9ucyBieSBkZWZhdWx0XG4gICAgLm1kLW5hdl9fYnV0dG9uIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG5cbiAgICAgIC8vIFN0cmV0Y2ggaW1hZ2VzXG4gICAgICBpbWcge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgfVxuXG4gICAgICAvLyBMb2dvXG4gICAgICAmLm1kLWxvZ28ge1xuXG4gICAgICAgIC8vIEltYWdlIG9yIGljb25cbiAgICAgICAgaW1nLFxuICAgICAgICBzdmcge1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIHdpZHRoOiBweDJyZW0oNDhweCk7XG4gICAgICAgICAgaGVpZ2h0OiBweDJyZW0oNDhweCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJY29uXG4gICAgICAgIHN2ZyB7XG4gICAgICAgICAgZmlsbDogY3VycmVudENvbG9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gTGlzdCBvZiBpdGVtc1xuICAmX19saXN0IHtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICB9XG5cbiAgLy8gTGlzdCBpdGVtXG4gICZfX2l0ZW0ge1xuICAgIHBhZGRpbmc6IDAgcHgycmVtKDEycHgpO1xuXG4gICAgLy8gQWRkIGJvdHRvbSBzcGFjaW5nIHRvIGxhc3QgaXRlbVxuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogcHgycmVtKDEycHgpO1xuICAgIH1cblxuICAgIC8vIDJuZCsgbGV2ZWwgaXRlbXNcbiAgICAmICYge1xuICAgICAgcGFkZGluZy1yaWdodDogMDtcblxuICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgcGFkZGluZy1yaWdodDogcHgycmVtKDEycHgpO1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlbW92ZSBib3R0b20gc3BhY2luZyBmb3IgbmVzdGVkIGl0ZW1zXG4gICAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBMaW5rIGluc2lkZSBpdGVtXG4gICZfX2xpbmsge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbi10b3A6IDAuNjI1ZW07XG4gICAgdHJhbnNpdGlvbjogY29sb3IgMTI1bXM7XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgc2Nyb2xsLXNuYXAtYWxpZ246IHN0YXJ0O1xuXG4gICAgLy8gSGlkZSBsaW5rIHRvIHRhYmxlIG9mIGNvbnRlbnRzIGJ5IGRlZmF1bHQgLSB0aGlzIHdpbGwgb25seSBtYXRjaCB0aGVcbiAgICAvLyB0YWJsZSBvZiBjb250ZW50cyBpbnNpZGUgdGhlIGRyYXdlciBiZWxvdyBhbmQgaW5jbHVkaW5nIHRhYmxldCBwb3J0cmFpdFxuICAgIGh0bWwgJltmb3I9XCJfX3RvY1wiXSB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuXG4gICAgICAvLyBIaWRlIHRhYmxlIG9mIGNvbnRlbnRzIGJ5IGRlZmF1bHRcbiAgICAgICYgfiAubWQtbmF2IHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBCbHVycmVkIGxpbmtcbiAgICAmW2RhdGEtbWQtc3RhdGU9XCJibHVyXCJdIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG4gICAgfVxuXG4gICAgLy8gQWN0aXZlIGxpbmtcbiAgICAubWQtbmF2X19pdGVtICYtLWFjdGl2ZSB7XG4gICAgICBjb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1mZy1jb2xvcik7XG4gICAgfVxuXG4gICAgLy8gUmVzZXQgYWN0aXZlIGNvbG9yIGZvciBuZXN0ZWQgbGlzdCB0aXRsZXNcbiAgICAubWQtbmF2X19pdGVtLS1uZXN0ZWQgPiAmIHtcbiAgICAgIGNvbG9yOiBpbmhlcml0O1xuICAgIH1cblxuICAgIC8vIEZvY3VzZWQgb3IgaG92ZXJlZCBsaW5rXG4gICAgJjpmb2N1cyxcbiAgICAmOmhvdmVyIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1tZC1hY2NlbnQtZmctY29sb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlcG9zaXRvcnkgY29udGFpbmluZyBzb3VyY2VcbiAgJl9fc291cmNlIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgLy8gW3RhYmxldCAtXTogTGF5ZXJlZCBuYXZpZ2F0aW9uXG4gIEBpbmNsdWRlIGJyZWFrLXRvLWRldmljZSh0YWJsZXQpIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcblxuICAgIC8vIFN0cmV0Y2ggcHJpbWFyeSBuYXZpZ2F0aW9uIHRvIGRyYXdlclxuICAgICYtLXByaW1hcnksXG4gICAgJi0tcHJpbWFyeSAubWQtbmF2IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDA7XG4gICAgICByaWdodDogMDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgei1pbmRleDogMTtcbiAgICB9XG5cbiAgICAvLyBBZGp1c3Qgc3R5bGVzIGZvciBwcmltYXJ5IG5hdmlnYXRpb25cbiAgICAmLS1wcmltYXJ5IHtcblxuICAgICAgLy8gTGlzdCB0aXRsZSBhbmQgaXRlbVxuICAgICAgLm1kLW5hdl9fdGl0bGUsXG4gICAgICAubWQtbmF2X19pdGVtIHtcbiAgICAgICAgZm9udC1zaXplOiBweDJyZW0oMTZweCk7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7XG4gICAgICB9XG5cbiAgICAgIC8vIExpc3QgdGl0bGVcbiAgICAgIC5tZC1uYXZfX3RpdGxlIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBoZWlnaHQ6IHB4MnJlbSgxMTJweCk7XG4gICAgICAgIHBhZGRpbmc6IHB4MnJlbSg2MHB4KSBweDJyZW0oMTZweCkgcHgycmVtKDRweCk7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0KTtcbiAgICAgICAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IHB4MnJlbSg0OHB4KTtcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICAgICAgIC8vIEljb25cbiAgICAgICAgLm1kLW5hdl9faWNvbiB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIHRvcDogcHgycmVtKDhweCk7XG4gICAgICAgICAgbGVmdDogcHgycmVtKDhweCk7XG4gICAgICAgICAgd2lkdGg6IHB4MnJlbSgyNHB4KTtcbiAgICAgICAgICBoZWlnaHQ6IHB4MnJlbSgyNHB4KTtcbiAgICAgICAgICBtYXJnaW46IHB4MnJlbSg0cHgpO1xuXG4gICAgICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICAgICAgICByaWdodDogcHgycmVtKDhweCk7XG4gICAgICAgICAgICBsZWZ0OiBpbml0aWFsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1haW4gbGlzdHNcbiAgICAgICAgfiAubWQtbmF2X19saXN0IHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcbiAgICAgICAgICBib3gtc2hhZG93OlxuICAgICAgICAgICAgaW5zZXQgMCBweDJyZW0oMXB4KSAwIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0KTtcbiAgICAgICAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgICAgICAgIC8vIEhhY2s6IHJlZHVjZSBqaXR0ZXJcbiAgICAgICAgICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgICAgc2Nyb2xsLXNuYXAtdHlwZTogeSBtYW5kYXRvcnk7XG5cbiAgICAgICAgICAvLyBSZW1vdmUgYm9yZGVyIGZvciBmaXJzdCBsaXN0IGl0ZW1cbiAgICAgICAgICA+IC5tZC1uYXZfX2l0ZW06Zmlyc3QtY2hpbGQge1xuICAgICAgICAgICAgYm9yZGVyLXRvcDogMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTaXRlIHRpdGxlIGluIG1haW4gbmF2aWdhdGlvblxuICAgICAgICAmW2Zvcj1cIl9fZHJhd2VyXCJdIHtcbiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1mZy1jb2xvcik7XG4gICAgICAgICAgY29sb3I6IHZhcigtLW1kLXByaW1hcnktYmctY29sb3IpO1xuXG4gICAgICAgICAgLy8gU2l0ZSBsb2dvXG4gICAgICAgICAgLm1kLW5hdl9fYnV0dG9uIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgdG9wOiBweDJyZW0oNHB4KTtcbiAgICAgICAgICAgIGxlZnQ6IHB4MnJlbSg0cHgpO1xuICAgICAgICAgICAgbWFyZ2luOiBweDJyZW0oNHB4KTtcbiAgICAgICAgICAgIHBhZGRpbmc6IHB4MnJlbSg4cHgpO1xuICAgICAgICAgICAgZm9udC1zaXplOiBweDJyZW0oNDhweCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICAgIGh0bWwgW2Rpcj1cInJ0bFwiXSAmIC5tZC1uYXZfX3RpdGxlIHtcblxuICAgICAgICAvLyBTaXRlIHRpdGxlIGluIG1haW4gbmF2aWdhdGlvblxuICAgICAgICAmW2Zvcj1cIl9fZHJhd2VyXCJdIC5tZC1uYXZfX2J1dHRvbiB7XG4gICAgICAgICAgcmlnaHQ6IHB4MnJlbSg0cHgpO1xuICAgICAgICAgIGxlZnQ6IGluaXRpYWw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gTGlzdCBvZiBpdGVtc1xuICAgICAgLm1kLW5hdl9fbGlzdCB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICB9XG5cbiAgICAgIC8vIExpc3QgaXRlbVxuICAgICAgLm1kLW5hdl9faXRlbSB7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIGJvcmRlci10b3A6IHB4MnJlbSgxcHgpIHNvbGlkIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0KTtcblxuICAgICAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEluY3JlYXNlIHNwYWNpbmcgdG8gYWNjb3VudCBmb3IgaWNvblxuICAgICAgICAmLS1uZXN0ZWQgPiAubWQtbmF2X19saW5rIHtcbiAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiBweDJyZW0oNDhweCk7XG5cbiAgICAgICAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IHB4MnJlbSgxNnB4KTtcbiAgICAgICAgICAgIHBhZGRpbmctbGVmdDogcHgycmVtKDQ4cHgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFjdGl2ZSBwYXJlbnQgaXRlbVxuICAgICAgICAmLS1hY3RpdmUgPiAubWQtbmF2X19saW5rIHtcbiAgICAgICAgICBjb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1mZy1jb2xvcik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gTGluayBpbnNpZGUgaXRlbVxuICAgICAgLm1kLW5hdl9fbGluayB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgICAgcGFkZGluZzogcHgycmVtKDEycHgpIHB4MnJlbSgxNnB4KTtcblxuICAgICAgICAvLyBJY29uXG4gICAgICAgIC5tZC1uYXZfX2ljb24ge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgICByaWdodDogcHgycmVtKDEycHgpO1xuICAgICAgICAgIG1hcmdpbi10b3A6IHB4MnJlbSgtMTJweCk7XG4gICAgICAgICAgY29sb3I6IGluaGVyaXQ7XG4gICAgICAgICAgZm9udC1zaXplOiBweDJyZW0oMjRweCk7XG5cbiAgICAgICAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgICAgIHJpZ2h0OiBpbml0aWFsO1xuICAgICAgICAgICAgbGVmdDogcHgycmVtKDEycHgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJY29uXG4gICAgICAubWQtbmF2X19pY29uIHtcblxuICAgICAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgICAgIFtkaXI9XCJydGxcIl0gJiB7XG5cbiAgICAgICAgICAvLyBGbGlwIGljb24gdmVydGljYWxseVxuICAgICAgICAgIHN2ZyB7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKC0xKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVGFibGUgb2YgY29udGVudHMgaW5zaWRlIG5hdmlnYXRpb25cbiAgICAgIC5tZC1uYXYtLXNlY29uZGFyeSB7XG5cbiAgICAgICAgLy8gU2V0IGxpbmtzIHRvIHN0YXRpYyB0byBhdm9pZCB1bm5lY2Vzc2FyeSBsYXllcmluZ1xuICAgICAgICAubWQtbmF2X19saW5rIHtcbiAgICAgICAgICBwb3NpdGlvbjogc3RhdGljO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2V0IG5lc3RlZCBuYXZpZ2F0aW9uIGZvciB0YWJsZSBvZiBjb250ZW50cyB0byBzdGF0aWNcbiAgICAgICAgLm1kLW5hdiB7XG4gICAgICAgICAgcG9zaXRpb246IHN0YXRpYztcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcblxuICAgICAgICAgIC8vIDNyZCBsZXZlbCBsaW5rXG4gICAgICAgICAgLm1kLW5hdl9fbGluayB7XG4gICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IHB4MnJlbSgyOHB4KTtcblxuICAgICAgICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogcHgycmVtKDI4cHgpO1xuICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IGluaXRpYWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNHRoIGxldmVsIGxpbmtcbiAgICAgICAgICAubWQtbmF2IC5tZC1uYXZfX2xpbmsge1xuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiBweDJyZW0oNDBweCk7XG5cbiAgICAgICAgICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICAgICAgICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IHB4MnJlbSg0MHB4KTtcbiAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiBpbml0aWFsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDV0aCBsZXZlbCBsaW5rXG4gICAgICAgICAgLm1kLW5hdiAubWQtbmF2IC5tZC1uYXZfX2xpbmsge1xuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiBweDJyZW0oNTJweCk7XG5cbiAgICAgICAgICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICAgICAgICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IHB4MnJlbSg1MnB4KTtcbiAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiBpbml0aWFsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDZ0aCBsZXZlbCBsaW5rXG4gICAgICAgICAgLm1kLW5hdiAubWQtbmF2IC5tZC1uYXYgLm1kLW5hdl9fbGluayB7XG4gICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IHB4MnJlbSg2NHB4KTtcblxuICAgICAgICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogcHgycmVtKDY0cHgpO1xuICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IGluaXRpYWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSGlkZSBuZXN0ZWQgbmF2aWdhdGlvbiBieSBkZWZhdWx0XG4gICAgLm1kLW5hdl9fdG9nZ2xlIH4gJiB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwMCUpO1xuICAgICAgdHJhbnNpdGlvbjpcbiAgICAgICAgdHJhbnNmb3JtIDI1MG1zIGN1YmljLWJlemllcigwLjgsIDAsIDAuNiwgMSksXG4gICAgICAgIG9wYWNpdHkgICAxMjVtcyA1MG1zO1xuICAgICAgb3BhY2l0eTogMDtcblxuICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMDAlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFeHBhbmQgbmVzdGVkIG5hdmlnYXRpb24sIGlmIHRvZ2dsZSBpcyBjaGVja2VkXG4gICAgLm1kLW5hdl9fdG9nZ2xlOmNoZWNrZWQgfiAmIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcbiAgICAgIHRyYW5zaXRpb246XG4gICAgICAgIHRyYW5zZm9ybSAyNTBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpLFxuICAgICAgICBvcGFjaXR5ICAgMTI1bXMgMTI1bXM7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgfVxuXG4gIC8vIFt0YWJsZXQgcG9ydHJhaXQgLV06IFNob3cgdGFibGUgb2YgY29udGVudHMgaW4gZHJhd2VyXG4gIEBpbmNsdWRlIGJyZWFrLXRvLWRldmljZSh0YWJsZXQgcG9ydHJhaXQpIHtcblxuICAgIC8vIFNob3cgbGluayB0byB0YWJsZSBvZiBjb250ZW50cyAtIGhpZ2hlciBzcGVjaWZpY2l0eSBpcyBuZWNlc3NhcnkgdG9cbiAgICAvLyBkaXNwbGF5IHRoZSB0YWJsZSBvZiBjb250ZW50cyBpbnNpZGUgdGhlIGRyYXdlclxuICAgIGh0bWwgJl9fbGlua1tmb3I9XCJfX3RvY1wiXSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHBhZGRpbmctcmlnaHQ6IHB4MnJlbSg0OHB4KTtcblxuICAgICAgLy8gSGlkZSBsaW5rIHRvIGN1cnJlbnQgaXRlbVxuICAgICAgKyAubWQtbmF2X19saW5rIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cblxuICAgICAgLy8gU2hvdyB0YWJsZSBvZiBjb250ZW50c1xuICAgICAgJiB+IC5tZC1uYXYge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICBodG1sIFtkaXI9XCJydGxcIl0gJl9fbGluayB7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiBweDJyZW0oMTZweCk7XG4gICAgICBwYWRkaW5nLWxlZnQ6IHB4MnJlbSg0OHB4KTtcbiAgICB9XG5cbiAgICAvLyBSZXBvc2l0b3J5IGNvbnRhaW5pbmcgc291cmNlXG4gICAgJl9fc291cmNlIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgcGFkZGluZzogMCBweDJyZW0oNHB4KTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLXByaW1hcnktZmctY29sb3ItLWRhcmspO1xuICAgICAgY29sb3I6IHZhcigtLW1kLXByaW1hcnktYmctY29sb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFt0YWJsZXQgbGFuZHNjYXBlICtdOiBUcmVlLWxpa2UgbmF2aWdhdGlvblxuICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZSh0YWJsZXQgbGFuZHNjYXBlKSB7XG5cbiAgICAvLyBMaXN0IHRpdGxlXG4gICAgJi0tc2Vjb25kYXJ5IC5tZC1uYXZfX3RpdGxlIHtcblxuICAgICAgLy8gU25hcCB0byB0YWJsZSBvZiBjb250ZW50cyB0aXRsZVxuICAgICAgJltmb3I9XCJfX3RvY1wiXSB7XG4gICAgICAgIHNjcm9sbC1zbmFwLWFsaWduOiBzdGFydDtcbiAgICAgIH1cblxuICAgICAgLy8gSGlkZSBpY29uXG4gICAgICAubWQtbmF2X19pY29uIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBbc2NyZWVuICtdOiBUcmVlLWxpa2UgbmF2aWdhdGlvblxuICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZShzY3JlZW4pIHtcbiAgICB0cmFuc2l0aW9uOiBtYXgtaGVpZ2h0IDI1MG1zIGN1YmljLWJlemllcigwLjg2LCAwLCAwLjA3LCAxKTtcblxuICAgIC8vIExpc3QgdGl0bGVcbiAgICAmLS1wcmltYXJ5IC5tZC1uYXZfX3RpdGxlIHtcblxuICAgICAgLy8gU25hcCB0byBzaXRlIHRpdGxlXG4gICAgICAmW2Zvcj1cIl9fZHJhd2VyXCJdIHtcbiAgICAgICAgc2Nyb2xsLXNuYXAtYWxpZ246IHN0YXJ0O1xuICAgICAgfVxuXG4gICAgICAvLyBIaWRlIGljb25cbiAgICAgIC5tZC1uYXZfX2ljb24ge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhpZGUgbmVzdGVkIG5hdmlnYXRpb24gYnkgZGVmYXVsdFxuICAgIC5tZC1uYXZfX3RvZ2dsZSB+ICYge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG5cbiAgICAvLyBTaG93IG5lc3RlZCBuYXZpZ2F0aW9uLCBpZiB0b2dnbGUgaXMgY2hlY2tlZFxuICAgIC5tZC1uYXZfX3RvZ2dsZTpjaGVja2VkIH4gJiB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG5cbiAgICAvLyBIaWRlIHRpdGxlcyBmb3IgbmVzdGVkIG5hdmlnYXRpb25cbiAgICAmX19pdGVtLS1uZXN0ZWQgPiAubWQtbmF2ID4gJl9fdGl0bGUge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG5cbiAgICAvLyBJY29uXG4gICAgJl9faWNvbiB7XG4gICAgICBoZWlnaHQ6IHB4MnJlbSgxOHB4KTtcbiAgICAgIGZsb2F0OiByaWdodDtcbiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAyNTBtcztcblxuICAgICAgLy8gSW5saW5lIGljb24gYW5kIGFkanVzdCB0byBtYXRjaCBmb250IHNpemVcbiAgICAgIHN2ZyB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgd2lkdGg6IHB4MnJlbSgxOHB4KTtcbiAgICAgICAgaGVpZ2h0OiBweDJyZW0oMThweCk7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBweDJyZW0oLTJweCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFJvdGF0ZSBpY29uIGZvciBleHBhbmRlZCBsaXN0c1xuICAgICAgLm1kLW5hdl9faXRlbS0tbmVzdGVkIC5tZC1uYXZfX3RvZ2dsZTpjaGVja2VkIH4gLm1kLW5hdl9fbGluayAmIHtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGVaKDkwZGVnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vLy9cbi8vLyBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMCBNYXJ0aW4gRG9uYXRoIDxtYXJ0aW4uZG9uYXRoQHNxdWlkZnVuay5jb20+XG4vLy9cbi8vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSxcbi8vLyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLy8gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsXG4vLy8gYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlXG4vLy8gU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vL1xuLy8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vLy9cbi8vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMXG4vLy8gVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lOR1xuLy8vIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVJcbi8vLyBERUFMSU5HU1xuLy8vL1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBWYXJpYWJsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gQWN0aXZlICh0b2dnbGVkKSBzZWFyY2hcbiRtZC10b2dnbGVfX3NlYXJjaC0tY2hlY2tlZDpcbiAgXCJbZGF0YS1tZC10b2dnbGU9XFxcInNlYXJjaFxcXCJdOmNoZWNrZWQgfiAubWQtaGVhZGVyXCI7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIFNlYXJjaCBjb250YWluZXJcbi5tZC1zZWFyY2gge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgLy8gSGlkZSBzZWFyY2gsIGlmIEphdmFTY3JpcHQgaXMgbm90IGF2YWlsYWJsZS5cbiAgLm5vLWpzICYge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cblxuICAvLyBbdGFibGV0IGxhbmRzY2FwZSArXTogSGVhZGVyLWVtYmVkZGVkIHNlYXJjaFxuICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZSh0YWJsZXQgbGFuZHNjYXBlKSB7XG4gICAgcGFkZGluZzogcHgycmVtKDRweCkgMDtcbiAgfVxuXG4gIC8vIFNlYXJjaCBtb2RhbCBvdmVybGF5XG4gICZfX292ZXJsYXkge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgei1pbmRleDogMTtcblxuICAgIC8vIFt0YWJsZXQgcG9ydHJhaXQgLV06IEZ1bGwtc2NyZWVuIHNlYXJjaCBiYXJcbiAgICBAaW5jbHVkZSBicmVhay10by1kZXZpY2UodGFibGV0IHBvcnRyYWl0KSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IHB4MnJlbSg0cHgpO1xuICAgICAgbGVmdDogcHgycmVtKC00NHB4KTtcbiAgICAgIHdpZHRoOiBweDJyZW0oNDBweCk7XG4gICAgICBoZWlnaHQ6IHB4MnJlbSg0MHB4KTtcbiAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlcjtcbiAgICAgIHRyYW5zaXRpb246XG4gICAgICAgIHRyYW5zZm9ybSAzMDBtcyAxMDBtcyxcbiAgICAgICAgb3BhY2l0eSAgIDIwMG1zIDIwMG1zO1xuICAgICAgYm9yZGVyLXJhZGl1czogcHgycmVtKDIwcHgpO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG5cbiAgICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICAgIHJpZ2h0OiBweDJyZW0oLTQ0cHgpO1xuICAgICAgICBsZWZ0OiBpbml0aWFsO1xuICAgICAgfVxuXG4gICAgICAvLyBFeHBhbmRlZCBvdmVybGF5XG4gICAgICAjeyRtZC10b2dnbGVfX3NlYXJjaC0tY2hlY2tlZH0gJiB7XG4gICAgICAgIHRyYW5zaXRpb246XG4gICAgICAgICAgdHJhbnNmb3JtIDQwMG1zLFxuICAgICAgICAgIG9wYWNpdHkgICAxMDBtcztcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXQgc2NhbGUgZmFjdG9yc1xuICAgICN7JG1kLXRvZ2dsZV9fc2VhcmNoLS1jaGVja2VkfSAmIHtcblxuICAgICAgLy8gW21vYmlsZSBwb3J0cmFpdCAtXTogU2NhbGUgdXAgNDUgdGltZXNcbiAgICAgIEBpbmNsdWRlIGJyZWFrLXRvLWRldmljZShtb2JpbGUgcG9ydHJhaXQpIHtcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSg0NSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFttb2JpbGUgbGFuZHNjYXBlXTogU2NhbGUgdXAgNjAgdGltZXNcbiAgICAgIEBpbmNsdWRlIGJyZWFrLWF0LWRldmljZShtb2JpbGUgbGFuZHNjYXBlKSB7XG4gICAgICAgIHRyYW5zZm9ybTogc2NhbGUoNjApO1xuICAgICAgfVxuXG4gICAgICAvLyBbdGFibGV0IHBvcnRyYWl0XTogU2NhbGUgdXAgNzUgdGltZXNcbiAgICAgIEBpbmNsdWRlIGJyZWFrLWF0LWRldmljZSh0YWJsZXQgcG9ydHJhaXQpIHtcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSg3NSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gW3RhYmxldCBsYW5kc2NhcGUgK106IE92ZXJsYXkgZm9yIGJldHRlciBmb2N1cyBvbiBzZWFyY2hcbiAgICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZSh0YWJsZXQgbGFuZHNjYXBlKSB7XG4gICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICB0b3A6IDA7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgd2lkdGg6IDA7XG4gICAgICBoZWlnaHQ6IDA7XG4gICAgICB0cmFuc2l0aW9uOlxuICAgICAgICB3aWR0aCAgICAgMG1zIDI1MG1zLFxuICAgICAgICBoZWlnaHQgICAgMG1zIDI1MG1zLFxuICAgICAgICBvcGFjaXR5IDI1MG1zO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgbGVmdDogaW5pdGlhbDtcbiAgICAgIH1cblxuICAgICAgLy8gRXhwYW5kZWQgb3ZlcmxheVxuICAgICAgI3skbWQtdG9nZ2xlX19zZWFyY2gtLWNoZWNrZWR9ICYge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICB0cmFuc2l0aW9uOlxuICAgICAgICAgIHdpZHRoICAgICAwbXMsXG4gICAgICAgICAgaGVpZ2h0ICAgIDBtcyxcbiAgICAgICAgICBvcGFjaXR5IDI1MG1zO1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFNlYXJjaCBtb2RhbCB3cmFwcGVyXG4gICZfX2lubmVyIHtcbiAgICAvLyBIYWNrOiByZWR1Y2Ugaml0dGVyXG4gICAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xuXG4gICAgLy8gW3RhYmxldCBwb3J0cmFpdCAtXTogUHV0IHNlYXJjaCBtb2RhbCBvZmYtY2FudmFzIGJ5IGRlZmF1bHRcbiAgICBAaW5jbHVkZSBicmVhay10by1kZXZpY2UodGFibGV0IHBvcnRyYWl0KSB7XG4gICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICB0b3A6IDA7XG4gICAgICBsZWZ0OiAxMDAlO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoNSUpO1xuICAgICAgdHJhbnNpdGlvbjpcbiAgICAgICAgcmlnaHQgICAgICAgMG1zIDMwMG1zLFxuICAgICAgICBsZWZ0ICAgICAgICAwbXMgMzAwbXMsXG4gICAgICAgIHRyYW5zZm9ybSAxNTBtcyAxNTBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpLFxuICAgICAgICBvcGFjaXR5ICAgMTUwbXMgMTUwbXM7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgICAgei1pbmRleDogMjtcblxuICAgICAgLy8gQWN0aXZlIHNlYXJjaCBtb2RhbFxuICAgICAgI3skbWQtdG9nZ2xlX19zZWFyY2gtLWNoZWNrZWR9ICYge1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG4gICAgICAgIHRyYW5zaXRpb246XG4gICAgICAgICAgcmlnaHQgICAgICAgMG1zICAgMG1zLFxuICAgICAgICAgIGxlZnQgICAgICAgIDBtcyAgIDBtcyxcbiAgICAgICAgICB0cmFuc2Zvcm0gMTUwbXMgMTUwbXMgY3ViaWMtYmV6aWVyKDAuMSwgMC43LCAwLjEsIDEpLFxuICAgICAgICAgIG9wYWNpdHkgICAxNTBtcyAxNTBtcztcbiAgICAgICAgb3BhY2l0eTogMTtcblxuICAgICAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgICAgbGVmdDogaW5pdGlhbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgICBodG1sIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICAgIHJpZ2h0OiAxMDAlO1xuICAgICAgICBsZWZ0OiBpbml0aWFsO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBbdGFibGV0IGxhbmRzY2FwZSArXTogSGVhZGVyLWVtYmVkZGVkIHNlYXJjaFxuICAgIEBpbmNsdWRlIGJyZWFrLWZyb20tZGV2aWNlKHRhYmxldCBsYW5kc2NhcGUpIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHdpZHRoOiBweDJyZW0oMjM0cHgpO1xuICAgICAgcGFkZGluZzogcHgycmVtKDJweCkgMDtcbiAgICAgIGZsb2F0OiByaWdodDtcbiAgICAgIHRyYW5zaXRpb246IHdpZHRoIDI1MG1zIGN1YmljLWJlemllcigwLjEsIDAuNywgMC4xLCAxKTtcblxuICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0IG1heGltdW0gd2lkdGhcbiAgICAjeyRtZC10b2dnbGVfX3NlYXJjaC0tY2hlY2tlZH0gJiB7XG5cbiAgICAgIC8vIFt0YWJsZXQgbGFuZHNjYXBlXTogRG8gbm90IG92ZXJsYXkgdGl0bGVcbiAgICAgIEBpbmNsdWRlIGJyZWFrLWF0LWRldmljZSh0YWJsZXQgbGFuZHNjYXBlKSB7XG4gICAgICAgIHdpZHRoOiBweDJyZW0oNDY4cHgpO1xuICAgICAgfVxuXG4gICAgICAvLyBbc2NyZWVuICtdOiBNYXRjaCBjb250ZW50IHdpZHRoXG4gICAgICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZShzY3JlZW4pIHtcbiAgICAgICAgd2lkdGg6IHB4MnJlbSg2ODhweCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gU2VhcmNoIGZvcm1cbiAgJl9fZm9ybSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgLy8gW3RhYmxldCBsYW5kc2NhcGUgK106IEhlYWRlci1lbWJlZGRlZCBzZWFyY2hcbiAgICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZSh0YWJsZXQgbGFuZHNjYXBlKSB7XG4gICAgICBib3JkZXItcmFkaXVzOiBweDJyZW0oMnB4KTtcbiAgICB9XG4gIH1cblxuICAvLyBTZWFyY2ggaW5wdXRcbiAgJl9faW5wdXQge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBwYWRkaW5nOiAwIHB4MnJlbSg0NHB4KSAwIHB4MnJlbSg3MnB4KTtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICB6LWluZGV4OiAyO1xuXG4gICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICBwYWRkaW5nOiAwIHB4MnJlbSg3MnB4KSAwIHB4MnJlbSg0NHB4KTtcbiAgICB9XG5cbiAgICAvLyBUcmFuc2l0aW9uIG9uIHBsYWNlaG9sZGVyXG4gICAgJjo6cGxhY2Vob2xkZXIge1xuICAgICAgdHJhbnNpdGlvbjogY29sb3IgMjUwbXM7XG4gICAgfVxuXG4gICAgLy8gUGxhY2Vob2xkZXIgYW5kIGljb24gY29sb3IgaW4gYWN0aXZlIHN0YXRlXG4gICAgfiAubWQtc2VhcmNoX19pY29uLFxuICAgICY6OnBsYWNlaG9sZGVyIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIHRoZSBcInhcIiByZW5kZXJlZCBieSBJbnRlcm5ldCBFeHBsb3JlclxuICAgICY6Oi1tcy1jbGVhciB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cblxuICAgIC8vIFt0YWJsZXQgcG9ydHJhaXQgLV06IEZ1bGwtc2NyZWVuIHNlYXJjaCBiYXJcbiAgICBAaW5jbHVkZSBicmVhay10by1kZXZpY2UodGFibGV0IHBvcnRyYWl0KSB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogcHgycmVtKDQ4cHgpO1xuICAgICAgZm9udC1zaXplOiBweDJyZW0oMThweCk7XG4gICAgfVxuXG4gICAgLy8gW3RhYmxldCBsYW5kc2NhcGUgK106IEhlYWRlci1lbWJlZGRlZCBzZWFyY2hcbiAgICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZSh0YWJsZXQgbGFuZHNjYXBlKSB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogcHgycmVtKDM2cHgpO1xuICAgICAgcGFkZGluZy1sZWZ0OiBweDJyZW0oNDRweCk7XG4gICAgICB0cmFuc2l0aW9uOlxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yIDI1MG1zLFxuICAgICAgICBjb2xvciAgICAgICAgICAgIDI1MG1zO1xuICAgICAgYm9yZGVyLXJhZGl1czogcHgycmVtKDJweCk7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVyKTtcbiAgICAgIGNvbG9yOiBpbmhlcml0O1xuICAgICAgZm9udC1zaXplOiBtcygwKTtcblxuICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgcGFkZGluZy1yaWdodDogcHgycmVtKDQ0cHgpO1xuICAgICAgfVxuXG4gICAgICAvLyBJY29uIGNvbG9yXG4gICAgICArIC5tZC1zZWFyY2hfX2ljb24ge1xuICAgICAgICBjb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1iZy1jb2xvcik7XG4gICAgICB9XG5cbiAgICAgIC8vIFBsYWNlaG9sZGVyIGNvbG9yXG4gICAgICAmOjpwbGFjZWhvbGRlciB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1tZC1wcmltYXJ5LWJnLWNvbG9yLS1saWdodCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEhvdmVyZWQgc2VhcmNoIGZpZWxkXG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvci0tbGlnaHRlc3QpO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXQgbGlnaHQgYmFja2dyb3VuZCBvbiBhY3RpdmUgc2VhcmNoIGZpZWxkXG4gICAgICAjeyRtZC10b2dnbGVfX3NlYXJjaC0tY2hlY2tlZH0gJiB7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IHB4MnJlbSgycHgpIHB4MnJlbSgycHgpIDAgMDtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yKTtcbiAgICAgICAgdGV4dC1vdmVyZmxvdzogY2xpcDtcblxuICAgICAgICAvLyBJY29uIGFuZCBwbGFjZWhvbGRlciBjb2xvciBpbiBhY3RpdmUgc3RhdGVcbiAgICAgICAgKyAubWQtc2VhcmNoX19pY29uLFxuICAgICAgICAmOjpwbGFjZWhvbGRlciB7XG4gICAgICAgICAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEljb25cbiAgJl9faWNvbiB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHdpZHRoOiBweDJyZW0oMjRweCk7XG4gICAgaGVpZ2h0OiBweDJyZW0oMjRweCk7XG4gICAgdHJhbnNpdGlvbjpcbiAgICAgIGNvbG9yICAgMjUwbXMsXG4gICAgICBvcGFjaXR5IDI1MG1zO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB6LWluZGV4OiAyO1xuXG4gICAgLy8gSG92ZXJlZCBpY29uXG4gICAgJjpob3ZlciB7XG4gICAgICBvcGFjaXR5OiAwLjc7XG4gICAgfVxuXG4gICAgLy8gU2VhcmNoIGljb25cbiAgICAmW2Zvcj1cIl9fc2VhcmNoXCJdIHtcbiAgICAgIHRvcDogcHgycmVtKDZweCk7XG4gICAgICBsZWZ0OiBweDJyZW0oMTBweCk7XG5cbiAgICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICAgIHJpZ2h0OiBweDJyZW0oMTBweCk7XG4gICAgICAgIGxlZnQ6IGluaXRpYWw7XG5cbiAgICAgICAgLy8gRmxpcCBpY29uIHZlcnRpY2FsbHlcbiAgICAgICAgc3ZnIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gW3RhYmxldCBwb3J0cmFpdCAtXTogRnVsbC1zY3JlZW4gc2VhcmNoIGJhclxuICAgICAgQGluY2x1ZGUgYnJlYWstdG8tZGV2aWNlKHRhYmxldCBwb3J0cmFpdCkge1xuICAgICAgICB0b3A6IHB4MnJlbSgxMnB4KTtcbiAgICAgICAgbGVmdDogcHgycmVtKDE2cHgpO1xuXG4gICAgICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgICByaWdodDogcHgycmVtKDE2cHgpO1xuICAgICAgICAgIGxlZnQ6IGluaXRpYWw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBIaWRlIHRoZSBtYWduaWZ5aW5nIGdsYXNzICgxc3QgaWNvbilcbiAgICAgICAgc3ZnOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFt0YWJsZXQgbGFuZHNjYXBlICtdOiBIZWFkZXItZW1iZWRkZWQgc2VhcmNoXG4gICAgICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZSh0YWJsZXQgbGFuZHNjYXBlKSB7XG5cbiAgICAgICAgLy8gSGlkZSB0aGUgYXJyb3cgKDJuZCBpY29uKVxuICAgICAgICBzdmc6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlc2V0IGJ1dHRvblxuICAgICZbdHlwZT1cInJlc2V0XCJdIHtcbiAgICAgIHRvcDogcHgycmVtKDZweCk7XG4gICAgICByaWdodDogcHgycmVtKDEwcHgpO1xuICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjc1KTtcbiAgICAgIHRyYW5zaXRpb246XG4gICAgICAgIHRyYW5zZm9ybSAxNTBtcyBjdWJpYy1iZXppZXIoMC4xLCAwLjcsIDAuMSwgMSksXG4gICAgICAgIG9wYWNpdHkgICAxNTBtcztcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcblxuICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgcmlnaHQ6IGluaXRpYWw7XG4gICAgICAgIGxlZnQ6IHB4MnJlbSgxMHB4KTtcbiAgICAgIH1cblxuICAgICAgLy8gW3RhYmxldCBwb3J0cmFpdCAtXTogRnVsbC1zY3JlZW4gc2VhcmNoIGJhclxuICAgICAgQGluY2x1ZGUgYnJlYWstdG8tZGV2aWNlKHRhYmxldCBwb3J0cmFpdCkge1xuICAgICAgICB0b3A6IHB4MnJlbSgxMnB4KTtcbiAgICAgICAgcmlnaHQ6IHB4MnJlbSgxNnB4KTtcblxuICAgICAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICAgICAgcmlnaHQ6IGluaXRpYWw7XG4gICAgICAgICAgbGVmdDogcHgycmVtKDE2cHgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFNob3cgcmVzZXQgYnV0dG9uIGlmIHNlYXJjaCBpcyBhY3RpdmUgYW5kIGlucHV0IG5vbi1lbXB0eVxuICAgICAgI3skbWQtdG9nZ2xlX19zZWFyY2gtLWNoZWNrZWR9IC5tZC1zZWFyY2hfX2lucHV0OnZhbGlkIH4gJiB7XG4gICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBpbml0aWFsO1xuXG4gICAgICAgIC8vIEhvdmVyZWQgaWNvblxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICBvcGFjaXR5OiAwLjc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTZWFyY2ggb3V0cHV0IGNvbnRhaW5lclxuICAmX19vdXRwdXQge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBib3JkZXItcmFkaXVzOiAwIDAgcHgycmVtKDJweCkgcHgycmVtKDJweCk7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB6LWluZGV4OiAxO1xuXG4gICAgLy8gW3RhYmxldCBwb3J0cmFpdCAtXTogRnVsbC1zY3JlZW4gc2VhcmNoIGJhclxuICAgIEBpbmNsdWRlIGJyZWFrLXRvLWRldmljZSh0YWJsZXQgcG9ydHJhaXQpIHtcbiAgICAgIHRvcDogcHgycmVtKDQ4cHgpO1xuICAgICAgYm90dG9tOiAwO1xuICAgIH1cblxuICAgIC8vIFt0YWJsZXQgbGFuZHNjYXBlICtdOiBIZWFkZXItZW1iZWRkZWQgc2VhcmNoXG4gICAgQGluY2x1ZGUgYnJlYWstZnJvbS1kZXZpY2UodGFibGV0IGxhbmRzY2FwZSkge1xuICAgICAgdG9wOiBweDJyZW0oMzhweCk7XG4gICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDQwMG1zO1xuICAgICAgb3BhY2l0eTogMDtcblxuICAgICAgLy8gU2hvdyBzZWFyY2ggb3V0cHV0IGluIGFjdGl2ZSBzdGF0ZVxuICAgICAgI3skbWQtdG9nZ2xlX19zZWFyY2gtLWNoZWNrZWR9ICYge1xuICAgICAgICBAaW5jbHVkZSB6LWRlcHRoKDYpO1xuXG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gV3JhcHBlciBmb3Igc2Nyb2xsaW5nIG9uIG92ZXJmbG93XG4gICZfX3Njcm9sbHdyYXAge1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcbiAgICBib3gtc2hhZG93OiBpbnNldCAwIHB4MnJlbSgxcHgpIDAgdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlc3QpO1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgLy8gSGFjazogcmVkdWNlIGppdHRlclxuICAgIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICBzY3JvbGwtc25hcC10eXBlOiB5IG1hbmRhdG9yeTtcbiAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG5cbiAgICAvLyBNaXRpZ2lhdGUgZXhjZXNzaXZlIHJlcGFpbnRzIG9uIG5vbi1yZXRpbmEgZGV2aWNlc1xuICAgIEBtZWRpYSAobWF4LXJlc29sdXRpb246IDFkcHB4KSB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooMCk7XG4gICAgfVxuXG4gICAgLy8gW3RhYmxldCBsYW5kc2NhcGVdOiBTZXQgYWJzb2x1dGUgd2lkdGggdG8gb21pdCB1bm5lY2Vzc2FyeSByZWZsb3dcbiAgICBAaW5jbHVkZSBicmVhay1hdC1kZXZpY2UodGFibGV0IGxhbmRzY2FwZSkge1xuICAgICAgd2lkdGg6IHB4MnJlbSg0NjhweCk7XG4gICAgfVxuXG4gICAgLy8gW3NjcmVlbiArXTogU2V0IGFic29sdXRlIHdpZHRoIHRvIG9taXQgdW5uZWNlc3NhcnkgcmVmbG93XG4gICAgQGluY2x1ZGUgYnJlYWstZnJvbS1kZXZpY2Uoc2NyZWVuKSB7XG4gICAgICB3aWR0aDogcHgycmVtKDY4OHB4KTtcbiAgICB9XG5cbiAgICAvLyBbdGFibGV0IGxhbmRzY2FwZSArXTogTGltaXQgaGVpZ2h0IHRvIHZpZXdwb3J0XG4gICAgQGluY2x1ZGUgYnJlYWstZnJvbS1kZXZpY2UodGFibGV0IGxhbmRzY2FwZSkge1xuICAgICAgbWF4LWhlaWdodDogMDtcblxuICAgICAgLy8gRXhwYW5kIGluIGFjdGl2ZSBzdGF0ZVxuICAgICAgI3skbWQtdG9nZ2xlX19zZWFyY2gtLWNoZWNrZWR9ICYge1xuICAgICAgICBtYXgtaGVpZ2h0OiA3NXZoO1xuICAgICAgfVxuXG4gICAgICAvLyBPdmVycmlkZSBuYXRpdmUgc2Nyb2xsYmFyIHN0eWxlc1xuICAgICAgJjo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICAgICAgICB3aWR0aDogcHgycmVtKDRweCk7XG4gICAgICAgIGhlaWdodDogcHgycmVtKDRweCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNjcm9sbGJhciB0aHVtYlxuICAgICAgJjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVyKTtcblxuICAgICAgICAvLyBIb3ZlcmVkIHNjcm9sbGJhciB0aHVtYlxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1hY2NlbnQtZmctY29sb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIFNlYXJjaCByZXN1bHRcbi5tZC1zZWFyY2gtcmVzdWx0IHtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3IpO1xuICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuXG4gIC8vIFNlYXJjaCBtZXRhZGF0YVxuICAmX19tZXRhIHtcbiAgICBwYWRkaW5nOiAwIHB4MnJlbSgxNnB4KTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVzdCk7XG4gICAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgICBmb250LXNpemU6IG1zKC0xKTtcbiAgICBsaW5lLWhlaWdodDogcHgycmVtKDM2cHgpO1xuICAgIHNjcm9sbC1zbmFwLWFsaWduOiBzdGFydDtcblxuICAgIC8vIFt0YWJsZXQgbGFuZHNjYXBlICtdOiBJbmNyZWFzZSBsZWZ0IGluZGVudFxuICAgIEBpbmNsdWRlIGJyZWFrLWZyb20tZGV2aWNlKHRhYmxldCBsYW5kc2NhcGUpIHtcbiAgICAgIHBhZGRpbmctbGVmdDogcHgycmVtKDQ0cHgpO1xuXG4gICAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgICBwYWRkaW5nLXJpZ2h0OiBweDJyZW0oNDRweCk7XG4gICAgICAgIHBhZGRpbmctbGVmdDogaW5pdGlhbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBMaXN0IG9mIGl0ZW1zXG4gICZfX2xpc3Qge1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGJvcmRlci10b3A6IHB4MnJlbSgxcHgpIHNvbGlkIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0KTtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICB9XG5cbiAgLy8gTGlzdCBpdGVtXG4gICZfX2l0ZW0ge1xuICAgIGJveC1zaGFkb3c6IDAgcHgycmVtKC0xcHgpIDAgdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlc3QpO1xuICB9XG5cbiAgLy8gTGluayBpbnNpZGUgaXRlbVxuICAmX19saW5rIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDI1MG1zO1xuICAgIG91dGxpbmU6IDA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBzY3JvbGwtc25hcC1hbGlnbjogc3RhcnQ7XG5cbiAgICAvLyBGb2N1c2VkIG9yIGhvdmVyZWQgbGlua1xuICAgICY6Zm9jdXMsXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1hY2NlbnQtZmctY29sb3ItLXRyYW5zcGFyZW50KTtcblxuICAgICAgLy8gU2xpZ2h0bHkgdHJhbnNwYXJlbnQgaWNvblxuICAgICAgLm1kLXNlYXJjaC1yZXN1bHRfX2FydGljbGU6OmJlZm9yZSB7XG4gICAgICAgIG9wYWNpdHk6IDAuNztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgYSBsaXR0bGUgc3BhY2luZyBvbiB0aGUgdGVhc2VyIG9mIHRoZSBsYXN0IGxpbmtcbiAgICAmOmxhc3QtY2hpbGQgLm1kLXNlYXJjaC1yZXN1bHRfX3RlYXNlciB7XG4gICAgICBtYXJnaW4tYm90dG9tOiBweDJyZW0oMTJweCk7XG4gICAgfVxuICB9XG5cbiAgLy8gQXJ0aWNsZSAtIGRvY3VtZW50IG9yIHNlY3Rpb25cbiAgJl9fYXJ0aWNsZSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHBhZGRpbmc6IDAgcHgycmVtKDE2cHgpO1xuICAgIG92ZXJmbG93OiBhdXRvO1xuXG4gICAgLy8gW3RhYmxldCBsYW5kc2NhcGUgK106IEluY3JlYXNlIGxlZnQgaW5kZW50XG4gICAgQGluY2x1ZGUgYnJlYWstZnJvbS1kZXZpY2UodGFibGV0IGxhbmRzY2FwZSkge1xuICAgICAgcGFkZGluZy1sZWZ0OiBweDJyZW0oNDRweCk7XG5cbiAgICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IHB4MnJlbSg0NHB4KTtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiBweDJyZW0oMTZweCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRG9jdW1lbnRcbiAgICAmLS1kb2N1bWVudCB7XG5cbiAgICAgIC8vIFRpdGxlXG4gICAgICAubWQtc2VhcmNoLXJlc3VsdF9fdGl0bGUge1xuICAgICAgICBtYXJnaW46IHB4MnJlbSgxMXB4KSAwO1xuICAgICAgICBmb250LXNpemU6IG1zKDApO1xuICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICBsaW5lLWhlaWdodDogMS40O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEljb25cbiAgJl9faWNvbiB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDA7XG4gICAgbWFyZ2luOiBweDJyZW0oMnB4KTtcbiAgICBwYWRkaW5nOiBweDJyZW0oOHB4KTtcbiAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuXG4gICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICByaWdodDogMDtcbiAgICAgIGxlZnQ6IGluaXRpYWw7XG5cbiAgICAgIC8vIEZsaXAgaWNvbiB2ZXJ0aWNhbGx5XG4gICAgICBzdmcge1xuICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gW3RhYmxldCBwb3J0cmFpdCAtXTogSGlkZSBwYWdlIGljb25cbiAgICBAaW5jbHVkZSBicmVhay10by1kZXZpY2UodGFibGV0IHBvcnRyYWl0KSB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRpdGxlXG4gICZfX3RpdGxlIHtcbiAgICBtYXJnaW46IDAuNWVtIDA7XG4gICAgZm9udC1zaXplOiBtcygtMSk7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBsaW5lLWhlaWdodDogMS40O1xuICB9XG5cbiAgLy8gc3R5bGVsaW50LWRpc2FibGUgdmFsdWUtbm8tdmVuZG9yLXByZWZpeCwgcHJvcGVydHktbm8tdmVuZG9yLXByZWZpeFxuXG4gIC8vIFRlYXNlclxuICAmX190ZWFzZXIge1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIG1heC1oZWlnaHQ6IHB4MnJlbSgzM3B4KTtcbiAgICBtYXJnaW46IDAuNWVtIDA7XG4gICAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgICBmb250LXNpemU6IG1zKC0xKTtcbiAgICBsaW5lLWhlaWdodDogMS40O1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgICAtd2Via2l0LWxpbmUtY2xhbXA6IDI7XG5cbiAgICAvLyBbbW9iaWxlIC1dOiBJbmNyZWFzZSBudW1iZXIgb2YgbGluZXNcbiAgICBAaW5jbHVkZSBicmVhay10by1kZXZpY2UobW9iaWxlKSB7XG4gICAgICBtYXgtaGVpZ2h0OiBweDJyZW0oNTBweCk7XG4gICAgICAtd2Via2l0LWxpbmUtY2xhbXA6IDM7XG4gICAgfVxuXG4gICAgLy8gW3RhYmxldCBsYW5kc2NhcGVdOiBJbmNyZWFzZSBudW1iZXIgb2YgbGluZXNcbiAgICBAaW5jbHVkZSBicmVhay1hdC1kZXZpY2UodGFibGV0IGxhbmRzY2FwZSkge1xuICAgICAgbWF4LWhlaWdodDogcHgycmVtKDUwcHgpO1xuICAgICAgLXdlYmtpdC1saW5lLWNsYW1wOiAzO1xuICAgIH1cbiAgfVxuXG4gIC8vIHN0eWxlbGludC1lbmFibGUgdmFsdWUtbm8tdmVuZG9yLXByZWZpeCwgcHJvcGVydHktbm8tdmVuZG9yLXByZWZpeFxuXG4gIC8vIFNlYXJjaCB0ZXJtIGhpZ2hsaWdodGluZ1xuICBlbSB7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gIH1cbn1cbiIsIi8vLy9cbi8vLyBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMCBNYXJ0aW4gRG9uYXRoIDxtYXJ0aW4uZG9uYXRoQHNxdWlkZnVuay5jb20+XG4vLy9cbi8vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSxcbi8vLyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLy8gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsXG4vLy8gYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlXG4vLy8gU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vL1xuLy8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vLy9cbi8vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMXG4vLy8gVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lOR1xuLy8vIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVJcbi8vLyBERUFMSU5HU1xuLy8vL1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBWYXJpYWJsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gQWN0aXZlICh0b2dnbGVkKSBkcmF3ZXJcbiRtZC10b2dnbGVfX2RyYXdlci0tY2hlY2tlZDpcbiAgXCJbZGF0YS1tZC10b2dnbGU9XFxcImRyYXdlclxcXCJdOmNoZWNrZWQgfiAubWQtY29udGFpbmVyXCI7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIFNpZGViYXIgY29udGFpbmVyXG4ubWQtc2lkZWJhciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IHB4MnJlbSgyNDJweCk7XG4gIHBhZGRpbmc6IHB4MnJlbSgyNHB4KSAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gIC8vIEhpZGUgZm9yIHByaW50XG4gIEBtZWRpYSBwcmludCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuXG4gIC8vIExvY2sgc2lkZWJhciB0byBjb250YWluZXIgaGVpZ2h0IChhY2NvdW50IGZvciBmaXhlZCBoZWFkZXIpXG4gICZbZGF0YS1tZC1zdGF0ZT1cImxvY2tcIl0ge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICB0b3A6IHB4MnJlbSg0OHB4KTtcbiAgfVxuXG4gIC8vIFt0YWJsZXQgLV06IENvbnZlcnQgbmF2aWdhdGlvbiB0byBkcmF3ZXJcbiAgQGluY2x1ZGUgYnJlYWstdG8tZGV2aWNlKHRhYmxldCkge1xuXG4gICAgLy8gUmVuZGVyIHByaW1hcnkgc2lkZWJhciBhcyBhIHNsaWRlb3V0IGNvbnRhaW5lclxuICAgICYtLXByaW1hcnkge1xuICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgdG9wOiAwO1xuICAgICAgbGVmdDogcHgycmVtKC0yNDJweCk7XG4gICAgICB3aWR0aDogcHgycmVtKDI0MnB4KTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcbiAgICAgIHRyYW5zaXRpb246XG4gICAgICAgIHRyYW5zZm9ybSAgMjUwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSxcbiAgICAgICAgYm94LXNoYWRvdyAyNTBtcztcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3IpO1xuICAgICAgei1pbmRleDogMztcblxuICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgcmlnaHQ6IHB4MnJlbSgtMjQycHgpO1xuICAgICAgICBsZWZ0OiBpbml0aWFsO1xuICAgICAgfVxuXG4gICAgICAvLyBFeHBhbmRlZCBkcmF3ZXJcbiAgICAgICN7JG1kLXRvZ2dsZV9fZHJhd2VyLS1jaGVja2VkfSAmIHtcbiAgICAgICAgQGluY2x1ZGUgei1kZXB0aCg4KTtcblxuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgocHgycmVtKDI0MnB4KSk7XG5cbiAgICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWChweDJyZW0oLTI0MnB4KSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSGlkZSBvdmVyZmxvdyBmb3IgbmVzdGVkIG5hdmlnYXRpb25cbiAgICAgIC5tZC1zaWRlYmFyX19zY3JvbGx3cmFwIHtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTZWNvbmRhcnkgc2lkZWJhciB3aXRoIHRhYmxlIG9mIGNvbnRlbnRzXG4gICYtLXNlY29uZGFyeSB7XG4gICAgZGlzcGxheTogbm9uZTtcblxuICAgIC8vIFt0YWJsZXQgbGFuZHNjYXBlICtdOiBTaG93IHRhYmxlIG9mIGNvbnRlbnRzIG5leHQgdG8gYm9keSBjb3B5XG4gICAgQGluY2x1ZGUgYnJlYWstZnJvbS1kZXZpY2UodGFibGV0IGxhbmRzY2FwZSkge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBtYXJnaW4tbGVmdDogY2FsYygxMDAlIC0gI3tweDJyZW0oMjQycHgpfSk7XG5cbiAgICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICAgIG1hcmdpbi1yaWdodDogY2FsYygxMDAlIC0gI3tweDJyZW0oMjQycHgpfSk7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiBpbml0aWFsO1xuICAgICAgfVxuXG4gICAgICAvLyBFbnN1cmUgc21vb3RoIHNjcm9sbGluZyBvbiBpT1NcbiAgICAgIC5tZC1zaWRlYmFyX19zY3JvbGx3cmFwIHtcbiAgICAgICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFtzY3JlZW4gK106IExpbWl0IHRvIGdyaWRcbiAgICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZShzY3JlZW4pIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiBweDJyZW0oKDEyMjAgLSAyNDIpICogMXB4KTtcblxuICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiBweDJyZW0oKDEyMjAgLSAyNDIpICogMXB4KTtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IGluaXRpYWw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gV3JhcHBlciBmb3Igc2Nyb2xsaW5nIG9uIG92ZXJmbG93XG4gICZfX3Njcm9sbHdyYXAge1xuICAgIG1heC1oZWlnaHQ6IDEwMCU7XG4gICAgbWFyZ2luOiAwIHB4MnJlbSg0cHgpO1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgLy8gSGFjazogcmVkdWNlIGppdHRlclxuICAgIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICBzY3JvbGwtc25hcC10eXBlOiB5IG1hbmRhdG9yeTtcblxuICAgIC8vIFt0YWJsZXQgLV06IEFkanVzdCBtYXJnaW5zXG4gICAgQGluY2x1ZGUgYnJlYWstdG8tZGV2aWNlKHRhYmxldCkge1xuXG4gICAgICAvLyBTdHJldGNoIHNjcm9sbHdyYXAgZm9yIHByaW1hcnkgc2lkZWJhclxuICAgICAgLm1kLXNpZGViYXItLXByaW1hcnkgJiB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIHNjcm9sbC1zbmFwLXR5cGU6IG5vbmU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gT3ZlcnJpZGUgbmF0aXZlIHNjcm9sbGJhciBzdHlsZXNcbiAgICAmOjotd2Via2l0LXNjcm9sbGJhciB7XG4gICAgICB3aWR0aDogcHgycmVtKDRweCk7XG4gICAgICBoZWlnaHQ6IHB4MnJlbSg0cHgpO1xuICAgIH1cblxuICAgIC8vIFNjcm9sbGJhciB0aHVtYlxuICAgICY6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpO1xuXG4gICAgICAvLyBIb3ZlcmVkIHNjcm9sbGJhciB0aHVtYlxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWFjY2VudC1mZy1jb2xvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvLy8vXG4vLy8gQ29weXJpZ2h0IChjKSAyMDE2LTIwMjAgTWFydGluIERvbmF0aCA8bWFydGluLmRvbmF0aEBzcXVpZGZ1bmsuY29tPlxuLy8vXG4vLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksXG4vLy8gdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8vIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLFxuLy8vIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZVxuLy8vIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vLy9cbi8vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy8vXG4vLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTFxuLy8vIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbi8vLyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSXG4vLy8gREVBTElOR1Ncbi8vLy9cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gS2V5ZnJhbWVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIFNob3cgc291cmNlIGZhY3RzXG5Aa2V5ZnJhbWVzIG1kLXNvdXJjZV9fZmFjdHMtLWRvbmUge1xuICAwJSB7XG4gICAgaGVpZ2h0OiAwO1xuICB9XG5cbiAgMTAwJSB7XG4gICAgaGVpZ2h0OiBweDJyZW0oMTNweCk7XG4gIH1cbn1cblxuLy8gU2hvdyBzb3VyY2UgZmFjdFxuQGtleWZyYW1lcyBtZC1zb3VyY2VfX2ZhY3QtLWRvbmUge1xuICAwJSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpO1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cblxuICA1MCUge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cblxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCUpO1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gU291cmNlIGNvbnRhaW5lclxuLm1kLXNvdXJjZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDI1MG1zO1xuICBmb250LXNpemU6IHB4MnJlbSgxM3B4KTtcbiAgbGluZS1oZWlnaHQ6IDEuMjU7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIC8vIEhhY2s6IHJlZHVjZSBqaXR0ZXJcbiAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xuXG4gIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiBpbml0aWFsO1xuICAgIHBhZGRpbmctbGVmdDogcHgycmVtKDEycHgpO1xuICB9XG5cbiAgLy8gSG92ZXJlZCBzb3VyY2UgY29udGFpbmVyXG4gICY6aG92ZXIge1xuICAgIG9wYWNpdHk6IDAuNztcbiAgfVxuXG4gIC8vIFJlcG9zaXRvcnkgcGxhdGZvcm0gaWNvblxuICAmX19pY29uIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgd2lkdGg6IHB4MnJlbSg0OHB4KTtcbiAgICBoZWlnaHQ6IHB4MnJlbSg0OHB4KTtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXG4gICAgLy8gQWxpZ24gd2l0aCBtYXJnaW4gb25seSAoYXMgb3Bwb3NlZCB0byBub3JtYWwgYnV0dG9uIGFsaWdubWVudClcbiAgICBzdmcge1xuICAgICAgbWFyZ2luLXRvcDogcHgycmVtKDEycHgpO1xuICAgICAgbWFyZ2luLWxlZnQ6IHB4MnJlbSgxMnB4KTtcblxuICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiBweDJyZW0oMTJweCk7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiBpbml0aWFsO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENvcnJlY3QgYWxpZ25tZW50LCBpZiBpY29uIGlzIHByZXNlbnRcbiAgICArIC5tZC1zb3VyY2VfX3JlcG9zaXRvcnkge1xuICAgICAgbWFyZ2luLWxlZnQ6IHB4MnJlbSgtNDBweCk7XG4gICAgICBwYWRkaW5nLWxlZnQ6IHB4MnJlbSg0MHB4KTtcblxuICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiBweDJyZW0oLTQwcHgpO1xuICAgICAgICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbiAgICAgICAgcGFkZGluZy1yaWdodDogcHgycmVtKDQwcHgpO1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IGluaXRpYWw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gUmVwb3NpdG9yeSBuYW1lXG4gICZfX3JlcG9zaXRvcnkge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBtYXgtd2lkdGg6IGNhbGMoMTAwJSAtICN7cHgycmVtKDI0cHgpfSk7XG4gICAgbWFyZ2luLWxlZnQ6IHB4MnJlbSgxMnB4KTtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuXG4gIC8vIFNvdXJjZSBmYWN0cyAoc3RhdGlzdGljcyBldGMuKVxuICAmX19mYWN0cyB7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgZm9udC1zaXplOiBweDJyZW0oMTFweCk7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gICAgb3BhY2l0eTogMC43NTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICAgLy8gU2hvdyBhZnRlciB0aGUgZGF0YSB3YXMgbG9hZGVkXG4gICAgW2RhdGEtbWQtc3RhdGU9XCJkb25lXCJdICYge1xuICAgICAgYW5pbWF0aW9uOiBtZC1zb3VyY2VfX2ZhY3RzLS1kb25lIDI1MG1zIGVhc2UtaW47XG4gICAgfVxuICB9XG5cbiAgLy8gRmFjdFxuICAmX19mYWN0IHtcbiAgICBmbG9hdDogbGVmdDtcblxuICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgIH1cblxuICAgIC8vIFNob3cgYWZ0ZXIgdGhlIGRhdGEgd2FzIGxvYWRlZFxuICAgIFtkYXRhLW1kLXN0YXRlPVwiZG9uZVwiXSAmIHtcbiAgICAgIGFuaW1hdGlvbjogbWQtc291cmNlX19mYWN0LS1kb25lIDQwMG1zIGVhc2Utb3V0O1xuICAgIH1cblxuICAgIC8vIE1pZGRsZSBkb3QgYmVmb3JlIGZhY3RcbiAgICAmOjpiZWZvcmUge1xuICAgICAgbWFyZ2luOiAwIHB4MnJlbSgycHgpO1xuICAgICAgY29udGVudDogXCJcXDAwQjdcIjtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgbWlkZGxlIGRvdCBvbiBmaXJzdCBmYWN0XG4gICAgJjpmaXJzdC1jaGlsZDo6YmVmb3JlIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICB9XG59XG4iLCIvLy8vXG4vLy8gQ29weXJpZ2h0IChjKSAyMDE2LTIwMjAgTWFydGluIERvbmF0aCA8bWFydGluLmRvbmF0aEBzcXVpZGZ1bmsuY29tPlxuLy8vXG4vLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksXG4vLy8gdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8vIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLFxuLy8vIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZVxuLy8vIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vLy9cbi8vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy8vXG4vLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTFxuLy8vIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbi8vLyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSXG4vLy8gREVBTElOR1Ncbi8vLy9cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gVGFicyB3aXRoIG91dGxpbmVcbi5tZC10YWJzIHtcbiAgd2lkdGg6IDEwMCU7XG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQgMjUwbXM7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLXByaW1hcnktZmctY29sb3IpO1xuICBjb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1iZy1jb2xvcik7XG4gIG92ZXJmbG93OiBhdXRvO1xuXG4gIC8vIE9taXQgdHJhbnNpdGlvbnMsIGluIGNhc2UgSmF2YVNjcmlwdCBpcyBub3QgYXZhaWxhYmxlXG4gIC5uby1qcyAmIHtcbiAgICB0cmFuc2l0aW9uOiBub25lO1xuICB9XG5cbiAgLy8gW3RhYmxldCAtXTogSGlkZSB0YWJzIGZvciB0YWJsZXQgYW5kIGJlbG93LCBhcyB0aGV5IGRvbid0IG1ha2UgYW55IHNlbnNlXG4gIEBpbmNsdWRlIGJyZWFrLXRvLWRldmljZSh0YWJsZXQpIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgLy8gSGlkZSBmb3IgcHJpbnRcbiAgQG1lZGlhIHByaW50IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgLy8gTGlzdCBvZiBpdGVtc1xuICAmX19saXN0IHtcbiAgICBtYXJnaW46IDA7XG4gICAgbWFyZ2luLWxlZnQ6IHB4MnJlbSg0cHgpO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IHB4MnJlbSg0cHgpO1xuICAgICAgbWFyZ2luLWxlZnQ6IGluaXRpYWw7XG4gICAgfVxuICB9XG5cbiAgLy8gTGlzdCBpdGVtXG4gICZfX2l0ZW0ge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBoZWlnaHQ6IHB4MnJlbSg0OHB4KTtcbiAgICBwYWRkaW5nLXJpZ2h0OiBweDJyZW0oMTJweCk7XG4gICAgcGFkZGluZy1sZWZ0OiBweDJyZW0oMTJweCk7XG4gIH1cblxuICAvLyBMaW5rIGluc2lkZSBpdGVtIC0gY291bGQgYmUgZGVmaW5lZCBhcyBibG9jayBlbGVtZW50cyBhbmQgYWxpZ25lZCB2aWFcbiAgLy8gbGluZSBoZWlnaHQsIGJ1dCB0aGlzIHdvdWxkIGltcGx5IG1vcmUgcmVwYWludHMgd2hlbiBzY3JvbGxpbmdcbiAgJl9fbGluayB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luLXRvcDogcHgycmVtKDE2cHgpO1xuICAgIHRyYW5zaXRpb246XG4gICAgICB0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMSwgMC43LCAwLjEsIDEpLFxuICAgICAgb3BhY2l0eSAgIDI1MG1zO1xuICAgIGZvbnQtc2l6ZTogcHgycmVtKDE0cHgpO1xuICAgIG9wYWNpdHk6IDAuNztcblxuICAgIC8vIE9taXQgdHJhbnNpdGlvbnMsIGluIGNhc2UgSmF2YVNjcmlwdCBpcyBub3QgYXZhaWxhYmxlXG4gICAgLm5vLWpzICYge1xuICAgICAgdHJhbnNpdGlvbjogbm9uZTtcbiAgICB9XG5cbiAgICAvLyBBY3RpdmUgb3IgaG92ZXJlZCBsaW5rXG4gICAgJi0tYWN0aXZlLFxuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6IGluaGVyaXQ7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgIH1cblxuICAgIC8vIERlbGF5IHRyYW5zaXRpb25zIGJ5IGEgc21hbGwgYW1vdW50XG4gICAgQGZvciAkaSBmcm9tIDIgdGhyb3VnaCAxNiB7XG4gICAgICAubWQtdGFic19faXRlbTpudGgtY2hpbGQoI3skaX0pICYge1xuICAgICAgICB0cmFuc2l0aW9uLWRlbGF5OiAyMG1zICogKCRpIC0gMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gRmFkZS1vdXQgdGFicyBiYWNrZ3JvdW5kIHVwb24gc2Nyb2xsaW5nXG4gICZbZGF0YS1tZC1zdGF0ZT1cImhpZGRlblwiXSB7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG5cbiAgICAvLyBIaWRlIHRhYnMgdXBvbiBzY3JvbGxpbmcgLSBkaXNhYmxlIHRyYW5zaXRpb24gdG8gbWluaW1pemVzIHJlcGFpbnRzXG4gICAgLy8gd2hpbGUgc2Nyb2xsaW5nIGRvd24sIHdoaWxlIHNjcm9sbGluZyB1cCBzZWVtcyB0byBiZSBva2F5XG4gICAgLm1kLXRhYnNfX2xpbmsge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDUwJSk7XG4gICAgICB0cmFuc2l0aW9uOlxuICAgICAgICBjb2xvciAgICAgMjUwbXMsXG4gICAgICAgIHRyYW5zZm9ybSAgIDBtcyA0MDBtcyxcbiAgICAgICAgb3BhY2l0eSAgIDEwMG1zO1xuICAgICAgb3BhY2l0eTogMDtcbiAgICB9XG4gIH1cblxuICAvLyBbc2NyZWVuICtdOiBBZGp1c3QgbWFpbiBuYXZpZ2F0aW9uIHN0eWxlc1xuICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZShzY3JlZW4pIHtcblxuICAgIC8vIEhpZGUgMXN0IGxldmVsIG5lc3RlZCBpdGVtcywgYXMgdGhleSBhcmUgbGlzdGVkIGluIHRoZSB0YWJzXG4gICAgfiAubWQtbWFpbiAubWQtbmF2LS1wcmltYXJ5ID4gLm1kLW5hdl9fbGlzdCA+IC5tZC1uYXZfX2l0ZW0tLW5lc3RlZCB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cblxuICAgIC8vIEFjdGl2ZSB0YWJcbiAgICAmLS1hY3RpdmUgfiAubWQtbWFpbiB7XG5cbiAgICAgIC8vIEFkanVzdCAxc3QgbGV2ZWwgc3R5bGVzXG4gICAgICAubWQtbmF2LS1wcmltYXJ5IHtcblxuICAgICAgICAvLyBTaG93IHRpdGxlIGFuZCByZW1vdmUgc3BhY2luZ1xuICAgICAgICAubWQtbmF2X190aXRsZSB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgcGFkZGluZzogMCBweDJyZW0oMTJweCk7XG4gICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgICAgc2Nyb2xsLXNuYXAtYWxpZ246IHN0YXJ0O1xuXG4gICAgICAgICAgLy8gSGlkZSBzaXRlIHRpdGxlXG4gICAgICAgICAgJltmb3I9XCJfX2RyYXdlclwiXSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhpZGUgMXN0IGxldmVsIGl0ZW1zXG4gICAgICAgID4gLm1kLW5hdl9fbGlzdCA+IC5tZC1uYXZfX2l0ZW0ge1xuICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG5cbiAgICAgICAgICAvLyBTaG93IDFzdCBsZXZlbCBhY3RpdmUgbmVzdGVkIGl0ZW1zXG4gICAgICAgICAgJi0tYWN0aXZlIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgcGFkZGluZzogMDtcblxuICAgICAgICAgICAgLy8gSGlkZSBuZXN0ZWQgbGlua3NcbiAgICAgICAgICAgID4gLm1kLW5hdl9fbGluayB7XG4gICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEFsd2F5cyBleHBhbmQgbmVzdGVkIG5hdmlnYXRpb24gb24gMm5kIGxldmVsXG4gICAgICAubWQtbmF2W2RhdGEtbWQtbGV2ZWw9XCIxXCJdIHtcblxuICAgICAgICAvLyBSZW1vdmUgc3BhY2luZyBvbiAybmQgbGV2ZWwgaXRlbXNcbiAgICAgICAgPiAubWQtbmF2X19saXN0ID4gLm1kLW5hdl9faXRlbSB7XG4gICAgICAgICAgcGFkZGluZzogMCBweDJyZW0oMTJweCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBIaWRlIHRpdGxlcyBmcm9tIDJuZCBsZXZlbCBvblxuICAgICAgICAubWQtbmF2IC5tZC1uYXZfX3RpdGxlIHtcbiAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvLy8vXG4vLy8gQ29weXJpZ2h0IChjKSAyMDE2LTIwMjAgTWFydGluIERvbmF0aCA8bWFydGluLmRvbmF0aEBzcXVpZGZ1bmsuY29tPlxuLy8vXG4vLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksXG4vLy8gdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8vIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLFxuLy8vIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZVxuLy8vIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vLy9cbi8vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy8vXG4vLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTFxuLy8vIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbi8vLyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSXG4vLy8gREVBTElOR1Ncbi8vLy9cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gU2NvcGVkIGluIHR5cGVzZXR0ZWQgY29udGVudCB0byBtYXRjaCBzcGVjaWZpY2l0eSBvZiByZWd1bGFyIGNvbnRlbnRcbi5tZC10eXBlc2V0IHtcblxuICAvLyBBZG1vbml0aW9uXG4gIC5hZG1vbml0aW9uIHtcbiAgICBtYXJnaW46IDEuNTYyNWVtIDA7XG4gICAgcGFkZGluZzogMCBweDJyZW0oMTJweCk7XG4gICAgYm9yZGVyLWxlZnQ6IHB4MnJlbSg0cHgpIHNvbGlkICRjbHItYmx1ZS1hMjAwO1xuICAgIGJvcmRlci1yYWRpdXM6IHB4MnJlbSgycHgpO1xuICAgIGZvbnQtc2l6ZTogbXMoLTEpO1xuICAgIGJveC1zaGFkb3c6XG4gICAgICAwIHB4MnJlbSg0cHgpIHB4MnJlbSgxMHB4KSBoc2xhKDAsIDAlLCAwJSwgMC4wNSksXG4gICAgICAwIDAgICAgICAgICAgIHB4MnJlbSgxcHgpICBoc2xhKDAsIDAlLCAwJSwgMC4xKTtcbiAgICBvdmVyZmxvdzogYXV0bztcblxuICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgYm9yZGVyLXJpZ2h0OiBweDJyZW0oNHB4KSBzb2xpZCAkY2xyLWJsdWUtYTIwMDtcbiAgICAgIGJvcmRlci1sZWZ0OiBub25lO1xuICAgIH1cblxuICAgIC8vIEFkanVzdCBzcGFjaW5nIG9uIGxhc3QgZWxlbWVudFxuICAgIGh0bWwgJiA+IDpsYXN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IHB4MnJlbSgxMnB4KTtcbiAgICB9XG5cbiAgICAvLyBBZGp1c3QgbWFyZ2luIGZvciBuZXN0ZWQgYWRtb25pdGlvbiBibG9ja3NcbiAgICAuYWRtb25pdGlvbiB7XG4gICAgICBtYXJnaW46IDFlbSAwO1xuICAgIH1cblxuICAgIC8vIEJ1aWxkIHJlcHJlc2VudGF0aW9uYWwgY2xhc3Nlc1xuICAgIEBlYWNoICRuYW1lcywgJGFwcGVhcmFuY2UgaW4gKFxuICAgICAgYWJzdHJhY3Qgc3VtbWFyeSB0bGRyOiAkY2xyLWxpZ2h0LWJsdWUtYTQwMCBcInRleHQtc3ViamVjdFwiLFxuICAgICAgaW5mbyB0b2RvOiAkY2xyLWN5YW4tYTcwMCBcImluZm9ybWF0aW9uXCIsXG4gICAgICB0aXAgaGludCBpbXBvcnRhbnQ6ICRjbHItdGVhbC1hNzAwIFwiZmlyZVwiLFxuICAgICAgc3VjY2VzcyBjaGVjayBkb25lOiAkY2xyLWdyZWVuLWE3MDAgXCJjaGVjay1jaXJjbGVcIixcbiAgICAgIHF1ZXN0aW9uIGhlbHAgZmFxOiAkY2xyLWxpZ2h0LWdyZWVuLWE3MDAgXCJoZWxwLWNpcmNsZVwiLFxuICAgICAgd2FybmluZyBjYXV0aW9uIGF0dGVudGlvbjogJGNsci1vcmFuZ2UtYTQwMCBcImFsZXJ0XCIsXG4gICAgICBmYWlsdXJlIGZhaWwgbWlzc2luZzogJGNsci1yZWQtYTIwMCBcImNsb3NlLWNpcmNsZVwiLFxuICAgICAgZGFuZ2VyIGVycm9yOiAkY2xyLXJlZC1hNDAwIFwiZmxhc2gtY2lyY2xlXCIsXG4gICAgICBidWc6ICRjbHItcGluay1hNDAwIFwiYnVnXCIsXG4gICAgICBleGFtcGxlOiAkY2xyLWRlZXAtcHVycGxlLWE0MDAgXCJmb3JtYXQtbGlzdC1udW1iZXJlZFwiLFxuICAgICAgcXVvdGUgY2l0ZTogJGNsci1ncmV5IFwiZm9ybWF0LXF1b3RlLWNsb3NlXCJcbiAgICApIHtcbiAgICAgICR0aW50OiBudGgoJGFwcGVhcmFuY2UsIDEpO1xuICAgICAgJGljb246IG50aCgkYXBwZWFyYW5jZSwgMik7XG5cbiAgICAgIC8vIERlZmluZSBiYXNlIGNsYXNzXG4gICAgICAmJSN7bnRoKCRuYW1lcywgMSl9LFxuICAgICAgJi4je250aCgkbmFtZXMsIDEpfSB7XG4gICAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiAkdGludDtcblxuICAgICAgICAvLyBUaXRsZVxuICAgICAgICA+IDpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnRpemUoJHRpbnQsIDAuOSk7XG5cbiAgICAgICAgICAvLyBJY29uXG4gICAgICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0aW50O1xuICAgICAgICAgICAgbWFzay1pbWFnZTogdXJsKFwie3sgI3skaWNvbn0gfX1cIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIERlZmluZSBzeW5vbnltcyBmb3IgYmFzZSBjbGFzc1xuICAgICAgQGlmIGxlbmd0aCgkbmFtZXMpID4gMSB7XG4gICAgICAgIEBmb3IgJG4gZnJvbSAyIHRocm91Z2ggbGVuZ3RoKCRuYW1lcykge1xuICAgICAgICAgICYuI3tudGgoJG5hbWVzLCAkbil9IHtcbiAgICAgICAgICAgIEBleHRlbmQgJSN7bnRoKCRuYW1lcywgMSl9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEFkbW9uaXRpb24gdGl0bGVcbiAgLmFkbW9uaXRpb24tdGl0bGUge1xuICAgIG1hcmdpbjogMCBweDJyZW0oLTEycHgpO1xuICAgIHBhZGRpbmc6IHB4MnJlbSg4cHgpIHB4MnJlbSgxMnB4KSBweDJyZW0oOHB4KSBweDJyZW0oNDBweCk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnRpemUoJGNsci1ibHVlLWEyMDAsIDAuOSk7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcblxuICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgcGFkZGluZzogcHgycmVtKDhweCkgcHgycmVtKDQwcHgpIHB4MnJlbSg4cHgpIHB4MnJlbSgxMnB4KTtcbiAgICB9XG5cbiAgICAvLyBSZXNldCBzcGFjaW5nLCBpZiB0aXRsZSBpcyB0aGUgb25seSBlbGVtZW50XG4gICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgfVxuXG4gICAgLy8gSWNvblxuICAgICY6OmJlZm9yZSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB3aWR0aDogcHgycmVtKDIwcHgpO1xuICAgICAgaGVpZ2h0OiBweDJyZW0oMjBweCk7XG4gICAgICBtYXJnaW4tbGVmdDogcHgycmVtKC0yOHB4KTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjbHItYmx1ZS1hMjAwO1xuICAgICAgbWFzay1pbWFnZTogdXJsKFwie3sgcGVuY2lsIH19XCIpO1xuICAgICAgY29udGVudDogXCJcIjtcblxuICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiBweDJyZW0oLTI4cHgpO1xuICAgICAgICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vLy9cbi8vLyBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMCBNYXJ0aW4gRG9uYXRoIDxtYXJ0aW4uZG9uYXRoQHNxdWlkZnVuay5jb20+XG4vLy9cbi8vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSxcbi8vLyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLy8gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsXG4vLy8gYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlXG4vLy8gU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vL1xuLy8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vLy9cbi8vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMXG4vLy8gVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lOR1xuLy8vIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVJcbi8vLyBERUFMSU5HU1xuLy8vL1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBWYXJpYWJsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gT3BlcmF0b3JzXG4kY29kZWhpbGl0ZS1vcGVyYXRvcjogaW5oZXJpdDtcbiRjb2RlaGlsaXRlLW9wZXJhdG9yLXdvcmQ6IGluaGVyaXQ7XG5cbi8vIEdlbmVyaWNzXG4kY29kZWhpbGl0ZS1nZW5lcmljLWVtcGg6ICMwMDAwMDA7XG4kY29kZWhpbGl0ZS1nZW5lcmljLWVycm9yOiAjQUEwMDAwO1xuJGNvZGVoaWxpdGUtZ2VuZXJpYy1oZWFkaW5nOiAjOTk5OTk5O1xuJGNvZGVoaWxpdGUtZ2VuZXJpYy1vdXRwdXQ6ICM4ODg4ODg7XG4kY29kZWhpbGl0ZS1nZW5lcmljLXByb21wdDogIzU1NTU1NTtcbiRjb2RlaGlsaXRlLWdlbmVyaWMtc3Ryb25nOiBpbmhlcml0O1xuJGNvZGVoaWxpdGUtZ2VuZXJpYy1zdWJoZWFkaW5nOiAjQUFBQUFBO1xuJGNvZGVoaWxpdGUtZ2VuZXJpYy10cmFjZWJhY2s6ICNBQTAwMDA7XG5cbi8vIERpZmZzXG4kY29kZWhpbGl0ZS1kaWZmLWRlbGV0ZWQ6ICNGRkREREQ7XG4kY29kZWhpbGl0ZS1kaWZmLWluc2VydGVkOiAjRERGRkREO1xuXG4vLyBLZXl3b3Jkc1xuJGNvZGVoaWxpdGUta2V5d29yZDogIzNCNzhFNztcbiRjb2RlaGlsaXRlLWtleXdvcmQtY29uc3RhbnQ6ICNBNzFENUQ7XG4kY29kZWhpbGl0ZS1rZXl3b3JkLWRlY2xhcmF0aW9uOiAjM0I3OEU3O1xuJGNvZGVoaWxpdGUta2V5d29yZC1uYW1lc3BhY2U6ICMzQjc4RTc7XG4kY29kZWhpbGl0ZS1rZXl3b3JkLXBzZXVkbzogI0E3MUQ1RDtcbiRjb2RlaGlsaXRlLWtleXdvcmQtcmVzZXJ2ZWQ6ICMzRTYxQTI7XG4kY29kZWhpbGl0ZS1rZXl3b3JkLXR5cGU6ICMzRTYxQTI7XG5cbi8vIENvbW1lbnRzXG4kY29kZWhpbGl0ZS1jb21tZW50OiAjOTk5OTk5O1xuJGNvZGVoaWxpdGUtY29tbWVudC1tdWx0aWxpbmU6ICM5OTk5OTk7XG4kY29kZWhpbGl0ZS1jb21tZW50LXByZXByb2M6ICM2NjY2NjY7XG4kY29kZWhpbGl0ZS1jb21tZW50LXNpbmdsZTogIzk5OTk5OTtcbiRjb2RlaGlsaXRlLWNvbW1lbnQtc2hlYmFuZzogIzk5OTk5OTtcbiRjb2RlaGlsaXRlLWNvbW1lbnQtc3BlY2lhbDogIzk5OTk5OTtcblxuLy8gTmFtZXNcbiRjb2RlaGlsaXRlLW5hbWUtYXR0cmlidXRlOiAjQzIxODVCO1xuJGNvZGVoaWxpdGUtbmFtZS1idWlsdGluOiAjQzIxODVCO1xuJGNvZGVoaWxpdGUtbmFtZS1idWlsdGluLXBzZXVkbzogIzNFNjFBMjtcbiRjb2RlaGlsaXRlLW5hbWUtY2xhc3M6ICNDMjE4NUI7XG4kY29kZWhpbGl0ZS1uYW1lLWNvbnN0YW50OiAjM0U2MUEyO1xuJGNvZGVoaWxpdGUtbmFtZS1kZWNvcmF0b3I6ICM2NjY2NjY7XG4kY29kZWhpbGl0ZS1uYW1lLWVudGl0eTogIzY2NjY2NjtcbiRjb2RlaGlsaXRlLW5hbWUtZXhjZXB0aW9uOiAjQzIxODVCO1xuJGNvZGVoaWxpdGUtbmFtZS1mdW5jdGlvbjogI0MyMTg1QjtcbiRjb2RlaGlsaXRlLW5hbWUtbGFiZWw6ICMzQjUxNzk7XG4kY29kZWhpbGl0ZS1uYW1lLW5hbWVzcGFjZTogI0VDNDA3QTtcbiRjb2RlaGlsaXRlLW5hbWUtdGFnOiAjM0I3OEU3O1xuJGNvZGVoaWxpdGUtbmFtZS12YXJpYWJsZTogIzNFNjFBMjtcbiRjb2RlaGlsaXRlLW5hbWUtdmFyaWFibGUtY2xhc3M6ICMzRTYxQTI7XG4kY29kZWhpbGl0ZS1uYW1lLXZhcmlhYmxlLWluc3RhbmNlOiAjM0U2MUEyO1xuJGNvZGVoaWxpdGUtbmFtZS12YXJpYWJsZS1nbG9iYWw6ICMzRTYxQTI7XG4kY29kZWhpbGl0ZS1uYW1lLWV4dGVuc2lvbjogI0VDNDA3QTtcblxuLy8gTnVtYmVyc1xuJGNvZGVoaWxpdGUtbGl0ZXJhbC1udW1iZXI6ICNFNzRDM0M7XG4kY29kZWhpbGl0ZS1saXRlcmFsLW51bWJlci1mbG9hdDogI0U3NEMzQztcbiRjb2RlaGlsaXRlLWxpdGVyYWwtbnVtYmVyLWhleDogI0U3NEMzQztcbiRjb2RlaGlsaXRlLWxpdGVyYWwtbnVtYmVyLWludGVnZXI6ICNFNzRDM0M7XG4kY29kZWhpbGl0ZS1saXRlcmFsLW51bWJlci1pbnRlZ2VyLWxvbmc6ICNFNzRDM0M7XG4kY29kZWhpbGl0ZS1saXRlcmFsLW51bWJlci1vY3Q6ICNFNzRDM0M7XG5cbi8vIFN0cmluZ3NcbiRjb2RlaGlsaXRlLWxpdGVyYWwtc3RyaW5nOiAjMEQ5MDRGO1xuJGNvZGVoaWxpdGUtbGl0ZXJhbC1zdHJpbmctYmFja3RpY2tzOiAjMEQ5MDRGO1xuJGNvZGVoaWxpdGUtbGl0ZXJhbC1zdHJpbmctY2hhcjogIzBEOTA0RjtcbiRjb2RlaGlsaXRlLWxpdGVyYWwtc3RyaW5nLWRvYzogIzk5OTk5OTtcbiRjb2RlaGlsaXRlLWxpdGVyYWwtc3RyaW5nLWRvdWJsZTogIzBEOTA0RjtcbiRjb2RlaGlsaXRlLWxpdGVyYWwtc3RyaW5nLWVzY2FwZTogIzE4MzY5MTtcbiRjb2RlaGlsaXRlLWxpdGVyYWwtc3RyaW5nLWhlcmVkb2M6ICMxODM2OTE7XG4kY29kZWhpbGl0ZS1saXRlcmFsLXN0cmluZy1pbnRlcnBvbDogIzE4MzY5MTtcbiRjb2RlaGlsaXRlLWxpdGVyYWwtc3RyaW5nLW90aGVyOiAjMTgzNjkxO1xuJGNvZGVoaWxpdGUtbGl0ZXJhbC1zdHJpbmctcmVnZXg6ICMwMDk5MjY7XG4kY29kZWhpbGl0ZS1saXRlcmFsLXN0cmluZy1zaW5nbGU6ICMwRDkwNEY7XG4kY29kZWhpbGl0ZS1saXRlcmFsLXN0cmluZy1zeW1ib2w6ICMwRDkwNEY7XG5cbi8vIE1pc2NlbGxhbmVvdXNcbiRjb2RlaGlsaXRlLWVycm9yOiAjQTYxNzE3O1xuJGNvZGVoaWxpdGUtd2hpdGVzcGFjZTogdHJhbnNwYXJlbnQ7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGVzOiBzeW50YXggaGlnaGxpZ2h0aW5nXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIENvZGVoaWxpdGUgZXh0ZW5zaW9uXG4uY29kZWhpbGl0ZSB7XG5cbiAgLy8gT3BlcmF0b3JzXG4gIC5vICB7IGNvbG9yOiAkY29kZWhpbGl0ZS1vcGVyYXRvcjsgfVxuICAub3cgeyBjb2xvcjogJGNvZGVoaWxpdGUtb3BlcmF0b3Itd29yZDsgfVxuXG4gIC8vIEdlbmVyaWNzXG4gIC5nZSB7IGNvbG9yOiAkY29kZWhpbGl0ZS1nZW5lcmljLWVtcGg7IH1cbiAgLmdyIHsgY29sb3I6ICRjb2RlaGlsaXRlLWdlbmVyaWMtZXJyb3I7IH1cbiAgLmdoIHsgY29sb3I6ICRjb2RlaGlsaXRlLWdlbmVyaWMtaGVhZGluZzsgfVxuICAuZ28geyBjb2xvcjogJGNvZGVoaWxpdGUtZ2VuZXJpYy1vdXRwdXQ7IH1cbiAgLmdwIHsgY29sb3I6ICRjb2RlaGlsaXRlLWdlbmVyaWMtcHJvbXB0OyB9XG4gIC5ncyB7IGNvbG9yOiAkY29kZWhpbGl0ZS1nZW5lcmljLXN0cm9uZzsgfVxuICAuZ3UgeyBjb2xvcjogJGNvZGVoaWxpdGUtZ2VuZXJpYy1zdWJoZWFkaW5nOyB9XG4gIC5ndCB7IGNvbG9yOiAkY29kZWhpbGl0ZS1nZW5lcmljLXRyYWNlYmFjazsgfVxuXG4gIC8vIERpZmZzXG4gIC5nZCB7IGJhY2tncm91bmQtY29sb3I6ICRjb2RlaGlsaXRlLWRpZmYtZGVsZXRlZDsgfVxuICAuZ2kgeyBiYWNrZ3JvdW5kLWNvbG9yOiAkY29kZWhpbGl0ZS1kaWZmLWluc2VydGVkOyB9XG5cbiAgLy8gS2V5d29yZHNcbiAgLmsgIHsgY29sb3I6ICRjb2RlaGlsaXRlLWtleXdvcmQ7IH1cbiAgLmtjIHsgY29sb3I6ICRjb2RlaGlsaXRlLWtleXdvcmQtY29uc3RhbnQ7IH1cbiAgLmtkIHsgY29sb3I6ICRjb2RlaGlsaXRlLWtleXdvcmQtZGVjbGFyYXRpb247IH1cbiAgLmtuIHsgY29sb3I6ICRjb2RlaGlsaXRlLWtleXdvcmQtbmFtZXNwYWNlOyB9XG4gIC5rcCB7IGNvbG9yOiAkY29kZWhpbGl0ZS1rZXl3b3JkLXBzZXVkbzsgfVxuICAua3IgeyBjb2xvcjogJGNvZGVoaWxpdGUta2V5d29yZC1yZXNlcnZlZDsgfVxuICAua3QgeyBjb2xvcjogJGNvZGVoaWxpdGUta2V5d29yZC10eXBlOyB9XG5cbiAgLy8gQ29tbWVudHNcbiAgLmMgIHsgY29sb3I6ICRjb2RlaGlsaXRlLWNvbW1lbnQ7IH1cbiAgLmNtIHsgY29sb3I6ICRjb2RlaGlsaXRlLWNvbW1lbnQtbXVsdGlsaW5lOyB9XG4gIC5jcCB7IGNvbG9yOiAkY29kZWhpbGl0ZS1jb21tZW50LXByZXByb2M7IH1cbiAgLmMxIHsgY29sb3I6ICRjb2RlaGlsaXRlLWNvbW1lbnQtc2luZ2xlOyB9XG4gIC5jaCB7IGNvbG9yOiAkY29kZWhpbGl0ZS1jb21tZW50LXNoZWJhbmc7IH1cbiAgLmNzIHsgY29sb3I6ICRjb2RlaGlsaXRlLWNvbW1lbnQtc3BlY2lhbDsgfVxuXG4gIC8vIE5hbWVzXG4gIC5uYSB7IGNvbG9yOiAkY29kZWhpbGl0ZS1uYW1lLWF0dHJpYnV0ZTsgfVxuICAubmIgeyBjb2xvcjogJGNvZGVoaWxpdGUtbmFtZS1idWlsdGluOyB9XG4gIC5icCB7IGNvbG9yOiAkY29kZWhpbGl0ZS1uYW1lLWJ1aWx0aW4tcHNldWRvOyB9XG4gIC5uYyB7IGNvbG9yOiAkY29kZWhpbGl0ZS1uYW1lLWNsYXNzOyB9XG4gIC5ubyB7IGNvbG9yOiAkY29kZWhpbGl0ZS1uYW1lLWNvbnN0YW50OyB9XG4gIC5uZCB7IGNvbG9yOiAkY29kZWhpbGl0ZS1uYW1lLWVudGl0eTsgfVxuICAubmkgeyBjb2xvcjogJGNvZGVoaWxpdGUtbmFtZS1lbnRpdHk7IH1cbiAgLm5lIHsgY29sb3I6ICRjb2RlaGlsaXRlLW5hbWUtZXhjZXB0aW9uOyB9XG4gIC5uZiB7IGNvbG9yOiAkY29kZWhpbGl0ZS1uYW1lLWZ1bmN0aW9uOyB9XG4gIC5ubCB7IGNvbG9yOiAkY29kZWhpbGl0ZS1uYW1lLWxhYmVsOyB9XG4gIC5ubiB7IGNvbG9yOiAkY29kZWhpbGl0ZS1uYW1lLW5hbWVzcGFjZTsgfVxuICAubnQgeyBjb2xvcjogJGNvZGVoaWxpdGUtbmFtZS10YWc7IH1cbiAgLm52IHsgY29sb3I6ICRjb2RlaGlsaXRlLW5hbWUtdmFyaWFibGU7IH1cbiAgLnZjIHsgY29sb3I6ICRjb2RlaGlsaXRlLW5hbWUtdmFyaWFibGUtY2xhc3M7IH1cbiAgLnZnIHsgY29sb3I6ICRjb2RlaGlsaXRlLW5hbWUtdmFyaWFibGUtZ2xvYmFsOyB9XG4gIC52aSB7IGNvbG9yOiAkY29kZWhpbGl0ZS1uYW1lLXZhcmlhYmxlLWluc3RhbmNlOyB9XG4gIC5ueCB7IGNvbG9yOiAkY29kZWhpbGl0ZS1uYW1lLWV4dGVuc2lvbjsgfVxuXG4gIC8vIE51bWJlcnNcbiAgLm0gIHsgY29sb3I6ICRjb2RlaGlsaXRlLWxpdGVyYWwtbnVtYmVyOyB9XG4gIC5tZiB7IGNvbG9yOiAkY29kZWhpbGl0ZS1saXRlcmFsLW51bWJlci1mbG9hdDsgfVxuICAubWggeyBjb2xvcjogJGNvZGVoaWxpdGUtbGl0ZXJhbC1udW1iZXItaGV4OyB9XG4gIC5taSB7IGNvbG9yOiAkY29kZWhpbGl0ZS1saXRlcmFsLW51bWJlci1pbnRlZ2VyOyB9XG4gIC5pbCB7IGNvbG9yOiAkY29kZWhpbGl0ZS1saXRlcmFsLW51bWJlci1pbnRlZ2VyLWxvbmc7IH1cbiAgLm1vIHsgY29sb3I6ICRjb2RlaGlsaXRlLWxpdGVyYWwtbnVtYmVyLW9jdDsgfVxuXG4gIC8vIFN0cmluZ3NcbiAgLnMgIHsgY29sb3I6ICRjb2RlaGlsaXRlLWxpdGVyYWwtc3RyaW5nOyB9XG4gIC5zYiB7IGNvbG9yOiAkY29kZWhpbGl0ZS1saXRlcmFsLXN0cmluZy1iYWNrdGlja3M7IH1cbiAgLnNjIHsgY29sb3I6ICRjb2RlaGlsaXRlLWxpdGVyYWwtc3RyaW5nLWNoYXI7IH1cbiAgLnNkIHsgY29sb3I6ICRjb2RlaGlsaXRlLWxpdGVyYWwtc3RyaW5nLWRvYzsgfVxuICAuczIgeyBjb2xvcjogJGNvZGVoaWxpdGUtbGl0ZXJhbC1zdHJpbmctZG91YmxlOyB9XG4gIC5zZSB7IGNvbG9yOiAkY29kZWhpbGl0ZS1saXRlcmFsLXN0cmluZy1lc2NhcGU7IH1cbiAgLnNoIHsgY29sb3I6ICRjb2RlaGlsaXRlLWxpdGVyYWwtc3RyaW5nLWhlcmVkb2M7IH1cbiAgLnNpIHsgY29sb3I6ICRjb2RlaGlsaXRlLWxpdGVyYWwtc3RyaW5nLWludGVycG9sOyB9XG4gIC5zeCB7IGNvbG9yOiAkY29kZWhpbGl0ZS1saXRlcmFsLXN0cmluZy1vdGhlcjsgfVxuICAuc3IgeyBjb2xvcjogJGNvZGVoaWxpdGUtbGl0ZXJhbC1zdHJpbmctcmVnZXg7IH1cbiAgLnMxIHsgY29sb3I6ICRjb2RlaGlsaXRlLWxpdGVyYWwtc3RyaW5nLXNpbmdsZTsgfVxuICAuc3MgeyBjb2xvcjogJGNvZGVoaWxpdGUtbGl0ZXJhbC1zdHJpbmctc3ltYm9sOyB9XG5cbiAgLy8gTWlzY2VsbGFuZW91c1xuICAuZXJyIHsgY29sb3I6ICRjb2RlaGlsaXRlLWVycm9yOyB9XG4gIC53IHsgY29sb3I6ICRjb2RlaGlsaXRlLXdoaXRlc3BhY2U7IH1cblxuICAvLyBIaWdobGlnaHRlZCBsaW5lc1xuICAuaGxsIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW46IDAgcHgycmVtKC0xMnB4KTtcbiAgICBwYWRkaW5nOiAwIHB4MnJlbSgxMnB4KTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudGl6ZSgkY2xyLXllbGxvdy01MDAsIDAuNSk7XG5cbiAgICAvLyBbbW9iaWxlIC1dOiBTdHJldGNoIHRvIHdob2xlIHdpZHRoXG4gICAgQGluY2x1ZGUgYnJlYWstdG8tZGV2aWNlKG1vYmlsZSkge1xuICAgICAgbWFyZ2luOiAwIHB4MnJlbSgtMTZweCk7XG4gICAgICBwYWRkaW5nOiAwIHB4MnJlbSgxNnB4KTtcbiAgICB9XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZXM6IGxheW91dFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBCbG9jayB3aXRoIGxpbmUgbnVtYmVyc1xuLmNvZGVoaWxpdGV0YWJsZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gIC8vIFNldCB0YWJsZSBlbGVtZW50cyB0byBibG9jayBsYXlvdXQsIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZSB3aG9sZSBmbGV4Ym94XG4gIC8vIGhhY2tpbmcgd29uJ3Qgd29yayBjb3JyZWN0bHlcbiAgdGJvZHksXG4gIHRkIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nOiAwO1xuICB9XG5cbiAgLy8gV2UgbmVlZCB0byB1c2UgZmxleGJveCBsYXlvdXQsIGJlY2F1c2Ugb3RoZXJ3aXNlIGl0J3Mgbm90IHBvc3NpYmxlIHRvXG4gIC8vIG1ha2UgdGhlIGNvZGUgY29udGFpbmVyIHNjcm9sbCB3aGlsZSBrZWVwaW5nIHRoZSBsaW5lIG51bWJlcnMgc3RhdGljXG4gIHRyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICB9XG5cbiAgLy8gVGhlIHByZSB0YWdzIGFyZSBuZXN0ZWQgaW5zaWRlIGEgdGFibGUsIHNvIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZVxuICAvLyBtYXJnaW4gYmVjYXVzZSBpdCBjb2xsYXBzZXMgYmVsb3cgYWxsIHRoZSBvdmVyZmxvd3NcbiAgcHJlLFxuICAubGluZW5vZGl2IHtcbiAgICBtYXJnaW46IDA7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgfVxuXG4gIC8vIEFkZCBzcGFjaW5nIHRvIGxpbmUgbnVtYmVyIGNvbnRhaW5lclxuICAubGluZW5vZGl2IHtcbiAgICBwYWRkaW5nOiBweDJyZW0oMTAuNXB4KSBweDJyZW0oMTJweCk7XG4gIH1cblxuICAvLyBEaXNhYmxlIHVzZXIgc2VsZWN0aW9uLCBzbyBjb2RlIGNhbiBiZSBlYXNpbHkgY29waWVkIHdpdGhvdXRcbiAgLy8gYWNjaWRlbnRhbGx5IGFsc28gY29weWluZyB0aGUgbGluZSBudW1iZXJzXG4gIC5saW5lbm9zIHtcbiAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG4gICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgcHgycmVtKDFweCkgdmFyKC0tbWQtY29kZS1iZy1jb2xvcik7XG4gICAgdXNlci1zZWxlY3Q6IG5vbmU7XG5cbiAgICAvLyBSZXNldCBzcGFjaW5nc1xuICAgIHByZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgIGNvbG9yOiBpbmhlcml0O1xuICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgfVxuICB9XG5cbiAgLy8gVGhlIHRhYmxlIGNlbGwgY29udGFpbmluZyB0aGUgY29kZSBjb250YWluZXIgd3JhcHBlciBhbmQgY29kZSBzaG91bGRcbiAgLy8gc3RyZXRjaCBob3Jpem9udGFsbHkgdG8gdGhlIHJlbWFpbmluZyBzcGFjZVxuICAuY29kZSB7XG4gICAgZmxleDogMTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICB9XG59XG5cbi8vIFNjb3BlZCBpbiB0eXBlc2V0dGVkIGNvbnRlbnQgdG8gbWF0Y2ggc3BlY2lmaWNpdHkgb2YgcmVndWxhciBjb250ZW50XG4ubWQtdHlwZXNldCB7XG5cbiAgLy8gQmxvY2sgd2l0aCBsaW5lIG51bWJlcnNcbiAgPiAuY29kZWhpbGl0ZXRhYmxlIHtcbiAgICBtYXJnaW46IDFlbSAwO1xuICAgIGJvcmRlci1yYWRpdXM6IDAuMmVtO1xuICB9XG5cbiAgLy8gW21vYmlsZSAtXTogU3RyZXRjaCB0byB3aG9sZSB3aWR0aFxuICBAaW5jbHVkZSBicmVhay10by1kZXZpY2UobW9iaWxlKSB7XG5cbiAgICAvLyBGdWxsLXdpZHRoIGNvbnRhaW5lclxuICAgID4gLmNvZGVoaWxpdGUge1xuICAgICAgbWFyZ2luOiAxZW0gcHgycmVtKC0xNnB4KTtcblxuICAgICAgLy8gQWN0dWFsIGNvbnRhaW5lciB3aXRoIGNvZGUsIG92ZXJmbG93aW5nXG4gICAgICBjb2RlIHtcbiAgICAgICAgcGFkZGluZzogcHgycmVtKDEwLjVweCkgcHgycmVtKDE2cHgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZ1bGwtd2lkdGggY29udGFpbmVyIG9uIHRvcC1sZXZlbFxuICAgID4gLmNvZGVoaWxpdGV0YWJsZSB7XG4gICAgICBtYXJnaW46IDFlbSBweDJyZW0oLTE2cHgpO1xuICAgICAgYm9yZGVyLXJhZGl1czogMDtcblxuICAgICAgLy8gSW5jcmVhc2Ugc3BhY2luZ1xuICAgICAgLmxpbmVub2RpdiB7XG4gICAgICAgIHBhZGRpbmc6IHB4MnJlbSgxMHB4KSBweDJyZW0oMTZweCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvLy8vXG4vLy8gQ29weXJpZ2h0IChjKSAyMDE2LTIwMjAgTWFydGluIERvbmF0aCA8bWFydGluLmRvbmF0aEBzcXVpZGZ1bmsuY29tPlxuLy8vXG4vLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksXG4vLy8gdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8vIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLFxuLy8vIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZVxuLy8vIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vLy9cbi8vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy8vXG4vLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTFxuLy8vIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbi8vLyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSXG4vLy8gREVBTElOR1Ncbi8vLy9cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gU2NvcGVkIGluIHR5cGVzZXR0ZWQgY29udGVudCB0byBtYXRjaCBzcGVjaWZpY2l0eSBvZiByZWd1bGFyIGNvbnRlbnRcbi5tZC10eXBlc2V0IHtcblxuICAvLyBBbGwgZm9vdG5vdGUgcmVmZXJlbmNlc1xuICBbaWRePVwiZm5yZWY6XCJdIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cbiAgICAvLyBUYXJnZXRlZCBhbmNob3JcbiAgICAmOnRhcmdldCB7XG4gICAgICBtYXJnaW4tdG9wOiAtMSAqIHB4MnJlbSg0OHB4ICsgMTJweCArIDE2cHgpO1xuICAgICAgcGFkZGluZy10b3A6IHB4MnJlbSg0OHB4ICsgMTJweCArIDE2cHgpO1xuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgLy8gQWxsIGZvb3Rub3RlIGJhY2sgcmVmZXJlbmNlc1xuICBbaWRePVwiZm46XCJdIHtcblxuICAgIC8vIEFkZCBzcGFjaW5nIHRvIGFuY2hvciBmb3Igb2Zmc2V0XG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICBoZWlnaHQ6IDA7XG4gICAgICBjb250ZW50OiBcIlwiO1xuICAgIH1cblxuICAgIC8vIFRhcmdldGVkIGFuY2hvclxuICAgICY6dGFyZ2V0OjpiZWZvcmUge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBtYXJnaW4tdG9wOiAtMSAqIHB4MnJlbSg0OHB4ICsgMTJweCArIDEwcHgpO1xuICAgICAgcGFkZGluZy10b3A6IHB4MnJlbSg0OHB4ICsgMTJweCArIDEwcHgpO1xuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgLy8gRm9vdG5vdGVzIGV4dGVuc2lvblxuICAuZm9vdG5vdGUge1xuICAgIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG4gICAgZm9udC1zaXplOiBtcygtMSk7XG5cbiAgICAvLyBSZW1vdmUgYWRkaXRpb25hbCBzcGFjaW5nIG9uIGZvb3Rub3Rlc1xuICAgIG9sIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgIH1cblxuICAgIC8vIEZvb3Rub3RlXG4gICAgbGkge1xuICAgICAgdHJhbnNpdGlvbjogY29sb3IgMjUwbXM7XG5cbiAgICAgIC8vIERhcmtlbiBjb2xvciBmb3IgdGFyZ2V0ZWQgZm9vdG5vdGVcbiAgICAgICY6dGFyZ2V0IHtcbiAgICAgICAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3IpO1xuICAgICAgfVxuXG4gICAgICAvLyBSZW1vdmUgc3BhY2luZyBvbiBmaXJzdCBlbGVtZW50XG4gICAgICA6Zmlyc3QtY2hpbGQge1xuICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgfVxuXG4gICAgICAvLyBNYWtlIGJhY2sgcmVmZXJlbmNlcyB2aXNpYmxlIG9uIGhvdmVyXG4gICAgICAmOmhvdmVyICAuZm9vdG5vdGUtYmFja3JlZixcbiAgICAgICY6dGFyZ2V0IC5mb290bm90ZS1iYWNrcmVmIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgfVxuXG4gICAgICAvLyBBY3RpdmUgb3IgdGFyZ2V0ZWQgYmFjayByZWZlcmVuY2VcbiAgICAgICY6aG92ZXIgIC5mb290bm90ZS1iYWNrcmVmOmhvdmVyLFxuICAgICAgJjp0YXJnZXQgLmZvb3Rub3RlLWJhY2tyZWYge1xuICAgICAgICBjb2xvcjogdmFyKC0tbWQtYWNjZW50LWZnLWNvbG9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBGb290bm90ZSByZWZlcmVuY2VcbiAgLmZvb3Rub3RlLXJlZiB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHBvaW50ZXItZXZlbnRzOiBpbml0aWFsO1xuXG4gICAgLy8gUmVuZGVyIGEgdGhpbiBsaW5lIGJlZm9yZSBmb290bm90ZVxuICAgICY6OmJlZm9yZSB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmU7XG4gICAgICBtYXJnaW46IDAgMC4yZW07XG4gICAgICBib3JkZXItbGVmdDogcHgycmVtKDFweCkgc29saWQgdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG4gICAgICBmb250LXNpemU6IDEuMjVlbTtcbiAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogcHgycmVtKC01cHgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZvb3Rub3RlIGJhY2sgcmVmZXJlbmNlXG4gIC5mb290bm90ZS1iYWNrcmVmIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKHB4MnJlbSg1cHgpKTtcbiAgICB0cmFuc2l0aW9uOlxuICAgICAgdHJhbnNmb3JtIDI1MG1zIDI1MG1zLFxuICAgICAgY29sb3IgICAgIDI1MG1zLFxuICAgICAgb3BhY2l0eSAgIDEyNW1zIDI1MG1zO1xuICAgIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVyKTtcbiAgICAvLyBIYWNrOiByZW1vdmUgVW5pY29kZSBhcnJvdyBmb3IgaWNvblxuICAgIGZvbnQtc2l6ZTogMDtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHZlcnRpY2FsLWFsaWduOiB0ZXh0LWJvdHRvbTtcblxuICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKHB4MnJlbSgtNXB4KSk7XG4gICAgfVxuXG4gICAgLy8gQmFjayByZWZlcmVuY2UgaWNvblxuICAgICY6OmJlZm9yZSB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICB3aWR0aDogcHgycmVtKDE2cHgpO1xuICAgICAgaGVpZ2h0OiBweDJyZW0oMTZweCk7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBjdXJyZW50Q29sb3I7XG4gICAgICBtYXNrLWltYWdlOiB1cmwoXCJ7eyBrZXlib2FyZC1yZXR1cm4gfX1cIik7XG4gICAgICBjb250ZW50OiBcIlwiO1xuXG4gICAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgICBbZGlyPVwicnRsXCJdICYge1xuXG4gICAgICAgIC8vIEZsaXAgaWNvbiB2ZXJ0aWNhbGx5XG4gICAgICAgIHN2ZyB7XG4gICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vLy9cbi8vLyBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMCBNYXJ0aW4gRG9uYXRoIDxtYXJ0aW4uZG9uYXRoQHNxdWlkZnVuay5jb20+XG4vLy9cbi8vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSxcbi8vLyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLy8gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsXG4vLy8gYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlXG4vLy8gU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vL1xuLy8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vLy9cbi8vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMXG4vLy8gVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lOR1xuLy8vIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVJcbi8vLyBERUFMSU5HU1xuLy8vL1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSdWxlc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBTY29wZWQgaW4gdHlwZXNldHRlZCBjb250ZW50IHRvIG1hdGNoIHNwZWNpZmljaXR5IG9mIHJlZ3VsYXIgY29udGVudFxuLm1kLXR5cGVzZXQge1xuXG4gIC8vIFBlcm1hbGlua3MgZXh0ZW5zaW9uXG4gIC5oZWFkZXJsaW5rIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgbWFyZ2luLWxlZnQ6IHB4MnJlbSgxMHB4KTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCBweDJyZW0oNXB4KSk7XG4gICAgdHJhbnNpdGlvbjpcbiAgICAgIHRyYW5zZm9ybSAgMjUwbXMgMjUwbXMsXG4gICAgICBjb2xvciAgICAgIDI1MG1zLFxuICAgICAgb3BhY2l0eSAgICAxMjVtcyAyNTBtcyxcbiAgICAgIHZpc2liaWxpdHkgICAwbXMgNTAwbXM7XG4gICAgb3BhY2l0eTogMDtcbiAgICAvLyBIYWNrOiBJZiB3ZSBkb24ndCBzZXQgdmlzaWJpbGl0eSBoaWRkZW4sIHRoZSB0ZXh0IGNvbnRlbnQgb2YgdGhlIG5vZGVcbiAgICAvLyB3aWxsIGluY2x1ZGUgdGhlIGhlYWRlcmxpbmsgY2hhcmFjdGVyLCB3aGljaCBpcyB3aHkgR29vZ2xlIGluZGV4ZXMgdGhlbS5cbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG5cbiAgICAvLyBBZGp1c3QgZm9yIFJUTCBsYW5ndWFnZXNcbiAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgbWFyZ2luLXJpZ2h0OiBweDJyZW0oMTBweCk7XG4gICAgICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbiAgICB9XG5cbiAgICAvLyBIaWdoZXIgc3BlY2lmaWNpdHkgZm9yIGNvbG9yIGR1ZSB0byBwYWxldHRlcyBpbnRlZ3JhdGlvblxuICAgIGh0bWwgYm9keSAmIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVyKTtcbiAgICB9XG5cbiAgICAvLyBIaWRlIGZvciBwcmludFxuICAgIEBtZWRpYSBwcmludCB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxuXG4gIC8vIE1ha2UgcGVybWFsaW5rIHZpc2libGUgb24gaG92ZXJcbiAgOmhvdmVyICAuaGVhZGVybGluayxcbiAgOnRhcmdldCAuaGVhZGVybGluayxcbiAgLmhlYWRlcmxpbms6Zm9jdXMge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApO1xuICAgIHRyYW5zaXRpb246XG4gICAgICB0cmFuc2Zvcm0gIDI1MG1zIDI1MG1zLFxuICAgICAgY29sb3IgICAgICAyNTBtcyxcbiAgICAgIG9wYWNpdHkgICAgMTI1bXMgMjUwbXMsXG4gICAgICB2aXNpYmlsaXR5ICAgMG1zO1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgfVxuXG4gIC8vIEFjdGl2ZSBvciB0YXJnZXRlZCBwZXJtYWxpbmtcbiAgLmhlYWRlcmxpbms6Zm9jdXMsXG4gIC5oZWFkZXJsaW5rOmhvdmVyLFxuICA6dGFyZ2V0IC5oZWFkZXJsaW5rIHtcbiAgICBjb2xvcjogdmFyKC0tbWQtYWNjZW50LWZnLWNvbG9yKTtcbiAgfVxuXG4gIC8vIENvcnJlY3QgYW5jaG9yIG9mZnNldCBmb3IgbGluayBibHVycmluZ1xuICBAZWFjaCAkbGV2ZWwsICRkZWx0YSBpbiAoXG4gICAgaDEgaDIgaDM6IDhweCxcbiAgICBoNDogOXB4LFxuICAgIGg1IGg2OiAxMnB4LFxuICApIHtcbiAgICAlI3tudGgoJGxldmVsLCAxKX0ge1xuXG4gICAgICAvLyBVbi10YXJnZXRlZCBhbmNob3JcbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBtYXJnaW4tdG9wOiAtMSAqIHB4MnJlbSgkZGVsdGEpO1xuICAgICAgICBwYWRkaW5nLXRvcDogcHgycmVtKCRkZWx0YSk7XG4gICAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICB9XG5cbiAgICAgIC8vIFRhcmdldGVkIGFuY2hvciAoNDhweCBmcm9tIGhlYWRlciwgMTJweCBmcm9tIHNpZGViYXIgb2Zmc2V0KVxuICAgICAgJjp0YXJnZXQ6OmJlZm9yZSB7XG4gICAgICAgIG1hcmdpbi10b3A6IC0xICogcHgycmVtKDQ4cHggKyAxMnB4ICsgJGRlbHRhKTtcbiAgICAgICAgcGFkZGluZy10b3A6IHB4MnJlbSg0OHB4ICsgMTJweCArICRkZWx0YSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGVmaW5lIGxldmVsc1xuICAgIEBmb3IgJG4gZnJvbSAxIHRocm91Z2ggbGVuZ3RoKCRsZXZlbCkge1xuICAgICAgI3tudGgoJGxldmVsLCAkbil9W2lkXSB7XG4gICAgICAgIEBleHRlbmQgJSN7bnRoKCRsZXZlbCwgMSl9O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8vL1xuLy8vIENvcHlyaWdodCAoYykgMjAxNi0yMDIwIE1hcnRpbiBEb25hdGggPG1hcnRpbi5kb25hdGhAc3F1aWRmdW5rLmNvbT5cbi8vL1xuLy8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLFxuLy8vIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vLyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSxcbi8vLyBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGVcbi8vLyBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy8vXG4vLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vL1xuLy8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTExcbi8vLyBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HXG4vLy8gRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUlxuLy8vIERFQUxJTkdTXG4vLy8vXG5cbi8vIHN0eWxlbGludC1kaXNhYmxlIHNlbGVjdG9yLWNsYXNzLXBhdHRlcm5cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gU2NvcGVkIGluIHR5cGVzZXR0ZWQgY29udGVudCB0byBtYXRjaCBzcGVjaWZpY2l0eSBvZiByZWd1bGFyIGNvbnRlbnRcbi5tZC10eXBlc2V0IHtcblxuICAvLyBNYXRoSmF4IGludGVncmF0aW9uIC0gYWRkIHBhZGRpbmcgdG8gb21pdCB2ZXJ0aWNhbCBzY3JvbGxiYXJcbiAgLk1KWGMtZGlzcGxheSB7XG4gICAgbWFyZ2luOiAwLjc1ZW0gMDtcbiAgICBwYWRkaW5nOiAwLjc1ZW0gMDtcbiAgICBvdmVyZmxvdzogYXV0bztcbiAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG4gIH1cblxuICAvLyBTdHJldGNoIHRvcC1sZXZlbCBjb250YWluZXJzXG4gID4gcCA+IC5NSlhjLWRpc3BsYXkge1xuXG4gICAgLy8gW21vYmlsZSAtXTogU3RyZXRjaCB0byB3aG9sZSB3aWR0aFxuICAgIEBpbmNsdWRlIGJyZWFrLXRvLWRldmljZShtb2JpbGUpIHtcbiAgICAgIG1hcmdpbjogMC43NWVtIHB4MnJlbSgtMTZweCk7XG4gICAgICBwYWRkaW5nOiAwLjI1ZW0gcHgycmVtKDE2cHgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlbW92ZSBvdXRsaW5lIG9uIHRhYiBpbmRleFxuICAuTWF0aEpheF9DSFRNTCB7XG4gICAgb3V0bGluZTogMDtcbiAgfVxufVxuIiwiLy8vL1xuLy8vIENvcHlyaWdodCAoYykgMjAxNi0yMDIwIE1hcnRpbiBEb25hdGggPG1hcnRpbi5kb25hdGhAc3F1aWRmdW5rLmNvbT5cbi8vL1xuLy8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLFxuLy8vIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vLyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSxcbi8vLyBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGVcbi8vLyBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy8vXG4vLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vL1xuLy8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTExcbi8vLyBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HXG4vLy8gRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUlxuLy8vIERFQUxJTkdTXG4vLy8vXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIFNjb3BlZCBpbiB0eXBlc2V0dGVkIGNvbnRlbnQgdG8gbWF0Y2ggc3BlY2lmaWNpdHkgb2YgcmVndWxhciBjb250ZW50XG4ubWQtdHlwZXNldCB7XG5cbiAgLy8gRGVsZXRpb25zLCBhZGRpdGlvbnMgYW5kIGNvbW1lbnRzXG4gIGRlbC5jcml0aWMsXG4gIGlucy5jcml0aWMsXG4gIC5jcml0aWMuY29tbWVudCB7XG4gICAgbWFyZ2luOiAwIDAuMjVlbTtcbiAgICBwYWRkaW5nOiAwLjA2MjVlbSAwO1xuICAgIGJvcmRlci1yYWRpdXM6IHB4MnJlbSgycHgpO1xuICAgIGJveC1kZWNvcmF0aW9uLWJyZWFrOiBjbG9uZTtcbiAgfVxuXG4gIC8vIERlbGV0aW9uXG4gIGRlbC5jcml0aWMge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2RlaGlsaXRlLWRpZmYtZGVsZXRlZDtcbiAgICBib3gtc2hhZG93OlxuICAgICAgKzAuMjVlbSAwIDAgJGNvZGVoaWxpdGUtZGlmZi1kZWxldGVkLFxuICAgICAgLTAuMjVlbSAwIDAgJGNvZGVoaWxpdGUtZGlmZi1kZWxldGVkO1xuICB9XG5cbiAgLy8gQWRkaXRpb25cbiAgaW5zLmNyaXRpYyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGNvZGVoaWxpdGUtZGlmZi1pbnNlcnRlZDtcbiAgICBib3gtc2hhZG93OlxuICAgICAgKzAuMjVlbSAwIDAgJGNvZGVoaWxpdGUtZGlmZi1pbnNlcnRlZCxcbiAgICAgIC0wLjI1ZW0gMCAwICRjb2RlaGlsaXRlLWRpZmYtaW5zZXJ0ZWQ7XG4gIH1cblxuICAvLyBDb21tZW50XG4gIC5jcml0aWMuY29tbWVudCB7XG4gICAgY29sb3I6ICRjb2RlaGlsaXRlLWNvbW1lbnQ7XG5cbiAgICAvLyBDb21tZW50IG9wZW5pbmcgbWFya1xuICAgICY6OmJlZm9yZSB7XG4gICAgICBjb250ZW50OiBcIi8qIFwiO1xuICAgIH1cblxuICAgIC8vIENvbW1lbnQgY2xvc2luZyBtYXJrXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgY29udGVudDogXCIgKi9cIjtcbiAgICB9XG4gIH1cblxuICAvLyBCbG9ja1xuICAuY3JpdGljLmJsb2NrIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW46IDFlbSAwO1xuICAgIHBhZGRpbmctcmlnaHQ6IHB4MnJlbSgxNnB4KTtcbiAgICBwYWRkaW5nLWxlZnQ6IHB4MnJlbSgxNnB4KTtcbiAgICBib3gtc2hhZG93OiBub25lO1xuXG4gICAgLy8gRGVjcmVhc2Ugc3BhY2luZyBvbiBmaXJzdCBlbGVtZW50XG4gICAgOmZpcnN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi10b3A6IDAuNWVtO1xuICAgIH1cblxuICAgIC8vIERlY3JlYXNlIHNwYWNpbmcgb24gbGFzdCBlbGVtZW50XG4gICAgOmxhc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMC41ZW07XG4gICAgfVxuICB9XG59XG4iLCIvLy8vXG4vLy8gQ29weXJpZ2h0IChjKSAyMDE2LTIwMjAgTWFydGluIERvbmF0aCA8bWFydGluLmRvbmF0aEBzcXVpZGZ1bmsuY29tPlxuLy8vXG4vLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksXG4vLy8gdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8vIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLFxuLy8vIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZVxuLy8vIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vLy9cbi8vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy8vXG4vLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTFxuLy8vIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbi8vLyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSXG4vLy8gREVBTElOR1Ncbi8vLy9cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gU2NvcGVkIGluIHR5cGVzZXR0ZWQgY29udGVudCB0byBtYXRjaCBzcGVjaWZpY2l0eSBvZiByZWd1bGFyIGNvbnRlbnRcbi5tZC10eXBlc2V0IHtcblxuICAvLyBEZXRhaWxzIGV4dGVuc2lvblxuICBkZXRhaWxzIHtcbiAgICBAZXh0ZW5kIC5hZG1vbml0aW9uO1xuXG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcGFkZGluZy10b3A6IDA7XG5cbiAgICAvLyBSb3RhdGUgdGl0bGUgaWNvblxuICAgICZbb3Blbl0gPiBzdW1tYXJ5OjphZnRlciB7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSBib3R0b20gc3BhY2luZ1xuICAgICY6bm90KFtvcGVuXSkge1xuICAgICAgcGFkZGluZy1ib3R0b206IDA7XG5cbiAgICAgIC8vIFJlbW92ZSBib3R0b20gYm9yZGVyIGlmIGJsb2NrIGlzIGNsb3NlZFxuICAgICAgPiBzdW1tYXJ5IHtcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJbmNyZWFzZSBzcGFjaW5nIHRvIHRoZSByaWdodCAtIHNjb3BlZCBoZXJlIGZvciBoaWdoZXIgc3BlY2lmaWNpdHlcbiAgICBzdW1tYXJ5IHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IHB4MnJlbSg0MHB4KTtcblxuICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiBweDJyZW0oNDBweCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gVGl0bGVcbiAgc3VtbWFyeSB7XG4gICAgQGV4dGVuZCAuYWRtb25pdGlvbi10aXRsZTtcblxuICAgIC8vIEhhY2s6IHNldCB0byBibG9jaywgc28gRmlyZWZveCBkb2Vzbid0IHJlbmRlciBtYXJrZXJcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBvdXRsaW5lOiBub25lO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcblxuICAgIC8vIFJlbW92ZSBkZWZhdWx0IGRldGFpbHMgbWFya2VyXG4gICAgJjo6LXdlYmtpdC1kZXRhaWxzLW1hcmtlciB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cblxuICAgIC8vIEljb25cbiAgICAmOjphZnRlciB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICByaWdodDogcHgycmVtKDEycHgpO1xuICAgICAgd2lkdGg6IHB4MnJlbSgyMHB4KTtcbiAgICAgIGhlaWdodDogcHgycmVtKDIwcHgpO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG4gICAgICBtYXNrLWltYWdlOiB1cmwoXCJ7eyBjaGV2cm9uLWRvd24gfX1cIik7XG4gICAgICBjb250ZW50OiBcIlwiO1xuXG4gICAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgICByaWdodDogaW5pdGlhbDtcbiAgICAgICAgbGVmdDogcHgycmVtKDEycHgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8vL1xuLy8vIENvcHlyaWdodCAoYykgMjAxNi0yMDIwIE1hcnRpbiBEb25hdGggPG1hcnRpbi5kb25hdGhAc3F1aWRmdW5rLmNvbT5cbi8vL1xuLy8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLFxuLy8vIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vLyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSxcbi8vLyBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGVcbi8vLyBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy8vXG4vLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vL1xuLy8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTExcbi8vLyBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HXG4vLy8gRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUlxuLy8vIERFQUxJTkdTXG4vLy8vXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIFNjb3BlZCBpbiB0eXBlc2V0dGVkIGNvbnRlbnQgdG8gbWF0Y2ggc3BlY2lmaWNpdHkgb2YgcmVndWxhciBjb250ZW50XG4ubWQtdHlwZXNldCB7XG5cbiAgLy8gQ29ycmVjdCBhbGlnbm1lbnQgb2YgZW1vamlzXG4gIC5lbW9qaW9uZSxcbiAgLnR3ZW1vamksXG4gIC5nZW1vamkge1xuICAgIHdpZHRoOiBweDJyZW0oMjBweCk7XG4gICAgdmVydGljYWwtYWxpZ246IHRleHQtdG9wO1xuICB9XG59XG4iLCIvLy8vXG4vLy8gQ29weXJpZ2h0IChjKSAyMDE2LTIwMjAgTWFydGluIERvbmF0aCA8bWFydGluLmRvbmF0aEBzcXVpZGZ1bmsuY29tPlxuLy8vXG4vLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksXG4vLy8gdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8vIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLFxuLy8vIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZVxuLy8vIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vLy9cbi8vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy8vXG4vLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTFxuLy8vIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbi8vLyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSXG4vLy8gREVBTElOR1Ncbi8vLy9cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gV2hlbiBweW1kb3dueC5zdXBlcmZlbmNlcyBpcyBlbmFibGVkIGJ1dCBjb2RlaGlsaXRlIGlzIGRpc2FibGVkLFxuLy8gcHltZG93bnguaGlnaGxpZ2h0IHdpbGwgYmUgdXNlZC4gV2hlbiB0aGlzIGhhcHBlbnMsIHRoZSBvdXRlciBjb250YWluZXJcbi8vIGFuZCB0YWJsZXMgZ2V0IHRoaXMgY2xhc3MgbmFtZXMgYnkgZGVmYXVsdFxuLmhpZ2hsaWdodCB7XG4gIEBleHRlbmQgLmNvZGVoaWxpdGU7XG5cbiAgLy8gSW5saW5lIGxpbmUgbnVtYmVyc1xuICBbZGF0YS1saW5lbm9zXSB7XG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIHBvc2l0aW9uOiBzdGlja3k7XG4gICAgICBsZWZ0OiBweDJyZW0oLTEycHgpO1xuICAgICAgbWFyZ2luLXJpZ2h0OiBweDJyZW0oMTJweCk7XG4gICAgICBtYXJnaW4tbGVmdDogcHgycmVtKC0xMnB4KTtcbiAgICAgIHBhZGRpbmctbGVmdDogcHgycmVtKDEycHgpO1xuICAgICAgYm9yZGVyLXJpZ2h0OiBweDJyZW0oMXB4KSBzb2xpZCB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVzdCk7XG4gICAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG4gICAgICBjb250ZW50OiBhdHRyKGRhdGEtbGluZW5vcyk7XG4gICAgICB1c2VyLXNlbGVjdDogbm9uZTtcblxuICAgICAgLy8gW21vYmlsZSAtXTogU3RyZXRjaCB0byB3aG9sZSB3aWR0aFxuICAgICAgQGluY2x1ZGUgYnJlYWstdG8tZGV2aWNlKG1vYmlsZSkge1xuICAgICAgICBsZWZ0OiBweDJyZW0oLTMycHgpO1xuICAgICAgICBtYXJnaW4tbGVmdDogcHgycmVtKC0zMnB4KTtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiBweDJyZW0oMzJweCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIFNhbWUgYXMgYWJvdmUsIGJ1dCBmb3IgY29kZSBibG9ja3Mgd2l0aCBsaW5lIG51bWJlcnMgZW5hYmxlZFxuLmhpZ2hsaWdodHRhYmxlIHtcbiAgQGV4dGVuZCAuY29kZWhpbGl0ZXRhYmxlO1xufVxuIiwiLy8vL1xuLy8vIENvcHlyaWdodCAoYykgMjAxNi0yMDIwIE1hcnRpbiBEb25hdGggPG1hcnRpbi5kb25hdGhAc3F1aWRmdW5rLmNvbT5cbi8vL1xuLy8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLFxuLy8vIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vLyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSxcbi8vLyBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGVcbi8vLyBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy8vXG4vLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vL1xuLy8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTExcbi8vLyBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HXG4vLy8gRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUlxuLy8vIERFQUxJTkdTXG4vLy8vXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIFNjb3BlZCBpbiB0eXBlc2V0dGVkIGNvbnRlbnQgdG8gbWF0Y2ggc3BlY2lmaWNpdHkgb2YgcmVndWxhciBjb250ZW50XG4ubWQtdHlwZXNldCB7XG5cbiAgLy8gUXVhbGlmaWVkIGNsYXNzIHNlbGVjdG9yIHRvIGRpc3Rpbmd1aXNoIGlubGluZSBjb2RlIGZyb20gY29kZSBibG9ja3NcbiAgY29kZS5jb2RlaGlsaXRlIHtcbiAgICAkY29ycmVjdDogMSAvIDAuODU7XG5cbiAgICBtYXJnaW46IDAgMC4yNWVtICogJGNvcnJlY3Q7XG4gICAgcGFkZGluZzogMC4wNjI1ZW0gKiAkY29ycmVjdCAwO1xuICB9XG59XG4iLCIvLy8vXG4vLy8gQ29weXJpZ2h0IChjKSAyMDE2LTIwMjAgTWFydGluIERvbmF0aCA8bWFydGluLmRvbmF0aEBzcXVpZGZ1bmsuY29tPlxuLy8vXG4vLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksXG4vLy8gdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8vIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLFxuLy8vIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZVxuLy8vIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vLy9cbi8vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy8vXG4vLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTFxuLy8vIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbi8vLyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSXG4vLy8gREVBTElOR1Ncbi8vLy9cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gU2NvcGVkIGluIHR5cGVzZXR0ZWQgY29udGVudCB0byBtYXRjaCBzcGVjaWZpY2l0eSBvZiByZWd1bGFyIGNvbnRlbnRcbi5tZC10eXBlc2V0IHtcblxuICAvLyBUYWJiZWQgY29kZSBibG9jayBjb250ZW50XG4gIC50YWJiZWQtY29udGVudCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgICBvcmRlcjogOTk7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtY29kZS1iZy1jb2xvcik7XG5cbiAgICAvLyBBY3R1YWwgY29udGVudFxuICAgIHByZSB7XG4gICAgICBtYXJnaW46IDA7XG4gICAgICBib3JkZXItcmFkaXVzOiAwXG4gICAgfVxuICB9XG5cbiAgLy8gVGFiYmVkIGNvZGUgYmxvY2sgY29udGFpbmVyXG4gIC50YWJiZWQtc2V0IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgbWFyZ2luOiAxZW0gMDtcbiAgICBib3JkZXI6IHB4MnJlbSgxcHgpIHNvbGlkIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0KTtcbiAgICBib3JkZXItcmFkaXVzOiBweDJyZW0oMnB4KTtcblxuICAgIC8vIEhpZGUgcmFkaW8gYnV0dG9uc1xuICAgID4gaW5wdXQge1xuICAgICAgZGlzcGxheTogbm9uZTtcblxuICAgICAgLy8gQWN0aXZlIHRhYiBsYWJlbFxuICAgICAgJjpjaGVja2VkICsgbGFiZWwge1xuICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLW1kLWFjY2VudC1mZy1jb2xvcik7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1tZC1hY2NlbnQtZmctY29sb3IpO1xuXG4gICAgICAgIC8vIFNob3cgY29kZSB0YWIgY29udGVudFxuICAgICAgICAmICsgLnRhYmJlZC1jb250ZW50IHtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICBwYWRkaW5nOiAwIHB4MnJlbSgxMnB4KTtcblxuICAgICAgICAgIC8vIEFkanVzdCBzcGFjaW5nIG9uIGxhc3QgZWxlbWVudFxuICAgICAgICAgID4gOmxhc3QtY2hpbGQge1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogcHgycmVtKDEycHgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEVtdWxhdGUgb3JpZ2luYWwgcHltZG93bnguc3VwZXJmZW5jZXMgYmVoYXZpb3IgYW5kIHN0cmV0Y2ggdG8gZnVsbFxuICAgICAgICAgIC8vIHdpZHRoIGFuZCBoZWlnaHQgd2hlbiBhIGNvZGUgYmxvY2sgaXMgdGhlIG9ubHkgY2hpbGQgb2YgYSB0YWJcbiAgICAgICAgICA+IHtcbiAgICAgICAgICAgIHByZSxcbiAgICAgICAgICAgIC5oaWdobGlnaHQsXG4gICAgICAgICAgICAuaGlnaGxpZ2h0dGFibGUsXG4gICAgICAgICAgICAuY29kZWhpbGl0ZSxcbiAgICAgICAgICAgIC5jb2RlaGlsaXRldGFibGUge1xuICAgICAgICAgICAgICAmOm9ubHktY2hpbGQge1xuICAgICAgICAgICAgICAgIG1hcmdpbjogMCBweDJyZW0oLTEycHgpO1xuXG4gICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGRvdWJsZSBiYWNrZ3JvdW5kXG4gICAgICAgICAgICAgICAgcHJlIHtcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRhYiBsYWJlbFxuICAgID4gbGFiZWwge1xuICAgICAgd2lkdGg6IGF1dG87XG4gICAgICBwYWRkaW5nOiBweDJyZW0oMTJweCk7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogcHgycmVtKDEwcHgpO1xuICAgICAgdHJhbnNpdGlvbjpcbiAgICAgICAgY29sb3IgMTI1bXMsXG4gICAgICAgIGJvcmRlciAyNTBtcztcbiAgICAgIGJvcmRlci1ib3R0b206IHB4MnJlbSgycHgpIHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgICAgIGZvbnQtc2l6ZTogbXMoLTEpO1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcblxuICAgICAgLy8gSG92ZXJlZCB0YWIgbGFiZWxcbiAgICAgIGh0bWwgJjpob3ZlciB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1tZC1hY2NlbnQtZmctY29sb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEZ1bGwtd2lkdGggY29udGFpbmVyIG9uIHRvcC1sZXZlbFxuICA+IC50YWJiZWQtc2V0IHtcblxuICAgIC8vIFttb2JpbGUgLV06IFN0cmV0Y2ggdG8gd2hvbGUgd2lkdGhcbiAgICBAaW5jbHVkZSBicmVhay10by1kZXZpY2UobW9iaWxlKSB7XG4gICAgICBtYXJnaW46IDFlbSBweDJyZW0oLTE2cHgpO1xuICAgICAgYm9yZGVyOiAwO1xuICAgICAgYm9yZGVyLXRvcDogcHgycmVtKDFweCkgc29saWQgdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlc3QpO1xuICAgICAgYm9yZGVyLXJhZGl1czogMDtcblxuICAgICAgLy8gQWN0dWFsIGNvbnRhaW5lciB3aXRoIGNvZGUsIG92ZXJmbG93aW5nXG4gICAgICBjb2RlIHtcbiAgICAgICAgcGFkZGluZzogcHgycmVtKDEwLjVweCkgcHgycmVtKDE2cHgpO1xuICAgICAgfVxuXG4gICAgICAvLyBGaXJzdCB0YWIgbGFiZWxcbiAgICAgIGlucHV0OmZpcnN0LWNoaWxkICsgbGFiZWwge1xuICAgICAgICBtYXJnaW4tbGVmdDogcHgycmVtKDRweCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvLy8vXG4vLy8gQ29weXJpZ2h0IChjKSAyMDE2LTIwMjAgTWFydGluIERvbmF0aCA8bWFydGluLmRvbmF0aEBzcXVpZGZ1bmsuY29tPlxuLy8vXG4vLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksXG4vLy8gdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8vIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLFxuLy8vIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZVxuLy8vIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vLy9cbi8vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy8vXG4vLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTFxuLy8vIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbi8vLyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSXG4vLy8gREVBTElOR1Ncbi8vLy9cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gU2NvcGVkIGluIHR5cGVzZXR0ZWQgY29udGVudCB0byBtYXRjaCBzcGVjaWZpY2l0eSBvZiByZWd1bGFyIGNvbnRlbnRcbi5tZC10eXBlc2V0IHtcblxuICAvLyBSZW1vdmUgbGlzdCBpY29uIG9uIHRhc2sgaXRlbXNcbiAgLnRhc2stbGlzdC1pdGVtIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuXG4gICAgLy8gTWFrZSBjaGVja2JveCBpdGVtcyBhbGlnbiB3aXRoIG5vcm1hbCBsaXN0IGl0ZW1zLCBidXQgcG9zaXRpb25cbiAgICAvLyBldmVyeXRoaW5nIGluIGVtcyBmb3IgY29ycmVjdCBsYXlvdXQgYXQgc21hbGxlciBmb250IHNpemVzXG4gICAgW3R5cGU9XCJjaGVja2JveFwiXSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDAuNDVlbTtcbiAgICAgIGxlZnQ6IC0yZW07XG5cbiAgICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICAgIHJpZ2h0OiAtMmVtO1xuICAgICAgICBsZWZ0OiBpbml0aWFsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFdyYXBwZXIgZm9yIGxpc3QgY29udHJvbHMsIGluIGNhc2UgY3VzdG9tIGNoZWNrYm94ZXMgYXJlIGVuYWJsZWRcbiAgLnRhc2stbGlzdC1jb250cm9sIHtcblxuICAgIC8vIENoZWNrYm94IGljb24gaW4gdW5jaGVja2VkIHN0YXRlXG4gICAgLnRhc2stbGlzdC1pbmRpY2F0b3I6OmJlZm9yZSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDAuMTVlbTtcbiAgICAgIGxlZnQ6IHB4MmVtKC0yNHB4KTtcbiAgICAgIHdpZHRoOiBweDJlbSgyMHB4KTtcbiAgICAgIGhlaWdodDogcHgyZW0oMjBweCk7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVzdCk7XG4gICAgICBtYXNrLWltYWdlOiB1cmwoXCJ7eyBjaGVja2JveC1ibGFuay1jaXJjbGUgfX1cIik7XG4gICAgICBjb250ZW50OiBcIlwiO1xuXG4gICAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgICByaWdodDogcHgyZW0oLTI0cHgpO1xuICAgICAgICBsZWZ0OiBpbml0aWFsO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrYm94IGljb24gaW4gY2hlY2tlZCBzdGF0ZVxuICAgIFt0eXBlPVwiY2hlY2tib3hcIl06Y2hlY2tlZCArIC50YXNrLWxpc3QtaW5kaWNhdG9yOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNsci1ncmVlbi1hNDAwO1xuICAgICAgbWFzay1pbWFnZTogdXJsKFwie3sgY2hlY2stY2lyY2xlIH19XCIpO1xuICAgIH1cblxuICAgIC8vIEhpZGUgb3JpZ2luYWwgY2hlY2tib3ggYmVoaW5kIGljb25cbiAgICBbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgICB6LWluZGV4OiAtMTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vLy9cbi8vLyBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMCBNYXJ0aW4gRG9uYXRoIDxtYXJ0aW4uZG9uYXRoQHNxdWlkZnVuay5jb20+XG4vLy9cbi8vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSxcbi8vLyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLy8gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsXG4vLy8gYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlXG4vLy8gU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vL1xuLy8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vLy9cbi8vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMXG4vLy8gVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lOR1xuLy8vIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVJcbi8vLyBERUFMSU5HU1xuLy8vL1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBWYXJpYWJsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8vXG4vLy8gRGV2aWNlLXNwZWNpZmljIGJyZWFrcG9pbnRzXG4vLy9cbi8vLyBAZXhhbXBsZVxuLy8vICAgJGJyZWFrLWRldmljZXM6IChcbi8vLyAgICAgbW9iaWxlOiAoXG4vLy8gICAgICAgcG9ydHJhaXQ6ICAyMjBweCAgNDc5cHgsXG4vLy8gICAgICAgbGFuZHNjYXBlOiA0ODBweCAgNzE5cHhcbi8vLyAgICAgKSxcbi8vLyAgICAgdGFibGV0OiAoXG4vLy8gICAgICAgcG9ydHJhaXQ6ICA3MjBweCAgOTU5cHgsXG4vLy8gICAgICAgbGFuZHNjYXBlOiA5NjBweCAgMTIxOXB4XG4vLy8gICAgICksXG4vLy8gICAgIHNjcmVlbjogKFxuLy8vICAgICAgIHNtYWxsOiAgICAgMTIyMHB4IDE1OTlweCxcbi8vLyAgICAgICBtZWRpdW06ICAgIDE2MDBweCAxOTk5cHgsXG4vLy8gICAgICAgbGFyZ2U6ICAgICAyMDAwcHhcbi8vLyAgICAgKVxuLy8vICAgKTtcbi8vL1xuJGJyZWFrLWRldmljZXM6ICgpICFkZWZhdWx0O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBIZWxwZXJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vL1xuLy8vIENob29zZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGRldmljZSB3aWR0aHNcbi8vL1xuQGZ1bmN0aW9uIGJyZWFrLXNlbGVjdC1taW4tbWF4KCRkZXZpY2VzKSB7XG4gICRtaW46IDEwMDAwMDA7XG4gICRtYXg6IDA7XG4gIEBlYWNoICRrZXksICR2YWx1ZSBpbiAkZGV2aWNlcyB7XG4gICAgQHdoaWxlIHR5cGUtb2YoJHZhbHVlKSA9PSBtYXAge1xuICAgICAgJHZhbHVlOiBicmVhay1zZWxlY3QtbWluLW1heCgkdmFsdWUpO1xuICAgIH1cbiAgICBAaWYgdHlwZS1vZigkdmFsdWUpID09IGxpc3Qge1xuICAgICAgQGVhY2ggJG51bWJlciBpbiAkdmFsdWUge1xuICAgICAgICBAaWYgdHlwZS1vZigkbnVtYmVyKSA9PSBudW1iZXIge1xuICAgICAgICAgICRtaW46IG1pbigkbnVtYmVyLCAkbWluKTtcbiAgICAgICAgICBAaWYgJG1heCAhPSBudWxsIHtcbiAgICAgICAgICAgICRtYXg6IG1heCgkbnVtYmVyLCAkbWF4KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIEBlcnJvciBcIkludmFsaWQgbnVtYmVyOiAjeyRudW1iZXJ9XCI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IEBlbHNlIGlmIHR5cGUtb2YoJHZhbHVlKSA9PSBudW1iZXIge1xuICAgICAgJG1pbjogbWluKCR2YWx1ZSwgJG1pbik7XG4gICAgICAkbWF4OiBudWxsO1xuICAgIH0gQGVsc2Uge1xuICAgICAgQGVycm9yIFwiSW52YWxpZCB2YWx1ZTogI3skdmFsdWV9XCI7XG4gICAgfVxuICB9XG4gIEByZXR1cm4gJG1pbiwgJG1heDtcbn1cblxuLy8vXG4vLy8gU2VsZWN0IG1pbmltdW0gYW5kIG1heGltdW0gd2lkdGhzIGZvciBhIGRldmljZSBicmVha3BvaW50XG4vLy9cbkBmdW5jdGlvbiBicmVhay1zZWxlY3QtZGV2aWNlKCRkZXZpY2UpIHtcbiAgJGN1cnJlbnQ6ICRicmVhay1kZXZpY2VzO1xuICBAZm9yICRuIGZyb20gMSB0aHJvdWdoIGxlbmd0aCgkZGV2aWNlKSB7XG4gICAgQGlmIHR5cGUtb2YoJGN1cnJlbnQpID09IG1hcCB7XG4gICAgICAkY3VycmVudDogbWFwLWdldCgkY3VycmVudCwgbnRoKCRkZXZpY2UsICRuKSk7XG4gICAgfSBAZWxzZSB7XG4gICAgICBAZXJyb3IgXCJJbnZhbGlkIGRldmljZSBtYXA6ICN7JGRldmljZXN9XCI7XG4gICAgfVxuICB9XG4gIEBpZiB0eXBlLW9mKCRjdXJyZW50KSA9PSBsaXN0IG9yIHR5cGUtb2YoJGN1cnJlbnQpID09IG51bWJlciB7XG4gICAgJGN1cnJlbnQ6IChkZWZhdWx0OiAkY3VycmVudCk7XG4gIH1cbiAgQHJldHVybiBicmVhay1zZWxlY3QtbWluLW1heCgkY3VycmVudCk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIE1peGluc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLy9cbi8vLyBBIG1pbmltdW0tbWF4aW11bSBtZWRpYSBxdWVyeSBicmVha3BvaW50XG4vLy9cbkBtaXhpbiBicmVhay1hdCgkYnJlYWtwb2ludCkge1xuICBAaWYgdHlwZS1vZigkYnJlYWtwb2ludCkgPT0gbnVtYmVyIHtcbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAkYnJlYWtwb2ludCkge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9IEBlbHNlIGlmIHR5cGUtb2YoJGJyZWFrcG9pbnQpID09IGxpc3Qge1xuICAgICRtaW46IG50aCgkYnJlYWtwb2ludCwgMSk7XG4gICAgJG1heDogbnRoKCRicmVha3BvaW50LCAyKTtcbiAgICBAaWYgdHlwZS1vZigkbWluKSA9PSBudW1iZXIgYW5kIHR5cGUtb2YoJG1heCkgPT0gbnVtYmVyIHtcbiAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6ICRtaW4pIGFuZCAobWF4LXdpZHRoOiAkbWF4KSB7XG4gICAgICAgIEBjb250ZW50O1xuICAgICAgfVxuICAgIH0gQGVsc2Uge1xuICAgICAgQGVycm9yIFwiSW52YWxpZCBicmVha3BvaW50OiAjeyRicmVha3BvaW50fVwiO1xuICAgIH1cbiAgfSBAZWxzZSB7XG4gICAgQGVycm9yIFwiSW52YWxpZCBicmVha3BvaW50OiAjeyRicmVha3BvaW50fVwiO1xuICB9XG59XG5cbi8vL1xuLy8vIEFuIG9yaWVudGF0aW9uIG1lZGlhIHF1ZXJ5IGJyZWFrcG9pbnRcbi8vL1xuQG1peGluIGJyZWFrLWF0LW9yaWVudGF0aW9uKCRicmVha3BvaW50KSB7XG4gIEBpZiB0eXBlLW9mKCRicmVha3BvaW50KSA9PSBzdHJpbmcge1xuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGJyZWFrcG9pbnQpIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfSBAZWxzZSB7XG4gICAgQGVycm9yIFwiSW52YWxpZCBicmVha3BvaW50OiAjeyRicmVha3BvaW50fVwiO1xuICB9XG59XG5cbi8vL1xuLy8vIEEgbWF4aW11bS1hc3BlY3QtcmF0aW8gbWVkaWEgcXVlcnkgYnJlYWtwb2ludFxuLy8vXG5AbWl4aW4gYnJlYWstYXQtcmF0aW8oJGJyZWFrcG9pbnQpIHtcbiAgQGlmIHR5cGUtb2YoJGJyZWFrcG9pbnQpID09IG51bWJlciB7XG4gICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC1hc3BlY3QtcmF0aW86ICRicmVha3BvaW50KSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH0gQGVsc2Uge1xuICAgIEBlcnJvciBcIkludmFsaWQgYnJlYWtwb2ludDogI3skYnJlYWtwb2ludH1cIjtcbiAgfVxufVxuXG4vLy9cbi8vLyBBIG1pbmltdW0tbWF4aW11bSBtZWRpYSBxdWVyeSBkZXZpY2UgYnJlYWtwb2ludFxuLy8vXG5AbWl4aW4gYnJlYWstYXQtZGV2aWNlKCRkZXZpY2UpIHtcbiAgQGlmIHR5cGUtb2YoJGRldmljZSkgPT0gc3RyaW5nIHtcbiAgICAkZGV2aWNlOiAkZGV2aWNlLDtcbiAgfVxuICBAaWYgdHlwZS1vZigkZGV2aWNlKSA9PSBsaXN0IHtcbiAgICAkYnJlYWtwb2ludDogYnJlYWstc2VsZWN0LWRldmljZSgkZGV2aWNlKTtcbiAgICBAaWYgbnRoKCRicmVha3BvaW50LCAyKSAhPSBudWxsIHtcbiAgICAgICRtaW46IG50aCgkYnJlYWtwb2ludCwgMSk7XG4gICAgICAkbWF4OiBudGgoJGJyZWFrcG9pbnQsIDIpO1xuICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogJG1pbikgYW5kIChtYXgtd2lkdGg6ICRtYXgpIHtcbiAgICAgICAgQGNvbnRlbnQ7XG4gICAgICB9XG4gICAgfSBAZWxzZSB7XG4gICAgICBAZXJyb3IgXCJJbnZhbGlkIGRldmljZTogI3skZGV2aWNlfVwiO1xuICAgIH1cbiAgfSBAZWxzZSB7XG4gICAgQGVycm9yIFwiSW52YWxpZCBkZXZpY2U6ICN7JGRldmljZX1cIjtcbiAgfVxufVxuXG4vLy9cbi8vLyBBIG1pbmltdW0gbWVkaWEgcXVlcnkgZGV2aWNlIGJyZWFrcG9pbnRcbi8vL1xuQG1peGluIGJyZWFrLWZyb20tZGV2aWNlKCRkZXZpY2UpIHtcbiAgQGlmIHR5cGUtb2YoJGRldmljZSkgPT0gc3RyaW5nIHtcbiAgICAkZGV2aWNlOiAkZGV2aWNlLDtcbiAgfVxuICBAaWYgdHlwZS1vZigkZGV2aWNlKSA9PSBsaXN0IHtcbiAgICAkYnJlYWtwb2ludDogYnJlYWstc2VsZWN0LWRldmljZSgkZGV2aWNlKTtcbiAgICAkbWluOiBudGgoJGJyZWFrcG9pbnQsIDEpO1xuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6ICRtaW4pIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfSBAZWxzZSB7XG4gICAgQGVycm9yIFwiSW52YWxpZCBkZXZpY2U6ICN7JGRldmljZX1cIjtcbiAgfVxufVxuXG4vLy9cbi8vLyBBIG1heGltdW0gbWVkaWEgcXVlcnkgZGV2aWNlIGJyZWFrcG9pbnRcbi8vL1xuQG1peGluIGJyZWFrLXRvLWRldmljZSgkZGV2aWNlKSB7XG4gIEBpZiB0eXBlLW9mKCRkZXZpY2UpID09IHN0cmluZyB7XG4gICAgJGRldmljZTogJGRldmljZSw7XG4gIH1cbiAgQGlmIHR5cGUtb2YoJGRldmljZSkgPT0gbGlzdCB7XG4gICAgJGJyZWFrcG9pbnQ6IGJyZWFrLXNlbGVjdC1kZXZpY2UoJGRldmljZSk7XG4gICAgJG1heDogbnRoKCRicmVha3BvaW50LCAyKTtcbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkbWF4KSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH0gQGVsc2Uge1xuICAgIEBlcnJvciBcIkludmFsaWQgZGV2aWNlOiAjeyRkZXZpY2V9XCI7XG4gIH1cbn1cbiJdfQ== */ \ No newline at end of file diff --git a/material/base.html b/material/base.html index 6d9ea04d7..366e28342 100644 --- a/material/base.html +++ b/material/base.html @@ -2,7 +2,6 @@ This file was automatically generated - do not edit -#} {% import "partials/language.html" as lang with context %} -{% set feature = config.theme.feature %} {% set palette = config.theme.palette %} {% set font = config.theme.font %} @@ -43,7 +42,7 @@ {% endif %} {% endblock %} {% block styles %} - + {% if palette.primary or palette.accent %} {% endif %} @@ -79,18 +78,20 @@ {% endblock %} {% block extrahead %}{% endblock %} + {% set direction = config.theme.direction | default(lang.t('direction')) %} {% if palette.primary or palette.accent %} {% set primary = palette.primary | replace(" ", "-") | lower %} {% set accent = palette.accent | replace(" ", "-") | lower %} - + {% else %} - + {% endif %} {% if page.toc | first is defined %} - + {% set skip = page.toc | first %} + {{ lang.t('skip.link.title') }} {% endif %} @@ -111,7 +112,7 @@ {% endif %} {% endblock %} {% block tabs %} - {% if feature.tabs %} + {% if "tabs" in config.theme.features %} {% include "partials/tabs.html" %} {% endif %} {% endblock %} @@ -147,40 +148,19 @@ {% endif %} {% block source %} {% if page and page.meta and page.meta.source %} - {% set repo = config.repo_url %} - {% if repo | last == "/" %} - {% set repo = repo[:-1] %} - {% endif %} - {% set path = page.meta.path | default([""]) %} - {% set file = page.meta.source %} - {% set repo_icon = config.extra.repo_icon | default( - "fontawesome/brands/git-alt" - ) %} - - {{ lang.t("meta.source") }} - {% include ".icons/" ~ repo_icon ~ ".svg" %} - + {% include "partials/source-link.html" %} {% endif %} {% endblock %} {% if not "\x3ch1" in page.content %}

    {{ page.title | default(config.site_name, true)}}

    {% endif %} {{ page.content }} - {% if page and page.meta and ( - page.meta.git_revision_date_localized or - page.meta.revision_date - ) %} - {% set label = lang.t("source.revision.date") %} -
    -
    - - {% if page.meta.git_revision_date_localized %} - {{ label }}: {{ page.meta.git_revision_date_localized }} - {% elif page.meta.revision_date %} - {{ label }}: {{ page.meta.revision_date }} - {% endif %} - -
    + {% if page and page.meta %} + {% if page.meta.git_revision_date_localized or + page.meta.revision_date + %} + {% include "partials/source-date.html" %} + {% endif %} {% endif %} {% endblock %} {% block disqus %} @@ -194,21 +174,23 @@ {% include "partials/footer.html" %} {% endblock %} + {% block config %} + + {% endblock %} {% block scripts %} - - + + {%- set translations = {} -%} {%- for key in [ "clipboard.copy", "clipboard.copied", - "search.language", - "search.pipeline.stopwords", - "search.pipeline.trimmer", + "search.config.lang", + "search.config.pipeline", + "search.config.separator", "search.result.placeholder", "search.result.none", "search.result.one", - "search.result.other", - "search.tokenizer" + "search.result.other" ] -%} {%- set _ = translations.update({ key: lang.t(key) }) -%} {%- endfor -%} @@ -216,15 +198,15 @@ {{ translations | tojson }} {% for path in config["extra_javascript"] %} diff --git a/material/mkdocs_theme.yml b/material/mkdocs_theme.yml index c6f894e06..df133a1cf 100644 --- a/material/mkdocs_theme.yml +++ b/material/mkdocs_theme.yml @@ -26,15 +26,7 @@ direction: # Feature flags for functionality that alters behavior significantly, and thus # may be a matter of taste -feature: - - # Another layer on top of the main navigation for larger screens in the form - # of tabs, especially useful for larger documentation projects - tabs: false - - # Instant loading will instruct the application to intercept all internal - # links, load and inject the HTML into the page and rebind all handlers - instant: false +features: [] # Sets the primary and accent color palettes as defined in the Material Design # documentation - possible values can be looked up in the getting started guide @@ -61,10 +53,10 @@ font: icon: # Shown if no logo is set - logo: .icons/material/book-open-variant + logo: material/library # Repository icon - repo: .icons/fontawesome/git-alt + repo: fontawesome/brands/git-alt # Favicon to be rendered favicon: assets/images/favicon.png diff --git a/material/partials/hero.html b/material/partials/hero.html index 3d6a2cc8f..2c244e18b 100644 --- a/material/partials/hero.html +++ b/material/partials/hero.html @@ -1,9 +1,8 @@ {#- This file was automatically generated - do not edit -#} -{% set feature = config.theme.feature %} {% set class = "md-hero" %} -{% if not feature.tabs %} +{% if "tabs" not in config.theme.features %} {% set class = "md-hero md-hero--expand" %} {% endif %}
    diff --git a/material/partials/language.html b/material/partials/language.html index b05ffd729..46188a6b2 100644 --- a/material/partials/language.html +++ b/material/partials/language.html @@ -3,6 +3,4 @@ -#} {% import "partials/language/" + config.theme.language + ".html" as lang %} {% import "partials/language/en.html" as fallback %} -{% macro t(key) %}{{ { - "direction": config.theme.direction -}[key] or lang.t(key) or fallback.t(key) }}{% endmacro %} +{% macro t(key) %}{{ lang.t(key) | default(fallback.t(key)) }}{% endmacro %} diff --git a/material/partials/language/af.html b/material/partials/language/af.html index 47b7b5f64..a625cd4b7 100644 --- a/material/partials/language/af.html +++ b/material/partials/language/af.html @@ -10,7 +10,7 @@ "footer.next": "Volgende", "meta.comments": "Kommentaar", "meta.source": "Bron", - "search.language": "nl", + "search.config.lang": "nl", "search.placeholder": "Soek", "search.result.placeholder": "Tik om te begin soek", "search.result.none": "Geen ooreenstemmende dokumente", diff --git a/material/partials/language/ar.html b/material/partials/language/ar.html index 23dc470fe..777c82dad 100644 --- a/material/partials/language/ar.html +++ b/material/partials/language/ar.html @@ -11,9 +11,7 @@ "footer.next": "التالية", "meta.comments": "التعليقات", "meta.source": "المصدر", - "search.language": "", - "search.pipeline.stopwords": false, - "search.pipeline.trimmer": false, + "search.config.pipeline": "", "search.placeholder": "بحث", "search.result.placeholder": "اكتب لبدء البحث", "search.result.none": "لا توجد نتائج", diff --git a/material/partials/language/ca.html b/material/partials/language/ca.html index e37e200b6..d0ed166e6 100644 --- a/material/partials/language/ca.html +++ b/material/partials/language/ca.html @@ -10,7 +10,6 @@ "footer.next": "Següent", "meta.comments": "Comentaris", "meta.source": "Codi font", - "search.language": "", "search.placeholder": "Cerca", "search.result.placeholder": "Escriu per a començar a cercar", "search.result.none": "Cap document coincideix", diff --git a/material/partials/language/cs.html b/material/partials/language/cs.html index 6bb60ea2d..013b40627 100644 --- a/material/partials/language/cs.html +++ b/material/partials/language/cs.html @@ -10,7 +10,7 @@ "footer.next": "Další", "meta.comments": "Komentáře", "meta.source": "Zdroj", - "search.language": "ro", + "search.config.lang": "ro", "search.placeholder": "Hledat", "search.result.placeholder": "Pište co se má vyhledat", "search.result.none": "Nenalezeny žádné dokumenty", diff --git a/material/partials/language/da.html b/material/partials/language/da.html index 3cd23fdd0..d98ff5530 100644 --- a/material/partials/language/da.html +++ b/material/partials/language/da.html @@ -10,7 +10,7 @@ "footer.next": "Næste", "meta.comments": "Kommentarer", "meta.source": "Kilde", - "search.language": "da", + "search.config.lang": "da", "search.placeholder": "Søg", "search.result.placeholder": "Indtast søgeord", "search.result.none": "Ingen resultater fundet", diff --git a/material/partials/language/de.html b/material/partials/language/de.html index 578ca6f51..9945738ba 100644 --- a/material/partials/language/de.html +++ b/material/partials/language/de.html @@ -10,7 +10,7 @@ "footer.next": "Weiter", "meta.comments": "Kommentare", "meta.source": "Quellcode", - "search.language": "de", + "search.config.lang": "de", "search.placeholder": "Suche", "search.result.placeholder": "Suchbegriff eingeben", "search.result.none": "Keine Suchergebnisse", diff --git a/material/partials/language/en.html b/material/partials/language/en.html index d20c4c81f..e3509ab43 100644 --- a/material/partials/language/en.html +++ b/material/partials/language/en.html @@ -11,15 +11,14 @@ "footer.next": "Next", "meta.comments": "Comments", "meta.source": "Source", - "search.language": "en", - "search.pipeline.stopwords": true, - "search.pipeline.trimmer": true, + "search.config.lang": "en", + "search.config.pipeline": "trimmer, stopWordFilter", + "search.config.separator": "[\s\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", - "search.tokenizer": "[\s\-]+", "skip.link.title": "Skip to content", "source.link.title": "Go to repository", "source.revision.date": "Last update", diff --git a/material/partials/language/es.html b/material/partials/language/es.html index 85df0d100..3361a514f 100644 --- a/material/partials/language/es.html +++ b/material/partials/language/es.html @@ -10,7 +10,7 @@ "footer.next": "Siguiente", "meta.comments": "Comentarios", "meta.source": "Fuente", - "search.language": "es", + "search.config.lang": "es", "search.placeholder": "Búsqueda", "search.result.placeholder": "Teclee para comenzar búsqueda", "search.result.none": "No se encontraron documentos", diff --git a/material/partials/language/et.html b/material/partials/language/et.html index 47812703b..47a1b218d 100644 --- a/material/partials/language/et.html +++ b/material/partials/language/et.html @@ -10,9 +10,7 @@ "footer.next": "Järgmine", "meta.comments": "Kommentaarid", "meta.source": "Lähtekood", - "search.language": "", - "search.pipeline.stopwords": false, - "search.pipeline.trimmer": false, + "search.config.pipeline": "", "search.placeholder": "Otsi", "search.result.placeholder": "Otsimiseks kirjuta siia", "search.result.none": "Otsingule ei leitud ühtegi vastet", diff --git a/material/partials/language/fa.html b/material/partials/language/fa.html index 6e4735f0e..d5e988c2b 100644 --- a/material/partials/language/fa.html +++ b/material/partials/language/fa.html @@ -11,9 +11,7 @@ "footer.next": "بعدی", "meta.comments": "نظرات", "meta.source": "منبع", - "search.language": "", - "search.pipeline.stopwords": false, - "search.pipeline.trimmer": false, + "search.config.pipeline": "", "search.placeholder": "جستجو", "search.result.placeholder": "برای شروع جستجو تایپ کنید", "search.result.none": "سندی یافت نشد", diff --git a/material/partials/language/fi.html b/material/partials/language/fi.html index 4e8e5773a..b2b93e223 100644 --- a/material/partials/language/fi.html +++ b/material/partials/language/fi.html @@ -10,7 +10,7 @@ "footer.next": "Seuraava", "meta.comments": "Kommentit", "meta.source": "Lähdekodi", - "search.language": "fi", + "search.config.lang": "fi", "search.placeholder": "Hae", "search.result.placeholder": "Kirjoita aloittaaksesi haun", "search.result.none": "Ei täsmääviä dokumentteja", diff --git a/material/partials/language/fr.html b/material/partials/language/fr.html index 346a1746f..221cad969 100644 --- a/material/partials/language/fr.html +++ b/material/partials/language/fr.html @@ -10,12 +10,13 @@ "footer.next": "Suivant", "meta.comments": "Commentaires", "meta.source": "Source", - "search.language": "fr", + "search.config.lang": "fr", "search.placeholder": "Rechercher", "search.result.placeholder": "Taper pour démarrer la recherche", "search.result.none": "Aucun document trouvé", "search.result.one": "1 document trouvé", "search.result.other": "# documents trouvés", + "skip.link.title": "Aller au contenu", "source.link.title": "Aller au dépôt", "source.revision.date": "Dernière mise à jour", "toc.title": "Table des matières" diff --git a/material/partials/language/gl.html b/material/partials/language/gl.html index d0df01366..2c3c0d6a4 100644 --- a/material/partials/language/gl.html +++ b/material/partials/language/gl.html @@ -10,7 +10,7 @@ "footer.next": "Seguinte", "meta.comments": "Comentarios", "meta.source": "Fonte", - "search.language": "es", + "search.config.lang": "es", "search.placeholder": "Busca", "search.result.placeholder": "Insira un termo", "search.result.none": "Sen resultados", diff --git a/material/partials/language/gr.html b/material/partials/language/gr.html index 9ccb459d6..26e49928e 100644 --- a/material/partials/language/gr.html +++ b/material/partials/language/gr.html @@ -10,9 +10,7 @@ "footer.next": "Προηγούμενη", "meta.comments": "Σχόλια", "meta.source": "Πηγή", - "search.language": "", - "search.pipeline.stopwords": false, - "search.pipeline.trimmer": false, + "search.config.pipeline": "", "search.placeholder": "Αναζήτηση", "search.result.placeholder": "Πληκτρολογήστε για να αρχίσει η αναζήτηση", "search.result.none": "Δε βρέθηκαν αντίστοιχα αρχεία", diff --git a/material/partials/language/he.html b/material/partials/language/he.html index 4ecf765a4..ed2d735b4 100644 --- a/material/partials/language/he.html +++ b/material/partials/language/he.html @@ -11,9 +11,7 @@ "footer.next": "הַבָּא", "meta.comments": "הערות", "meta.source": "מָקוֹר", - "search.language": "", - "search.pipeline.stopwords": false, - "search.pipeline.trimmer": false, + "search.config.pipeline": "", "search.placeholder": "לחפש", "search.result.placeholder": "הקלד כדי להתחיל לחפש", "search.result.none": "אין מסמכים תואמים", diff --git a/material/partials/language/hi.html b/material/partials/language/hi.html index a3eab6259..85377f8b1 100644 --- a/material/partials/language/hi.html +++ b/material/partials/language/hi.html @@ -10,9 +10,7 @@ "footer.next": "आगामी", "meta.comments": "टिप्पणियाँ", "meta.source": "स्रोत", - "search.language": "", - "search.pipeline.stopwords": false, - "search.pipeline.trimmer": false, + "search.config.pipeline": "", "search.placeholder": "खोज", "search.result.placeholder": "खोज शुरू करने के लिए टाइप करें", "search.result.none": "कोई मिलान डॉक्यूमेंट नहीं", diff --git a/material/partials/language/hr.html b/material/partials/language/hr.html index 7ad2b2ac3..a52aeff5f 100644 --- a/material/partials/language/hr.html +++ b/material/partials/language/hr.html @@ -10,9 +10,7 @@ "footer.next": "Sljedeće", "meta.comments": "Komentari", "meta.source": "Izvor", - "search.language": "", - "search.pipeline.stopwords": false, - "search.pipeline.trimmer": false, + "search.config.pipeline": "", "search.placeholder": "Pretraživanje", "search.result.placeholder": "Unesite pojam pretraživanja", "search.result.none": "Ništa nije pronađeno", diff --git a/material/partials/language/hu.html b/material/partials/language/hu.html index 14bff2ca9..c2230cabd 100644 --- a/material/partials/language/hu.html +++ b/material/partials/language/hu.html @@ -10,7 +10,7 @@ "footer.next": "Következő", "meta.comments": "Hozzászólások", "meta.source": "Forrás", - "search.language": "hu", + "search.config.lang": "hu", "search.placeholder": "Keresés", "search.result.placeholder": "Kereséshez írj ide valamit", "search.result.none": "Nincs találat", diff --git a/material/partials/language/id.html b/material/partials/language/id.html index 52bdcdc42..b846e5072 100644 --- a/material/partials/language/id.html +++ b/material/partials/language/id.html @@ -10,9 +10,7 @@ "footer.next": "Selanjutnya", "meta.comments": "Komentar", "meta.source": "Sumber", - "search.language": "", - "search.pipeline.stopwords": false, - "search.pipeline.trimmer": false, + "search.config.pipeline": "", "search.placeholder": "Cari", "search.result.placeholder": "Ketik untuk mulai pencarian", "search.result.none": "Tidak ada dokumen yang sesuai", diff --git a/material/partials/language/it.html b/material/partials/language/it.html index b91f58b03..3aa0730c5 100644 --- a/material/partials/language/it.html +++ b/material/partials/language/it.html @@ -10,7 +10,7 @@ "footer.next": "Prossimo", "meta.comments": "Commenti", "meta.source": "Sorgente", - "search.language": "it", + "search.config.lang": "it", "search.placeholder": "Cerca", "search.result.placeholder": "Scrivi per iniziare a cercare", "search.result.none": "Nessun documento trovato", diff --git a/material/partials/language/ja.html b/material/partials/language/ja.html index f280341e5..4df385c21 100644 --- a/material/partials/language/ja.html +++ b/material/partials/language/ja.html @@ -10,13 +10,13 @@ "footer.next": "次", "meta.comments": "コメント", "meta.source": "ソース", - "search.language": "ja", + "search.config.lang": "ja", + "search.config.separator": "[\s\- 、。,.]+", "search.placeholder": "検索", "search.result.placeholder": "検索キーワードを入力してください", "search.result.none": "何も見つかりませんでした", "search.result.one": "1件見つかりました", "search.result.other": "#件見つかりました", - "search.tokenizer": "[\s\- 、。,.]+", "source.link.title": "リポジトリへ", "source.revision.date": "最終更新日", "toc.title": "目次" diff --git a/material/partials/language/kr.html b/material/partials/language/kr.html index b1db067de..f1b863fd7 100644 --- a/material/partials/language/kr.html +++ b/material/partials/language/kr.html @@ -10,7 +10,7 @@ "footer.next": "다음", "meta.comments": "댓글", "meta.source": "출처", - "search.language": "ja", + "search.config.lang": "ja", "search.placeholder": "검색", "search.result.placeholder": "검색어를 입력하세요", "search.result.none": "검색어와 일치하는 문서가 없습니다", diff --git a/material/partials/language/nl.html b/material/partials/language/nl.html index 0b6254203..1f28d8f70 100644 --- a/material/partials/language/nl.html +++ b/material/partials/language/nl.html @@ -10,7 +10,7 @@ "footer.next": "Volgende", "meta.comments": "Reacties", "meta.source": "Bron", - "search.language": "nl", + "search.config.lang": "nl", "search.placeholder": "Zoeken", "search.result.placeholder": "Typ om te beginnen met zoeken", "search.result.none": "Geen overeenkomende documenten", diff --git a/material/partials/language/nn.html b/material/partials/language/nn.html index 5d8aeb752..a961724f8 100644 --- a/material/partials/language/nn.html +++ b/material/partials/language/nn.html @@ -10,7 +10,7 @@ "footer.next": "Neste", "meta.comments": "Kommentarar", "meta.source": "Kjelde", - "search.language": "no", + "search.config.lang": "no", "search.placeholder": "Søk", "search.result.placeholder": "Skriv søkeord", "search.result.none": "Ingen treff", diff --git a/material/partials/language/no.html b/material/partials/language/no.html index 612a23e1f..2a5ed6e8e 100644 --- a/material/partials/language/no.html +++ b/material/partials/language/no.html @@ -10,7 +10,7 @@ "footer.next": "Neste", "meta.comments": "Kommentarer", "meta.source": "Kilde", - "search.language": "no", + "search.config.lang": "no", "search.placeholder": "Søk", "search.result.placeholder": "Skriv søkeord", "search.result.none": "Ingen treff", diff --git a/material/partials/language/pl.html b/material/partials/language/pl.html index 603e2fcf0..a94e22b74 100644 --- a/material/partials/language/pl.html +++ b/material/partials/language/pl.html @@ -10,9 +10,7 @@ "footer.next": "Następna strona", "meta.comments": "Komentarze", "meta.source": "Kod źródłowy", - "search.language": "", - "search.pipeline.stopwords": false, - "search.pipeline.trimmer": false, + "search.config.pipeline": "", "search.placeholder": "Szukaj", "search.result.placeholder": "Zacznij pisać, aby szukać", "search.result.none": "Brak wyników wyszukiwania", diff --git a/material/partials/language/pt.html b/material/partials/language/pt.html index a2a3f0b27..061ac210c 100644 --- a/material/partials/language/pt.html +++ b/material/partials/language/pt.html @@ -10,7 +10,7 @@ "footer.next": "Próximo", "meta.comments": "Comentários", "meta.source": "Fonte", - "search.language": "pt", + "search.config.lang": "pt", "search.placeholder": "Buscar", "search.result.placeholder": "Digite para iniciar a busca", "search.result.none": "Nenhum resultado encontrado", diff --git a/material/partials/language/ro.html b/material/partials/language/ro.html index 8794aeb62..5891c7913 100644 --- a/material/partials/language/ro.html +++ b/material/partials/language/ro.html @@ -10,7 +10,7 @@ "footer.next": "Următor", "meta.comments": "Comentarii", "meta.source": "Sursă", - "search.language": "ro", + "search.config.lang": "ro", "search.placeholder": "Căutare", "search.result.placeholder": "Tastează pentru a începe căutarea", "search.result.none": "Nu a fost găsit niciun document", diff --git a/material/partials/language/ru.html b/material/partials/language/ru.html index b01cd24c2..84d204820 100644 --- a/material/partials/language/ru.html +++ b/material/partials/language/ru.html @@ -10,7 +10,7 @@ "footer.next": "Вперед", "meta.comments": "Комментарии", "meta.source": "Исходный код", - "search.language": "ru", + "search.config.lang": "ru", "search.placeholder": "Поиск", "search.result.placeholder": "Начните печатать для поиска", "search.result.none": "Совпадений не найдено", diff --git a/material/partials/language/sh.html b/material/partials/language/sh.html index 6ae034b27..f0972497c 100644 --- a/material/partials/language/sh.html +++ b/material/partials/language/sh.html @@ -10,7 +10,7 @@ "footer.next": "Sledeće", "meta.comments": "Komentari", "meta.source": "Izvor", - "search.language": "ro", + "search.config.lang": "ro", "search.placeholder": "Pretraga", "search.result.placeholder": "Unesite pojam pretrage", "search.result.none": "Ništa nije pronađeno", diff --git a/material/partials/language/si.html b/material/partials/language/si.html index 1f60954b5..aa258b9c0 100644 --- a/material/partials/language/si.html +++ b/material/partials/language/si.html @@ -10,7 +10,6 @@ "footer.next": "Naslednja stran", "meta.comments": "Komentarji", "meta.source": "Izvorna koda", - "search.language": "", "search.placeholder": "Išči", "search.result.placeholder": "Vpiši iskalni niz", "search.result.none": "Ni zadetkov", diff --git a/material/partials/language/sk.html b/material/partials/language/sk.html index 2aabc03ec..66bd7dcf4 100644 --- a/material/partials/language/sk.html +++ b/material/partials/language/sk.html @@ -10,7 +10,6 @@ "footer.next": "Ďalej", "meta.comments": "Komentáre", "meta.source": "Zdroj", - "search.language": "", "search.placeholder": "Hľadať", "search.result.placeholder": "Pre vyhľadávanie začni písať", "search.result.none": "Žiadne vyhovujúce dokumenty", diff --git a/material/partials/language/sr.html b/material/partials/language/sr.html index 9337cc6ea..695a08b73 100644 --- a/material/partials/language/sr.html +++ b/material/partials/language/sr.html @@ -10,9 +10,7 @@ "footer.next": "Следеће", "meta.comments": "Коментари", "meta.source": "Извор", - "search.language": "", - "search.pipeline.stopwords": false, - "search.pipeline.trimmer": false, + "search.config.pipeline": "", "search.placeholder": "Претрага", "search.result.placeholder": "Унесите појам претраге", "search.result.none": "Нису пронађени документи", diff --git a/material/partials/language/sv.html b/material/partials/language/sv.html index c4209da2d..872436663 100644 --- a/material/partials/language/sv.html +++ b/material/partials/language/sv.html @@ -10,7 +10,7 @@ "footer.next": "Nästa", "meta.comments": "Kommentarer", "meta.source": "Källa", - "search.language": "sv", + "search.config.lang": "sv", "search.placeholder": "Sök", "search.result.placeholder": "Skriv sökord", "search.result.none": "Inga sökresultat", diff --git a/material/partials/language/th.html b/material/partials/language/th.html index 64672318b..dacadfe86 100644 --- a/material/partials/language/th.html +++ b/material/partials/language/th.html @@ -10,13 +10,11 @@ "footer.next": "ต่อไป", "meta.comments": "ความคิดเห็น", "meta.source": "แหล่งที่มา", - "search.language": "th", "search.placeholder": "ค้นหา", "search.result.placeholder": "พิมพ์เพื่อเริ่มค้นหา", "search.result.none": "ไม่พบเอกสารที่ตรงกัน", "search.result.one": "พบเอกสารที่ตรงกัน", "search.result.other": "พบ # เอกสารที่ตรงกัน", - "search.tokenizer": "[\s\-]+", "skip.link.title": "ข้ามไปที่เนื้อหา", "source.link.title": "ไปที่ Repository", "toc.title": "สารบัญ" diff --git a/material/partials/language/tr.html b/material/partials/language/tr.html index c9c0ee166..b34f99d22 100644 --- a/material/partials/language/tr.html +++ b/material/partials/language/tr.html @@ -10,12 +10,13 @@ "footer.next": "Sonraki", "meta.comments": "Yorumlar", "meta.source": "Kaynak", - "search.language": "tr", + "search.config.lang": "tr", "search.placeholder": "Ara", "search.result.placeholder": "Aramaya başlamak için yazın", "search.result.none": "Eşleşen doküman bulunamadı", "search.result.one": "1 doküman bulundu", "search.result.other": "# doküman bulundu", + "skip.link.title": "Ana içeriğe geç", "source.link.title": "Depoya git", "source.revision.date": "Son Güncelleme", "toc.title": "İçindekiler" diff --git a/material/partials/language/uk.html b/material/partials/language/uk.html index 59ff2529e..39a17c5ef 100644 --- a/material/partials/language/uk.html +++ b/material/partials/language/uk.html @@ -10,7 +10,7 @@ "footer.next": "Вперед", "meta.comments": "Коментарі", "meta.source": "Вихідний код", - "search.language": "ru", + "search.config.lang": "ru", "search.placeholder": "Пошук", "search.result.placeholder": "Розпочніть писати для пошуку", "search.result.none": "Збігів не знайдено", diff --git a/material/partials/language/zh-Hant.html b/material/partials/language/zh-Hant.html index bb1ed942b..9bd7d2e23 100644 --- a/material/partials/language/zh-Hant.html +++ b/material/partials/language/zh-Hant.html @@ -10,13 +10,13 @@ "footer.next": "下一頁", "meta.comments": "評論", "meta.source": "來源", - "search.language": "ja", + "search.config.lang": "ja", + "search.config.separator": "[\,\。]+", "search.placeholder": "搜尋", "search.result.placeholder": "鍵入以開始檢索", "search.result.none": "沒有找到符合條件的結果", "search.result.one": "找到 1 个符合條件的結果", "search.result.other": "# 個符合條件的結果", - "search.tokenizer": "[\,\。]+", "skip.link.title": "跳轉至", "source.link.title": "前往 Github 倉庫", "source.revision.date": "最後更新", diff --git a/material/partials/language/zh-TW.html b/material/partials/language/zh-TW.html index ae7a2f24f..d5fbbd41d 100644 --- a/material/partials/language/zh-TW.html +++ b/material/partials/language/zh-TW.html @@ -10,13 +10,13 @@ "footer.next": "下一頁", "meta.comments": "留言", "meta.source": "來源", - "search.language": "ja", + "search.config.lang": "ja", + "search.config.separator": "[\,\。]+", "search.placeholder": "搜尋", "search.result.placeholder": "打字進行搜尋", "search.result.none": "沒有符合的項目", "search.result.one": "找到 1 個符合的項目", "search.result.other": "找到 # 個符合的項目", - "search.tokenizer": "[\,\。]+", "skip.link.title": "跳轉到", "source.link.title": "前往倉庫", "toc.title": "本頁目錄" diff --git a/material/partials/language/zh.html b/material/partials/language/zh.html index 6e3f81c01..94689a490 100644 --- a/material/partials/language/zh.html +++ b/material/partials/language/zh.html @@ -10,13 +10,13 @@ "footer.next": "下一页", "meta.comments": "评论", "meta.source": "来源", - "search.language": "ja", + "search.config.lang": "ja", + "search.config.separator": "[\,\。]+", "search.placeholder": "搜索", "search.result.placeholder": "键入以开始搜索", "search.result.none": "没有找到符合条件的结果", "search.result.one": "找到 1 个符合条件的结果", "search.result.other": "# 个符合条件的结果", - "search.tokenizer": "[\,\。]+", "skip.link.title": "跳转至", "source.link.title": "前往 Github 仓库", "source.revision.date": "最后更新", diff --git a/material/partials/nav.html b/material/partials/nav.html index 7910bd626..0735f58ea 100644 --- a/material/partials/nav.html +++ b/material/partials/nav.html @@ -4,10 +4,10 @@