diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..60c9692f --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +.idyll +src/docs +src/src/tmp +dev +node_modules +src/src/unused diff --git a/README.md b/README.md new file mode 100644 index 00000000..03d4aa49 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# rreusser.github.io + +© 2018 Ricky Reusser. MIT License. diff --git a/a-series-of-unfortunate-things-i-programmed-one-time/images/homework-soln.jpg b/a-series-of-unfortunate-things-i-programmed-one-time/images/homework-soln.jpg new file mode 100644 index 00000000..f338cd57 Binary files /dev/null and b/a-series-of-unfortunate-things-i-programmed-one-time/images/homework-soln.jpg differ diff --git a/a-series-of-unfortunate-things-i-programmed-one-time/index.html b/a-series-of-unfortunate-things-i-programmed-one-time/index.html new file mode 100644 index 00000000..a49e22b8 --- /dev/null +++ b/a-series-of-unfortunate-things-i-programmed-one-time/index.html @@ -0,0 +1,62 @@ + + +
+ +I’ve been thinking lately about what makes good engineering. Actually, let’s be honest. As engineers, that’s not what we focus on. We get hung up on the failures—which always seem to outnumber the successes. Of course once you get out into the real world of programming for a livelihood, success is measured in terms of project completion and client satisfaction, but as easy as it is to put your head down and focus on the next ticket, that doesn’t absolve us of having to master our craft, to learn new things and better understand and utilize the old.
But I won’t try to say anything intelligent on good engineering. Instead, I’ll try to communicate the regrets that surfaced last weekend when I plugged in my old laptop and sifted through a decade-old folder called projects
.
The first thing I went looking for was one of my first major programming efforts, the result of the reason I started programming. A pretty long time ago, I came across a paper called Visual Simulation of Smoke by some pretty impressive people at Stanford. Research like this is what makes those Pixar movies possible. That you can simulate such complex dynamics from a set of simple principles fascinated me. This was about halfway through high school, so I decided to learn vector calculus and linear algebra just to make this happen.
It was a long, slow process. Timestamps indicate that I finally got something working five years later in about 2005 (Junior year of college). Frankly, I still feel pretty good about the result!
In hindsight, this shouldn’t really amount to more than a week or two of work, but learning is the process of making hindsight obvious. One way or another though, I had something special: knowledge. And experience. At this point, I had three options:
+Given my experience at the time, it’s hard to say I chose the wrong option, but let’s be clear: I chose (3), and I didn’t just slowly wade into it. I sought out complexity. I enhanced the complexity. No, seriously. I took the basic method and made it as absolutely opaque as I could. I wanted to enter it into the International Obfuscated C Code Contest:
#include<X11/Xlib.h>
+#include<math.h>
+#include<stdio.h>
+#include<unistd.h>
+#include<stdlib.h>
+#define R(x)(x)/2
+#define r(w)_(w,0)
+#define V(w)(w)*(w)
+#define _(w,Z)u[w][p+Z]
+#define p a+l*b+V(l+1)*c+b
+#define o(x,j,S)U(x,j,l-j,S)
+#define L(w,Z,z)(1-z)*(w)+z*(Z)
+#define M(Z,j)(Z>j?j:(Z<0?0:Z))
+#define T(x,j)o(c,x,o(b,x,o(a,x,j)))
+#define U(w,Z,j,x)for(w=Z;w<j;w++){x}
+#define P(j)U(d,0,3,r(9)=_(9,j O[2-d]);h=a;a=b;b=c;c=h;)
+#define I m=V(l+1);Q=M(a-F[0]-(f=(int)(a-F[0])),l);E=M(\
+b-F[1]-(g=(int)(b-F[1])),l);W=u[d]+f+O[1]*g+m*(e=(int)(\
+c-F[2]));r(d+4)=L(L(L(W[0],W[1],Q),L(W[l+1],W[l+2],Q),E\
+),L(L(W[m],W[m+1],Q),L(W[m+l+1],W[m+l+2],Q),E),M(c-F[2]-e,l));
+#define K(j)F[j]=R(R(r(j)+_(j,O[d])+_(j,O[j])+_(j,O[d]+O[j])));/*F(){..*4\
+7,f-e-e.d/c/c0e.d/c0b0b("(b(#'b($&b($&b(%%b(&$b('#b(("_.d.d.d.d.d.d.HUH?*/
+int a,b,c,d,e,f,g,h,i,j,k=1,l,m,Y;double Q,E,*u[012],F[3],*W;char*X,t[99];
+int main(int S,char**v){Y=**++v-48;l=atoi(*(v-2+S));Display*q=XOpenDisplay
+(0);Window H=RootWindow(q,0);if(S==02)l=(b=getchar())==9?80:b,S-=b==9;if(S
+!=2||b==9)putchar(l);GC G=XCreateGC(q,H,0,0);int O[3]={1,l+1,V(l+1)};U(a,0
+,10,u[a]=calloc(O[1]*V(l+1),8);)H=XCreateSimpleWindow(q,H,0,0,l*Y,l*Y,0,0,
+0);if(S-1){T(0,if(V(b-2)+V(c-R(l))+V(a-R(l))<V(l/10)){r(3)=r(7)=0.02;r(1)=
+7;})}else{U(e,0,22,gets(t);)X=t;while(k<=1948){S=!S;U(m,0,*X-33,U(e,044,44
+,j=k%80+(l/2-k/80)*O[1]-(p)+e*V(l+1);_(7,j)=_(3,j)=S*0.1;)k++;)X++;}T(0,if
+(a<40&&(Q=r(3))){a=80-a;r(3)=Q;a=80-a;})S=1;}XMapWindow(q,H);while(G){U(a,
+0,l,U(b,0,l,if(S-2){Q=0;U(c,0,l,E=0;f=a;g=b;e=c;while(f&&g-l&&e-l){E+=_(03
+,f--+g++*O[1]-(p)+(e+=S==1)*V(l+1));}Q+=r(3)*exp(-E*0.97e2);)e=(M(Q*015410
+,0377));putchar(e);}else{e=getchar();}XSetForeground(q,G,e|e<<8|e<<020|e<<
+24);U(f,0,Y,U(g,0,Y,XDrawPoint(q,H,G,a*Y+f,(l-b-1)*Y+g);))))if(S-2){i=1,j=
+0,k=2;T(0,if(b>2)r(1)+=(r(3)+_(3,l+1))*3.5/(1+4*(S==1));if(b<3){d=b;b=l-2+
+(d==1);r(d)=_(d,-l-1);b=d;})U(d,0,3,h=k;k=j;j=i;i=h;U(c,1,l-(k!=2),U(b,1,l
+-(j!=2),U(a,1,l-(i!=2),F[d]=r(d);K(j)K(i)I))))T(1,U(d,0,3,F[d]=R(r(d)+_(d,
+O[d]));)I)T(0,r(8)=0;U(d,0,3,r(8)+=_(4+d,O[d])-r(4+d);))f=80;while(f--){U(
+a,0,l,U(b,0,l,c=0;P()c=l-1;P(-)))T(1,Q=-r(8);U(d,0,3,Q+=_(9,O[d])+_(9,-O[d
+]);)r(9)+=0117*(Q/6-r(9))/0620;)}T(1,U(d,0,3,if(a)r(d)=r(d+4)-r(9)+_(011,-
+O[d]);))W=u[3],u[3]=u[7],u[7]=W;}if(S-2)putchar(05);else{if(getchar()-05){
+rewind(stdin);getchar();}}usleep(9<<9);}}
This has basically all the features of the video above, except it’s dramatically less useful. I even RLE-encoded the University of Michigan ‘M’ on line 22 and a small part of line 21. It has a X-Windows interface. It doesn’t run correctly unless line 1 starts with a tab.
So am I proud of this code? Yeah, a little. (It’s on github by the way.) But that’s vastly outweighed by the regret I have over not having used this period of my life more effectively. It’s likely I may never again have the combination of time, motivation, and inspiration that it takes to dive so deep into this particular confluence of math, science, and programming.
Actually, I went a bit farther. The next stop on this journey through my time capsule was into the pejoratively named field of Colorful Fluid Dynamics (CFD) (not to be confused with the more useful field of Computational Fluid Dynamics). Colorful Fluid Dynamics is what you get when you leave behind rigor and accuracy and just try to make pretty pictures.
In 2006, I got my Incomplete LU-Preconditioned Bi-Conjugate Gradient Stabilized (ILU-Preconditioned BiCG-Stab) solver working and used it to solve Laplace’s equation (think: stretched membrane) on a two-dimensional finite volume grid. I’m pretty certain it remains the most complicated thing I’ve ever programmed successfully, but by the time I finally got it working, I was so exhausted and burned out on my search for complexity that the rest of my career in Aerospace Engineering was really just a slow coming-to-terms with the fact that I no longer wanted anything to do with it.
I found the complexity I was looking for, but it didn’t have the meaning I’d hoped for.
I’m not trying to bash all my old projects. I learned a lot. I made some things I’m proud of. But for such a large amount of effort, there are so many ways I could’ve put this effort and energy to better use. So has anything changed? I’d definitely say so—at least I like to think I’m finally failing less—but for someone who codes full-time now, it’s hard to look at my github page and convince myself that I’m actually doing a better job of integrating meaningfully into a larger community of developers. Of course to be frank, that’s not the goal I’m after anyway. Tools are fun to use, learn, and create, but they’re not inherently meaningful. They are means to an end. So my real goal?
And frankly, I think I’ve been doing a pretty poor job. But I’m trying real hard.
1) { ";var h=e.schema.items&&e.schema.items.type,m=Array.isArray(h);if(!h||"object"==h||"array"==h||m&&(h.indexOf("object")>=0||h.indexOf("array")>=0))s+=" outer: for (;i--;) { for (j = i; j--;) { if (equal("+d+"[i], "+d+"[j])) { "+p+" = false; break outer; } } } ";else{s+=" var itemIndices = {}, item; for (;i--;) { var item = "+d+"[i]; ";var b="checkDataType"+(m?"s":"");s+=" if ("+e.util[b](h,"item",!0)+") continue; ",m&&(s+=" if (typeof item == 'string') item = '\"' + item; "),s+=" if (typeof itemIndices[item] == 'number') { "+p+" = false; j = itemIndices[item]; break; } itemIndices[item] = i; } "}s+=" } ",f&&(s+=" } "),s+=" if (!"+p+") { ";var g=g||[];g.push(s),s="",!1!==e.createErrors?(s+=" { keyword: 'uniqueItems' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { i: i, j: j } ",!1!==e.opts.messages&&(s+=" , message: 'should NOT have duplicate items (items ## ' + j + ' and ' + i + ' are identical)' "),e.opts.verbose&&(s+=" , schema: ",s+=f?"validate.schema"+u:""+a,s+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+d+" "),s+=" } "):s+=" {} ";var y=s;s=g.pop(),!e.compositeRule&&c?e.async?s+=" throw new ValidationError(["+y+"]); ":s+=" validate.errors = ["+y+"]; return false; ":s+=" var err = "+y+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",s+=" } ",c&&(s+=" else { ")}else c&&(s+=" if (true) { ");return s}},{}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/ajv/lib/dotjs/validate.js":[function(e,r,t){"use strict";r.exports=function(e,r,t){function $shouldUseGroup(e){for(var r=e.rules,t=0;t At Standard Cyborg, we use 3D scans from a number of different sources to design sockets for prosthetic devices (btw we’re always hiring if this stuff interests you). Even in the best of circumstances in which we’re able to keep track of the physical “up” direction from acquisition through to the design phase, “physical up” isn’t really a useful direction since the limb could have been in any orientation during scanning (or any orientation relative to the scanner). We’d like to automatically orient incoming scans vertically so that they’re easy to work with. Working with 3D models isn’t exactly new territory. Before throwing math at this, we should stop to consider whether a nice arcball camera (or—shudder—x/y/z rotation handles!) would allow users to orient scans as they see fit, removing orientation as any concern of ours. We know so much about this problem though! In a broad sense, we know what the scans look like and how users will be modifying them, and we know that even the most grizzled power users find extra degrees of rotational freedom cumbersome and frustrating when they’re not required for the task at hand. At the very worst, we find automatic alignment a great preprocessing step that helps users, doesn’t hurt what’s already arbitrary, and in many cases nails it right away. The question remains then what alignment could possibly mean. There are an infinite number of valid meanings and corresponding solutions. The solution I describe here only addresses a particular meaning that happens to solve our little micro-problem quite well. It’s not new or novel—an alternate title for this article was “In which I discover the ellipsoid!”—and I’m only taking the trouble to describe it because I was so delighted to pick a heuristic out of the sky, find cause to break out some math, and actually end up with a function which runs robustly in a couple milliseconds. Most of the scans for which people use our software (and limbs in general, really) are basically cylindrical tubes so that the longest axis makes a decent first cut for orienting the scan. This orientation seems friendlier than what we started with, but it doesn’t take long to spot some problems. For one, we haven’t said anything about how to actually compute the longest axis (Principal Component Analysis (PCA) feels relevant?). More importantly though, if the scan had roughly equal proportions, the longest axis would be entirely arbitrary even for a cylinder with plainly obvious orientation. Failure of this basic sanity check suggests the overall orientation of these scans isn’t so much defined by the position of the surface as by its orientation. Without agonizing over why, I decided a better option would be to select an alignment axis as perpendicular as possible to the surface normals. Hazarding a guess at stating that mathematically, I’d call that the axis which minimizes the sum of the squares of the dot products of the alignment axis with the surface normal vectors. The statement above is a mouthful which requires a bit of unpacking. If we’re going to tackle this as a minimization problem, we at least know we’ll need to roll up the ideas above into an objective function. Let’s start with the dot products. Recall the dot product between vectors and is equal to where and are the magnitudes of the two vectors, respectively, and is the angle between them. All we really need to know here is that if two vectors are perpendicular, their dot product is zero. We can talk about a single surface normal vector, but somehow we need to aggregate information across all faces. Let’s call a surface normal vector of the mesh face and a candidate axis of alignment (the Greek letter “xi”, pronounced ”ksee″, which I’m selecting because it’s fun to write, isn’t likely to get confused with anything, and is fun to call “tornado” instead). My supposition is that if we dot the two, square the result, sum over the faces and call it , i.e. then the best alignment is the one which minimizes . We might have a reasonable objective function here, but to see why it feels like it should work, consider a cylinder. The axis of the cylinder is always perpendicular to the surface normal vectors. Assuming for simplicity that the vectors are all normalized, then the magnitudes drop out and . The axis of a cylinder minimizes even when it’s not the longest axis, thus fixing the failed sanity check above. (If you want to be fancy, I think you could say we’re solving the same principal axis problem but in the tangent space instead, though I don’t think that interpretation is likely to help most people.) (Why the square? On a strictly mathematical basis, the dot product may be either positive or negative which would cause the minimization to diverge to . The square keeps non-negative so that we can meaningfully minimize it.) A bit more precisely, if the faces comprising the mesh aren’t uniformly distributed, the sum will be biased toward clusters of vertices and their associated normals. Instead of a sum over normal vectors , what we really want is an area-weighted sum. In fact what we really want is just an integral over the surface (call it ) with respect to the differential area vector (call it ). We define as parallel to the surface normal but with magnitude equal to the area of a differential surface element. The continuous limit of is then While we’re being precise, we assumed implicity that the axis of alignment was a nonzero vector, but let’s now make that explicit in order to avoid the trivial solution which always minimizes . Constraining to be a unit vector will do just fine. Fully stating our problem, we want to find the argument which minimizes subject to the constraint that is a unit vector: For piecewise constant faces with surface normal (magnitude equal to the face’s area, recall), we can recast this as a discrete summation and arrive at our final problem statement, As for the areas, Eric Arnebäck has a nice article about Computing the Area of a Convex Polygon. It covers triangles. And for you geometry sorcerers and sorceresses, the answer is yes. We’re fitting an ellipsoid now. The rest of the article is me realizing I’m looking for an ellipsoid. The problem above is a constrained optimization problem. Those can be a bit challenging to solve since you often only want to explore the solution space in directions which keep the constraints satisfied. It took me a while to recall, but if I learned one thing about constrained optimization in engineering (sadly I didn’t learn much more), I learned that the method of Lagrange multipliers exists to transform constrained optimization problems into unconstrained problems. The method works like this. Instead solving the problem we solve the problem where is an auxiliary parameter (the “Lagrange multiplier”) that drives objective function toward satisfying the constraint. With just a bit of handwaving, we can demonstrate that setting the partial derivatives of equal to zero yields which confirms the constraint is satisfied, and with the final leap of faith equality to zero taken since is a stationary point. This step then enforces the original objective function, though I haven’t adequately justified it here. Wikipedia actually has a pretty good explanation which I’d be foolish to try to outdo. It only takes the tiniest modification to state our problem in the canonical form of a Lagrange-multiplier-ready problem, Applying the method, we arrive at the unconstrained problem Taking the partial derivatives with respect to , , and as well as and equating to zero isn’t particularly tedious. The result is a system of four simultaneous equations, It suddenly feels hopeless, especially since the fourth equation is a bit nonlinear in . Let’s cut down on the visual noise by defining as well as the analogous definitions for all pairwise combinations of axes. With these definitions, the above equation looks a bit more manageable, yielding Neglecting the last equation for a moment, we can state the first three as a matrix multiplication, This is just the standard form of an eigenvalue problem, and what’s more, its eigenvectors are normalized by convention, which implicitly satisfies the constraint . Eigenvalues are simple and easy to compute, even in JavaScript. We’ve solved it! Upon solving, we get three eigenvalues and corresponding unit eigenvectors which are identically the model axes and associated inverse strengths along the respective eigenvectors. As a final bonus, recall—or discover today!—that the eigenvalues of a symmetric positive-definite matrix are real and orthogonal, i.e. mutually perpendicular. And there are three of them. So we don’t just get unit vectors out of this, we get a three dimensional rotation matrix which can be applied directly to the model. Wonderfully! Robustly! Efficiently! The only nontrivial numerical part is the eigenvalue computation, but it’s only a small 3x3 matrix you can farm out to any old numerial library. The main caveat is that eigenvalues are only unique up to a sign so that we need to check for reflections and apply some slightly ad-hoc heuristics to disambiguate the sign. In particular, I’m just using the total summed area vector to see if we can put the open end in a consistent direction. There’s room for improvement. You can see the final result below. Note that the two remaining axes also align the knee! Update: Eric Arnebäck asked about noise. I’ve added a noise slider below and have removed a square root in the scaling so that the magnitudes are a bit more separated. The noise is not IID noise so take it with a grain of salt, but it hopefully gives some indication of the approach’s ability to reject noise. At the end of the day, I rather suspect I’ve rederived a pretty standard technique for talking about the shape of a surface. I hope you’ll forgive me if my satisfaction isn’t diminished though since opportunities to legitimately break out Lagrange multipliers are so rare! And as part of my day job no less. There’s room for improvement in the final disambiguation of signs, but frankly once we’ve solved the main problem of figuring out a rough alignment, the subsequent algorithms have a significantly easier time making sense of the scan. This post uses idyll and regl. They’re great projects! You should check them out! You can find the article source here and an implementation of the algorithm here. Questions? Comments? Corrections? Drop me a line @rickyreusser! 1) { ";var h=e.schema.items&&e.schema.items.type,m=Array.isArray(h);if(!h||"object"==h||"array"==h||m&&(h.indexOf("object")>=0||h.indexOf("array")>=0))s+=" outer: for (;i--;) { for (j = i; j--;) { if (equal("+d+"[i], "+d+"[j])) { "+p+" = false; break outer; } } } ";else{s+=" var itemIndices = {}, item; for (;i--;) { var item = "+d+"[i]; ";var b="checkDataType"+(m?"s":"");s+=" if ("+e.util[b](h,"item",!0)+") continue; ",m&&(s+=" if (typeof item == 'string') item = '\"' + item; "),s+=" if (typeof itemIndices[item] == 'number') { "+p+" = false; j = itemIndices[item]; break; } itemIndices[item] = i; } "}s+=" } ",f&&(s+=" } "),s+=" if (!"+p+") { ";var y=y||[];y.push(s),s="",!1!==e.createErrors?(s+=" { keyword: 'uniqueItems' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { i: i, j: j } ",!1!==e.opts.messages&&(s+=" , message: 'should NOT have duplicate items (items ## ' + j + ' and ' + i + ' are identical)' "),e.opts.verbose&&(s+=" , schema: ",s+=f?"validate.schema"+u:""+a,s+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+d+" "),s+=" } "):s+=" {} ";var g=s;s=y.pop(),!e.compositeRule&&c?e.async?s+=" throw new ValidationError(["+g+"]); ":s+=" validate.errors = ["+g+"]; return false; ":s+=" var err = "+g+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",s+=" } ",c&&(s+=" else { ")}else c&&(s+=" if (true) { ");return s}},{}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/ajv/lib/dotjs/validate.js":[function(e,t,r){"use strict";t.exports=function(e,t,r){function $shouldUseGroup(e){for(var t=e.rules,r=0;r
":l.tabReplace?r.replace(/\t/g,l.tabReplace):""}):e}function buildClassName(e,r,t){var n=r?s[r]:t,o=[e.trim()];return e.match(/\bhljs\b/)||o.push("hljs"),-1===e.indexOf(n)&&o.push(n),o.join(" ").trim()}function highlightBlock(e){var r,t,n,s,o,i=blockLanguage(e);isNotHighlighted(i)||(l.useBR?(r=document.createElementNS("http://www.w3.org/1999/xhtml","div"),r.innerHTML=e.innerHTML.replace(/\n/g,"").replace(/
/g,"\n")):r=e,o=r.textContent,n=i?highlight(i,o,!0):highlightAuto(o),t=nodeStream(r),t.length&&(s=document.createElementNS("http://www.w3.org/1999/xhtml","div"),s.innerHTML=n.value,n.value=mergeStreams(t,nodeStream(s),o)),n.value=fixMarkup(n.value),e.innerHTML=n.value,e.className=buildClassName(e.className,i,n.language),e.result={language:n.language,re:n.relevance},n.second_best&&(e.second_best={language:n.second_best.language,re:n.second_best.relevance}))}function configure(e){l=inherit(l,e)}function initHighlighting(){if(!initHighlighting.called){initHighlighting.called=!0;var e=document.querySelectorAll("pre code");r.forEach.call(e,highlightBlock)}}function initHighlightingOnLoad(){addEventListener("DOMContentLoaded",initHighlighting,!1),addEventListener("load",initHighlighting,!1)}function registerLanguage(r,t){var o=n[r]=t(e);o.aliases&&o.aliases.forEach(function(e){s[e]=r})}function listLanguages(){return t(n)}function getLanguage(e){return e=(e||"").toLowerCase(),n[e]||n[s[e]]}var r=[],t=Object.keys,n={},s={},o=/^(no-?highlight|plain|text)$/i,i=/\blang(?:uage)?-([\w-]+)\b/i,a=/((^(<[^>]+>|\t|)+|(?:\n)))/gm,u="",l={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0};return e.highlight=highlight,e.highlightAuto=highlightAuto,e.fixMarkup=fixMarkup,e.highlightBlock=highlightBlock,e.configure=configure,e.initHighlighting=initHighlighting,e.initHighlightingOnLoad=initHighlightingOnLoad,e.registerLanguage=registerLanguage,e.listLanguages=listLanguages,e.getLanguage=getLanguage,e.inherit=inherit,e.IDENT_RE="[a-zA-Z]\\w*",e.UNDERSCORE_IDENT_RE="[a-zA-Z_]\\w*",e.NUMBER_RE="\\b\\d+(\\.\\d+)?",e.C_NUMBER_RE="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",e.BINARY_NUMBER_RE="\\b(0b[01]+)",e.RE_STARTERS_RE="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",e.BACKSLASH_ESCAPE={begin:"\\\\[\\s\\S]",relevance:0},e.APOS_STRING_MODE={className:"string",begin:"'",end:"'",illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},e.QUOTE_STRING_MODE={className:"string",begin:'"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},e.PHRASAL_WORDS_MODE={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},e.COMMENT=function(r,t,n){var s=e.inherit({className:"comment",begin:r,end:t,contains:[]},n||{});return s.contains.push(e.PHRASAL_WORDS_MODE),s.contains.push({className:"doctag",begin:"(?:TODO|FIXME|NOTE|BUG|XXX):",relevance:0}),s},e.C_LINE_COMMENT_MODE=e.COMMENT("//","$"),e.C_BLOCK_COMMENT_MODE=e.COMMENT("/\\*","\\*/"),e.HASH_COMMENT_MODE=e.COMMENT("#","$"),e.NUMBER_MODE={className:"number",begin:e.NUMBER_RE,relevance:0},e.C_NUMBER_MODE={className:"number",begin:e.C_NUMBER_RE,relevance:0},e.BINARY_NUMBER_MODE={className:"number",begin:e.BINARY_NUMBER_RE,relevance:0},e.CSS_NUMBER_MODE={className:"number",begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},e.REGEXP_MODE={className:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[e.BACKSLASH_ESCAPE,{begin:/\[/,end:/\]/,relevance:0,contains:[e.BACKSLASH_ESCAPE]}]},e.TITLE_MODE={className:"title",begin:e.IDENT_RE,relevance:0},e.UNDERSCORE_TITLE_MODE={className:"title",begin:e.UNDERSCORE_IDENT_RE,relevance:0},e.METHOD_GUARD={begin:"\\.\\s*"+e.UNDERSCORE_IDENT_RE,relevance:0},e})},{}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/highlight.js/lib/languages/cpp.js":[function(e,r,t){"use strict";r.exports=function(e){var r={className:"keyword",begin:"\\b[a-z\\d_]*_t\\b"},t={className:"string",variants:[{begin:'(u8?|U)?L?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:'(u8?|U)?R"',end:'"',contains:[e.BACKSLASH_ESCAPE]},{begin:"'\\\\?.",end:"'",illegal:"."}]},n={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},s={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{"meta-keyword":"if else elif endif define undef warning error line pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},e.inherit(t,{className:"meta-string"}),{className:"meta-string",begin:/<[^\n>]*>/,end:/$/,illegal:"\\n"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},o=e.IDENT_RE+"\\s*\\(",i={keyword:"int float while private char catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignof constexpr decltype noexcept static_assert thread_local restrict _Bool complex _Complex _Imaginary atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and or not",built_in:"std string cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr",literal:"true false nullptr NULL"},a=[r,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n,t];return{aliases:["c","cc","h","c++","h++","hpp"],keywords:i,illegal:"",contains:a.concat([s,{begin:"\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\s*<",end:">",keywords:i,contains:["self",r]},{begin:e.IDENT_RE+"::",keywords:i},{variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:i,contains:a.concat([{begin:/\(/,end:/\)/,keywords:i,contains:a.concat(["self"]),relevance:0}]),relevance:0},{className:"function",begin:"("+e.IDENT_RE+"[\\*&\\s]+)+"+o,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:i,illegal:/[^\w\s\*&]/,contains:[{begin:o,returnBegin:!0,contains:[e.TITLE_MODE],relevance:0},{className:"params",begin:/\(/,end:/\)/,keywords:i,relevance:0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,t,n,r]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s]},{className:"class",beginKeywords:"class struct",end:/[{;:]/,contains:[{begin:/,end:/>/,contains:["self"]},e.TITLE_MODE]}]),exports:{preprocessor:s,strings:t,keywords:i}}}},{}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/idyll-ast/dist/cjs/ast.schema.json":[function(e,r,t){r.exports={$schema:"http://json-schema.org/draft-06/schema#",title:"AST Schema V1",description:"Structure of an AST object",type:"object",properties:{id:{desceription:"A unique identifier for the current element",type:"integer"},type:{description:"The type category of the element (component/var/derived)",type:"string",enum:["component","var","derived","textnode","data","meta"]},name:{description:"The name of the element",type:"string"},properties:{description:"The properties/attributes of the element",type:"object",patternProperties:{"^w+":{description:"Object containing data for the particular property",type:"object",properties:{type:{description:"The evaluation type of the property. Can be value/variable/expression",type:"string",enum:["value","variable","expression"]},value:{description:"Property value",type:["string","number","boolean"]}},additionalProperties:!1}}},children:{description:"The children of the element.",type:"array",items:{anyof:[{$ref:"#"},{description:"Structure for a textnode",type:"object",properties:{id:{desceription:"A unique identifier for the current element",id:"integer"},type:{description:"The type category of the element",type:"string",enum:["textnode"]},value:{description:"Text value in the textnode",type:"string"}},required:["id","type","value"],additionalProperties:!1},{description:"Structure for var and derived",type:"object",properties:{id:{desceription:"A unique identifier for the current element",id:"integer"},type:{description:"The type category of the element",type:"string",enum:["var","derived"]},properties:{name:{description:"Name of the variable",type:"object",properties:{type:{type:"string",enum:["value","variable","expression"]},value:{type:"string"}},required:["name","value"],additionalProperties:!1},value:{description:"Source for the data",type:"object",properties:{properties:{type:{type:"string",enum:["value","variable","expression"]},value:{type:"string"}}},required:["name","value"],additionalProperties:!1}},additionalProperties:!1,required:["id","type","properties"]}},{description:"Structure for data",type:"object",properties:{id:{desceription:"A unique identifier for the current element",id:"integer"},type:{description:"The type category of the element",type:"string",enum:["data"]},properties:{name:{description:"Name of the variable",type:"object",properties:{type:{type:"string",enum:["value","variable","expression"]},value:{type:"string"}},required:["type","value"],additionalProperties:!1},source:{description:"Source for the data",type:"object",properties:{properties:{type:{type:"string",enum:["value","variable","expression"]},value:{type:"string"}}},required:["type","value"],additionalProperties:!1}},required:["id","type","properties"]}}]},uniqueItems:!0}},required:["id","type"]}},{}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/idyll-ast/dist/cjs/converters/index.js":[function(e,r,t){"use strict";function convertHelper(e){var r=[];if("textnode"===e.type)return e.value;if("var"===e.type||"derived"===e.type)r=[e.type],r.push([["name",["value",e.name]],["value",["value",e.value]]]),r.push([]);else if("data"===e.type)r=["data"],r.push([["name",["value",e.name]],["source",["value",e.source]]]),r.push([]);else{r.push(e.name);var t=[];if("properties"in e&&Object.keys(e.properties).forEach(function(r){var n=[r];n.push([e.properties[r].type,e.properties[r].value]),t.push(n)}),r.push(t),"children"in e){var n=[];e.children.forEach(function(e){n.push(convertHelper(e))}),r.push(n)}}return r}function inverseConvertHelper(e,r){var t=new Object;if(t.id=++r,"string"==typeof e)t.type="textnode",t.value=e;else if(["var","derived","data","meta"].indexOf(e[0])>-1)t.type=e[0],t.properties={},e[1].forEach(function(e){t.properties[e[0]]={type:e[1][0],value:e[1][1]}});else if(t.type="component",t.name=e[0],0!==e[1].length&&(t.properties={},e[1].forEach(function(e){t.properties[e[0]]={type:e[1][0],value:e[1][1]}})),e[2]){var n=[];e[2].forEach(function(e){var t=inverseConvertHelper(e,r);r=t.id,n.push(t.data)}),t.children=n}var s=new Object;return s.id=r,s.data=t,s}var n=function(e){var r=[];return e.children&&e.children.forEach(function(e){r.push(convertHelper(e))}),r},s=function(e){var r=new Object;r.id=0,r.type="component",r.name="div",r.children=[];var t=1;return e.forEach(function(e){var n=inverseConvertHelper(e,t);t=n.id,r.children.push(n.data)}),r};r.exports={convertV1ToV2:s,convertV2ToV1:n}},{}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/idyll-ast/dist/cjs/error.js":[function(e,r,t){"use strict";function _classCallCheck(e,r){if(!(e instanceof r))throw new TypeError("Cannot call a class as a function")}function _possibleConstructorReturn(e,r){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!r||"object"!==(void 0===r?"undefined":n(r))&&"function"!=typeof r?e:r}function _inherits(e,r){if("function"!=typeof r&&null!==r)throw new TypeError("Super expression must either be null or a function, not "+(void 0===r?"undefined":n(r)));e.prototype=Object.create(r&&r.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),r&&(Object.setPrototypeOf?Object.setPrototypeOf(e,r):e.__proto__=r)}var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s=function(e){function ExtendableError(r){_classCallCheck(this,ExtendableError);var t=_possibleConstructorReturn(this,e.call(this,r));return t.name=t.constructor.name,t.message=r,t.stack=new Error(r).stack,t}return _inherits(ExtendableError,e),ExtendableError}(Error);t.InvalidParameterError=function(e){function InvalidParameterError(r){return _classCallCheck(this,InvalidParameterError),_possibleConstructorReturn(this,e.call(this,r))}return _inherits(InvalidParameterError,e),InvalidParameterError}(s),t.MalformedAstError=function(e){function MalformedAstError(r){return _classCallCheck(this,MalformedAstError),_possibleConstructorReturn(this,e.call(this,r))}return _inherits(MalformedAstError,e),MalformedAstError}(s)},{}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/idyll-ast/dist/cjs/index.js":[function(e,r,t){"use strict";function getNodesByNameHelper(e,r){var t=[].concat(e.filter(function(e){return e.name===r})),n=[];return e.forEach(function(e){y(e)&&(n=n.concat(getNodesByNameHelper(e.children,r)))}),t.concat(n)}function getNodesByTypeHelper(e,r){var t=[].concat(e.filter(function(e){return e.type===r})),n=[];return e.forEach(function(e){y(e)&&(n=n.concat(getNodesByTypeHelper(e.children,r)))}),t.concat(n)}function modifyHelper(e,r,t){return typeCheckString(r,"name"),e.map(function(e){return-1===["textnode","var","derived","data"].indexOf(e.type)&&(e=Object.assign({},e,{children:modifyHelper(b(e),r,t)})),e=S(e,r,t)})}function removeHelper(e,r){return e.filter(function(e){return T(e)!==r}).map(function(e){return g(e,removeHelper(b(e),r))})}function removeByTypeHelper(e,r){return e.filter(function(e){return E(e)!==r}).map(function(e){return g(e,removeByTypeHelper(b(e),r))})}function walkNodesHelper(e,r){(e||[]).forEach(function(e){var t=b(e);t.length>0&&walkNodesHelper(t,r),r(e)})}function walkNodesBreadthFirstHelper(e,r){var t=[];(e||[]).forEach(function(e){r(e),t=t.concat(b(e))}),t.length>0&&walkNodesBreadthFirstHelper(t,r)}function checkASTandNode(e,r){typeCheckObject(e,"ast"),typeCheckObject(r,"node"),runValidator(e,"ast"),runValidator(r,"node")}function checkASTandNodeArray(e,r){typeCheckObject(e,"ast"),typeCheckArray(r,"nodes"),r.forEach(function(e,r){typeCheckObject(e,"nodes (index: "+r+")")}),runValidator(e,"ast"),r.forEach(function(e,r){runValidator(e,"nodes (index: "+r+")")})}function checkForCreateNode(e,r,t,n,s){typeCheckInteger(e,"id"),typeCheckString(r,"name"),checkNodeType(t),checkProps(n),checkChildren(s)}function typeCheckObject(e,r){if("object"!==(void 0===e?"undefined":s(e)))throw new o.InvalidParameterError("Parameter "+r+" must be a well defined JSON object. Object: "+e)}function typeCheckInteger(e,r){if("number"!=typeof e)throw new o.InvalidParameterError("Paramter: "+r+"must be an integer.")}function typeCheckString(e,r){if("string"!=typeof e)throw new o.InvalidParameterError("Parameter"+e+"must be a string.")}function typeCheckArray(e,r){if(!Array.isArray(e))throw new InvalidParameterError("Paramter "+r+" must be an array. Object: "+param)}function typeCheckFunction(e,r){if("function"!=typeof e)throw new InvalidParameterError("Paramter "+r+" must be a Function. Function: "+e)}function checkASTandFunction(e,r,t,n){typeCheckObject(e,r),typeCheckFunction(t,n),runValidator(e,r)}function checkType(e){if(typeCheckString(e,"type"),-1===["value","expression","variable"].indexOf(e))throw new o.InvalidParameterError("Type should be a value, expression or variable")}function checkNodeType(e){if(typeCheckString(e,"type"),-1===["component","textnode","var","derived","data"].indexOf(e))throw new o.InvalidParameterError("Type should be a component, textnode, var, derived or data")}function checkProps(e){e&&(typeCheckObject(e,"props (Properties)"),runPropsValidator(e))}function checkChildren(e){e&&(typeCheckArray(e,"children"),e.forEach(function(e,r){typeCheckObject(e,"children (index: "+r+")")}),e.forEach(function(e,r){runValidator(e,"children (index: "+r+")")}))}function runValidator(e,r){if(!l(e))throw console.log("Error message from validator: "+l.errors[0].message),console.log("Error message from validator: ",l.errors[0]),new o.MalformedAstError(r+" must be well-defined and follow the AST schema. Object: "+JSON.stringify(e))}function runPropsValidator(e){if(!c(e))throw console.log("Error message from validator: "+c.errors[0].message),console.log("Error message from validator: ",c.errors[0]),new o.InvalidParameterError("Parameter props is not a well-defined JSON according to the the AST schema. Look at schema.properties.properties!")}function propertyToString(e){switch(e.type){case"value":return JSON.stringify(e.value);case"expression":return"`"+e.value+"`";case"variable":return e.value}}function propertiesToString(e){return Object.keys(e.properties||{}).reduce(function(r,t){return r+" "+t+":"+propertyToString(e.properties[t])},"").trim()}function childrenToMarkup(e,r){return(e.children||[]).reduce(function(e,t){return e+"\n"+nodeToMarkup(t,r)},"")}function nodeToMarkup(e,r){switch(e.type){case"textnode":return""+" ".repeat(r)+e.value;case"component":if("textcontainer"===e.name.toLowerCase())return"\n"+childrenToMarkup(e,r)+"\n";var t=propertiesToString(e);return y(e)?" ".repeat(r)+"["+e.name+(t?" "+t:"")+"]"+childrenToMarkup(e,r+1)+"\n"+" ".repeat(r)+"[/"+e.name+"]":" ".repeat(r)+"["+e.name+(t?" "+t:"")+" /]";case"var":case"derived":case"data":case"meta":return" ".repeat(r)+"["+e.type+" "+propertiesToString(e)+" /]"}}function toMarkup(e){return childrenToMarkup(e,0).trim()}var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s="function"==typeof Symbol&&"symbol"===n(Symbol.iterator)?function(e){return void 0===e?"undefined":n(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":void 0===e?"undefined":n(e)},o=e("./error"),i=e("ajv"),a=new i;a.addMetaSchema(e("ajv/lib/refs/json-schema-draft-06.json"));var u=e("./ast.schema.json"),l=a.compile(u),c=a.compile(u.properties.properties),d=e("./converters"),p=function(e,r){return checkASTandNode(e,r),f(e,[r])},f=function(e,r){return checkASTandNodeArray(e,r),Object.assign({},e,{children:[].concat(e.children,r)})},h=function(e,r,t){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null;checkForCreateNode(e,r,t,n,s);var o=new Object;return o.id=e,o.type=t,o.name=r,n&&(o.properties=Object.assign({},n)),s&&(o.children=Object.assign({},s)),o},m=function(e,r){typeCheckInteger(e,"id"),typeCheckString(r,"value");var t=new Object;return t.id=e,t.type="textnode",t.value=r,t},b=function(e){return typeCheckObject(e,"node (gc)"),runValidator(e,"node"),"textnode"===e.type?[]:e.children?[].concat(e.children):[]},g=function(e,r){return typeCheckObject(e,"node (sc)"),runValidator(e,"node"),["textnode","var","derived","data"].indexOf(E(e))>-1?e:(checkChildren(r),Object.assign({},e,{children:r}))},y=function(e){return typeCheckObject(e,"node (hc)"),runValidator(e,"node"),!(["textnode","var","derived","data"].indexOf(E(e))>-1)&&!(!e.children||!e.children.length)},v=function(e,r){typeCheckObject(e,"ast"),typeCheckString(r,"name"),runValidator(e,"ast");var t=[];"article"===r&&t.push(e);var n=getNodesByNameHelper(e.children,r);return t.concat(n)},x=function(e,r){typeCheckObject(e,"ast"),typeCheckString(r,"type"),runValidator(e,"ast");var t=[],n=getNodesByTypeHelper(e.children,r);return t.concat(n)},_=function(e){return!!e.type},E=function(e){return typeCheckObject(e,"node(Get type)"),runValidator(e,"node"),e.type},w=function(e){typeCheckObject(e,"node"),runValidator(e,"node");var r=[];return M(e,function(e){"textnode"===e.type&&r.push(e.value)}),r.join(" ")},A=function(e,r){checkASTandFunction(e,"ast",r,"filter");var t=[];return M(e,function(e){r(e)&&t.push(Object.assign({},e))}),t},j=function(e,r){return checkASTandFunction(e,"node",r,"modifier"),["textnode","var","derived","data"].indexOf(e.type)>-1?e:Object.assign({},e,{children:b(e).map(function(e){return r(e)})})},C=function(e,r){return checkASTandFunction(e,"node",r,"filter"),["textnode","var","derived","data"].indexOf(e.type)>-1?e:Object.assign({},e,{children:b(e).filter(function(e){return r(e)})})},k=function(e,r,t){return typeCheckString(r,"name"),checkASTandFunction(e,"ast",t,"modifier"),[e].map(function(e){return-1===["textnode","var","derived","data"].indexOf(e.type)&&(e=Object.assign({},e,{children:modifyHelper(b(e),r,t)})),e=S(e,r,t)})[0]},S=function(e,r,t){return typeCheckString(r,"name"),checkASTandFunction(e,"node",t,"modifier"),["textnode","var","derived","data"].indexOf(e.type)>-1?Object.assign({},e):(e.name&&e.name.toLowerCase()===r&&(e=t(Object.assign({},e))),Object.assign({},e))},T=function(e){return typeCheckObject(e,"node"),"component"!==e.type?e.type:e.name},P=function(e){return typeCheckObject(e,"node"),runValidator(e,"node"),Object.keys(e.properties)},F=function(e,r){return typeCheckString(r,"key"),typeCheckObject(e,"node gp"),runValidator(e,"node"),e.properties&&e.properties.hasOwnProperty(r)?e.properties[r]:null},O=function(e){return typeCheckObject(e,"node"),runValidator(e,"node"),e.properties?e.properties:null},D=function(e,r){if(checkType(r),typeCheckObject(e,"node"),runValidator(e,"node"),"string"!=typeof r&&-1===["value","expression","variable"].indexOf(r))throw new o.InvalidParameterError("Type should be a value, expression or variable");var t=[];if(e.properties)for(var n in e.properties)n.data.type===r&&t.push(n);return t},R=function(e,r){checkASTandNode(e,r),I(e,[r])},I=function(e,r){return checkASTandNodeArray(e,r),Object.assign({},e,{children:[].concat(r,b(e))})},B=function(e,r){if(typeCheckString(r,"name"),typeCheckObject(e,"ast"),runValidator(e,"ast"),y(e)){var t=b(e);e=g(e,removeHelper(t,r))}return e},U=function(e,r){if(typeCheckString(r,"type"),typeCheckObject(e,"ast"),runValidator(e,"ast"),y(e)){var t=b(e);e=g(e,removeByTypeHelper(t,r))}return e},N=function(e,r){if(typeCheckString(r,"key"),typeCheckObject(e,"node"),runValidator(e,"node"),O(e)){delete Object.assign({},e).properties.key}return newNode},$=function(e,r,t){if(typeCheckString(key,"key"),typeCheckObject(t,"data"),typeCheckObject(e,"node"),runValidator(e,"node"),"object"!==(void 0===e?"undefined":s(e)))throw new o.InvalidParameterError("Parameter ast must be a well-defined JSON object.");if(l(e))throw new o.MalformedAstError("Parameter ast needs to be a JSON structure according to the schema.");if("object"!==(void 0===t?"undefined":s(t)))throw new o.InvalidParameterError("Parameter data must be a well-defined JSON object.");if("string"!=typeof r)throw new o.InvalidParameterError("Parameter name must be a string.");var n=Object.assign({},e);return n.properties&&(n.properties[r]=t),n},L=function(e,r){if(typeCheckObject(e,"node"),runValidator(e,"node sp"),checkProps(props),"object"!==("undefined"==typeof porperties?"undefined":s(porperties)))throw new o.InvalidParameterError("Parameter paramter must be a well-defined JSON object.");if(c(r))throw new o.InvalidParameterError("Paramete props is not a well-defined JSON according to the the AST schema. Look at schema.properties.properties!");var t=Object.assign({},e);return t.properties?t.properties=Object.assign({},t.properties,r):t.properties=Object.assign({},r),t},M=function(e,r){checkASTandFunction(e,"ast",r,"f"),walkNodesHelper(e.children,r),r(e)},V=function(e,r){checkASTandFunction(e,"ast",r,"f"),r(e),walkNodesBreadthFirstHelper(e,r)};r.exports={appendNode:p,appendNodes:f,converters:d,createNode:h,createTextNode:m,filterChildren:C,filterNodes:A,getChildren:b,getNodesByName:v,getNodesByType:x,getNodeName:T,getPropertyKeys:P,getProperty:F,getProperties:O,getPropertiesByType:D,getText:w,hasType:_,getType:E,hasChildren:y,modifyChildren:j,modifyNodesByName:k,prependNode:R,prependNodes:I,removeNodesByName:B,removeNodesByType:U,removeProperty:N,setChildren:g,setProperty:$,setProperties:L,walkNodes:M,walkNodesBreadthFirst:V,toMarkup:toMarkup}},{"./ast.schema.json":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/idyll-ast/dist/cjs/ast.schema.json","./converters":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/idyll-ast/dist/cjs/converters/index.js","./error":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/idyll-ast/dist/cjs/error.js",ajv:"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/ajv/lib/ajv.js","ajv/lib/refs/json-schema-draft-06.json":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/ajv/lib/refs/json-schema-draft-06.json"}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/idyll-ast/v1/dist/cjs/index.js":[function(e,r,t){"use strict";var n=function(e,r){return s(e,[r])},s=function(e,r){return[].concat(e,r)},o=function(e){return e[0]},i=function(e,r,t){var n=[e,[],t||[]];return n=j(n,r||{})},a=function(e){if("string"==typeof e)return e},u=function(e){return"string"==typeof e?[]:"string"==typeof e[2]?[e[2]]:e[2]||[]},l=function(e){var r=[];return c(e,function(e){"string"==typeof e&&r.push(e)}),r.join(" ")},c=function walkNodes(e,r){(e||[]).forEach(function(e){walkNodes(u(e),r),r(e)})},d=function walkNodesBreadthFirst(e,r){var t=[];(e||[]).forEach(function(e){r(e),t=t.concat(u(e))}),0!==t.length&&walkNodesBreadthFirst(t,r)},p=function(e,r){var t=[];return c(e,function(e){r(e)&&t.push(e)}),t},f=function(e,r){return"string"==typeof e?e:(e[2]=u(e).map(function(e){return r(e)}),e)},h=function(e,r){
+var t=function handleNode(e,t){t[0].toLowerCase()===r.toLowerCase()&&e.push(t);var n=u(t);return n&&"string"!=typeof n?n.reduce(handleNode,e):e};return e.reduce(t,[])},m=function(e,r){return"string"==typeof e?e:(e[2]=u(e).filter(function(e){return r(e)}),e)},b=function filterNodes(e,r){return e.filter(r).map(function(e){return"string"==typeof e?e:(e[2]=filterNodes(e[2]||[],r),e)})},g=function(e,r,t){var n=function handleNode(e){return"string"==typeof e?e:(e[0].toLowerCase()===r.toLowerCase()&&(e=t(e)),e=f(e,handleNode))};return e=e.map(function(e){return n(e)})},y=function(e,r){if("string"==typeof e)return null;var t=void 0;return e[1].forEach(function(e){e[0]===r&&(t=e[1])}),t},v=function(e){return"string"==typeof e?[]:e[1]||[]},x=function(e,r){return"string"==typeof e?[]:(e[1]||[]).filter(function(e){var t=(e[0],e[1]),n=t[0];t[1];return n===r})},_=function(e,r){return E(e,[r])},E=function(e,r){return[].concat(r,e)},w=function(e,r){return b(e,function(e){return"string"==typeof e||e[0].toLowerCase()!==r.toLowerCase()})},A=function(e,r,t){if("string"==typeof e)return console.warn("Cannot setPropery on string node."),e;var n=!1,s=Array.isArray(t);return e[1]=e[1].map(function(e){return e[0]===r?(n=!0,[e[0],s?t:["value",t]]):e}),n||(e[1]=e[1].concat([[r,s?t:["value",t]]])),e},j=function(e,r){return"string"==typeof e?(console.warn("Cannot setProperties of string node."),e):(Object.keys(r).forEach(function(t){e=A(e,t,r[t])}),e)},C=function(e,r){return"string"==typeof e?(console.warn("Cannot removePropery of string node."),e):(e[1]=e[1].filter(function(e){var t=e[0];e[1];return t!==r}),e)};r.exports={appendNode:n,appendNodes:s,createNode:i,createTextNode:a,walkNodesBreadthFirst:d,getChildren:u,getNodesByName:h,filterChildren:m,filterNodes:b,modifyChildren:f,modifyNodesByName:g,getNodeName:o,getProperty:y,getProperties:v,getPropertiesByType:x,getText:l,prependNode:_,prependNodes:E,removeNodesByName:w,setProperties:j,setProperty:A,removeProperty:C,walkNodes:c,findNodes:p}},{}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/idyll-compiler/dist/cjs/grammar.js":[function(e,r,t){"use strict";!function(){function id(e){return e[0]}var e={Lexer:void 0,ParserRules:[{name:"_$ebnf$1",symbols:[]},{name:"_$ebnf$1",symbols:["_$ebnf$1","wschar"],postprocess:function(e){return e[0].concat([e[1]])}},{name:"_",symbols:["_$ebnf$1"],postprocess:function(e){return null}},{name:"__$ebnf$1",symbols:["wschar"]},{name:"__$ebnf$1",symbols:["__$ebnf$1","wschar"],postprocess:function(e){return e[0].concat([e[1]])}},{name:"__",symbols:["__$ebnf$1"],postprocess:function(e){return null}},{name:"wschar",symbols:[/[ \t\n\v\f]/],postprocess:id},{name:"Sourcefile$string$1",symbols:[{literal:"E"},{literal:"O"},{literal:"F"}],postprocess:function(e){return e.join("")}},{name:"Sourcefile",symbols:["Blocks","Sourcefile$string$1"],postprocess:function(e,r,t){return e[0]}},{name:"Blocks$ebnf$1",symbols:[]},{name:"Blocks$ebnf$1$subexpression$1$string$1",symbols:[{literal:"B"},{literal:"R"},{literal:"E"},{literal:"A"},{literal:"K"}],postprocess:function(e){return e.join("")}},{name:"Blocks$ebnf$1$subexpression$1",symbols:["Blocks$ebnf$1$subexpression$1$string$1","__"]},{name:"Blocks$ebnf$1",symbols:["Blocks$ebnf$1","Blocks$ebnf$1$subexpression$1"],postprocess:function(e){return e[0].concat([e[1]])}},{name:"Blocks$ebnf$2",symbols:[]},{name:"Blocks$ebnf$2$subexpression$1$subexpression$1$ebnf$1$subexpression$1$string$1",symbols:[{literal:"B"},{literal:"R"},{literal:"E"},{literal:"A"},{literal:"K"}],postprocess:function(e){return e.join("")}},{name:"Blocks$ebnf$2$subexpression$1$subexpression$1$ebnf$1$subexpression$1",symbols:["Blocks$ebnf$2$subexpression$1$subexpression$1$ebnf$1$subexpression$1$string$1","__"]},{name:"Blocks$ebnf$2$subexpression$1$subexpression$1$ebnf$1",symbols:["Blocks$ebnf$2$subexpression$1$subexpression$1$ebnf$1$subexpression$1"]},{name:"Blocks$ebnf$2$subexpression$1$subexpression$1$ebnf$1$subexpression$2$string$1",symbols:[{literal:"B"},{literal:"R"},{literal:"E"},{literal:"A"},{literal:"K"}],postprocess:function(e){return e.join("")}},{name:"Blocks$ebnf$2$subexpression$1$subexpression$1$ebnf$1$subexpression$2",symbols:["Blocks$ebnf$2$subexpression$1$subexpression$1$ebnf$1$subexpression$2$string$1","__"]},{name:"Blocks$ebnf$2$subexpression$1$subexpression$1$ebnf$1",symbols:["Blocks$ebnf$2$subexpression$1$subexpression$1$ebnf$1","Blocks$ebnf$2$subexpression$1$subexpression$1$ebnf$1$subexpression$2"],postprocess:function(e){return e[0].concat([e[1]])}},{name:"Blocks$ebnf$2$subexpression$1$subexpression$1",symbols:["BreakBlock","__","Blocks$ebnf$2$subexpression$1$subexpression$1$ebnf$1"]},{name:"Blocks$ebnf$2$subexpression$1",symbols:["Blocks$ebnf$2$subexpression$1$subexpression$1"]},{name:"Blocks$ebnf$2$subexpression$1$subexpression$2$ebnf$1",symbols:[]},{name:"Blocks$ebnf$2$subexpression$1$subexpression$2$ebnf$1$subexpression$1$string$1",symbols:[{literal:"B"},{literal:"R"},{literal:"E"},{literal:"A"},{literal:"K"}],postprocess:function(e){return e.join("")}},{name:"Blocks$ebnf$2$subexpression$1$subexpression$2$ebnf$1$subexpression$1",symbols:["Blocks$ebnf$2$subexpression$1$subexpression$2$ebnf$1$subexpression$1$string$1","__"]},{name:"Blocks$ebnf$2$subexpression$1$subexpression$2$ebnf$1",symbols:["Blocks$ebnf$2$subexpression$1$subexpression$2$ebnf$1","Blocks$ebnf$2$subexpression$1$subexpression$2$ebnf$1$subexpression$1"],postprocess:function(e){return e[0].concat([e[1]])}},{name:"Blocks$ebnf$2$subexpression$1$subexpression$2",symbols:["NoBreakBlock","__","Blocks$ebnf$2$subexpression$1$subexpression$2$ebnf$1"]},{name:"Blocks$ebnf$2$subexpression$1",symbols:["Blocks$ebnf$2$subexpression$1$subexpression$2"]},{name:"Blocks$ebnf$2",symbols:["Blocks$ebnf$2","Blocks$ebnf$2$subexpression$1"],postprocess:function(e){return e[0].concat([e[1]])}},{name:"Blocks$ebnf$3$subexpression$1",symbols:["BreakBlock","__"]},{name:"Blocks$ebnf$3",symbols:["Blocks$ebnf$3$subexpression$1"],postprocess:id},{name:"Blocks$ebnf$3",symbols:[],postprocess:function(e){return null}},{name:"Blocks",symbols:["Blocks$ebnf$1","Blocks$ebnf$2","Blocks$ebnf$3"],postprocess:function(e,r,t){var n=[];return e[1].forEach(function(e){n.push(e[0][0])}),e[2]&&n.push(e[2][0]),n}},{name:"Block$subexpression$1",symbols:["BreakBlock"]},{name:"Block$subexpression$1",symbols:["NoBreakBlock"]},{name:"Block",symbols:["Block$subexpression$1"],postprocess:function(e,r,t){return e[0][0]}},{name:"NoBreakBlock$subexpression$1",symbols:["Header"]},{name:"NoBreakBlock$subexpression$1",symbols:["Quote"]},{name:"NoBreakBlock$subexpression$1",symbols:["MultilineCode"]},{name:"NoBreakBlock$subexpression$1",symbols:["UnorderedList"]},{name:"NoBreakBlock$subexpression$1",symbols:["OrderedList"]},{name:"NoBreakBlock",symbols:["NoBreakBlock$subexpression$1"],postprocess:function(e,r,t){return e[0][0]}},{name:"BreakBlock$subexpression$1",symbols:["Paragraph"]},{name:"BreakBlock",symbols:["BreakBlock$subexpression$1"],postprocess:function(e,r,t){return e[0][0]}},{name:"Header$string$1",symbols:[{literal:"H"},{literal:"E"},{literal:"A"},{literal:"D"},{literal:"E"},{literal:"R"},{literal:"_"}],postprocess:function(e){return e.join("")}},{name:"Header$ebnf$1$subexpression$1",symbols:["__","ParagraphItem"]},{name:"Header$ebnf$1",symbols:["Header$ebnf$1$subexpression$1"]},{name:"Header$ebnf$1$subexpression$2",symbols:["__","ParagraphItem"]},{name:"Header$ebnf$1",symbols:["Header$ebnf$1","Header$ebnf$1$subexpression$2"],postprocess:function(e){return e[0].concat([e[1]])}},{name:"Header$string$2",symbols:[{literal:"H"},{literal:"E"},{literal:"A"},{literal:"D"},{literal:"E"},{literal:"R"},{literal:"_"},{literal:"E"},{literal:"N"},{literal:"D"}],postprocess:function(e){return e.join("")}},{name:"Header",symbols:["Header$string$1",/[1-6]/,"Header$ebnf$1","__","Header$string$2"],postprocess:function(e,r,t){var n=[];return e[2].map(function(e){n.push(e[1])}),["h"+e[1],[],n]}},{name:"Quote$string$1",symbols:[{literal:"Q"},{literal:"U"},{literal:"O"},{literal:"T"},{literal:"E"},{literal:"_"},{literal:"S"},{literal:"T"},{literal:"A"},{literal:"R"},{literal:"T"}],postprocess:function(e){return e.join("")}},{name:"Quote$ebnf$1$subexpression$1",symbols:["__","ParagraphItem"]},{name:"Quote$ebnf$1",symbols:["Quote$ebnf$1$subexpression$1"]},{name:"Quote$ebnf$1$subexpression$2",symbols:["__","ParagraphItem"]},{name:"Quote$ebnf$1",symbols:["Quote$ebnf$1","Quote$ebnf$1$subexpression$2"],postprocess:function(e){return e[0].concat([e[1]])}},{name:"Quote$string$2",symbols:[{literal:"Q"},{literal:"U"},{literal:"O"},{literal:"T"},{literal:"E"},{literal:"_"},{literal:"E"},{literal:"N"},{literal:"D"}],postprocess:function(e){return e.join("")}},{name:"Quote",symbols:["Quote$string$1","Quote$ebnf$1","__","Quote$string$2"],postprocess:function(e,r,t){var n=[];return e[1].map(function(e){n.push(e[1])}),["blockquote",[],n]}},{name:"UnorderedList$string$1",symbols:[{literal:"U"},{literal:"N"},{literal:"O"},{literal:"R"},{literal:"D"},{literal:"E"},{literal:"R"},{literal:"E"},{literal:"D"},{literal:"_"},{literal:"L"},{literal:"I"},{literal:"S"},{literal:"T"}],postprocess:function(e){return e.join("")}},{name:"UnorderedList$ebnf$1$subexpression$1",symbols:["__","ListItem"]},{name:"UnorderedList$ebnf$1",symbols:["UnorderedList$ebnf$1$subexpression$1"]},{name:"UnorderedList$ebnf$1$subexpression$2",symbols:["__","ListItem"]},{name:"UnorderedList$ebnf$1",symbols:["UnorderedList$ebnf$1","UnorderedList$ebnf$1$subexpression$2"],postprocess:function(e){return e[0].concat([e[1]])}},{name:"UnorderedList$string$2",symbols:[{literal:"L"},{literal:"I"},{literal:"S"},{literal:"T"},{literal:"_"},{literal:"E"},{literal:"N"},{literal:"D"}],postprocess:function(e){return e.join("")}},{name:"UnorderedList",symbols:["UnorderedList$string$1","UnorderedList$ebnf$1","__","UnorderedList$string$2"],postprocess:function(e,r,t){var n=[];return e[1].map(function(e){n.push(["li",[],e[1]])}),["ul",[],n]}},{name:"OrderedList$string$1",symbols:[{literal:"O"},{literal:"R"},{literal:"D"},{literal:"E"},{literal:"R"},{literal:"E"},{literal:"D"},{literal:"_"},{literal:"L"},{literal:"I"},{literal:"S"},{literal:"T"}],postprocess:function(e){return e.join("")}},{name:"OrderedList$ebnf$1$subexpression$1",symbols:["__","ListItem"]},{name:"OrderedList$ebnf$1",symbols:["OrderedList$ebnf$1$subexpression$1"]},{name:"OrderedList$ebnf$1$subexpression$2",symbols:["__","ListItem"]},{name:"OrderedList$ebnf$1",symbols:["OrderedList$ebnf$1","OrderedList$ebnf$1$subexpression$2"],postprocess:function(e){return e[0].concat([e[1]])}},{name:"OrderedList$string$2",symbols:[{literal:"L"},{literal:"I"},{literal:"S"},{literal:"T"},{literal:"_"},{literal:"E"},{literal:"N"},{literal:"D"}],postprocess:function(e){return e.join("")}},{name:"OrderedList",symbols:["OrderedList$string$1","OrderedList$ebnf$1","__","OrderedList$string$2"],postprocess:function(e,r,t){var n=[];return e[1].map(function(e){n.push(["li",[],e[1]])}),["ol",[],n]}},{name:"ListItem$string$1",symbols:[{literal:"L"},{literal:"I"},{literal:"S"},{literal:"T"},{literal:"_"},{literal:"I"},{literal:"T"},{literal:"E"},{literal:"M"}],postprocess:function(e){return e.join("")}},{name:"ListItem$ebnf$1$subexpression$1",symbols:["__","ParagraphItem"]},{name:"ListItem$ebnf$1",symbols:["ListItem$ebnf$1$subexpression$1"]},{name:"ListItem$ebnf$1$subexpression$2",symbols:["__","ParagraphItem"]},{name:"ListItem$ebnf$1",symbols:["ListItem$ebnf$1","ListItem$ebnf$1$subexpression$2"],postprocess:function(e){return e[0].concat([e[1]])}},{name:"ListItem",symbols:["ListItem$string$1","ListItem$ebnf$1"],postprocess:function(e,r,t){var n=[];return e[1].map(function(e){n.push(e[1])}),n}},{name:"MultilineCode$string$1",symbols:[{literal:"M"},{literal:"U"},{literal:"L"},{literal:"T"},{literal:"I"},{literal:"L"},{literal:"I"},{literal:"N"},{literal:"E"},{literal:"_"},{literal:"C"},{literal:"O"},{literal:"D"},{literal:"E"}],postprocess:function(e){return e.join("")}},{name:"MultilineCode$ebnf$1$subexpression$1",symbols:["__","TokenValue"]},{name:"MultilineCode$ebnf$1",symbols:["MultilineCode$ebnf$1$subexpression$1"]},{name:"MultilineCode$ebnf$1$subexpression$2",symbols:["__","TokenValue"]},{name:"MultilineCode$ebnf$1",symbols:["MultilineCode$ebnf$1","MultilineCode$ebnf$1$subexpression$2"],postprocess:function(e){return e[0].concat([e[1]])}},{name:"MultilineCode",symbols:["MultilineCode$string$1","MultilineCode$ebnf$1"],postprocess:function(e,r,t){return e[1].length>1&&""!==e[1][0][1].trim()?["CodeHighlight",[["language",["value",e[1][0][1]]]],[e[1][1][1]]]:["pre",[],[["code",[],[e[1][e[1].length-1][1]]]]]}},{name:"Paragraph$ebnf$1",symbols:[]},{name:"Paragraph$ebnf$1$subexpression$1",symbols:["ParagraphItem","__"]},{name:"Paragraph$ebnf$1",symbols:["Paragraph$ebnf$1","Paragraph$ebnf$1$subexpression$1"],postprocess:function(e){return e[0].concat([e[1]])}},{name:"Paragraph",symbols:["Paragraph$ebnf$1","ParagraphItem"],postprocess:function(e,r,t){var n=[];e[0].map(function(e){n.push(e[0])}),n.push(e[1]);var s=!1;return n=n.reduce(function(e,r){return"string"==typeof r&&s?(e[e.length-1]+=r,s=!0):"string"==typeof r?(e.push(r),s=!0):(e.push(r),s=!1),e},[]),1===n.length&&"string"!=typeof n[0]?n[0]:0===n.filter(function(e){return"string"==typeof e}).length?["_idyllContainer",[],n]:["p",[],n]}},{name:"ParagraphItem$subexpression$1",symbols:["Text"]},{name:"ParagraphItem$subexpression$1",symbols:["ClosedComponent"]},{name:"ParagraphItem$subexpression$1",symbols:["OpenComponent"]},{name:"ParagraphItem$subexpression$1",symbols:["TextInline"]},{name:"ParagraphItem",symbols:["ParagraphItem$subexpression$1"],postprocess:function(e,r,t){return e[0][0]}},{name:"Text$string$1",symbols:[{literal:"W"},{literal:"O"},{literal:"R"},{literal:"D"},{literal:"S"}],postprocess:function(e){return e.join("")}},{name:"Text",symbols:["Text$string$1","__","TokenValue"],postprocess:function(e,r,t){return e[2]}},{name:"TextInline$subexpression$1",symbols:["CodeInline"]},{name:"TextInline$subexpression$1",symbols:["BoldInline"]},{name:"TextInline$subexpression$1",symbols:["EmInline"]},{name:"TextInline$subexpression$1",symbols:["LinkInline"]},{name:"TextInline$subexpression$1",symbols:["ImageInline"]},{name:"TextInline",symbols:["TextInline$subexpression$1"],postprocess:function(e,r,t){return e[0][0]}},{name:"BoldInline$string$1",symbols:[{literal:"S"},{literal:"T"},{literal:"R"},{literal:"O"},{literal:"N"},{literal:"G"}],postprocess:function(e){return e.join("")}},{name:"BoldInline$ebnf$1$subexpression$1",symbols:["__","ParagraphItem"]},{name:"BoldInline$ebnf$1",symbols:["BoldInline$ebnf$1$subexpression$1"]},{name:"BoldInline$ebnf$1$subexpression$2",symbols:["__","ParagraphItem"]},{name:"BoldInline$ebnf$1",symbols:["BoldInline$ebnf$1","BoldInline$ebnf$1$subexpression$2"],postprocess:function(e){return e[0].concat([e[1]])}},{name:"BoldInline$string$2",symbols:[{literal:"S"},{literal:"T"},{literal:"R"},{literal:"O"},{literal:"N"},{literal:"G"},{literal:"_"},{literal:"E"},{literal:"N"},{literal:"D"}],postprocess:function(e){return e.join("")}},{name:"BoldInline",symbols:["BoldInline$string$1","BoldInline$ebnf$1","__","BoldInline$string$2"],postprocess:function(e,r,t){var n=[];return e[1].map(function(e){n.push(e[1])}),["strong",[],n]}},{name:"EmInline$string$1",symbols:[{literal:"E"},{literal:"M"}],postprocess:function(e){return e.join("")}},{name:"EmInline$ebnf$1$subexpression$1",symbols:["__","ParagraphItem"]},{name:"EmInline$ebnf$1",symbols:["EmInline$ebnf$1$subexpression$1"]},{name:"EmInline$ebnf$1$subexpression$2",symbols:["__","ParagraphItem"]},{name:"EmInline$ebnf$1",symbols:["EmInline$ebnf$1","EmInline$ebnf$1$subexpression$2"],postprocess:function(e){return e[0].concat([e[1]])}},{name:"EmInline$string$2",symbols:[{literal:"E"},{literal:"M"},{literal:"_"},{literal:"E"},{literal:"N"},{literal:"D"}],postprocess:function(e){return e.join("")}},{name:"EmInline",symbols:["EmInline$string$1","EmInline$ebnf$1","__","EmInline$string$2"],postprocess:function(e,r,t){var n=[];return e[1].map(function(e){n.push(e[1])}),["em",[],n]}},{name:"CodeInline$string$1",symbols:[{literal:"I"},{literal:"N"},{literal:"L"},{literal:"I"},{literal:"N"},{literal:"E"},{literal:"_"},{literal:"C"},{literal:"O"},{literal:"D"},{literal:"E"}],postprocess:function(e){return e.join("")}},{name:"CodeInline",symbols:["CodeInline$string$1","__","TokenValue"],postprocess:function(e,r,t){return["code",[],[e[2]]]}},{name:"ImageInline$string$1",symbols:[{literal:"I"},{literal:"M"},{literal:"A"},{literal:"G"},{literal:"E"}],postprocess:function(e){return e.join("")}},{name:"ImageInline",symbols:["ImageInline$string$1","__","TokenValue","__","TokenValue"],postprocess:function(e,r,t){return["img",[["src",["value",e[4]]],["alt",["value",e[2]]]],[]]}},{name:"LinkInline$string$1",symbols:[{literal:"L"},{literal:"I"},{literal:"N"},{literal:"K"}],postprocess:function(e){return e.join("")}},{name:"LinkInline",symbols:["LinkInline$string$1","__","TokenValue","__","TokenValue"],postprocess:function(e,r,t){return["a",[["href",["value",e[4]]]],[e[2]]]}},{name:"OpenComponent$ebnf$1",symbols:["Blocks"],postprocess:id},{name:"OpenComponent$ebnf$1",symbols:[],postprocess:function(e){return null}},{name:"OpenComponent",symbols:["OpenComponentStart","__","OpenComponent$ebnf$1","OpenComponentEnd"],postprocess:function(e,r,t){return[e[0][0],e[0][1],e[2]||[]]}},{name:"OpenComponentStart$string$1",symbols:[{literal:"O"},{literal:"P"},{literal:"E"},{literal:"N"},{literal:"_"},{literal:"B"},{literal:"R"},{literal:"A"},{literal:"C"},{literal:"K"},{literal:"E"},{literal:"T"}],postprocess:function(e){return e.join("")}},{name:"OpenComponentStart$string$2",symbols:[{literal:"C"},{literal:"L"},{literal:"O"},{literal:"S"},{literal:"E"},{literal:"_"},{literal:"B"},{literal:"R"},{literal:"A"},{literal:"C"},{literal:"K"},{literal:"E"},{literal:"T"}],postprocess:function(e){return e.join("")}},{name:"OpenComponentStart",symbols:["OpenComponentStart$string$1","__","ComponentName","__","ComponentProperties","OpenComponentStart$string$2"],postprocess:function(e,r,t){return[e[2],e[4]]}},{name:"OpenComponentEnd$string$1",symbols:[{literal:"O"},{literal:"P"},{literal:"E"},{literal:"N"},{literal:"_"},{literal:"B"},{literal:"R"},{literal:"A"},{literal:"C"},{literal:"K"},{literal:"E"},{literal:"T"}],postprocess:function(e){return e.join("")}},{name:"OpenComponentEnd$string$2",symbols:[{literal:"F"},{literal:"O"},{literal:"R"},{literal:"W"},{literal:"A"},{literal:"R"},{literal:"D"},{literal:"_"},{literal:"S"},{literal:"L"},{literal:"A"},{literal:"S"},{literal:"H"}],postprocess:function(e){return e.join("")}},{name:"OpenComponentEnd$string$3",symbols:[{literal:"C"},{literal:"L"},{literal:"O"},{literal:"S"},{literal:"E"},{literal:"_"},{literal:"B"},{literal:"R"},{literal:"A"},{literal:"C"},{literal:"K"},{literal:"E"},{literal:"T"}],postprocess:function(e){return e.join("")}},{name:"OpenComponentEnd",symbols:["OpenComponentEnd$string$1","__","OpenComponentEnd$string$2","__","ComponentName","__","OpenComponentEnd$string$3"]},{name:"ClosedComponent$string$1",symbols:[{literal:"O"},{literal:"P"},{literal:"E"},{literal:"N"},{literal:"_"},{literal:"B"},{literal:"R"},{literal:"A"},{literal:"C"},{literal:"K"},{literal:"E"},{literal:"T"}],postprocess:function(e){return e.join("")}},{name:"ClosedComponent$string$2",symbols:[{literal:"F"},{literal:"O"},{literal:"R"},{literal:"W"},{literal:"A"},{literal:"R"},{literal:"D"},{literal:"_"},{literal:"S"},{literal:"L"},{literal:"A"},{literal:"S"},{literal:"H"}],postprocess:function(e){return e.join("")}},{name:"ClosedComponent$string$3",symbols:[{literal:"C"},{literal:"L"},{literal:"O"},{literal:"S"},{literal:"E"},{literal:"_"},{literal:"B"},{literal:"R"},{literal:"A"},{literal:"C"},{literal:"K"},{literal:"E"},{literal:"T"}],postprocess:function(e){return e.join("")}},{name:"ClosedComponent",symbols:["ClosedComponent$string$1","__","ComponentName","__","ComponentProperties","ClosedComponent$string$2","__","ClosedComponent$string$3"],postprocess:function(e,r,t){return[e[2],e[4],[]]}},{name:"ComponentName$string$1",symbols:[{literal:"C"},{literal:"O"},{literal:"M"},{literal:"P"},{literal:"O"},{literal:"N"},{literal:"E"},{literal:"N"},{literal:"T"},{literal:"_"},{literal:"N"},{literal:"A"},{literal:"M"},{literal:"E"}],postprocess:function(e){return e.join("")}},{name:"ComponentName",symbols:["ComponentName$string$1","__","TokenValue"],postprocess:function(e,r,t){return e[2]}},{name:"ComponentProperties$ebnf$1",symbols:[]},{name:"ComponentProperties$ebnf$1$subexpression$1",symbols:["ComponentProperty","__"]},{name:"ComponentProperties$ebnf$1",symbols:["ComponentProperties$ebnf$1","ComponentProperties$ebnf$1$subexpression$1"],postprocess:function(e){return e[0].concat([e[1]])}},{name:"ComponentProperties",symbols:["ComponentProperties$ebnf$1"],postprocess:function(e,r,t){return e[0].map(function(e){return e[0]})}},{name:"ComponentProperty$string$1",symbols:[{literal:"C"},{literal:"O"},{literal:"M"},{literal:"P"},{literal:"O"},{literal:"N"},{literal:"E"},{literal:"N"},{literal:"T"},{literal:"_"},{literal:"W"},{literal:"O"},{literal:"R"},{literal:"D"}],postprocess:function(e){return e.join("")}},{name:"ComponentProperty$string$2",symbols:[{literal:"P"},{literal:"A"},{literal:"R"},{literal:"A"},{literal:"M"},{literal:"_"},{literal:"S"},{literal:"E"},{literal:"P"},{literal:"A"},{literal:"R"},{literal:"A"},{literal:"T"},{literal:"O"},{literal:"R"}],postprocess:function(e){return e.join("")}},{name:"ComponentProperty",symbols:["ComponentProperty$string$1","__","TokenValue","__","ComponentProperty$string$2","__","ComponentPropertyValue"],postprocess:function(e,r,t){return[e[2],e[6]]}},{name:"ComponentPropertyValue$subexpression$1$string$1",symbols:[{literal:"N"},{literal:"U"},{literal:"M"},{literal:"B"},{literal:"E"},{literal:"R"}],postprocess:function(e){return e.join("")}},{name:"ComponentPropertyValue$subexpression$1",symbols:["ComponentPropertyValue$subexpression$1$string$1"]},{name:"ComponentPropertyValue$subexpression$1$string$2",symbols:[{literal:"E"},{literal:"X"},{literal:"P"},{literal:"R"},{literal:"E"},{literal:"S"},{literal:"S"},{literal:"I"},{literal:"O"},{literal:"N"}],postprocess:function(e){return e.join("")}},{name:"ComponentPropertyValue$subexpression$1",symbols:["ComponentPropertyValue$subexpression$1$string$2"]},{name:"ComponentPropertyValue$subexpression$1$string$3",symbols:[{literal:"S"},{literal:"T"},{literal:"R"},{literal:"I"},{literal:"N"},{literal:"G"}],postprocess:function(e){return e.join("")}},{name:"ComponentPropertyValue$subexpression$1",symbols:["ComponentPropertyValue$subexpression$1$string$3"]},{name:"ComponentPropertyValue$subexpression$1$string$4",symbols:[{literal:"C"},{literal:"O"},{literal:"M"},{literal:"P"},{literal:"O"},{literal:"N"},{literal:"E"},{literal:"N"},{literal:"T"},{literal:"_"},{literal:"W"},{literal:"O"},{literal:"R"},{literal:"D"}],postprocess:function(e){return e.join("")}},{name:"ComponentPropertyValue$subexpression$1",symbols:["ComponentPropertyValue$subexpression$1$string$4"]},{name:"ComponentPropertyValue$subexpression$1$string$5",symbols:[{literal:"B"},{literal:"O"},{literal:"O"},{literal:"L"},{literal:"E"},{literal:"A"},{literal:"N"}],postprocess:function(e){return e.join("")}},{name:"ComponentPropertyValue$subexpression$1",symbols:["ComponentPropertyValue$subexpression$1$string$5"]},{name:"ComponentPropertyValue",symbols:["ComponentPropertyValue$subexpression$1","__","TokenValue"],postprocess:function(e,r,t){var n=e[0][0],s=e[2];"NUMBER"===n?s=+s:"EXPRESSION"===n||"STRING"===n?s=s.substring(1,s.length-1):"BOOLEAN"===n&&(s="true"===s);var o="";return"EXPRESSION"===n?o="expression":"NUMBER"===n||"STRING"===n||"BOOLEAN"===n?o="value":"COMPONENT_WORD"===n&&(o="variable"),[o,s]}},{name:"TokenValue$string$1",symbols:[{literal:"T"},{literal:"O"},{literal:"K"},{literal:"E"},{literal:"N"},{literal:"_"},{literal:"V"},{literal:"A"},{literal:"L"},{literal:"U"},{literal:"E"},{literal:"_"},{literal:"S"},{literal:"T"},{literal:"A"},{literal:"R"},{literal:"T"}],postprocess:function(e){return e.join("")}},{name:"TokenValue$ebnf$1",symbols:[]},{name:"TokenValue$ebnf$1",symbols:["TokenValue$ebnf$1",/[^\"]/],postprocess:function(e){return e[0].concat([e[1]])}},{name:"TokenValue$string$2",symbols:[{literal:"T"},{literal:"O"},{literal:"K"},{literal:"E"},{literal:"N"},{literal:"_"},{literal:"V"},{literal:"A"},{literal:"L"},{literal:"U"},{literal:"E"},{literal:"_"},{literal:"E"},{literal:"N"},{literal:"D"}],postprocess:function(e){return e.join("")}},{name:"TokenValue",symbols:["TokenValue$string$1","__",{literal:'"'},"TokenValue$ebnf$1",{literal:'"'},"__","TokenValue$string$2"],postprocess:function(e,r,t){return e[3].join("").replace(/"/g,'"')}}],ParserStart:"Sourcefile"};void 0!==r&&void 0!==r.exports?r.exports=e:window.grammar=e}()},{}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/idyll-compiler/dist/cjs/index.js":[function(e,r,t){"use strict";var n=e("./parser"),s=e("./lexer"),o=e("./processors"),i=e("./processors/pre"),a=i.cleanNewlines,u=e("./processors/post"),l=u.hoistVariables,c=u.flattenChildren,d=u.cleanResults,p=u.makeFullWidth,f=u.wrapText,h=u.autoLinkify,m=e("idyll-ast").converters.convertV1ToV2,b=e("gray-matter");r.exports=function(e,r,t){e=o(e).pipe(a).end();var i=b(e.trim()),u=i.content;i.data;r=Object.assign({},{spellcheck:!1,smartquotes:!0,async:!0},r||{});var g=s(),y="",v=[];try{y=g(u)}catch(e){return console.warn("\nError parsing Idyll markup:\n"+e.message),new Promise(function(r,t){return t(e)})}try{v=n(u,y.tokens.join(" "),y.positions,r)}catch(e){return console.warn("\nError parsing Idyll markup:\n"+e.message),new Promise(function(r,t){return t(e)})}var x=o(v,r).pipe(l).pipe(c).pipe(p).pipe(f).pipe(d).pipe(h).end();if(x=m(x),r.postProcessors){return r.postProcessors.map(function(e){return function(r){return new Promise(function(t,n){2===e.length?e(r,function(e,r){if(e)return n(e);t(r)}):t(e(r))})}}).reduce(function(e,r,t){return e.then(function(e){return r(e)})},Promise.resolve(x))}return r.async?new Promise(function(e){return e(x)}):x}},{"./lexer":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/idyll-compiler/dist/cjs/lexer.js","./parser":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/idyll-compiler/dist/cjs/parser.js","./processors":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/idyll-compiler/dist/cjs/processors/index.js","./processors/post":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/idyll-compiler/dist/cjs/processors/post.js","./processors/pre":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/idyll-compiler/dist/cjs/processors/pre.js","gray-matter":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/gray-matter/index.js","idyll-ast":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/idyll-ast/dist/cjs/index.js"}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/idyll-compiler/dist/cjs/lexer.js":[function(e,r,t){"use strict";var n=e("lex"),s=function(e){e=e||"";var r=[];return r.push("TOKEN_VALUE_START"),r.push('"'+e.replace(/\"/g,""").replace(/\\\[/,"[").replace(/\\\]/,"]")+'"'),r.push("TOKEN_VALUE_END"),r},o=function(e){return""===e.trim()&&(e.match(/\n/g)||[]).length>1},i=null,a=function lex(e){var r=Object.assign({},{row:1,column:1,outer:!0,skipLists:!1,inComponent:!1,gotName:!1},e||{}),t=r.row,a=r.column,u=r.outer,l=r.skipLists,c=r.inComponent,d=r.gotName,p=new n(function(e){var r="\n Error lexing input, unexpected token: "+e+"\n\n Found near index "+(this.index-1)+":\n\n "+i.substring(Math.max(0,this.index-10),Math.min(this.index+10,i.length-1))+"\n ";throw new Error(r)}),f=function(e,r){return lex(Object.assign({row:t,column:a,outer:!1},r||{}))(e).tokens},h=function(e){var r=e.split("\n");t+=r.length-1,r.length>1&&(a=0),a+=r[r.length-1].length};return p.addRule(/\[\s*equation\s*([^\/\]]*)\s*\][\n\s\t]*(((?!(\[\s*equation\s*\])).)*)[\n\s\t]*\[\s*\/\s*equation\s*\]/i,function(e,r,t){if(c=!1,!this.reject)return h(e),["OPEN_BRACKET","COMPONENT_NAME"].concat(s("equation")).concat(f(r,{inComponent:!0,gotName:!0})).concat(["CLOSE_BRACKET"]).concat(["WORDS"]).concat(s(t)).concat(["OPEN_BRACKET","FORWARD_SLASH","COMPONENT_NAME"]).concat(s("equation")).concat(["CLOSE_BRACKET"])}),p.addRule(/\[\s*code\s*([^\/\]]*)\s*\][\n\s\t]*(((?!(\[\s*code\s*\])).)*)[\n\s\t]*\[\s*\/\s*code\s*\]/i,function(e,r,t){if(c=!1,!this.reject)return h(e),["OPEN_BRACKET","COMPONENT_NAME"].concat(s("code")).concat(f(r,{inComponent:!0,gotName:!0})).concat(["CLOSE_BRACKET"]).concat(["WORDS"]).concat(s(t)).concat(["OPEN_BRACKET","FORWARD_SLASH","COMPONENT_NAME"]).concat(s("code")).concat(["CLOSE_BRACKET"])}),p.addRule(/`{4}(\S*)\n(((?!````)[\s\S])+)`{4}/g,function(e,r,t){if(this.reject=c,!this.reject)return h(e),["MULTILINE_CODE"].concat(s(r)).concat(s(t.trim()))}),p.addRule(/`{3}(\S*)\n(((?!```)[\s\S])+)`{3}/g,function(e,r,t){if(this.reject=c,!this.reject)return h(e),["MULTILINE_CODE"].concat(s(r)).concat(s(t.trim()))}),p.addRule(/```(((?!```)[^\n])+)```/,function(e,r){if(this.reject=c,!this.reject)return h(e),["INLINE_CODE"].concat(s(r.trim()))}),p.addRule(/``(((?!``)[^\n])+)``/,function(e,r){if(this.reject=c,!this.reject)return h(e),["INLINE_CODE"].concat(s(r.trim()))}),p.addRule(/`([^\n\`]+)`/,function(e,r){if(this.reject=c,!this.reject)return h(e),["INLINE_CODE"].concat(s(r.trim()))}),p.addRule(/[\s\n]*(#{1,6})\s*([^\n\[]+)[\n\s]*/gm,function(e,r,t){if(!this.reject)return h(e),["BREAK","HEADER_"+r.length].concat(f(t,{skipLists:!0})).concat(["HEADER_END"])}),p.addRule(/[\s\n]*>\s*([^\n\[]+)[\n\s]*/gm,function(e,r){if(!this.reject)return h(e),["BREAK","QUOTE_START"].concat(f(r,{skipLists:!0})).concat(["QUOTE_END"])}),p.addRule(/\*\*([^\s\n][^\*]*[^\s\n])\*\*(\s*)/g,function(e,r,t){if(this.reject=c,!this.reject){h(e);var n=["STRONG"].concat(f(r,{skipLists:!0})).concat(["STRONG_END"]);return t&&(n=o(t)?n.concat(["BREAK"]):n.concat(["WORDS"]).concat(s(t))),n}}),p.addRule(/__([^\s\n][^_]*[^\s\n])__(\s*)/g,function(e,r,t){if(this.reject=c,!this.reject){h(e);var n=["STRONG"].concat(f(r,{skipLists:!0})).concat(["STRONG_END"]);return t&&(n=o(t)?n.concat(["BREAK"]):n.concat(["WORDS"]).concat(s(t))),n}}),p.addRule(/\*([^\s\n\*][^\*]*[^\s\n\*])\*(\s*)/g,function(e,r,t){if(this.reject=c,!this.reject){h(e);var n=["EM"].concat(f(r,{skipLists:!0})).concat(["EM_END"]);return t&&(n=o(t)?n.concat(["BREAK"]):n.concat(["WORDS"]).concat(s(t))),n}}),p.addRule(/_([^\s\n_][^_]*[^\s\n_])_(\s*)/g,function(e,r,t){if(this.reject=c,!this.reject){h(e);var n=["EM"].concat(f(r,{skipLists:!0})).concat(["EM_END"]);return t&&(n=o(t)?n.concat(["BREAK"]):n.concat(["WORDS"]).concat(s(t))),n}}),p.addRule(/^\s*([\-\*]\s+([^\n]*)\n)*([\-\*]\s+([^\n]*)\n?)/gm,function(e){if(this.reject=c||l,!this.reject){h(e);var r=e.trim().split("\n"),t=r.map(function(e){return/[\-\*]\s*([^\n]*)/.exec(e)[1]}),n=["BREAK","UNORDERED_LIST"];return t.forEach(function(e){n=n.concat(["LIST_ITEM"]).concat(f(e.trim()||" "))}),n.concat(["LIST_END"])}}),p.addRule(/^\s*(\d+\.\s+([^\n]*)\n)*(\d+\.\s+([^\n]*)\n?)/gm,function(e){if(this.reject=c||l,!this.reject){h(e);var r=e.trim().split("\n"),t=r.map(function(e){return/\d+\.\s*([^\n]*)/.exec(e)[1]}),n=["BREAK","ORDERED_LIST"];return t.forEach(function(e){n=n.concat(["LIST_ITEM"]).concat(f(e))}),n.concat(["LIST_END"])}}),p.addRule(/!\[([^\]]*)\]\(([^\)]*)\)/,function(e,r,t){if(this.reject=c,!this.reject)return h(e),["IMAGE"].concat(s(r)).concat(s(t))}),p.addRule(/\[([^\]]*)\]\(([^\)]*)\)/,function(e,r,t){if(this.reject=c,!this.reject)return h(e),["LINK"].concat(s(r)).concat(s(t))}),p.addRule(/(\n\s*\/\/[^\n]*|\/\/\s+[^\n]*)/,function(e){h(e)}),p.addRule(/\/(\n?[^`\*\[\/\n\]!\\\d_])*/gm,function(e){if(this.reject=c||""===e.trim(),!this.reject)return h(e),["WORDS"].concat(s(e))}),p.addRule(/(\n?[^`\*\[\/\n\]!\\\d_])+/,function(e){if(this.reject=c||""===e.trim(),!this.reject)return h(e),["WORDS"].concat(s(e))}),
+p.addRule(/[!\d\*_`]/,function(e){if(this.reject=c||""===e.trim(),!this.reject)return h(e),["WORDS"].concat(s(e))}),p.addRule(/\\[\[\]]?/,function(e){if(this.reject=c||""===e.trim(),!this.reject)return h(e),["WORDS"].concat(s(e))}),p.addRule(/\s*\n{2,}\s*/,function(e){if(this.reject=c,!this.reject)return h(e),["BREAK"]}),p.addRule(/[ \t\n]+/,function(e){h(e)}),p.addRule(/\[/,function(e){if(c=!0,!this.reject)return h(e),["OPEN_BRACKET"]}),p.addRule(/\]([ ]*)/,function(e,r){if(c=!1,d=!1,!this.reject){h(e);var t=["CLOSE_BRACKET"];return r&&(t=t.concat(["WORDS"]).concat(s(r))),t}}),p.addRule(/\//,function(e){if(this.reject=!c,!this.reject)return h(e),["FORWARD_SLASH"]}),p.addRule(/true|false/,function(e){if(this.reject=!c,!this.reject)return h(e),["BOOLEAN"].concat(s(e))}),p.addRule(/[^+\-0-9:\s\/\]"'`\.]([^:\s\/\]"'`]*[^:\s\/\]"'`\.])*/,function(e){if(this.reject=!c||d,!this.reject)return d=!0,h(e),["COMPONENT_NAME"].concat(s(e))}),p.addRule(/[^+\-0-9:\s\/\]"'`\.][^:\s\/\]"'`\.]*/,function(e){if(this.reject=!c,!this.reject)return h(e),["COMPONENT_WORD"].concat(s(e))}),p.addRule(/`[^`]*`/,function(e){if(this.reject=!c,!this.reject)return h(e),["EXPRESSION"].concat(s(e))}),p.addRule(/[+\-]?[0-9]+\.?[0-9]*/,function(e){if(this.reject=!c,!this.reject)return h(e),["NUMBER"].concat(s(e))}),p.addRule(/"[^"]*"/,function(e){if(this.reject=!c,!this.reject)return h(e),["STRING"].concat(s(e))}),p.addRule(/'([^']*)'/,function(e,r){if(this.reject=!c,!this.reject)return h(e),["STRING"].concat(s('"'+r+'"'))}),p.addRule(/:/,function(e){if(this.reject=!c,!this.reject)return h(e),["PARAM_SEPARATOR"]}),p.addRule(/\s*$/,function(e){if(this.reject=!u,!this.reject)return h(e),["EOF"]}),function(e){i=e;var r=[],n=[];p.input=e.trim();for(var s=p.lex();s;)r.push(s),n.push([t,a]),s=p.lex();return{tokens:r,positions:n}}};r.exports=a},{lex:"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/lex/lexer.js"}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/idyll-compiler/dist/cjs/parser.js":[function(e,r,t){"use strict";var n=e("./grammar"),s=e("nearley");r.exports=function(e,r,t,o){o=o||{};var i=new s.Parser(n.ParserRules,n.ParserStart);try{i.feed(r)}catch(n){var a=r.substring(0,n.offset).replace(/"[^"]*"/g,"x"),u=a.match(/ /g).length,l=t[u],c="Error parsing input at line "+l[0]+", column "+l[1]+"\n\n"+e.split("\n")[l[0]-1]+"\n"+Array(Math.max(0,l[1]-2)).join(" ")+"^^^",d=new Error(c);throw d.row=l[0],d.column=l[1],d}var p=i.results;if(p.length)return p.length,p[0];throw new Error("No parse results")}},{"./grammar":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/idyll-compiler/dist/cjs/grammar.js",nearley:"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/nearley/lib/nearley.js"}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/idyll-compiler/dist/cjs/processors/index.js":[function(e,r,t){"use strict";r.exports=function(e,r){var t={pipe:function(n){return e=n(e,r),t},end:function(){return e}};return t}},{}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/idyll-compiler/dist/cjs/processors/post.js":[function(e,r,t){"use strict";function autoLinkifyHelper(e){return"string"==typeof e?hyperLinkifiedVersion(e):["a","code","pre","equation"].indexOf(f(e).toLowerCase())>-1?e:i(e,autoLinkifyHelper)}function hyperLinkifiedVersion(e){var r=getHyperLinksFromText(e);return r?seperateTextAndHyperLink(e,r):e}function seperateTextAndHyperLink(e,r){for(var t=0,n=0,s=[];t0;e[t+f]=255&i,f+=h,i/=256,l-=8);e[t+f-h]|=128*m}},{}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/is-date-object/index.js":[function(e,r,t){"use strict";var n=Date.prototype.getDay,s=function(e){try{return n.call(e),!0}catch(e){return!1}},o=Object.prototype.toString,i="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;r.exports=function(e){return"object"==typeof e&&null!==e&&(i?s(e):"[object Date]"===o.call(e))}},{}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/is-extendable/index.js":[function(e,r,t){"use strict";r.exports=function(e){return void 0!==e&&null!==e&&("object"==typeof e||"function"==typeof e)}},{}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/is-lower-case/is-lower-case.js":[function(e,r,t){"use strict";var n=e("lower-case");r.exports=function(e,r){return n(e,r)===e}},{"lower-case":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/lower-case/lower-case.js"}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/is-regex/index.js":[function(e,r,t){"use strict";var n=e("has"),s=RegExp.prototype.exec,o=Object.getOwnPropertyDescriptor,i=function(e){try{var r=e.lastIndex;return e.lastIndex=0,s.call(e),!0}catch(e){return!1}finally{e.lastIndex=r}},a=Object.prototype.toString,u="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;r.exports=function(e){if(!e||"object"!=typeof e)return!1;if(!u)return"[object RegExp]"===a.call(e);var r=o(e,"lastIndex");return!(!r||!n(r,"value"))&&i(e)}},{has:"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/has/src/index.js"}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/is-upper-case/is-upper-case.js":[function(e,r,t){"use strict";var n=e("upper-case");r.exports=function(e,r){return n(e,r)===e}},{"upper-case":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/upper-case/upper-case.js"}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/js-yaml/index.js":[function(e,r,t){"use strict";var n=e("./lib/js-yaml.js");r.exports=n},{"./lib/js-yaml.js":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/js-yaml/lib/js-yaml.js"}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/js-yaml/lib/js-yaml.js":[function(e,r,t){"use strict";function deprecated(e){return function(){throw new Error("Function "+e+" is deprecated and cannot be used.")}}var n=e("./js-yaml/loader"),s=e("./js-yaml/dumper");r.exports.Type=e("./js-yaml/type"),r.exports.Schema=e("./js-yaml/schema"),r.exports.FAILSAFE_SCHEMA=e("./js-yaml/schema/failsafe"),r.exports.JSON_SCHEMA=e("./js-yaml/schema/json"),r.exports.CORE_SCHEMA=e("./js-yaml/schema/core"),r.exports.DEFAULT_SAFE_SCHEMA=e("./js-yaml/schema/default_safe"),r.exports.DEFAULT_FULL_SCHEMA=e("./js-yaml/schema/default_full"),r.exports.load=n.load,r.exports.loadAll=n.loadAll,r.exports.safeLoad=n.safeLoad,r.exports.safeLoadAll=n.safeLoadAll,r.exports.dump=s.dump,r.exports.safeDump=s.safeDump,r.exports.YAMLException=e("./js-yaml/exception"),r.exports.MINIMAL_SCHEMA=e("./js-yaml/schema/failsafe"),r.exports.SAFE_SCHEMA=e("./js-yaml/schema/default_safe"),r.exports.DEFAULT_SCHEMA=e("./js-yaml/schema/default_full"),r.exports.scan=deprecated("scan"),r.exports.parse=deprecated("parse"),r.exports.compose=deprecated("compose"),r.exports.addConstructor=deprecated("addConstructor")},{"./js-yaml/dumper":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/js-yaml/lib/js-yaml/dumper.js","./js-yaml/exception":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/js-yaml/lib/js-yaml/exception.js","./js-yaml/loader":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/js-yaml/lib/js-yaml/loader.js","./js-yaml/schema":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/js-yaml/lib/js-yaml/schema.js","./js-yaml/schema/core":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/js-yaml/lib/js-yaml/schema/core.js","./js-yaml/schema/default_full":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/js-yaml/lib/js-yaml/schema/default_full.js","./js-yaml/schema/default_safe":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/js-yaml/lib/js-yaml/schema/default_safe.js","./js-yaml/schema/failsafe":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/js-yaml/lib/js-yaml/schema/failsafe.js","./js-yaml/schema/json":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/js-yaml/lib/js-yaml/schema/json.js","./js-yaml/type":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/js-yaml/lib/js-yaml/type.js"}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/js-yaml/lib/js-yaml/common.js":[function(e,r,t){"use strict";function isNothing(e){return void 0===e||null===e}function isObject(e){return"object"===(void 0===e?"undefined":n(e))&&null!==e}function toArray(e){return Array.isArray(e)?e:isNothing(e)?[]:[e]}function extend(e,r){var t,n,s,o;if(r)for(o=Object.keys(r),t=0,n=o.length;t1024&&(a+="? "),a+=e.dump+(e.condenseFlow?'"':"")+":"+(e.condenseFlow?"":" "),writeNode(e,r,i,!1,!1)&&(a+=e.dump,u+=a));e.tag=l,e.dump="{"+u+"}"}function writeBlockMapping(e,r,t,n){var s,i,a,u,l,c,p="",f=e.tag,h=Object.keys(t);if(!0===e.sortKeys)h.sort();else if("function"==typeof e.sortKeys)h.sort(e.sortKeys);else if(e.sortKeys)throw new o("sortKeys must be a boolean or a function");for(s=0,i=h.length;s1024,l&&(e.dump&&d===e.dump.charCodeAt(0)?c+="?":c+="? "),c+=e.dump,l&&(c+=generateNextLine(e,r)),writeNode(e,r+1,u,!0,l)&&(e.dump&&d===e.dump.charCodeAt(0)?c+=":":c+=": ",c+=e.dump,p+=c));e.tag=f,e.dump=p||"{}"}function detectType(e,r,t){var s,i,a,c,d,p;for(i=t?e.explicitTypes:e.implicitTypes,a=0,c=i.length;a");return E+=r,r.length||1}function startNewMode(e,r){var t;e.className&&(t=build(e.className,[])),e.returnBegin?E="":e.excludeBegin?(addText(r,d),E=""):E=r,t&&(d.push(t),_.push(d),d=t.children),u=Object.create(e,{parent:{value:u}})}function processBuffer(){var e=u.subLanguage?processSubLanguage():processKeywords();return E="",e}function processSubLanguage(){var e,r="string"==typeof u.subLanguage;return r&&!y[u.subLanguage]?addText(E,[]):(e=r?coreHighlight(u.subLanguage,E,!0,n,x[u.subLanguage]):autoHighlight(E,{subset:u.subLanguage.length?u.subLanguage:void 0,prefix:n}),u.relevance>0&&(w+=e.relevance),r&&(x[u.subLanguage]=e.top),[build(e.language,e.value,!0)])}function processKeywords(){var e,r,t,n,s=[];if(!u.keywords)return addText(E,s);for(e=0,u.lexemesRe.lastIndex=0,r=u.lexemesRe.exec(E);r;)addText(E.substring(e,r.index),s),n=keywordMatch(u,r),n?(w+=n[1],t=build(n[0],[]),s.push(t),addText(r[0],t.children)):addText(r[0],s),e=u.lexemesRe.lastIndex,r=u.lexemesRe.exec(E);return addText(E.substr(e),s),s}function addSiblings(e,r){for(var t,n=e.length,s=-1;++s
/;return n&&"false"!==n&&o.test(e)?e.split(o).map(function(e,r){return s.default.createElement("span",{key:r,className:"multi-line"},e)}):e};var n=e("react"),s=function(e){return e&&e.__esModule?e:{default:e}}(n)},{react:"react"}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/react-tooltip/dist/utils/nodeListToArray.js":[function(e,r,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var r=e.length;return e.hasOwnProperty?Array.prototype.slice.call(e):new Array(r).fill().map(function(r){return e[r]})}},{}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/resl/index.js":[function(e,r,t){"use strict";function raise(e){throw new Error("resl: "+e)}function checkType(e,r,t){Object.keys(e).forEach(function(e){r.indexOf(e)<0&&raise('invalid parameter "'+e+'" in '+t)})}function Loader(e,r){this.state=u,this.ready=!1,this.progress=0,this.name=e,this.cancel=r}var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s=["manifest","onDone","onProgress","onError"],o=["type","src","stream","credentials","parser"],i=["onData","onDone"],a=-1,u=0,l=1;r.exports=function(e){function getFunction(r,t){if(r in e){var n=e[r];return"function"!=typeof n&&raise('invalid callback "'+r+'"'),n}return null}function loadXHR(e){function onReadyStateChange(){if(!(o.readyState<2||c.state===l||c.state===a)){if(200!==o.status)return abort('error loading resource "'+e.name+'"');if(o.readyState>2&&c.state===u){var t;if(t="binary"===e.type?o.response:o.responseText,s.data)try{i=s.data(t)}catch(e){return abort(e)}else i=t}if(o.readyState>3&&c.state===u){if(s.done)try{i=s.done()}catch(e){return abort(e)}c.state=l}p[r]=i,c.progress=.75*c.progress+.25,c.ready=e.stream&&!!i||c.state===l,notifyProgress()}}function cancel(){c.state!==l&&c.state!==a&&(o.onreadystatechange=null,o.abort(),c.state=a)}var r=e.name,t=e.stream,n="binary"===e.type,s=e.parser,o=new XMLHttpRequest,i=null,c=new Loader(r,cancel);return o.onreadystatechange=t?onReadyStateChange:function(){4===o.readyState&&onReadyStateChange()},n&&(o.responseType="arraybuffer"),e.credentials&&(o.withCredentials=!0),o.open("GET",e.src,!0),o.send(),c}function loadElement(e,r){function handleProgress(){if(s.state===u)if(n.data)try{o=n.data(r)}catch(e){return abort(e)}else o=r}function onProgress(e){handleProgress(),p[t]=o,e.lengthComputable?s.progress=Math.max(s.progress,e.loaded/e.total):s.progress=.75*s.progress+.25,notifyProgress(t)}function onComplete(){if(handleProgress(),s.state===u){if(n.done)try{o=n.done()}catch(e){return abort(e)}s.state=l}s.progress=1,s.ready=!0,p[t]=o,removeListeners(),notifyProgress("finish "+t)}function onError(){abort('error loading asset "'+t+'"')}function removeListeners(){e.stream&&r.removeEventListener("progress",onProgress),"image"===e.type?r.addEventListener("load",onComplete):r.addEventListener("canplay",onComplete),r.removeEventListener("error",onError)}function cancel(){s.state!==l&&s.state!==a&&(s.state=a,removeListeners(),r.src="")}var t=e.name,n=e.parser,s=new Loader(t,cancel),o=r;if(e.stream&&r.addEventListener("progress",onProgress),"image"===e.type)r.addEventListener("load",onComplete);else{var i=!1,c=!1;r.addEventListener("loadedmetadata",function(){c=!0,i&&onComplete()}),r.addEventListener("canplay",function(){i=!0,c&&onComplete()})}return r.addEventListener("error",onError),e.credentials?r.crossOrigin="use-credentials":r.crossOrigin="anonymous",r.src=e.src,s}function abort(e){f!==a&&f!==l&&(f=a,m.forEach(function(e){e.cancel()}),d?d("string"==typeof e?new Error("resl: "+e):e):console.error("resl error:",e))}function notifyProgress(e){if(f!==a&&f!==l){var r=0,n=0;m.forEach(function(e){e.ready&&(n+=1),r+=e.progress}),n===m.length?(f=l,t(p)):c&&c(r/m.length,e)}}"object"===(void 0===e?"undefined":n(e))&&e||raise("invalid or missing configuration"),checkType(e,s,"config");var r=e.manifest;"object"===(void 0===r?"undefined":n(r))&&r||raise("missing manifest");var t=getFunction("onDone");t||raise("missing onDone() callback");var c=getFunction("onProgress"),d=getFunction("onError"),p={},f=u,h={text:loadXHR,binary:function(e){return loadXHR(e)},image:function(e){return loadElement(e,document.createElement("img"))},video:function(e){return loadElement(e,document.createElement("video"))},audio:function(e){return loadElement(e,document.createElement("audio"))}},m=Object.keys(r).map(function(e){function getParseFunc(e,r){if(e in t.parser){var n=t.parser[e];return"function"!=typeof n&&raise("invalid parser callback "+e+' for asset "'+e+'"'),n}return r}var t=r[e];"string"==typeof t?t={src:t}:"object"===(void 0===t?"undefined":n(t))&&t||raise('invalid asset definition "'+e+'"'),checkType(t,o,'asset "'+e+'"');var s={};return"parser"in t&&("function"==typeof t.parser?s={data:t.parser}:"object"===n(t.parser)&&t.parser?(checkType(s,i,'parser for asset "'+e+'"'),"onData"in s||raise('missing onData callback for parser in asset "'+e+'"'),s={data:getParseFunc("onData"),done:getParseFunc("onDone")}):raise('invalid parser for asset "'+e+'"')),{name:e,type:function(r,n,s){var o=s;return r in t&&(o=t[r]),n.indexOf(o)<0&&raise("invalid "+r+' "'+o+'" for asset "'+e+'", possible values: '+n),o}("type",Object.keys(h),"text"),stream:!!t.stream,credentials:!!t.credentials,src:function(r,n,s){var o=s;return r in t?o=t[r]:n&&raise("missing "+r+' for asset "'+e+'"'),"string"!=typeof o&&raise("invalid "+r+' for asset "'+e+'", must be a string'),o}("src",!0,""),parser:s}}).map(function(e){return h[e.type](e)});0===m.length&&setTimeout(function(){notifyProgress("done")},1)}},{}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/scrollmonitor/scrollMonitor.js":[function(e,r,t){"use strict";var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};!function(e,s){
+"object"==(void 0===t?"undefined":n(t))&&"object"==(void 0===r?"undefined":n(r))?r.exports=s():"function"==typeof define&&define.amd?define("scrollMonitor",[],s):"object"==(void 0===t?"undefined":n(t))?t.scrollMonitor=s():e.scrollMonitor=s()}(void 0,function(){return function(r){function e(n){if(t[n])return t[n].exports;var s=t[n]={exports:{},id:n,loaded:!1};return r[n].call(s.exports,s,s.exports,e),s.loaded=!0,s.exports}var t={};return e.m=r,e.c=t,e.p="",e(0)}([function(e,r,t){var n=t(1),s=n.isInBrowser,o=t(2),i=new o(s?document.body:null);i.setStateFromDOM(null),i.listenToDOM(),s&&(window.scrollMonitor=i),e.exports=i},function(e,r){r.VISIBILITYCHANGE="visibilityChange",r.ENTERVIEWPORT="enterViewport",r.FULLYENTERVIEWPORT="fullyEnterViewport",r.EXITVIEWPORT="exitViewport",r.PARTIALLYEXITVIEWPORT="partiallyExitViewport",r.LOCATIONCHANGE="locationChange",r.STATECHANGE="stateChange",r.eventTypes=[r.VISIBILITYCHANGE,r.ENTERVIEWPORT,r.FULLYENTERVIEWPORT,r.EXITVIEWPORT,r.PARTIALLYEXITVIEWPORT,r.LOCATIONCHANGE,r.STATECHANGE],r.isOnServer="undefined"==typeof window,r.isInBrowser=!r.isOnServer,r.defaultOffsets={top:0,bottom:0}},function(e,i,a){function o(e,r){if(!(e instanceof r))throw new TypeError("Cannot call a class as a function")}function s(e){return l?0:e===document.body?window.innerHeight||document.documentElement.clientHeight:e.clientHeight}function n(e){return l?0:e===document.body?Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.documentElement.clientHeight):e.scrollHeight}function r(e){return l?0:e===document.body?window.pageYOffset||document.documentElement&&document.documentElement.scrollTop||document.body.scrollTop:e.scrollTop}var u=a(1),l=u.isOnServer,d=u.isInBrowser,p=u.eventTypes,f=a(3),m=!1;if(d)try{var b=Object.defineProperty({},"passive",{get:function(){m=!0}});window.addEventListener("test",null,b)}catch(e){}var g=!!m&&{capture:!1,passive:!0},y=function(){function t(e,i){function h(){if(a.viewportTop=r(e),a.viewportBottom=a.viewportTop+a.viewportHeight,a.documentHeight=n(e),a.documentHeight!==u){for(l=a.watchers.length;l--;)a.watchers[l].recalculateLocation();u=a.documentHeight}}function c(){for(d=a.watchers.length;d--;)a.watchers[d].update();for(d=a.watchers.length;d--;)a.watchers[d].triggerCallbacks()}o(this,t);var a=this;this.item=e,this.watchers=[],this.viewportTop=null,this.viewportBottom=null,this.documentHeight=n(e),this.viewportHeight=s(e),this.DOMListener=function(){t.prototype.DOMListener.apply(a,arguments)},this.eventTypes=p,i&&(this.containerWatcher=i.create(e));var u,l,d;this.update=function(){h(),c()},this.recalculateLocations=function(){this.documentHeight=0,this.update()}}return t.prototype.listenToDOM=function(){d&&(window.addEventListener?(this.item===document.body?window.addEventListener("scroll",this.DOMListener,g):this.item.addEventListener("scroll",this.DOMListener,g),window.addEventListener("resize",this.DOMListener)):(this.item===document.body?window.attachEvent("onscroll",this.DOMListener):this.item.attachEvent("onscroll",this.DOMListener),window.attachEvent("onresize",this.DOMListener)),this.destroy=function(){window.addEventListener?(this.item===document.body?(window.removeEventListener("scroll",this.DOMListener,g),this.containerWatcher.destroy()):this.item.removeEventListener("scroll",this.DOMListener,g),window.removeEventListener("resize",this.DOMListener)):(this.item===document.body?(window.detachEvent("onscroll",this.DOMListener),this.containerWatcher.destroy()):this.item.detachEvent("onscroll",this.DOMListener),window.detachEvent("onresize",this.DOMListener))})},t.prototype.destroy=function(){},t.prototype.DOMListener=function(e){this.setStateFromDOM(e)},t.prototype.setStateFromDOM=function(e){var t=r(this.item),o=s(this.item),i=n(this.item);this.setState(t,o,i,e)},t.prototype.setState=function(e,r,t,n){var s=r!==this.viewportHeight||t!==this.contentHeight;if(this.latestEvent=n,this.viewportTop=e,this.viewportHeight=r,this.viewportBottom=e+r,this.contentHeight=t,s)for(var o=this.watchers.length;o--;)this.watchers[o].recalculateLocation();this.updateAndTriggerWatchers(n)},t.prototype.updateAndTriggerWatchers=function(e){for(var r=this.watchers.length;r--;)this.watchers[r].update();for(r=this.watchers.length;r--;)this.watchers[r].triggerCallbacks(e)},t.prototype.createCustomContainer=function(){return new t},t.prototype.createContainer=function(e){"string"==typeof e?e=document.querySelector(e):e&&e.length>0&&(e=e[0]);var r=new t(e,this);return r.setStateFromDOM(),r.listenToDOM(),r},t.prototype.create=function(e,r){"string"==typeof e?e=document.querySelector(e):e&&e.length>0&&(e=e[0]);var t=new f(this,e,r);return this.watchers.push(t),t},t.prototype.beget=function(e,r){return this.create(e,r)},t}();e.exports=y},function(e,r,t){function o(e,r,t){function o(e,r){if(0!==e.length)for(x=e.length;x--;)_=e[x],_.callback.call(n,r,n),_.isOne&&e.splice(x,1)}var n=this;this.watchItem=r,this.container=e,this.offsets=t?t===+t?{top:t,bottom:t}:{top:t.top||f.top,bottom:t.bottom||f.bottom}:f,this.callbacks={};for(var h=0,m=p.length;hs?o:s),Hn.current=null,s=void 0,1r?0:r)):(e.pendingCommitExpirationTime=s,e.finishedWork=t)}}function Ka(e,r){for(var t=e.return;null!==t;){switch(t.tag){case 1:var n=t.stateNode;if("function"==typeof t.type.getDerivedStateFromError||"function"==typeof n.componentDidCatch&&(null===ns||!ns.has(n)))return e=Hc(r,e),e=Ig(t,e,1073741823),na(t,e),void ya(t,1073741823);break;case 3:return e=Hc(r,e),e=he(t,e,1073741823),na(t,e),void ya(t,1073741823)}t=t.return}3===e.tag&&(t=Hc(r,e),t=he(e,t,1073741823),na(e,t),ya(e,1073741823))}function fb(e,r){var t=_t(),s=void 0;if(0==(1&r.mode))s=1073741823;else if(Wn&&!Zn)s=Yn;else{switch(t){case Et:s=1073741823;break;case wt:s=1073741822-10*(1+((1073741822-e+15)/10|0));break;case At:s=1073741822-25*(1+((1073741822-e+500)/25|0));break;case jt:case Ct:s=1;break;default:n("313")}null!==Qn&&s===Yn&&--s}return t===wt&&(0===ds||sAligning 3D scans
Choosing an axis
As perpendicular as possible
Computing it
Does it work?
Conclusions
(u=e.charCodeAt(n))||u>57){A=(46===u?o+e.slice(n+1):e.slice(n))+A,e=e.slice(0,n);break}}m&&!f&&(e=t(e,1/0));var k=p.length+e.length+A.length,S=k=0&&(t=e.slice(r+1),e=e.slice(0,r)),{type:e,name:t}})}function onRemove(e){return function(){var t=this.__on;if(t){for(var r,n=0,s=-1,i=t.length;n=0&&(this._names.splice(t,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(e){return this._names.indexOf(e)>=0}};var s={};if(e.event=null,"undefined"!=typeof document){"onmouseenter"in document.documentElement||(s={mouseenter:"mouseover",mouseleave:"mouseout"})}var i=[null];Selection.prototype=selection.prototype={constructor:Selection,select:selection_select,selectAll:selection_selectAll,filter:selection_filter,data:selection_data,enter:selection_enter,exit:selection_exit,join:selection_join,merge:selection_merge,order:selection_order,sort:selection_sort,call:selection_call,nodes:selection_nodes,node:selection_node,size:selection_size,empty:selection_empty,each:selection_each,attr:selection_attr,style:selection_style,property:selection_property,classed:selection_classed,text:selection_text,html:selection_html,raise:selection_raise,lower:selection_lower,append:selection_append,insert:selection_insert,remove:selection_remove,clone:selection_clone,datum:selection_datum,on:selection_on,dispatch:selection_dispatch};var o=0;Local.prototype=local.prototype={constructor:Local,get:function(e){for(var t=this._;!(t in e);)if(!(e=e.parentNode))return;return e[t]},set:function(e,t){return e[this._]=t},remove:function(e){return this._ in e&&delete e[this._]},toString:function(){return this._}},e.create=create,e.creator=creator,e.local=local,e.matcher=matcher,e.mouse=mouse,e.namespace=namespace,e.namespaces=r,e.clientPoint=point,e.select=select,e.selectAll=selectAll,e.selection=selection,e.selector=selector,e.selectorAll=selectorAll,e.style=styleValue,e.touch=touch,e.touches=touches,e.window=defaultView,e.customEvent=customEvent,Object.defineProperty(e,"__esModule",{value:!0})})},{}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/dot-case/dot-case.js":[function(e,t,r){"use strict";var n=e("no-case");t.exports=function(e,t){return n(e,t,".")}},{"no-case":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/no-case/no-case.js"}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/es5-ext/function/noop.js":[function(e,t,r){"use strict";t.exports=function(){}},{}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/es5-ext/object/assign/index.js":[function(e,t,r){"use strict";t.exports=e("./is-implemented")()?Object.assign:e("./shim")},{"./is-implemented":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/es5-ext/object/assign/is-implemented.js","./shim":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/es5-ext/object/assign/shim.js"}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/es5-ext/object/assign/is-implemented.js":[function(e,t,r){"use strict";t.exports=function(){var e,t=Object.assign;return"function"==typeof t&&(e={foo:"raz"},t(e,{bar:"dwa"},{trzy:"trzy"}),e.foo+e.bar+e.trzy==="razdwatrzy")}},{}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/es5-ext/object/assign/shim.js":[function(e,t,r){"use strict";var n=e("../keys"),s=e("../valid-value"),i=Math.max;t.exports=function(e,t){var r,o,a,u=i(arguments.length,2);for(e=Object(s(e)),a=function(n){try{e[n]=t[n]}catch(e){r||(r=e)}},o=1;o-1}},{}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/event-emitter/index.js":[function(e,t,r){"use strict";var n,s,i,o,a,u,l,c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},d=e("d"),p=e("es5-ext/object/valid-callable"),f=Function.prototype.apply,h=Function.prototype.call,m=Object.create,b=Object.defineProperty,y=Object.defineProperties,g=Object.prototype.hasOwnProperty,v={configurable:!0,enumerable:!1,writable:!0};n=function(e,t){var r;return p(t),g.call(this,"__ee__")?r=this.__ee__:(r=v.value=m(null),b(this,"__ee__",v),v.value=null),r[e]?"object"===c(r[e])?r[e].push(t):r[e]=[r[e],t]:r[e]=t,this},s=function(e,t){var r,s;return p(t),s=this,n.call(this,e,r=function(){i.call(s,e,r),f.call(t,this,arguments)}),r.__eeOnceListener__=t,this},i=function(e,t){var r,n,s,i;if(p(t),!g.call(this,"__ee__"))return this;if(r=this.__ee__,!r[e])return this;if(n=r[e],"object"===(void 0===n?"undefined":c(n)))for(i=0;s=n[i];++i)s!==t&&s.__eeOnceListener__!==t||(2===n.length?r[e]=n[i?0:1]:n.splice(i,1));else n!==t&&n.__eeOnceListener__!==t||delete r[e];return this},o=function(e){var t,r,n,s,i;if(g.call(this,"__ee__")&&(s=this.__ee__[e]))if("object"===(void 0===s?"undefined":c(s))){for(r=arguments.length,i=new Array(r-1),t=1;t0;e[r+f]=255&o,f+=h,o/=256,l-=8);e[r+f-h]|=128*m}},{}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/inertial-turntable-camera/index.js":[function(e,t,r){"use strict";var n=e("gl-vec3/transformMat4"),s=e("gl-vec3/rotateY"),i=e("gl-vec3/rotateX"),o=e("gl-vec3/equals"),a=e("gl-vec3/add"),u=e("gl-vec3/scaleAndAdd"),l=e("gl-vec3/copy"),c=e("gl-vec3/normalize"),d=e("gl-mat4/identity"),p=e("gl-mat4/invert"),f=e("gl-mat4/translate"),h=e("gl-mat4/scale"),m=e("gl-mat4/lookAt"),b=e("gl-mat4/perspective"),y=.5*Math.PI-1e-4,g=.5*-Math.PI+1e-4;t.exports=function(e){function storeCurrentState(){l(C.up,r.up),l(C.center,r.center),C.near=r.near,C.far=r.far,C.distance=r.distance,C.phi=r.phi,C.theta=r.theta,C.fovY=r.fovY}function paramsVectorHasChanged(){return!o(r.up,C.up)||(!o(r.center,C.center)||(r.near!==C.near||(r.far!==C.far||(r.phi!==C.phi||(r.theta!==C.theta||(r.distance!==C.distance||r.fovY!==C.fovY))))))}function applyStateChanges(){j.dPhi=r.phi-C.phi,j.dTheta=r.theta-C.theta,j.zoom=r.distance/C.distance-1,r.theta=C.theta,r.distance=C.distance,r.phi=C.phi,j.yaw=0,j.pitch=0,j.panX=0,j.panY=0,j.panZ=0,j.mouseX=0,j.mouseY=0,applyViewChanges(j)}function computeMatrices(){x.state.eye[0]=0,x.state.eye[1]=0,x.state.eye[2]=r.distance,i(x.state.eye,x.state.eye,k,-r.phi),s(x.state.eye,x.state.eye,k,r.theta),a(x.state.eye,x.state.eye,r.center),m(x.state.view,x.state.eye,r.center,r.up),b(x.state.projection,r.fovY,x.params.aspectRatio,r.near,r.far),p(x.state.viewInv,x.state.view)}function taint(){t=!0}function resize(e){x.params.aspectRatio=e,computeMatrices(),taint()}function viewIsChanging(){return Math.abs(r.zoom)>1e-4||(Math.abs(r.panX)>1e-4||(Math.abs(r.panY)>1e-4||(Math.abs(r.panZ)>1e-4||(Math.abs(r.dTheta)>1e-4||(Math.abs(r.dPhi)>1e-4||(Math.abs(r.yaw)>1e-4||(Math.abs(r.pitch)>1e-4||void 0)))))))}function zeroChanges(e){e.zoom=0,e.dTheta=0,e.dPhi=0,e.panX=0,e.panY=0,e.panZ=0,e.yaw=0,e.pitch=0}function decay(e){var t=r.panDecayTime?Math.exp(-e/r.panDecayTime/Math.LN2):0,n=r.zoomDecayTime?Math.exp(-e/r.zoomDecayTime/Math.LN2):0,s=r.rotationDecayTime?Math.exp(-e/r.rotationDecayTime/Math.LN2):0;r.zoom*=n,r.panX*=t,r.panY*=t,r.panZ*=t,r.dTheta*=s,r.dPhi*=s,r.yaw*=s,r.pitch*=s}function pan(e,t){var n=x.params.distance*Math.tan(.5*x.params.fovY)*2;return T.panX+=e*r.aspectRatio*n,T.panY+=t*n,x}function zoom(e,t,n){return T.zoom+=n,r.mouseX=e,r.mouseY=t,x}function pivot(e,t){var n=x.params.fovY;T.yaw+=e*n*r.aspectRatio,T.pitch+=t*n}function rotate(e,t){T.dTheta+=e,T.dPhi+=t}function applyViewChanges(e){var t;d(S),r.zoomAboutCursor&&(t=r.distance*Math.tan(.5*r.fovY),w[0]=e.mouseX*r.aspectRatio*t,w[1]=e.mouseY*t,w[2]=0,f(S,S,w)),w[0]=1+e.zoom,w[1]=1+e.zoom,w[2]=1,h(S,S,w),r.zoomAboutCursor&&(t=r.distance*Math.tan(.5*r.fovY),w[0]=-e.mouseX*r.aspectRatio*t,w[1]=-e.mouseY*t,w[2]=0,f(S,S,w)),S[12]-=.5*e.panX,S[13]-=.5*e.panY,n(r.center,r.center,x.state.view),n(r.center,r.center,S),n(r.center,r.center,x.state.viewInv),r.rotateAboutCenter&&l(r.rotationCenter,r.center),r.distance*=1+e.zoom;var o=r.phi;r.phi+=e.dPhi,r.phi=Math.min(y,Math.max(g,r.phi));var a=r.phi-o,p=r.theta;r.theta+=e.dTheta;var m=r.theta-p;if(s(r.center,r.center,r.rotationCenter,m-r.theta),i(r.center,r.center,r.rotationCenter,-a),s(r.center,r.center,r.rotationCenter,r.theta),0!==e.yaw||0!==e.pitch){A[0]=x.state.view[0],A[1]=x.state.view[4],A[2]=x.state.view[8],c(A,A),_[0]=x.state.view[1],_[1]=x.state.view[5],_[2]=x.state.view[9],c(_,_),E[0]=x.state.view[2],E[1]=x.state.view[6],E[2]=x.state.view[10],c(E,E);var b=Math.min(y,Math.max(g,r.phi+.5*e.pitch)),v=b-r.phi;u(r.center,r.center,A,-Math.sin(.5*e.yaw)*r.distance),u(r.center,r.center,_,-Math.sin(v)*r.distance),u(r.center,r.center,E,(2-Math.cos(.5*e.yaw)-Math.cos(v))*r.distance),r.phi=b,r.theta+=.5*e.yaw}computeMatrices(),taint()}e=e||{};var t=!0,r={aspectRatio:e.aspectRatio?e.aspectRatio:1,zoomAboutCursor:void 0===e.zoomAboutCursor||e.zoomAboutCursor,distance:void 0===e.distance?10:e.distance,phi:void 0===e.phi?0:e.phi,theta:void 0===e.theta?0:e.theta,fovY:void 0===e.fovY?Math.PI/4:e.fovY,near:void 0===e.near?.1:e.near,far:void 0===e.far?100:e.far,panDecayTime:e.panDecayTime||100,zoomDecayTime:e.zoomDecayTime||100,rotationDecayTime:e.rotationDecayTime||100,dirty:!0,up:e.up||new Float32Array([0,1,0]),center:e.center||new Float32Array(3),rotationCenter:e.rotationCenter||e.center&&e.center.slice()||new Float32Array(3),zoom:0,panX:0,panY:0,panZ:0,pitch:0,yaw:0,dTheta:0,dPhi:0,mouseX:0,mouseY:0},v=null,x={tick:function(e){if(T.zoom&&(r.zoom=T.zoom),T.dTheta&&(r.dTheta=T.dTheta),T.dPhi&&(r.dPhi=T.dPhi),T.panX&&(r.panX=T.panX),T.panY&&(r.panY=T.panY),T.panZ&&(r.panZ=T.panZ),T.yaw&&(r.yaw=T.yaw),T.pitch&&(r.pitch=T.pitch),zeroChanges(T),e){var n=r.dPhi,s=r.dTheta,i=r.zoom,o=r.panX,a=r.panY,u=r.panZ,l=r.pitch,c=r.yaw;Object.assign(r,e),void 0!==e.dPhi&&(r.dPhi+=n),void 0!==e.dTheta&&(r.dTheta+=s),void 0!==e.zoom&&(r.zoom+=i),void 0!==e.panX&&(r.panX+=o),void 0!==e.panY&&(r.panY+=a),void 0!==e.panZ&&(r.panZ+=u),void 0!==e.pitch&&(r.pitch+=l),void 0!==e.yaw&&(r.yaw+=c)}paramsVectorHasChanged()&&applyStateChanges(),viewIsChanging()?applyViewChanges(r):zeroChanges(r);var d=Date.now();null!==v&&decay(d-v),v=d,x.state.dirty=t,t=!1,storeCurrentState()},taint:taint,resize:resize,params:r,rotate:rotate,pivot:pivot,pan:pan,zoom:zoom};x.state={},x.state.projection=new Float32Array(16),x.state.viewInv=new Float32Array(16),x.state.view=new Float32Array(16),x.state.width=null,x.state.height=null,x.state.eye=new Float32Array(3);var w=new Float32Array(3),_=new Float32Array(3),A=new Float32Array(3),E=new Float32Array(3),k=new Float32Array(3),S=new Float32Array(16),C={up:new Float32Array(3),center:new Float32Array(3)};storeCurrentState();var j={},T={};return zeroChanges(T),resize(x.params.aspectRatio),x}},{"gl-mat4/identity":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/inertial-turntable-camera/node_modules/gl-mat4/identity.js","gl-mat4/invert":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/inertial-turntable-camera/node_modules/gl-mat4/invert.js","gl-mat4/lookAt":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/inertial-turntable-camera/node_modules/gl-mat4/lookAt.js","gl-mat4/perspective":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/inertial-turntable-camera/node_modules/gl-mat4/perspective.js","gl-mat4/scale":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/inertial-turntable-camera/node_modules/gl-mat4/scale.js","gl-mat4/translate":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/inertial-turntable-camera/node_modules/gl-mat4/translate.js","gl-vec3/add":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/inertial-turntable-camera/node_modules/gl-vec3/add.js","gl-vec3/copy":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/inertial-turntable-camera/node_modules/gl-vec3/copy.js","gl-vec3/equals":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/inertial-turntable-camera/node_modules/gl-vec3/equals.js","gl-vec3/normalize":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/inertial-turntable-camera/node_modules/gl-vec3/normalize.js","gl-vec3/rotateX":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/inertial-turntable-camera/node_modules/gl-vec3/rotateX.js","gl-vec3/rotateY":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/inertial-turntable-camera/node_modules/gl-vec3/rotateY.js","gl-vec3/scaleAndAdd":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/inertial-turntable-camera/node_modules/gl-vec3/scaleAndAdd.js","gl-vec3/transformMat4":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/inertial-turntable-camera/node_modules/gl-vec3/transformMat4.js"}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/inertial-turntable-camera/node_modules/gl-mat4/identity.js":[function(e,t,r){function identity(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}t.exports=identity},{}],
+"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/inertial-turntable-camera/node_modules/gl-mat4/invert.js":[function(e,t,r){function invert(e,t){var r=t[0],n=t[1],s=t[2],i=t[3],o=t[4],a=t[5],u=t[6],l=t[7],c=t[8],d=t[9],p=t[10],f=t[11],h=t[12],m=t[13],b=t[14],y=t[15],g=r*a-n*o,v=r*u-s*o,x=r*l-i*o,w=n*u-s*a,_=n*l-i*a,A=s*l-i*u,E=c*m-d*h,k=c*b-p*h,S=c*y-f*h,C=d*b-p*m,j=d*y-f*m,T=p*y-f*b,P=g*T-v*j+x*C+w*S-_*k+A*E;return P?(P=1/P,e[0]=(a*T-u*j+l*C)*P,e[1]=(s*j-n*T-i*C)*P,e[2]=(m*A-b*_+y*w)*P,e[3]=(p*_-d*A-f*w)*P,e[4]=(u*S-o*T-l*k)*P,e[5]=(r*T-s*S+i*k)*P,e[6]=(b*x-h*A-y*v)*P,e[7]=(c*A-p*x+f*v)*P,e[8]=(o*j-a*S+l*E)*P,e[9]=(n*S-r*j-i*E)*P,e[10]=(h*_-m*x+y*g)*P,e[11]=(d*x-c*_-f*g)*P,e[12]=(a*k-o*C-u*E)*P,e[13]=(r*C-n*k+s*E)*P,e[14]=(m*v-h*w-b*g)*P,e[15]=(c*w-d*v+p*g)*P,e):null}t.exports=invert},{}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/inertial-turntable-camera/node_modules/gl-mat4/lookAt.js":[function(e,t,r){function lookAt(e,t,r,s){var i,o,a,u,l,c,d,p,f,h,m=t[0],b=t[1],y=t[2],g=s[0],v=s[1],x=s[2],w=r[0],_=r[1],A=r[2];return Math.abs(m-w)<1e-6&&Math.abs(b-_)<1e-6&&Math.abs(y-A)<1e-6?n(e):(d=m-w,p=b-_,f=y-A,h=1/Math.sqrt(d*d+p*p+f*f),d*=h,p*=h,f*=h,i=v*f-x*p,o=x*d-g*f,a=g*p-v*d,h=Math.sqrt(i*i+o*o+a*a),h?(h=1/h,i*=h,o*=h,a*=h):(i=0,o=0,a=0),u=p*a-f*o,l=f*i-d*a,c=d*o-p*i,h=Math.sqrt(u*u+l*l+c*c),h?(h=1/h,u*=h,l*=h,c*=h):(u=0,l=0,c=0),e[0]=i,e[1]=u,e[2]=d,e[3]=0,e[4]=o,e[5]=l,e[6]=p,e[7]=0,e[8]=a,e[9]=c,e[10]=f,e[11]=0,e[12]=-(i*m+o*b+a*y),e[13]=-(u*m+l*b+c*y),e[14]=-(d*m+p*b+f*y),e[15]=1,e)}var n=e("./identity");t.exports=lookAt},{"./identity":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/inertial-turntable-camera/node_modules/gl-mat4/identity.js"}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/inertial-turntable-camera/node_modules/gl-mat4/perspective.js":[function(e,t,r){function perspective(e,t,r,n,s){var i=1/Math.tan(t/2),o=1/(n-s);return e[0]=i/r,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=i,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=(s+n)*o,e[11]=-1,e[12]=0,e[13]=0,e[14]=2*s*n*o,e[15]=0,e}t.exports=perspective},{}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/inertial-turntable-camera/node_modules/gl-mat4/scale.js":[function(e,t,r){function scale(e,t,r){var n=r[0],s=r[1],i=r[2];return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e[3]=t[3]*n,e[4]=t[4]*s,e[5]=t[5]*s,e[6]=t[6]*s,e[7]=t[7]*s,e[8]=t[8]*i,e[9]=t[9]*i,e[10]=t[10]*i,e[11]=t[11]*i,e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}t.exports=scale},{}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/inertial-turntable-camera/node_modules/gl-mat4/translate.js":[function(e,t,r){function translate(e,t,r){var n,s,i,o,a,u,l,c,d,p,f,h,m=r[0],b=r[1],y=r[2];return t===e?(e[12]=t[0]*m+t[4]*b+t[8]*y+t[12],e[13]=t[1]*m+t[5]*b+t[9]*y+t[13],e[14]=t[2]*m+t[6]*b+t[10]*y+t[14],e[15]=t[3]*m+t[7]*b+t[11]*y+t[15]):(n=t[0],s=t[1],i=t[2],o=t[3],a=t[4],u=t[5],l=t[6],c=t[7],d=t[8],p=t[9],f=t[10],h=t[11],e[0]=n,e[1]=s,e[2]=i,e[3]=o,e[4]=a,e[5]=u,e[6]=l,e[7]=c,e[8]=d,e[9]=p,e[10]=f,e[11]=h,e[12]=n*m+a*b+d*y+t[12],e[13]=s*m+u*b+p*y+t[13],e[14]=i*m+l*b+f*y+t[14],e[15]=o*m+c*b+h*y+t[15]),e}t.exports=translate},{}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/inertial-turntable-camera/node_modules/gl-vec3/add.js":[function(e,t,r){function add(e,t,r){return e[0]=t[0]+r[0],e[1]=t[1]+r[1],e[2]=t[2]+r[2],e}t.exports=add},{}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/inertial-turntable-camera/node_modules/gl-vec3/copy.js":[function(e,t,r){function copy(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}t.exports=copy},{}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/inertial-turntable-camera/node_modules/gl-vec3/epsilon.js":[function(e,t,r){t.exports=1e-6},{}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/inertial-turntable-camera/node_modules/gl-vec3/equals.js":[function(e,t,r){function equals(e,t){var r=e[0],s=e[1],i=e[2],o=t[0],a=t[1],u=t[2];return Math.abs(r-o)<=n*Math.max(1,Math.abs(r),Math.abs(o))&&Math.abs(s-a)<=n*Math.max(1,Math.abs(s),Math.abs(a))&&Math.abs(i-u)<=n*Math.max(1,Math.abs(i),Math.abs(u))}t.exports=equals;var n=e("./epsilon")},{"./epsilon":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/inertial-turntable-camera/node_modules/gl-vec3/epsilon.js"}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/inertial-turntable-camera/node_modules/gl-vec3/normalize.js":[function(e,t,r){function normalize(e,t){var r=t[0],n=t[1],s=t[2],i=r*r+n*n+s*s;return i>0&&(i=1/Math.sqrt(i),e[0]=t[0]*i,e[1]=t[1]*i,e[2]=t[2]*i),e}t.exports=normalize},{}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/inertial-turntable-camera/node_modules/gl-vec3/rotateX.js":[function(e,t,r){function rotateX(e,t,r,n){var s=r[1],i=r[2],o=t[1]-s,a=t[2]-i,u=Math.sin(n),l=Math.cos(n);return e[0]=t[0],e[1]=s+o*l-a*u,e[2]=i+o*u+a*l,e}t.exports=rotateX},{}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/inertial-turntable-camera/node_modules/gl-vec3/rotateY.js":[function(e,t,r){function rotateY(e,t,r,n){var s=r[0],i=r[2],o=t[0]-s,a=t[2]-i,u=Math.sin(n),l=Math.cos(n);return e[0]=s+a*u+o*l,e[1]=t[1],e[2]=i+a*l-o*u,e}t.exports=rotateY},{}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/inertial-turntable-camera/node_modules/gl-vec3/scaleAndAdd.js":[function(e,t,r){function scaleAndAdd(e,t,r,n){return e[0]=t[0]+r[0]*n,e[1]=t[1]+r[1]*n,e[2]=t[2]+r[2]*n,e}t.exports=scaleAndAdd},{}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/inertial-turntable-camera/node_modules/gl-vec3/transformMat4.js":[function(e,t,r){function transformMat4(e,t,r){var n=t[0],s=t[1],i=t[2],o=r[3]*n+r[7]*s+r[11]*i+r[15];return o=o||1,e[0]=(r[0]*n+r[4]*s+r[8]*i+r[12])/o,e[1]=(r[1]*n+r[5]*s+r[9]*i+r[13])/o,e[2]=(r[2]*n+r[6]*s+r[10]*i+r[14])/o,e}t.exports=transformMat4},{}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/is-date-object/index.js":[function(e,t,r){"use strict";var n=Date.prototype.getDay,s=function(e){try{return n.call(e),!0}catch(e){return!1}},i=Object.prototype.toString,o="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;t.exports=function(e){return"object"==typeof e&&null!==e&&(o?s(e):"[object Date]"===i.call(e))}},{}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/is-extendable/index.js":[function(e,t,r){"use strict";t.exports=function(e){return void 0!==e&&null!==e&&("object"==typeof e||"function"==typeof e)}},{}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/is-lower-case/is-lower-case.js":[function(e,t,r){"use strict";var n=e("lower-case");t.exports=function(e,t){return n(e,t)===e}},{"lower-case":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/lower-case/lower-case.js"}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/is-regex/index.js":[function(e,t,r){"use strict";var n=e("has"),s=RegExp.prototype.exec,i=Object.getOwnPropertyDescriptor,o=function(e){try{var t=e.lastIndex;return e.lastIndex=0,s.call(e),!0}catch(e){return!1}finally{e.lastIndex=t}},a=Object.prototype.toString,u="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;t.exports=function(e){if(!e||"object"!=typeof e)return!1;if(!u)return"[object RegExp]"===a.call(e);var t=i(e,"lastIndex");return!(!t||!n(t,"value"))&&o(e)}},{has:"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/has/src/index.js"}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/is-upper-case/is-upper-case.js":[function(e,t,r){"use strict";var n=e("upper-case");t.exports=function(e,t){return n(e,t)===e}},{"upper-case":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/upper-case/upper-case.js"}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/js-yaml/index.js":[function(e,t,r){"use strict";var n=e("./lib/js-yaml.js");t.exports=n},{"./lib/js-yaml.js":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/js-yaml/lib/js-yaml.js"}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/js-yaml/lib/js-yaml.js":[function(e,t,r){"use strict";function deprecated(e){return function(){throw new Error("Function "+e+" is deprecated and cannot be used.")}}var n=e("./js-yaml/loader"),s=e("./js-yaml/dumper");t.exports.Type=e("./js-yaml/type"),t.exports.Schema=e("./js-yaml/schema"),t.exports.FAILSAFE_SCHEMA=e("./js-yaml/schema/failsafe"),t.exports.JSON_SCHEMA=e("./js-yaml/schema/json"),t.exports.CORE_SCHEMA=e("./js-yaml/schema/core"),t.exports.DEFAULT_SAFE_SCHEMA=e("./js-yaml/schema/default_safe"),t.exports.DEFAULT_FULL_SCHEMA=e("./js-yaml/schema/default_full"),t.exports.load=n.load,t.exports.loadAll=n.loadAll,t.exports.safeLoad=n.safeLoad,t.exports.safeLoadAll=n.safeLoadAll,t.exports.dump=s.dump,t.exports.safeDump=s.safeDump,t.exports.YAMLException=e("./js-yaml/exception"),t.exports.MINIMAL_SCHEMA=e("./js-yaml/schema/failsafe"),t.exports.SAFE_SCHEMA=e("./js-yaml/schema/default_safe"),t.exports.DEFAULT_SCHEMA=e("./js-yaml/schema/default_full"),t.exports.scan=deprecated("scan"),t.exports.parse=deprecated("parse"),t.exports.compose=deprecated("compose"),t.exports.addConstructor=deprecated("addConstructor")},{"./js-yaml/dumper":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/js-yaml/lib/js-yaml/dumper.js","./js-yaml/exception":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/js-yaml/lib/js-yaml/exception.js","./js-yaml/loader":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/js-yaml/lib/js-yaml/loader.js","./js-yaml/schema":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/js-yaml/lib/js-yaml/schema.js","./js-yaml/schema/core":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/js-yaml/lib/js-yaml/schema/core.js","./js-yaml/schema/default_full":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/js-yaml/lib/js-yaml/schema/default_full.js","./js-yaml/schema/default_safe":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/js-yaml/lib/js-yaml/schema/default_safe.js","./js-yaml/schema/failsafe":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/js-yaml/lib/js-yaml/schema/failsafe.js","./js-yaml/schema/json":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/js-yaml/lib/js-yaml/schema/json.js","./js-yaml/type":"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/js-yaml/lib/js-yaml/type.js"}],"/Users/rreusser/src/rreusser/rreusser.github.io/src/node_modules/js-yaml/lib/js-yaml/common.js":[function(e,t,r){"use strict";function isNothing(e){return void 0===e||null===e}function isObject(e){return"object"===(void 0===e?"undefined":n(e))&&null!==e}function toArray(e){return Array.isArray(e)?e:isNothing(e)?[]:[e]}function extend(e,t){var r,n,s,i;if(t)for(i=Object.keys(t),r=0,n=i.length;r1024&&(a+="? "),a+=e.dump+(e.condenseFlow?'"':"")+":"+(e.condenseFlow?"":" "),writeNode(e,t,o,!1,!1)&&(a+=e.dump,u+=a));e.tag=l,e.dump="{"+u+"}"}function writeBlockMapping(e,t,r,n){var s,o,a,u,l,c,p="",f=e.tag,h=Object.keys(r);if(!0===e.sortKeys)h.sort();else if("function"==typeof e.sortKeys)h.sort(e.sortKeys);else if(e.sortKeys)throw new i("sortKeys must be a boolean or a function");for(s=0,o=h.length;s