This commit is contained in:
Madison Scott-Clary
2020-02-14 16:27:16 -08:00
parent 1c4c6aa92e
commit 8a123bf929
75 changed files with 5994 additions and 36 deletions

View File

@ -6,6 +6,9 @@ help: ## This help.
.PHONY: final .PHONY: final
final: reset toc ## full document of the book for final print final: reset toc ## full document of the book for final print
.PHONY: single
single: reset plain ## full document run once, ensuring everything's reset
.PHONY: proof .PHONY: proof
proof: engage-letter engage-frame engage-draft toc reset ## full proof document of the book with frames and watermark proof: engage-letter engage-frame engage-draft toc reset ## full proof document of the book with frames and watermark

Binary file not shown.

After

Width:  |  Height:  |  Size: 463 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 337 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 377 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 261 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 507 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 251 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 MiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 430 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 915 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 424 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 594 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

View File

@ -0,0 +1,7 @@
<?xml version="1.0"?>
<svg xmlns="http://www.w3.org/2000/svg" width="800" height="400" viewport="0 0 800 400" style="font-family: 'Gentium Book Basic', serif;">
<circle cx="225" cy="200" r="198" style="stroke-width: 2px; stroke: #222; fill: none;" />
<circle cx="575" cy="200" r="198" style="stroke-width: 2px; stroke: #222; fill: none;" />
<text x="225" y="200" text-anchor="middle" vertical-baseline="center">Healthy</text>
<text x="575" y="200" text-anchor="middle" vertical-baseline="center">Mechanically sound</text>
</svg>

After

Width:  |  Height:  |  Size: 545 B

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,60 @@
"use strict";var sjcl={cipher:{},hash:{},keyexchange:{},mode:{},misc:{},codec:{},exception:{corrupt:function(a){this.toString=function(){return"CORRUPT: "+this.message};this.message=a},invalid:function(a){this.toString=function(){return"INVALID: "+this.message};this.message=a},bug:function(a){this.toString=function(){return"BUG: "+this.message};this.message=a},notReady:function(a){this.toString=function(){return"NOT READY: "+this.message};this.message=a}}};
sjcl.cipher.aes=function(a){this.s[0][0][0]||this.O();var b,c,d,e,f=this.s[0][4],g=this.s[1];b=a.length;var h=1;if(4!==b&&6!==b&&8!==b)throw new sjcl.exception.invalid("invalid aes key size");this.b=[d=a.slice(0),e=[]];for(a=b;a<4*b+28;a++){c=d[a-1];if(0===a%b||8===b&&4===a%b)c=f[c>>>24]<<24^f[c>>16&255]<<16^f[c>>8&255]<<8^f[c&255],0===a%b&&(c=c<<8^c>>>24^h<<24,h=h<<1^283*(h>>7));d[a]=d[a-b]^c}for(b=0;a;b++,a--)c=d[b&3?a:a-4],e[b]=4>=a||4>b?c:g[0][f[c>>>24]]^g[1][f[c>>16&255]]^g[2][f[c>>8&255]]^g[3][f[c&
255]]};
sjcl.cipher.aes.prototype={encrypt:function(a){return t(this,a,0)},decrypt:function(a){return t(this,a,1)},s:[[[],[],[],[],[]],[[],[],[],[],[]]],O:function(){var a=this.s[0],b=this.s[1],c=a[4],d=b[4],e,f,g,h=[],k=[],l,n,m,p;for(e=0;0x100>e;e++)k[(h[e]=e<<1^283*(e>>7))^e]=e;for(f=g=0;!c[f];f^=l||1,g=k[g]||1)for(m=g^g<<1^g<<2^g<<3^g<<4,m=m>>8^m&255^99,c[f]=m,d[m]=f,n=h[e=h[l=h[f]]],p=0x1010101*n^0x10001*e^0x101*l^0x1010100*f,n=0x101*h[m]^0x1010100*m,e=0;4>e;e++)a[e][f]=n=n<<24^n>>>8,b[e][m]=p=p<<24^p>>>8;for(e=
0;5>e;e++)a[e]=a[e].slice(0),b[e]=b[e].slice(0)}};
function t(a,b,c){if(4!==b.length)throw new sjcl.exception.invalid("invalid aes block size");var d=a.b[c],e=b[0]^d[0],f=b[c?3:1]^d[1],g=b[2]^d[2];b=b[c?1:3]^d[3];var h,k,l,n=d.length/4-2,m,p=4,r=[0,0,0,0];h=a.s[c];a=h[0];var q=h[1],v=h[2],w=h[3],x=h[4];for(m=0;m<n;m++)h=a[e>>>24]^q[f>>16&255]^v[g>>8&255]^w[b&255]^d[p],k=a[f>>>24]^q[g>>16&255]^v[b>>8&255]^w[e&255]^d[p+1],l=a[g>>>24]^q[b>>16&255]^v[e>>8&255]^w[f&255]^d[p+2],b=a[b>>>24]^q[e>>16&255]^v[f>>8&255]^w[g&255]^d[p+3],p+=4,e=h,f=k,g=l;for(m=
0;4>m;m++)r[c?3&-m:m]=x[e>>>24]<<24^x[f>>16&255]<<16^x[g>>8&255]<<8^x[b&255]^d[p++],h=e,e=f,f=g,g=b,b=h;return r}
sjcl.bitArray={bitSlice:function(a,b,c){a=sjcl.bitArray.$(a.slice(b/32),32-(b&31)).slice(1);return void 0===c?a:sjcl.bitArray.clamp(a,c-b)},extract:function(a,b,c){var d=Math.floor(-b-c&31);return((b+c-1^b)&-32?a[b/32|0]<<32-d^a[b/32+1|0]>>>d:a[b/32|0]>>>d)&(1<<c)-1},concat:function(a,b){if(0===a.length||0===b.length)return a.concat(b);var c=a[a.length-1],d=sjcl.bitArray.getPartial(c);return 32===d?a.concat(b):sjcl.bitArray.$(b,d,c|0,a.slice(0,a.length-1))},bitLength:function(a){var b=a.length;return 0===
b?0:32*(b-1)+sjcl.bitArray.getPartial(a[b-1])},clamp:function(a,b){if(32*a.length<b)return a;a=a.slice(0,Math.ceil(b/32));var c=a.length;b=b&31;0<c&&b&&(a[c-1]=sjcl.bitArray.partial(b,a[c-1]&2147483648>>b-1,1));return a},partial:function(a,b,c){return 32===a?b:(c?b|0:b<<32-a)+0x10000000000*a},getPartial:function(a){return Math.round(a/0x10000000000)||32},equal:function(a,b){if(sjcl.bitArray.bitLength(a)!==sjcl.bitArray.bitLength(b))return!1;var c=0,d;for(d=0;d<a.length;d++)c|=a[d]^b[d];return 0===
c},$:function(a,b,c,d){var e;e=0;for(void 0===d&&(d=[]);32<=b;b-=32)d.push(c),c=0;if(0===b)return d.concat(a);for(e=0;e<a.length;e++)d.push(c|a[e]>>>b),c=a[e]<<32-b;e=a.length?a[a.length-1]:0;a=sjcl.bitArray.getPartial(e);d.push(sjcl.bitArray.partial(b+a&31,32<b+a?c:d.pop(),1));return d},i:function(a,b){return[a[0]^b[0],a[1]^b[1],a[2]^b[2],a[3]^b[3]]},byteswapM:function(a){var b,c;for(b=0;b<a.length;++b)c=a[b],a[b]=c>>>24|c>>>8&0xff00|(c&0xff00)<<8|c<<24;return a}};
sjcl.codec.utf8String={fromBits:function(a){var b="",c=sjcl.bitArray.bitLength(a),d,e;for(d=0;d<c/8;d++)0===(d&3)&&(e=a[d/4]),b+=String.fromCharCode(e>>>24),e<<=8;return decodeURIComponent(escape(b))},toBits:function(a){a=unescape(encodeURIComponent(a));var b=[],c,d=0;for(c=0;c<a.length;c++)d=d<<8|a.charCodeAt(c),3===(c&3)&&(b.push(d),d=0);c&3&&b.push(sjcl.bitArray.partial(8*(c&3),d));return b}};
sjcl.codec.hex={fromBits:function(a){var b="",c;for(c=0;c<a.length;c++)b+=((a[c]|0)+0xf00000000000).toString(16).substr(4);return b.substr(0,sjcl.bitArray.bitLength(a)/4)},toBits:function(a){var b,c=[],d;a=a.replace(/\s|0x/g,"");d=a.length;a=a+"00000000";for(b=0;b<a.length;b+=8)c.push(parseInt(a.substr(b,8),16)^0);return sjcl.bitArray.clamp(c,4*d)}};
sjcl.codec.base32={B:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",X:"0123456789ABCDEFGHIJKLMNOPQRSTUV",BITS:32,BASE:5,REMAINING:27,fromBits:function(a,b,c){var d=sjcl.codec.base32.BASE,e=sjcl.codec.base32.REMAINING,f="",g=0,h=sjcl.codec.base32.B,k=0,l=sjcl.bitArray.bitLength(a);c&&(h=sjcl.codec.base32.X);for(c=0;f.length*d<l;)f+=h.charAt((k^a[c]>>>g)>>>e),g<d?(k=a[c]<<d-g,g+=e,c++):(k<<=d,g-=d);for(;f.length&7&&!b;)f+="=";return f},toBits:function(a,b){a=a.replace(/\s|=/g,"").toUpperCase();var c=sjcl.codec.base32.BITS,
d=sjcl.codec.base32.BASE,e=sjcl.codec.base32.REMAINING,f=[],g,h=0,k=sjcl.codec.base32.B,l=0,n,m="base32";b&&(k=sjcl.codec.base32.X,m="base32hex");for(g=0;g<a.length;g++){n=k.indexOf(a.charAt(g));if(0>n){if(!b)try{return sjcl.codec.base32hex.toBits(a)}catch(p){}throw new sjcl.exception.invalid("this isn't "+m+"!");}h>e?(h-=e,f.push(l^n>>>h),l=n<<c-h):(h+=d,l^=n<<c-h)}h&56&&f.push(sjcl.bitArray.partial(h&56,l,1));return f}};
sjcl.codec.base32hex={fromBits:function(a,b){return sjcl.codec.base32.fromBits(a,b,1)},toBits:function(a){return sjcl.codec.base32.toBits(a,1)}};
sjcl.codec.base64={B:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",fromBits:function(a,b,c){var d="",e=0,f=sjcl.codec.base64.B,g=0,h=sjcl.bitArray.bitLength(a);c&&(f=f.substr(0,62)+"-_");for(c=0;6*d.length<h;)d+=f.charAt((g^a[c]>>>e)>>>26),6>e?(g=a[c]<<6-e,e+=26,c++):(g<<=6,e-=6);for(;d.length&3&&!b;)d+="=";return d},toBits:function(a,b){a=a.replace(/\s|=/g,"");var c=[],d,e=0,f=sjcl.codec.base64.B,g=0,h;b&&(f=f.substr(0,62)+"-_");for(d=0;d<a.length;d++){h=f.indexOf(a.charAt(d));
if(0>h)throw new sjcl.exception.invalid("this isn't base64!");26<e?(e-=26,c.push(g^h>>>e),g=h<<32-e):(e+=6,g^=h<<32-e)}e&56&&c.push(sjcl.bitArray.partial(e&56,g,1));return c}};sjcl.codec.base64url={fromBits:function(a){return sjcl.codec.base64.fromBits(a,1,1)},toBits:function(a){return sjcl.codec.base64.toBits(a,1)}};sjcl.hash.sha256=function(a){this.b[0]||this.O();a?(this.F=a.F.slice(0),this.A=a.A.slice(0),this.l=a.l):this.reset()};sjcl.hash.sha256.hash=function(a){return(new sjcl.hash.sha256).update(a).finalize()};
sjcl.hash.sha256.prototype={blockSize:512,reset:function(){this.F=this.Y.slice(0);this.A=[];this.l=0;return this},update:function(a){"string"===typeof a&&(a=sjcl.codec.utf8String.toBits(a));var b,c=this.A=sjcl.bitArray.concat(this.A,a);b=this.l;a=this.l=b+sjcl.bitArray.bitLength(a);if(0x1fffffffffffff<a)throw new sjcl.exception.invalid("Cannot hash more than 2^53 - 1 bits");if("undefined"!==typeof Uint32Array){var d=new Uint32Array(c),e=0;for(b=512+b-(512+b&0x1ff);b<=a;b+=512)u(this,d.subarray(16*e,
16*(e+1))),e+=1;c.splice(0,16*e)}else for(b=512+b-(512+b&0x1ff);b<=a;b+=512)u(this,c.splice(0,16));return this},finalize:function(){var a,b=this.A,c=this.F,b=sjcl.bitArray.concat(b,[sjcl.bitArray.partial(1,1)]);for(a=b.length+2;a&15;a++)b.push(0);b.push(Math.floor(this.l/0x100000000));for(b.push(this.l|0);b.length;)u(this,b.splice(0,16));this.reset();return c},Y:[],b:[],O:function(){function a(a){return 0x100000000*(a-Math.floor(a))|0}for(var b=0,c=2,d,e;64>b;c++){e=!0;for(d=2;d*d<=c;d++)if(0===c%d){e=
!1;break}e&&(8>b&&(this.Y[b]=a(Math.pow(c,.5))),this.b[b]=a(Math.pow(c,1/3)),b++)}}};
function u(a,b){var c,d,e,f=a.F,g=a.b,h=f[0],k=f[1],l=f[2],n=f[3],m=f[4],p=f[5],r=f[6],q=f[7];for(c=0;64>c;c++)16>c?d=b[c]:(d=b[c+1&15],e=b[c+14&15],d=b[c&15]=(d>>>7^d>>>18^d>>>3^d<<25^d<<14)+(e>>>17^e>>>19^e>>>10^e<<15^e<<13)+b[c&15]+b[c+9&15]|0),d=d+q+(m>>>6^m>>>11^m>>>25^m<<26^m<<21^m<<7)+(r^m&(p^r))+g[c],q=r,r=p,p=m,m=n+d|0,n=l,l=k,k=h,h=d+(k&l^n&(k^l))+(k>>>2^k>>>13^k>>>22^k<<30^k<<19^k<<10)|0;f[0]=f[0]+h|0;f[1]=f[1]+k|0;f[2]=f[2]+l|0;f[3]=f[3]+n|0;f[4]=f[4]+m|0;f[5]=f[5]+p|0;f[6]=f[6]+r|0;f[7]=
f[7]+q|0}
sjcl.mode.ccm={name:"ccm",G:[],listenProgress:function(a){sjcl.mode.ccm.G.push(a)},unListenProgress:function(a){a=sjcl.mode.ccm.G.indexOf(a);-1<a&&sjcl.mode.ccm.G.splice(a,1)},fa:function(a){var b=sjcl.mode.ccm.G.slice(),c;for(c=0;c<b.length;c+=1)b[c](a)},encrypt:function(a,b,c,d,e){var f,g=b.slice(0),h=sjcl.bitArray,k=h.bitLength(c)/8,l=h.bitLength(g)/8;e=e||64;d=d||[];if(7>k)throw new sjcl.exception.invalid("ccm: iv must be at least 7 bytes");for(f=2;4>f&&l>>>8*f;f++);f<15-k&&(f=15-k);c=h.clamp(c,
8*(15-f));b=sjcl.mode.ccm.V(a,b,c,d,e,f);g=sjcl.mode.ccm.C(a,g,c,b,e,f);return h.concat(g.data,g.tag)},decrypt:function(a,b,c,d,e){e=e||64;d=d||[];var f=sjcl.bitArray,g=f.bitLength(c)/8,h=f.bitLength(b),k=f.clamp(b,h-e),l=f.bitSlice(b,h-e),h=(h-e)/8;if(7>g)throw new sjcl.exception.invalid("ccm: iv must be at least 7 bytes");for(b=2;4>b&&h>>>8*b;b++);b<15-g&&(b=15-g);c=f.clamp(c,8*(15-b));k=sjcl.mode.ccm.C(a,k,c,l,e,b);a=sjcl.mode.ccm.V(a,k.data,c,d,e,b);if(!f.equal(k.tag,a))throw new sjcl.exception.corrupt("ccm: tag doesn't match");
return k.data},na:function(a,b,c,d,e,f){var g=[],h=sjcl.bitArray,k=h.i;d=[h.partial(8,(b.length?64:0)|d-2<<2|f-1)];d=h.concat(d,c);d[3]|=e;d=a.encrypt(d);if(b.length)for(c=h.bitLength(b)/8,65279>=c?g=[h.partial(16,c)]:0xffffffff>=c&&(g=h.concat([h.partial(16,65534)],[c])),g=h.concat(g,b),b=0;b<g.length;b+=4)d=a.encrypt(k(d,g.slice(b,b+4).concat([0,0,0])));return d},V:function(a,b,c,d,e,f){var g=sjcl.bitArray,h=g.i;e/=8;if(e%2||4>e||16<e)throw new sjcl.exception.invalid("ccm: invalid tag length");
if(0xffffffff<d.length||0xffffffff<b.length)throw new sjcl.exception.bug("ccm: can't deal with 4GiB or more data");c=sjcl.mode.ccm.na(a,d,c,e,g.bitLength(b)/8,f);for(d=0;d<b.length;d+=4)c=a.encrypt(h(c,b.slice(d,d+4).concat([0,0,0])));return g.clamp(c,8*e)},C:function(a,b,c,d,e,f){var g,h=sjcl.bitArray;g=h.i;var k=b.length,l=h.bitLength(b),n=k/50,m=n;c=h.concat([h.partial(8,f-1)],c).concat([0,0,0]).slice(0,4);d=h.bitSlice(g(d,a.encrypt(c)),0,e);if(!k)return{tag:d,data:[]};for(g=0;g<k;g+=4)g>n&&(sjcl.mode.ccm.fa(g/
k),n+=m),c[3]++,e=a.encrypt(c),b[g]^=e[0],b[g+1]^=e[1],b[g+2]^=e[2],b[g+3]^=e[3];return{tag:d,data:h.clamp(b,l)}}};
sjcl.mode.ocb2={name:"ocb2",encrypt:function(a,b,c,d,e,f){if(128!==sjcl.bitArray.bitLength(c))throw new sjcl.exception.invalid("ocb iv must be 128 bits");var g,h=sjcl.mode.ocb2.S,k=sjcl.bitArray,l=k.i,n=[0,0,0,0];c=h(a.encrypt(c));var m,p=[];d=d||[];e=e||64;for(g=0;g+4<b.length;g+=4)m=b.slice(g,g+4),n=l(n,m),p=p.concat(l(c,a.encrypt(l(c,m)))),c=h(c);m=b.slice(g);b=k.bitLength(m);g=a.encrypt(l(c,[0,0,0,b]));m=k.clamp(l(m.concat([0,0,0]),g),b);n=l(n,l(m.concat([0,0,0]),g));n=a.encrypt(l(n,l(c,h(c))));
d.length&&(n=l(n,f?d:sjcl.mode.ocb2.pmac(a,d)));return p.concat(k.concat(m,k.clamp(n,e)))},decrypt:function(a,b,c,d,e,f){if(128!==sjcl.bitArray.bitLength(c))throw new sjcl.exception.invalid("ocb iv must be 128 bits");e=e||64;var g=sjcl.mode.ocb2.S,h=sjcl.bitArray,k=h.i,l=[0,0,0,0],n=g(a.encrypt(c)),m,p,r=sjcl.bitArray.bitLength(b)-e,q=[];d=d||[];for(c=0;c+4<r/32;c+=4)m=k(n,a.decrypt(k(n,b.slice(c,c+4)))),l=k(l,m),q=q.concat(m),n=g(n);p=r-32*c;m=a.encrypt(k(n,[0,0,0,p]));m=k(m,h.clamp(b.slice(c),p).concat([0,
0,0]));l=k(l,m);l=a.encrypt(k(l,k(n,g(n))));d.length&&(l=k(l,f?d:sjcl.mode.ocb2.pmac(a,d)));if(!h.equal(h.clamp(l,e),h.bitSlice(b,r)))throw new sjcl.exception.corrupt("ocb: tag doesn't match");return q.concat(h.clamp(m,p))},pmac:function(a,b){var c,d=sjcl.mode.ocb2.S,e=sjcl.bitArray,f=e.i,g=[0,0,0,0],h=a.encrypt([0,0,0,0]),h=f(h,d(d(h)));for(c=0;c+4<b.length;c+=4)h=d(h),g=f(g,a.encrypt(f(h,b.slice(c,c+4))));c=b.slice(c);128>e.bitLength(c)&&(h=f(h,d(h)),c=e.concat(c,[-2147483648,0,0,0]));g=f(g,c);
return a.encrypt(f(d(f(h,d(h))),g))},S:function(a){return[a[0]<<1^a[1]>>>31,a[1]<<1^a[2]>>>31,a[2]<<1^a[3]>>>31,a[3]<<1^135*(a[0]>>>31)]}};
sjcl.mode.gcm={name:"gcm",encrypt:function(a,b,c,d,e){var f=b.slice(0);b=sjcl.bitArray;d=d||[];a=sjcl.mode.gcm.C(!0,a,f,d,c,e||128);return b.concat(a.data,a.tag)},decrypt:function(a,b,c,d,e){var f=b.slice(0),g=sjcl.bitArray,h=g.bitLength(f);e=e||128;d=d||[];e<=h?(b=g.bitSlice(f,h-e),f=g.bitSlice(f,0,h-e)):(b=f,f=[]);a=sjcl.mode.gcm.C(!1,a,f,d,c,e);if(!g.equal(a.tag,b))throw new sjcl.exception.corrupt("gcm: tag doesn't match");return a.data},ka:function(a,b){var c,d,e,f,g,h=sjcl.bitArray.i;e=[0,0,
0,0];f=b.slice(0);for(c=0;128>c;c++){(d=0!==(a[Math.floor(c/32)]&1<<31-c%32))&&(e=h(e,f));g=0!==(f[3]&1);for(d=3;0<d;d--)f[d]=f[d]>>>1|(f[d-1]&1)<<31;f[0]>>>=1;g&&(f[0]^=-0x1f000000)}return e},j:function(a,b,c){var d,e=c.length;b=b.slice(0);for(d=0;d<e;d+=4)b[0]^=0xffffffff&c[d],b[1]^=0xffffffff&c[d+1],b[2]^=0xffffffff&c[d+2],b[3]^=0xffffffff&c[d+3],b=sjcl.mode.gcm.ka(b,a);return b},C:function(a,b,c,d,e,f){var g,h,k,l,n,m,p,r,q=sjcl.bitArray;m=c.length;p=q.bitLength(c);r=q.bitLength(d);h=q.bitLength(e);
g=b.encrypt([0,0,0,0]);96===h?(e=e.slice(0),e=q.concat(e,[1])):(e=sjcl.mode.gcm.j(g,[0,0,0,0],e),e=sjcl.mode.gcm.j(g,e,[0,0,Math.floor(h/0x100000000),h&0xffffffff]));h=sjcl.mode.gcm.j(g,[0,0,0,0],d);n=e.slice(0);d=h.slice(0);a||(d=sjcl.mode.gcm.j(g,h,c));for(l=0;l<m;l+=4)n[3]++,k=b.encrypt(n),c[l]^=k[0],c[l+1]^=k[1],c[l+2]^=k[2],c[l+3]^=k[3];c=q.clamp(c,p);a&&(d=sjcl.mode.gcm.j(g,h,c));a=[Math.floor(r/0x100000000),r&0xffffffff,Math.floor(p/0x100000000),p&0xffffffff];d=sjcl.mode.gcm.j(g,d,a);k=b.encrypt(e);
d[0]^=k[0];d[1]^=k[1];d[2]^=k[2];d[3]^=k[3];return{tag:q.bitSlice(d,0,f),data:c}}};sjcl.misc.hmac=function(a,b){this.W=b=b||sjcl.hash.sha256;var c=[[],[]],d,e=b.prototype.blockSize/32;this.w=[new b,new b];a.length>e&&(a=b.hash(a));for(d=0;d<e;d++)c[0][d]=a[d]^909522486,c[1][d]=a[d]^1549556828;this.w[0].update(c[0]);this.w[1].update(c[1]);this.R=new b(this.w[0])};
sjcl.misc.hmac.prototype.encrypt=sjcl.misc.hmac.prototype.mac=function(a){if(this.aa)throw new sjcl.exception.invalid("encrypt on already updated hmac called!");this.update(a);return this.digest(a)};sjcl.misc.hmac.prototype.reset=function(){this.R=new this.W(this.w[0]);this.aa=!1};sjcl.misc.hmac.prototype.update=function(a){this.aa=!0;this.R.update(a)};sjcl.misc.hmac.prototype.digest=function(){var a=this.R.finalize(),a=(new this.W(this.w[1])).update(a).finalize();this.reset();return a};
sjcl.misc.pbkdf2=function(a,b,c,d,e){c=c||1E4;if(0>d||0>c)throw new sjcl.exception.invalid("invalid params to pbkdf2");"string"===typeof a&&(a=sjcl.codec.utf8String.toBits(a));"string"===typeof b&&(b=sjcl.codec.utf8String.toBits(b));e=e||sjcl.misc.hmac;a=new e(a);var f,g,h,k,l=[],n=sjcl.bitArray;for(k=1;32*l.length<(d||1);k++){e=f=a.encrypt(n.concat(b,[k]));for(g=1;g<c;g++)for(f=a.encrypt(f),h=0;h<f.length;h++)e[h]^=f[h];l=l.concat(e)}d&&(l=n.clamp(l,d));return l};
sjcl.prng=function(a){this.c=[new sjcl.hash.sha256];this.m=[0];this.P=0;this.H={};this.N=0;this.U={};this.Z=this.f=this.o=this.ha=0;this.b=[0,0,0,0,0,0,0,0];this.h=[0,0,0,0];this.L=void 0;this.M=a;this.D=!1;this.K={progress:{},seeded:{}};this.u=this.ga=0;this.I=1;this.J=2;this.ca=0x10000;this.T=[0,48,64,96,128,192,0x100,384,512,768,1024];this.da=3E4;this.ba=80};
sjcl.prng.prototype={randomWords:function(a,b){var c=[],d;d=this.isReady(b);var e;if(d===this.u)throw new sjcl.exception.notReady("generator isn't seeded");if(d&this.J){d=!(d&this.I);e=[];var f=0,g;this.Z=e[0]=(new Date).valueOf()+this.da;for(g=0;16>g;g++)e.push(0x100000000*Math.random()|0);for(g=0;g<this.c.length&&(e=e.concat(this.c[g].finalize()),f+=this.m[g],this.m[g]=0,d||!(this.P&1<<g));g++);this.P>=1<<this.c.length&&(this.c.push(new sjcl.hash.sha256),this.m.push(0));this.f-=f;f>this.o&&(this.o=
f);this.P++;this.b=sjcl.hash.sha256.hash(this.b.concat(e));this.L=new sjcl.cipher.aes(this.b);for(d=0;4>d&&(this.h[d]=this.h[d]+1|0,!this.h[d]);d++);}for(d=0;d<a;d+=4)0===(d+1)%this.ca&&y(this),e=z(this),c.push(e[0],e[1],e[2],e[3]);y(this);return c.slice(0,a)},setDefaultParanoia:function(a,b){if(0===a&&"Setting paranoia=0 will ruin your security; use it only for testing"!==b)throw new sjcl.exception.invalid("Setting paranoia=0 will ruin your security; use it only for testing");this.M=a},addEntropy:function(a,
b,c){c=c||"user";var d,e,f=(new Date).valueOf(),g=this.H[c],h=this.isReady(),k=0;d=this.U[c];void 0===d&&(d=this.U[c]=this.ha++);void 0===g&&(g=this.H[c]=0);this.H[c]=(this.H[c]+1)%this.c.length;switch(typeof a){case "number":void 0===b&&(b=1);this.c[g].update([d,this.N++,1,b,f,1,a|0]);break;case "object":c=Object.prototype.toString.call(a);if("[object Uint32Array]"===c){e=[];for(c=0;c<a.length;c++)e.push(a[c]);a=e}else for("[object Array]"!==c&&(k=1),c=0;c<a.length&&!k;c++)"number"!==typeof a[c]&&
(k=1);if(!k){if(void 0===b)for(c=b=0;c<a.length;c++)for(e=a[c];0<e;)b++,e=e>>>1;this.c[g].update([d,this.N++,2,b,f,a.length].concat(a))}break;case "string":void 0===b&&(b=a.length);this.c[g].update([d,this.N++,3,b,f,a.length]);this.c[g].update(a);break;default:k=1}if(k)throw new sjcl.exception.bug("random: addEntropy only supports number, array of numbers or string");this.m[g]+=b;this.f+=b;h===this.u&&(this.isReady()!==this.u&&A("seeded",Math.max(this.o,this.f)),A("progress",this.getProgress()))},
isReady:function(a){a=this.T[void 0!==a?a:this.M];return this.o&&this.o>=a?this.m[0]>this.ba&&(new Date).valueOf()>this.Z?this.J|this.I:this.I:this.f>=a?this.J|this.u:this.u},getProgress:function(a){a=this.T[a?a:this.M];return this.o>=a?1:this.f>a?1:this.f/a},startCollectors:function(){if(!this.D){this.a={loadTimeCollector:B(this,this.ma),mouseCollector:B(this,this.oa),keyboardCollector:B(this,this.la),accelerometerCollector:B(this,this.ea),touchCollector:B(this,this.qa)};if(window.addEventListener)window.addEventListener("load",
this.a.loadTimeCollector,!1),window.addEventListener("mousemove",this.a.mouseCollector,!1),window.addEventListener("keypress",this.a.keyboardCollector,!1),window.addEventListener("devicemotion",this.a.accelerometerCollector,!1),window.addEventListener("touchmove",this.a.touchCollector,!1);else if(document.attachEvent)document.attachEvent("onload",this.a.loadTimeCollector),document.attachEvent("onmousemove",this.a.mouseCollector),document.attachEvent("keypress",this.a.keyboardCollector);else throw new sjcl.exception.bug("can't attach event");
this.D=!0}},stopCollectors:function(){this.D&&(window.removeEventListener?(window.removeEventListener("load",this.a.loadTimeCollector,!1),window.removeEventListener("mousemove",this.a.mouseCollector,!1),window.removeEventListener("keypress",this.a.keyboardCollector,!1),window.removeEventListener("devicemotion",this.a.accelerometerCollector,!1),window.removeEventListener("touchmove",this.a.touchCollector,!1)):document.detachEvent&&(document.detachEvent("onload",this.a.loadTimeCollector),document.detachEvent("onmousemove",
this.a.mouseCollector),document.detachEvent("keypress",this.a.keyboardCollector)),this.D=!1)},addEventListener:function(a,b){this.K[a][this.ga++]=b},removeEventListener:function(a,b){var c,d,e=this.K[a],f=[];for(d in e)e.hasOwnProperty(d)&&e[d]===b&&f.push(d);for(c=0;c<f.length;c++)d=f[c],delete e[d]},la:function(){C(this,1)},oa:function(a){var b,c;try{b=a.x||a.clientX||a.offsetX||0,c=a.y||a.clientY||a.offsetY||0}catch(d){c=b=0}0!=b&&0!=c&&this.addEntropy([b,c],2,"mouse");C(this,0)},qa:function(a){a=
a.touches[0]||a.changedTouches[0];this.addEntropy([a.pageX||a.clientX,a.pageY||a.clientY],1,"touch");C(this,0)},ma:function(){C(this,2)},ea:function(a){a=a.accelerationIncludingGravity.x||a.accelerationIncludingGravity.y||a.accelerationIncludingGravity.z;if(window.orientation){var b=window.orientation;"number"===typeof b&&this.addEntropy(b,1,"accelerometer")}a&&this.addEntropy(a,2,"accelerometer");C(this,0)}};
function A(a,b){var c,d=sjcl.random.K[a],e=[];for(c in d)d.hasOwnProperty(c)&&e.push(d[c]);for(c=0;c<e.length;c++)e[c](b)}function C(a,b){"undefined"!==typeof window&&window.performance&&"function"===typeof window.performance.now?a.addEntropy(window.performance.now(),b,"loadtime"):a.addEntropy((new Date).valueOf(),b,"loadtime")}function y(a){a.b=z(a).concat(z(a));a.L=new sjcl.cipher.aes(a.b)}function z(a){for(var b=0;4>b&&(a.h[b]=a.h[b]+1|0,!a.h[b]);b++);return a.L.encrypt(a.h)}
function B(a,b){return function(){b.apply(a,arguments)}}sjcl.random=new sjcl.prng(6);
a:try{var D,E,F,G;if(G="undefined"!==typeof module&&module.exports){var H;try{H=require("crypto")}catch(a){H=null}G=E=H}if(G&&E.randomBytes)D=E.randomBytes(128),D=new Uint32Array((new Uint8Array(D)).buffer),sjcl.random.addEntropy(D,1024,"crypto['randomBytes']");else if("undefined"!==typeof window&&"undefined"!==typeof Uint32Array){F=new Uint32Array(32);if(window.crypto&&window.crypto.getRandomValues)window.crypto.getRandomValues(F);else if(window.msCrypto&&window.msCrypto.getRandomValues)window.msCrypto.getRandomValues(F);
else break a;sjcl.random.addEntropy(F,1024,"crypto['getRandomValues']")}}catch(a){"undefined"!==typeof window&&window.console&&(console.log("There was an error collecting entropy from the browser:"),console.log(a))}
sjcl.json={defaults:{v:1,iter:1E4,ks:128,ts:64,mode:"ccm",adata:"",cipher:"aes"},ja:function(a,b,c,d){c=c||{};d=d||{};var e=sjcl.json,f=e.g({iv:sjcl.random.randomWords(4,0)},e.defaults),g;e.g(f,c);c=f.adata;"string"===typeof f.salt&&(f.salt=sjcl.codec.base64.toBits(f.salt));"string"===typeof f.iv&&(f.iv=sjcl.codec.base64.toBits(f.iv));if(!sjcl.mode[f.mode]||!sjcl.cipher[f.cipher]||"string"===typeof a&&100>=f.iter||64!==f.ts&&96!==f.ts&&128!==f.ts||128!==f.ks&&192!==f.ks&&0x100!==f.ks||2>f.iv.length||
4<f.iv.length)throw new sjcl.exception.invalid("json encrypt: invalid parameters");"string"===typeof a?(g=sjcl.misc.cachedPbkdf2(a,f),a=g.key.slice(0,f.ks/32),f.salt=g.salt):sjcl.ecc&&a instanceof sjcl.ecc.elGamal.publicKey&&(g=a.kem(),f.kemtag=g.tag,a=g.key.slice(0,f.ks/32));"string"===typeof b&&(b=sjcl.codec.utf8String.toBits(b));"string"===typeof c&&(f.adata=c=sjcl.codec.utf8String.toBits(c));g=new sjcl.cipher[f.cipher](a);e.g(d,f);d.key=a;f.ct="ccm"===f.mode&&sjcl.arrayBuffer&&sjcl.arrayBuffer.ccm&&
b instanceof ArrayBuffer?sjcl.arrayBuffer.ccm.encrypt(g,b,f.iv,c,f.ts):sjcl.mode[f.mode].encrypt(g,b,f.iv,c,f.ts);return f},encrypt:function(a,b,c,d){var e=sjcl.json,f=e.ja.apply(e,arguments);return e.encode(f)},ia:function(a,b,c,d){c=c||{};d=d||{};var e=sjcl.json;b=e.g(e.g(e.g({},e.defaults),b),c,!0);var f,g;f=b.adata;"string"===typeof b.salt&&(b.salt=sjcl.codec.base64.toBits(b.salt));"string"===typeof b.iv&&(b.iv=sjcl.codec.base64.toBits(b.iv));if(!sjcl.mode[b.mode]||!sjcl.cipher[b.cipher]||"string"===
typeof a&&100>=b.iter||64!==b.ts&&96!==b.ts&&128!==b.ts||128!==b.ks&&192!==b.ks&&0x100!==b.ks||!b.iv||2>b.iv.length||4<b.iv.length)throw new sjcl.exception.invalid("json decrypt: invalid parameters");"string"===typeof a?(g=sjcl.misc.cachedPbkdf2(a,b),a=g.key.slice(0,b.ks/32),b.salt=g.salt):sjcl.ecc&&a instanceof sjcl.ecc.elGamal.secretKey&&(a=a.unkem(sjcl.codec.base64.toBits(b.kemtag)).slice(0,b.ks/32));"string"===typeof f&&(f=sjcl.codec.utf8String.toBits(f));g=new sjcl.cipher[b.cipher](a);f="ccm"===
b.mode&&sjcl.arrayBuffer&&sjcl.arrayBuffer.ccm&&b.ct instanceof ArrayBuffer?sjcl.arrayBuffer.ccm.decrypt(g,b.ct,b.iv,b.tag,f,b.ts):sjcl.mode[b.mode].decrypt(g,b.ct,b.iv,f,b.ts);e.g(d,b);d.key=a;return 1===c.raw?f:sjcl.codec.utf8String.fromBits(f)},decrypt:function(a,b,c,d){var e=sjcl.json;return e.ia(a,e.decode(b),c,d)},encode:function(a){var b,c="{",d="";for(b in a)if(a.hasOwnProperty(b)){if(!b.match(/^[a-z0-9]+$/i))throw new sjcl.exception.invalid("json encode: invalid property name");c+=d+'"'+
b+'":';d=",";switch(typeof a[b]){case "number":case "boolean":c+=a[b];break;case "string":c+='"'+escape(a[b])+'"';break;case "object":c+='"'+sjcl.codec.base64.fromBits(a[b],0)+'"';break;default:throw new sjcl.exception.bug("json encode: unsupported type");}}return c+"}"},decode:function(a){a=a.replace(/\s/g,"");if(!a.match(/^\{.*\}$/))throw new sjcl.exception.invalid("json decode: this isn't json!");a=a.replace(/^\{|\}$/g,"").split(/,/);var b={},c,d;for(c=0;c<a.length;c++){if(!(d=a[c].match(/^\s*(?:(["']?)([a-z][a-z0-9]*)\1)\s*:\s*(?:(-?\d+)|"([a-z0-9+\/%*_.@=\-]*)"|(true|false))$/i)))throw new sjcl.exception.invalid("json decode: this isn't json!");
null!=d[3]?b[d[2]]=parseInt(d[3],10):null!=d[4]?b[d[2]]=d[2].match(/^(ct|adata|salt|iv)$/)?sjcl.codec.base64.toBits(d[4]):unescape(d[4]):null!=d[5]&&(b[d[2]]="true"===d[5])}return b},g:function(a,b,c){void 0===a&&(a={});if(void 0===b)return a;for(var d in b)if(b.hasOwnProperty(d)){if(c&&void 0!==a[d]&&a[d]!==b[d])throw new sjcl.exception.invalid("required parameter overridden");a[d]=b[d]}return a},sa:function(a,b){var c={},d;for(d in a)a.hasOwnProperty(d)&&a[d]!==b[d]&&(c[d]=a[d]);return c},ra:function(a,
b){var c={},d;for(d=0;d<b.length;d++)void 0!==a[b[d]]&&(c[b[d]]=a[b[d]]);return c}};sjcl.encrypt=sjcl.json.encrypt;sjcl.decrypt=sjcl.json.decrypt;sjcl.misc.pa={};sjcl.misc.cachedPbkdf2=function(a,b){var c=sjcl.misc.pa,d;b=b||{};d=b.iter||1E3;c=c[a]=c[a]||{};d=c[d]=c[d]||{firstSalt:b.salt&&b.salt.length?b.salt.slice(0):sjcl.random.randomWords(2,0)};c=void 0===b.salt?d.firstSalt:b.salt;d[c]=d[c]||sjcl.misc.pbkdf2(a,c,b.iter);return{key:d[c].slice(0),salt:c.slice(0)}};
"undefined"!==typeof module&&module.exports&&(module.exports=sjcl);"function"===typeof define&&define([],function(){return sjcl});

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 757 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 660 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 695 KiB

478
book/assets/static/map.dot Normal file
View File

@ -0,0 +1,478 @@
digraph Map {
node[shape="box"]
label=""
// The following must appear before the ally group in order to position them
// on the left side.
node[group="aside",style="",fontcolor="#111111"]
"Aside 1" [href="/aside/1"]
"Aside 2" [href="/aside/2"]
"Aside 3" [href="/aside/3"]
"Dreams 1" [href="/aside/dreams/1"]
"Dreams 2" [href="/aside/dreams/2"]
/* "Dreams 3" [href="/aside/dreams/3"] */
node[group="dad",style="filled",fillcolor="#cccccc",fontcolor="#222222"]
"Dad 1" [href="/dad/1"]
"Dad 2" [href="/dad/2"]
"Dad 3" [href="/dad/3"]
"Dad 4" [href="/dad/4"]
"Dad 5" [href="/dad/5"]
"Dad 6" [href="/dad/6"]
"Dad 7" [href="/dad/7"]
"Dad 8" [href="/dad/8"]
"Dad 9" [href="/dad/9"]
"Dad 10" [href="/dad/10"]
"Dad 11" [href="/dad/11"]
"Dad 1" -> "Dad 2" -> "Dad 3" -> "Dad 4" -> "Dad 5" ->
"Dad 6" -> "Dad 7" -> "Dad 8" -> "Dad 9" -> "Dad 10" ->
"Dad 11"
node[group="pnm",style="filled",fillcolor="#2f082a",fontcolor="#ccccdd"]
"Poet and Mystic 1" [href="/poet-and-mystic"]
"Poet and Mystic 2" [href="/poet-and-mystic/2"]
"Poet and Mystic 3" [href="/poet-and-mystic/3"]
"Poet and Mystic 4" [href="/poet-and-mystic/4"]
"Poet and Mystic 5" [href="/poet-and-mystic/5"]
"Poet and Mystic 6" [href="/poet-and-mystic/6"]
"Poet and Mystic 7" [href="/poet-and-mystic/7"]
"Poet and Mystic 8" [href="/poet-and-mystic/8"]
"Poet and Mystic 9" [href="/poet-and-mystic/9"]
"Poet and Mystic 10" [href="/poet-and-mystic/10"]
"Poet and Mystic 11" [href="/poet-and-mystic/11"]
"Poet and Mystic 12" [href="/poet-and-mystic/12"]
"Poet and Mystic 13" [href="/poet-and-mystic/13"]
"Poet and Mystic 1" -> "Poet and Mystic 2" -> "Poet and Mystic 3" ->
"Poet and Mystic 4" -> "Poet and Mystic 5" -> "Poet and Mystic 6" ->
"Poet and Mystic 7" -> "Poet and Mystic 8" -> "Poet and Mystic 9" ->
"Poet and Mystic 10" -> "Poet and Mystic 11" -> "Poet and Mystic 12" ->
"Poet and Mystic 13"
node[group="ane",style="",fontcolor="#111111"]
"Agony and Ecstasy" [href="/poet-and-mystic/agony-and-ecstasy"]
"Audio" [href="/poet-and-mystic/agony-and-ecstasy/audio"]
"Video" [href="/poet-and-mystic/agony-and-ecstasy/video"]
"Text" [href="/poet-and-mystic/agony-and-ecstasy/text"]
"Agony and Ecstasy" -> "Audio"
"Agony and Ecstasy" -> "Video"
"Agony and Ecstasy" -> "Text"
node[group="overflowing",style="filled",fillcolor="#aaaaaa",fontcolor="#000000"]
"Overflowing" [href="/poet-and-mystic/overflowing"]
node[group="with",style="filled",fillcolor="#666666",fontcolor="#cccccc"]
"With" [href="/poet-and-mystic/overflowing/with"]
node[group="words",style="filled",fillcolor="#000000",fontcolor="#777777"]
"Words 1" [href="/poet-and-mystic/overflowing/with/words"]
"Words 2" [href="/poet-and-mystic/overflowing/with/words/2"]
"Words 3" [href="/poet-and-mystic/overflowing/with/words/3"]
"Words 4" [href="/poet-and-mystic/overflowing/with/words/4"]
"Words 5" [href="/poet-and-mystic/overflowing/with/words/5"]
"Words 6" [href="/poet-and-mystic/overflowing/with/words/6"]
"Words 7" [href="/poet-and-mystic/overflowing/with/words/7"]
"Words 8" [href="/poet-and-mystic/overflowing/with/words/8"]
"Words 1" -> "Words 2" -> "Words 3" -> "Words 4" -> "Words 5" ->
"Words 6" -> "Words 7" -> "Words 8"
node[group="from-within",style="filled",fillcolor="#333a18",fontcolor="#ccddcc"]
"From within 1" [href="/from-within/"]
"From within 2" [href="/from-within/2"]
"From within 3" [href="/from-within/3",fillcolor="#283a26"]
"From within 4" [href="/from-within/4",fillcolor="#082a16",fontcolor="#bbccbb"]
"From within 5" [href="/from-within/5",fillcolor="#082010",fontcolor="#aabbaa"]
"From within 6" [href="/from-within/i-guess..",fillcolor="#001a06",fontcolor="#aabbaa"]
"From within 1" -> "From within 2" -> "From within 3" -> "From within 4" ->
"From within 5" -> "From within 6"
node[group="jay",style="filled",fillcolor="#eeddff",fontcolor="#222288"]
"Jay 1" [href="/jay/"]
"Jay 2" [href="/jay/2"]
"Jay 3" [href="/jay/3"]
"Jay 4" [href="/jay/4"]
"Jay 5" [href="/jay/5"]
"Jay 6" [href="/jay/6"]
"Jay 1" -> "Jay 2" -> "Jay 3" -> "Jay 4" -> "Jay 5" -> "Jay 6"
node[group="liminal",style="",fontcolor="#111111"]
"Liminal 1" [href="/liminal"]
"Liminal 2" [href="/liminal/2"]
"Liminal 3" [href="/liminal/3"]
"Liminal 4" [href="/liminal/4"]
"Liminal 5" [href="/liminal/5"]
"Liminal 6" [href="/liminal/6"]
"Liminal 7" [href="/liminal/7"]
"Liminal 8" [href="/liminal/8"]
"Liminal 1" -> "Liminal 2" -> "Liminal 3" -> "Liminal 4" ->
"Liminal 5" -> "Liminal 6" -> "Liminal 7" -> "Liminal 8"
node[group="poly",style="",fontcolor="#111111"]
"Poly 1" [href="/poly"]
"Poly 2" [href="/poly/2"]
"Poly 3" [href="/poly/3"]
"Poly 4" [href="/poly/4"]
"Poly 5" [href="/poly/5"]
"Poly 6" [href="/poly/6"]
"Poly 1" -> "Poly 2" -> "Poly 3" -> "Poly 4" -> "Poly 5" -> "Poly 6"
node[group="rape",style="filled",fillcolor="#330000",fontcolor="#dccccc"]
"Rape 1" [href="/sex/rape"]
"Rape 2" [href="/sex/rape/2"]
"Rape 3" [href="/sex/rape/3"]
"Rape 4" [href="/sex/rape/4"]
"Rape 1" -> "Rape 2" -> "Rape 3" -> "Rape 4"
node[group="sex",style="filled",fillcolor="#eeeef8",fontcolor="#111111"]
"Sex 1" [href="/sex"]
"Sex 2" [href="/sex/2"]
"Sex 3" [href="/sex/3"]
"Sex 4" [href="/sex/4"]
"Sex 5" [href="/sex/5"]
"Sex 6" [href="/sex/6"]
"Sex 7" [href="/sex/7"]
"Sex 8" [href="/sex/8"]
"Sex 9" [href="/sex/9"]
"Sex 10" [href="/sex/10"]
"Sex 1" -> "Sex 2" -> "Sex 3" -> "Sex 4" -> "Sex 5" -> "Sex 6" -> "Sex 7" ->
"Sex 8" -> "Sex 9" -> "Sex 10"
node[group="kink",style="filled",fillcolor="#17111a",fontcolor="#ffffff"]
"Kink 1" [href="/sex/kink"]
"Kink 2" [href="/sex/kink/2"]
"Kink 3" [href="/sex/kink/3"]
"Kink 4" [href="/sex/kink/4"]
"Kink 1" -> "Kink 2" -> "Kink 3" -> "Kink 4"
node[group="aside",style="",fontcolor="#111111"]
"Dreams 3" [href="/aside/dreams/3"]
node[group="software",style="filled",fillcolor="#eaf5ff",fontcolor="#05264c"]
"Software 1" [href="https://github.com/makyo/ally/pull/4/commits/c7d73fc7a727d34728b353a2c428b0da71788bf0"]
"Software 2" [href="https://github.com/makyo/ally/pull/4/commits/04b7300615386bccbb331caebcf396077f6fc9ea"]
"Software 3" [href="https://github.com/makyo/ally/pull/4/commits/d73e63f3fdc0bce89f06334959ade28888a2f7b2"]
"Software 4" [href="https://github.com/makyo/ally/pull/4/commits/90acc199cd80944f6c5eb6834a2fa67783db4d7d"]
"Software 5" [href="https://github.com/makyo/ally/pull/4/commits/49f83b2148f70151c43f8ef77a061e7252d9b1d4"]
"Software 6" [href="https://github.com/makyo/ally/pull/4/commits/ab8302ca2f6ca00c0a5bdfebcb4b2f2291ec9833"]
"Software 1" -> "Software 2" -> "Software 3" -> "Software 4" ->
"Software 5" -> "Software 6"
node[group="burnout",style="",fontcolor="#111111"]
"Burnout 1" [href="/burnout"]
"Burnout 2" [href="/burnout/2"]
"Burnout 3" [href="/burnout/3"]
"Burnout 4" [href="/burnout/4"]
"Burnout 1" -> "Burnout 2" -> "Burnout 3" -> "Burnout 4"
// This is the central axis
node[group="ally",style="",fontcolor="#111111"] // `core` folder
"ally 1" [href="/"]
"ally 2" [href="/2"]
"ally 3" [href="/3"]
"ally 4" [href="/4"]
"ally 5" [href="/5"]
"ally 6" [href="/6"]
"ally 7" [href="/7"]
"ally 8" [href="/8"]
"ally 9" [href="/9"]
"ally 10" [href="/10"]
"ally 11" [href="/11"]
"ally 12" [href="/12"]
"ally 13" [href="/13"]
"ally 14" [href="/14"]
"ally 15" [href="/15"]
"ally 16" [href="/16"]
"ally 17" [href="/17"]
"ally 18" [href="/18"]
"ally 19" [href="/19"]
"ally 20" [href="/20"]
"ally 21" [href="/21"]
"ally 22" [href="/22"]
"ally 23" [href="/23"]
"ally 24" [href="/24"]
"ally 25" [href="/25"]
"ally 26" [href="/26"]
"ally 27" [href="/27"]
"ally 28" [href="/28"]
"ally 29" [href="/29"]
"To be continued..." [shape="none"]
"ally 1" -> "ally 2" -> "ally 3" -> "ally 4" -> "ally 5" ->
"ally 6" -> "ally 7" -> "ally 8" -> "ally 9" -> "ally 10" ->
"ally 11" -> "ally 12" -> "ally 13" -> "ally 14" -> "ally 15" ->
"ally 16" -> "ally 17" -> "ally 18" -> "ally 19" -> "ally 20" ->
"ally 21" -> "ally 22" -> "ally 23" -> "ally 24" -> "ally 25" ->
"ally 26" -> "ally 27" -> "ally 28" -> "ally 29" -> "To be continued..."
node[group="birds",style="",fontcolor="#111111"]
"Birds 1" [href="/birds"]
"Birds 2" [href="/birds/2"]
"Birds 3" [href="/birds/3"]
"Birds 4" [href="/birds/4"]
"Birds 5" [href="/birds/5"]
"Birds 1" -> "Birds 2" -> "Birds 3" -> "Birds 4" -> "Birds 5"
// Must come before Furry to position it to the left.
node[group="koan",style="filled",fillcolor="#1f183a",fontcolor="#ccccdd"]
"Koan 1" [href="/koan/"]
"Koan 2" [href="/koan/2"]
"Koan 3" [href="/koan/3"]
"Koan 4" [href="/koan/4"]
"Koan 5" [href="/koan/5"]
"Koan 6" [href="/koan/6"]
"Koan 1" -> "Koan 2" -> "Koan 3" -> "Koan 4" -> "Koan 5" -> "Koan 6"
node[group="fursona",style="",fontcolor="#111111"]
"Fursoñas 1" [href="/furry/fursona/"]
"Fursoñas 2" [href="/furry/fursona/2"]
"Fursoñas 3" [href="/furry/fursona/3"]
"Fursoñas 4" [href="/furry/fursona/4"]
"Fursoñas 5" [href="/furry/fursona/5"]
"Fursoñas 6" [href="/furry/fursona/6"]
"Fursoñas 7" [href="/furry/fursona/7"]
"Fursoñas 8" [href="/furry/fursona/8"]
"Fursoñas 1" -> "Fursoñas 2" -> "Fursoñas 3" -> "Fursoñas 4" ->
"Fursoñas 5" -> "Fursoñas 6" -> "Fursoñas 7" -> "Fursoñas 8"
node[group="furry",style="",fontcolor="#111111"]
"Furry 1" [href="/furry"]
"Furry 2" [href="/furry/2"]
"Furry 3" [href="/furry/3"]
"Furry 4" [href="/furry/4"]
"Furry 5" [href="/furry/5"]
"Furry 6" [href="/furry/6"]
"Furry 7" [href="/furry/7"]
"Furry 1" -> "Furry 2" -> "Furry 3" -> "Furry 4" -> "Furry 5" ->
"Furry 6" -> "Furry 7"
node[group="margaras"]
"Margaras 1" [href="/furry/margaras"]
"Margaras 2" [href="/furry/margaras/2"]
"Margaras 3" [href="/furry/margaras/3"]
"Margaras 4" [href="/furry/margaras/4"]
"Margaras 5" [href="/furry/margaras/5"]
"Margaras 6" [href="/furry/margaras/6"]
"Margaras 1" -> "Margaras 2" -> "Margaras 3" -> "Margaras 4" ->
"Margaras 5" -> "Margaras 6"
node[group="younes"]
"Younes 1" [href="/furry/younes"]
"Younes 2" [href="/furry/younes/2"]
"Younes 3" [href="/furry/younes/3"]
"Younes 1" -> "Younes 2" -> "Younes 3"
node[group="mania",style="filled",fillcolor="#000000",fontcolor="#dddddd"]
"Manic notes 1" [href="/mania/"]
"Manic notes 2" [href="/mania/2"]
"Manic notes 3" [href="/mania/3"]
"Manic notes 4" [href="/mania/4"]
"Manic notes 5" [href="/mania/5"]
"Manic notes 1" -> "Manic notes 2" -> "Manic notes 3" -> "Manic notes 4" ->
"Manic notes 5"
node[group="mp",style="",fontcolor="#111111"]
"Manifesto Project 1" [href="/manifesto-project"]
"Manifesto Project 2" [href="/manifesto-project/2"]
"Manifesto Project 3" [href="/manifesto-project/3"]
"Manifesto Project 4" [href="/manifesto-project/4"]
"Manifesto Project 5" [href="/manifesto-project/5"]
"Manifesto Project 6" [href="/manifesto-project/6"]
"Manifesto Project 7" [href="/manifesto-project/7"]
"Manifesto Project 8" [href="/manifesto-project/8"]
"Manifesto Project 9" [href="/manifesto-project/9"]
"Manifesto Project 10" [href="/manifesto-project/10"]
"Manifesto Project 11" [href="/manifesto-project/11"]
"Manifesto Project 12" [href="/manifesto-project/12"]
"Manifesto Project 13" [href="/manifesto-project/13"]
"Manifesto Project 14" [href="/manifesto-project/14"]
"Manifesto Project 1" -> "Manifesto Project 2" -> "Manifesto Project 3" ->
"Manifesto Project 4" -> "Manifesto Project 5" -> "Manifesto Project 6" ->
"Manifesto Project 7" -> "Manifesto Project 8" -> "Manifesto Project 9" ->
"Manifesto Project 10" -> "Manifesto Project 11" ->
"Manifesto Project 12" -> "Manifesto Project 13" ->
"Manifesto Project 14"
node[group="gender",style="",fontcolor="#111111"]
"Gender 1" [href="/gender"]
"Gender 2" [href="/gender/2"]
"Gender 3" [href="/gender/3"]
"Gender 4" [href="/gender/4"]
"Gender 5" [href="/gender/5"]
"Gender 6" [href="/gender/6"]
"Gender 7" [href="/gender/7"]
"Gender 8" [href="/gender/8"]
"Gender 9" [href="/gender/9"]
"Gender 1" -> "Gender 2" -> "Gender 3" -> "Gender 4" -> "Gender 5" ->
"Gender 6" -> "Gender 7" -> "Gender 8" -> "Gender 9"
node[group="surgery"]
"Surgery 1" [href="/gender/surgery"]
"Surgery 2" [href="/gender/surgery/2"]
"Surgery 3" [href="/gender/surgery/3"]
"Surgery 4" [href="/gender/surgery/4"]
"Surgery 5" [href="/gender/surgery/5"]
"Surgery 6" [href="/gender/surgery/6"]
"Surgery 7" [href="/gender/surgery/7"]
"Surgery 8" [href="/gender/surgery/8"]
"Surgery 9" [href="/gender/surgery/9"]
"Surgery 10" [href="/gender/surgery/10"]
"Surgery 1" -> "Surgery 2" -> "Surgery 3" -> "Surgery 4" ->
"Surgery 5" -> "Surgery 6" -> "Surgery 7" -> "Surgery 8" ->
"Surgery 9" -> "Surgery 10"
node[group="sh",style="filled",fillcolor="#222228",fontcolor="#dddddd"]
"Self-harm 1" [href="/self-harm"]
"Self-harm 2" [href="/self-harm/2"]
"Self-harm 3" [href="/self-harm/3"]
"Self-harm 1" -> "Self-harm 2" -> "Self-harm 3"
node[group="suicide",style="filled",fillcolor="#222222",fontcolor="#aaaaaa"]
"Suicide 1" [href="/self-harm/suicide"]
"Suicide 2" [href="/self-harm/suicide/2"]
"Suicide 3" [href="/self-harm/suicide/3"]
"Suicide 4" [href="/self-harm/suicide/4"]
"Suicide 5" [href="/self-harm/suicide/5"]
"Suicide 6" [href="/self-harm/suicide/6"]
"Suicide 7" [href="/self-harm/suicide/7"]
"Suicide 8" [href="/self-harm/suicide/8"]
"Suicide 9" [href="/self-harm/suicide/9"]
"Suicide 10" [href="/self-harm/suicide/10"]
"Suicide 11" [href="/self-harm/suicide/11"]
"Suicide 12" [href="/self-harm/suicide/12"]
"Suicide 13" [href="/self-harm/suicide/13"]
"Suicide 1" -> "Suicide 2" -> "Suicide 3" ->
"Suicide 4" -> "Suicide 5" -> "Suicide 6" -> "Suicide 7" ->
"Suicide 8" -> "Suicide 9" -> "Suicide 10" -> "Suicide 11" ->
"Suicide 12" -> "Suicide 13"
node[group="writing",style="",fontcolor="#111111"]
"Writing 1" [href="/writing"]
"Writing 2" [href="/writing/2"]
"Writing 3" [href="/writing/3"]
"Writing 4" [href="/writing/4"]
"Writing 5" [href="/writing/5"]
"Writing 6" [href="/writing/6"]
"Writing 7" [href="/writing/7"]
"Writing 1" -> "Writing 2" -> "Writing 3" -> "Writing 4" -> "Writing 5" ->
"Writing 6" -> "Writing 7"
node[group="music",style="",fontcolor="#111111"]
"Music 1" [href="/writing/music"]
"Music 2" [href="/writing/music/2"]
"Music 3" [href="/writing/music/3"]
"Music 4" [href="/writing/music/4"]
"Music 5" [href="/writing/music/5"]
"Music 1" -> "Music 2" -> "Music 3" -> "Music 4" -> "Music 5"
node[group="movement",style="filled",fillcolor="#e6e6fa",fontcolor="#220000"]
"Movement 1" [href="/movement"]
"Movement 2" [href="/movement/2"]
"Movement 3" [href="/movement/3"]
"Movement 4" [href="/movement/4"]
"Movement 5" [href="/movement/5"]
"Movement 6" [href="/movement/6"]
"Movement 7" [href="/movement/7"]
"Movement 8" [href="/movement/8"]
"Movement 9" [href="/movement/9"]
"Movement 1" -> "Movement 2" -> "Movement 3" -> "Movement 4" ->
"Movement 5" -> "Movement 6" -> "Movement 7" -> "Movement 8" ->
"Movement 9"
/**
Connections
Connections should only lead from one quest to another the first time that
link appears. No need to link to a quest a second time.
Wasn't the point of this to be intentionally confusing?
Yeah, but it was grating on me. All of those lines crossing, all those curves, side-quests pushed way down the page because I linked to them too many times.
*/
// Asides
"ally 14" -> "Aside 1"
"Liminal 4" -> "Aside 2"
"Poet and Mystic 7" -> "Aside 3"
// Birds
/* none */
// ally
"ally 8" -> "Manic notes 1"
"ally 9" -> "Birds 1"
"ally 10" -> "Poly 1"
"ally 11" -> "From within 1"
"ally 13" -> "Furry 1"
"ally 15" -> "Liminal 1"
"ally 16" -> "Poet and Mystic 1"
"ally 17" -> "Writing 1"
"ally 18" -> "Software 1"
"ally 23" -> "Movement 1"
"ally 29" -> "Burnout 1"
// Dad
"Dad 11" -> "ally 16"
// From within
"From within 6" -> "ally 12"
// Furry
// Fursona
/* none */
// Margaras
/* none */
// Younes
"Younes 3" -> "Self-harm 1"
"Furry 1" -> "Koan 1"
"Furry 2" -> "Fursoñas 1"
"Furry 6" -> "Margaras 1"
"Furry 7" -> "Younes 1"
// Jay
"Jay 3" -> "Dreams 1"
// Koan
/* none */
// Liminal
"Liminal 8" -> "Dad 1"
// Manic notes
"Manic notes 4" -> "Manifesto Project 1"
// Manifesto Project
/* none */
// Poet and Mystic
/*"Poet and Mystic 1" -> "Manifesto Project 1"*/
"Poet and Mystic 13" -> "Agony and Ecstasy"
"Poet and Mystic 8" -> "Dreams 2"
"Poet and Mystic 11" -> "Overflowing" -> "With" -> "Words 1"
// Poly
"Poly 1" -> "Jay 1"
"Poly 6" -> "Sex 1"
// Self-harm
/*"Self-harm 1" -> "Margaras 1"*/
"Self-harm 3" -> "Suicide 1"
"Self-harm 3" -> "Gender 1"
// Gender
"Gender 6" -> "Surgery 1"
// Sex
"Sex 4" -> "Kink 1"
"Sex 8" -> "Rape 1"
"Sex 8" -> "Dreams 3"
// Writing
/*"Writing 2" -> "Koans 1"
"Writing 2" -> "Birds 1"
"Writing 2" -> "Margaras 1"
"Writing 2" -> "Dad 1"
"Writing 2" -> "Fursoñas 1"
"Writing 2" -> "Poet and Mystic 1"*/
"Writing 7" -> "Music 1"
}

BIN
book/assets/static/map.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 308 KiB

3585
book/assets/static/map.svg Normal file

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 172 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

1570
book/assets/static/nmap.svg Normal file

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 201 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

View File

@ -0,0 +1,248 @@
<?xml version="1.0" standalone="yes"?>
<svg width="505" height="555" viewbox="0 0 505 555" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<style>
@import url('https://fonts.googleapis.com/css?family=Nunito');
.bbbingo-card rect.background {
fill: #223;
stroke-width: 0px;
}
.bbbingo-card text {
font-family: "Nunito", sans-serif;
fill: #dcd;
}
.bbbingo-card text.title {
font-size: 45px;
font-style: italic;
}
.bbbingo-card tspan.paler {
fill: #656;
}
.bbbingo-card tspan.pale {
fill: #989;
}
.bbbingo-card rect {
fill: none;
stroke: #bab;
stroke-width: 5px;
}
.bbbingo-card rect.selected {
fill: #445;
stroke: #fef;
}
.bbbingo-card path {
fill: #656;
opacity: 0.5;
}
.bbbingo-card text.freespace {
font-size: 10pt;
opacity: 0.5;
}
.bbbingo-card .text g text {
font-size: 12px;
}
.bbbingo-card a, a:visited, a:active, a:hover {
fill: #dcd;
text-decoration: underline;
}
.bbbingo-card rect.target {
fill: transparent;
stroke: none;
}
.bbbingo-card circle.play_marker {
display: none;
}
.bbbingo-card circle.marked {
display: block;
fill: #f8b;
opacity: 0.4;
}
</style>
<g class="bbbingo-card" transform="translate(2.5, 2.25)">
<rect class="background" x="-2.5" y="-2.5" width="507.5" height="557.5" />
<text class="title" x="0" y="0" dominant-baseline="hanging">
<tspan class="paler">b</tspan>
<tspan class="pale">b</tspan>
b
i
n
g
o
</text>
<text class="name" x="500" y="0" dominant-baseline="hanging" text-anchor="end"><a xlink:href="/preparations-squadrons-voices-spans" target="_blank">Kink Bingo (Maddy)</a> (2)</text>
<text class="author" x="500" y="20px" dominant-baseline="hanging" text-anchor="end">by <a xlink:href="/~makyo">makyo</a></text>
<g transform="translate(0, 50)">
<rect x="0" y="0" width="100" height="100" class="slot_0" />
<rect x="100" y="0" width="100" height="100" class="slot_1" />
<rect x="200" y="0" width="100" height="100" class="slot_2" />
<rect x="300" y="0" width="100" height="100" class="slot_3" />
<rect x="400" y="0" width="100" height="100" class="slot_4" />
<rect x="0" y="100" width="100" height="100" class="slot_5" />
<rect x="100" y="100" width="100" height="100" class="slot_6" />
<rect x="200" y="100" width="100" height="100" class="slot_7" />
<rect x="300" y="100" width="100" height="100" class="slot_8" />
<rect x="400" y="100" width="100" height="100" class="slot_9" />
<rect x="0" y="200" width="100" height="100" class="slot_10" />
<rect x="100" y="200" width="100" height="100" class="slot_11" />
<rect x="200" y="200" width="100" height="100" class="slot_12" />
<rect x="300" y="200" width="100" height="100" class="slot_13" />
<rect x="400" y="200" width="100" height="100" class="slot_14" />
<rect x="0" y="300" width="100" height="100" class="slot_15" />
<rect x="100" y="300" width="100" height="100" class="slot_16" />
<rect x="200" y="300" width="100" height="100" class="slot_17" />
<rect x="300" y="300" width="100" height="100" class="slot_18" />
<rect x="400" y="300" width="100" height="100" class="slot_19" />
<rect x="0" y="400" width="100" height="100" class="slot_20" />
<rect x="100" y="400" width="100" height="100" class="slot_21" />
<rect x="200" y="400" width="100" height="100" class="slot_22" />
<rect x="300" y="400" width="100" height="100" class="slot_23" />
<rect x="400" y="400" width="100" height="100" class="slot_24" />
<path d="M 202.5 242.5 l 40 -40 l -40 0 z" />
<text class="freespace" transform="rotate(-45) translate(-12.5, 310)">Free</text>
<g class="text">
<g transform="translate(0, 0)">
<text x="50" y="53" text-anchor="middle">Degradation</text>
<circle cx="50" cy="50" r="35" class="play_marker play_0" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="0" />
</g>
<g transform="translate(100, 0)">
<text x="50" y="53" text-anchor="middle">Scent marking</text>
<circle cx="50" cy="50" r="35" class="play_marker play_1" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="1" />
</g>
<g transform="translate(200, 0)">
<text x="50" y="53" text-anchor="middle">Breeding</text>
<circle cx="50" cy="50" r="35" class="play_marker play_2" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="2" />
</g>
<g transform="translate(300, 0)">
<text x="50" y="53" text-anchor="middle">Non-consensual</text>
<circle cx="50" cy="50" r="35" class="play_marker play_3" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="3" />
</g>
<g transform="translate(400, 0)">
<text x="50" y="45" text-anchor="middle">Risk of</text><text x="50" y="60" text-anchor="middle">pregnancy</text>
<circle cx="50" cy="50" r="35" class="play_marker play_4" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="4" />
</g>
<g transform="translate(0, 100)">
<text x="50" y="53" text-anchor="middle">Scruff biting</text>
<circle cx="50" cy="50" r="35" class="play_marker play_5" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="5" />
</g>
<g transform="translate(100, 100)">
<text x="50" y="45" text-anchor="middle">Leash or collar</text><text x="50" y="60" text-anchor="middle">pulling</text>
<circle cx="50" cy="50" r="35" class="play_marker play_6" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="6" />
</g>
<g transform="translate(200, 100)">
<text x="50" y="53" text-anchor="middle">Teasing</text>
<circle cx="50" cy="50" r="35" class="play_marker play_7" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="7" />
</g>
<g transform="translate(300, 100)">
<text x="50" y="38" text-anchor="middle">Exhibitionism</text><text x="50" y="53" text-anchor="middle">(primarily</text><text x="50" y="68" text-anchor="middle">public sex)</text>
<circle cx="50" cy="50" r="35" class="play_marker play_8" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="8" />
</g>
<g transform="translate(400, 100)">
<text x="50" y="30" text-anchor="middle">Identity</text><text x="50" y="45" text-anchor="middle">(gender,</text><text x="50" y="60" text-anchor="middle">species, etc)</text><text x="50" y="75" text-anchor="middle">denial</text>
<circle cx="50" cy="50" r="35" class="play_marker play_9" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="9" />
</g>
<g transform="translate(0, 200)">
<text x="50" y="53" text-anchor="middle">Heat/estrus</text>
<circle cx="50" cy="50" r="35" class="play_marker play_10" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="10" />
</g>
<g transform="translate(100, 200)">
<text x="50" y="53" text-anchor="middle">Breath control</text>
<circle cx="50" cy="50" r="35" class="play_marker play_11" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="11" />
</g>
<g transform="translate(200, 200)">
<text x="50" y="53" text-anchor="middle">Humiliation</text>
<circle cx="50" cy="50" r="35" class="play_marker play_12" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="12" />
</g>
<g transform="translate(300, 200)">
<text x="50" y="53" text-anchor="middle">Knotting/tying</text>
<circle cx="50" cy="50" r="35" class="play_marker play_13" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="13" />
</g>
<g transform="translate(400, 200)">
<text x="50" y="30" text-anchor="middle">Ear play</text><text x="50" y="45" text-anchor="middle">(teasing,</text><text x="50" y="60" text-anchor="middle">pulling,</text><text x="50" y="75" text-anchor="middle">biting, etc)</text>
<circle cx="50" cy="50" r="35" class="play_marker play_14" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="14" />
</g>
<g transform="translate(0, 300)">
<text x="50" y="38" text-anchor="middle">Discipline</text><text x="50" y="53" text-anchor="middle">or</text><text x="50" y="68" text-anchor="middle">reinforcement</text>
<circle cx="50" cy="50" r="35" class="play_marker play_15" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="15" />
</g>
<g transform="translate(100, 300)">
<text x="50" y="23" text-anchor="middle">Weakened mental</text><text x="50" y="38" text-anchor="middle">state (hypno,</text><text x="50" y="53" text-anchor="middle">drugs, estrus,</text><text x="50" y="68" text-anchor="middle">exhaustion,</text><text x="50" y="83" text-anchor="middle">etc)</text>
<circle cx="50" cy="50" r="35" class="play_marker play_16" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="16" />
</g>
<g transform="translate(200, 300)">
<text x="50" y="53" text-anchor="middle">Master/pet</text>
<circle cx="50" cy="50" r="35" class="play_marker play_17" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="17" />
</g>
<g transform="translate(300, 300)">
<text x="50" y="45" text-anchor="middle">Humiliating</text><text x="50" y="60" text-anchor="middle">instructions</text>
<circle cx="50" cy="50" r="35" class="play_marker play_18" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="18" />
</g>
<g transform="translate(400, 300)">
<text x="50" y="45" text-anchor="middle">Speech</text><text x="50" y="60" text-anchor="middle">restrictions</text>
<circle cx="50" cy="50" r="35" class="play_marker play_19" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="19" />
</g>
<g transform="translate(0, 400)">
<text x="50" y="38" text-anchor="middle">Pain/blood</text><text x="50" y="53" text-anchor="middle">(accidental</text><text x="50" y="68" text-anchor="middle">or intentional)</text>
<circle cx="50" cy="50" r="35" class="play_marker play_20" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="20" />
</g>
<g transform="translate(100, 400)">
<text x="50" y="45" text-anchor="middle">Orgasm or</text><text x="50" y="60" text-anchor="middle">pleasure denial</text>
<circle cx="50" cy="50" r="35" class="play_marker play_21" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="21" />
</g>
<g transform="translate(200, 400)">
<text x="50" y="15" text-anchor="middle">Clothes</text><text x="50" y="30" text-anchor="middle">(bulges, cum</text><text x="50" y="45" text-anchor="middle">stains on</text><text x="50" y="60" text-anchor="middle">clothes,</text><text x="50" y="75" text-anchor="middle">clothed sex,</text><text x="50" y="90" text-anchor="middle">etc)</text>
<circle cx="50" cy="50" r="35" class="play_marker play_22" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="22" />
</g>
<g transform="translate(300, 400)">
<text x="50" y="23" text-anchor="middle">Post-sex</text><text x="50" y="38" text-anchor="middle">degradation</text><text x="50" y="53" text-anchor="middle">(public</text><text x="50" y="68" text-anchor="middle">parading,</text><text x="50" y="83" text-anchor="middle">etc)</text>
<circle cx="50" cy="50" r="35" class="play_marker play_23" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="23" />
</g>
<g transform="translate(400, 400)">
<text x="50" y="53" text-anchor="middle">Coercion</text>
<circle cx="50" cy="50" r="35" class="play_marker play_24" />
<rect x="0" y="0" width="100" height="100" class="target" data-slot="24" />
</g>
</g>
<path d="M 202.5 242.5 l 40 -40 l -40 0 z" />
<text class="freespace" transform="rotate(-45) translate(-12.5, 310)">Free</text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

View File

@ -13,28 +13,23 @@ Current mood: Bright blue with a tinge of purple, but mostly off white and hazy.
\end{leftcolumn} \end{leftcolumn}
\end{paracol} \end{paracol}
\newpage \includepdf{assets/static/color/blue_flag.pdf}
\null
\vfill
% XXX
%\noindent\includegraphics[width=7in]{../static/color/blue_flag.jpg}
\vfill
\newpage \newpage
\begin{paracol}{2} \begin{paracol}{2}
\begin{leftcolumn} \begin{leftcolumn}
\null
\vfill
July 3rd, 2004, shortly after midnight. July 3rd, 2004, shortly after midnight.
\begin{quotation} \begin{quotation}
Greens covering my chest and shoulders warmly are happiness. Greens covering my chest and shoulders warmly are happiness.
\end{quotation} \end{quotation}
\vfill
\end{leftcolumn} \end{leftcolumn}
\end{paracol} \end{paracol}
\begin{center} \includepdf{assets/static/color/green_door.pdf}
% XXX
%\noindent\includegraphics[width=4in]{../static/color/green_door.jpg}
\end{center}
\begin{paracol}{2} \begin{paracol}{2}
\begin{leftcolumn} \begin{leftcolumn}
@ -52,6 +47,8 @@ Whatever, you're rambling.
Guilty, conspirator. Guilty, conspirator.
\end{quotation} \end{quotation}
\newpage
\begin{ally} \begin{ally}
And these pictures? And these pictures?
\end{ally} \end{ally}
@ -102,41 +99,45 @@ That's a post-rock song title.
\begin{ally} \begin{ally}
Is it wrong? Is it wrong?
\end{ally} \end{ally}
% XXX \end{leftcolumn}
%\noindent\includegraphics[width=4.35in]{../static/color/orange_eyes.jpg} \end{paracol}
\includepdf{assets/static/color/orange_eyes.pdf}
\begin{paracol}{2}
\begin{leftcolumn}
I'll take a picture, lasso a color, and desaturate everything else. Sometimes, it's fun. I do it to Falcon's eyes a lot because they're so pretty. I'll take a picture, lasso a color, and desaturate everything else. Sometimes, it's fun. I do it to Falcon's eyes a lot because they're so pretty.
\begin{ally} \begin{ally}
And sometimes it's something more. And sometimes it's something more.
\end{ally} \end{ally}
Yeah. Sometimes it's a compulsion. Sometimes a picture will latch onto me and never let me go. Sometimes I'll remove all color. Yeah. Sometimes it's a compulsion. Sometimes a picture will latch onto me and never let me go. Sometimes I'll remove all color.
\end{leftcolumn}
\end{paracol}
% XXX % XXX
%\noindent\includegraphics[width=4.35in]{../static/color/bw1.jpg} \includepdf{assets/static/color/bw1.pdf}
% XXX % XXX
%\noindent\includegraphics[width=4.35in]{../static/color/bw2.jpg} \includepdf{assets/static/color/bw2.pdf}
\newpage
\begin{paracol}{2}
\begin{leftcolumn}
Sometimes I'll blow out the background because the foreground is so completely overwhelming. Sometimes I'll blow out the background because the foreground is so completely overwhelming.
\end{leftcolumn} \end{leftcolumn}
\end{paracol} \end{paracol}
\vfill
% XXX % XXX
%\noindent\includegraphics[width=7in]{../static/color/bw3.jpg} \includepdf{assets/static/color/bw3.pdf}
\null
\vfill \vfill
\newpage
Sometimes I'll skew colors all in one direction. Sometimes I'll skew colors all in one direction.
\vfill \vfill
% XXX % XXX
%\noindent\includegraphics[width=7in]{../static/color/window_view.png} \includepdf{assets/static/color/window_view.pdf}
\vfill \vfill
\newpage \newpage

View File

@ -282,14 +282,19 @@ Will you feel left out?
Maybe. Will you? Maybe. Will you?
\end{ally} \end{ally}
I guess. I guess.
\end{leftcolumn}
\end{paracol}
June 10, 2015: \includepdf{assets/static/grey--running-away-big--makyo.pdf}
% TODO \begin{paracol}{2}
% \href{https://drab-makyo.com/commissions/by-artist/grey/grey--running-away-small--makyo--G.jpg}{\includegraphics{https://drab-makyo.com/commissions/by-artist/grey/grey--running-away-small--makyo--G.jpg}}\\ \begin{rightcolumn*}
% Art by Grey White. \begin{flushright}
\emph{June 10, 2015}
I think we all have a lot of formative moments in our lives. For me, it was stuff like coming out, the realization of my own mortality, the suicide attempt, and so on. I think that they tend to fall into two basic categories: those which affect us consciously, which we think about from day to day, with enough frequency to say `often'; and those which affect us more subconsciously, where we can go years or decades without really thinking about them, and yet they still inform so many of your actions. \end{flushright}
\end{rightcolumn*}
\begin{leftcolumn}
\noindent I think we all have a lot of formative moments in our lives. For me, it was stuff like coming out, the realization of my own mortality, the suicide attempt, and so on. I think that they tend to fall into two basic categories: those which affect us consciously, which we think about from day to day, with enough frequency to say `often'; and those which affect us more subconsciously, where we can go years or decades without really thinking about them, and yet they still inform so many of your actions.
Running away spent a lot of time in the subconscious camp, quietly informing several aspects of how I viewed myself and how I viewed the world around me. It was only recently, in the last year or so, that it's come to the forefront, thanks largely to recent discussions with friends, family, and therapists. It's only through that process that I've come to realize just how formative an event it really was. Running away spent a lot of time in the subconscious camp, quietly informing several aspects of how I viewed myself and how I viewed the world around me. It was only recently, in the last year or so, that it's come to the forefront, thanks largely to recent discussions with friends, family, and therapists. It's only through that process that I've come to realize just how formative an event it really was.
@ -580,12 +585,6 @@ Yes.
\begin{ally} \begin{ally}
Dig deeper. Dig deeper.
\end{ally} \end{ally}
% TODO
% \begin{figure}
% \centering
% \includegraphics{/rock-park.jpg}
% \caption{Rock park}
% \end{figure}
\newpage \newpage
When I was getting ready to leave bConnected, I started struggling with movements. It started as a twitchiness in the hands. It started with a wringing of the fingers. It started with a slight nod of the head. It started in so many tiny ways that I didn't really put together. When I was getting ready to leave bConnected, I started struggling with movements. It started as a twitchiness in the hands. It started with a wringing of the fingers. It started with a slight nod of the head. It started in so many tiny ways that I didn't really put together.

View File

@ -43,7 +43,8 @@ Some bits weren't so easy, though. The overlap between the discussion that's inv
\begin{ally} \begin{ally}
Are you going to provide us with a Venn Diagram? In hand-coded SVG, perhaps? Are you going to provide us with a Venn Diagram? In hand-coded SVG, perhaps?
\end{ally} \end{ally}
% \href{/healthy-sound.svg}{\includegraphics{/healthy-sound.svg}}
\includegraphics[width=4.5in]{assets/static/healthy-sound.png}
Happy? Happy?

View File

@ -16,9 +16,8 @@ Close enough, yes. I let my characters bear the weight of kink and sexual intera
And what do you need from kink? And what do you need from kink?
\end{ally} \end{ally}
Beyond just fantasy fulfillment? A way to cope, I suppose. Beyond just fantasy fulfillment? A way to cope, I suppose.
\newpage
% \href{https://bbbingo.me/preparations-squadrons-voices-spans}{\includegraphics{/sex/kink/bingo.svg}} \noindent\includegraphics[width=2.5in]{assets/static/sex/kink/bingo.png}
\begin{ally} \begin{ally}
I'm not really sure what to make of the fact that you made a bingo card for your kinks. I'm not really sure what to make of the fact that you made a bingo card for your kinks.

View File

@ -18,3 +18,4 @@
\usepackage{xltxtra} \usepackage{xltxtra}
\usepackage{verse} \usepackage{verse}
\usepackage{paracol} \usepackage{paracol}
\usepackage{pdfpages}