-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCindyPrintWorker.js
601 lines (599 loc) · 289 KB
/
CindyPrintWorker.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
(function(){
var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;$jscomp.ISOLATE_POLYFILLS=!1;$jscomp.FORCE_POLYFILL_PROMISE=!1;$jscomp.FORCE_POLYFILL_PROMISE_WHEN_NO_UNHANDLED_REJECTION=!1;$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,n){if(a==Array.prototype||a==Object.prototype)return a;a[b]=n.value;return a};
$jscomp.getGlobal=function(a){a=["object"==typeof globalThis&&globalThis,a,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var b=0;b<a.length;++b){var n=a[b];if(n&&n.Math==Math)return n}throw Error("Cannot find global object");};$jscomp.global=$jscomp.getGlobal(this);$jscomp.IS_SYMBOL_NATIVE="function"===typeof Symbol&&"symbol"===typeof Symbol("x");$jscomp.TRUST_ES6_POLYFILLS=!$jscomp.ISOLATE_POLYFILLS||$jscomp.IS_SYMBOL_NATIVE;$jscomp.polyfills={};
$jscomp.propertyToPolyfillSymbol={};$jscomp.POLYFILL_PREFIX="$jscp$";var $jscomp$lookupPolyfilledValue=function(a,b){var n=$jscomp.propertyToPolyfillSymbol[b];if(null==n)return a[b];n=a[n];return void 0!==n?n:a[b]};$jscomp.polyfill=function(a,b,n,d){b&&($jscomp.ISOLATE_POLYFILLS?$jscomp.polyfillIsolated(a,b,n,d):$jscomp.polyfillUnisolated(a,b,n,d))};
$jscomp.polyfillUnisolated=function(a,b,n,d){n=$jscomp.global;a=a.split(".");for(d=0;d<a.length-1;d++){var k=a[d];if(!(k in n))return;n=n[k]}a=a[a.length-1];d=n[a];b=b(d);b!=d&&null!=b&&$jscomp.defineProperty(n,a,{configurable:!0,writable:!0,value:b})};
$jscomp.polyfillIsolated=function(a,b,n,d){var k=a.split(".");a=1===k.length;d=k[0];d=!a&&d in $jscomp.polyfills?$jscomp.polyfills:$jscomp.global;for(var h=0;h<k.length-1;h++){var c=k[h];if(!(c in d))return;d=d[c]}k=k[k.length-1];n=$jscomp.IS_SYMBOL_NATIVE&&"es6"===n?d[k]:null;b=b(n);null!=b&&(a?$jscomp.defineProperty($jscomp.polyfills,k,{configurable:!0,writable:!0,value:b}):b!==n&&(void 0===$jscomp.propertyToPolyfillSymbol[k]&&(n=1E9*Math.random()>>>0,$jscomp.propertyToPolyfillSymbol[k]=$jscomp.IS_SYMBOL_NATIVE?
$jscomp.global.Symbol(k):$jscomp.POLYFILL_PREFIX+n+"$"+k),$jscomp.defineProperty(d,$jscomp.propertyToPolyfillSymbol[k],{configurable:!0,writable:!0,value:b})))};$jscomp.underscoreProtoCanBeSet=function(){var a={a:!0},b={};try{return b.__proto__=a,b.a}catch(n){}return!1};
$jscomp.setPrototypeOf=$jscomp.TRUST_ES6_POLYFILLS&&"function"==typeof Object.setPrototypeOf?Object.setPrototypeOf:$jscomp.underscoreProtoCanBeSet()?function(a,b){a.__proto__=b;if(a.__proto__!==b)throw new TypeError(a+" is not extensible");return a}:null;$jscomp.arrayIteratorImpl=function(a){var b=0;return function(){return b<a.length?{done:!1,value:a[b++]}:{done:!0}}};$jscomp.arrayIterator=function(a){return{next:$jscomp.arrayIteratorImpl(a)}};
$jscomp.makeIterator=function(a){var b="undefined"!=typeof Symbol&&Symbol.iterator&&a[Symbol.iterator];return b?b.call(a):$jscomp.arrayIterator(a)};$jscomp.generator={};$jscomp.generator.ensureIteratorResultIsObject_=function(a){if(!(a instanceof Object))throw new TypeError("Iterator result "+a+" is not an object");};
$jscomp.generator.Context=function(){this.isRunning_=!1;this.yieldAllIterator_=null;this.yieldResult=void 0;this.nextAddress=1;this.finallyAddress_=this.catchAddress_=0;this.finallyContexts_=this.abruptCompletion_=null};$jscomp.generator.Context.prototype.start_=function(){if(this.isRunning_)throw new TypeError("Generator is already running");this.isRunning_=!0};$jscomp.generator.Context.prototype.stop_=function(){this.isRunning_=!1};
$jscomp.generator.Context.prototype.jumpToErrorHandler_=function(){this.nextAddress=this.catchAddress_||this.finallyAddress_};$jscomp.generator.Context.prototype.next_=function(a){this.yieldResult=a};$jscomp.generator.Context.prototype.throw_=function(a){this.abruptCompletion_={exception:a,isException:!0};this.jumpToErrorHandler_()};$jscomp.generator.Context.prototype.return=function(a){this.abruptCompletion_={return:a};this.nextAddress=this.finallyAddress_};
$jscomp.generator.Context.prototype.jumpThroughFinallyBlocks=function(a){this.abruptCompletion_={jumpTo:a};this.nextAddress=this.finallyAddress_};$jscomp.generator.Context.prototype.yield=function(a,b){this.nextAddress=b;return{value:a}};$jscomp.generator.Context.prototype.yieldAll=function(a,b){a=$jscomp.makeIterator(a);var n=a.next();$jscomp.generator.ensureIteratorResultIsObject_(n);if(n.done)this.yieldResult=n.value,this.nextAddress=b;else return this.yieldAllIterator_=a,this.yield(n.value,b)};
$jscomp.generator.Context.prototype.jumpTo=function(a){this.nextAddress=a};$jscomp.generator.Context.prototype.jumpToEnd=function(){this.nextAddress=0};$jscomp.generator.Context.prototype.setCatchFinallyBlocks=function(a,b){this.catchAddress_=a;void 0!=b&&(this.finallyAddress_=b)};$jscomp.generator.Context.prototype.setFinallyBlock=function(a){this.catchAddress_=0;this.finallyAddress_=a||0};$jscomp.generator.Context.prototype.leaveTryBlock=function(a,b){this.nextAddress=a;this.catchAddress_=b||0};
$jscomp.generator.Context.prototype.enterCatchBlock=function(a){this.catchAddress_=a||0;a=this.abruptCompletion_.exception;this.abruptCompletion_=null;return a};$jscomp.generator.Context.prototype.enterFinallyBlock=function(a,b,n){n?this.finallyContexts_[n]=this.abruptCompletion_:this.finallyContexts_=[this.abruptCompletion_];this.catchAddress_=a||0;this.finallyAddress_=b||0};
$jscomp.generator.Context.prototype.leaveFinallyBlock=function(a,b){b=this.finallyContexts_.splice(b||0)[0];if(b=this.abruptCompletion_=this.abruptCompletion_||b){if(b.isException)return this.jumpToErrorHandler_();void 0!=b.jumpTo&&this.finallyAddress_<b.jumpTo?(this.nextAddress=b.jumpTo,this.abruptCompletion_=null):this.nextAddress=this.finallyAddress_}else this.nextAddress=a};$jscomp.generator.Context.prototype.forIn=function(a){return new $jscomp.generator.Context.PropertyIterator(a)};
$jscomp.generator.Context.PropertyIterator=function(a){this.object_=a;this.properties_=[];for(var b in a)this.properties_.push(b);this.properties_.reverse()};$jscomp.generator.Context.PropertyIterator.prototype.getNext=function(){for(;0<this.properties_.length;){var a=this.properties_.pop();if(a in this.object_)return a}return null};$jscomp.generator.Engine_=function(a){this.context_=new $jscomp.generator.Context;this.program_=a};
$jscomp.generator.Engine_.prototype.next_=function(a){this.context_.start_();if(this.context_.yieldAllIterator_)return this.yieldAllStep_(this.context_.yieldAllIterator_.next,a,this.context_.next_);this.context_.next_(a);return this.nextStep_()};
$jscomp.generator.Engine_.prototype.return_=function(a){this.context_.start_();var b=this.context_.yieldAllIterator_;if(b)return this.yieldAllStep_("return"in b?b["return"]:function(n){return{value:n,done:!0}},a,this.context_.return);this.context_.return(a);return this.nextStep_()};
$jscomp.generator.Engine_.prototype.throw_=function(a){this.context_.start_();if(this.context_.yieldAllIterator_)return this.yieldAllStep_(this.context_.yieldAllIterator_["throw"],a,this.context_.next_);this.context_.throw_(a);return this.nextStep_()};
$jscomp.generator.Engine_.prototype.yieldAllStep_=function(a,b,n){try{var d=a.call(this.context_.yieldAllIterator_,b);$jscomp.generator.ensureIteratorResultIsObject_(d);if(!d.done)return this.context_.stop_(),d;var k=d.value}catch(h){return this.context_.yieldAllIterator_=null,this.context_.throw_(h),this.nextStep_()}this.context_.yieldAllIterator_=null;n.call(this.context_,k);return this.nextStep_()};
$jscomp.generator.Engine_.prototype.nextStep_=function(){for(;this.context_.nextAddress;)try{var a=this.program_(this.context_);if(a)return this.context_.stop_(),{value:a.value,done:!1}}catch(b){this.context_.yieldResult=void 0,this.context_.throw_(b)}this.context_.stop_();if(this.context_.abruptCompletion_){a=this.context_.abruptCompletion_;this.context_.abruptCompletion_=null;if(a.isException)throw a.exception;return{value:a.return,done:!0}}return{value:void 0,done:!0}};
$jscomp.generator.Generator_=function(a){this.next=function(b){return a.next_(b)};this.throw=function(b){return a.throw_(b)};this.return=function(b){return a.return_(b)};this[Symbol.iterator]=function(){return this}};$jscomp.generator.createGenerator=function(a,b){b=new $jscomp.generator.Generator_(new $jscomp.generator.Engine_(b));$jscomp.setPrototypeOf&&a.prototype&&$jscomp.setPrototypeOf(b,a.prototype);return b};
$jscomp.asyncExecutePromiseGenerator=function(a){function b(d){return a.next(d)}function n(d){return a.throw(d)}return new Promise(function(d,k){function h(c){c.done?d(c.value):Promise.resolve(c.value).then(b,n).then(h,k)}h(a.next())})};$jscomp.asyncExecutePromiseGeneratorFunction=function(a){return $jscomp.asyncExecutePromiseGenerator(a())};$jscomp.asyncExecutePromiseGeneratorProgram=function(a){return $jscomp.asyncExecutePromiseGenerator(new $jscomp.generator.Generator_(new $jscomp.generator.Engine_(a)))};
$jscomp.owns=function(a,b){return Object.prototype.hasOwnProperty.call(a,b)};$jscomp.polyfill("Object.entries",function(a){return a?a:function(b){var n=[],d;for(d in b)$jscomp.owns(b,d)&&n.push([d,b[d]]);return n}},"es8","es3");function norm3(a){let b=a[0],n=a[1];a=a[2];return Math.sqrt(b*b+n*n+a*a)}function normalized3(a){let b=a[0],n=a[1];a=a[2];let d=1/Math.sqrt(b*b+n*n+a*a);return[d*b,d*n,d*a]}function dehom3(a){let b=1/a[3];return[b*a[0],b*a[1],b*a[2]]}
function scale3(a,b){return[a*b[0],a*b[1],a*b[2]]}function transpose3(a){return[a[0],a[3],a[6],a[1],a[4],a[7],a[2],a[5],a[8]]}function transpose4(a){return[a[0],a[4],a[8],a[12],a[1],a[5],a[9],a[13],a[2],a[6],a[10],a[14],a[3],a[7],a[11],a[15]]}function adj3(a){return[a[4]*a[8]-a[5]*a[7],a[2]*a[7]-a[1]*a[8],a[1]*a[5]-a[2]*a[4],a[5]*a[6]-a[3]*a[8],a[0]*a[8]-a[2]*a[6],a[2]*a[3]-a[0]*a[5],a[3]*a[7]-a[4]*a[6],a[1]*a[6]-a[0]*a[7],a[0]*a[4]-a[1]*a[3]]}
function sub3(a,b){return[a[0]-b[0],a[1]-b[1],a[2]-b[2]]}function add3(a,b){return[a[0]+b[0],a[1]+b[1],a[2]+b[2]]}function add4(a,b){return[a[0]+b[0],a[1]+b[1],a[2]+b[2],a[3]+b[3]]}function cross3(a,b){return[a[1]*b[2]-a[2]*b[1],a[2]*b[0]-a[0]*b[2],a[0]*b[1]-a[1]*b[0]]}
function mul4mm(a,b){return[a[0]*b[0]+a[1]*b[4]+a[2]*b[8]+a[3]*b[12],a[0]*b[1]+a[1]*b[5]+a[2]*b[9]+a[3]*b[13],a[0]*b[2]+a[1]*b[6]+a[2]*b[10]+a[3]*b[14],a[0]*b[3]+a[1]*b[7]+a[2]*b[11]+a[3]*b[15],a[4]*b[0]+a[5]*b[4]+a[6]*b[8]+a[7]*b[12],a[4]*b[1]+a[5]*b[5]+a[6]*b[9]+a[7]*b[13],a[4]*b[2]+a[5]*b[6]+a[6]*b[10]+a[7]*b[14],a[4]*b[3]+a[5]*b[7]+a[6]*b[11]+a[7]*b[15],a[8]*b[0]+a[9]*b[4]+a[10]*b[8]+a[11]*b[12],a[8]*b[1]+a[9]*b[5]+a[10]*b[9]+a[11]*b[13],a[8]*b[2]+a[9]*b[6]+a[10]*b[10]+a[11]*b[14],a[8]*b[3]+a[9]*
b[7]+a[10]*b[11]+a[11]*b[15],a[12]*b[0]+a[13]*b[4]+a[14]*b[8]+a[15]*b[12],a[12]*b[1]+a[13]*b[5]+a[14]*b[9]+a[15]*b[13],a[12]*b[2]+a[13]*b[6]+a[14]*b[10]+a[15]*b[14],a[12]*b[3]+a[13]*b[7]+a[14]*b[11]+a[15]*b[15]]}function mul3mv(a,b){return[a[0]*b[0]+a[1]*b[1]+a[2]*b[2],a[3]*b[0]+a[4]*b[1]+a[5]*b[2],a[6]*b[0]+a[7]*b[1]+a[8]*b[2]]}
function mul4mv(a,b){return[a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+a[3]*b[3],a[4]*b[0]+a[5]*b[1]+a[6]*b[2]+a[7]*b[3],a[8]*b[0]+a[9]*b[1]+a[10]*b[2]+a[11]*b[3],a[12]*b[0]+a[13]*b[1]+a[14]*b[2]+a[15]*b[3]]}function transform4to3(a,b){let n=1/(a[12]*b[0]+a[13]*b[1]+a[14]*b[2]+a[15]*b[3]);return[(a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+a[3]*b[3])*n,(a[4]*b[0]+a[5]*b[1]+a[6]*b[2]+a[7]*b[3])*n,(a[8]*b[0]+a[9]*b[1]+a[10]*b[2]+a[11]*b[3])*n]}
function triangleNormal(a,b,n){a=dehom3(a);b=sub3(dehom3(b),a);n=sub3(dehom3(n),a);return normalized3(cross3(b,n))};function GlError(a){this.message=a}GlError.prototype.toString=function(){return this.message};
function ShaderProgram(a,b,n){this.handle=a.createProgram();a.webgl2&&(b="#version 300 es\n"+b.replace(/attribute/g,"in").replace(/varying/g,"out"),n="#version 300 es\n"+n.replace(/varying/g,"in").replace(/gl_FragColor/g,"FragColor").replace(/texture2D/g,"texture").replace(/precision highp float;/g,"precision highp float;\n#define webgl2 true\nout vec4 FragColor;"));this.vs=this.createShader(a,a.VERTEX_SHADER,b);this.fs=this.createShader(a,a.FRAGMENT_SHADER,n);this.link(a);this.detectUniforms(a)}
ShaderProgram.prototype.createShader=function(a,b,n){b=a.createShader(b);a.shaderSource(b,n);a.compileShader(b);if(!a.getShaderParameter(b,a.COMPILE_STATUS))throw console.warn(n.split("\n")),new GlError("Error compiling shader:\n"+a.getShaderInfoLog(b));a.attachShader(this.handle,b);return b};ShaderProgram.prototype.use=function(a){a.useProgram(this.handle);return this};
ShaderProgram.prototype.link=function(a){let b=this.handle;a.linkProgram(b);if(!a.getProgramParameter(b,a.LINK_STATUS))throw new GlError("Error linking shader:\n"+a.getProgramInfoLog(b));a.validateProgram(b);if(!a.getProgramParameter(b,a.VALIDATE_STATUS))throw new GlError("Error validating shader:\n"+a.getProgramInfoLog(b));};ShaderProgram.prototype.dispose=function(a){a.detachShader(this.handle,this.vs);a.deleteShader(this.vs);a.detachShader(this.handle,this.fs);a.deleteShader(this.fs);a.deleteProgram(this.handle)};
ShaderProgram.prototype.detectUniforms=function(a){this.uniform=this.detectImpl(a,!0)};ShaderProgram.prototype.detectAttributes=function(a){this.attrib=this.detectImpl(a,!1)};
ShaderProgram.prototype.detectImpl=function(a,b){let n,d,k=this.handle,h,c;var l;let g={},e;let f;d=b?a.getProgramParameter(k,a.ACTIVE_UNIFORMS):a.getProgramParameter(k,a.ACTIVE_ATTRIBUTES);for(n=0;n<d;++n)if(h=b?a.getActiveUniform(k,n):a.getActiveAttrib(k,n),null!==h&&(c=h.name.replace(/\]/g,""))){for(e=g;null!==(l=/[.\[]/.exec(c));){var m=c.substr(0,l.index);e=e.hasOwnProperty(m)?e[m]:"."===l[0]?e[m]={}:e[m]=[];c=c.substr(l.index+1)}if(1<h.size){l=h.size;f=Array(l);for(m=0;m<l;++m){var r=h.name+
"["+m+"]";r=b?this.uniformSetter(a,r,h):this.attribFactory(a,r,h);f[m]=r}e[c]=f}else r=b?this.uniformSetter(a,h.name,h):this.attribFactory(a,h.name,h),e[c]=r}return g};
ShaderProgram.prototype.uniformSetter=function(a,b,n){let d;d=a.getUniformLocation(this.handle,b);switch(n.type){case a.FLOAT:return a.uniform1fv.bind(a,d);case a.FLOAT_VEC2:return a.uniform2fv.bind(a,d);case a.FLOAT_VEC3:return a.uniform3fv.bind(a,d);case a.FLOAT_VEC4:return a.uniform4fv.bind(a,d);case a.BOOL:case a.INT:case a.SAMPLER_2D:case a.SAMPLER_CUBE:return a.uniform1iv.bind(a,d);case a.BOOL_VEC2:case a.INT_VEC2:return a.uniform2iv.bind(a,d);case a.BOOL_VEC3:case a.INT_VEC3:return a.uniform3iv.bind(a,
d);case a.BOOL_VEC4:case a.INT_VEC4:return a.uniform4iv.bind(a,d);case a.FLOAT_MAT2:return a.uniformMatrix2fv.bind(a,d,!1);case a.FLOAT_MAT3:return a.uniformMatrix3fv.bind(a,d,!1);case a.FLOAT_MAT4:return a.uniformMatrix4fv.bind(a,d,!1);default:throw new GlError("Unknown data type for uniform "+b);}};
ShaderProgram.prototype.attribFactory=function(a,b,n){let d;d=a.getAttribLocation(this.handle,b);switch(n.type){case a.FLOAT:return new VertexAttribute(a,d,a.vertexAttrib1fv.bind(a,d));case a.FLOAT_VEC2:return new VertexAttribute(a,d,a.vertexAttrib2fv.bind(a,d));case a.FLOAT_VEC3:return new VertexAttribute(a,d,a.vertexAttrib3fv.bind(a,d));case a.FLOAT_VEC4:return new VertexAttribute(a,d,a.vertexAttrib4fv.bind(a,d));default:throw new GlError("Unknown data type for vertex attribute "+b);}};
function VertexAttribute(a,b,n){this.gl=a;this.location=b;this.set=n};(function(a){"object"===typeof exports&&"undefined"!==typeof module?module.exports=a():"function"===typeof define&&define.amd?define([],a):("undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:this).csg=a()})(function(){return function(){function a(b,n,d){function k(l,g){if(!n[l]){if(!b[l]){var e="function"==typeof require&&require;if(!g&&e)return e(l,!0);if(h)return h(l,!0);g=Error("Cannot find module '"+l+"'");throw g.code="MODULE_NOT_FOUND",g;}g=
n[l]={exports:{}};b[l][0].call(g.exports,function(f){return k(b[l][1][f]||f)},g,g.exports,a,b,n,d)}return n[l].exports}for(var h="function"==typeof require&&require,c=0;c<d.length;c++)k(d[c]);return k}return a}()({1:[function(a,b,n){({addTransformationMethodsToPrototype:n}=a("./src/core/mutators"));let d=a("./src/core/CSG"),k=a("./src/core/CAG");const {_CSGDEBUG:h,defaultResolution2D:c,defaultResolution3D:l,EPS:g,angleEPS:e,areaEPS:f,all:m,top:r,bottom:t,left:p,right:q,front:A,back:x,staticTag:D,
getTag:u}=a("./src/core/constants");d._CSGDEBUG=h;d.defaultResolution2D=c;d.defaultResolution3D=l;d.EPS=g;d.angleEPS=e;d.areaEPS=f;d.all=m;d.top=r;d.bottom=t;d.left=p;d.right=q;d.front=A;d.back=x;d.staticTag=D;d.getTag=u;d.Vector2D=a("./src/core/math/Vector2");d.Vector3D=a("./src/core/math/Vector3");d.Vertex=a("./src/core/math/Vertex3");k.Vertex=a("./src/core/math/Vertex2");d.Plane=a("./src/core/math/Plane");d.Polygon=a("./src/core/math/Polygon3");d.Polygon2D=a("./src/core/math/Polygon2");d.Line2D=
a("./src/core/math/Line2");d.Line3D=a("./src/core/math/Line3");d.Path2D=a("./src/core/math/Path2");d.OrthoNormalBasis=a("./src/core/math/OrthoNormalBasis");d.Matrix4x4=a("./src/core/math/Matrix4");k.Side=a("./src/core/math/Side");d.Connector=a("./src/core/connectors").Connector;d.ConnectorList=a("./src/core/connectors").ConnectorList;d.Properties=a("./src/core/Properties");const {circle:v,ellipse:y,rectangle:C,roundedRectangle:w}=a("./src/api/primitives2d"),{sphere:z,cube:B,roundedCube:E,cylinder:H,
roundedCylinder:F,cylinderElliptic:G,polyhedron:I}=a("./src/api/primitives3d");d.sphere=z;d.cube=B;d.roundedCube=E;d.cylinder=H;d.roundedCylinder=F;d.cylinderElliptic=G;d.polyhedron=I;k.circle=v;k.ellipse=y;k.rectangle=C;k.roundedRectangle=w;const {fromPolygons:J,fromCompactBinary:M,fromObject:N,fromSlices:K}=a("./src/core/CSGFactories");d.fromCompactBinary=M;d.fromObject=N;d.fromSlices=K;d.fromPolygons=J;d.toPointCloud=a("./src/api/debugHelpers").toPointCloud;var L=a("./src/core/CAGFactories");k.fromSides=
L.fromSides;k.fromObject=L.fromObject;k.fromPoints=L.fromPoints;k.fromPointsNoCheck=L.fromPointsNoCheck;k.fromPath2=L.fromPath2;k.fromFakeCSG=L.fromFakeCSG;k.fromCompactBinary=L.fromCompactBinary;L=a("./src/api/optionParsers");n(d.prototype);n(d.Vector2D.prototype);n(d.Vector3D.prototype);n(d.Vertex.prototype);n(d.Plane.prototype);n(d.Polygon.prototype);n(d.Line2D.prototype);n(d.Line3D.prototype);n(d.Path2D.prototype);n(d.OrthoNormalBasis.prototype);n(d.Connector.prototype);n(k.prototype);n(k.Side.prototype);
n(k.Vertex.prototype);d.parseOptionAs2DVector=L.parseOptionAs3DVector;d.parseOptionAs3DVector=L.parseOptionAs3DVector;d.parseOptionAs3DVectorList=L.parseOptionAs3DVectorList;d.parseOptionAsBool=L.parseOptionAsBool;d.parseOptionAsFloat=L.parseOptionAsFloat;d.parseOptionAsInt=L.parseOptionAsInt;d.Polygon2D.prototype=k.prototype;const {isCAG:O,isCSG:P}=a("./src/core/utils");a=Object.assign({},{CSG:d,CAG:k},L,{isCAG:O,isCSG:P});b.exports=a},{"./src/api/debugHelpers":4,"./src/api/optionParsers":11,"./src/api/primitives2d":12,
"./src/api/primitives3d":13,"./src/core/CAG":15,"./src/core/CAGFactories":16,"./src/core/CSG":17,"./src/core/CSGFactories":18,"./src/core/Properties":22,"./src/core/connectors":23,"./src/core/constants":24,"./src/core/math/Line2":25,"./src/core/math/Line3":26,"./src/core/math/Matrix4":27,"./src/core/math/OrthoNormalBasis":28,"./src/core/math/Path2":29,"./src/core/math/Plane":30,"./src/core/math/Polygon2":31,"./src/core/math/Polygon3":32,"./src/core/math/Side":33,"./src/core/math/Vector2":34,"./src/core/math/Vector3":35,
"./src/core/math/Vertex2":36,"./src/core/math/Vertex3":37,"./src/core/mutators":40,"./src/core/utils":42}],2:[function(a,b,n){const d=a("../core/math/Path2");b.exports=function(k){let h={},c={};k.canonicalized().sides.map(function(m){let r=m.getTag();h[r]=m;m=m.vertex0.getTag();m in c||(c[m]=[]);c[m].push(r)});for(k=[];;){var l=null;for(let m in c){var g=c[m];l=g[0];g.splice(0,1);0===g.length&&delete c[m];break}if(null===l)break;g=[];var e=h[l];for(l=e.vertex0.getTag();;){g.push(e.vertex0.pos);let m=
e.vertex1.getTag();if(m===l)break;if(!(m in c))throw Error("Area is not closed!");let r=c[m],t=-1;if(1===r.length)t=0;else{var f=null;e=e.direction().angleDegrees();for(let p=0;p<r.length;p++){let q=h[r[p]].direction().angleDegrees()-e;-180>q&&(q+=360);180<=q&&(q-=360);if(0>t||q>f)t=p,f=q}}f=r[t];r.splice(t,1);0===r.length&&delete c[m];e=h[f]}0<g.length&&g.push(g.shift());g=new d(g,!0);k.push(g)}return k}},{"../core/math/Path2":29}],3:[function(a,b,n){const d=a("../core/utils/toArray");b.exports=
function(k,h){k=Object.assign({},{axes:[!0,!0,!0],center:[0,0,0]},k);const {axes:c,center:l}=k;h=d(h);k=h.map(function(g){let e=g.getBounds(),f=[0,0,0];c[0]&&(f[0]=l[0]-(e[0].x+(e[1].x-e[0].x)/2));c[1]&&(f[1]=l[1]-(e[0].y+(e[1].y-e[0].y)/2));c[2]&&(f[2]=l[2]-(e[0].z+(e[1].y-e[0].y)/2));return g.translate(f)});return 1===k.length?k[0]:k}},{"../core/utils/toArray":50}],4:[function(a,b,n){const d=a("../core/CSG"),{cube:k}=a("./primitives3d");b.exports={toPointCloud:function(h,c){h=h.reTesselated();let l=
new d,g={};h.polygons.map(function(e){e.vertices.map(function(f){g[f.getTag()]=f.pos})});for(let e in g)h=k({center:g[e],radius:c}),l=l.unionSub(h,!1,!1);return l=l.reTesselated()}}},{"../core/CSG":17,"./primitives3d":13}],5:[function(a,b,n){const d=a("../core/math/Vertex3"),k=a("../core/math/Vector3"),h=a("../core/math/Polygon3");b.exports={cagToPointsArray:c=>{let l;"sides"in c?(l=[],c.sides.forEach(g=>{l.push([g.vertex0.pos.x,g.vertex0.pos.y]);l.push([g.vertex1.pos.x,g.vertex1.pos.y])})):"points"in
c&&(l=c.points.map(g=>[g.x,g.y]));return l},clamp:function(c,l,g){return Math.min(Math.max(c,l),g)},rightMultiply1x3VectorToArray:(c,l)=>{const [g,e,f]=l;l=g*c.elements[0]+e*c.elements[1]+f*c.elements[2]+1*c.elements[3];let m=g*c.elements[4]+e*c.elements[5]+f*c.elements[6]+1*c.elements[7],r=g*c.elements[8]+e*c.elements[9]+f*c.elements[10]+1*c.elements[11];c=g*c.elements[12]+e*c.elements[13]+f*c.elements[14]+1*c.elements[15];1!==c&&(c=1/c,l*=c,m*=c,r*=c);return[l,m,r]},polygonFromPoints:c=>{c=c.map(l=>
new d(new k(l)));return new h(c)}}},{"../core/math/Polygon3":32,"../core/math/Vector3":35,"../core/math/Vertex3":37}],6:[function(a,b,n){const {isCAG:d}=a("../core/utils");b.exports={union:function(){let k={};var h={extrude2d:!1};let c=0,l=arguments;l[0].length&&(l=l[0]);"extrude2d"in l[0]&&(k=Object.assign({},h,l[0]),c++);h=l[c++];for("object"===typeof l[c]&&d(l[c])&&k.extrude2d&&(h=l[c].extrude({offset:[0,0,.1]}));c<l.length;c++){let g=l[c];"object"===typeof l[c]&&d(l[c])&&k.extrude2d&&(g=l[c].extrude({offset:[0,
0,.1]}));h=h.union(g)}return h},difference:function(){let k,h=0,c=arguments;c[0].length&&(c=c[0]);for(k=c[h++];h<c.length;h++)k=d(c[h])?k.subtract(c[h]):k.subtract(c[h].setColor(1,1,0));return k},intersection:function(){let k,h=0,c=arguments;c[0].length&&(c=c[0]);for(k=c[h++];h<c.length;h++)k=d(c[h])?k.intersect(c[h]):k.intersect(c[h].setColor(1,1,0));return k}}},{"../core/utils":42}],7:[function(a,b,n){const d=a("../core/math/Matrix4.js"),k=a("../core/math/Vector3.js"),{Connector:h}=a("../core/connectors.js"),
{fromPoints:c}=a("../core/CAGFactories"),l=a("../core/math/Vector2");b.exports={lieFlat:function(g){let e=g.getTransformationToFlatLying();return g.transform(e)},getTransformationToFlatLying:function(g){return g.getTransformationAndInverseTransformationToFlatLying()[0]},getTransformationAndInverseTransformationToFlatLying:function(g){if(0===g.polygons.length){var e=new d;return[e,e]}g=g.canonicalized();let f={};g.polygons.map(function(B){f[B.plane.getTag()]=B.plane});let m=new k(1,0,0),r=new k(0,
1,0),t=new k(0,0,1),p=new h([0,0,0],[0,0,-1],m),q=new h([0,0,0],[0,0,-1],r);var A=!0;let x=0,D=0;let u;for(e in f){var v=f[e],y=v.normal.times(v.w),C=void 0;C=v.normal.cross(m).length();var w=v.normal.cross(r).length();C>w?(C=new h(y,v.normal,m),y=C.getTransformationTo(p,!1,0),C=p.getTransformationTo(C,!1,0)):(C=new h(y,v.normal,r),y=C.getTransformationTo(q,!1,0),C=q.getTransformationTo(C,!1,0));w=g.transform(y);v=-v.normal.dot(t);let B=w.getBounds();w=B[1].z-B[0].z;A||(w<x?A=!0:w===x&&v>D&&(A=!0));
if(A){var z=new k([-.5*(B[1].x+B[0].x),-.5*(B[1].y+B[0].y),-B[0].z]);y=y.multiply(d.translation(z));C=d.translation(z.negated()).multiply(C);x=w;D=v;z=y;u=C}A=!1}return[z,u]},overCutInsideCorners:function(g,e){g=g.canonicalized();let f={};g.sides.map(function(x){x.vertex0.getTag()in f||(f[x.vertex0.getTag()]={pos:x.vertex0.pos,from:[],to:[]});f[x.vertex0.getTag()].to.push(x.vertex1.pos);x.vertex1.getTag()in f||(f[x.vertex1.getTag()]={pos:x.vertex1.pos,from:[],to:[]});f[x.vertex1.getTag()].from.push(x.vertex0.pos)});
let m=[];for(let x in f){var r=f[x];if(1===r.from.length&&1===r.to.length){var t=r.pos,p=r.to[0];r=t.minus(r.from[0]).unit();p=p.minus(t).unit();if(.001>r.cross(p)){var q=p.angleRadians()-r.angleRadians()+Math.PI;0>q?q+=2*Math.PI:q>=2*Math.PI&&(q-=2*Math.PI);p=p.minus(r).unit();var A=30/180*Math.PI;r=e/Math.cos(A/2);t=t.plus(p.times(r));p=q+p.angleRadians();q=2*(Math.PI-q);A=2*Math.ceil(q/A/2);let D=[t];for(let u=0;u<=A;u++){let v=l.fromAngleRadians(p+u/A*q).times(r).plus(t);D.push(v)}m.push(c(D))}}}return g.subtract(m)}}},
{"../core/CAGFactories":16,"../core/connectors.js":23,"../core/math/Matrix4.js":27,"../core/math/Vector2":34,"../core/math/Vector3.js":35}],8:[function(a,b,n){const {EPS:d}=a("../core/constants"),k=a("../core/math/Plane"),h=a("../core/math/Vector2"),c=a("../core/math/Vertex3"),l=a("../core/math/Polygon3"),g=a("../core/math/OrthoNormalBasis");b.exports={sectionCut:function(e,f){let m=f.plane,r=f.plane.flipped();m=new k(m.normal,m.w);r=new k(r.normal,r.w+5*d);e=e.cutByPlane(m);e=e.cutByPlane(r);return e.projectToOrthoNormalBasis(f)},
cutByPlane:function(e,f){if(0===e.polygons.length)return new (a("../core/CSG"));let m=f.normal.times(f.w),r=0;e.polygons.map(function(q){q.vertices.map(function(A){A=A.pos.distanceToSquared(m);A>r&&(r=A)})});r=Math.sqrt(r);r*=1.01;let t=[],p=new g(f);t.push(new c(p.to3D(new h(r,-r))));t.push(new c(p.to3D(new h(-r,-r))));t.push(new c(p.to3D(new h(-r,r))));t.push(new c(p.to3D(new h(r,r))));f=(new l(t,null,f.flipped())).extrude(f.normal.times(-r));f=e.intersect(f);f.properties=e.properties;return f}}},
{"../core/CSG":17,"../core/constants":24,"../core/math/OrthoNormalBasis":28,"../core/math/Plane":30,"../core/math/Polygon3":32,"../core/math/Vector2":34,"../core/math/Vertex3":37}],9:[function(a,b,n){const {EPS:d,angleEPS:k}=a("../core/constants"),h=a("../core/math/Vertex3"),c=a("../core/math/Vector2"),l=a("../core/math/Polygon3"),{fnNumberSort:g,isCSG:e}=a("../core/utils"),{fromPoints:f,fromPointsNoCheck:m}=a("../core/CAGFactories"),r=function(p,q,A){const x=a("../core/CAG");A=A||8;4>A&&(A=4);let D=
[],u={};p.canonicalized().sides.map(function(z){var B=z.vertex1.pos.minus(z.vertex0.pos),E=B.length();if(E>d)for(B=B.times(1/E),B=B.normal().times(q),B=[z.vertex1.pos.plus(B),z.vertex1.pos.minus(B),z.vertex0.pos.minus(B),z.vertex0.pos.plus(B)],B=f(B),D.push(B),B=0;2>B;B++){E=0===B?z.vertex0.pos:z.vertex1.pos;let H=0===B?z.vertex1.pos:z.vertex0.pos,F=E.x+" "+E.y;F in u||(u[F]=[]);u[F].push({p1:E,p2:H})}});for(let z in u){var v=u[z],y=void 0;p=v[0].p1;if(2===v.length){y=v[1].p2;v=v[0].p2.minus(p).angleDegrees();
y=y.minus(p).angleDegrees();y<v&&(y+=360);y>=v+360&&(y-=360);if(y<v+180){var C=y;y=v+360;v=C}v+=90;y-=90}else v=0,y=360;if(C=y>v+359.999)v=0,y=360;if(y>v+k){let B=[];C||B.push(p);let E=Math.round(A*(y-v)/360);1>E&&(E=1);for(let H=0;H<=E;H++){var w=v+H/E*(y-v);H===E&&(w=y);w=p.plus(c.fromAngleDegrees(w).times(q));(!C||0<H)&&B.push(w)}p=m(B);D.push(p)}}A=new x;return A=A.union(D)},t=function(p,q,A,x){const D=a("../core/CSG");var {fromPolygons:u}=a("../core/CSGFactories");p=p.reTesselated();let v;v=
x?p:new D;p.polygons.map(function(K){let L=K.plane.normal.unit().times(2*q);K=K.translate(L.times(-.5)).extrude(L);v=v.unionSub(K,!1,!1)});let y={};p.polygons.map(function(K){let L=K.vertices.length;var O=K.vertices[L-1],P=O.getTag();for(let Q=0;Q<L;Q++){let T=K.vertices[Q],R=T.getTag();P=R<P?R+"-"+P:P+"-"+R;P in y?O=y[P]:(O={v1:O,v2:T,planenormals:[]},y[P]=O);O.planenormals.push(K.plane.normal);P=R;O=T}});for(var C in y){var w=y[C];x=w.v1.pos;var z=w.v2.pos,B=z.minus(x).unit();let K=w.planenormals[0].unit();
B=K.cross(B);let L=[];for(var E=0;E<A;E++)L.push(E*Math.PI*2/A);for(let O=0,P=w.planenormals.length;O<P;O++){var H=w.planenormals[O];E=B.dot(H);H=K.dot(H);var F=Math.atan2(E,H);0>F&&(F+=2*Math.PI);L.push(F);F=Math.atan2(-E,-H);0>F&&(F+=2*Math.PI);L.push(F)}L=L.sort(g);w=L.length;var G=void 0,I=void 0;E=[];H=[];F=[];for(let O=-1;O<w;O++){var J=L[0>O?O+w:O],M=Math.sin(J);M=K.times(Math.cos(J)*q).plus(B.times(M*q));J=x.plus(M);M=z.plus(M);let P=!1;0<=O&&J.distanceTo(G)<d&&(P=!0);P||(0<=O&&(E.push(new h(J)),
H.push(new h(M)),G=[new h(I),new h(M),new h(J),new h(G)],G=new l(G),F.push(G)),G=J,I=M)}H.reverse();F.push(new l(E));F.push(new l(H));x=u(F);v=v.unionSub(x,!1,!1)}let N={};p.polygons.map(function(K){K.vertices.map(function(L){let O=L.getTag();O in N?L=N[O]:(L={pos:L.pos,normals:[]},N[O]=L);L.normals.push(K.plane.normal)})});for(let K in N){u=N[K];C=u.normals[0].unit();p=null;G=0;for(I=1;I<u.normals.length;I++)x=u.normals[I].unit(),z=C.cross(x).length(),.05<z&&z>G&&(G=z,p=x);p||(p=C.randomNonParallelVector());
p=C.cross(p).unit();G=p.cross(C);u=D.sphere({center:u.pos,radius:q,resolution:A,axes:[C,p,G]});v=v.unionSub(u,!1,!1)}return v};b.exports={expand:function(p,q,A){e(p)?(q=p.union(t(p,q,A)),q=q.reTesselated(),q.properties=p.properties):q=p.union(r(p,q,A));return q},contract:function(p,q,A){e(p)?(q=p.subtract(t(p,q,A)),q=q.reTesselated(),q.properties=p.properties):q=p.subtract(r(p,q,A));return q},expandedShellOfCAG:r,expandedShellOfCCSG:t}},{"../core/CAG":15,"../core/CAGFactories":16,"../core/CSG":17,
"../core/CSGFactories":18,"../core/constants":24,"../core/math/Polygon3":32,"../core/math/Vector2":34,"../core/math/Vertex3":37,"../core/utils":42}],10:[function(a,b,n){const {EPS:d,defaultResolution3D:k}=a("../core/constants"),h=a("../core/math/OrthoNormalBasis"),{parseOptionAs3DVector:c,parseOptionAsBool:l,parseOptionAsFloat:g,parseOptionAsInt:e}=a("./optionParsers"),f=a("../core/math/Vector3"),m=a("../core/math/Matrix4"),r=a("../core/math/Path2"),{Connector:t}=a("../core/connectors"),{fromPolygons:p}=
a("../core/CSGFactories"),{cagToPointsArray:q,clamp:A,rightMultiply1x3VectorToArray:x,polygonFromPoints:D}=a("./helpers"),{fromPoints:u}=a("../core/CAGFactories"),v=function(y,C,w,z){if(!(C instanceof h))throw Error("extrudeInPlane: the first parameter should be a OrthoNormalBasis");y=y.extrude({offset:[0,0,w]});l(z,"symmetrical",!1)&&(y=y.translate([0,0,-w/2]));C=C.getInverseProjectionMatrix();return y=y.transform(C)};b.exports={extrudeInOrthonormalBasis:v,extrudeInPlane:function(y,C,w,z,B){return v(y,
h.GetCartesian(C,w),z,B)},extrude:function(y,C){var w=a("../core/CSG");if(0===y.sides.length)return new w;w=c(C,"offset",[0,0,1]);let z=g(C,"twistangle",0);C=e(C,"twiststeps",k);if(0===w.z)throw Error("offset cannot be orthogonal to Z axis");if(0===z||1>C)C=1;let B=f.Create(0,1,0),E=[];E=E.concat(y._toPlanePolygons({translation:[0,0,0],normalVector:B,flipped:!(0>w.z)}));E=E.concat(y._toPlanePolygons({translation:w,normalVector:B.rotateZ(z),flipped:0>w.z}));for(let H=0;H<C;H++){let F=new t(w.times(H/
C),[0,0,w.z],B.rotateZ(H*z/C)),G=new t(w.times((H+1)/C),[0,0,w.z],B.rotateZ((H+1)*z/C));E=E.concat(y._toWallPolygons({toConnector1:F,toConnector2:G}))}return p(E)},linear_extrude:function(y,C){const {height:w,twist:z,slices:B,center:E}=Object.assign({},{height:1,slices:10,twist:0,center:!1},y);y=C.extrude({offset:[0,0,w],twistangle:z,twiststeps:B});!0===E&&(C=y.getBounds(),C=C[1].plus(C[0]).times(-.5),y=y.translate(C));return y},rotate_extrude:function(y,C){y=Object.assign({},{fn:32,startAngle:0,
angle:360,overflow:"cap"},y);let {fn:w,startAngle:z,angle:B,overflow:E}=y;if("cap"!==E)throw Error("only capping of overflowing points is supported !");2>arguments.length&&(C=y);const H=0<B;var F=H?A(z+B,0,360):A(z+B,-360,0);F=Math.max(Math.floor(Math.abs(F)/45),1,w);let G=q(C);var I=G.filter(Q=>0>Q[0]),J=G.filter(Q=>0<=Q[0]);0<I.length&&0<J.length&&"cap"===E&&(I.length>J.length?G=G.map(function(Q){return[Math.min(Q[0],0),Q[1]]}):J.length>=I.length&&(G=G.map(function(Q){return[Math.max(Q[0],0),Q[1]]})));
I=[];for(J=1;J<F+1;J++){for(var M=0;M<G.length-1;M++){var N=G[M],K=G[M+1],L=m.rotationZ((J-1)/F*B+z),O=m.rotationZ(J/F*B+z),P=x(L,[N[0],0,N[1]]);N=x(O,[N[0],0,N[1]]);L=x(L,[K[0],0,K[1]]);K=x(O,[K[0],0,K[1]]);O=!1;1E-5>Math.abs(P[0]-N[0])&&1E-5>Math.abs(L[1]-K[1])&&(O=!0);H?(I.push(D([P,L,K])),O||I.push(D([K,N,P]))):(O||I.push(D([P,N,K])),I.push(D([K,L,P])))}if(360>Math.abs(B)){P=u(G);const Q=m.rotationX(90).multiply(m.rotationZ(-z));M=P._toPlanePolygons({flipped:H}).map(R=>R.transform(Q));const T=
m.rotationX(90).multiply(m.rotationZ(-B-z));P=P._toPlanePolygons({flipped:!H}).map(R=>R.transform(T));I=I.concat(M).concat(P)}}return p(I).reTesselated().canonicalized()},rotateExtrude:function(y,C){let w=g(C,"angle",360);var z=e(C,"resolution",k);w=360<w?w%360:w;C=[0,0,0];let B=f.Create(0,1,0),E=[0,0,1],H=[];var F=new t(C,B,E);if(0<w&&360>w){var G=new t(C,B.rotateZ(-w),E);H=H.concat(y._toPlanePolygons({toConnector:F,flipped:!0}));H=H.concat(y._toPlanePolygons({toConnector:G}))}G=w/z;for(let I=G;I<=
w+d;I+=G)z=new t(C,B.rotateZ(-I),E),H=H.concat(y._toWallPolygons({toConnector1:F,toConnector2:z})),F=z;return p(H).reTesselated()},rectangular_extrude:function(y,C){const {w,h:z,fn:B,closed:E,round:H}=Object.assign({},{w:1,h:1,fn:8,closed:!1,round:!0},C);return(new r(y,E)).rectangularExtrude(w,z,B,H)}}},{"../core/CAGFactories":16,"../core/CSG":17,"../core/CSGFactories":18,"../core/connectors":23,"../core/constants":24,"../core/math/Matrix4":27,"../core/math/OrthoNormalBasis":28,"../core/math/Path2":29,
"../core/math/Vector3":35,"./helpers":5,"./optionParsers":11}],11:[function(a,b,n){const d=a("../core/math/Vector3"),k=a("../core/math/Vector2"),h=function(c,l,g){c&&l in c&&(g=c[l]);return g};b.exports={parseOption:h,parseOptionAsInt:function(c,l,g){c=h(c,l,g);c=Number(Math.floor(c));if(isNaN(c))throw Error("Parameter "+l+" should be a number");return c},parseOptionAsFloat:function(c,l,g){c=h(c,l,g);"string"===typeof c&&(c=Number(c));if(isNaN(c)||"number"!==typeof c)throw Error("Parameter "+l+" should be a number");
return c},parseOptionAsBool:function(c,l,g){c=h(c,l,g);"string"===typeof c&&("true"===c?c=!0:"false"===c?c=!1:0===c&&(c=!1));return!!c},parseOptionAs3DVector:function(c,l,g){c=h(c,l,g);return c=new d(c)},parseOptionAs2DVector:function(c,l,g){c=h(c,l,g);return c=new k(c)},parseOptionAs3DVectorList:function(c,l,g){return h(c,l,g).map(function(e){return new d(e)})}}},{"../core/math/Vector2":34,"../core/math/Vector3":35}],12:[function(a,b,n){a("../core/CAG");const {parseOptionAs2DVector:d,parseOptionAsFloat:k,
parseOptionAsInt:h}=a("./optionParsers"),{defaultResolution2D:c}=a("../core/constants"),l=a("../core/math/Vector2");a("../core/math/Vertex2");const g=a("../core/math/Path2"),{fromCompactBinary:e,fromPoints:f,fromPath2:m}=a("../core/CAGFactories"),r=function(t){t=t||{};if("corner1"in t||"corner2"in t){if("center"in t||"radius"in t)throw Error("rectangle: should either give a radius and center parameter, or a corner1 and corner2 parameter");var p=d(t,"corner1",[0,0]);t=d(t,"corner2",[1,1]);var q=p.plus(t).times(.5);
p=t.minus(p).times(.5)}else q=d(t,"center",[0,0]),p=d(t,"radius",[1,1]);p=p.abs();t=new l(p.x,-p.y);q=[q.plus(p),q.plus(t),q.minus(p),q.minus(t)];return f(q)};b.exports={circle:function(t){t=t||{};let p=d(t,"center",[0,0]),q=k(t,"radius",1);t=h(t,"resolution",c);let A=[];for(let x=0;x<t;x++){let D=l.fromAngleRadians(2*Math.PI*x/t).times(q).plus(p);A.push(D)}return f(A)},ellipse:function(t){t=t||{};let p=d(t,"center",[0,0]),q=d(t,"radius",[1,1]);q=q.abs();t=h(t,"resolution",c);let A=new g([[p.x,p.y+
q.y]]);A=A.appendArc([p.x,p.y-q.y],{xradius:q.x,yradius:q.y,xaxisrotation:0,resolution:t,clockwise:!0,large:!1});A=A.appendArc([p.x,p.y+q.y],{xradius:q.x,yradius:q.y,xaxisrotation:0,resolution:t,clockwise:!0,large:!1});A=A.close();return m(A)},rectangle:r,roundedRectangle:function(t){t=t||{};if("corner1"in t||"corner2"in t){if("center"in t||"radius"in t)throw Error("roundedRectangle: should either give a radius and center parameter, or a corner1 and corner2 parameter");var p=d(t,"corner1",[0,0]);
var q=d(t,"corner2",[1,1]);var A=p.plus(q).times(.5);q=q.minus(p).times(.5)}else A=d(t,"center",[0,0]),q=d(t,"radius",[1,1]);q=q.abs();p=k(t,"roundradius",.2);t=h(t,"resolution",c);p=Math.min(p,Math.min(q.x,q.y)-.1);p=Math.max(0,p);q=new l(q.x-p,q.y-p);A=r({center:A,radius:q});0<p&&(A=A.expand(p,t));return A},fromCompactBinary:e}},{"../core/CAG":15,"../core/CAGFactories":16,"../core/constants":24,"../core/math/Path2":29,"../core/math/Vector2":34,"../core/math/Vertex2":36,"./optionParsers":11}],13:[function(a,
b,n){const {parseOption:d,parseOptionAs3DVector:k,parseOptionAs2DVector:h,parseOptionAs3DVectorList:c,parseOptionAsFloat:l,parseOptionAsInt:g}=a("./optionParsers"),{defaultResolution3D:e,defaultResolution2D:f,EPS:m}=a("../core/constants"),r=a("../core/math/Vector3"),t=a("../core/math/Vertex3"),p=a("../core/math/Polygon3"),{Connector:q}=a("../core/connectors"),A=a("../core/Properties"),{fromPolygons:x}=a("../core/CSGFactories"),D=function(u){u=u||{};let v=k(u,"center",[0,0,0]);var y=l(u,"radius",1),
C=g(u,"resolution",e);let w,z;"axes"in u?(w=u.axes[0].unit().times(y),z=u.axes[1].unit().times(y),u=u.axes[2].unit().times(y)):(w=(new r([1,0,0])).times(y),z=(new r([0,-1,0])).times(y),u=(new r([0,0,1])).times(y));4>C&&(C=4);y=Math.round(C/4);let B,E=[];for(let G=0;G<=C;G++){var H=2*Math.PI*G/C;H=w.times(Math.cos(H)).plus(z.times(Math.sin(H)));if(0<G){var F=void 0;let I,J;for(let M=0;M<=y;M++){F=.5*Math.PI*M/y;let N=Math.cos(F),K=Math.sin(F);0<M&&(F=[],F.push(new t(v.plus(B.times(I).minus(u.times(J))))),
F.push(new t(v.plus(H.times(I).minus(u.times(J))))),M<y&&F.push(new t(v.plus(H.times(N).minus(u.times(K))))),F.push(new t(v.plus(B.times(N).minus(u.times(K))))),E.push(new p(F)),F=[],F.push(new t(v.plus(B.times(I).plus(u.times(J))))),F.push(new t(v.plus(H.times(I).plus(u.times(J))))),M<y&&F.push(new t(v.plus(H.times(N).plus(u.times(K))))),F.push(new t(v.plus(B.times(N).plus(u.times(K))))),F.reverse(),E.push(new p(F)));I=N;J=K}}B=H}C=x(E);C.properties.sphere=new A;C.properties.sphere.center=new r(v);
C.properties.sphere.facepoint=v.plus(w);return C};b.exports={cube:function(u){let v,y;u=u||{};if("corner1"in u||"corner2"in u){if("center"in u||"radius"in u)throw Error("cube: should either give a radius and center parameter, or a corner1 and corner2 parameter");var C=k(u,"corner1",[0,0,0]);u=k(u,"corner2",[1,1,1]);v=C.plus(u).times(.5);y=u.minus(C).times(.5)}else v=k(u,"center",[0,0,0]),y=k(u,"radius",[1,1,1]);y=y.abs();C=x([[[0,4,6,2],[-1,0,0]],[[1,3,7,5],[1,0,0]],[[0,1,5,4],[0,-1,0]],[[2,6,7,3],
[0,1,0]],[[0,2,3,1],[0,0,-1]],[[4,5,7,6],[0,0,1]]].map(function(w){w=w[0].map(function(z){z=new r(v.x+y.x*(2*!!(z&1)-1),v.y+y.y*(2*!!(z&2)-1),v.z+y.z*(2*!!(z&4)-1));return new t(z)});return new p(w,null)}));C.properties.cube=new A;C.properties.cube.center=new r(v);C.properties.cube.facecenters=[new q((new r([y.x,0,0])).plus(v),[1,0,0],[0,0,1]),new q((new r([-y.x,0,0])).plus(v),[-1,0,0],[0,0,1]),new q((new r([0,y.y,0])).plus(v),[0,1,0],[0,0,1]),new q((new r([0,-y.y,0])).plus(v),[0,-1,0],[0,0,1]),new q((new r([0,
0,y.z])).plus(v),[0,0,1],[1,0,0]),new q((new r([0,0,-y.z])).plus(v),[0,0,-1],[1,0,0])];return C},sphere:D,roundedCube:function(u){let v;u=u||{};if("corner1"in u||"corner2"in u){if("center"in u||"radius"in u)throw Error("roundedCube: should either give a radius and center parameter, or a corner1 and corner2 parameter");var y=k(u,"corner1",[0,0,0]);var C=k(u,"corner2",[1,1,1]);v=y.plus(C).times(.5);y=C.minus(y).times(.5)}else v=k(u,"center",[0,0,0]),y=k(u,"radius",[1,1,1]);y=y.abs();C=g(u,"resolution",
e);4>C&&(C=4);1===C%2&&8>C&&(C=8);u=k(u,"roundradius",[.2,.2,.2]);u=r.Create(Math.max(u.x,.01),Math.max(u.y,.01),Math.max(u.z,.01));let w=y.minus(u);if(0>w.x||0>w.y||0>w.z)throw Error("roundradius <= radius!");C=D({radius:1,resolution:C});C=C.scale(u);w.x>m&&(C=C.stretchAtPlane([1,0,0],[0,0,0],2*w.x));w.y>m&&(C=C.stretchAtPlane([0,1,0],[0,0,0],2*w.y));w.z>m&&(C=C.stretchAtPlane([0,0,1],[0,0,0],2*w.z));C=C.translate([-w.x+v.x,-w.y+v.y,-w.z+v.z]);C=C.reTesselated();C.properties.roundedCube=new A;C.properties.roundedCube.center=
new t(v);C.properties.roundedCube.facecenters=[new q((new r([y.x,0,0])).plus(v),[1,0,0],[0,0,1]),new q((new r([-y.x,0,0])).plus(v),[-1,0,0],[0,0,1]),new q((new r([0,y.y,0])).plus(v),[0,1,0],[0,0,1]),new q((new r([0,-y.y,0])).plus(v),[0,-1,0],[0,0,1]),new q((new r([0,0,y.z])).plus(v),[0,0,1],[1,0,0]),new q((new r([0,0,-y.z])).plus(v),[0,0,-1],[1,0,0])];return C},cylinder:function(u){function v(N,K,L){K=K*Math.PI*B/180;K=F.times(Math.cos(K)).plus(G.times(Math.sin(K)));N=y.plus(H.times(N)).plus(K.times(L));
return new t(N)}let y=k(u,"start",[0,-1,0]);var C=k(u,"end",[0,1,0]),w=l(u,"radius",1),z=l(u,"radiusEnd",w);w=l(u,"radiusStart",w);let B=l(u,"sectorAngle",360);B=360<B?B%360:B;if(0>z||0>w)throw Error("Radius should be non-negative");if(0===z&&0===w)throw Error("Either radiusStart or radiusEnd should be positive");var E=g(u,"resolution",f);let H=C.minus(y);u=H.unit();let F=u.randomNonParallelVector().unit(),G=F.cross(u).unit(),I=new t(y),J=new t(C),M=[];if(0<B){for(let N=0;N<E;N++){let K=N/E,L=(N+
1)/E;z===w?(M.push(new p([I,v(0,K,z),v(0,L,z)])),M.push(new p([v(0,L,z),v(0,K,z),v(1,K,z),v(1,L,z)])),M.push(new p([J,v(1,L,z),v(1,K,z)]))):(0<w&&(M.push(new p([I,v(0,K,w),v(0,L,w)])),M.push(new p([v(0,K,w),v(1,K,z),v(0,L,w)]))),0<z&&(M.push(new p([J,v(1,L,z),v(1,K,z)])),M.push(new p([v(1,K,z),v(1,L,z),v(0,L,w)]))))}360>B&&(M.push(new p([I,J,v(0,0,w)])),M.push(new p([v(0,0,w),J,v(1,0,z)])),M.push(new p([I,v(0,1,w),J])),M.push(new p([v(0,1,w),v(1,1,z),J])))}E=x(M);E.properties.cylinder=new A;E.properties.cylinder.start=
new q(y,u.negated(),F);E.properties.cylinder.end=new q(C,u,F);C=y.plus(H.times(.5));z=F.rotate(y,u,-B/2).times((w+z)/2);w=z.cross(u);E.properties.cylinder.facepointH=new q(C.plus(z),z,u);E.properties.cylinder.facepointH90=new q(C.plus(w),w,u);return E},roundedCylinder:function(u){let v=k(u,"start",[0,-1,0]),y=k(u,"end",[0,1,0]);var C=l(u,"radius",1),w=y.minus(v);var z=Math.abs(w.x)>Math.abs(w.y)?new r(0,1,0):new r(1,0,0);var B=k(u,"normal",z);u=g(u,"resolution",e);4>u&&(u=4);z=[];let E=Math.floor(.25*
u);if(w.length()<m)return D({center:v,radius:C,resolution:u});let H=w.unit().times(C);w=H.cross(B).unit().times(C);C=w.cross(H).unit().times(C);for(B=0;B<=u;B++){var F=2*Math.PI*B/u;F=w.times(Math.cos(F)).plus(C.times(Math.sin(F)));if(0<B){var G=[];G.push(new t(v.plus(F)));G.push(new t(v.plus(M)));G.push(new t(y.plus(M)));G.push(new t(y.plus(F)));z.push(new p(G));var I=void 0,J=void 0;for(let N=0;N<=E;N++){G=.5*Math.PI*N/E;let K=Math.cos(G),L=Math.sin(G);0<N&&(G=[],G.push(new t(v.plus(M.times(I).minus(H.times(J))))),
G.push(new t(v.plus(F.times(I).minus(H.times(J))))),N<E&&G.push(new t(v.plus(F.times(K).minus(H.times(L))))),G.push(new t(v.plus(M.times(K).minus(H.times(L))))),z.push(new p(G)),G=[],G.push(new t(y.plus(M.times(I).plus(H.times(J))))),G.push(new t(y.plus(F.times(I).plus(H.times(J))))),N<E&&G.push(new t(y.plus(F.times(K).plus(H.times(L))))),G.push(new t(y.plus(M.times(K).plus(H.times(L))))),G.reverse(),z.push(new p(G)));I=K;J=L}}var M=F}M=x(z);I=H.unit();J=w.unit();M.properties.roundedCylinder=new A;
M.properties.roundedCylinder.start=new q(v,I.negated(),J);M.properties.roundedCylinder.end=new q(y,I,J);M.properties.roundedCylinder.facepoint=v.plus(w);return M},cylinderElliptic:function(u){function v(M,N,K){N=N*Math.PI*2;K=H.times(K._x*Math.cos(N)).plus(F.times(K._y*Math.sin(N)));M=y.plus(E.times(M)).plus(K);return new t(M)}let y=k(u,"start",[0,-1,0]),C=k(u,"end",[0,1,0]);var w=h(u,"radius",[1,1]),z=h(u,"radiusEnd",w);w=h(u,"radiusStart",w);if(0>z._x||0>w._x||0>z._y||0>w._y)throw Error("Radius should be non-negative");
if(!(0!==z._x&&0!==z._y||0!==w._x&&0!==w._y))throw Error("Either radiusStart or radiusEnd should be positive");let B=g(u,"resolution",f),E=C.minus(y);u=E.unit();let H=u.randomNonParallelVector().unit(),F=H.cross(u).unit(),G=new t(y),I=new t(C),J=[];for(let M=0;M<B;M++){let N=M/B,K=(M+1)/B;z._x===w._x&&z._y===w._y?(J.push(new p([G,v(0,N,z),v(0,K,z)])),J.push(new p([v(0,K,z),v(0,N,z),v(1,N,z),v(1,K,z)])),J.push(new p([I,v(1,K,z),v(1,N,z)]))):(0<w._x&&(J.push(new p([G,v(0,N,w),v(0,K,w)])),J.push(new p([v(0,
N,w),v(1,N,z),v(0,K,w)]))),0<z._x&&(J.push(new p([I,v(1,K,z),v(1,N,z)])),J.push(new p([v(1,N,z),v(1,K,z),v(0,K,w)]))))}z=x(J);z.properties.cylinder=new A;z.properties.cylinder.start=new q(y,u.negated(),H);z.properties.cylinder.end=new q(C,u,H);z.properties.cylinder.facepoint=y.plus(H.times(w));return z},polyhedron:function(u){u=u||{};if("points"in u!=="faces"in u)throw Error("polyhedron needs 'points' and 'faces' arrays");let v=c(u,"points",[[1,1,0],[1,-1,0],[-1,-1,0],[-1,1,0],[0,0,1]]).map(function(y){return new t(y)});
u=d(u,"faces",[[0,1,4],[1,2,4],[2,3,4],[3,0,4],[1,0,3],[2,1,3]]);u.forEach(function(y){y.reverse()});u=u.map(function(y){return new p(y.map(function(C){return v[C]}))});return x(u).reTesselated()}}},{"../core/CSGFactories":18,"../core/Properties":22,"../core/connectors":23,"../core/constants":24,"../core/math/Polygon3":32,"../core/math/Vector3":35,"../core/math/Vertex3":37,"./optionParsers":11}],14:[function(a,b,n){const d=a("../core/math/Polygon3"),{fromPolygons:k}=a("../core/CSGFactories"),{fnSortByIndex:h}=
a("../core/utils"),c=function(l,g,e,f){g=g.vertices.slice(0);let m=e.vertices.slice(0);e=e.shared||null;g[0].pos.equals(g[g.length-1].pos)||g.push(g[0]);m[0].pos.equals(m[m.length-1].pos)||m.push(m[0]);f&&(g=g.reverse(),m=m.reverse());f=m.length-1;let r=g.length-1;var t=f-r;let p=0<t,q=0>t,A=[];for(t=Math.abs(t);0<t;t--)A.push({len:Infinity,index:-1});if(q)for(var x=0;x<r;x++){t=g[x].pos.distanceToSquared(g[x+1].pos);for(var D=A.length-1;0<=D;D--)if(A[D].len>t){A[D].len=t;A.index=D;break}}else if(p)for(x=
0;x<f;x++)for(t=m[x].pos.distanceToSquared(m[x+1].pos),D=A.length-1;0<=D;D--)if(A[D].len>t){A[D].len=t;A.index=D;break}A.sort(h);t=g[0];x=m[0];let u;for(let v=0,y=0,C=f+r;v+y<C;){if(A.length)if(p&&y===A[0].index){D=m[++y];l.push(new d([D,x,t],e));x=D;A.shift();continue}else if(q&&v===A[0].index){D=g[++v];l.push(new d([x,t,D],e));t=D;A.shift();continue}D=v<r?x.pos.distanceToSquared(g[v+1].pos):Infinity;u=y<f?t.pos.distanceToSquared(m[y+1].pos):Infinity;D<=u?(D=g[++v],l.push(new d([x,t,D],e)),t=D):
y<f&&(D=m[++y],l.push(new d([D,x,t],e)),x=D)}return l};b.exports=function(l,g){let e=[],f=null,m=null,r=null,t=null,p=2,q=!1,A,x=null;g&&(q=!!g.loop,g.numslices&&(p=g.numslices),g.callback&&(A=g.callback));if(!A){let D=d.createFromPoints([[0,0,0],[1,0,0],[1,1,0],[0,1,0]]);A=function(u,v){return 0===u||1===u?D.translate([0,0,u]):null}}for(let D=0,u=p-1;D<=u;D++)if(f=A.call(l,D/u,D)){if(!(f instanceof d))throw Error("Polygon.solidFromSlices callback error: Polygon expected");f.checkIfConvex();m?(null===
x&&(x=0>m.plane.signedDistanceToPoint(f.vertices[0].pos)),c(e,m,f,x)):r=f;m=f}t=f;q?r.vertices.length===t.vertices.length&&r.vertices.every(function(D,u){return D.pos.equals(t.vertices[u].pos)})||c(e,t,r,x):(e.unshift(x?r:r.flipped()),e.push(x?t.flipped():t));return k(e)}},{"../core/CSGFactories":18,"../core/math/Polygon3":32,"../core/utils":42}],15:[function(a,b,n){const {Connector:d}=a("./connectors"),k=a("./math/Vertex3"),h=a("./math/Vector2"),c=a("./math/Vector3"),l=a("./math/Polygon3"),{fromPolygons:g}=
a("./CSGFactories"),{fromSides:e,fromFakeCSG:f}=a("./CAGFactories"),m=a("./utils/canonicalize"),r=a("./utils/retesellate"),{isCAGValid:t,isSelfIntersecting:p,hasPointInside:q}=a("./utils/cagValidation"),{area:A,getBounds:x}=a("./utils/cagMeasurements"),{overCutInsideCorners:D}=a("../api/ops-cnc"),{extrudeInOrthonormalBasis:u,extrudeInPlane:v,extrude:y,rotateExtrude:C}=a("../api/ops-extrusions"),w=a("../api/cagOutlinePaths"),z=a("../api/center"),{expand:B,contract:E,expandedShellOfCAG:H}=a("../api/ops-expandContract");
a=function(){this.sides=[];this.isCanonicalized=!1};a.prototype={union:function(F){F=F instanceof Array?F:[F];let G=this._toCSGWall(-1,1);G=G.union(F.map(function(I){return I._toCSGWall(-1,1).reTesselated()}),!1,!1);return f(G).canonicalized()},subtract:function(F){F=F instanceof Array?F:[F];let G=this._toCSGWall(-1,1);F.map(function(I){G=G.subtractSub(I._toCSGWall(-1,1),!1,!1)});G=G.reTesselated();G=G.canonicalized();G=f(G);return G=G.canonicalized()},intersect:function(F){F=F instanceof Array?F:
[F];let G=this._toCSGWall(-1,1);F.map(function(I){G=G.intersectSub(I._toCSGWall(-1,1),!1,!1)});G=G.reTesselated();G=G.canonicalized();G=f(G);return G=G.canonicalized()},transform:function(F){let G=F.isMirroring();var I=this.sides.map(function(J){return J.transform(F)});I=e(I);G&&(I=I.flipped());return I},flipped:function(){let F=this.sides.map(function(G){return G.flipped()});F.reverse();return e(F)},center:function(F){return z({axes:F},[this])},expandedShell:function(F,G){return H(this,F,G)},expand:function(F,
G){return B(this,F,G)},contract:function(F,G){return E(this,F,G)},area:function(){return A(this)},getBounds:function(){return x(this)},isSelfIntersecting:function(F){return p(this,F)},extrudeInOrthonormalBasis:function(F,G,I){return u(this,F,G,I)},extrudeInPlane:function(F,G,I,J){return v(this,F,G,I,J)},extrude:function(F){return y(this,F)},rotateExtrude:function(F){return C(this,F)},check:function(){return t(this)},canonicalized:function(){return m(this)},reTesselated:function(){return r(this)},
getOutlinePaths:function(){return w(this)},overCutInsideCorners:function(F){return D(this,F)},hasPointInside:function(F){return q(this,F)},toString:function(){let F="CAG ("+this.sides.length+" sides):\n";this.sides.map(function(G){F+=" "+G.toString()+"\n"});return F},_toCSGWall:function(F,G){let I=this.sides.map(function(J){return J.toPolygon3D(F,G)});return g(I)},_toVector3DPairs:function(F){let G=this.sides.map(function(I){let J=I.vertex0.pos;I=I.vertex1.pos;return[c.Create(J.x,J.y,0),c.Create(I.x,
I.y,0)]});"undefined"!==typeof F&&(G=G.map(function(I){return I.map(function(J){return J.transform(F)})}));return G},_toPlanePolygons:function(F){F=Object.assign({},{flipped:!1},F);let {flipped:G}=F;var I=[0,0,0],J=[0,0,1],M=[0,1,0],N=new d(I,J,M);I=F.translation||I;J=F.axisVector||J;M=F.normalVector||M;F=F.toConnector||new d(I,J,M);let K=N.getTransformationTo(F,!1,0);F=this.getBounds();F[0]=F[0].minus(new h(1,1));F[1]=F[1].plus(new h(1,1));N=this._toCSGWall(-1,1);F=g([new l([new k(new c(F[0].x,F[0].y,
0)),new k(new c(F[1].x,F[0].y,0)),new k(new c(F[1].x,F[1].y,0)),new k(new c(F[0].x,F[1].y,0))])]);G&&(F=F.invert());F=F.intersectSub(N);return F.polygons.filter(function(L){return.99<Math.abs(L.plane.normal.z)}).map(function(L){return L.transform(K)})},_toWallPolygons:function(F){var G=new d([0,0,0],[0,0,1],[0,1,0]),I=F.toConnector1,J=F.toConnector2;if(!(I instanceof d&&J instanceof d))throw Error("could not parse Connector arguments toConnector1 or toConnector2");if(F.cag&&F.cag.sides.length!==this.sides.length)throw Error("target cag needs same sides count as start cag");
F=F.cag||this;I=G.getTransformationTo(I,!1,0);G=G.getTransformationTo(J,!1,0);J=this._toVector3DPairs(I);let M=F._toVector3DPairs(G),N=[];J.forEach(function(K,L){N.push(new l([new k(M[L][1]),new k(M[L][0]),new k(K[0])]));N.push(new l([new k(M[L][1]),new k(K[0]),new k(K[1])]))});return N},toPoints:function(){let F=this.sides.map(function(G){return G.vertex0.pos});0<F.length&&F.push(F.shift());return F},toCompactBinary:function(){let F=this.canonicalized(),G={},I=[],J=0,M=new Uint32Array(2*F.sides.length),
N=0;F.sides.map(function(O){[O.vertex0,O.vertex1].map(function(P){let Q=P.getTag(),T;Q in G?T=G[Q]:(T=J++,G[Q]=T,I.push(P));M[N++]=T})});let K=new Float64Array(2*J),L=0;I.map(function(O){O=O.pos;K[L++]=O._x;K[L++]=O._y});return{"class":"CAG",sideVertexIndices:M,vertexData:K}}};b.exports=a},{"../api/cagOutlinePaths":2,"../api/center":3,"../api/ops-cnc":7,"../api/ops-expandContract":9,"../api/ops-extrusions":10,"./CAGFactories":16,"./CSGFactories":18,"./connectors":23,"./math/Polygon3":32,"./math/Vector2":34,
"./math/Vector3":35,"./math/Vertex3":37,"./utils/cagMeasurements":43,"./utils/cagValidation":44,"./utils/canonicalize":45,"./utils/retesellate":49}],16:[function(a,b,n){const d=a("./math/Side"),k=a("./math/Vector2"),h=a("./math/Vertex2"),{areaEPS:c}=a("./constants"),{isSelfIntersecting:l,contains:g}=a("./utils/cagValidation"),{union:e,difference:f}=a("../api/ops-booleans"),m=function(q){let A=new (a("./CAG"));A.sides=q;return A},r=function(q){if(!q)throw Error("points parameter must be defined");
if(!Array.isArray(q))throw Error("points parameter must be an array");if(void 0!==q[0].x||"number"===typeof q[0][0])return t(q);if("object"===typeof q[0][0])return p(q);throw Error("Unsupported points list format");},t=function(q){if(3>q.length)throw Error("CAG shape needs at least 3 points");let A=[],x=new h(new k(q[q.length-1]));q.map(function(u){u=new h(new k(u));A.push(new d(x,u));x=u});q=m(A);if(l(q))throw Error("Polygon is self intersecting!");let D=q.area();if(Math.abs(D)<c)throw Error("Degenerate polygon!");
0>D&&(q=q.flipped());return q.canonicalized()},p=function(q){if(1===q.length)return r(q[0]);let A=[];q.forEach(D=>{A.push(t(D))});let x={};A.forEach((D,u)=>{A.forEach((v,y)=>{D!==v&&(x[u]||(x[u]={parents:[],isHole:!1}),x[y]||(x[y]={parents:[],isHole:!1}),g(v,D)&&(x[u].parents.push(y),x[u].isHole=!!(x[u].parents.length%2),x[y].isHole=!!(x[y].parents.length%2)))})});q=null;for(key in x)q=x[key],q.isHole&&(delete x[key],q.parents.forEach(D=>{A[D]=f(A[D],A[key])}));q=m([]);for(key in x)q=e(q,A[key]);
return q};b.exports={fromSides:m,fromObject:function(q){var A=q.sides.map(function(x){return d.fromObject(x)});A=m(A);A.isCanonicalized=q.isCanonicalized;return A},fromPoints:r,fromPointsNoCheck:function(q){let A=[],x=new k(q[q.length-1]),D=new h(x);q.map(function(u){u=new k(u);u=new h(u);let v=new d(D,u);A.push(v);D=u});return m(A)},fromPath2:function(q){if(!q.isClosed())throw Error("The path should be closed!");return r(q.getPoints())},fromFakeCSG:function(q){q=q.polygons.map(function(A){return d._fromFakePolygon(A)}).filter(function(A){return null!==
A});return m(q)},fromCompactBinary:function(q){if("CAG"!==q["class"])throw Error("Not a CAG");let A=[];var x=q.vertexData,D=x.length/2;let u=0;for(var v=0;v<D;v++){var y=x[u++],C=x[u++];y=new k(y,C);y=new h(y);A.push(y)}x=[];D=q.sideVertexIndices.length/2;u=0;for(v=0;v<D;v++)y=q.sideVertexIndices[u++],C=q.sideVertexIndices[u++],y=new d(A[y],A[C]),x.push(y);q=m(x);q.isCanonicalized=!0;return q}}},{"../api/ops-booleans":6,"./CAG":15,"./constants":24,"./math/Side":33,"./math/Vector2":34,"./math/Vertex2":36,
"./utils/cagValidation":44}],17:[function(a,b,n){const d=a("./trees"),k=a("./math/Polygon3"),h=a("./math/Plane"),c=a("./math/OrthoNormalBasis");a("./CAG");const l=a("./Properties"),{fromPolygons:g}=a("./CSGFactories"),e=a("./utils/fixTJunctions"),f=a("./utils/canonicalize"),m=a("./utils/retesellate"),{bounds:r}=a("./utils/csgMeasurements"),{projectToOrthoNormalBasis:t}=a("./utils/csgProjections"),{lieFlat:p,getTransformationToFlatLying:q,getTransformationAndInverseTransformationToFlatLying:A}=a("../api/ops-cnc"),
{sectionCut:x,cutByPlane:D}=a("../api/ops-cuts"),u=a("../api/center"),{expand:v,contract:y,expandedShellOfCCSG:C}=a("../api/ops-expandContract");a=function(){this.polygons=[];this.properties=new l;this.isRetesselated=this.isCanonicalized=!0};a.prototype={union:function(w){w instanceof Array?(w=w.slice(0),w.push(this)):w=[this,w];let z;for(z=1;z<w.length;z+=2)w.push(w[z-1].unionSub(w[z]));return w[z-1].reTesselated().canonicalized()},unionSub:function(w,z,B){if(this.mayOverlap(w)){var E=new d(this.polygons);
let H=new d(w.polygons);E.clipTo(H,!1);H.clipTo(E);H.invert();H.clipTo(E);H.invert();E=E.allPolygons().concat(H.allPolygons());E=g(E);E.properties=this.properties._merge(w.properties);z&&(E=E.reTesselated());B&&(E=E.canonicalized());return E}return this.unionForNonIntersecting(w)},unionForNonIntersecting:function(w){var z=this.polygons.concat(w.polygons);z=g(z);z.properties=this.properties._merge(w.properties);z.isCanonicalized=this.isCanonicalized&&w.isCanonicalized;z.isRetesselated=this.isRetesselated&&
w.isRetesselated;return z},subtract:function(w){w=w instanceof Array?w:[w];let z=this;for(let B=0;B<w.length;B++){let E=B===w.length-1;z=z.subtractSub(w[B],E,E)}return z},subtractSub:function(w,z,B){var E=new d(this.polygons);let H=new d(w.polygons);E.invert();E.clipTo(H);H.clipTo(E,!0);E.addPolygons(H.allPolygons());E.invert();E=g(E.allPolygons());E.properties=this.properties._merge(w.properties);z&&(E=E.reTesselated());B&&(E=E.canonicalized());return E},intersect:function(w){w=w instanceof Array?
w:[w];let z=this;for(let B=0;B<w.length;B++){let E=B===w.length-1;z=z.intersectSub(w[B],E,E)}return z},intersectSub:function(w,z,B){var E=new d(this.polygons);let H=new d(w.polygons);E.invert();H.clipTo(E);H.invert();E.clipTo(H);H.clipTo(E);E.addPolygons(H.allPolygons());E.invert();E=g(E.allPolygons());E.properties=this.properties._merge(w.properties);z&&(E=E.reTesselated());B&&(E=E.canonicalized());return E},invert:function(){let w=this.polygons.map(function(z){return z.flipped()});return g(w)},
transform1:function(w){var z=this.polygons.map(function(B){return B.transform(w)});z=g(z);z.properties=this.properties._transform(w);z.isRetesselated=this.isRetesselated;return z},transform:function(w){let z=w.isMirroring(),B={},E={};var H=this.polygons.map(function(F){var G=F.plane;var I=G.getTag();I in E?G=E[I]:(G=G.transform(w),E[I]=G);I=F.vertices.map(function(J){let M=J.getTag();M in B?J=B[M]:(J=J.transform(w),B[M]=J);return J});z&&I.reverse();return new k(I,F.shared,G)});H=g(H);H.properties=
this.properties._transform(w);H.isRetesselated=this.isRetesselated;H.isCanonicalized=this.isCanonicalized;return H},center:function(w){return u({axes:w},[this])},expand:function(w,z){return v(this,w,z)},contract:function(w,z){return y(this,w,z)},expandedShell:function(w,z,B){return C(this,w,z,B)},stretchAtPlane:function(w,z,B){w=h.fromNormalAndPoint(w,z);z=new c(w);z=this.sectionCut(z).extrudeInOrthonormalBasis(z,B);let E=this.cutByPlane(w),H=this.cutByPlane(w.flipped());return E.union([z,H.translate(w.normal.times(B))])},
canonicalized:function(){return f(this)},reTesselated:function(){return m(this)},fixTJunctions:function(){return e(g,this)},getBounds:function(){return r(this)},mayOverlap:function(w){if(0===this.polygons.length||0===w.polygons.length)return!1;let z=r(this);w=r(w);return z[1].x<w[0].x||z[0].x>w[1].x||z[1].y<w[0].y||z[0].y>w[1].y||z[1].z<w[0].z||z[0].z>w[1].z?!1:!0},cutByPlane:function(w){return D(this,w)},connectTo:function(w,z,B,E){w=w.getTransformationTo(z,B,E);return this.transform(w)},setShared:function(w){var z=
this.polygons.map(function(B){return new k(B.vertices,w,B.plane)});z=g(z);z.properties=this.properties;z.isRetesselated=this.isRetesselated;z.isCanonicalized=this.isCanonicalized;return z},setColor:function(w){let z=k.Shared.fromColor.apply(this,arguments);return this.setShared(z)},getTransformationAndInverseTransformationToFlatLying:function(){return A(this)},getTransformationToFlatLying:function(){return q(this)},lieFlat:function(){return p(this)},projectToOrthoNormalBasis:function(w){return t(this,
w)},sectionCut:function(w){return x(this,w)},getFeatures:function(w){w instanceof Array||(w=[w]);let z=this.toTriangles().map(function(B){return B.getTetraFeatures(w)}).reduce(function(B,E){return E.map(function(H,F){return H+(0===B?0:B[F])})},0);return 1===z.length?z[0]:z},toPolygons:function(){return this.polygons},toString:function(){let w="CSG solid:\n";this.polygons.map(function(z){w+=z.toString()});return w},toCompactBinary:function(){let w=this.canonicalized(),z=w.polygons.length,B=0,E=0,H=
{},F=[],G=0,I={},J=[],M=[],N={},K=0;w.polygons.map(function(S){S.vertices.map(function(V){++B;let Z=V.getTag();Z in H||(H[Z]=E++,F.push(V))});var U=S.plane.getTag();U in I||(I[U]=G++,J.push(S.plane));U=S.shared.getTag();U in N||(N[U]=K++,M.push(S.shared))});let L=new Uint32Array(z),O=new Uint32Array(z),P=new Uint32Array(B),Q=new Uint32Array(z),T=new Float64Array(3*E),R=new Float64Array(4*G),aa=0;for(let S=0;S<z;++S){var W=w.polygons[S];L[S]=W.vertices.length;W.vertices.map(function(V){V=V.getTag();
V=H[V];P[aa++]=V});let U=W.plane.getTag();Q[S]=I[U];W=W.shared.getTag();O[S]=N[W]}let Y=0;F.map(function(S){S=S.pos;T[Y++]=S._x;T[Y++]=S._y;T[Y++]=S._z});let X=0;J.map(function(S){const U=S.normal;R[X++]=U._x;R[X++]=U._y;R[X++]=U._z;R[X++]=S.w});return{"class":"CSG",numPolygons:z,numVerticesPerPolygon:L,polygonPlaneIndexes:Q,polygonSharedIndexes:O,polygonVertices:P,vertexData:T,planeData:R,shared:M}},toTriangles:function(){let w=[];this.polygons.forEach(function(z){let B=z.vertices[0];for(let E=z.vertices.length-
3;0<=E;E--)w.push(new k([B,z.vertices[E+1],z.vertices[E+2]],z.shared,z.plane))});return w}};b.exports=a},{"../api/center":3,"../api/ops-cnc":7,"../api/ops-cuts":8,"../api/ops-expandContract":9,"./CAG":15,"./CSGFactories":18,"./Properties":22,"./math/OrthoNormalBasis":28,"./math/Plane":30,"./math/Polygon3":32,"./trees":41,"./utils/canonicalize":45,"./utils/csgMeasurements":46,"./utils/csgProjections":47,"./utils/fixTJunctions":48,"./utils/retesellate":49}],18:[function(a,b,n){const d=a("./math/Vector3"),
k=a("./math/Vertex3"),h=a("./math/Plane"),c=a("./math/Polygon2"),l=a("./math/Polygon3"),g=function(e){let f=new (a("./CSG"));f.polygons=e;f.isCanonicalized=!1;f.isRetesselated=!1;return f};b.exports={fromPolygons:g,fromSlices:function(e){return c.createFromPoints([[0,0,0],[1,0,0],[1,1,0],[0,1,0]]).solidFromSlices(e)},fromObject:function(e){var f=e.polygons.map(function(m){return l.fromObject(m)});f=g(f);f.isCanonicalized=e.isCanonicalized;f.isRetesselated=e.isRetesselated;return f},fromCompactBinary:function(e){if("CSG"!==
e["class"])throw Error("Not a CSG");var f=[],m=e.planeData,r=m.length/4;let t=0;for(var p=0;p<r;p++){var q=m[t++];var A=m[t++];var x=m[t++];var D=m[t++];q=d.Create(q,A,x);q=new h(q,D);f.push(q)}m=[];r=e.vertexData;p=r.length/3;t=0;for(D=0;D<p;D++)q=r[t++],A=r[t++],x=r[t++],q=d.Create(q,A,x),q=new k(q),m.push(q);A=e.shared.map(function(C){return l.Shared.fromObject(C)});x=[];r=e.numPolygons;p=e.numVerticesPerPolygon;D=e.polygonVertices;let u=e.polygonPlaneIndexes;e=e.polygonSharedIndexes;let v;var y;
t=0;for(let C=0;C<r;C++){q=p[C];v=[];for(y=0;y<q;y++)v.push(m[D[t++]]);q=f[u[C]];y=A[e[C]];q=new l(v,y,q);x.push(q)}f=g(x);f.isCanonicalized=!0;f.isRetesselated=!0;return f}}},{"./CSG":17,"./math/Plane":30,"./math/Polygon2":31,"./math/Polygon3":32,"./math/Vector3":35,"./math/Vertex3":37}],19:[function(a,b,n){a=function(d,k){this.lookuptable={};this.multiplier=1/k};a.prototype={lookupOrCreate:function(d,k){let h="",c=this.multiplier;d.forEach(function(g){h+=Math.round(g*c)+"/"});if(h in this.lookuptable)return this.lookuptable[h];
k=k(d);let l=d.map(function(g){g=Math.floor(g*c);return[""+g+"/",""+(g+1)+"/"]});d=1<<d.length;for(let g=0;g<d;++g){let e=g;h="";l.forEach(function(f){h+=f[e&1];e>>=1});this.lookuptable[h]=k}return k}};b.exports=a},{}],20:[function(a,b,n){const d=a("./FuzzyFactory"),{EPS:k}=a("./constants"),h=a("./math/Side");a=function(){this.vertexfactory=new d(2,k)};a.prototype={getVertex:function(c){return this.vertexfactory.lookupOrCreate([c.pos._x,c.pos._y],function(l){return c})},getSide:function(c){let l=
this.getVertex(c.vertex0);c=this.getVertex(c.vertex1);return new h(l,c)}};b.exports=a},{"./FuzzyFactory":19,"./constants":24,"./math/Side":33}],21:[function(a,b,n){const {EPS:d}=a("./constants"),k=a("./math/Polygon3"),h=a("./FuzzyFactory");a=function(){this.vertexfactory=new h(3,d);this.planefactory=new h(4,d);this.polygonsharedfactory={}};a.prototype={getPolygonShared:function(c){let l=c.getHash();return l in this.polygonsharedfactory?this.polygonsharedfactory[l]:this.polygonsharedfactory[l]=c},
getVertex:function(c){return this.vertexfactory.lookupOrCreate([c.pos._x,c.pos._y,c.pos._z],function(l){return c})},getPlane:function(c){return this.planefactory.lookupOrCreate([c.normal._x,c.normal._y,c.normal._z,c.w],function(l){return c})},getPolygon:function(c){let l=this.getPlane(c.plane),g=this.getPolygonShared(c.shared),e=this;c=c.vertices.map(function(m){return e.getVertex(m)});let f=[];if(0<c.length){let m=c[c.length-1].getTag();c.forEach(function(r){let t=r.getTag();t!==m&&f.push(r);m=t})}3>
f.length&&(f=[]);return new k(f,g,l)}};b.exports=a},{"./FuzzyFactory":19,"./constants":24,"./math/Polygon3":32}],22:[function(a,b,n){const d=function(){};d.prototype={_transform:function(k){let h=new d;d.transformObj(this,h,k);return h},_merge:function(k){let h=new d;d.cloneObj(this,h);d.addFrom(h,k);return h}};d.transformObj=function(k,h,c){for(let l in k){if("_transform"===l)continue;if("_merge"===l)continue;let g=k[l],e=g;"object"===typeof g&&("transform"in g&&"function"===typeof g.transform?e=
g.transform(c):g instanceof Array?(e=[],d.transformObj(g,e,c)):g instanceof d&&(e=new d,d.transformObj(g,e,c)));h[l]=e}};d.cloneObj=function(k,h){for(let c in k){if("_transform"===c)continue;if("_merge"===c)continue;let l=k[c],g=l;if("object"===typeof l)if(l instanceof Array){g=[];for(let e=0;e<l.length;e++)g.push(l[e])}else l instanceof d&&(g=new d,d.cloneObj(l,g));h[c]=g}};d.addFrom=function(k,h){for(let c in h)"_transform"!==c&&"_merge"!==c&&(c in k&&"object"===typeof k[c]&&k[c]instanceof d&&"object"===
typeof h[c]&&h[c]instanceof d?d.addFrom(k[c],h[c]):c in k||(k[c]=h[c]))};b.exports=d},{}],23:[function(a,b,n){const d=a("./math/Vector3"),k=a("./math/Line3"),h=a("./math/Matrix4"),c=a("./math/OrthoNormalBasis"),l=a("./math/Plane"),g=function(f,m,r){this.point=new d(f);this.axisvector=(new d(m)).unit();this.normalvector=(new d(r)).unit()};g.prototype={normalized:function(){let f=this.axisvector.unit();var m=this.normalvector.cross(f).unit();m=f.cross(m);return new g(this.point,f,m)},transform:function(f){let m=
this.point.multiply4x4(f),r=this.point.plus(this.axisvector).multiply4x4(f).minus(m);f=this.point.plus(this.normalvector).multiply4x4(f).minus(m);return new g(m,r,f)},getTransformationTo:function(f,m,r){m=m?!0:!1;r=r?Number(r):0;var t=this.normalized();f=f.normalized();let p=h.translation(this.point.negated());var q=l.anyPlaneFromVector3Ds(new d(0,0,0),t.axisvector,f.axisvector);q=new c(q);var A=q.to2D(t.axisvector).angle();let x=q.to2D(f.axisvector).angle();A=180*(x-A)/Math.PI;m&&(A+=180);p=p.multiply(q.getProjectionMatrix());
p=p.multiply(h.rotationZ(A));p=p.multiply(q.getInverseProjectionMatrix());t=t.transform(p);m=l.fromNormalAndPoint(f.axisvector,new d(0,0,0));m=new c(m);A=m.to2D(t.normalvector).angle();x=m.to2D(f.normalvector).angle();A=180*(x-A)/Math.PI;A+=r;p=p.multiply(m.getProjectionMatrix());p=p.multiply(h.rotationZ(A));p=p.multiply(m.getInverseProjectionMatrix());return p=p.multiply(h.translation(f.point))},axisLine:function(){return new k(this.point,this.axisvector)},extend:function(f){f=this.point.plus(this.axisvector.unit().times(f));
return new g(f,this.axisvector,this.normalvector)}};const e=function(f){this.connectors_=f?f.slice():[]};e.defaultNormal=[0,0,1];e.fromPath2D=function(f,m,r){if(3===arguments.length)return e._fromPath2DTangents(f,m,r);if(2===arguments.length)return e._fromPath2DExplicit(f,m);throw Error("call with path2D and either 2 direction vectors, or a function returning direction vectors");};e._fromPath2DTangents=function(f,m,r){let t,p=f.points.length,q=new e([new g(f.points[0],m,e.defaultNormal)]);f.points.slice(1,
p-1).forEach(function(A,x){t=f.points[x+2].minus(f.points[x]).toVector3D(0);q.appendConnector(new g(A.toVector3D(0),t,e.defaultNormal))},this);q.appendConnector(new g(f.points[p-1],r,e.defaultNormal));q.closed=f.closed;return q};e._fromPath2DExplicit=function(f,m){let r=new e(f.points.map(function(t,p){var q=t.toVector3D(0),A=d.Create(1,0,0),x=A.rotateZ,D=m;"function"===typeof D&&(D=D(t,p));return new g(q,x.call(A,D),e.defaultNormal)},this));r.closed=f.closed;return r};e.prototype={setClosed:function(f){this.closed=
!!f},appendConnector:function(f){this.connectors_.push(f)},followWith:function(f){function m(x,D){"function"===typeof x&&(x=x(D.point,D.axisvector,D.normalvector));return x}const r=a("./CSG");this.verify();let t=[],p,q=this.connectors_[this.connectors_.length-1],A=m(f,q);this.connectors_.forEach(function(x,D){p=m(f,x);D||this.closed?t.push.apply(t,A._toWallPolygons({toConnector1:q,toConnector2:x,cag:p})):t.push.apply(t,p._toPlanePolygons({toConnector:x,flipped:!0}));D!==this.connectors_.length-1||
this.closed||t.push.apply(t,p._toPlanePolygons({toConnector:x}));A=p;q=x},this);return r.fromPolygons(t).reTesselated().canonicalized()},verify:function(){let f,m;for(let r=0;r<this.connectors_.length-1;r++){f=this.connectors_[r];m=this.connectors_[r+1];if(0>=m.point.minus(f.point).dot(f.axisvector))throw Error("Invalid ConnectorList. Each connectors position needs to be within a <90deg range of previous connectors axisvector");if(0>=f.axisvector.dot(m.axisvector))throw Error("invalid ConnectorList. No neighboring connectors axisvectors may span a >=90deg angle");
}}};b.exports={Connector:g,ConnectorList:e}},{"./CSG":17,"./math/Line3":26,"./math/Matrix4":27,"./math/OrthoNormalBasis":28,"./math/Plane":30,"./math/Vector3":35}],24:[function(a,b,n){let d=1;b.exports={_CSGDEBUG:!1,defaultResolution2D:32,defaultResolution3D:12,EPS:1E-5,angleEPS:.1,areaEPS:5E-6*1E-5*Math.sin(.1),all:0,top:1,bottom:2,left:3,right:4,front:5,back:6,staticTag:d,getTag:()=>d++}},{}],25:[function(a,b,n){const d=a("./Vector2"),{solve2Linear:k}=a("../utils"),h=function(c,l){c=new d(c);l=
parseFloat(l);let g=c.length();l*=g;this.normal=c=c.times(1/g);this.w=l};h.fromPoints=function(c,l){c=new d(c);l=new d(l);l=l.minus(c).normal().negated().unit();c=c.dot(l);return new h(l,c)};h.prototype={reverse:function(){return new h(this.normal.negated(),-this.w)},equals:function(c){return c.normal.equals(this.normal)&&c.w===this.w},origin:function(){return this.normal.times(this.w)},direction:function(){return this.normal.normal()},xAtY:function(c){return(this.w-this.normal._y*c)/this.normal.x},
absDistanceToPoint:function(c){c=new d(c);c=c.dot(this.normal);return Math.abs(c-this.w)},intersectWithLine:function(c){c=k(this.normal.x,this.normal.y,c.normal.x,c.normal.y,this.w,c.w);return c=new d(c)},transform:function(c){var l=new d(0,0);let g=this.normal.times(this.w);l=l.multiply4x4(c);l=this.normal.multiply4x4(c).minus(l);c=g.multiply4x4(c);c=l.dot(c);return new h(l,c)}};b.exports=h},{"../utils":42,"./Vector2":34}],26:[function(a,b,n){const d=a("./Vector3"),{EPS:k}=a("../constants"),{solve2Linear:h}=
a("../utils"),c=function(l,g){l=new d(l);g=new d(g);this.point=l;this.direction=g.unit()};c.fromPoints=function(l,g){l=new d(l);g=new d(g);g=g.minus(l);return new c(l,g)};c.fromPlanes=function(l,g){let e=l.normal.cross(g.normal);var f=e.length();if(f<k)throw Error("Parallel planes");e=e.times(1/f);f=Math.abs(e.x);let m=Math.abs(e.y),r=Math.abs(e.z);f>=m&&f>=r?(l=h(l.normal.y,l.normal.z,g.normal.y,g.normal.z,l.w,g.w),l=new d(0,l[0],l[1])):m>=f&&m>=r?(l=h(l.normal.x,l.normal.z,g.normal.x,g.normal.z,
l.w,g.w),l=new d(l[0],0,l[1])):(l=h(l.normal.x,l.normal.y,g.normal.x,g.normal.y,l.w,g.w),l=new d(l[0],l[1],0));return new c(l,e)};c.prototype={intersectWithPlane:function(l){l=(l.w-l.normal.dot(this.point))/l.normal.dot(this.direction);return this.point.plus(this.direction.times(l))},clone:function(l){return new c(this.point.clone(),this.direction.clone())},reverse:function(){return new c(this.point.clone(),this.direction.negated())},transform:function(l){let g=this.point.multiply4x4(l);l=this.point.plus(this.direction).multiply4x4(l).minus(g);
return new c(g,l)},closestPointOnLine:function(l){l=new d(l);l=l.minus(this.point).dot(this.direction)/this.direction.dot(this.direction);return this.point.plus(this.direction.times(l))},distanceToPoint:function(l){l=new d(l);let g=this.closestPointOnLine(l);return l.minus(g).length()},equals:function(l){return!this.direction.equals(l.direction)||this.distanceToPoint(l.point)>k?!1:!0}};b.exports=c},{"../constants":24,"../utils":42,"./Vector3":35}],27:[function(a,b,n){const d=a("./Vector3"),k=a("./Vector2"),
h=a("./OrthoNormalBasis"),c=a("./Plane"),l=function(g){this.elements=1<=arguments.length?g:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]};l.prototype={plus:function(g){for(var e=[],f=0;16>f;f++)e[f]=this.elements[f]+g.elements[f];return new l(e)},minus:function(g){for(var e=[],f=0;16>f;f++)e[f]=this.elements[f]-g.elements[f];return new l(e)},multiply:function(g){var e=this.elements[0],f=this.elements[1],m=this.elements[2],r=this.elements[3],t=this.elements[4],p=this.elements[5],q=this.elements[6],A=this.elements[7],
x=this.elements[8],D=this.elements[9],u=this.elements[10],v=this.elements[11],y=this.elements[12],C=this.elements[13],w=this.elements[14],z=this.elements[15],B=g.elements[0],E=g.elements[1],H=g.elements[2],F=g.elements[3],G=g.elements[4],I=g.elements[5],J=g.elements[6],M=g.elements[7],N=g.elements[8],K=g.elements[9],L=g.elements[10],O=g.elements[11],P=g.elements[12],Q=g.elements[13],T=g.elements[14];g=g.elements[15];var R=[];R[0]=e*B+f*G+m*N+r*P;R[1]=e*E+f*I+m*K+r*Q;R[2]=e*H+f*J+m*L+r*T;R[3]=e*F+
f*M+m*O+r*g;R[4]=t*B+p*G+q*N+A*P;R[5]=t*E+p*I+q*K+A*Q;R[6]=t*H+p*J+q*L+A*T;R[7]=t*F+p*M+q*O+A*g;R[8]=x*B+D*G+u*N+v*P;R[9]=x*E+D*I+u*K+v*Q;R[10]=x*H+D*J+u*L+v*T;R[11]=x*F+D*M+u*O+v*g;R[12]=y*B+C*G+w*N+z*P;R[13]=y*E+C*I+w*K+z*Q;R[14]=y*H+C*J+w*L+z*T;R[15]=y*F+C*M+w*O+z*g;return new l(R)},clone:function(){var g=this.elements.map(function(e){return e});return new l(g)},rightMultiply1x3Vector:function(g){var e=g._x,f=g._y,m=g._z;g=e*this.elements[0]+f*this.elements[1]+m*this.elements[2]+1*this.elements[3];
var r=e*this.elements[4]+f*this.elements[5]+m*this.elements[6]+1*this.elements[7],t=e*this.elements[8]+f*this.elements[9]+m*this.elements[10]+1*this.elements[11];e=e*this.elements[12]+f*this.elements[13]+m*this.elements[14]+1*this.elements[15];1!==e&&(e=1/e,g*=e,r*=e,t*=e);return new d(g,r,t)},leftMultiply1x3Vector:function(g){var e=g._x,f=g._y,m=g._z;g=e*this.elements[0]+f*this.elements[4]+m*this.elements[8]+1*this.elements[12];var r=e*this.elements[1]+f*this.elements[5]+m*this.elements[9]+1*this.elements[13],
t=e*this.elements[2]+f*this.elements[6]+m*this.elements[10]+1*this.elements[14];e=e*this.elements[3]+f*this.elements[7]+m*this.elements[11]+1*this.elements[15];1!==e&&(e=1/e,g*=e,r*=e,t*=e);return new d(g,r,t)},rightMultiply1x2Vector:function(g){var e=g.x,f=g.y;g=e*this.elements[0]+f*this.elements[1]+0*this.elements[2]+1*this.elements[3];var m=e*this.elements[4]+f*this.elements[5]+0*this.elements[6]+1*this.elements[7];e=e*this.elements[12]+f*this.elements[13]+0*this.elements[14]+1*this.elements[15];
1!==e&&(e=1/e,g*=e,m*=e);return new k(g,m)},leftMultiply1x2Vector:function(g){var e=g.x,f=g.y;g=e*this.elements[0]+f*this.elements[4]+0*this.elements[8]+1*this.elements[12];var m=e*this.elements[1]+f*this.elements[5]+0*this.elements[9]+1*this.elements[13];e=e*this.elements[3]+f*this.elements[7]+0*this.elements[11]+1*this.elements[15];1!==e&&(e=1/e,g*=e,m*=e);return new k(g,m)},isMirroring:function(){var g=new d(this.elements[0],this.elements[4],this.elements[8]),e=new d(this.elements[1],this.elements[5],
this.elements[9]),f=new d(this.elements[2],this.elements[6],this.elements[10]);return 0>g.cross(e).dot(f)}};l.unity=function(){return new l};l.rotationX=function(g){var e=1/180*Math.PI*g;g=Math.cos(e);e=Math.sin(e);return new l([1,0,0,0,0,g,e,0,0,-e,g,0,0,0,0,1])};l.rotationY=function(g){var e=1/180*Math.PI*g;g=Math.cos(e);e=Math.sin(e);return new l([g,0,-e,0,0,1,0,0,e,0,g,0,0,0,0,1])};l.rotationZ=function(g){var e=1/180*Math.PI*g;g=Math.cos(e);e=Math.sin(e);return new l([g,e,0,0,-e,g,0,0,0,0,1,0,
0,0,0,1])};l.rotation=function(g,e,f){g=new d(g);e=new d(e);e=c.fromNormalAndPoint(e,g);e=new h(e);var m=l.translation(g.negated());m=m.multiply(e.getProjectionMatrix());m=m.multiply(l.rotationZ(f));m=m.multiply(e.getInverseProjectionMatrix());return m=m.multiply(l.translation(g))};l.translation=function(g){g=new d(g);return new l([1,0,0,0,0,1,0,0,0,0,1,0,g.x,g.y,g.z,1])};l.mirroring=function(g){var e=g.normal.x,f=g.normal.y,m=g.normal.z;g=g.w;return new l([1-2*e*e,-2*f*e,-2*m*e,0,-2*e*f,1-2*f*f,
-2*m*f,0,-2*e*m,-2*f*m,1-2*m*m,0,2*e*g,2*f*g,2*m*g,1])};l.scaling=function(g){g=new d(g);return new l([g.x,0,0,0,0,g.y,0,0,0,0,g.z,0,0,0,0,1])};b.exports=l},{"./OrthoNormalBasis":28,"./Plane":30,"./Vector2":34,"./Vector3":35}],28:[function(a,b,n){const d=a("./Vector2"),k=a("./Vector3"),h=a("./Line2"),c=a("./Line3"),l=a("./Plane"),g=function(e,f){f=2>arguments.length?e.normal.randomNonParallelVector():new k(f);this.v=e.normal.cross(f).unit();this.u=this.v.cross(e.normal);this.plane=e;this.planeorigin=
e.normal.times(e.w)};g.GetCartesian=function(e,f){e=e+"/"+f;if("X/Y"===e)e=[0,0,1],f=[1,0,0];else if("Y/-X"===e)e=[0,0,1],f=[0,1,0];else if("-X/-Y"===e)e=[0,0,1],f=[-1,0,0];else if("-Y/X"===e)e=[0,0,1],f=[0,-1,0];else if("-X/Y"===e)e=[0,0,-1],f=[-1,0,0];else if("-Y/-X"===e)e=[0,0,-1],f=[0,-1,0];else if("X/-Y"===e)e=[0,0,-1],f=[1,0,0];else if("Y/X"===e)e=[0,0,-1],f=[0,1,0];else if("X/Z"===e)e=[0,-1,0],f=[1,0,0];else if("Z/-X"===e)e=[0,-1,0],f=[0,0,1];else if("-X/-Z"===e)e=[0,-1,0],f=[-1,0,0];else if("-Z/X"===
e)e=[0,-1,0],f=[0,0,-1];else if("-X/Z"===e)e=[0,1,0],f=[-1,0,0];else if("-Z/-X"===e)e=[0,1,0],f=[0,0,-1];else if("X/-Z"===e)e=[0,1,0],f=[1,0,0];else if("Z/X"===e)e=[0,1,0],f=[0,0,1];else if("Y/Z"===e)e=[1,0,0],f=[0,1,0];else if("Z/-Y"===e)e=[1,0,0],f=[0,0,1];else if("-Y/-Z"===e)e=[1,0,0],f=[0,-1,0];else if("-Z/Y"===e)e=[1,0,0],f=[0,0,-1];else if("-Y/Z"===e)e=[-1,0,0],f=[0,-1,0];else if("-Z/-Y"===e)e=[-1,0,0],f=[0,0,-1];else if("Y/-Z"===e)e=[-1,0,0],f=[0,1,0];else if("Z/Y"===e)e=[-1,0,0],f=[0,0,1];
else throw Error("OrthoNormalBasis.GetCartesian: invalid combination of axis identifiers. Should pass two string arguments from [X,Y,Z,-X,-Y,-Z], being two different axes.");return new g(new l(new k(e),0),new k(f))};g.Z0Plane=function(){let e=new l(new k([0,0,1]),0);return new g(e,new k([1,0,0]))};g.prototype={getProjectionMatrix:function(){return new (a("./Matrix4"))([this.u.x,this.v.x,this.plane.normal.x,0,this.u.y,this.v.y,this.plane.normal.y,0,this.u.z,this.v.z,this.plane.normal.z,0,0,0,-this.plane.w,
1])},getInverseProjectionMatrix:function(){const e=a("./Matrix4");let f=this.plane.normal.times(this.plane.w);return new e([this.u.x,this.u.y,this.u.z,0,this.v.x,this.v.y,this.v.z,0,this.plane.normal.x,this.plane.normal.y,this.plane.normal.z,0,f.x,f.y,f.z,1])},to2D:function(e){return new d(e.dot(this.u),e.dot(this.v))},to3D:function(e){return this.planeorigin.plus(this.u.times(e.x)).plus(this.v.times(e.y))},line3Dto2D:function(e){var f=e.point;e=e.direction.plus(f);f=this.to2D(f);e=this.to2D(e);return h.fromPoints(f,
e)},line2Dto3D:function(e){var f=e.origin();e=e.direction().plus(f);f=this.to3D(f);e=this.to3D(e);return c.fromPoints(f,e)},transform:function(e){let f=this.plane.transform(e);var m=this.u.transform(e);e=(new k(0,0,0)).transform(e);m=m.minus(e);return new g(f,m)}};b.exports=g},{"./Line2":25,"./Line3":26,"./Matrix4":27,"./Plane":30,"./Vector2":34,"./Vector3":35}],29:[function(a,b,n){const d=a("./Vector2"),{EPS:k,angleEPS:h}=a("../constants"),{parseOptionAs2DVector:c,parseOptionAsFloat:l,parseOptionAsInt:g,
parseOptionAsBool:e}=a("../../api/optionParsers"),{defaultResolution2D:f}=a("../constants"),m=a("./Vertex2"),r=a("./Side"),t=function(p,q){q=!!q;p=p||[];let A=null;q&&0<p.length&&(A=new d(p[p.length-1]));let x=[];p.map(function(D){D=new d(D);let u=!1;null!==A&&(u=D.distanceTo(A)<k);u||x.push(D);A=D});this.points=x;this.closed=q};t.arc=function(p){let q=c(p,"center",0),A=l(p,"radius",1),x=l(p,"startangle",0),D=l(p,"endangle",360);var u=g(p,"resolution",f);for(p=e(p,"maketangent",!1);720<=D-x;)D-=360;
for(;-720>=D-x;)D+=360;let v=[];var y=Math.abs(D-x);if(y<h){var C=d.fromAngle(x/180*Math.PI).times(A);v.push(C.plus(q))}else{u=Math.floor(u*y/360)+1;y=.5*u/y;.25<y&&(y=.25);let w=p?u+2:u;for(let z=0;z<=w;z++)C=z,p&&(C=(z-1)*(u-2*y)/u+y,0>C&&(C=0),C>u&&(C=u)),C=d.fromAngle((x+C*(D-x)/u)/180*Math.PI).times(A),v.push(C.plus(q))}return new t(v,!1)};t.prototype={concat:function(p){if(this.closed||p.closed)throw Error("Paths must not be closed");p=this.points.concat(p.points);return new t(p)},getPoints:function(){return this.points},
appendPoint:function(p){if(this.closed)throw Error("Path must not be closed");p=new d(p);p=this.points.concat([p]);return new t(p)},appendPoints:function(p){if(this.closed)throw Error("Path must not be closed");let q=this.points;p.forEach(function(A){q.push(new d(A))});return new t(q)},close:function(){return new t(this.points,!0)},isClosed:function(){return this.closed},getTurn:function(){const p=this.points;let q=0,A=p.length-1;for(let x=0;x<p.length;A=x++)q+=p[A].x*p[x].y-p[A].y*p[x].x;return 0<
q?"clockwise":0>q?"counter-clockwise":"straight"},rectangularExtrude:function(p,q,A){return this.expandToCAG(p/2,A).extrude({offset:[0,0,q]})},expandToCAG:function(p,q){const A=a("../CAG");let x=[],D=this.points.length,u=0;this.closed&&2<D&&(u=-1);for(let C=u;C<D;C++){var v=C;0>v&&(v=D-1);v=new m(this.points[v]);if(C>u){var y=new r(y,v);x.push(y)}y=v}return A.fromSides(x).expandedShell(p,q)},innerToCAG:function(){const p=a("../CAG");if(!this.closed)throw Error("The path should be closed!");return p.fromPoints(this.points)},
transform:function(p){let q=this.points.map(function(A){return A.multiply4x4(p)});return new t(q,this.closed)},appendBezier:function(p,q){2>arguments.length&&(q={});if(this.closed)throw Error("Path must not be closed");if(!(p instanceof Array))throw Error("appendBezier: should pass an array of control points");if(1>p.length)throw Error("appendBezier: need at least 1 control point");if(1>this.points.length)throw Error("appendBezier: path must already contain a point (the endpoint of the path is used as the starting point for the bezier curve)");
var A=g(q,"resolution",f);4>A&&(A=4);var x=[];let D=[];D.push(this.points[this.points.length-1]);for(var u=0;u<p.length;++u){var v=p[u];if(null===v){if(0!==u)throw Error("appendBezier: null can only be passed as the first control point");if(2>p.length)throw Error("appendBezier: null can only be passed if there is at least one more control point");if("lastBezierControlPoint"in this)v=this.lastBezierControlPoint;else{if(2>this.points.length)throw Error("appendBezier: null is passed as a control point but this requires a previous bezier curve or at least two points in the existing path");
v=this.points[this.points.length-2]}v=this.points[this.points.length-1].times(2).minus(v)}else v=new d(v);D.push(v)}let y=D.length-1;u=1;for(v=0;v<=y;++v)0<v&&(u*=v),x.push(u);let C=[];for(u=0;u<=y;++u)C.push(x[y]/(x[u]*x[y-u]));x=function(H){let F=1,G=Math.pow(1-H,y),I=1!==H?1/(1-H):1,J=new d(0,0);for(let M=0;M<=y;++M)M===y&&(G=1),J=J.plus(D[M].times(C[M]*F*G)),F*=H,G*=I;return J};u=[];v=[];var w=y+1;for(var z=0;z<w;++z){var B=z/(w-1),E=x(B);u.push(E);v.push(B)}w=1;for(A=Math.sin(2*Math.PI/A);w<
u.length-1;)if(z=u[w].minus(u[w-1]).unit(),B=u[w+1].minus(u[w]).unit(),z=z.cross(B),Math.abs(z)>A){B=v[w-1];E=v[w+1];z=B+(E-B)/3;B+=2*(E-B)/3;E=x(z);let H=x(B);u.splice(w,1,E,H);v.splice(w,1,z,B);w--;1>w&&(w=1)}else++w;u=this.points.concat(u.slice(1));x=new t(u);x.lastBezierControlPoint=D[D.length-2];return x},appendArc:function(p,q){2>arguments.length&&(q={});if(this.closed)throw Error("Path must not be closed");if(1>this.points.length)throw Error("appendArc: path must already contain a point (the endpoint of the path is used as the starting point for the arc)");
var A=g(q,"resolution",f);4>A&&(A=4);let x,D;if("xradius"in q||"yradius"in q){if("radius"in q)throw Error("Should either give an xradius and yradius parameter, or a radius parameter");x=l(q,"xradius",0);D=l(q,"yradius",0)}else D=x=l(q,"radius",0);var u=l(q,"xaxisrotation",0),v=e(q,"clockwise",!1),y=e(q,"large",!1),C=this.points[this.points.length-1];p=new d(p);x=Math.round(1E5*x)/1E5;D=Math.round(1E5*D)/1E5;p=new d(Math.round(1E5*p.x)/1E5,Math.round(1E5*p.y)/1E5);var w=!v;v=[];if(0===x||0===D)v.push(p);
else{x=Math.abs(x);D=Math.abs(D);var z=u*Math.PI/180;u=Math.cos(z);z=Math.sin(z);var B=C.minus(p).times(.5);B=new d(Math.round(1E5*(u*B.x+z*B.y))/1E5,Math.round(1E5*(-z*B.x+u*B.y))/1E5);var E=B.x*B.x/(x*x)+B.y*B.y/(D*D);1<E&&(E=Math.sqrt(E),x*=E,D*=E,x=Math.round(1E5*x)/1E5,D=Math.round(1E5*D)/1E5);E=Math.sqrt((x*x*D*D-x*x*B.y*B.y-D*D*B.x*B.x)/(x*x*B.y*B.y+D*D*B.x*B.x));w===y&&(E=-E);y=(new d(x*B.y/D,-D*B.x/x)).times(E);C=(new d(u*y.x-z*y.y,z*y.x+u*y.y)).plus(C.plus(p).times(.5));E=new d((B.x-y.x)/
x,(B.y-y.y)/D);B=new d((-B.x-y.x)/x,(-B.y-y.y)/D);y=E.angleRadians();B=(B.angleRadians()-y)%(2*Math.PI);!w&&0<B?B-=2*Math.PI:w&&0>B&&(B+=2*Math.PI);A=Math.ceil(Math.abs(B)/(2*Math.PI)*A)+1;1>A&&(A=1);for(w=1;w<=A;w++){var H=y+w/A*B;E=Math.cos(H);H=Math.sin(H);E=(new d(u*x*E-z*D*H,z*x*E+u*D*H)).plus(C);v.push(E)}}v=this.points.concat(v);return new t(v)}};b.exports=t},{"../../api/optionParsers":11,"../CAG":15,"../constants":24,"./Side":33,"./Vector2":34,"./Vertex2":36}],30:[function(a,b,n){const d=
a("./Vector3"),k=a("./Line3"),{EPS:h,getTag:c}=a("../constants"),l=function(g,e){this.normal=g;this.w=e};l.fromObject=function(g){let e=new d(g.normal);g=parseFloat(g.w);return new l(e,g)};l.fromVector3Ds=function(g,e,f){e=e.minus(g).cross(f.minus(g)).unit();return new l(e,e.dot(g))};l.anyPlaneFromVector3Ds=function(g,e,f){e=e.minus(g);f=f.minus(g);e.length()<h&&(e=f.randomNonParallelVector());f.length()<h&&(f=e.randomNonParallelVector());f=e.cross(f);f.length()<h&&(f=e.randomNonParallelVector(),
f=e.cross(f));f=f.unit();return new l(f,f.dot(g))};l.fromPoints=function(g,e,f){g=new d(g);e=new d(e);f=new d(f);return l.fromVector3Ds(g,e,f)};l.fromNormalAndPoint=function(g,e){g=new d(g);e=new d(e);g=g.unit();e=e.dot(g);return new l(g,e)};l.prototype={flipped:function(){return new l(this.normal.negated(),-this.w)},getTag:function(){let g=this.tag;g||(this.tag=g=c());return g},equals:function(g){return this.normal.equals(g.normal)&&this.w===g.w},transform:function(g){let e=g.isMirroring();var f=
this.normal.randomNonParallelVector(),m=this.normal.cross(f),r=this.normal.cross(m);f=this.normal.times(this.w);m=f.plus(m);r=f.plus(r);f=f.multiply4x4(g);m=m.multiply4x4(g);r=r.multiply4x4(g);g=l.fromVector3Ds(f,m,r);e&&(g=g.flipped());return g},splitLineBetweenPoints:function(g,e){e=e.minus(g);let f=(this.w-this.normal.dot(g))/this.normal.dot(e);isNaN(f)&&(f=0);1<f&&(f=1);0>f&&(f=0);return g.plus(e.times(f))},intersectWithLine:function(g){return g.intersectWithPlane(this)},intersectWithPlane:function(g){return k.fromPlanes(this,
g)},signedDistanceToPoint:function(g){return this.normal.dot(g)-this.w},toString:function(){return"[normal: "+this.normal.toString()+", w: "+this.w+"]"},mirrorPoint:function(g){let e=this.signedDistanceToPoint(g);return g.minus(this.normal.times(2*e))}};b.exports=l},{"../constants":24,"./Line3":26,"./Vector3":35}],31:[function(a,b,n){function d(h){this.sides=k(h).sides}n=a("../CAG");const {fromPoints:k}=a("../CAGFactories");d.prototype=n.prototype;b.exports=d},{"../CAG":15,"../CAGFactories":16}],
32:[function(a,b,n){const d=a("./Vector3"),k=a("./Vertex3"),h=a("./Matrix4"),{_CSGDEBUG:c,EPS:l,getTag:g,areaEPS:e}=a("../constants");let f=function(m,r,t){this.vertices=m;r||(r=f.defaultShared);this.shared=r;this.plane=3<=arguments.length?t:a("./Plane").fromVector3Ds(m[0].pos,m[1].pos,m[2].pos);if(c&&!this.checkIfConvex())throw Error("Not convex!");};f.prototype={checkIfConvex:function(){return f.verticesConvex(this.vertices,this.plane.normal)},setColor:function(m){this.shared=f.Shared.fromColor.apply(this,
arguments);return this},getSignedVolume:function(){let m=0;for(let r=0;r<this.vertices.length-2;r++)m+=this.vertices[0].pos.dot(this.vertices[r+1].pos.cross(this.vertices[r+2].pos));return m/6},getArea:function(){let m=0;for(let r=0;r<this.vertices.length-2;r++)m+=this.vertices[r+1].pos.minus(this.vertices[0].pos).cross(this.vertices[r+2].pos.minus(this.vertices[r+1].pos)).length();return m/2},getTetraFeatures:function(m){let r=[];m.forEach(function(t){"volume"===t?r.push(this.getSignedVolume()):
"area"===t&&r.push(this.getArea())},this);return r},extrude:function(m){const {fromPolygons:r}=a("../CSGFactories");let t=[],p=this;0<p.plane.normal.dot(m)&&(p=p.flipped());t.push(p);m=p.translate(m);let q=this.vertices.length;for(let x=0;x<q;x++){var A=[];let D=x<q-1?x+1:0;A.push(p.vertices[x].pos);A.push(m.vertices[x].pos);A.push(m.vertices[D].pos);A.push(p.vertices[D].pos);A=f.createFromPoints(A,this.shared);t.push(A)}m=m.flipped();t.push(m);return r(t)},translate:function(m){return this.transform(h.translation(m))},
boundingSphere:function(){if(!this.cachedBoundingSphere){var m=this.boundingBox();let r=m[0].plus(m[1]).times(.5);m=m[1].minus(r).length();this.cachedBoundingSphere=[r,m]}return this.cachedBoundingSphere},boundingBox:function(){if(!this.cachedBoundingBox){let m,r,t=this.vertices,p=t.length;r=m=0===p?new d(0,0,0):t[0].pos;for(let q=1;q<p;q++){let A=t[q].pos;m=m.min(A);r=r.max(A)}this.cachedBoundingBox=[m,r]}return this.cachedBoundingBox},flipped:function(){let m=this.vertices.map(function(t){return t.flipped()});
m.reverse();let r=this.plane.flipped();return new f(m,this.shared,r)},transform:function(m){let r=this.vertices.map(function(p){return p.transform(m)}),t=this.plane.transform(m);m.isMirroring()&&r.reverse();return new f(r,this.shared,t)},toString:function(){let m="Polygon plane: "+this.plane.toString()+"\n";this.vertices.map(function(r){m+=" "+r.toString()+"\n"});return m},projectToOrthoNormalBasis:function(m){const r=a("../CAG");var {fromPointsNoCheck:t}=a("../CAGFactories"),p=this.vertices.map(function(q){return m.to2D(q.pos)});
t=t(p);p=t.area();Math.abs(p)<e?t=new r:0>p&&(t=t.flipped());return t},solidFromSlices:function(m){return a("../../api/solidFromSlices")(this,m)}};f.fromObject=function(m){const r=a("./Plane");let t=m.vertices.map(function(q){return k.fromObject(q)}),p=f.Shared.fromObject(m.shared);m=r.fromObject(m.plane);return new f(t,p,m)};f.createFromPoints=function(m,r,t){let p=[];m.map(function(q){q=new d(q);q=new k(q);p.push(q)});return 3>arguments.length?new f(p,r):new f(p,r,t)};f.verticesConvex=function(m,
r){let t=m.length;if(2<t){let p=m[t-2].pos,q=m[t-1].pos;for(let A=0;A<t;A++){let x=m[A].pos;if(!f.isConvexPoint(p,q,x,r))return!1;p=q;q=x}}return!0};f.isConvexPoint=function(m,r,t,p){return 0<=r.minus(m).cross(t.minus(r)).dot(p)};f.isStrictlyConvexPoint=function(m,r,t,p){return r.minus(m).cross(t.minus(r)).dot(p)>=l};f.Shared=function(m){if(null!==m&&void 0!==m&&4!==m.length)throw Error("Expecting 4 element array");this.color=m};f.Shared.fromObject=function(m){return new f.Shared(m.color)};f.Shared.fromColor=
function(m){let r;if(1===arguments.length)r=arguments[0].slice();else{r=[];for(let t=0;t<arguments.length;t++)r.push(arguments[t])}if(3===r.length)r.push(1);else if(4!==r.length)throw Error("setColor expects either an array with 3 or 4 elements, or 3 or 4 parameters.");return new f.Shared(r)};f.Shared.prototype={getTag:function(){let m=this.tag;m||(this.tag=m=g());return m},getHash:function(){return this.color?this.color.join("/"):"null"}};f.defaultShared=new f.Shared(null);b.exports=f},{"../../api/solidFromSlices":14,
"../CAG":15,"../CAGFactories":16,"../CSGFactories":18,"../constants":24,"./Matrix4":27,"./Plane":30,"./Vector3":35,"./Vertex3":37}],33:[function(a,b,n){const d=a("./Vector2"),k=a("./Vertex2"),h=a("./Vertex3"),c=a("./Polygon3"),{getTag:l}=a("../constants"),g=function(e,f){if(!(e instanceof k))throw Error("Assertion failed");if(!(f instanceof k))throw Error("Assertion failed");this.vertex0=e;this.vertex1=f};g.fromObject=function(e){var f=k.fromObject(e.vertex0);e=k.fromObject(e.vertex1);return new g(f,
e)};g._fromFakePolygon=function(e){if(4>e.vertices.length)return null;var f=[];e=e.vertices.filter(function(r,t){return 0<r.pos.z?(f.push(t),!0):!1}).map(function(r){return new d(r.pos.x,r.pos.y)});if(2!==e.length)throw Error("Assertion failed: _fromFakePolygon: not enough points found");var m=f[1]-f[0];if(1===m||3===m)1===m&&e.reverse();else throw Error("Assertion failed: _fromFakePolygon: unknown index ordering");return new g(new k(e[0]),new k(e[1]))};g.prototype={toString:function(){return this.vertex0+
" -> "+this.vertex1},toPolygon3D:function(e,f){e=[new h(this.vertex0.pos.toVector3D(e)),new h(this.vertex1.pos.toVector3D(e)),new h(this.vertex1.pos.toVector3D(f)),new h(this.vertex0.pos.toVector3D(f))];return new c(e)},transform:function(e){var f=this.vertex0.pos.transform(e);e=this.vertex1.pos.transform(e);return new g(new k(f),new k(e))},flipped:function(){return new g(this.vertex1,this.vertex0)},direction:function(){return this.vertex1.pos.minus(this.vertex0.pos)},getTag:function(){var e=this.tag;
e||(this.tag=e=l());return e},lengthSquared:function(){let e=this.vertex1.pos.x-this.vertex0.pos.x,f=this.vertex1.pos.y-this.vertex0.pos.y;return e*e+f*f},length:function(){return Math.sqrt(this.lengthSquared())}};b.exports=g},{"../constants":24,"./Polygon3":32,"./Vector2":34,"./Vertex2":36,"./Vertex3":37}],34:[function(a,b,n){const {IsFloat:d}=a("../utils"),k=function(h,c){if(2===arguments.length)this._x=parseFloat(h),this._y=parseFloat(c);else{var l=!0;if(1===arguments.length)if("object"===typeof h)h instanceof
k?(this._x=h._x,this._y=h._y):h instanceof Array?(this._x=parseFloat(h[0]),this._y=parseFloat(h[1])):"x"in h&&"y"in h?(this._x=parseFloat(h.x),this._y=parseFloat(h.y)):l=!1;else{var g=parseFloat(h);this._y=this._x=g}else l=!1;l&&(d(this._x)&&d(this._y)||(l=!1));if(!l)throw Error("wrong arguments");}};k.fromAngle=function(h){return k.fromAngleRadians(h)};k.fromAngleDegrees=function(h){return k.fromAngleRadians(Math.PI*h/180)};k.fromAngleRadians=function(h){return k.Create(Math.cos(h),Math.sin(h))};
k.Create=function(h,c){var l=Object.create(k.prototype);l._x=h;l._y=c;return l};k.prototype={get x(){return this._x},get y(){return this._y},set x(h){throw Error("Vector2D is immutable");},set y(h){throw Error("Vector2D is immutable");},toVector3D:function(h){return new (a("./Vector3"))(this._x,this._y,h)},equals:function(h){return this._x===h._x&&this._y===h._y},clone:function(){return k.Create(this._x,this._y)},negated:function(){return k.Create(-this._x,-this._y)},plus:function(h){return k.Create(this._x+
h._x,this._y+h._y)},minus:function(h){return k.Create(this._x-h._x,this._y-h._y)},times:function(h){return k.Create(this._x*h,this._y*h)},dividedBy:function(h){return k.Create(this._x/h,this._y/h)},dot:function(h){return this._x*h._x+this._y*h._y},lerp:function(h,c){return this.plus(h.minus(this).times(c))},length:function(){return Math.sqrt(this.dot(this))},distanceTo:function(h){return this.minus(h).length()},distanceToSquared:function(h){return this.minus(h).lengthSquared()},lengthSquared:function(){return this.dot(this)},
unit:function(){return this.dividedBy(this.length())},cross:function(h){return this._x*h._y-this._y*h._x},normal:function(){return k.Create(this._y,-this._x)},multiply4x4:function(h){return h.leftMultiply1x2Vector(this)},transform:function(h){return h.leftMultiply1x2Vector(this)},angle:function(){return this.angleRadians()},angleDegrees:function(){return 180*this.angleRadians()/Math.PI},angleRadians:function(){return Math.atan2(this._y,this._x)},min:function(h){return k.Create(Math.min(this._x,h._x),
Math.min(this._y,h._y))},max:function(h){return k.Create(Math.max(this._x,h._x),Math.max(this._y,h._y))},toString:function(){return"("+this._x.toFixed(5)+", "+this._y.toFixed(5)+")"},abs:function(){return k.Create(Math.abs(this._x),Math.abs(this._y))}};b.exports=k},{"../utils":42,"./Vector3":35}],35:[function(a,b,n){const {IsFloat:d}=a("../utils"),k=a("./Vector2"),h=function(c,l,g){if(3===arguments.length)this._x=parseFloat(c),this._y=parseFloat(l),this._z=parseFloat(g);else if(2===arguments.length)this._x=
parseFloat(c),this._y=parseFloat(l),this._z=0;else{var e=!0;if(1===arguments.length)if("object"===typeof c)c instanceof h?(this._x=c._x,this._y=c._y,this._z=c._z):c instanceof k?(this._x=c._x,this._y=c._y,this._z=0):c instanceof Array?2>c.length||3<c.length?e=!1:(this._x=parseFloat(c[0]),this._y=parseFloat(c[1]),this._z=3===c.length?parseFloat(c[2]):0):"x"in c&&"y"in c?(this._x=parseFloat(c.x),this._y=parseFloat(c.y),this._z="z"in c?parseFloat(c.z):0):"_x"in c&&"_y"in c?(this._x=parseFloat(c._x),
this._y=parseFloat(c._y),this._z="_z"in c?parseFloat(c._z):0):e=!1;else{var f=parseFloat(c);this._z=this._y=this._x=f}else e=!1;if(e)d(this._x)&&d(this._y)&&d(this._z);else throw Error("wrong arguments");}};h.Create=function(c,l,g){var e=Object.create(h.prototype);e._x=c;e._y=l;e._z=g;return e};h.prototype={get x(){return this._x},get y(){return this._y},get z(){return this._z},set x(c){throw Error("Vector3D is immutable");},set y(c){throw Error("Vector3D is immutable");},set z(c){throw Error("Vector3D is immutable");
},clone:function(){return h.Create(this._x,this._y,this._z)},negated:function(){return h.Create(-this._x,-this._y,-this._z)},abs:function(){return h.Create(Math.abs(this._x),Math.abs(this._y),Math.abs(this._z))},plus:function(c){return h.Create(this._x+c._x,this._y+c._y,this._z+c._z)},minus:function(c){return h.Create(this._x-c._x,this._y-c._y,this._z-c._z)},times:function(c){return h.Create(this._x*c,this._y*c,this._z*c)},dividedBy:function(c){return h.Create(this._x/c,this._y/c,this._z/c)},dot:function(c){return this._x*
c._x+this._y*c._y+this._z*c._z},lerp:function(c,l){return this.plus(c.minus(this).times(l))},lengthSquared:function(){return this.dot(this)},length:function(){return Math.sqrt(this.lengthSquared())},unit:function(){return this.dividedBy(this.length())},cross:function(c){return h.Create(this._y*c._z-this._z*c._y,this._z*c._x-this._x*c._z,this._x*c._y-this._y*c._x)},distanceTo:function(c){return this.minus(c).length()},distanceToSquared:function(c){return this.minus(c).lengthSquared()},equals:function(c){return this._x===
c._x&&this._y===c._y&&this._z===c._z},multiply4x4:function(c){return c.leftMultiply1x3Vector(this)},transform:function(c){return c.leftMultiply1x3Vector(this)},toString:function(){return"("+this._x.toFixed(5)+", "+this._y.toFixed(5)+", "+this._z.toFixed(5)+")"},randomNonParallelVector:function(){var c=this.abs();return c._x<=c._y&&c._x<=c._z?h.Create(1,0,0):c._y<=c._x&&c._y<=c._z?h.Create(0,1,0):h.Create(0,0,1)},min:function(c){return h.Create(Math.min(this._x,c._x),Math.min(this._y,c._y),Math.min(this._z,
c._z))},max:function(c){return h.Create(Math.max(this._x,c._x),Math.max(this._y,c._y),Math.max(this._z,c._z))}};b.exports=h},{"../utils":42,"./Vector2":34}],36:[function(a,b,n){const d=a("./Vector2"),{getTag:k}=a("../constants"),h=function(c){this.pos=c};h.fromObject=function(c){return new h(new d(c.pos._x,c.pos._y))};h.prototype={toString:function(){return"("+this.pos.x.toFixed(5)+","+this.pos.y.toFixed(5)+")"},getTag:function(){var c=this.tag;c||(this.tag=c=k());return c}};b.exports=h},{"../constants":24,
"./Vector2":34}],37:[function(a,b,n){const d=a("./Vector3"),{getTag:k}=a("../constants"),h=function(c){this.pos=c};h.fromObject=function(c){c=new d(c.pos);return new h(c)};h.prototype={flipped:function(){return this},getTag:function(){var c=this.tag;c||(this.tag=c=k());return c},interpolate:function(c,l){c=this.pos.lerp(c.pos,l);return new h(c)},transform:function(c){c=this.pos.multiply4x4(c);return new h(c)},toString:function(){return this.pos.toString()}};b.exports=h},{"../constants":24,"./Vector3":35}],
38:[function(a,b,n){const {EPS:d}=a("../constants"),{solve2Linear:k}=a("../utils");b.exports={linesIntersect:function(h,c,l,g){if(c.equals(l)||g.equals(h)){if(g.minus(l).unit().plus(c.minus(h).unit()).length()<d)return!0}else{c=c.minus(h);g=g.minus(l);if(1E-9>Math.abs(c.cross(g)))return!1;h=k(-c.x,g.x,-c.y,g.y,h.x-l.x,h.y-l.y);if(1E-6<h[0]&&.999999>h[0]&&1E-5<h[1]&&.999999>h[1])return!0}return!1}}},{"../constants":24,"../utils":42}],39:[function(a,b,n){const {EPS:d}=a("../constants"),k=a("./OrthoNormalBasis"),
{interpolateBetween2DPointsForY:h,insertSorted:c,fnNumberSort:l}=a("../utils"),g=a("./Vertex3"),e=a("./Vector2"),f=a("./Line2"),m=a("./Polygon3");b.exports=function(r,t){var p=r.length;if(0<p){let F=r[0].plane,G=r[0].shared,I=new k(F),J=[],M=[],N={},K={};var q={},A=1/d*10;for(var x=0;x<p;x++){var D=r[x],u=[],v=D.vertices.length,y=-1;if(0<v){var C=void 0,w=void 0;for(var z=0;z<v;z++){var B=I.to2D(D.vertices[z].pos),E=Math.floor(B.y*A);let L;E in q?L=q[E]:E+1 in q?L=q[E+1]:E-1 in q?L=q[E-1]:(L=B.y,
q[E]=B.y);B=e.Create(B.x,L);u.push(B);B=B.y;if(0===z||B<C)C=B,y=z;if(0===z||B>w)w=B;B in K||(K[B]={});K[B][x]=!0}C>=w?(u=[],v=0,y=-1):(C in N||(N[C]=[]),N[C].push(x))}u.reverse();y=v-y-1;J.push(u);M.push(y)}r=[];for(var H in K)r.push(H);r.sort(l);H=[];A=[];for(p=0;p<r.length;p++){q=[];u=r[p];x=Number(u);D=K[u];for(v=0;v<H.length;++v)if(y=H[v],C=y.polygonindex,D[C]){C=J[C];w=C.length;B=y.leftvertexindex;for(z=y.rightvertexindex;;){E=B+1;E>=w&&(E=0);if(C[E].y!==x)break;B=E}E=z-1;0>E&&(E=w-1);C[E].y===
x&&(z=E);B!==y.leftvertexindex&&B===z?(H.splice(v,1),--v):(y.leftvertexindex=B,y.rightvertexindex=z,y.topleft=C[B],y.topright=C[z],B+=1,B>=w&&(B=0),y.bottomleft=C[B],--z,0>z&&(z=w-1),y.bottomright=C[z])}if(p>=r.length-1)H=[],D=null;else{D=Number(r[p+1]);let L=.5*(x+D);u=N[u];for(let O in u){v=u[O];y=J[v];C=y.length;for(w=z=M[v];;){B=w+1;B>=C&&(B=0);if(y[B].y!==x)break;if(B===z)break;w=B}for(;;){B=z-1;0>B&&(B=C-1);if(y[B].y!==x)break;if(B===w)break;z=B}B=w+1;B>=C&&(B=0);E=z-1;0>E&&(E=C-1);c(H,{polygonindex:v,
leftvertexindex:w,rightvertexindex:z,topleft:y[w],topright:y[z],bottomleft:y[B],bottomright:y[E]},function(P,Q){P=h(P.topleft,P.bottomleft,L);Q=h(Q.topleft,Q.bottomleft,L);return P>Q?1:P<Q?-1:0})}}for(let L in H)C=H[L],w=h(C.topleft,C.bottomleft,x),u=e.Create(w,x),w=h(C.topright,C.bottomright,x),v=e.Create(w,x),w=h(C.topleft,C.bottomleft,D),y=e.Create(w,D),w=h(C.topright,C.bottomright,D),C=e.Create(w,D),u={topleft:u,topright:v,bottomleft:y,bottomright:C,leftline:f.fromPoints(u,y),rightline:f.fromPoints(C,
v)},0<q.length&&(v=q[q.length-1],y=u.topleft.distanceTo(v.topright),C=u.bottomleft.distanceTo(v.bottomright),y<d&&C<d&&(u.topleft=v.topleft,u.leftline=v.leftline,u.bottomleft=v.bottomleft,q.splice(q.length-1,1))),q.push(u);if(0<p){x={};D={};for(u=0;u<q.length;u++)for(v=q[u],y=0;y<A.length;y++)if(!D[y]&&(C=A[y],C.bottomleft.distanceTo(v.topleft)<d&&C.bottomright.distanceTo(v.topright)<d)){D[y]=!0;w=v.leftline.direction().x-C.leftline.direction().x;E=v.rightline.direction().x-C.rightline.direction().x;
z=Math.abs(w)<d;E=(B=Math.abs(E)<d)||0<=E;(z||0<=w)&&E&&(v.outpolygon=C.outpolygon,v.leftlinecontinues=z,v.rightlinecontinues=B,x[y]=!0);break}for(D=0;D<A.length;D++)if(!x[D]){u=A[D];u.outpolygon.rightpoints.push(u.bottomright);u.bottomright.distanceTo(u.bottomleft)>d&&u.outpolygon.leftpoints.push(u.bottomleft);u.outpolygon.leftpoints.reverse();let L=[];u.outpolygon.rightpoints.concat(u.outpolygon.leftpoints).map(function(O){O=I.to3D(O);O=new g(O);L.push(O)});u=new m(L,G,F);t.push(u)}}for(A=0;A<q.length;A++)x=
q[A],x.outpolygon?(x.leftlinecontinues||x.outpolygon.leftpoints.push(x.topleft),x.rightlinecontinues||x.outpolygon.rightpoints.push(x.topright)):(x.outpolygon={leftpoints:[],rightpoints:[]},x.outpolygon.leftpoints.push(x.topleft),x.topleft.distanceTo(x.topright)>d&&x.outpolygon.rightpoints.push(x.topright));A=q}}}},{"../constants":24,"../utils":42,"./Line2":25,"./OrthoNormalBasis":28,"./Polygon3":32,"./Vector2":34,"./Vertex3":37}],40:[function(a,b,n){const d=a("./math/Matrix4"),k=a("./math/Vector3"),
h=a("./math/Plane");b.exports={addTransformationMethodsToPrototype:function(c){c.mirrored=function(l){return this.transform(d.mirroring(l))};c.mirroredX=function(){let l=new h(k.Create(1,0,0),0);return this.mirrored(l)};c.mirroredY=function(){let l=new h(k.Create(0,1,0),0);return this.mirrored(l)};c.mirroredZ=function(){let l=new h(k.Create(0,0,1),0);return this.mirrored(l)};c.translate=function(l){return this.transform(d.translation(l))};c.scale=function(l){return this.transform(d.scaling(l))};c.rotateX=
function(l){return this.transform(d.rotationX(l))};c.rotateY=function(l){return this.transform(d.rotationY(l))};c.rotateZ=function(l){return this.transform(d.rotationZ(l))};c.rotate=function(l,g,e){return this.transform(d.rotation(l,g,e))};c.rotateEulerAngles=function(l,g,e,f){f=f||[0,0,0];l=d.rotationZ(l);g=d.rotationX(g);e=d.rotationZ(e);f=d.translation(new k(f));return this.transform(e.multiply(g).multiply(l).multiply(f))}},addCenteringToPrototype:function(c,l){c.center=function(g){g=Array.prototype.map.call(arguments,
function(f){return f});g.length||(g=l.slice());let e=this.getBounds();return this.translate(l.map(function(f){return-1<g.indexOf(f)?-(e[0][f]+e[1][f])/2:0}))}}}},{"./math/Matrix4":27,"./math/Plane":30,"./math/Vector3":35}],41:[function(a,b,n){const {_CSGDEBUG:d,EPS:k}=a("./constants"),h=a("./math/Vertex3"),c=a("./math/Polygon3"),l=function(){this.parent=null;this.children=[];this.polygon=null;this.removed=!1};l.prototype={addPolygons:function(e){if(!this.isRootNode())throw Error("Assertion failed");
let f=this;e.map(function(m){f.addChild(m)})},remove:function(){if(!this.removed){this.removed=!0;if(d){if(this.isRootNode())throw Error("Assertion failed");if(this.children.length)throw Error("Assertion failed");}let e=this.parent.children,f=e.indexOf(this);if(0>f)throw Error("Assertion failed");e.splice(f,1);this.parent.recursivelyInvalidatePolygon()}},isRemoved:function(){return this.removed},isRootNode:function(){return!this.parent},invert:function(){if(!this.isRootNode())throw Error("Assertion failed");
this.invertSub()},getPolygon:function(){if(!this.polygon)throw Error("Assertion failed");return this.polygon},getPolygons:function(e){let f=[this],m=[f],r,t,p,q;for(r=0;r<m.length;++r)for(f=m[r],t=0,p=f.length;t<p;t++)q=f[t],q.polygon?e.push(q.polygon):m.push(q.children)},splitByPlane:function(e,f,m,r,t){if(this.children.length){let p=[this.children],q,A,x,D,u;for(q=0;q<p.length;q++)for(u=p[q],A=0,x=u.length;A<x;A++)D=u[A],D.children.length?p.push(D.children):D._splitByPlane(e,f,m,r,t)}else this._splitByPlane(e,
f,m,r,t)},_splitByPlane:function(e,f,m,r,t){var p=this.polygon;if(p){var q=p.boundingSphere(),A=q[1]+k;q=e.normal.dot(q[0])-e.w;if(q>A)r.push(this);else if(q<-A)t.push(this);else{A={type:null,front:null,back:null};var x=e.normal;q=p.vertices;var D=q.length;if(p.plane.equals(e))A.type=0;else{var u=e.w,v=!1,y=!1,C=[],w=-k;for(var z=0;z<D;z++){var B=x.dot(q[z].pos)-u;C.push(0>B);B>k&&(v=!0);B<w&&(y=!0)}if(v||y)if(y)if(v){A.type=4;x=[];u=[];v=C[0];for(y=0;y<D;y++)w=q[y],B=y+1,B>=D&&(B=0),z=C[B],v===z?
v?u.push(w):x.push(w):(B=e.splitLineBetweenPoints(w.pos,q[B].pos),B=new h(B),v?(u.push(w),u.push(B),x.push(B)):(x.push(w),x.push(B),u.push(B))),v=z;e=k*k;if(3<=u.length)for(q=u[u.length-1],D=0;D<u.length;D++)C=u[D],C.pos.distanceToSquared(q.pos)<e&&(u.splice(D,1),D--),q=C;if(3<=x.length)for(q=x[x.length-1],D=0;D<x.length;D++)C=x[D],C.pos.distanceToSquared(q.pos)<e&&(x.splice(D,1),D--),q=C;3<=x.length&&(A.front=new c(x,p.shared,p.plane));3<=u.length&&(A.back=new c(u,p.shared,p.plane))}else A.type=
3;else A.type=2;else p=x.dot(p.plane.normal),A.type=0<=p?0:1}p=A;switch(p.type){case 0:f.push(this);break;case 1:m.push(this);break;case 2:r.push(this);break;case 3:t.push(this);break;case 4:p.front&&(f=this.addChild(p.front),r.push(f)),p.back&&(r=this.addChild(p.back),t.push(r))}}}},addChild:function(e){let f=new l;f.parent=this;f.polygon=e;this.children.push(f);return f},invertSub:function(){let e=[this],f=[e],m,r,t,p;for(m=0;m<f.length;m++)for(e=f[m],r=0,t=e.length;r<t;r++)p=e[r],p.polygon&&(p.polygon=
p.polygon.flipped()),f.push(p.children)},recursivelyInvalidatePolygon:function(){let e=this;for(;e.polygon;)e.polygon=null,e.parent&&(e=e.parent)}};a=function(e){this.polygonTree=new l;this.rootnode=new g(null);e&&this.addPolygons(e)};a.prototype={invert:function(){this.polygonTree.invert();this.rootnode.invert()},clipTo:function(e,f){this.rootnode.clipTo(e,!!f)},allPolygons:function(){let e=[];this.polygonTree.getPolygons(e);return e},addPolygons:function(e){let f=this;e=e.map(function(m){return f.polygonTree.addChild(m)});
this.rootnode.addPolygonTreeNodes(e)}};const g=function(e){this.back=this.front=this.plane=null;this.polygontreenodes=[];this.parent=e};g.prototype={invert:function(){let e=[this],f;for(let m=0;m<e.length;m++){f=e[m];f.plane&&(f.plane=f.plane.flipped());f.front&&e.push(f.front);f.back&&e.push(f.back);let r=f.front;f.front=f.back;f.back=r}},clipPolygons:function(e,f){var m={node:this,polygontreenodes:e};let r=[];do{var t=m.node;e=m.polygontreenodes;if(t.plane){m=[];let p=[],q=f?m:p,A=t.plane,x=e.length;
for(let D=0;D<x;D++){let u=e[D];u.isRemoved()||u.splitByPlane(A,q,m,p,m)}t.front&&0<p.length&&r.push({node:t.front,polygontreenodes:p});e=m.length;if(t.back&&0<e)r.push({node:t.back,polygontreenodes:m});else for(t=0;t<e;t++)m[t].remove()}m=r.pop()}while("undefined"!==typeof m)},clipTo:function(e,f){let m=this,r=[];do 0<m.polygontreenodes.length&&e.rootnode.clipPolygons(m.polygontreenodes,f),m.front&&r.push(m.front),m.back&&r.push(m.back),m=r.pop();while("undefined"!==typeof m)},addPolygonTreeNodes:function(e){e=
{node:this,polygontreenodes:e};let f,m=[];do{f=e.node;e=e.polygontreenodes;if(0===e.length){e=m.pop();continue}let t=f;if(!f.plane){var r=e[0].getPolygon().plane;f.plane=r}r=[];let p=[];for(let q=0,A=e.length;q<A;++q)e[q].splitByPlane(t.plane,t.polygontreenodes,p,r,p);0<r.length&&(f.front||(f.front=new g(f)),m.push({node:f.front,polygontreenodes:r}));0<p.length&&(f.back||(f.back=new g(f)),m.push({node:f.back,polygontreenodes:p}));e=m.pop()}while("undefined"!==typeof e)},getParentPlaneNormals:function(e,
f){0<f&&this.parent&&(e.push(this.parent.plane.normal),this.parent.getParentPlaneNormals(e,f-1))}};b.exports=a},{"./constants":24,"./math/Polygon3":32,"./math/Vertex3":37}],42:[function(a,b,n){b.exports={fnNumberSort:function(d,k){return d-k},fnSortByIndex:function(d,k){return d.index-k.index},IsFloat:function(d){return!isNaN(d)||Infinity===d||-Infinity===d},solve2Linear:function(d,k,h,c,l,g){let e=1/(d*c-k*h);return[(l*c-k*g)*e,(-l*h+d*g)*e]},insertSorted:function(d,k,h){let c=0,l=d.length;for(;l>
c;){let g=Math.floor((c+l)/2);0<h(k,d[g])?c=g+1:l=g}d.splice(c,0,k)},interpolateBetween2DPointsForY:function(d,k,h){h-=d.y;let c=k.y-d.y;0>c&&(h=-h,c=-c);return d.x+(0>=h?0:h>=c?1:1E-10>c?.5:h/c)*(k.x-d.x)},isCAG:function(d){return"sides"in d&&"length"in d.sides?!0:!1},isCSG:function(d){return"polygons"in d&&"length"in d.polygons?!0:!1}}},{}],43:[function(a,b,n){const d=a("../math/Vector2");b.exports={area:function(k){let h=0;k.sides.map(function(c){h+=c.vertex0.pos.cross(c.vertex1.pos)});return h*=
.5},getBounds:function(k){let h,c=h=0===k.sides.length?new d(0,0):k.sides[0].vertex0.pos;k.sides.map(function(l){h=h.min(l.vertex0.pos);h=h.min(l.vertex1.pos);c=c.max(l.vertex0.pos);c=c.max(l.vertex1.pos)});return[h,c]}}},{"../math/Vector2":34}],44:[function(a,b,n){const {areaEPS:d}=a("../constants"),{linesIntersect:k}=a("../math/lineUtils"),h=function(c,l){let g=null,e=null,f=!1;c.sides.forEach(m=>{g=m.vertex0.pos;e=m.vertex1.pos;h.c1(l,g,e)&&h.c2(l,g,e)&&(f=!f)});return f};h.c1=(c,l,g)=>l.y>c.y!==
g.y>c.y;h.c2=(c,l,g)=>c.x<(g.x-l.x)*(c.y-l.y)/(g.y-l.y)+l.x;b.exports={isCAGValid:function(c){let l=[];c.isSelfIntersecting(!0)&&l.push("Self intersects");let g={};c.sides.map(function(e){function f(m){m=m.x+" "+m.y;m in g||(g[m]=0);g[m]++}f(e.vertex0.pos);f(e.vertex1.pos)});for(let e in g){let f=g[e];f&1&&l.push("Uneven number of sides ("+f+") for point "+e)}c=c.area();c<d&&l.push("Area is "+c);if(0<l.length){let e="";l.map(function(f){e+=f+"\n"});throw Error(e);}},isSelfIntersecting:function(c,
l){let g=c.sides.length;for(let e=0;e<g;e++){let f=c.sides[e];for(let m=e+1;m<g;m++){let r=c.sides[m];if(k(f.vertex0.pos,f.vertex1.pos,r.vertex0.pos,r.vertex1.pos))return l&&(console.log("side "+e+": "+f),console.log("side "+m+": "+r)),!0}}return!1},hasPointInside:h,contains:function(c,l){for(let g=0,e=l.sides.length;g<e;g++)if(!h(c,l.sides[g].vertex0.pos))return!1;return!0}}},{"../constants":24,"../math/lineUtils":38}],45:[function(a,b,n){const {EPS:d}=a("../constants"),k=a("../FuzzyFactory3d"),
h=a("../FuzzyFactory2d"),{fromPolygons:c}=a("../CSGFactories"),{fromSides:l}=a("../CAGFactories"),g=function(f,m){let r=[];m.polygons.forEach(function(t){t=f.getPolygon(t);3<=t.vertices.length&&r.push(t)});return c(r)},e=function(f,m){m=m.sides.map(function(r){return f.getSide(r)}).filter(function(r){return r.length()>d});return l(m)};b.exports=function(f,m){if(f.isCanonicalized)return f;if("sides"in f)return f.isCanonicalized||(m=new h,f=e(m,f),f.isCanonicalized=!0),f;f.isCanonicalized||(m=new k,
m=g(m,f),m.isCanonicalized=!0,m.isRetesselated=f.isRetesselated,m.properties=f.properties,f=m);return f}},{"../CAGFactories":16,"../CSGFactories":18,"../FuzzyFactory2d":20,"../FuzzyFactory3d":21,"../constants":24}],46:[function(a,b,n){const d=a("../math/Vector3");b.exports={bounds:function(k){if(!k.cachedBoundingBox){let h=new d(0,0,0),c=new d(0,0,0),l=k.polygons,g=l.length;for(let e=0;e<g;e++){let f=l[e].boundingBox();0===e?(h=f[0],c=f[1]):(h=h.min(f[0]),c=c.max(f[1]))}k.cachedBoundingBox=[h,c]}return k.cachedBoundingBox},
volume:function(k){k=k.toTriangles().map(function(h){return h.getTetraFeatures(["volume"])});console.log("volume",k)},area:function(k){k=k.toTriangles().map(function(h){return h.getTetraFeatures(["area"])});console.log("area",k)}}},{"../math/Vector3":35}],47:[function(a,b,n){const d=a("../CAG"),{EPS:k}=a("../constants");b.exports={projectToOrthoNormalBasis:function(h,c){let l=[];h.polygons.filter(function(g){return g.plane.normal.minus(c.plane.normal).lengthSquared()<k*k}).map(function(g){g=g.projectToOrthoNormalBasis(c);
0<g.sides.length&&l.push(g)});return(new d).union(l)}}},{"../CAG":15,"../constants":24}],48:[function(a,b,n){function d(g,e,f,m,r,t){let p=m.getTag(),q=r.getTag();if(p===q)throw Error("Assertion failed");let A=p+"/"+q;if(q+"/"+p in g)return k(g,e,f,r,m,null),null;m={vertex0:m,vertex1:r,polygonindex:t};A in g?g[A].push(m):g[A]=[m];p in e?e[p].push(A):e[p]=[A];q in f?f[q].push(A):f[q]=[A];return A}function k(g,e,f,m,r,t){let p=m.getTag(),q=r.getTag(),A=p+"/"+q;if(!(A in g))throw Error("Assertion failed");
let x=-1,D=g[A];for(let u=0;u<D.length;u++){let v=D[u];if(v.vertex0===m&&v.vertex1===r&&(null===t||v.polygonindex===t)){x=u;break}}if(0>x)throw Error("Assertion failed");D.splice(x,1);0===D.length&&delete g[A];x=e[p].indexOf(A);if(0>x)throw Error("Assertion failed");e[p].splice(x,1);0===e[p].length&&delete e[p];x=f[q].indexOf(A);if(0>x)throw Error("Assertion failed");f[q].splice(x,1);0===f[q].length&&delete f[q]}const {EPS:h}=a("../constants"),c=a("../math/Polygon3"),l=a("../math/Plane");b.exports=
function(g,e){e=e.canonicalized();let f={};for(var m=0;m<e.polygons.length;m++){var r=e.polygons[m],t=r.vertices.length;if(3<=t){var p=r.vertices[0],q=p.getTag();for(var A=0;A<t;A++){var x=A+1;x===t&&(x=0);x=r.vertices[x];var D=x.getTag(),u=q+"/"+D;q=D+"/"+q;q in f?(p=f[q],p.splice(-1,1),0===p.length&&delete f[q]):(p={vertex0:p,vertex1:x,polygonindex:m},u in f?f[u].push(p):f[u]=[p]);p=x;q=D}}}let v={},y={};m={};r=!0;for(let H in f)r=!1,m[H]=!0,f[H].map(function(F){let G=F.vertex0.getTag();F=F.vertex1.getTag();
G in v?v[G].push(H):v[G]=[H];F in y?y[F].push(H):y[F]=[H]});if(!r){for(r=e.polygons.slice(0);;){t=!0;for(let H in f)t=!1,m[H]=!0;if(t)break;for(p=!1;;){t=null;for(let H in m){t=H;break}if(null===t)break;u=!0;if(t in f){A=f[t];if(0===A.length)throw Error("Assertion failed");A=A[0];for(q=0;2>q;q++){var C=0===q?A.vertex0:A.vertex1;x=0===q?A.vertex1:A.vertex0;var w=C.getTag();let H=x.getTag(),F=[];0===q?w in y&&(F=y[w]):w in v&&(F=v[w]);for(let G=0;G<F.length;G++){D=f[F[G]][0];var z=0===q?D.vertex0:D.vertex1,
B=0===q?D.vertex1:D.vertex0,E=z.getTag();if(B.getTag()!==w)throw Error("Assertion failed");if(E===H){k(f,v,y,C,x,null);k(f,v,y,x,C,null);u=!1;q=2;p=!0;break}else{B=C.pos;E=x.pos;z=z.pos.minus(B);let I=E.minus(B).dot(z)/z.dot(z);if(0<I&&1>I&&B.plus(z.times(I)).distanceToSquared(E)<h*h){p=D.polygonindex;u=r[p];C=D.vertex1.getTag();q=-1;for(w=0;w<u.vertices.length;w++)if(u.vertices[w].getTag()===C){q=w;break}if(0>q)throw Error("Assertion failed");C=u.vertices.slice(0);C.splice(q,0,x);let J=new c(C,u.shared);
if(isNaN(J.plane.w)){let M=!1,N=function(K){J.vertices.forEach(function(L){M||K(L)})};N(function(K){N(function(L){N(function(O){J.plane=l.fromPoints(K.pos,L.pos,O.pos);isNaN(J.plane.w)||(M=!0)})})})}r[p]=J;k(f,v,y,D.vertex0,D.vertex1,p);u=d(f,v,y,D.vertex0,x,p);x=d(f,v,y,x,D.vertex1,p);null!==u&&(m[u]=!0);null!==x&&(m[x]=!0);u=!1;q=2;p=!0;break}}}}}u&&delete m[t]}if(!p)break}g=g(r);g.properties=e.properties;g.isCanonicalized=!0;g.isRetesselated=!0;e=g}return e}},{"../constants":24,"../math/Plane":30,
"../math/Polygon3":32}],49:[function(a,b,n){const d=a("../FuzzyFactory3d"),k=a("../math/reTesselateCoplanarPolygons"),{fromPolygons:h}=a("../CSGFactories");b.exports=function(c){if(c.isRetesselated)return c;let l={},g=c.isCanonicalized,e=new d;c.polygons.map(function(m){var r=m.plane;let t=m.shared;g||(r=e.getPlane(r),t=e.getPolygonShared(t));r=r.getTag()+"/"+t.getTag();r in l?l[r].push(m):l[r]=[m]});var f=[];for(let m in l){let r=l[m];if(2>r.length)f=f.concat(r);else{let t=[];k(r,t);f=f.concat(t)}}f=
h(f);f.isRetesselated=!0;f.properties=c.properties;return f}},{"../CSGFactories":18,"../FuzzyFactory3d":21,"../math/reTesselateCoplanarPolygons":39}],50:[function(a,b,n){b.exports=function(d){return d?d.constructor!==Array?[d]:d:[]}},{}]},{},[1])(1)});var BinaryFileWriter=function(a){this.offset=0;this.buffer=new ArrayBuffer(a);this.dataView=new DataView(this.buffer)};BinaryFileWriter.prototype.toBlob=function(){return new Blob([this.dataView],{type:"application/octet-binary"})};BinaryFileWriter.prototype.writeUint32=function(a){this.dataView.setUint32(this.offset,a,!0);this.offset+=4};BinaryFileWriter.prototype.writeUint16=function(a){this.dataView.setUint16(this.offset,a,!0);this.offset+=2};
BinaryFileWriter.prototype.writeUint8=function(a){this.dataView.setUint8(this.offset,a,!0);this.offset+=1};BinaryFileWriter.prototype.writeFloat32=function(a){this.dataView.setFloat32(this.offset,a,!0);this.offset+=4};BinaryFileWriter.prototype.writeVec3=function(a){this.writeFloat32(a.x);this.writeFloat32(a.y);this.writeFloat32(a.z)};function SphereData(a,b){this.pos=a;this.radius=b}function CylinderData(a,b,n){this.pos1=a;this.pos2=b;this.radius=n}function TriangleData(a){this.trianglePoints=a}
function generateCsgMeshFrom(a,b,n){let d=null;0<n.length&&printUiSettings.exportTriangles&&(d=cindyTrianglePointsToIndexedMesh(n[0].trianglePoints,.01),printUiSettings.extrudeSurfaces&&(d=printUiSettings.smoothEdges?createOpenSurfaceShellMeshWithNormalsAndRoundEdges(d,printUiSettings.extrusionRadius):createOpenSurfaceShellMeshWithNormals(d,printUiSettings.extrusionRadius)));setCsgResolutionSphere(printUiSettings.sphereQuality);setCsgResolutionCylinder(printUiSettings.cylinderQuality);let k=[];for(var h=
0;h<a.length;h++){var c=a[h].radius;0<n.length&&printUiSettings.extrudeSurfaces&&printUiSettings.exportTriangles&&(c+=1*printUiSettings.extrusionRadius,c*=printUiSettings.radiusFactor);k.push(createCSGSphere(a[h].pos,c))}for(h=0;h<b.length;h++)c=b[h].radius,0<n.length&&printUiSettings.extrudeSurfaces&&printUiSettings.exportTriangles&&(c+=1*printUiSettings.extrusionRadius,c*=printUiSettings.radiusFactor),k.push(createCSGCylinder(b[h].pos1,b[h].pos2,c));0<n.length&&printUiSettings.exportTriangles?0==
a.length&&0==b.length?a=d:(k=[convertTriangleMeshToCSGPolyhedron(d)].concat(k),a=mergeObjects(k)):a=mergeObjects(k);a.scale(printUiSettings.modelScale);return a};function trianglePointsToIndexedMesh(a,b,n){void 0===n&&(n=1E-5);let d=new TriangleMesh;var k=[];for(var h=0;h<a.length;h++)k.push(new IndexedPoint(a[h]));k=new KDTree;h=0;for(let c=0;c<a.length;c++){let l=a[c],g=new IndexedPoint(l),e=k.findCloseIndexedPoint(g,n);null!=e?d.indices.push(e.index):(g.index=h,k.addPoint(g),d.indices.push(h),d.vertices.push(l),void 0!==b&&d.normals.push(b[c]),h++)}return d}
function trianglePointsToIndexedMeshON2(a,b){void 0===b&&(b=1E-5);let n=new TriangleMesh;for(let h=0;h<a.length;h++){let c=-1;for(let l=0;l<n.vertices.length;l++){var d=a[h],k=n.vertices[l];if(Math.abs(d.x-k.x)<b&&Math.abs(d.y-k.y)<b&&Math.abs(d.z-k.z)<b){c=l;break}}0>c?(n.indices.push(n.vertices.length),n.vertices.push(a[h])):n.indices.push(c)}return n}function flipVertexListOrientation(a){for(let b=0;b<a.length;b+=3){let n=a[b];a[b]=a[b+2];a[b+2]=n}};function IndexedPoint(a){this.position=a;this.index=0}function KDNode(a,b){this.axis=a;this.point=b;this.right=this.left=null}function AxisAlignedBox(a,b){this.min=a;this.max=b}AxisAlignedBox.prototype.contains=function(a){return a.x>=this.min.x&&a.y>=this.min.y&&a.z>=this.min.z&&a.x<=this.max.x&&a.y<=this.max.y&&a.z<=this.max.z};function KDTree(){this.root=null}KDTree.prototype.build=function(a){this.root=this._build(a,0)};
KDTree.prototype._build=function(a,b){if(0==a.length)return null;let n=b%3;a.sort((c,l)=>0==n?c.position.x-l.position.x:1==n?c.position.y-l.position.y:c.position.z-l.position.z);let d=Math.floor(a.length/2),k=a.slice(0,d),h=a.slice(d+1,a.length);a=new KDNode(n,a[d]);a.left=this._build(k,b+1);a.right=this._build(h,b+1);return a};KDTree.prototype.addPoint=function(a){this.root=this._addPoint(this.root,0,a)};
KDTree.prototype._addPoint=function(a,b,n){let d=b%3;if(null==a)return new KDNode(d,n);0==d&&n.position.x<a.point.position.x||1==d&&n.position.y<a.point.position.y||2==d&&n.position.z<a.point.position.z?a.left=this._addPoint(a.left,b+1,n):a.right=this._addPoint(a.right,b+1,n);return a};KDTree.prototype.findPointsInAxisAlignedBox=function(a){let b=[];this._findPointsInAxisAlignedBox(a,this.root,b);return b};
KDTree.prototype._findPointsInAxisAlignedBox=function(a,b,n){null!=b&&(a.contains(b.point.position)&&n.push(b.point),(0==b.axis&&a.min.x<=b.point.position.x||1==b.axis&&a.min.y<=b.point.position.y||2==b.axis&&a.min.z<=b.point.position.z)&&this._findPointsInAxisAlignedBox(a,b.left,n),(0==b.axis&&a.max.x>=b.point.position.x||1==b.axis&&a.max.y>=b.point.position.y||2==b.axis&&a.max.z>=b.point.position.z)&&this._findPointsInAxisAlignedBox(a,b.right,n))};
KDTree.prototype.findCloseIndexedPoint=function(a,b){var n=new vec3(a.position.x-b,a.position.y-b,a.position.z-b),d=new vec3(a.position.x+b,a.position.y+b,a.position.z+b);n=new AxisAlignedBox(n,d);n=this.findPointsInAxisAlignedBox(n);d=null;let k=1E10;for(let h=0;h<n.length;h++){let c=n[h],l=vec3length(vec3sub(a.position,c.position));l<k&&l<b&&c!==a&&(d=c,k=l)}return d};function GraphNode(){this.neighbors=[];this.edges=[];this.visited=!1}function GraphEdge(a,b){this.connectedNodes=[a,b];this.meshEdgeCount=1}function MeshGraph(a,b=!0){this.nodes=[];this.edges=[];this.orderIndices=b;for(b=0;b<a.vertices.length;b++)this.nodes.push(new GraphNode);for(b=0;b<a.indices.length;b+=3){let n=a.indices[b],d=a.indices[b+1],k=a.indices[b+2];this.addEdge(n,d);this.addEdge(d,k);this.addEdge(k,n)}}
MeshGraph.prototype.addEdge=function(a,b){if(-1!==this.nodes[a].neighbors.indexOf(b))for(var n=0;n<this.nodes[a].edges.length;n++)-1!==this.nodes[a].edges[n].connectedNodes.indexOf(b)&&(this.nodes[a].edges[n].meshEdgeCount+=1);else a>b&&this.orderIndices&&(n=a,a=b,b=n),n=new GraphEdge(a,b),this.nodes[a].neighbors.push(b),this.nodes[b].neighbors.push(a),this.nodes[a].edges.push(n),this.nodes[b].edges.push(n),this.edges.push(n)};
MeshGraph.prototype.hasNoHoles=function(){for(let a=0;a<this.edges.length;a++)if(2!=this.edges[a].meshEdgeCount)return console.log(this.edges[a]),!1;return!0};
MeshGraph.prototype.isFullyConnected=function(){for(var a=0;a<this.nodes.length;a++)this.nodes[a].visited=!1;a=[0];let b=new Set;for(;0<a.length;){var n=a.shift();let d=this.nodes[n];d.visited=!0;b.add(n);for(n=0;n<d.neighbors.length;n++){let k=d.neighbors[n];b.has(k)||-1===!a.indexOf(k)||a.push(k)}}for(a=0;a<this.nodes.length;a++)if(!this.nodes[a].visited)return!1;return!0};var PrintUiSettings=function(){this.exportTriangles=this.exportCylinders=this.exportSpheres=!0;this.cylinderQuality=this.sphereQuality=16;this.radiusFactor=this.lineSubdivisions=1;this.modelScale=10;this.extrudeSurfaces=!0;this.extrusionRadius=.1;this.smoothEdges=!0;this.clipToSphere=!1;this.isoOffset=.01;this.gridResolution=50;this.reconstructionAlgorithm=reconstructionAlgorithms.SNAPMC;this.gamma=.1};const reconstructionAlgorithms={SNAPMC:"snapMC",MARCHINGCUBES:"marchingCubes"};
var printUiSettings=new PrintUiSettings;function cindyPrintUpdateExportSpheres(){let a=document.getElementById("exportSpheres");printUiSettings.exportSpheres=a.checked}function cindyPrintUpdateExportCylinders(){let a=document.getElementById("exportCylinders");printUiSettings.exportCylinders=a.checked}function cindyPrintUpdateExportTriangles(){let a=document.getElementById("exportTriangles");printUiSettings.exportTriangles=a.checked}
function cindyPrintUpdateSphereQuality(){let a=document.getElementById("sphereQuality");printUiSettings.sphereQuality=1*a.value}function cindyPrintUpdateCylinderQuality(){let a=document.getElementById("cylinderQuality");printUiSettings.cylinderQuality=1*a.value}function cindyPrintUpdateLineSubdivisions(){let a=document.getElementById("lineSubdivisions");printUiSettings.lineSubdivisions=a.value/50}
function cindyPrintUpdateRadiusFactor(){let a=document.getElementById("radiusFactor");printUiSettings.radiusFactor=a.value/50}function cindyPrintUpdateModelScale(){let a=document.getElementById("modelScale");printUiSettings.modelScale=1*a.value}function cindyPrintUpdateExtrudeSurfaces(){let a=document.getElementById("extrudeSurfaces");printUiSettings.extrudeSurfaces=a.checked}
function cindyPrintUpdateExtrusionRadius(){let a=document.getElementById("extrusionRadius");printUiSettings.extrusionRadius=a.value/100}function cindyPrintUpdateSmoothEdges(){let a=document.getElementById("smoothEdges");printUiSettings.smoothEdges=a.checked}function cindyPrintUpdateClipToSphere(){let a=document.getElementById("clipToSphere");printUiSettings.clipToSphere=a.checked}
function cindyPrintUpdateIsoOffset(){let a=document.getElementById("isoOffset");printUiSettings.isoOffset=a.value/100;self.cdy.evokeCS("F(p) := (fun(p.x, p.y, p.z) - "+printUiSettings.isoOffset+");")}function cindyPrintUpdateGridResolution(){let a=document.getElementById("gridResolution");printUiSettings.gridResolution=1*a.value}
function cindyPrintUpdateReconstructionAlgorithm(){switch(document.getElementById("reconstructionAlgorithm").value){case "marchingCubes":printUiSettings.reconstructionAlgorithm=reconstructionAlgorithms.MARCHINGCUBES;break;case "snapmc0.0":printUiSettings.reconstructionAlgorithm=reconstructionAlgorithms.SNAPMC;printUiSettings.gamma=0;break;case "snapmc0.1":printUiSettings.reconstructionAlgorithm=reconstructionAlgorithms.SNAPMC;printUiSettings.gamma=.1;break;case "snapmc0.2":printUiSettings.reconstructionAlgorithm=
reconstructionAlgorithms.SNAPMC;printUiSettings.gamma=.2;break;case "snapmc0.3":printUiSettings.reconstructionAlgorithm=reconstructionAlgorithms.SNAPMC;printUiSettings.gamma=.3;break;case "snapmc0.4":printUiSettings.reconstructionAlgorithm=reconstructionAlgorithms.SNAPMC;printUiSettings.gamma=.4;break;case "snapmc0.5":printUiSettings.reconstructionAlgorithm=reconstructionAlgorithms.SNAPMC,printUiSettings.gamma=.5}}self.cindyPrintUpdateExportSpheres=cindyPrintUpdateExportSpheres;
self.cindyPrintUpdateExportCylinders=cindyPrintUpdateExportCylinders;self.cindyPrintUpdateExportTriangles=cindyPrintUpdateExportTriangles;self.cindyPrintUpdateSphereQuality=cindyPrintUpdateSphereQuality;self.cindyPrintUpdateCylinderQuality=cindyPrintUpdateCylinderQuality;self.cindyPrintUpdateLineSubdivisions=cindyPrintUpdateLineSubdivisions;self.cindyPrintUpdateRadiusFactor=cindyPrintUpdateRadiusFactor;self.cindyPrintUpdateModelScale=cindyPrintUpdateModelScale;
self.cindyPrintUpdateExtrudeSurfaces=cindyPrintUpdateExtrudeSurfaces;self.cindyPrintUpdateExtrusionRadius=cindyPrintUpdateExtrusionRadius;self.cindyPrintUpdateSmoothEdges=cindyPrintUpdateSmoothEdges;self.cindyPrintUpdateClipToSphere=cindyPrintUpdateClipToSphere;self.cindyPrintUpdateIsoOffset=cindyPrintUpdateIsoOffset;self.cindyPrintUpdateGridResolution=cindyPrintUpdateGridResolution;self.cindyPrintUpdateReconstructionAlgorithm=cindyPrintUpdateReconstructionAlgorithm;
function uiStringCindy3D(a){let b=CindyJS.getBaseDir()+"images/cindyprint/";return'<input type="checkbox" id="exportSpheres" onclick="cindyPrintUpdateExportSpheres()" checked> Spheres <image class=\'smallimg\' src=\''+b+'SphereHighRes.png\'/><input type="checkbox" id="exportCylinders" onclick="cindyPrintUpdateExportCylinders()" checked> Cylinders <image class=\'smallimg\' src=\''+b+'CylinderHighRes.png\'/><input type="checkbox" id="exportTriangles" onclick="cindyPrintUpdateExportTriangles()" checked> Triangles <image class=\'smallimg\' src=\''+
b+"Triangles.png'/><br><table> <tr><th>Sphere quality</th><th><image src='"+b+'SphereLowRes.png\'/></th><th><div class="slidecontainer"><input type="range" min="8" max="64" value="16" class="slider" id="sphereQuality" oninput="cindyPrintUpdateSphereQuality()"></th><th><image src=\''+b+"SphereHighRes.png'/></th></tr> <tr><th>Cylinder quality</th><th><image src='"+b+'CylinderLowRes.png\'/></th><th><div class="slidecontainer"><input type="range" min="8" max="64" value="16" class="slider" id="cylinderQuality" oninput="cindyPrintUpdateCylinderQuality()"></th><th><image src=\''+
b+"CylinderHighRes.png'/></th></tr> <tr><th>Radius factor</th><th><image src='"+b+'SphereSmall.png\'/></th><th><div class="slidecontainer"><input type="range" min="1" max="100" value="50" class="slider" id="radiusFactor" oninput="cindyPrintUpdateRadiusFactor()"></th><th><image src=\''+b+"SphereHighRes.png'/></th></tr> <tr><th>Model scale</th><th><image src='"+b+'SizeSmall.png\'/></th><th><div class="slidecontainer"><input type="range" min="1" max="100" value="10" class="slider" id="modelScale" oninput="cindyPrintUpdateModelScale()"></th><th><image src=\''+
b+'SizeLarge.png\'/></th></tr></table><input type="checkbox" id="extrudeSurfaces" onclick="cindyPrintUpdateExtrudeSurfaces()" checked> Extrude the triangle surfaces<table> <tr><th>Extrusion radius</th><th><image src=\''+b+'ExtrudeSurfaceSmall.png\'/></th><th><div class="slidecontainer"><input type="range" min="0" max="100" value="10" class="slider" id="extrusionRadius" oninput="cindyPrintUpdateExtrusionRadius()"></th><th><image src=\''+b+'ExtrudeSurfaceLarge.png\'/></th></tr></table><input type="checkbox" id="smoothEdges" onclick="cindyPrintUpdateSmoothEdges()" checked> Smooth extrusion edges<br><button onclick="cdy.evokeCS(\'savecsgmesh("'+
a+"")');\">Export mesh</button><button onclick=\"cdy.evokeCS('updatepreviewcdy3d()');\">Update Preview</button>"}
function uiStringTubes(a,b,n,d,k){let h=CindyJS.getBaseDir()+"images/cindyprint/",c="true";k||(c="false");return"<table> <tr><th>Cylinder quality</th><th><image src='"+h+'CylinderLowRes.png\'/></th><th><div class="slidecontainer"><input type="range" min="8" max="64" value="16" class="slider" id="cylinderQuality" oninput="cindyPrintUpdateCylinderQuality()"></th><th><image src=\''+h+"CylinderHighRes.png'/></th></tr> <tr><th>Line subdivisions</th><th><image src='"+h+'LineSubdivisionLow.png\'/></th><th><div class="slidecontainer"><input type="range" min="1" max="100" value="50" class="slider" id="lineSubdivisions" oninput="cindyPrintUpdateLineSubdivisions()"></th><th><image src=\''+
h+"LineSubdivisionHigh.png'/></th></tr> <tr><th>Radius factor</th><th><image src='"+h+'TubeThin.png\'/></th><th><div class="slidecontainer"><input type="range" min="1" max="100" value="50" class="slider" id="radiusFactor" oninput="cindyPrintUpdateRadiusFactor()"></th><th><image src=\''+h+"TubeThick.png'/></th></tr> <tr><th>Model scale</th><th><image src='"+h+'SizeSmall.png\'/></th><th><div class="slidecontainer"><input type="range" min="1" max="100" value="10" class="slider" id="modelScale" oninput="cindyPrintUpdateModelScale()"></th><th><image src=\''+
h+"SizeLarge.png'/></th></tr></table><button onclick=\"cdy.evokeCS('savetubemesh(""+a+"", "+b+"(' + document.getElementById('lineSubdivisions').value/50 + '*("+n+")), "+d+"/20, "+c+");');\">Export mesh</button><button onclick=\"cdy.evokeCS('updatepreviewtubes("+b+"(' + document.getElementById('lineSubdivisions').value/50 + '*("+n+")), "+d+"/20, "+c+");');\">Update Preview</button>"}
function uiStringCindyGL(a,b){let n=CindyJS.getBaseDir()+"images/cindyprint/";return'<input type="checkbox" id="extrudeSurfaces" onclick="cindyPrintUpdateExtrudeSurfaces()" checked> Extrude the triangle surfaces<table> <tr><th>Extrusion radius</th><th><image src=\''+n+'ExtrudeSurfaceSmall.png\'/></th><th><div class="slidecontainer"><input type="range" min="0" max="100" value="10" class="slider" id="extrusionRadius" oninput="cindyPrintUpdateExtrusionRadius()"></th><th><image src=\''+n+'ExtrudeSurfaceLarge.png\'/></th></tr></table><input type="checkbox" id="smoothEdges" onclick="cindyPrintUpdateSmoothEdges()" checked> Smooth extrusion edges<input type="checkbox" id="clipToSphere" onclick="cindyPrintUpdateClipToSphere()"> Clip geometry to sphere<table> <tr><th>Sphere quality</th><th><image src=\''+
n+'SphereLowRes.png\'/></th><th><div class="slidecontainer"><input type="range" min="8" max="32" value="16" class="slider" id="sphereQuality" oninput="cindyPrintUpdateSphereQuality()"></th><th><image src=\''+n+"SphereHighRes.png'/></th></tr> <tr><th>Model scale</th><th><image src='"+n+'SizeSmall.png\'/></th><th><div class="slidecontainer"><input type="range" min="1" max="100" value="10" class="slider" id="modelScale" oninput="cindyPrintUpdateModelScale()"></th><th><image src=\''+n+"SizeLarge.png'/></th></tr> <tr><th>Iso offset</th><th><image src='"+
n+'IsoA.png\'/></th><th><div class="slidecontainer"><input type="range" min="0" max="100" value="0" class="slider" id="isoOffset" oninput="cindyPrintUpdateIsoOffset()"></th><th><image src=\''+n+"IsoB.png'/></tr> <tr><th>Grid resolution</th><th><image src='"+n+'GridResLow.png\'/></th><th><div class="slidecontainer"><input type="range" min="16" max="128" value="50" class="slider" id="gridResolution" oninput="cindyPrintUpdateGridResolution()"></th><th><image src=\''+n+'ExtrudeSurfaceSmall.png\'/></th></tr></table>Implicit surface reconstruction algorithm <select name="reconstructionAlgorithm" id="reconstructionAlgorithm" onchange="cindyPrintUpdateReconstructionAlgorithm()"> <option value="marchingCubes">Marching Cubes</option><option value="snapmc0.0">SnapMC (γ=0.0)</option><option selected value="snapmc0.1">SnapMC (γ=0.1)</option><option value="snapmc0.2">SnapMC (γ=0.2)</option><option value="snapmc0.3">SnapMC (γ=0.3)</option><option value="snapmc0.4">SnapMC (γ=0.4)</option><option value="snapmc0.5">SnapMC (γ=0.5)</option></select><br><button onclick="cdy.evokeCS(\'saveisomeshtofile("'+
a+"", "+b+");');\">Export Mesh</button><button onclick=\"cdy.evokeCS('updatepreviewcdygl("+b+")');\">Update Preview</button>"}var uiStringStyle="<style>.vertaligncontainer { display: flex;}table { border-collapse: collapse; text-align:left;}th { font-weight: normal;}/* https://www.w3schools.com/howto/howto_js_rangeslider.asp */.slidecontainer { width: 220px; display:inline-block; margin-left:10px; vertical-align: baseline;}.slider { -webkit-appearance: none; width: 100%; height: 15px; border-radius: 5px; background: #d3d3d3; outline: none; opacity: 0.7; -webkit-transition: .2s; transition: opacity .2s;}.slider:hover { opacity: 1;}.slider::-webkit-slider-thumb { -webkit-appearance: none; appearance: none; width: 20px; height: 20px; border-radius: 50%; background: #4CAF50; cursor: pointer;}.slider::-moz-range-thumb { width: 20px; height: 20px; border-radius: 50%; background: #4CAF50; cursor: pointer;}th > img { width: 22px; height: 22px; text-align:center; vertical-align:middle; margin-left:5px; margin-right:-8px;}.smallimg { width: 22px; height: 22px; text-align:center; vertical-align:middle; margin-left:1px; margin-right:14px;}th { display: table-cell; text-align:center; vertical-align:middle;}</style>";
let cindyBaseDir=null;function getCindyBaseDir(){if(null!==cindyBaseDir)return cindyBaseDir;for(var a=document.getElementsByTagName("script"),b=0;b<a.length;++b){var n=a[b].src;if(n){var d=/Cindy\.js$/.exec(n);if(d)return cindyBaseDir=n.substr(0,d.index)}}console.error("Could not find <script> tag for Cindy.js");return cindyBaseDir};function TriangleMesh(){this.vertices=[];this.normals=[];this.indices=[]}TriangleMesh.prototype.scale=function(a){for(let b=0;b<this.vertices.length;b++)this.vertices[b]=vec3mul(a,this.vertices[b])};
TriangleMesh.prototype.computeSmoothNormals=function(){this.normals=[];for(let n=0;n<this.vertices.length;n++){let d=new vec3(0,0,0),k=0;for(let h=0;h<this.indices.length;h+=3)if(this.indices[h]==n||this.indices[h+1]==n||this.indices[h+2]==n){var a=this.indices[h];let c=this.indices[h+2];var b=vec3sub(this.vertices[this.indices[h+1]],this.vertices[a]);a=vec3sub(this.vertices[c],this.vertices[a]);b=vec3cross(b,a);a=vec3length(b);1E-6<a&&(b=vec3mul(1/a,b));d=vec3add(d,b);k++}0==k&&alert("Error in createNormals: numTrianglesSharedBy == 0");
d=vec3mul(1/k,d);this.normals.push(d)}};TriangleMesh.prototype.saveToObjFile=function(a){let b="o printmesh\ns 1\n";for(var n=0;n<this.vertices.length;n++){var d=this.vertices[n];b=b+"v "+d.x+" "+d.y+" "+d.z+"\n";0<this.normals.length&&(d=this.normals[n],b=b+"vn "+d.x+" "+d.y+" "+d.z+"\n")}for(n=0;n<this.indices.length;n+=3){d=this.indices[n];let k=this.indices[n+1],h=this.indices[n+2];b=b+"f "+d+"//"+d+" "+k+"//"+k+" "+h+"//"+h+"\n"}downloadTextFile(a,b)};
TriangleMesh.prototype.saveToAsciiStlFile=function(a){let b="solid printmesh\n\n";for(let k=0;k<this.indices.length;k+=3){var n=this.vertices[this.indices[k]];let h=this.vertices[this.indices[k+2]];var d=vec3sub(this.vertices[this.indices[k+1]],n);n=vec3sub(h,n);d=vec3normalize(vec3cross(d,n));b=b+"facet normal "+d.x+" "+d.y+" "+d.z+"\n";b+="\touter loop\n";for(d=0;3>d;d++)n=this.vertices[this.indices[k+d]],b=b+"\t\tvertex "+n.x+" "+n.y+" "+n.z+"\n";b+="\tendloop\nendfacet\n"}downloadTextFile(a,b+
"\nendsolid printmesh\n")};
TriangleMesh.prototype.saveToBinaryStlFile=function(a){let b=new BinaryFileWriter(84+this.indices.length/3*50);for(var n=0;20>n;n++)b.writeUint32(0);b.writeUint32(this.indices.length/3);for(n=0;n<this.indices.length;n+=3){let k=this.vertices[this.indices[n]],h=this.vertices[this.indices[n+1]],c=this.vertices[this.indices[n+2]];var d=vec3sub(h,k);let l=vec3sub(c,k);d=vec3normalize(vec3cross(d,l));b.writeVec3(d);b.writeVec3(k);b.writeVec3(h);b.writeVec3(c);b.writeUint16(0)}downloadBlobAsFile(a,b.toBlob())};
TriangleMesh.prototype.saveToFile=function(a){let b=new MeshGraph(this);0>=this.vertices.length?alert("TriangleMesh.prototype.saveToFile: The mesh is empty."):(b.hasNoHoles()||alert("TriangleMesh.prototype.saveToFile: The mesh has holes or is not a closed surface."),b.isFullyConnected()||alert("TriangleMesh.prototype.saveToFile: The mesh consists of multiple components."),a.endsWith(".obj")?this.saveToObjFile(a):a.endsWith(".stl")?this.saveToBinaryStlFile(a):alert("TriangleMesh.prototype.saveToFile: Unsupported mesh format."))};function vec3(a,b,n){this.x=a;this.y=b;this.z=n}vec3.prototype.set=function(a,b,n){this.x=a;this.y=b;this.z=n};function vec3add(a,b){return new vec3(a.x+b.x,a.y+b.y,a.z+b.z)}function vec3sub(a,b){return new vec3(a.x-b.x,a.y-b.y,a.z-b.z)}function vec3mul(a,b){return new vec3(b.x*a,b.y*a,b.z*a)}function vec3div(a,b){return new vec3(b.x/a,b.y/a,b.z/a)}function vec3lengthsq(a){return a.x*a.x+a.y*a.y+a.z*a.z}function vec3length(a){return Math.sqrt(a.x*a.x+a.y*a.y+a.z*a.z)}
function vec3dot(a,b){return a.x*b.x+a.y*b.y+a.z*b.z}function vec3cross(a,b){return new vec3(a.y*b.z-a.z*b.y,a.z*b.x-a.x*b.z,a.x*b.y-a.y*b.x)}function vec3normalize(a){return vec3mul(1/vec3length(a),a)}function cindyscriptToVec3(a){return new vec3(a.value[0].value.real,a.value[1].value.real,a.value[2].value.real)}function vec3tolist(a){return[a.x,a.y,a.z]};onmessage=function(a){printUiSettings=a.data.printUiSettings;self.useWebWorkers=!0;let b=a.data.command;"generateCsgMesh"==b?postMessage(generateCsgMeshFrom(a.data.spheres,a.data.cylinders,a.data.triangles)):"generateIsoMeshFromScalarFunction"==b?WORKER_generateIsoMeshFromScalarFunction(a.data):"generateIsoMeshFromScalarFunction_PARALLEL"==b?generateIsoMeshFromScalarFunction_PARALLEL(a.data.workerID,a.data.gridCells,a.data.isoLevel):"generateIsoMeshFromScalarFunctionSnapMC_PARALLEL"==b&&generateIsoMeshFromScalarFunctionSnapMC_PARALLEL(a.data.workerID,
a.data.gridCells,a.data.isoLevel,a.data.snapGrid,a.data.indices)};
function WORKER_generateIsoMeshFromScalarFunction(a){self.baseDir=a.baseDir;generateIsoMeshFromGrid(a.cartesianGrid.gridPoints,a.cartesianGrid.gridValues,a.cartesianGrid.gridNormals,a.isoLevel,(b,n)=>{b=trianglePointsToIndexedMesh(b,n,1E-6);printUiSettings.extrudeSurfaces&&(b=printUiSettings.smoothEdges?createOpenSurfaceShellMeshWithNormalsAndRoundEdges(b,printUiSettings.extrusionRadius):createOpenSurfaceShellMeshWithNormals(b,printUiSettings.extrusionRadius));postMessage(b)})}
function MCWorkerAnswer(a,b,n){this.workerID=a;this.trianglePoints=b;this.triangleNormals=n}function generateIsoMeshFromScalarFunction_PARALLEL(a,b,n){let d=[],k=[];for(let h=0;h<b.length;h++){let c=polygonizeGridCellMarchingCubes(b[h],n);d=d.concat(c.trianglePoints);k=k.concat(c.triangleNormals)}postMessage(new MCWorkerAnswer(a,d,k))}
function generateIsoMeshFromScalarFunctionSnapMC_PARALLEL(a,b,n,d,k){let h=[],c=[];for(let l=0;l<b.length;l++){let g=polygonizeGridCellSnapMC(b[l],n,d,k[l][0],k[l][1],k[l][2]);h=h.concat(g.trianglePoints);c=c.concat(g.triangleNormals)}postMessage(new MCWorkerAnswer(a,h,c))};var CSG;if("undefined"===typeof CindyJS)importScripts("csg.js"),self.CSG=self.csg.CSG,self.CAG=self.csg.CAG;else{CindyJS.loadScript("csg","csg.js",a);function a(){self.CSG=self.csg.CSG;self.CAG=self.csg.CAG}}let csgResolution=8,csgResolutionSphere=16,csgResolutionCylinder=8;function setCsgResolution(a){csgResolution=a}function setCsgResolutionSphere(a){csgResolutionSphere=a}function setCsgResolutionCylinder(a){csgResolutionCylinder=a}
function createCSGSphere(a,b){return self.CSG.sphere({center:a,radius:b,resolution:csgResolutionSphere})}function createCSGCylinder(a,b,n){return self.CSG.roundedCylinder({start:a,end:b,radius:n,resolution:csgResolutionCylinder})}function convertCindy3DTrianglesToPolyhedron(a){a=cindyTrianglePointsToIndexedMesh(a);return convertTriangleMeshToCSGPolyhedron(a)}
function convertTriangleMeshToCSGPolyhedron(a){let b=[];for(var n=0;n<a.vertices.length;n++){var d=a.vertices[n];b.push([d.x,d.y,d.z])}n=[];for(d=0;d<a.indices.length;d+=3)n.push([a.indices[d+2],a.indices[d+1],a.indices[d]]);return self.CSG.polyhedron({points:b,faces:n})}
function mergeCindy3DObjectsToMesh(a,b,n){let d=[];for(let k=0;k<a.length;k++)d.push(createCSGSphere(a[k].pos,a[k].radius));for(a=0;a<b.length;a++)d.push(createCSGCylinder(b[a].pos1,b[a].pos2,b[a].radius));for(b=0;b<n.length;b++)d.push(convertCindy3DTrianglesToPolyhedron(n[b].trianglePoints));return mergeObjects(d)}function mergeObjects(a){a=(new self.CSG).union(a);return convertCSGPolygonsToTriangleMesh(a)}
function intersectObjects(a){a=(new self.CSG).intersect(a);return convertCSGPolygonsToTriangleMesh(a)}function convertCSGPolygonsToTriangleMesh(a){a=a.toTriangles();let b=[];for(let n=0;n<a.length;n++){let d=a[n].vertices;for(let k=0;3>k;k++){let h=d[k].pos;b.push(new vec3(h._x,h._y,h._z))}}return trianglePointsToIndexedMesh(b)}function cindyTrianglePointsToIndexedMesh(a,b){a=a.map(function(n){return new vec3(n[0],n[1],n[2])});return trianglePointsToIndexedMesh(a,void 0,b)};function createOpenSurfaceShellMeshWithNormals(a,b){0==a.normals.length&&a.computeSmoothNormals();let n=[],d=[];n=a.indices.concat(a.indices.map(g=>g+a.vertices.length));d=a.vertices.concat(a.vertices);for(var k=0;k<a.indices.length;k+=3){var h=n[k];n[k]=n[k+2];n[k+2]=h}for(k=0;k<a.vertices.length;k++){h=a.vertices[k];var c=a.normals[k],l=vec3mul(b,c);c=vec3mul(-b,c);d[k]=vec3add(h,c);d[k+a.vertices.length]=vec3add(h,l)}b=new MeshGraph(a,!1);for(k=0;k<b.edges.length;k++)1==b.edges[k].meshEdgeCount&&
(l=b.edges[k].connectedNodes,h=l[0],l=l[1],c=l+a.vertices.length,n=n.concat([c,h+a.vertices.length,h,l,c,h]));b=new TriangleMesh;b.indices=n;b.vertices=d;return b}
function createOpenSurfaceShellMeshWithNormalsAndRoundEdges(a,b){0==a.normals.length&&a.computeSmoothNormals();let n=[],d=[];n=a.indices.concat(a.indices.map(l=>l+a.vertices.length));d=a.vertices.concat(a.vertices);for(var k=0;k<a.indices.length;k+=3){var h=n[k];n[k]=n[k+2];n[k+2]=h}for(k=0;k<a.vertices.length;k++){h=a.vertices[k];var c=a.normals[k];let l=vec3mul(b,c);c=vec3mul(-b,c);d[k]=vec3add(h,c);d[k+a.vertices.length]=vec3add(h,l)}addTubesOnBorderEdges(a,a.vertices,a.indices,d,n,8,b);b=new TriangleMesh;
b.indices=n;b.vertices=d;return b}
function getBorderEdgeLoops(a){let b=new Set,n=[];for(let h=0;h<a.edges.length;h++)if(1==a.edges[h].meshEdgeCount&&!b.has(a.edges[h])){b.add(a.edges[h]);var d=a.edges[h].connectedNodes,k=d[0];d=d[1];let c=k,l=[k];for(;d!=c;){let g=null;for(k=0;k<a.edges.length;k++)if(1==a.edges[k].meshEdgeCount&&-1!==a.edges[k].connectedNodes.indexOf(d)&&!b.has(a.edges[k])){g=a.edges[k];break}b.add(g);g.connectedNodes[0]==d?(k=g.connectedNodes[0],d=g.connectedNodes[1]):(k=g.connectedNodes[1],d=g.connectedNodes[0]);
l.push(k)}n.push(l)}return n}let halfCirclePointData=[];function initArcVertices(a,b,n,d){var k=d/(a-1);d=Math.tan(k);k=Math.cos(k);b=new vec3(b*Math.cos(n),b*Math.sin(n),0);halfCirclePointData=[];for(n=0;n<a;n++){halfCirclePointData.push(b);let h=new vec3(-b.y,b.x,0);b=vec3add(b,vec3mul(d,h));b=vec3mul(k,b)}}
function getTransformedCircleVertices(a,b,n){let d=vec3cross(b,n),k=[];for(let c=0;c<halfCirclePointData.length;c++){var h=halfCirclePointData[c];h=new vec3(h.x*b.x+h.y*d.x+h.z*n.x+a.x,h.x*b.y+h.y*d.y+h.z*n.y+a.y,h.x*b.z+h.y*d.z+h.z*n.z+a.z);k.push(h)}return k}
function addTubesOnBorderEdges(a,b,n,d,k,h,c){initArcVertices(h-2,c,-Math.PI/2+Math.PI/(h-1),Math.PI-2*Math.PI/(h-1));h=new MeshGraph(a,!1);n=d.length;h=getBorderEdgeLoops(h);for(c=0;c<h.length;c++)for(let t=0;t<h[c].length;t++){var l=h[c][(t-1+h[c].length)%h[c].length],g=h[c][t],e=h[c][(t+1)%h[c].length],f=b[g],m=b[e],r=vec3add(vec3sub(f,b[l]),vec3sub(m,f));m=vec3length(r);if(1E-4>m)continue;r=vec3mul(1/m,r);m=g;let p=e;g+=a.vertices.length;e+=a.vertices.length;l=vec3cross(vec3sub(d[g],d[l]),vec3sub(d[g],
d[m]));let q=vec3cross(vec3sub(d[e],d[m]),vec3sub(d[e],d[p]));l=vec3normalize(vec3add(l,q));f=getTransformedCircleVertices(f,l,r);for(r=0;r<f.length;r++)d.push(f[r]);r=[];l=[];r.push(m);l.push(p);for(m=0;m<f.length;m++)r.push(n+m),t<h[c].length-1?l.push(n+f.length+m):l.push(n-f.length*(h[c].length-1)+m);r.push(g);l.push(e);n+=f.length;for(m=0;m<r.length-1;m++)k.push(l[m+1]),k.push(r[m+1]),k.push(r[m]),k.push(l[m]),k.push(l[m+1]),k.push(r[m])}};let circlePointData=[],circlePointDataTubeRadius=0;function initCircleVertices(a,b){circlePointData=[];circlePointDataTubeRadius=b;var n=6.2831852/a;let d=Math.tan(n);n=Math.cos(n);b=new vec3(b,0,0);for(let k=0;k<a;k++){circlePointData.push(b);let h=new vec3(-b.y,b.x,0);b=vec3add(b,vec3mul(d,h));b=vec3mul(n,b)}}
function insertOrientedCirclePoints(a,b,n,d,k){var h=k;.01>vec3length(vec3cross(h,d))&&(h=new vec3(0,1,0));h=vec3normalize(vec3sub(h,vec3mul(vec3dot(h,d),d)));k.set(h.x,h.y,h.z);k=vec3cross(d,h);for(let l=0;l<circlePointData.length;l++){var c=circlePointData[l];c=new vec3(c.x*h.x+c.y*k.x+c.z*d.x+n.x,c.x*h.y+c.y*k.y+c.z*d.y+n.y,c.x*h.z+c.y*k.z+c.z*d.z+n.z);a.push(c);c=vec3normalize(vec3sub(c,n));b.push(c)}}
function createTubeMesh(a,b,n,d){return $jscomp.asyncExecutePromiseGeneratorFunction(function*(){let k=printUiSettings.cylinderQuality;circlePointData.length==k&&b==circlePointDataTubeRadius||initCircleVertices(k,b);var h=a.length;if(n&&3>h)return console.log("createClosedTubeMesh: Closed tube too short."),null;if(!n&&2>h)return console.log("createClosedTubeMesh: Open tube too short."),null;let c=new TriangleMesh,l=c.vertices,g=c.indices;var e=c.normals,f=new vec3(1,0,0),m=[];let r=0;for(var t=0;t<
h;t++){var p=vec3sub(a[(t+1)%h],a[t]);n||t!=h-1||(p=vec3sub(a[t],a[t-1]));1E-5>vec3length(p)||(p=vec3normalize(p),insertOrientedCirclePoints(l,e,a[t],p,f),m.push(new vec3(f.x,f.y,f.z)),r++)}for(e=0;e<r-1;e++)for(f=0;f<k;f++)g.push(e*k+f),g.push(e*k+(f+1)%k),g.push((e+1)%r*k+(f+1)%k),g.push(e*k+f),g.push((e+1)%r*k+(f+1)%k),g.push((e+1)%r*k+f);if(n)for(h=m[r-1],m=m[0],m=Math.atan2(vec3length(vec3cross(h,m)),vec3dot(h,m)),m=(m+2*Math.PI)%(2*Math.PI),m=Math.round(m/(2*Math.PI)*k),h=0;h<k;h++)g.push((r-
1)*k+h%k),g.push((r-1)*k+(h+1)%k),g.push(0*k+(h+1+m)%k),g.push((r-1)*k+h%k),g.push(0*k+(h+1+m)%k),g.push(0*k+(h+m)%k);else{let q=Math.ceil(k/2),A,x;e=a[0];f=vec3sub(a[0],a[1]);f=vec3normalize(f);t=m[0];p=a[h-1];h=vec3sub(a[h-1],a[h-2]);h=vec3normalize(h);let D=function(u,v,y,C){let w=vec3cross(y,v);v=vec3mul(b,v);y=vec3mul(b,y);w=vec3mul(b,w);let z=l.length-k;for(let E=1;E<=q;E++){x=.5*Math.PI*(1-E/q);for(let H=0;H<k;H++){A=-2*Math.PI*H/k;var B=new vec3(Math.cos(A)*Math.sin(x),Math.sin(A)*Math.sin(x),
Math.cos(x));B=new vec3(B.x*y.x+B.y*w.x+B.z*v.x+u.x,B.x*y.y+B.y*w.y+B.z*v.y+u.y,B.x*y.z+B.y*w.z+B.z*v.z+u.z);l.push(B);if(E==q)break}}for(u=0;u<q;u++)for(v=0;v<k;v++)C&&0==u?(g.push((2*k-v)%k+u*k),g.push((2*k-v-1)%k+u*k),g.push(z+v%k+(u+1)*k),g.push((2*k-v-1)%k+u*k),g.push(z+(v+1)%k+(u+1)*k),g.push(z+v%k+(u+1)*k)):u<q-1?(g.push(z+v%k+u*k),g.push(z+(v+1)%k+u*k),g.push(z+v%k+(u+1)*k),g.push(z+(v+1)%k+u*k),g.push(z+(v+1)%k+(u+1)*k),g.push(z+v%k+(u+1)*k)):(g.push(z+v%k+u*k),g.push(z+(v+1)%k+u*k),g.push(z+
0+(u+1)*k))};D(p,h,m[r-1],!1);D(e,f,t,!0)}d(c)})};function generateIsoMeshFromScalarFunction(a,b,n,d,k,h,c){a=constructCartesianGridScalarField(a,b,n,d,k);useWebWorkers?(b=new Worker(getCindyBaseDir()+"CindyPrintWorker.js"),setMeshCreationWorker(b),b.onmessage=function(l){l=l.data;l.__proto__=TriangleMesh.prototype;setMeshCreationWorker(null);c(l)},b.postMessage({printUiSettings,command:"generateIsoMeshFromScalarFunction",baseDir:getCindyBaseDir(),cartesianGrid:a,isoLevel:h})):generateIsoMeshFromGrid(a.gridPoints,a.gridValues,a.gridNormals,h,(l,
g)=>{l=trianglePointsToIndexedMesh(l,g,1E-6);printUiSettings.extrudeSurfaces&&(l=printUiSettings.smoothEdges?createOpenSurfaceShellMeshWithNormalsAndRoundEdges(l,printUiSettings.extrusionRadius):createOpenSurfaceShellMeshWithNormals(l,printUiSettings.extrusionRadius));c(l)})}function generateClosedIsoMeshFromScalarFunction(a,b,n,d,k){a=constructCartesianGridScalarField(a,b,n,d);return generateIsoMeshFromGrid(a.gridPoints,a.gridValues,a.gridNormals,k)}
function constructCartesianGridScalarField(a,b,n,d,k){let h=[],c=[],l=[];for(let g=0;g<n;g++){let e=[],f=[],m=[];for(let r=0;r<n;r++){let t=[],p=[],q=[];for(let A=0;A<n;A++){let x=new vec3(a.x+A*b,a.y+r*b,a.z+g*b);t.push(x);p.push(d(x));q.push(k(x))}e.push(t);f.push(p);m.push(q)}h.push(e);c.push(f);l.push(m)}return{gridPoints:h,gridValues:c,gridNormals:l}}
function constructCartesianSnapGridScalarField(a,b){let n={gridValues:[],snapBackTo:[],snapBackToNormals:[],weights:[]};n.gridValues=deepCopy(a.gridValues);for(let d=0;d<a.gridPoints.length-1;d++)for(let k=0;k<a.gridPoints[0].length-1;k++)for(let h=0;h<a.gridPoints[0][0].length-1;h++)snapAtEdge(a,n,b,d,k,h,d+1,k,h),snapAtEdge(a,n,b,d,k,h,d,k+1,h),snapAtEdge(a,n,b,d,k,h,d,k,h+1);return n}
const deepCopy=a=>{let b=[];a.forEach(n=>{Array.isArray(n)?b.push(deepCopy(n)):"object"===typeof n?b.push(deepCopyObject(n)):b.push(n)});return b},deepCopyObject=a=>{let b={};for(let [n,d]of Object.entries(a))Array.isArray(d)?b[n]=deepCopy(d):b[n]="object"===typeof d?deepCopyObject(d):d;return b};
function snapAtEdge(a,b,n,d,k,h,c,l,g){let e=printUiSettings.gamma,f=e;var m=e;if(a.gridValues[d][k][h]<n&&a.gridValues[c][l][g]>n||a.gridValues[d][k][h]>n&&a.gridValues[c][l][g]<n)m=a.gridValues[c][l][g]-a.gridValues[d][k][h],1E-5<m||-1E-5>m?(f=(a.gridValues[c][l][g]-n)/m,m=(n-a.gridValues[d][k][h])/m):m=f=.5;m<e?snapToVertex(b,a.gridPoints,a.gridNormals,n,m,d,k,h,c,l,g):f<e&&snapToVertex(b,a.gridPoints,a.gridNormals,n,f,c,l,g,d,k,h)}
function snapToVertex(a,b,n,d,k,h,c,l,g,e,f){a.gridValues[h][c][l]!=d?(a.gridValues[h][c][l]=d,createArrayIfNecessary(a.snapBackTo,h,c),createArrayIfNecessary(a.snapBackToNormals,h,c),createArrayIfNecessary(a.weights,h,c),a.snapBackTo[h][c][l]=b[g][e][f],a.snapBackToNormals[h][c][l]=n[g][e][f],a.weights[h][c][l]=k):void 0!=a.weights[h]&&void 0!=a.weights[h][c]&&void 0!=a.weights[h][c][l]&&a.weights[h][c][l]>k&&(a.snapBackTo[h][c][l]=b[g][e][f],a.snapBackToNormals[h][c][l]=n[g][e][f],a.weights[h][c][l]=
k)}function createArrayIfNecessary(a,b,n){void 0==a[b]?(a[b]=[],a[b][n]=[]):void 0==a[b][n]&&(a[b][n]=[])}function GridCell(){this.v=[];this.f=[];this.n=[];for(let a=0;8>a;a++)this.v.push(new vec3(0,0,0)),this.f.push(0),this.n.push(new vec3(0,0,0))}function vertexInterpIso(a,b,n,d,k){if(1E-5>Math.abs(a-d))return b;if(1E-5>Math.abs(a-k))return n;if(1E-5>Math.abs(d-k))return b;a=(a-d)/(k-d);d=new vec3(0,0,0);d.x=b.x+a*(n.x-b.x);d.y=b.y+a*(n.y-b.y);d.z=b.z+a*(n.z-b.z);return d}
function normalInterpIso(a,b,n,d,k){a=vertexInterpIso(a,b,n,d,k);return vec3normalize(a)}
function generateIsoMeshFromGrid(a,b,n,d,k){return $jscomp.asyncExecutePromiseGeneratorFunction(function*(){let h=a.length;if(useWebWorkers){var c=self.navigator.hardwareConcurrency||4;if(1<c){generateIsoMeshFromGridParallel(a,b,n,d,c,k);return}}let l;printUiSettings.reconstructionAlgorithm==reconstructionAlgorithms.SNAPMC&&(l=constructCartesianSnapGridScalarField({gridPoints:a,gridValues:b,gridNormals:n},d));c=new GridCell;let g=[],e=[];for(let r=0;r<h-1;r++)for(let t=0;t<h-1;t++)for(let p=0;p<h-
1;p++){for(var f=0;8>f;f++){var m=new vec3(p,t,r);if(printUiSettings.reconstructionAlgorithm==reconstructionAlgorithms.SNAPMC){if(1==f||3==f||5==f||7==f)m.x+=1;if(2==f||3==f||6==f||7==f)m.y+=1;if(4==f||5==f||6==f||7==f)m.z+=1}else{if(1==f||2==f||5==f||6==f)m.x+=1;if(4==f||5==f||6==f||7==f)m.y+=1;if(2==f||3==f||6==f||7==f)m.z+=1}c.v[f]=a[m.z][m.y][m.x];c.n[f]=n[m.z][m.y][m.x];c.f[f]=printUiSettings.reconstructionAlgorithm==reconstructionAlgorithms.SNAPMC?l.gridValues[m.z][m.y][m.x]:b[m.z][m.y][m.x]}f=
printUiSettings.reconstructionAlgorithm==reconstructionAlgorithms.SNAPMC?polygonizeGridCellSnapMC(c,d,l,r,t,p):polygonizeGridCellMarchingCubes(c,d);m=f.triangleNormals;g=g.concat(f.trianglePoints);e=e.concat(m)}k(g,e)})}function MCWorkerJob(a,b,n){this.workerID=a;this.gridCells=b;this.isoLevel=n;this.command="generateIsoMeshFromScalarFunction_PARALLEL";this.printUiSettings=self.printUiSettings}
function MCWorkerJobSnapMC(a,b,n,d,k){this.workerID=a;this.gridCells=b;this.isoLevel=n;this.snapGrid=d;this.indices=k;this.command="generateIsoMeshFromScalarFunctionSnapMC_PARALLEL";this.printUiSettings=self.printUiSettings}
function generateIsoMeshFromGridParallel(a,b,n,d,k,h){function c(p){var q=p.data.trianglePoints;let A=p.data.triangleNormals;for(var x=0;x<q.length;x++)q[x].__proto__=vec3.prototype;for(x=0;x<A.length;x++)A[x].__proto__=vec3.prototype;g=g.concat(q);e=e.concat(A);t--;if(0==t){for(q=0;q<m.length;q++)m[q].terminate();h(g,e)}0<r.length&&(p=p.data.workerID,q=r.pop(),q.workerID=p,m[p].postMessage(q))}let l=a.length,g=[],e=[],f;printUiSettings.reconstructionAlgorithm==reconstructionAlgorithms.SNAPMC&&(f=
constructCartesianSnapGridScalarField({gridPoints:a,gridValues:b,gridNormals:n},d));let m=[],r=[];for(let p=0;p<l-1;p++){let q=[],A=[];for(let x=0;x<l-1;x++)for(let D=0;D<l-1;D++){let u=new GridCell;for(let v=0;8>v;v++){let y=new vec3(D,x,p);if(printUiSettings.reconstructionAlgorithm==reconstructionAlgorithms.SNAPMC){if(1==v||3==v||5==v||7==v)y.x+=1;if(2==v||3==v||6==v||7==v)y.y+=1;if(4==v||5==v||6==v||7==v)y.z+=1}else{if(1==v||2==v||5==v||6==v)y.x+=1;if(4==v||5==v||6==v||7==v)y.y+=1;if(2==v||3==
v||6==v||7==v)y.z+=1}u.v[v]=a[y.z][y.y][y.x];u.n[v]=n[y.z][y.y][y.x];u.f[v]=printUiSettings.reconstructionAlgorithm==reconstructionAlgorithms.SNAPMC?f.gridValues[y.z][y.y][y.x]:b[y.z][y.y][y.x]}printUiSettings.reconstructionAlgorithm==reconstructionAlgorithms.SNAPMC&&A.push([p,x,D]);q.push(u)}printUiSettings.reconstructionAlgorithm==reconstructionAlgorithms.SNAPMC?r.push(new MCWorkerJobSnapMC(-1,q,d,f,A)):r.push(new MCWorkerJob(-1,q,d))}let t=r.length;for(a=0;a<k&&0<r.length;a++)b=r.pop(),b.workerID=
a,n="",n=self.baseDir?self.baseDir:getCindyBaseDir(),n=new Worker(n+"CindyPrintWorker.js"),n.onmessage=c,n.postMessage(b),m.push(n)};/*
The marching cubes look-up table and C code that is the base for the following code
was released under public domain by Cory Bloyd.
For the tables see: http://paulbourke.net/geometry/polygonise/
*/
let edgeTable=[0,265,515,778,1030,1295,1541,1804,2060,2309,2575,2822,3082,3331,3593,3840,400,153,915,666,1430,1183,1941,1692,2460,2197,2975,2710,3482,3219,3993,3728,560,825,51,314,1590,1855,1077,1340,2620,2869,2111,2358,3642,3891,3129,3376,928,681,419,170,1958,1711,1445,1196,2988,2725,2479,2214,4010,3747,3497,3232,1120,1385,1635,1898,102,367,613,876,3180,3429,3695,3942,2154,2403,2665,2912,1520,1273,2035,1786,502,255,1013,764,3580,3317,4095,3830,2554,2291,3065,2800,1616,1881,1107,1370,598,863,85,348,
3676,3925,3167,3414,2650,2899,2137,2384,1984,1737,1475,1226,966,719,453,204,4044,3781,3535,3270,3018,2755,2505,2240,2240,2505,2755,3018,3270,3535,3781,4044,204,453,719,966,1226,1475,1737,1984,2384,2137,2899,2650,3414,3167,3925,3676,348,85,863,598,1370,1107,1881,1616,2800,3065,2291,2554,3830,4095,3317,3580,764,1013,255,502,1786,2035,1273,1520,2912,2665,2403,2154,3942,3695,3429,3180,876,613,367,102,1898,1635,1385,1120,3232,3497,3747,4010,2214,2479,2725,2988,1196,1445,1711,1958,170,419,681,928,3376,
3129,3891,3642,2358,2111,2869,2620,1340,1077,1855,1590,314,51,825,560,3728,3993,3219,3482,2710,2975,2197,2460,1692,1941,1183,1430,666,915,153,400,3840,3593,3331,3082,2822,2575,2309,2060,1804,1541,1295,1030,778,515,265,0],triTable=[[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[0,8,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[0,1,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[1,8,3,9,8,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[1,2,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[0,8,3,1,2,10,-1,-1,-1,-1,-1,-1,-1,
-1,-1,-1],[9,2,10,0,2,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[2,8,3,2,10,8,10,9,8,-1,-1,-1,-1,-1,-1,-1],[3,11,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[0,11,2,8,11,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[1,9,0,2,3,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[1,11,2,1,9,11,9,8,11,-1,-1,-1,-1,-1,-1,-1],[3,10,1,11,10,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[0,10,1,0,8,10,8,11,10,-1,-1,-1,-1,-1,-1,-1],[3,9,0,3,11,9,11,10,9,-1,-1,-1,-1,-1,-1,-1],[9,8,10,10,8,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[4,7,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-1,-1,-1],[4,3,0,7,3,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[0,1,9,8,4,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[4,1,9,4,7,1,7,3,1,-1,-1,-1,-1,-1,-1,-1],[1,2,10,8,4,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[3,4,7,3,0,4,1,2,10,-1,-1,-1,-1,-1,-1,-1],[9,2,10,9,0,2,8,4,7,-1,-1,-1,-1,-1,-1,-1],[2,10,9,2,9,7,2,7,3,7,9,4,-1,-1,-1,-1],[8,4,7,3,11,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[11,4,7,11,2,4,2,0,4,-1,-1,-1,-1,-1,-1,-1],[9,0,1,8,4,7,2,3,11,-1,-1,-1,-1,-1,-1,-1],[4,7,11,9,4,11,9,11,2,9,2,1,-1,-1,-1,-1],[3,10,1,3,11,10,7,8,4,-1,
-1,-1,-1,-1,-1,-1],[1,11,10,1,4,11,1,0,4,7,11,4,-1,-1,-1,-1],[4,7,8,9,0,11,9,11,10,11,0,3,-1,-1,-1,-1],[4,7,11,4,11,9,9,11,10,-1,-1,-1,-1,-1,-1,-1],[9,5,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[9,5,4,0,8,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[0,5,4,1,5,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[8,5,4,8,3,5,3,1,5,-1,-1,-1,-1,-1,-1,-1],[1,2,10,9,5,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[3,0,8,1,2,10,4,9,5,-1,-1,-1,-1,-1,-1,-1],[5,2,10,5,4,2,4,0,2,-1,-1,-1,-1,-1,-1,-1],[2,10,5,3,2,5,3,5,4,3,4,8,-1,-1,-1,-1],[9,5,4,2,
3,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[0,11,2,0,8,11,4,9,5,-1,-1,-1,-1,-1,-1,-1],[0,5,4,0,1,5,2,3,11,-1,-1,-1,-1,-1,-1,-1],[2,1,5,2,5,8,2,8,11,4,8,5,-1,-1,-1,-1],[10,3,11,10,1,3,9,5,4,-1,-1,-1,-1,-1,-1,-1],[4,9,5,0,8,1,8,10,1,8,11,10,-1,-1,-1,-1],[5,4,0,5,0,11,5,11,10,11,0,3,-1,-1,-1,-1],[5,4,8,5,8,10,10,8,11,-1,-1,-1,-1,-1,-1,-1],[9,7,8,5,7,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[9,3,0,9,5,3,5,7,3,-1,-1,-1,-1,-1,-1,-1],[0,7,8,0,1,7,1,5,7,-1,-1,-1,-1,-1,-1,-1],[1,5,3,3,5,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],
[9,7,8,9,5,7,10,1,2,-1,-1,-1,-1,-1,-1,-1],[10,1,2,9,5,0,5,3,0,5,7,3,-1,-1,-1,-1],[8,0,2,8,2,5,8,5,7,10,5,2,-1,-1,-1,-1],[2,10,5,2,5,3,3,5,7,-1,-1,-1,-1,-1,-1,-1],[7,9,5,7,8,9,3,11,2,-1,-1,-1,-1,-1,-1,-1],[9,5,7,9,7,2,9,2,0,2,7,11,-1,-1,-1,-1],[2,3,11,0,1,8,1,7,8,1,5,7,-1,-1,-1,-1],[11,2,1,11,1,7,7,1,5,-1,-1,-1,-1,-1,-1,-1],[9,5,8,8,5,7,10,1,3,10,3,11,-1,-1,-1,-1],[5,7,0,5,0,9,7,11,0,1,0,10,11,10,0,-1],[11,10,0,11,0,3,10,5,0,8,0,7,5,7,0,-1],[11,10,5,7,11,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[10,6,5,-1,
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[0,8,3,5,10,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[9,0,1,5,10,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[1,8,3,1,9,8,5,10,6,-1,-1,-1,-1,-1,-1,-1],[1,6,5,2,6,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[1,6,5,1,2,6,3,0,8,-1,-1,-1,-1,-1,-1,-1],[9,6,5,9,0,6,0,2,6,-1,-1,-1,-1,-1,-1,-1],[5,9,8,5,8,2,5,2,6,3,2,8,-1,-1,-1,-1],[2,3,11,10,6,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[11,0,8,11,2,0,10,6,5,-1,-1,-1,-1,-1,-1,-1],[0,1,9,2,3,11,5,10,6,-1,-1,-1,-1,-1,-1,-1],[5,10,6,1,9,2,9,11,2,9,8,11,-1,-1,-1,
-1],[6,3,11,6,5,3,5,1,3,-1,-1,-1,-1,-1,-1,-1],[0,8,11,0,11,5,0,5,1,5,11,6,-1,-1,-1,-1],[3,11,6,0,3,6,0,6,5,0,5,9,-1,-1,-1,-1],[6,5,9,6,9,11,11,9,8,-1,-1,-1,-1,-1,-1,-1],[5,10,6,4,7,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[4,3,0,4,7,3,6,5,10,-1,-1,-1,-1,-1,-1,-1],[1,9,0,5,10,6,8,4,7,-1,-1,-1,-1,-1,-1,-1],[10,6,5,1,9,7,1,7,3,7,9,4,-1,-1,-1,-1],[6,1,2,6,5,1,4,7,8,-1,-1,-1,-1,-1,-1,-1],[1,2,5,5,2,6,3,0,4,3,4,7,-1,-1,-1,-1],[8,4,7,9,0,5,0,6,5,0,2,6,-1,-1,-1,-1],[7,3,9,7,9,4,3,2,9,5,9,6,2,6,9,-1],[3,11,2,7,8,
4,10,6,5,-1,-1,-1,-1,-1,-1,-1],[5,10,6,4,7,2,4,2,0,2,7,11,-1,-1,-1,-1],[0,1,9,4,7,8,2,3,11,5,10,6,-1,-1,-1,-1],[9,2,1,9,11,2,9,4,11,7,11,4,5,10,6,-1],[8,4,7,3,11,5,3,5,1,5,11,6,-1,-1,-1,-1],[5,1,11,5,11,6,1,0,11,7,11,4,0,4,11,-1],[0,5,9,0,6,5,0,3,6,11,6,3,8,4,7,-1],[6,5,9,6,9,11,4,7,9,7,11,9,-1,-1,-1,-1],[10,4,9,6,4,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[4,10,6,4,9,10,0,8,3,-1,-1,-1,-1,-1,-1,-1],[10,0,1,10,6,0,6,4,0,-1,-1,-1,-1,-1,-1,-1],[8,3,1,8,1,6,8,6,4,6,1,10,-1,-1,-1,-1],[1,4,9,1,2,4,2,6,4,-1,-1,
-1,-1,-1,-1,-1],[3,0,8,1,2,9,2,4,9,2,6,4,-1,-1,-1,-1],[0,2,4,4,2,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[8,3,2,8,2,4,4,2,6,-1,-1,-1,-1,-1,-1,-1],[10,4,9,10,6,4,11,2,3,-1,-1,-1,-1,-1,-1,-1],[0,8,2,2,8,11,4,9,10,4,10,6,-1,-1,-1,-1],[3,11,2,0,1,6,0,6,4,6,1,10,-1,-1,-1,-1],[6,4,1,6,1,10,4,8,1,2,1,11,8,11,1,-1],[9,6,4,9,3,6,9,1,3,11,6,3,-1,-1,-1,-1],[8,11,1,8,1,0,11,6,1,9,1,4,6,4,1,-1],[3,11,6,3,6,0,0,6,4,-1,-1,-1,-1,-1,-1,-1],[6,4,8,11,6,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[7,10,6,7,8,10,8,9,10,-1,-1,-1,-1,-1,
-1,-1],[0,7,3,0,10,7,0,9,10,6,7,10,-1,-1,-1,-1],[10,6,7,1,10,7,1,7,8,1,8,0,-1,-1,-1,-1],[10,6,7,10,7,1,1,7,3,-1,-1,-1,-1,-1,-1,-1],[1,2,6,1,6,8,1,8,9,8,6,7,-1,-1,-1,-1],[2,6,9,2,9,1,6,7,9,0,9,3,7,3,9,-1],[7,8,0,7,0,6,6,0,2,-1,-1,-1,-1,-1,-1,-1],[7,3,2,6,7,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[2,3,11,10,6,8,10,8,9,8,6,7,-1,-1,-1,-1],[2,0,7,2,7,11,0,9,7,6,7,10,9,10,7,-1],[1,8,0,1,7,8,1,10,7,6,7,10,2,3,11,-1],[11,2,1,11,1,7,10,6,1,6,7,1,-1,-1,-1,-1],[8,9,6,8,6,7,9,1,6,11,6,3,1,3,6,-1],[0,9,1,11,6,7,-1,-1,
-1,-1,-1,-1,-1,-1,-1,-1],[7,8,0,7,0,6,3,11,0,11,6,0,-1,-1,-1,-1],[7,11,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[7,6,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[3,0,8,11,7,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[0,1,9,11,7,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[8,1,9,8,3,1,11,7,6,-1,-1,-1,-1,-1,-1,-1],[10,1,2,6,11,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[1,2,10,3,0,8,6,11,7,-1,-1,-1,-1,-1,-1,-1],[2,9,0,2,10,9,6,11,7,-1,-1,-1,-1,-1,-1,-1],[6,11,7,2,10,3,10,8,3,10,9,8,-1,-1,-1,-1],[7,2,3,6,2,7,-1,-1,-1,-1,-1,-1,-1,
-1,-1,-1],[7,0,8,7,6,0,6,2,0,-1,-1,-1,-1,-1,-1,-1],[2,7,6,2,3,7,0,1,9,-1,-1,-1,-1,-1,-1,-1],[1,6,2,1,8,6,1,9,8,8,7,6,-1,-1,-1,-1],[10,7,6,10,1,7,1,3,7,-1,-1,-1,-1,-1,-1,-1],[10,7,6,1,7,10,1,8,7,1,0,8,-1,-1,-1,-1],[0,3,7,0,7,10,0,10,9,6,10,7,-1,-1,-1,-1],[7,6,10,7,10,8,8,10,9,-1,-1,-1,-1,-1,-1,-1],[6,8,4,11,8,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[3,6,11,3,0,6,0,4,6,-1,-1,-1,-1,-1,-1,-1],[8,6,11,8,4,6,9,0,1,-1,-1,-1,-1,-1,-1,-1],[9,4,6,9,6,3,9,3,1,11,3,6,-1,-1,-1,-1],[6,8,4,6,11,8,2,10,1,-1,-1,-1,-1,-1,
-1,-1],[1,2,10,3,0,11,0,6,11,0,4,6,-1,-1,-1,-1],[4,11,8,4,6,11,0,2,9,2,10,9,-1,-1,-1,-1],[10,9,3,10,3,2,9,4,3,11,3,6,4,6,3,-1],[8,2,3,8,4,2,4,6,2,-1,-1,-1,-1,-1,-1,-1],[0,4,2,4,6,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[1,9,0,2,3,4,2,4,6,4,3,8,-1,-1,-1,-1],[1,9,4,1,4,2,2,4,6,-1,-1,-1,-1,-1,-1,-1],[8,1,3,8,6,1,8,4,6,6,10,1,-1,-1,-1,-1],[10,1,0,10,0,6,6,0,4,-1,-1,-1,-1,-1,-1,-1],[4,6,3,4,3,8,6,10,3,0,3,9,10,9,3,-1],[10,9,4,6,10,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[4,9,5,7,6,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],
[0,8,3,4,9,5,11,7,6,-1,-1,-1,-1,-1,-1,-1],[5,0,1,5,4,0,7,6,11,-1,-1,-1,-1,-1,-1,-1],[11,7,6,8,3,4,3,5,4,3,1,5,-1,-1,-1,-1],[9,5,4,10,1,2,7,6,11,-1,-1,-1,-1,-1,-1,-1],[6,11,7,1,2,10,0,8,3,4,9,5,-1,-1,-1,-1],[7,6,11,5,4,10,4,2,10,4,0,2,-1,-1,-1,-1],[3,4,8,3,5,4,3,2,5,10,5,2,11,7,6,-1],[7,2,3,7,6,2,5,4,9,-1,-1,-1,-1,-1,-1,-1],[9,5,4,0,8,6,0,6,2,6,8,7,-1,-1,-1,-1],[3,6,2,3,7,6,1,5,0,5,4,0,-1,-1,-1,-1],[6,2,8,6,8,7,2,1,8,4,8,5,1,5,8,-1],[9,5,4,10,1,6,1,7,6,1,3,7,-1,-1,-1,-1],[1,6,10,1,7,6,1,0,7,8,7,0,
9,5,4,-1],[4,0,10,4,10,5,0,3,10,6,10,7,3,7,10,-1],[7,6,10,7,10,8,5,4,10,4,8,10,-1,-1,-1,-1],[6,9,5,6,11,9,11,8,9,-1,-1,-1,-1,-1,-1,-1],[3,6,11,0,6,3,0,5,6,0,9,5,-1,-1,-1,-1],[0,11,8,0,5,11,0,1,5,5,6,11,-1,-1,-1,-1],[6,11,3,6,3,5,5,3,1,-1,-1,-1,-1,-1,-1,-1],[1,2,10,9,5,11,9,11,8,11,5,6,-1,-1,-1,-1],[0,11,3,0,6,11,0,9,6,5,6,9,1,2,10,-1],[11,8,5,11,5,6,8,0,5,10,5,2,0,2,5,-1],[6,11,3,6,3,5,2,10,3,10,5,3,-1,-1,-1,-1],[5,8,9,5,2,8,5,6,2,3,8,2,-1,-1,-1,-1],[9,5,6,9,6,0,0,6,2,-1,-1,-1,-1,-1,-1,-1],[1,5,8,
1,8,0,5,6,8,3,8,2,6,2,8,-1],[1,5,6,2,1,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[1,3,6,1,6,10,3,8,6,5,6,9,8,9,6,-1],[10,1,0,10,0,6,9,5,0,5,6,0,-1,-1,-1,-1],[0,3,8,5,6,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[10,5,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[11,5,10,7,5,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[11,5,10,11,7,5,8,3,0,-1,-1,-1,-1,-1,-1,-1],[5,11,7,5,10,11,1,9,0,-1,-1,-1,-1,-1,-1,-1],[10,7,5,10,11,7,9,8,1,8,3,1,-1,-1,-1,-1],[11,1,2,11,7,1,7,5,1,-1,-1,-1,-1,-1,-1,-1],[0,8,3,1,2,7,1,7,5,7,2,11,-1,-1,-1,-1],[9,
7,5,9,2,7,9,0,2,2,11,7,-1,-1,-1,-1],[7,5,2,7,2,11,5,9,2,3,2,8,9,8,2,-1],[2,5,10,2,3,5,3,7,5,-1,-1,-1,-1,-1,-1,-1],[8,2,0,8,5,2,8,7,5,10,2,5,-1,-1,-1,-1],[9,0,1,5,10,3,5,3,7,3,10,2,-1,-1,-1,-1],[9,8,2,9,2,1,8,7,2,10,2,5,7,5,2,-1],[1,3,5,3,7,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[0,8,7,0,7,1,1,7,5,-1,-1,-1,-1,-1,-1,-1],[9,0,3,9,3,5,5,3,7,-1,-1,-1,-1,-1,-1,-1],[9,8,7,5,9,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[5,8,4,5,10,8,10,11,8,-1,-1,-1,-1,-1,-1,-1],[5,0,4,5,11,0,5,10,11,11,3,0,-1,-1,-1,-1],[0,1,9,8,4,10,8,
10,11,10,4,5,-1,-1,-1,-1],[10,11,4,10,4,5,11,3,4,9,4,1,3,1,4,-1],[2,5,1,2,8,5,2,11,8,4,5,8,-1,-1,-1,-1],[0,4,11,0,11,3,4,5,11,2,11,1,5,1,11,-1],[0,2,5,0,5,9,2,11,5,4,5,8,11,8,5,-1],[9,4,5,2,11,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[2,5,10,3,5,2,3,4,5,3,8,4,-1,-1,-1,-1],[5,10,2,5,2,4,4,2,0,-1,-1,-1,-1,-1,-1,-1],[3,10,2,3,5,10,3,8,5,4,5,8,0,1,9,-1],[5,10,2,5,2,4,1,9,2,9,4,2,-1,-1,-1,-1],[8,4,5,8,5,3,3,5,1,-1,-1,-1,-1,-1,-1,-1],[0,4,5,1,0,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[8,4,5,8,5,3,9,0,5,0,3,5,-1,-1,-1,
-1],[9,4,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[4,11,7,4,9,11,9,10,11,-1,-1,-1,-1,-1,-1,-1],[0,8,3,4,9,7,9,11,7,9,10,11,-1,-1,-1,-1],[1,10,11,1,11,4,1,4,0,7,4,11,-1,-1,-1,-1],[3,1,4,3,4,8,1,10,4,7,4,11,10,11,4,-1],[4,11,7,9,11,4,9,2,11,9,1,2,-1,-1,-1,-1],[9,7,4,9,11,7,9,1,11,2,11,1,0,8,3,-1],[11,7,4,11,4,2,2,4,0,-1,-1,-1,-1,-1,-1,-1],[11,7,4,11,4,2,8,3,4,3,2,4,-1,-1,-1,-1],[2,9,10,2,7,9,2,3,7,7,4,9,-1,-1,-1,-1],[9,10,7,9,7,4,10,2,7,8,7,0,2,0,7,-1],[3,7,10,3,10,2,7,4,10,1,10,0,4,0,10,-1],[1,10,
2,8,7,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[4,9,1,4,1,7,7,1,3,-1,-1,-1,-1,-1,-1,-1],[4,9,1,4,1,7,0,8,1,8,7,1,-1,-1,-1,-1],[4,0,3,7,4,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[4,8,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[9,10,8,10,11,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[3,0,9,3,9,11,11,9,10,-1,-1,-1,-1,-1,-1,-1],[0,1,10,0,10,8,8,10,11,-1,-1,-1,-1,-1,-1,-1],[3,1,10,11,3,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[1,2,11,1,11,9,9,11,8,-1,-1,-1,-1,-1,-1,-1],[3,0,9,3,9,11,1,2,9,2,11,9,-1,-1,-1,-1],[0,2,11,8,0,11,-1,-1,-1,-1,
-1,-1,-1,-1,-1,-1],[3,2,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[2,3,8,2,8,10,10,8,9,-1,-1,-1,-1,-1,-1,-1],[9,10,2,0,9,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[2,3,8,2,8,10,0,1,8,1,10,8,-1,-1,-1,-1],[1,10,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[1,3,8,9,1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[0,9,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[0,3,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]];
function polygonizeGridCellMarchingCubes(a,b){let n=0;a.f[0]<b&&(n|=1);a.f[1]<b&&(n|=2);a.f[2]<b&&(n|=4);a.f[3]<b&&(n|=8);a.f[4]<b&&(n|=16);a.f[5]<b&&(n|=32);a.f[6]<b&&(n|=64);a.f[7]<b&&(n|=128);if(0==edgeTable[n])return{trianglePoints:[],triangleNormals:[]};let d=[0,0,0,0,0,0,0,0,0,0,0,0],k=[0,0,0,0,0,0,0,0,0,0,0,0];edgeTable[n]&1&&(d[0]=vertexInterpIso(b,a.v[0],a.v[1],a.f[0],a.f[1]),k[0]=normalInterpIso(b,a.n[0],a.n[1],a.f[0],a.f[1]));edgeTable[n]&2&&(d[1]=vertexInterpIso(b,a.v[1],a.v[2],a.f[1],
a.f[2]),k[1]=normalInterpIso(b,a.n[1],a.n[2],a.f[1],a.f[2]));edgeTable[n]&4&&(d[2]=vertexInterpIso(b,a.v[2],a.v[3],a.f[2],a.f[3]),k[2]=normalInterpIso(b,a.n[2],a.n[3],a.f[2],a.f[3]));edgeTable[n]&8&&(d[3]=vertexInterpIso(b,a.v[3],a.v[0],a.f[3],a.f[0]),k[3]=normalInterpIso(b,a.n[3],a.n[0],a.f[3],a.f[0]));edgeTable[n]&16&&(d[4]=vertexInterpIso(b,a.v[4],a.v[5],a.f[4],a.f[5]),k[4]=normalInterpIso(b,a.n[4],a.n[5],a.f[4],a.f[5]));edgeTable[n]&32&&(d[5]=vertexInterpIso(b,a.v[5],a.v[6],a.f[5],a.f[6]),k[5]=
normalInterpIso(b,a.n[5],a.n[6],a.f[5],a.f[6]));edgeTable[n]&64&&(d[6]=vertexInterpIso(b,a.v[6],a.v[7],a.f[6],a.f[7]),k[6]=normalInterpIso(b,a.n[6],a.n[7],a.f[6],a.f[7]));edgeTable[n]&128&&(d[7]=vertexInterpIso(b,a.v[7],a.v[4],a.f[7],a.f[4]),k[7]=normalInterpIso(b,a.n[7],a.n[4],a.f[7],a.f[4]));edgeTable[n]&256&&(d[8]=vertexInterpIso(b,a.v[0],a.v[4],a.f[0],a.f[4]),k[8]=normalInterpIso(b,a.n[0],a.n[4],a.f[0],a.f[4]));edgeTable[n]&512&&(d[9]=vertexInterpIso(b,a.v[1],a.v[5],a.f[1],a.f[5]),k[9]=normalInterpIso(b,
a.n[1],a.n[5],a.f[1],a.f[5]));edgeTable[n]&1024&&(d[10]=vertexInterpIso(b,a.v[2],a.v[6],a.f[2],a.f[6]),k[10]=normalInterpIso(b,a.n[2],a.n[6],a.f[2],a.f[6]));edgeTable[n]&2048&&(d[11]=vertexInterpIso(b,a.v[3],a.v[7],a.f[3],a.f[7]),k[11]=normalInterpIso(b,a.n[3],a.n[7],a.f[3],a.f[7]));a=[];b=[];for(let h=0;-1!=triTable[n][h];h+=3)a.push(d[triTable[n][h]]),a.push(d[triTable[n][h+1]]),a.push(d[triTable[n][h+2]]),b.push(k[triTable[n][h]]),b.push(k[triTable[n][h+1]]),b.push(k[triTable[n][h+2]]);return{trianglePoints:a,
triangleNormals:b}};function polygonizeGridCellSnapMC(a,b,n,d,k,h){var c=!1;if(a.f[0]<b)for(var l=1;8>l;l++)a.f[l]>=b&&(c=!0);else for(l=1;8>l;l++)a.f[l]<b&&(c=!0);if(!c)return{trianglePoints:[],triangleNormals:[]};c=0;for(l=0;8>l;l++)a.f[l]>b?c+=positive[l]:a.f[l]==b&&(c+=equals[l]);l=[];let g=[];for(let m=0;m<isoTable[c].length;m++)if(8>isoTable[c][m]){var e=d;let r=k,t=h;var f=isoTable[c][m];for(let p=0;3>p;p++){if(1==f%2)switch(p){case 0:t++;break;case 1:r++;break;case 2:e++}f=Math.floor(f/2)}void 0!=n.snapBackTo&&
void 0!=n.snapBackTo[e]&&void 0!=n.snapBackTo[e][r]&&void 0!=n.snapBackTo[e][r][t]?(f=snapBack(a.v[isoTable[c][m]],n.snapBackTo[e][r][t],n.weights[e][r][t]),l.push(f),e=snapBackNormal(a.n[isoTable[c][m]],n.snapBackToNormals[e][r][t],n.weights[e][r][t])):(f=a.v[isoTable[c][m]],l.push(f),e=a.n[isoTable[c][m]]);g.push(e)}else switch(isoTable[c][m]){case 8:f=vertexInterpIsoSnapMC(b,a.v[0],a.v[1],a.f[0],a.f[1]);l.push(f);g.push(normalInterpIsoSnapMC(b,a.n[0],a.n[1],a.f[0],a.f[1]));break;case 9:f=vertexInterpIsoSnapMC(b,
a.v[0],a.v[2],a.f[0],a.f[2]);l.push(f);g.push(normalInterpIsoSnapMC(b,a.n[0],a.n[2],a.f[0],a.f[2]));break;case 10:f=vertexInterpIsoSnapMC(b,a.v[1],a.v[3],a.f[1],a.f[3]);l.push(f);g.push(normalInterpIsoSnapMC(b,a.n[1],a.n[3],a.f[1],a.f[3]));break;case 11:f=vertexInterpIsoSnapMC(b,a.v[2],a.v[3],a.f[2],a.f[3]);l.push(f);g.push(normalInterpIsoSnapMC(b,a.n[2],a.n[3],a.f[2],a.f[3]));break;case 12:f=vertexInterpIsoSnapMC(b,a.v[0],a.v[4],a.f[0],a.f[4]);l.push(f);g.push(normalInterpIsoSnapMC(b,a.n[0],a.n[4],
a.f[0],a.f[4]));break;case 13:f=vertexInterpIsoSnapMC(b,a.v[1],a.v[5],a.f[1],a.f[5]);l.push(f);g.push(normalInterpIsoSnapMC(b,a.n[1],a.n[5],a.f[1],a.f[5]));break;case 14:f=vertexInterpIsoSnapMC(b,a.v[2],a.v[6],a.f[2],a.f[6]);l.push(f);g.push(normalInterpIsoSnapMC(b,a.n[2],a.n[6],a.f[2],a.f[6]));break;case 15:f=vertexInterpIsoSnapMC(b,a.v[3],a.v[7],a.f[3],a.f[7]);l.push(f);g.push(normalInterpIsoSnapMC(b,a.n[3],a.n[7],a.f[3],a.f[7]));break;case 16:f=vertexInterpIsoSnapMC(b,a.v[4],a.v[5],a.f[4],a.f[5]);
l.push(f);g.push(normalInterpIsoSnapMC(b,a.n[4],a.n[5],a.f[4],a.f[5]));break;case 17:f=vertexInterpIsoSnapMC(b,a.v[4],a.v[6],a.f[4],a.f[6]);l.push(f);g.push(normalInterpIsoSnapMC(b,a.n[4],a.n[6],a.f[4],a.f[6]));break;case 18:f=vertexInterpIsoSnapMC(b,a.v[5],a.v[7],a.f[5],a.f[7]);l.push(f);g.push(normalInterpIsoSnapMC(b,a.n[5],a.n[7],a.f[5],a.f[7]));break;case 19:f=vertexInterpIsoSnapMC(b,a.v[6],a.v[7],a.f[6],a.f[7]),l.push(f),g.push(normalInterpIsoSnapMC(b,a.n[6],a.n[7],a.f[6],a.f[7]))}return{trianglePoints:l,
triangleNormals:g}}function snapBack(a,b,n){let d=new vec3(0,0,0);d.x=a.x+n*(b.x-a.x);d.y=a.y+n*(b.y-a.y);d.z=a.z+n*(b.z-a.z);return d}function snapBackNormal(a,b,n){a=snapBack(a,b,n);return vec3normalize(a)}function vertexInterpIsoSnapMC(a,b,n,d,k){a=(a-d)/(k-d);d=new vec3(0,0,0);d.x=b.x+a*(n.x-b.x);d.y=b.y+a*(n.y-b.y);d.z=b.z+a*(n.z-b.z);return d}function normalInterpIsoSnapMC(a,b,n,d,k){a=vertexInterpIsoSnapMC(a,b,n,d,k);return vec3normalize(a)}
let positive=[2,6,18,54,162,486,1458,4374],equals=[1,3,9,27,81,243,729,2187],isoTable=[[],[],[8,12,9],[],[],[1,12,9],[8,10,13],[0,10,13],[10,12,9,13,12,10],[],[],[2,8,12],[],[1,0,2],[1,12,2],[2,13,8,2,10,13],[0,2,13,10,13,2],[13,12,2,10,13,2],[9,14,11],[0,14,11],[11,8,12,14,11,12],[11,1,14,1,9,14],[1,14,11,1,0,14],[1,14,11,1,12,14],[11,10,13,14,11,13,14,13,9,9,13,8],[0,14,13,10,13,11,11,13,14],[10,13,11,13,14,11,13,12,14],[],[],[3,8,12,3,12,9],[],[1,0,3],[1,12,3,9,3,12],[3,13,8],[0,3,13],[9,3,12,
13,12,3],[],[2,3,0],[2,3,12,8,12,3],[2,3,1],[1,0,2,1,2,3],[1,12,3,3,12,2],[2,3,13,2,13,8],[0,2,13,3,13,2],[3,12,2,13,12,3],[3,9,14],[0,14,3],[8,12,3,14,3,12],[9,14,1,1,14,3],[1,14,3,1,0,14],[1,12,3,3,12,14],[9,13,8,14,13,9,14,3,13],[0,14,13,3,13,14],[13,14,3,13,12,14],[10,11,15],[11,15,0,0,15,10],[11,12,9,15,12,11,15,10,12,10,8,12],[1,11,15],[1,0,15,0,11,15],[1,12,15,9,11,12,11,15,12],[11,13,8,15,13,11],[0,15,13,0,11,15],[9,11,12,11,15,12,13,12,15],[2,15,10],[2,15,0,0,15,10],[2,15,12,8,12,10,10,12,
15],[2,15,1],[1,0,15,0,2,15],[1,12,15,15,12,2],[2,15,13,2,13,8],[0,2,13,15,13,2],[15,12,2,13,12,15],[10,9,14,15,10,14],[0,14,15,0,15,10],[8,12,10,10,12,15,14,15,12],[9,14,1,1,14,15],[1,14,15,1,0,14],[1,12,15,15,12,14],[9,13,8,14,13,9,14,15,13],[0,14,13,15,13,14],[13,14,15,13,12,14],[],[],[4,9,8],[],[1,4,0],[1,4,9],[4,8,10,4,10,13],[0,10,4,13,4,10],[10,4,9,13,4,10],[],[2,0,4],[2,8,4],[],[1,4,2],[1,4,2],[2,10,4,2,4,8,10,13,4],[10,4,2,13,4,10],[10,4,2,13,4,10],[4,11,9,4,14,11],[0,4,11,14,11,4],[11,8,
4,14,11,4],[14,11,4,11,1,4,1,9,4],[1,4,11,11,4,14],[1,4,11,11,4,14],[11,13,14,11,10,13,14,13,4,9,4,8],[10,13,11,13,14,11,13,4,14],[10,13,11,13,14,11,13,4,14],[],[],[3,4,9,3,8,4],[],[1,4,3,0,3,4],[1,4,3,9,3,4],[3,13,4,3,4,8],[0,3,4,13,4,3],[9,3,4,13,4,3],[],[2,3,4,0,4,3],[2,3,4,8,4,3],[2,3,4,2,4,1,1,4,3],[1,4,3,3,4,2],[1,4,3,3,4,2],[2,3,4,2,4,8,13,4,3],[3,4,2,13,4,3],[3,4,2,13,4,3],[3,4,14,3,9,4],[0,4,3,14,3,4],[8,4,3,14,3,4],[9,4,1,1,4,3,14,3,4],[1,4,3,3,4,14],[1,4,3,3,4,14],[9,4,8,13,4,3,14,3,4],
[3,4,14,13,4,3],[3,4,14,13,4,3],[4,15,10,4,10,11,4,11,15],[0,4,10,11,4,0,15,4,11,15,10,4],[10,8,4,15,10,4,15,4,11,11,4,9],[1,11,4,15,1,4,15,4,11],[1,4,15,0,11,4,11,15,4],[1,4,15,9,11,4,11,15,4],[11,4,8,15,4,11,15,13,4],[0,11,4,11,15,4,13,4,15],[9,11,4,11,15,4,13,4,15],[2,4,10,15,4,2,15,10,4],[2,15,4,0,4,10,10,4,15],[2,15,4,8,4,10,10,4,15],[2,15,4,2,4,1,1,4,15],[1,4,15,15,4,2],[1,4,15,15,4,2],[2,15,4,2,4,8,13,4,15],[15,4,2,13,4,15],[15,4,2,13,4,15],[10,9,4,15,10,4,15,4,14],[0,4,10,10,4,15,14,15,4],
[8,4,10,10,4,15,14,15,4],[9,4,1,1,4,15,14,15,4],[1,4,15,15,4,14],[1,4,15,15,4,14],[9,4,8,13,4,15,14,15,4],[13,4,15,15,4,14],[13,4,15,15,4,14],[12,16,17],[0,16,17],[16,9,8,17,9,16],[16,17,1,1,17,12],[1,16,17,1,17,0],[1,16,17,1,17,9],[16,10,13,17,10,16,17,12,10,12,8,10],[0,10,17,13,16,10,16,17,10],[13,16,10,16,17,10,10,17,9],[17,2,16,2,12,16],[2,16,17,2,0,16],[2,16,17,2,8,16],[2,12,1,2,1,16,2,16,17],[1,16,2,16,17,2],[1,16,2,16,17,2],[2,12,8,2,10,17,17,10,16,10,13,16],[10,17,2,10,16,17,13,16,10],[10,
17,2,10,16,17,13,16,10],[16,14,11,17,14,16,16,11,12,12,11,9],[0,16,11,14,16,17,14,11,16],[14,16,17,14,11,16,11,8,16],[14,11,16,14,16,17,11,1,16,1,9,12],[1,16,11,11,16,14,16,17,14],[1,16,11,11,16,14,16,17,14],[11,13,14,11,10,13,14,16,17,14,13,16,9,12,8],[10,13,11,13,14,11,13,16,14,16,17,14],[10,13,11,13,14,11,13,16,14,16,17,14],[17,3,16,17,12,3,3,12,16],[3,16,17,3,17,0,3,0,16],[3,16,17,3,17,9,3,8,16],[3,17,12,3,16,17,3,1,16,3,12,1],[1,16,3,0,3,17,16,17,3],[1,16,3,9,3,17,16,17,3],[3,17,12,3,16,17,3,
13,16,3,12,8],[0,3,17,16,17,3,13,16,3],[9,3,17,16,17,3,13,16,3],[3,16,17,3,17,2,3,2,12,3,12,16],[2,3,17,0,16,3,16,17,3],[2,3,17,8,16,3,16,17,3],[2,3,17,2,12,1,1,16,3,16,17,3],[1,16,3,3,17,2,16,17,3],[1,16,3,3,17,2,16,17,3],[2,3,17,2,12,8,13,16,3,16,17,3],[3,17,2,16,17,3,13,16,3],[3,17,2,16,17,3,13,16,3],[3,12,16,3,16,17,3,17,14,3,9,12],[0,16,3,17,3,16,14,3,17],[8,16,3,17,3,16,14,3,17],[9,12,1,1,16,3,17,3,16,14,3,17],[1,16,3,3,17,14,3,16,17],[1,16,3,3,17,14,3,16,17],[9,12,8,13,16,3,17,3,16,14,3,17],
[3,17,14,3,16,17,13,16,3],[3,17,14,3,16,17,13,16,3],[17,12,11,17,11,15,17,15,16,16,15,10,16,10,12,12,10,11],[0,16,10,15,16,17,15,17,11,11,17,0,15,10,16],[10,8,16,15,10,16,15,16,17,15,17,11,11,17,9],[1,11,12,12,11,17,15,17,11,15,16,17,15,1,16],[1,16,15,0,11,17,11,15,17,16,17,15],[1,16,15,9,11,17,16,17,15,11,15,17],[11,12,8,11,17,12,15,17,11,15,16,17,15,13,16],[0,11,17,11,15,17,16,17,15,13,16,15],[9,11,17,16,17,15,13,16,15,11,15,17],[2,12,10,15,16,17,15,17,2,15,10,16,12,16,10],[2,15,17,0,16,10,10,16,
15,16,17,15],[2,15,17,8,16,10,16,17,15,10,16,15],[2,15,17,2,12,1,1,16,15,16,17,15],[1,16,15,15,17,2,16,17,15],[1,16,15,15,17,2,16,17,15],[2,15,17,2,12,8,13,16,15,16,17,15],[15,17,2,13,16,15,16,17,15],[15,17,2,13,16,15,16,17,15],[10,9,12,10,12,16,15,10,16,15,16,17,15,17,14],[0,16,10,10,16,15,16,17,15,14,15,17],[8,16,10,16,17,15,10,16,15,14,15,17],[9,12,1,1,16,15,14,15,17,16,17,15],[1,16,15,15,17,14,16,17,15],[1,16,15,15,17,14,16,17,15],[9,12,8,13,16,15,16,17,15,14,15,17],[13,16,15,16,17,15,15,17,14],
[13,16,15,16,17,15,15,17,14],[],[],[5,9,8,5,12,9],[],[1,5,0],[1,5,9,12,9,5],[5,8,10],[0,10,5],[12,9,5,10,5,9],[],[],[2,5,12,2,8,5],[],[1,5,2,0,2,5],[1,5,2,12,2,5],[2,10,5,2,5,8],[0,2,5,10,5,2],[12,2,5,10,5,2],[5,9,14,5,11,9,5,14,11],[0,5,11,14,5,0,14,11,5],[11,8,5,14,11,5,14,5,12],[1,9,5,11,1,5,14,11,5,14,5,9],[1,5,11,0,14,5,11,5,14],[1,5,11,12,14,5,11,5,14],[9,5,8,14,5,9,14,11,5,11,10,5],[0,14,5,10,5,11,11,5,14],[12,14,5,11,5,14,10,5,11],[],[],[3,5,9,3,8,5,9,5,12],[3,5,1],[0,3,5],[9,3,5,12,9,5],
[3,5,8],[0,3,5],[9,3,5,12,9,5],[],[2,3,5,2,5,0,0,5,3],[2,3,5,2,5,12,8,5,3],[2,3,5,2,5,1],[0,2,5,3,5,2],[12,2,5,3,5,2],[2,3,5,2,5,8],[0,2,5,3,5,2],[12,2,5,3,5,2],[3,5,14,3,9,5,14,5,9],[14,5,0,14,3,5,0,5,3],[14,5,12,14,3,5,8,5,3],[9,5,1,14,5,9,14,3,5],[0,14,5,3,5,14],[12,14,5,3,5,14],[9,5,8,14,5,9,14,3,5],[0,14,5,3,5,14],[12,14,5,3,5,14],[5,10,11,5,11,15],[15,5,11,11,5,0,0,5,10],[11,15,12,11,12,9,15,5,12,10,8,5],[1,11,5,15,5,11],[0,11,5,11,15,5],[9,11,12,12,11,15,12,15,5],[11,5,8,15,5,11],[0,11,5,11,
15,5],[9,11,12,12,11,15,12,15,5],[15,5,2,2,5,10],[2,15,5,2,5,0,0,5,10],[2,15,5,2,5,12,8,5,10],[2,15,5,2,5,1],[0,2,5,15,5,2],[12,2,5,15,5,2],[2,15,5,2,5,8],[0,2,5,15,5,2],[12,2,5,15,5,2],[15,5,14,14,5,9,10,9,5],[14,5,0,14,15,5,0,5,10],[14,5,12,14,15,5,8,5,10],[9,5,1,14,5,9,14,15,5],[0,14,5,15,5,14],[12,14,5,15,5,14],[9,5,8,14,5,9,14,15,5],[0,14,5,15,5,14],[12,14,5,15,5,14],[],[4,0,5],[4,9,5,8,5,9],[4,1,5],[1,4,0,1,5,4],[1,5,9,5,4,9],[4,10,5,4,8,10],[0,10,4,5,4,10],[5,4,9,10,5,9],[],[2,5,4,2,0,5],[2,
5,4,2,8,5],[2,4,1,2,5,4,2,1,5],[1,5,2,5,4,2],[1,5,2,5,4,2],[2,4,8,2,5,4,2,10,5],[5,4,2,10,5,2],[5,4,2,10,5,2],[4,14,5,4,5,9,11,9,5,14,11,5],[11,0,5,14,11,5,14,5,4],[11,8,5,14,11,5,14,5,4],[9,4,1,11,1,5,14,11,5,14,5,4],[1,5,11,11,5,14,5,4,14],[1,5,11,11,5,14,5,4,14],[9,4,8,11,10,5,14,11,5,14,5,4],[10,5,11,11,5,14,5,4,14],[10,5,11,11,5,14,5,4,14],[],[3,4,0,3,5,4,3,0,5],[3,4,9,3,5,4,3,8,5],[3,4,1,3,5,4],[0,3,4,5,4,3],[9,3,4,5,4,3],[3,4,8,3,5,4],[0,3,4,5,4,3],[9,3,4,5,4,3],[],[2,3,4,0,5,3,5,4,3],[2,3,
4,8,5,3,5,4,3],[2,3,4,2,4,1,5,4,3],[3,4,2,5,4,3],[3,4,2,5,4,3],[2,3,4,2,4,8,5,4,3],[3,4,2,5,4,3],[3,4,2,5,4,3],[3,5,14,3,9,5,5,9,4,14,5,4],[0,5,3,5,14,3,5,4,14],[8,5,3,5,14,3,5,4,14],[9,4,1,5,14,3,5,4,14],[5,14,3,5,4,14],[5,14,3,5,4,14],[9,4,8,5,14,3,5,4,14],[5,14,3,5,4,14],[5,14,3,5,4,14],[4,15,5,4,5,10,4,10,11,4,11,15],[10,0,5,11,4,0,15,4,11,15,5,4],[10,8,5,11,4,9,15,4,11,15,5,4],[11,4,1,15,4,11,15,5,4],[0,11,4,11,15,4,5,4,15],[9,11,4,11,15,4,5,4,15],[11,4,8,15,4,11,15,5,4],[0,11,4,11,15,4,5,4,
15],[9,11,4,11,15,4,5,4,15],[5,10,4,15,5,4,15,4,2,2,4,10],[2,15,4,0,5,10,5,4,15],[2,15,4,8,5,10,5,4,15],[2,15,4,2,4,1,5,4,15],[15,4,2,5,4,15],[15,4,2,5,4,15],[2,15,4,2,4,8,5,4,15],[15,4,2,5,4,15],[15,4,2,5,4,15],[15,5,14,14,5,4,5,9,4,10,9,5],[0,5,10,5,14,15,5,4,14],[8,5,10,5,14,15,5,4,14],[9,4,1,5,14,15,5,4,14],[5,14,15,5,4,14],[5,14,15,5,4,14],[9,4,8,5,14,15,5,4,14],[5,14,15,5,4,14],[5,14,15,5,4,14],[5,17,12],[0,5,17],[8,5,9,17,9,5],[12,1,17,1,5,17],[1,5,17,1,17,0],[1,5,9,5,17,9],[12,8,10,17,12,
10,17,10,5],[0,10,17,5,17,10],[10,5,17,10,17,9],[17,2,5,2,12,5],[2,5,17,2,0,5],[2,5,17,2,8,5],[2,5,17,2,1,5,2,12,1],[1,5,2,5,17,2],[1,5,2,5,17,2],[2,5,17,2,10,5,2,12,8],[5,17,2,10,5,2],[5,17,2,10,5,2],[17,14,5,14,11,5,11,9,5,12,5,9],[11,0,5,14,11,5,14,5,17],[11,8,5,14,11,5,14,5,17],[9,12,1,11,1,5,14,11,5,14,5,17],[1,5,11,11,5,14,5,17,14],[1,5,11,11,5,14,5,17,14],[9,12,8,11,10,5,14,11,5,14,5,17],[10,5,11,11,5,14,5,17,14],[10,5,11,11,5,14,5,17,14],[17,12,3,17,3,5,3,12,5],[3,5,17,3,17,0,3,0,5],[3,5,
17,3,17,9,3,8,5],[3,5,17,3,17,12,3,12,1],[0,3,17,5,17,3],[9,3,17,5,17,3],[3,5,17,3,17,12,3,12,8],[0,3,17,5,17,3],[9,3,17,5,17,3],[3,5,17,3,17,2,3,2,12,3,12,5],[2,3,17,0,5,3,5,17,3],[2,3,17,8,5,3,5,17,3],[2,3,17,2,12,1,5,17,3],[3,17,2,5,17,3],[3,17,2,5,17,3],[2,3,17,2,12,8,5,17,3],[3,17,2,5,17,3],[3,17,2,5,17,3],[3,5,14,3,9,5,5,9,12,14,5,17],[0,5,3,5,14,3,5,17,14],[8,5,3,5,14,3,5,17,14],[9,12,1,5,14,3,5,17,14],[5,14,3,5,17,14],[5,14,3,5,17,14],[9,12,8,5,14,3,5,17,14],[5,14,3,5,17,14],[5,14,3,5,17,
14],[17,12,11,17,11,15,17,15,5,12,10,11,12,5,10],[10,0,5,15,5,17,15,17,11,11,17,0],[10,8,5,15,5,17,15,17,11,11,17,9],[15,5,17,15,17,11,11,17,12,11,12,1],[0,11,17,11,15,17,5,17,15],[9,11,17,5,17,15,11,15,17],[15,5,17,15,17,11,11,17,12,11,12,8],[0,11,17,11,15,17,5,17,15],[9,11,17,5,17,15,11,15,17],[5,10,12,15,17,2,15,5,17,2,12,10],[2,15,17,0,5,10,5,17,15],[2,15,17,8,5,10,5,17,15],[2,15,17,2,12,1,5,17,15],[15,17,2,5,17,15],[15,17,2,5,17,15],[2,15,17,2,12,8,5,17,15],[15,17,2,5,17,15],[15,17,2,5,17,15],
[15,5,17,15,17,14,10,12,5,10,9,12],[0,5,10,5,17,15,17,14,15],[8,5,10,5,17,15,17,14,15],[9,12,1,5,17,15,17,14,15],[5,17,15,17,14,15],[5,17,15,17,14,15],[9,12,8,5,17,15,17,14,15],[5,17,15,17,14,15],[5,17,15,17,14,15],[13,18,16],[16,0,18,0,13,18],[16,12,9,18,16,9,18,9,13,13,9,8],[1,18,16],[1,18,0,0,18,16],[1,18,9,12,9,16,16,9,18],[16,8,10,18,16,10],[0,10,18,0,18,16],[12,9,16,16,9,18,10,18,9],[18,16,2,18,2,13,2,16,13],[2,13,18,2,18,16,2,16,0,2,0,13],[2,13,18,2,18,16,2,16,12,2,8,13],[2,18,16,2,1,18,2,
16,1],[1,18,2,0,2,16,16,2,18],[1,18,2,12,2,16,16,2,18],[2,18,16,2,10,18,2,16,8],[0,2,16,16,2,18,10,18,2],[12,2,16,16,2,18,10,18,2],[18,11,13,18,14,11,18,16,14,16,9,14,16,13,9,13,11,9],[0,13,11,13,18,11,14,11,18,14,18,16,14,16,0],[11,8,13,11,13,18,14,11,18,14,18,16,14,16,12],[1,9,16,14,18,16,14,11,18,11,1,18,14,16,9],[1,18,11,0,14,16,11,18,14,16,14,18],[1,18,11,12,14,16,16,14,18,11,18,14],[9,16,8,14,16,9,14,18,16,14,11,18,11,10,18],[0,14,16,10,18,11,16,14,18,11,18,14],[12,14,16,16,14,18,11,18,14,10,
18,11],[18,16,3,3,16,13],[3,0,13,3,16,0,3,18,16],[3,8,13,3,18,9,18,16,9,9,16,12],[3,18,16,3,16,1],[0,3,16,16,3,18],[9,3,18,9,18,16,12,9,16],[3,18,16,3,16,8],[0,3,16,16,3,18],[9,3,18,9,18,16,12,9,16],[3,2,13,3,18,2,2,18,16,2,16,13],[2,3,18,2,18,16,2,16,0,0,13,3],[2,3,18,2,18,16,2,16,12,8,13,3],[2,3,18,2,18,16,2,16,1],[0,2,16,16,2,18,3,18,2],[12,2,16,16,2,18,3,18,2],[2,3,18,2,18,16,2,16,8],[0,2,16,16,2,18,3,18,2],[12,2,16,16,2,18,3,18,2],[3,9,13,3,18,14,14,18,16,14,16,9,13,9,16],[14,16,0,14,18,16,14,
3,18,0,13,3],[14,16,12,14,18,16,14,3,18,8,13,3],[9,16,1,14,16,9,14,18,16,14,3,18],[0,14,16,3,18,14,16,14,18],[12,14,16,16,14,18,3,18,14],[9,16,8,14,16,9,14,18,16,14,3,18],[0,14,16,3,18,14,16,14,18],[12,14,16,16,14,18,3,18,14],[16,11,15,18,16,15,16,13,11,13,10,11],[15,16,11,15,18,16,11,16,0,0,13,10],[11,15,12,11,12,9,15,18,16,15,16,12,10,8,13],[1,11,16,15,18,16,15,16,11],[0,11,16,11,15,16,16,15,18],[9,11,12,12,11,15,12,15,16,16,15,18],[15,18,16,15,16,11,11,16,8],[0,11,16,11,15,16,16,15,18],[9,11,12,
12,11,15,12,15,16,16,15,18],[15,18,2,18,16,2,2,16,13,2,13,10],[2,15,18,2,18,16,2,16,0,0,13,10],[2,15,18,2,18,16,2,16,12,8,13,10],[2,15,18,2,18,16,2,16,1],[0,2,16,18,16,2,15,18,2],[12,2,16,18,16,2,15,18,2],[2,15,18,2,18,16,2,16,8],[0,2,16,18,16,2,15,18,2],[12,2,16,18,16,2,15,18,2],[15,18,14,14,18,16,14,16,9,13,9,16,10,9,13],[14,16,0,14,18,16,14,15,18,0,13,10],[14,16,12,14,18,16,14,15,18,8,13,10],[9,16,1,14,16,9,14,18,16,14,15,18],[0,14,16,15,18,14,16,14,18],[12,14,16,16,14,18,15,18,14],[9,16,8,14,
16,9,14,18,16,14,15,18],[0,14,16,15,18,14,16,14,18],[12,14,16,16,14,18,15,18,14],[4,13,18],[4,0,18,0,13,18],[4,9,18,8,13,9,13,18,9],[4,1,18],[1,18,0,0,18,4],[1,18,9,18,4,9],[4,10,18,4,8,10],[0,10,4,18,4,10],[18,4,9,10,18,9],[4,13,2,4,2,18,2,13,18],[2,18,4,2,13,18,2,0,13],[2,18,4,2,13,18,2,8,13],[2,4,1,2,18,4,2,1,18],[1,18,2,18,4,2],[1,18,2,18,4,2],[2,4,8,2,18,4,2,10,18],[18,4,2,10,18,2],[18,4,2,10,18,2],[4,13,9,4,14,18,14,11,18,11,9,13,11,13,18],[11,0,13,11,13,18,14,11,18,14,18,4],[11,8,13,11,13,
18,14,11,18,14,18,4],[9,4,1,11,1,18,14,11,18,14,18,4],[1,18,11,11,18,14,18,4,14],[1,18,11,11,18,14,18,4,14],[9,4,8,11,10,18,14,11,18,14,18,4],[10,18,11,18,4,14,11,18,14],[10,18,11,18,4,14,11,18,14],[4,13,3,4,3,18],[3,4,0,3,18,4,3,0,13],[3,4,9,3,18,4,3,8,13],[3,4,1,3,18,4],[0,3,4,18,4,3],[9,3,4,18,4,3],[3,4,8,3,18,4],[0,3,4,18,4,3],[9,3,4,18,4,3],[3,18,2,3,2,13,18,4,2,2,4,13],[2,3,18,2,18,4,0,13,3],[2,3,18,2,18,4,8,13,3],[2,3,18,2,18,4,2,4,1],[18,4,2,3,18,2],[18,4,2,3,18,2],[2,3,18,2,18,4,2,4,8],[18,
4,2,3,18,2],[18,4,2,3,18,2],[3,18,14,3,9,13,14,18,4,13,9,4],[0,13,3,18,4,14,18,14,3],[8,13,3,18,4,14,18,14,3],[9,4,1,18,4,14,18,14,3],[18,14,3,18,4,14],[18,14,3,18,4,14],[9,4,8,18,4,14,18,14,3],[18,14,3,18,4,14],[18,14,3,18,4,14],[4,13,10,4,10,11,4,11,15,4,15,18],[10,0,13,11,4,0,15,4,11,15,18,4],[10,8,13,11,4,9,15,4,11,15,18,4],[11,4,1,15,4,11,15,18,4],[0,11,4,11,15,4,18,4,15],[9,11,4,11,15,4,18,4,15],[11,4,8,15,4,11,15,18,4],[0,11,4,11,15,4,18,4,15],[9,11,4,11,15,4,18,4,15],[15,18,4,15,4,2,2,4,10,
13,10,4],[2,15,4,0,13,10,18,4,15],[2,15,4,8,13,10,18,4,15],[2,15,4,2,4,1,18,4,15],[15,4,2,18,4,15],[15,4,2,18,4,15],[2,15,4,2,4,8,18,4,15],[15,4,2,18,4,15],[15,4,2,18,4,15],[15,18,14,14,18,4,13,9,4,10,9,13],[0,13,10,18,4,14,18,14,15],[8,13,10,18,4,14,18,14,15],[9,4,1,18,4,14,18,14,15],[18,4,14,18,14,15],[18,4,14,18,14,15],[9,4,8,18,4,14,18,14,15],[18,4,14,18,14,15],[18,4,14,18,14,15],[13,17,12,18,17,13],[0,18,17,0,13,18],[8,13,9,13,18,9,17,9,18],[12,1,17,1,18,17],[1,18,17,1,17,0],[1,18,9,18,17,9],
[12,8,10,17,12,10,17,10,18],[0,10,17,18,17,10],[10,18,17,10,17,9],[17,2,18,2,13,18,2,12,13],[2,18,17,2,13,18,2,0,13],[2,18,17,2,13,18,2,8,13],[2,18,17,2,1,18,2,12,1],[1,18,2,18,17,2],[1,18,2,18,17,2],[2,18,17,2,10,18,2,12,8],[18,17,2,10,18,2],[18,17,2,10,18,2],[17,14,18,11,13,18,14,11,18,11,9,13,12,13,9],[11,0,13,11,13,18,14,11,18,14,18,17],[11,8,13,11,13,18,14,11,18,14,18,17],[9,12,1,11,1,18,14,11,18,14,18,17],[1,18,11,11,18,14,18,17,14],[1,18,11,11,18,14,18,17,14],[9,12,8,11,10,18,14,11,18,14,18,
17],[10,18,11,18,17,14,11,18,14],[10,18,11,18,17,14,11,18,14],[17,12,3,17,3,18,3,12,13],[3,18,17,3,17,0,3,0,13],[3,18,17,3,17,9,3,8,13],[3,18,17,3,17,12,3,12,1],[0,3,17,18,17,3],[9,3,17,18,17,3],[3,18,17,3,17,12,3,12,8],[0,3,17,18,17,3],[9,3,17,18,17,3],[3,18,17,3,17,2,3,2,12,3,12,13],[2,3,17,0,13,3,18,17,3],[2,3,17,8,13,3,18,17,3],[2,3,17,2,12,1,18,17,3],[3,17,2,18,17,3],[3,17,2,18,17,3],[2,3,17,2,12,8,18,17,3],[3,17,2,18,17,3],[3,17,2,18,17,3],[3,18,14,3,9,13,14,18,17,13,9,12],[0,13,3,18,17,14,
18,14,3],[8,13,3,18,17,14,18,14,3],[9,12,1,18,17,14,18,14,3],[18,14,3,18,17,14],[18,14,3,18,17,14],[9,12,8,18,17,14,18,14,3],[18,14,3,18,17,14],[18,14,3,18,17,14],[17,12,11,17,11,15,17,15,18,12,10,11,12,13,10],[10,0,13,15,18,17,15,17,11,11,17,0],[10,8,13,15,18,17,15,17,11,11,17,9],[15,18,17,15,17,11,11,17,12,11,12,1],[0,11,17,11,15,17,18,17,15],[9,11,17,11,15,17,18,17,15],[15,18,17,15,17,11,11,17,12,11,12,8],[0,11,17,11,15,17,18,17,15],[9,11,17,11,15,17,18,17,15],[15,17,2,15,18,17,2,12,10,13,10,12],
[2,15,17,0,13,10,18,17,15],[2,15,17,8,13,10,18,17,15],[2,15,17,2,12,1,18,17,15],[15,17,2,18,17,15],[15,17,2,18,17,15],[2,15,17,2,12,8,18,17,15],[15,17,2,18,17,15],[15,17,2,18,17,15],[15,18,17,15,17,14,10,12,13,10,9,12],[0,13,10,17,14,15,18,17,15],[8,13,10,17,14,15,18,17,15],[9,12,1,17,14,15,18,17,15],[17,14,15,18,17,15],[17,14,15,18,17,15],[9,12,8,17,14,15,18,17,15],[17,14,15,18,17,15],[17,14,15,18,17,15],[],[],[6,8,12,6,9,8],[],[],[1,12,6,1,6,9],[6,13,8,6,8,10,6,10,13],[0,10,6,13,0,6,13,6,10],[10,
6,9,13,6,10,13,12,6],[],[2,0,6],[2,8,6,12,6,8],[],[1,6,2,1,0,6],[1,6,2,1,12,6],[2,10,6,2,6,8,10,13,6,13,8,6],[13,0,6,13,6,10,10,6,2],[13,12,6,13,6,10,10,6,2],[6,11,9],[0,6,11],[12,6,8,11,8,6],[11,1,6,1,9,6],[1,6,11,1,0,6],[1,6,11,1,12,6],[11,10,6,10,13,6,13,8,6,9,6,8],[13,0,6,13,6,10,10,6,11],[13,12,6,13,6,10,10,6,11],[],[],[3,6,9,3,8,6,12,6,8],[],[1,6,3,1,0,6,0,3,6],[1,6,3,1,12,6,9,3,6],[3,13,6,3,6,8,13,8,6],[13,0,6,13,6,3,0,3,6],[13,12,6,13,6,3,9,3,6],[3,2,6],[0,6,3],[8,6,3,12,6,8],[2,6,1,1,6,3],
[1,6,3,1,0,6],[1,6,3,1,12,6],[2,6,8,8,6,13,13,6,3],[13,0,6,13,6,3],[13,12,6,13,6,3],[3,9,6],[0,6,3],[8,6,3,12,6,8],[9,6,1,1,6,3],[1,6,3,1,0,6],[1,6,3,1,12,6],[8,6,13,9,6,8,13,6,3],[13,0,6,13,6,3],[13,12,6,13,6,3],[6,15,10,6,10,11],[11,6,0,0,6,10,15,10,6],[11,6,9,10,8,12,10,12,15,15,12,6],[15,1,6,1,11,6],[1,6,15,1,0,6,0,11,6],[1,6,15,1,12,6,9,11,6],[15,13,6,13,8,6,11,6,8],[13,0,6,13,6,15,0,11,6],[13,12,6,13,6,15,9,11,6],[2,6,10,15,10,6],[0,6,10,10,6,15],[8,12,10,12,15,10,12,6,15],[2,6,1,1,6,15],[1,
6,15,1,0,6],[1,6,15,1,12,6],[2,6,8,8,6,13,13,6,15],[13,0,6,13,6,15],[13,12,6,13,6,15],[10,9,6,15,10,6],[0,6,10,10,6,15],[8,12,10,12,15,10,12,6,15],[9,6,1,1,6,15],[1,6,15,1,0,6],[1,6,15,1,12,6],[8,6,13,9,6,8,13,6,15],[13,0,6,13,6,15],[13,12,6,13,6,15],[],[4,6,0],[4,6,8,9,8,6],[],[1,4,6,1,6,0],[1,4,6,1,6,9],[4,6,13,4,8,6,10,6,8,13,6,10],[10,6,0,13,6,10,13,4,6],[10,6,9,13,6,10,13,4,6],[4,6,2],[2,0,4,2,4,6],[2,8,6,6,8,4],[2,4,1,2,1,6,1,4,6],[1,6,2,1,4,6],[1,6,2,1,4,6],[2,4,8,2,10,6,10,13,6,13,4,6],[10,
6,2,13,6,10,13,4,6],[10,6,2,13,6,10,13,4,6],[4,6,11,4,11,9],[0,4,11,6,11,4],[6,8,4,11,8,6],[9,4,1,1,4,6,11,1,6],[1,6,11,1,4,6],[1,6,11,1,4,6],[9,4,8,10,13,6,11,10,6,13,4,6],[10,6,11,13,6,10,13,4,6],[10,6,11,13,6,10,13,4,6],[],[3,0,4,3,4,6,3,6,0],[3,8,4,3,4,6,3,6,9],[],[1,4,3,0,3,6,6,3,4],[1,4,3,9,3,6,6,3,4],[3,13,6,3,6,8,6,4,8,13,4,6],[0,3,6,6,3,13,6,13,4],[9,3,6,6,3,13,6,13,4],[3,2,4,3,4,6],[0,4,3,6,3,4],[8,4,3,6,3,4],[2,4,1,1,4,3,6,3,4],[1,4,3,3,4,6],[1,4,3,3,4,6],[2,4,8,6,3,13,6,13,4],[3,13,6,
13,4,6],[3,13,6,13,4,6],[3,9,4,3,4,6],[0,4,3,6,3,4],[8,4,3,6,3,4],[9,4,1,1,4,3,6,3,4],[1,4,3,3,4,6],[1,4,3,3,4,6],[9,4,8,6,3,13,6,13,4],[3,13,6,13,4,6],[3,13,6,13,4,6],[4,6,15,4,11,6,4,10,11,4,15,10],[11,6,0,10,0,4,15,10,4,15,4,6],[11,6,9,10,8,4,15,10,4,15,4,6],[6,4,11,15,4,6,15,1,4,1,11,4],[1,4,15,0,11,6,6,15,4],[1,4,15,9,11,6,6,15,4],[15,13,6,13,4,6,6,4,8,11,6,8],[0,11,6,6,15,13,6,13,4],[9,11,6,6,15,13,6,13,4],[10,2,4,15,10,4,15,4,6],[0,4,10,10,4,15,6,15,4],[8,4,10,10,4,15,6,15,4],[2,4,1,1,4,15,
6,15,4],[1,4,15,15,4,6],[1,4,15,15,4,6],[2,4,8,6,15,13,6,13,4],[15,13,6,13,4,6],[15,13,6,13,4,6],[10,9,4,15,10,4,15,4,6],[0,4,10,10,4,15,6,15,4],[8,4,10,10,4,15,6,15,4],[9,4,1,1,4,15,6,15,4],[1,4,15,15,4,6],[1,4,15,15,4,6],[9,4,8,6,15,13,6,13,4],[15,13,6,13,4,6],[15,13,6,13,4,6],[6,12,16],[0,16,6],[9,8,6,16,6,8],[16,6,1,1,6,12],[1,16,6,1,6,0],[1,16,6,1,6,9],[16,6,13,13,6,10,10,6,8,12,8,6],[10,6,0,13,6,10,13,16,6],[10,6,9,13,6,10,13,16,6],[12,16,2,2,16,6],[2,16,6,2,0,16],[2,8,6,6,8,16],[2,1,6,2,12,
1,1,16,6],[1,6,2,1,16,6],[1,6,2,1,16,6],[2,10,6,2,12,8,10,13,6,13,16,6],[10,6,2,13,6,10,13,16,6],[10,6,2,13,6,10,13,16,6],[12,11,9,16,11,12,16,6,11],[0,16,11,6,11,16],[11,16,6,11,8,16],[9,12,1,1,16,6,11,1,6],[1,6,11,1,16,6],[1,6,11,1,16,6],[9,12,8,10,13,6,11,10,6,13,16,6],[10,6,11,13,6,10,13,16,6],[10,6,11,13,6,10,13,16,6],[16,3,12,16,6,3,3,6,12],[3,16,6,3,0,16,3,6,0],[3,16,6,3,8,16,3,6,9],[3,16,6,3,1,16,3,12,1,3,6,12],[1,16,3,0,3,6,6,3,16],[1,16,3,9,3,6,6,3,16],[3,13,6,3,6,8,6,12,8,13,16,6],[0,3,
6,6,3,13,6,13,16],[9,3,6,6,3,13,6,13,16],[3,16,6,3,12,16,3,2,12],[0,16,3,6,3,16],[8,16,3,6,3,16],[2,12,1,1,16,3,6,3,16],[1,16,3,3,16,6],[1,16,3,3,16,6],[2,12,8,6,3,13,6,13,16],[3,13,6,13,16,6],[3,13,6,13,16,6],[3,16,6,3,12,16,3,9,12],[0,16,3,6,3,16],[8,16,3,6,3,16],[9,12,1,1,16,3,6,3,16],[1,16,3,3,16,6],[1,16,3,3,16,6],[9,12,8,6,3,13,6,13,16],[3,13,6,13,16,6],[3,13,6,13,16,6],[16,10,12,16,15,10,16,6,15,12,10,11,12,11,6],[11,6,0,15,16,6,15,10,16,10,0,16],[11,6,9,15,16,6,15,10,16,10,8,16],[6,12,11,
15,1,16,15,16,6,1,11,12],[1,16,15,0,11,6,6,15,16],[1,16,15,9,11,6,6,15,16],[15,16,6,15,13,16,11,6,12,11,12,8],[0,11,6,6,15,16,16,15,13],[9,11,6,6,15,16,16,15,13],[15,16,6,15,10,16,10,12,16,10,2,12],[0,16,10,10,16,15,6,15,16],[8,16,10,6,15,16,10,16,15],[2,12,1,1,16,15,6,15,16],[1,16,15,15,16,6],[1,16,15,15,16,6],[2,12,8,6,15,16,16,15,13],[15,13,16,15,16,6],[15,13,16,15,16,6],[15,16,6,15,10,16,10,12,16,10,9,12],[0,16,10,10,16,15,6,15,16],[8,16,10,6,15,16,10,16,15],[9,12,1,1,16,15,6,15,16],[1,16,15,
15,16,6],[1,16,15,15,16,6],[9,12,8,6,15,16,16,15,13],[15,13,16,15,16,6],[15,13,16,15,16,6],[],[],[5,12,6,5,6,8,9,8,6],[],[1,5,6,1,6,0,0,6,5],[1,5,6,1,6,9,12,6,5],[5,6,10,5,8,6,10,6,8],[10,6,0,10,5,6,0,6,5],[10,6,9,10,5,6,12,6,5],[],[2,0,5,2,5,6,0,6,5],[2,8,5,2,5,6,12,6,5],[],[1,5,2,0,6,5,6,2,5],[1,5,2,6,2,5,12,6,5],[2,10,6,2,6,8,6,5,8,10,5,6],[0,6,5,6,2,10,6,10,5],[6,2,10,6,10,5,12,6,5],[5,6,11,5,9,6,5,11,9],[0,6,5,11,0,5,11,5,6],[11,8,5,11,5,6,12,6,5],[6,5,9,11,5,6,11,1,5,1,9,5],[1,5,11,0,6,5,6,
11,5],[1,5,11,6,11,5,12,6,5],[11,10,6,10,5,6,6,5,8,9,6,8],[0,6,5,6,11,10,6,10,5],[6,11,10,6,10,5,12,6,5],[],[3,0,5,3,5,6,3,6,0,0,6,5],[3,8,5,3,5,6,3,6,9,12,6,5],[3,5,6,3,6,1,1,6,5],[0,6,5,0,3,6,6,3,5],[9,3,6,6,3,5,12,6,5],[3,5,6,3,6,8,8,6,5],[0,6,5,0,3,6,6,3,5],[9,3,6,6,3,5,12,6,5],[3,2,5,3,5,6,2,6,5],[6,5,0,6,3,5,0,5,3],[6,5,12,6,3,5,8,5,3],[2,6,5,2,5,1,6,3,5],[0,6,5,3,5,6],[3,5,6,12,6,5],[2,6,8,8,6,5,6,3,5],[0,6,5,3,5,6],[3,5,6,12,6,5],[3,9,5,3,5,6,9,6,5],[6,5,0,6,3,5,0,5,3],[6,5,12,6,3,5,8,5,3],
[9,5,1,9,6,5,6,3,5],[0,6,5,3,5,6],[3,5,6,12,6,5],[8,6,5,9,6,8,6,3,5],[0,6,5,3,5,6],[3,5,6,12,6,5],[5,6,15,5,10,6,11,6,10],[10,0,5,0,6,5,11,6,0,15,5,6],[10,8,5,11,6,9,12,6,5,15,5,6],[11,6,1,1,6,5,15,5,6],[0,6,5,0,11,6,6,15,5],[9,11,6,6,15,5,12,6,5],[8,6,5,11,6,8,15,5,6],[0,6,5,0,11,6,6,15,5],[9,11,6,6,15,5,12,6,5],[10,2,5,2,6,5,15,5,6],[6,5,0,6,15,5,0,5,10],[6,5,12,6,15,5,8,5,10],[2,6,5,2,5,1,6,15,5],[0,6,5,15,5,6],[15,5,6,12,6,5],[2,6,8,8,6,5,6,15,5],[0,6,5,15,5,6],[15,5,6,12,6,5],[10,9,5,9,6,5,15,
5,6],[6,5,0,6,15,5,0,5,10],[6,5,12,6,15,5,8,5,10],[9,5,1,9,6,5,6,15,5],[0,6,5,15,5,6],[15,5,6,12,6,5],[8,6,5,9,6,8,6,15,5],[0,6,5,15,5,6],[15,5,6,12,6,5],[5,6,4],[0,5,6],[8,5,6,9,8,6],[4,1,6,1,5,6],[1,5,6,1,6,0],[1,5,6,1,6,9],[4,8,6,8,10,6,10,5,6],[10,6,0,10,5,6],[10,6,9,10,5,6],[4,5,2,2,5,6],[2,5,6,2,0,5],[2,5,6,2,8,5],[2,4,1,2,5,6,2,1,5],[1,5,2,5,6,2],[1,5,2,5,6,2],[2,4,8,2,10,6,10,5,6],[10,6,2,5,6,10],[10,6,2,5,6,10],[4,5,9,9,5,11,11,5,6],[11,0,5,11,5,6],[11,8,5,11,5,6],[9,4,1,11,1,5,11,5,6],[1,
5,11,5,6,11],[1,5,11,5,6,11],[9,4,8,10,5,6,11,10,6],[10,6,11,5,6,10],[10,6,11,5,6,10],[4,5,3,4,3,6,3,5,6],[3,5,6,3,6,0,3,0,5],[3,5,6,3,6,9,3,8,5],[3,4,1,3,6,4,3,5,6],[0,3,6,5,6,3],[9,3,6,5,6,3],[3,6,8,3,5,6,8,6,4],[0,3,6,5,6,3],[9,3,6,5,6,3],[3,2,4,3,4,5,3,5,6],[0,5,3,5,6,3],[8,5,3,5,6,3],[2,4,1,5,6,3],[5,6,3],[5,6,3],[2,4,8,5,6,3],[5,6,3],[5,6,3],[3,9,5,3,5,6,9,4,5],[0,5,3,5,6,3],[8,5,3,5,6,3],[9,4,1,5,6,3],[5,6,3],[5,6,3],[9,4,8,5,6,3],[5,6,3],[5,6,3],[4,5,10,4,11,6,4,10,11,15,5,6],[15,5,6,11,6,
0,10,0,5],[15,5,6,11,6,9,10,8,5],[15,5,6,11,6,4,11,4,1],[0,11,6,5,6,15],[9,11,6,5,6,15],[11,6,8,8,6,4,15,5,6],[0,11,6,5,6,15],[9,11,6,5,6,15],[15,5,6,10,4,5,10,2,4],[0,5,10,5,6,15],[8,5,10,5,6,15],[2,4,1,5,6,15],[5,6,15],[5,6,15],[2,4,8,5,6,15],[5,6,15],[5,6,15],[10,9,5,9,4,5,15,5,6],[0,5,10,5,6,15],[8,5,10,5,6,15],[9,4,1,5,6,15],[5,6,15],[5,6,15],[9,4,8,5,6,15],[5,6,15],[5,6,15],[5,6,12],[0,5,6],[8,5,6,9,8,6],[12,1,6,1,5,6],[1,5,6,1,6,0],[1,5,6,1,6,9],[8,10,6,12,8,6,10,5,6],[10,6,0,10,5,6],[10,6,
9,10,5,6],[12,5,2,2,5,6],[2,5,6,2,0,5],[2,5,6,2,8,5],[2,5,6,2,1,5,2,12,1],[1,5,2,5,6,2],[1,5,2,5,6,2],[2,10,6,2,12,8,10,5,6],[10,6,2,5,6,10],[10,6,2,5,6,10],[12,5,9,9,5,11,11,5,6],[11,0,5,11,5,6],[11,8,5,11,5,6],[9,12,1,11,1,5,11,5,6],[1,5,11,5,6,11],[1,5,11,5,6,11],[9,12,8,10,5,6,11,10,6],[10,6,11,5,6,10],[10,6,11,5,6,10],[12,3,6,12,5,3,3,5,6],[3,5,6,3,6,0,3,0,5],[3,5,6,3,6,9,3,8,5],[3,6,12,3,12,1,3,5,6],[0,3,6,5,6,3],[9,3,6,5,6,3],[3,6,8,3,5,6,8,6,12],[0,3,6,5,6,3],[9,3,6,5,6,3],[3,12,5,3,2,12,
3,5,6],[0,5,3,5,6,3],[8,5,3,5,6,3],[2,12,1,5,6,3],[5,6,3],[5,6,3],[2,12,8,5,6,3],[5,6,3],[5,6,3],[3,9,5,3,5,6,9,12,5],[0,5,3,5,6,3],[8,5,3,5,6,3],[9,12,1,5,6,3],[5,6,3],[5,6,3],[9,12,8,5,6,3],[5,6,3],[5,6,3],[12,11,6,12,10,11,12,5,10,15,5,6],[15,5,6,11,6,0,10,0,5],[15,5,6,11,6,9,10,8,5],[15,5,6,11,12,1,11,6,12],[0,11,6,5,6,15],[9,11,6,5,6,15],[11,6,12,11,12,8,15,5,6],[0,11,6,5,6,15],[9,11,6,5,6,15],[15,5,6,10,2,12,10,12,5],[0,5,10,5,6,15],[8,5,10,5,6,15],[2,12,1,5,6,15],[5,6,15],[5,6,15],[2,12,8,
5,6,15],[5,6,15],[5,6,15],[10,12,5,10,9,12,15,5,6],[0,5,10,5,6,15],[8,5,10,5,6,15],[9,12,1,5,6,15],[5,6,15],[5,6,15],[9,12,8,5,6,15],[5,6,15],[5,6,15],[6,13,18,6,16,13],[16,0,6,0,13,6,18,6,13],[16,12,6,9,8,13,9,13,18,9,18,6],[18,6,1,1,6,16],[1,18,6,1,6,0,0,6,16],[1,18,6,1,6,9,12,6,16],[18,6,10,10,6,8,16,8,6],[10,6,0,10,18,6,0,6,16],[10,6,9,10,18,6,12,6,16],[18,2,13,18,6,2,2,6,16,13,2,16],[2,18,6,2,13,18,2,0,13,0,6,16],[2,18,6,2,13,18,2,8,13,12,6,16],[2,18,6,2,1,18,2,16,1,2,6,16],[1,18,2,0,6,16,6,
2,18],[1,18,2,6,2,18,12,6,16],[2,10,6,2,6,8,6,16,8,10,18,6],[0,6,16,6,2,10,6,10,18],[6,2,10,6,10,18,12,6,16],[18,11,13,18,6,11,13,11,9,16,13,9,16,9,6],[0,6,16,11,18,6,11,13,18,11,0,13],[11,18,6,11,13,18,11,8,13,12,6,16],[6,16,9,11,1,18,11,18,6,1,9,16],[1,18,11,0,6,16,6,11,18],[1,18,11,6,11,18,12,6,16],[11,18,6,11,10,18,9,6,16,9,16,8],[0,6,16,6,11,18,18,11,10],[6,11,18,12,6,16,18,11,10],[18,6,3,3,6,13,16,13,6],[3,18,6,3,6,0,3,0,13,0,6,16],[3,18,6,3,6,9,3,8,13,12,6,16],[3,18,6,3,6,1,1,6,16],[0,6,16,
0,3,6,6,3,18],[9,3,6,6,3,18,12,6,16],[3,18,6,3,6,8,8,6,16],[0,6,16,0,3,6,6,3,18],[9,3,6,6,3,18,12,6,16],[3,18,6,3,2,13,13,2,16,2,6,16],[6,16,0,6,3,18,0,13,3],[6,16,12,6,3,18,8,13,3],[2,6,16,2,16,1,6,3,18],[0,6,16,3,18,6],[3,18,6,12,6,16],[2,6,8,8,6,16,6,3,18],[0,6,16,3,18,6],[3,18,6,12,6,16],[3,18,6,3,9,13,13,9,16,9,6,16],[6,16,0,6,3,18,0,13,3],[6,16,12,6,3,18,8,13,3],[9,16,1,9,6,16,6,3,18],[0,6,16,3,18,6],[3,18,6,12,6,16],[9,16,8,9,6,16,6,3,18],[0,6,16,3,18,6],[3,18,6,12,6,16],[18,6,15,11,13,10,
11,16,13,11,6,16],[10,0,13,0,6,16,11,6,0,15,18,6],[10,8,13,11,6,9,12,6,16,15,18,6],[11,6,1,1,6,16,15,18,6],[0,6,16,0,11,6,6,15,18],[9,11,6,6,15,18,12,6,16],[8,6,16,11,6,8,15,18,6],[0,6,16,0,11,6,6,15,18],[9,11,6,6,15,18,12,6,16],[10,2,13,13,2,16,2,6,16,15,18,6],[6,16,0,6,15,18,0,13,10],[6,16,12,6,15,18,8,13,10],[2,6,16,2,16,1,6,15,18],[0,6,16,15,18,6],[15,18,6,12,6,16],[2,6,8,8,6,16,6,15,18],[0,6,16,15,18,6],[15,18,6,12,6,16],[10,9,13,13,9,16,9,6,16,15,18,6],[6,16,0,6,15,18,0,13,10],[6,16,12,6,15,
18,8,13,10],[9,16,1,9,6,16,6,15,18],[0,6,16,15,18,6],[15,18,6,12,6,16],[9,16,8,9,6,16,6,15,18],[0,6,16,15,18,6],[15,18,6,12,6,16],[4,13,6,18,6,13],[0,13,6,13,18,6],[9,8,13,9,13,18,9,18,6],[4,1,6,1,18,6],[1,18,6,1,6,0],[1,18,6,1,6,9],[4,8,6,8,10,6,10,18,6],[10,6,0,10,18,6],[10,6,9,10,18,6],[4,13,2,13,18,2,2,18,6],[2,18,6,2,13,18,2,0,13],[2,18,6,2,13,18,2,8,13],[2,4,1,2,18,6,2,1,18],[1,18,2,18,6,2],[1,18,2,18,6,2],[2,4,8,2,10,6,10,18,6],[10,6,2,18,6,10],[10,6,2,18,6,10],[4,13,9,9,13,11,11,18,6,13,18,
11],[11,0,13,11,13,18,11,18,6],[11,8,13,11,13,18,11,18,6],[9,4,1,11,1,18,11,18,6],[1,18,11,18,6,11],[1,18,11,18,6,11],[9,4,8,11,10,18,11,18,6],[10,18,11,18,6,11],[10,18,11,18,6,11],[4,3,6,4,13,3,3,18,6],[3,18,6,3,6,0,3,0,13],[3,18,6,3,6,9,3,8,13],[3,4,1,3,6,4,3,18,6],[0,3,6,18,6,3],[9,3,6,18,6,3],[3,6,8,3,18,6,8,6,4],[0,3,6,18,6,3],[9,3,6,18,6,3],[3,2,13,3,18,6,13,2,4],[0,13,3,18,6,3],[8,13,3,18,6,3],[2,4,1,18,6,3],[18,6,3],[18,6,3],[2,4,8,18,6,3],[18,6,3],[18,6,3],[3,9,13,3,18,6,9,4,13],[0,13,3,
18,6,3],[8,13,3,18,6,3],[9,4,1,18,6,3],[18,6,3],[18,6,3],[9,4,8,18,6,3],[18,6,3],[18,6,3],[4,11,6,4,10,11,4,13,10,15,18,6],[15,18,6,11,6,0,10,0,13],[15,18,6,11,6,9,10,8,13],[15,18,6,11,6,4,11,4,1],[0,11,6,18,6,15],[9,11,6,18,6,15],[11,6,8,8,6,4,15,18,6],[0,11,6,18,6,15],[9,11,6,18,6,15],[15,18,6,10,4,13,10,2,4],[0,13,10,18,6,15],[8,13,10,18,6,15],[2,4,1,18,6,15],[18,6,15],[18,6,15],[2,4,8,18,6,15],[18,6,15],[18,6,15],[10,9,13,9,4,13,15,18,6],[0,13,10,18,6,15],[8,13,10,18,6,15],[9,4,1,18,6,15],[18,
6,15],[18,6,15],[9,4,8,18,6,15],[18,6,15],[18,6,15],[13,6,12,18,6,13],[0,13,6,13,18,6],[9,8,13,9,13,18,9,18,6],[12,1,6,1,18,6],[1,18,6,1,6,0],[1,18,6,1,6,9],[8,10,6,12,8,6,10,18,6],[10,6,0,10,18,6],[10,6,9,10,18,6],[12,13,2,13,18,2,2,18,6],[2,18,6,2,13,18,2,0,13],[2,18,6,2,13,18,2,8,13],[2,18,6,2,1,18,2,12,1],[1,18,2,18,6,2],[1,18,2,18,6,2],[2,10,6,2,12,8,10,18,6],[10,6,2,18,6,10],[10,6,2,18,6,10],[12,13,9,13,18,11,9,13,11,11,18,6],[11,0,13,11,13,18,11,18,6],[11,8,13,11,13,18,11,18,6],[9,12,1,11,
1,18,11,18,6],[1,18,11,18,6,11],[1,18,11,18,6,11],[9,12,8,11,10,18,11,18,6],[10,18,11,18,6,11],[10,18,11,18,6,11],[12,3,6,12,13,3,3,18,6],[3,18,6,3,6,0,3,0,13],[3,18,6,3,6,9,3,8,13],[3,6,12,3,12,1,3,18,6],[0,3,6,18,6,3],[9,3,6,18,6,3],[3,6,8,3,18,6,8,6,12],[0,3,6,18,6,3],[9,3,6,18,6,3],[3,12,13,3,2,12,3,18,6],[0,13,3,18,6,3],[8,13,3,18,6,3],[2,12,1,18,6,3],[18,6,3],[18,6,3],[2,12,8,18,6,3],[18,6,3],[18,6,3],[3,9,13,3,18,6,9,12,13],[0,13,3,18,6,3],[8,13,3,18,6,3],[9,12,1,18,6,3],[18,6,3],[18,6,3],
[9,12,8,18,6,3],[18,6,3],[18,6,3],[12,11,6,12,10,11,12,13,10,15,18,6],[15,18,6,11,6,0,10,0,13],[15,18,6,11,6,9,10,8,13],[15,18,6,11,12,1,11,6,12],[0,11,6,18,6,15],[9,11,6,18,6,15],[11,6,12,11,12,8,15,18,6],[0,11,6,18,6,15],[9,11,6,18,6,15],[15,18,6,10,2,12,10,12,13],[0,13,10,18,6,15],[8,13,10,18,6,15],[2,12,1,18,6,15],[18,6,15],[18,6,15],[2,12,8,18,6,15],[18,6,15],[18,6,15],[10,12,13,10,9,12,15,18,6],[0,13,10,18,6,15],[8,13,10,18,6,15],[9,12,1,18,6,15],[18,6,15],[18,6,15],[9,12,8,18,6,15],[18,6,15],
[18,6,15],[14,17,19],[17,19,0,0,19,14],[14,9,8,19,14,8,19,8,17,17,8,12],[19,1,17,19,14,1,1,14,17],[1,19,14,1,17,19,1,0,17,1,14,0],[1,19,14,1,17,19,1,12,17,1,14,9],[19,14,10,19,10,13,19,13,17,17,13,8,17,8,14,14,8,10],[0,10,14,14,10,19,13,19,10,13,17,19,13,0,17],[10,14,9,10,19,14,13,19,10,13,17,19,13,12,17],[2,17,19],[2,0,19,0,17,19],[2,8,19,12,17,8,17,19,8],[2,17,1,2,1,19,1,17,19],[1,19,2,1,17,19,1,0,17],[1,19,2,1,17,19,1,12,17],[2,17,8,2,10,19,10,13,19,13,8,17,13,17,19],[13,0,17,13,17,19,13,19,10,
10,19,2],[13,12,17,13,17,19,13,19,10,10,19,2],[17,11,9,19,11,17],[0,19,11,0,17,19],[12,17,8,17,19,8,11,8,19],[11,1,19,1,17,19,1,9,17],[1,19,11,1,17,19,1,0,17],[1,19,11,1,17,19,1,12,17],[11,10,19,13,17,19,10,13,19,13,8,17,9,17,8],[13,0,17,13,17,19,13,19,10,10,19,11],[13,12,17,13,17,19,13,19,10,10,19,11],[19,3,17,3,14,17],[3,14,0,3,0,17,3,17,19],[3,8,19,3,14,9,12,17,8,19,8,17],[3,14,1,3,1,19,1,17,19,1,14,17],[1,19,3,1,17,19,1,0,17,0,3,14],[1,19,3,1,17,19,1,12,17,9,3,14],[3,14,8,3,13,19,13,17,19,13,
8,17,14,17,8],[13,0,17,13,17,19,13,19,3,0,3,14],[13,12,17,13,17,19,13,19,3,9,3,14],[3,17,19,3,2,17],[0,17,3,17,19,3],[8,19,3,8,17,19,12,17,8],[2,17,1,17,19,1,1,19,3],[1,19,3,1,17,19,1,0,17],[1,19,3,1,17,19,1,12,17],[2,17,8,8,17,13,17,19,13,13,19,3],[13,0,17,13,17,19,13,19,3],[13,12,17,13,17,19,13,19,3],[3,17,19,3,9,17],[0,17,3,17,19,3],[8,19,3,8,17,19,12,17,8],[9,17,1,17,19,1,1,19,3],[1,19,3,1,17,19,1,0,17],[1,19,3,1,17,19,1,12,17],[8,17,13,9,17,8,17,19,13,13,19,3],[13,0,17,13,17,19,13,19,3],[13,
12,17,13,17,19,13,19,3],[14,10,11,17,10,14,17,15,10,19,15,17],[11,14,0,0,17,10,15,10,17,15,17,19],[11,14,9,10,8,12,10,12,15,15,12,17,15,17,19],[15,1,19,19,1,17,1,14,17,1,11,14],[1,19,15,1,17,19,1,0,17,0,11,14],[1,19,15,1,17,19,1,12,17,9,11,14],[15,13,19,13,17,19,13,8,17,14,17,8,11,14,8],[13,0,17,13,17,19,13,19,15,0,11,14],[13,12,17,13,17,19,13,19,15,9,11,14],[2,17,10,15,17,19,15,10,17],[0,17,10,10,17,15,17,19,15],[8,12,10,12,15,10,12,17,15,17,19,15],[2,17,1,1,17,19,1,19,15],[1,19,15,1,17,19,1,0,17],
[1,19,15,1,17,19,1,12,17],[2,17,8,8,17,13,17,19,13,13,19,15],[13,0,17,13,17,19,13,19,15],[13,12,17,13,17,19,13,19,15],[15,17,19,15,10,17,10,9,17],[0,17,10,10,17,15,17,19,15],[8,12,10,12,15,10,12,17,15,17,19,15],[9,17,1,1,17,19,1,19,15],[1,19,15,1,17,19,1,0,17],[1,19,15,1,17,19,1,12,17],[8,17,13,9,17,8,17,19,13,13,19,15],[13,0,17,13,17,19,13,19,15],[13,12,17,13,17,19,13,19,15],[4,19,14],[4,19,0,0,19,14],[4,19,8,9,8,14,14,8,19],[4,1,14,4,19,1,1,19,14],[1,4,19,1,19,14,1,14,0],[1,4,19,1,19,14,1,14,9],
[4,8,14,4,19,13,13,19,10,10,14,8,10,19,14],[10,14,0,10,19,14,13,19,10,13,4,19],[10,14,9,10,19,14,13,19,10,13,4,19],[4,19,2],[2,0,19,0,4,19],[2,8,19,19,8,4],[2,4,1,2,1,19,1,4,19],[1,19,2,1,4,19],[1,19,2,1,4,19],[2,4,8,2,10,19,10,13,19,13,4,19],[10,19,2,13,19,10,13,4,19],[10,19,2,13,19,10,13,4,19],[4,19,11,4,11,9],[0,4,11,19,11,4],[19,8,4,11,8,19],[9,4,1,1,4,19,11,1,19],[1,19,11,1,4,19],[1,19,11,1,4,19],[9,4,8,10,13,19,11,10,19,13,4,19],[10,19,11,13,19,10,13,4,19],[10,19,11,13,19,10,13,4,19],[4,3,14,
4,19,3],[3,0,4,3,4,19,3,14,0],[3,8,4,3,4,19,3,14,9],[3,1,19,3,14,1,19,1,4,1,14,4],[1,19,3,1,4,19,0,3,14],[1,19,3,1,4,19,9,3,14],[3,13,19,3,14,8,13,4,19,14,4,8],[0,3,14,19,13,4,19,3,13],[9,3,14,19,13,4,19,3,13],[3,2,4,3,4,19],[0,4,3,19,3,4],[8,4,3,19,3,4],[2,4,1,1,4,19,1,19,3],[1,19,3,1,4,19],[1,19,3,1,4,19],[2,4,8,19,3,13,19,13,4],[3,13,19,13,4,19],[3,13,19,13,4,19],[3,9,4,3,4,19],[0,4,3,19,3,4],[8,4,3,19,3,4],[9,4,1,1,4,19,1,19,3],[1,19,3,1,4,19],[1,19,3,1,4,19],[9,4,8,19,3,13,19,13,4],[3,13,19,
13,4,19],[3,13,19,13,4,19],[4,11,14,4,10,11,4,15,10,4,19,15],[11,14,0,10,0,4,15,10,4,15,4,19],[11,14,9,10,8,4,15,10,4,15,4,19],[15,4,19,15,1,4,1,11,4,14,4,11],[1,4,15,0,11,14,19,15,4],[1,4,15,9,11,14,19,15,4],[15,13,19,13,4,19,14,4,8,11,14,8],[0,11,14,19,13,4,19,15,13],[9,11,14,19,13,4,19,15,13],[10,2,4,15,10,4,15,4,19],[0,4,10,10,4,15,19,15,4],[8,4,10,10,4,15,19,15,4],[2,4,1,1,4,15,19,15,4],[1,4,15,15,4,19],[1,4,15,15,4,19],[2,4,8,19,13,4,19,15,13],[15,13,19,13,4,19],[15,13,19,13,4,19],[10,9,4,15,
10,4,15,4,19],[0,4,10,10,4,15,19,15,4],[8,4,10,10,4,15,19,15,4],[9,4,1,1,4,15,19,15,4],[1,4,15,15,4,19],[1,4,15,15,4,19],[9,4,8,19,13,4,19,15,13],[15,13,19,13,4,19],[15,13,19,13,4,19],[14,12,16,19,14,16],[0,16,19,0,19,14],[9,8,14,14,8,19,16,19,8],[16,19,1,1,19,14,1,14,12],[1,16,19,1,19,14,1,14,0],[1,16,19,1,19,14,1,14,9],[16,19,13,10,19,14,13,19,10,10,14,8,12,8,14],[10,14,0,10,19,14,13,19,10,13,16,19],[10,14,9,10,19,14,13,19,10,13,16,19],[12,16,2,2,16,19],[2,16,19,2,0,16],[2,8,19,19,8,16],[2,1,19,
2,12,1,1,16,19],[1,19,2,1,16,19],[1,19,2,1,16,19],[2,10,19,2,12,8,10,13,19,13,16,19],[10,19,2,13,19,10,13,16,19],[10,19,2,13,19,10,13,16,19],[12,11,9,16,11,12,16,19,11],[0,16,11,19,11,16],[11,16,19,11,8,16],[9,12,1,1,16,19,11,1,19],[1,19,11,1,16,19],[1,19,11,1,16,19],[9,12,8,10,13,19,11,10,19,13,16,19],[10,19,11,13,19,10,13,16,19],[10,19,11,13,19,10,13,16,19],[16,3,12,16,19,3,3,14,12],[3,16,19,3,0,16,3,14,0],[3,16,19,3,8,16,3,14,9],[3,16,19,3,1,16,3,12,1,3,14,12],[1,16,3,0,3,14,19,3,16],[1,16,3,9,
3,14,19,3,16],[3,13,19,3,14,8,13,16,19,14,12,8],[0,3,14,19,13,16,19,3,13],[9,3,14,19,13,16,19,3,13],[3,16,19,3,12,16,3,2,12],[0,16,3,19,3,16],[8,16,3,19,3,16],[2,12,1,1,16,3,19,3,16],[1,16,3,3,16,19],[1,16,3,3,16,19],[2,12,8,19,3,13,19,13,16],[3,13,19,13,16,19],[3,13,19,13,16,19],[3,16,19,3,12,16,3,9,12],[0,16,3,19,3,16],[8,16,3,19,3,16],[9,12,1,1,16,3,19,3,16],[1,16,3,3,16,19],[1,16,3,3,16,19],[9,12,8,19,3,13,19,13,16],[3,13,19,13,16,19],[3,13,19,13,16,19],[16,10,12,16,15,10,16,19,15,12,10,11,12,
11,14],[11,14,0,15,16,19,15,10,16,10,0,16],[11,14,9,15,16,19,15,10,16,10,8,16],[15,1,16,15,16,19,1,11,12,14,12,11],[1,16,15,0,11,14,19,15,16],[1,16,15,9,11,14,19,15,16],[15,16,19,15,13,16,11,14,12,11,12,8],[0,11,14,16,15,13,19,15,16],[9,11,14,16,15,13,19,15,16],[15,16,19,15,10,16,10,12,16,10,2,12],[0,16,10,10,16,15,19,15,16],[8,16,10,10,16,15,19,15,16],[2,12,1,1,16,15,19,15,16],[1,16,15,15,16,19],[1,16,15,15,16,19],[2,12,8,16,15,13,19,15,16],[15,13,16,15,16,19],[15,13,16,15,16,19],[15,16,19,15,10,
16,10,12,16,10,9,12],[0,16,10,10,16,15,19,15,16],[8,16,10,10,16,15,19,15,16],[9,12,1,1,16,15,19,15,16],[1,16,15,15,16,19],[1,16,15,15,16,19],[9,12,8,16,15,13,19,15,16],[15,13,16,15,16,19],[15,13,16,15,16,19],[19,14,5,5,14,17],[5,19,14,5,14,0,5,0,17],[5,19,8,5,12,17,9,8,14,19,14,8],[5,1,17,5,19,1,1,19,14,1,14,17],[1,5,19,1,19,14,1,14,0,0,17,5],[1,5,19,1,19,14,1,14,9,12,17,5],[5,8,17,5,19,10,10,19,14,10,14,8,14,17,8],[10,14,0,10,19,14,10,5,19,0,17,5],[10,14,9,10,19,14,10,5,19,12,17,5],[5,2,17,5,19,
2],[2,0,5,2,5,19,0,17,5],[2,8,5,2,5,19,12,17,5],[2,1,19,2,17,1,19,1,5,1,17,5],[1,19,2,1,5,19,0,17,5],[1,19,2,1,5,19,12,17,5],[2,10,19,2,17,8,10,5,19,17,5,8],[0,17,5,19,10,5,19,2,10],[12,17,5,19,10,5,19,2,10],[5,9,17,5,11,9,5,19,11],[0,17,5,11,0,5,11,5,19],[11,8,5,11,5,19,12,17,5],[11,5,19,11,1,5,1,9,5,17,5,9],[1,5,11,0,17,5,19,11,5],[1,5,11,12,17,5,19,11,5],[11,10,19,10,5,19,17,5,8,9,17,8],[0,17,5,19,10,5,19,11,10],[12,17,5,19,10,5,19,11,10],[5,14,17,5,3,14,5,19,3],[3,0,5,3,5,19,3,14,0,0,17,5],[3,
8,5,3,5,19,3,14,9,12,17,5],[3,5,19,3,14,1,14,17,1,1,17,5],[0,17,5,0,3,14,19,3,5],[9,3,14,12,17,5,19,3,5],[3,5,19,3,14,8,8,17,5,14,17,8],[0,17,5,0,3,14,19,3,5],[9,3,14,12,17,5,19,3,5],[3,2,5,3,5,19,2,17,5],[19,3,5,0,5,3,17,5,0],[19,3,5,8,5,3,17,5,12],[2,17,1,17,5,1,19,3,5],[0,17,5,3,5,19],[3,5,19,12,17,5],[2,17,8,8,17,5,19,3,5],[0,17,5,3,5,19],[3,5,19,12,17,5],[3,9,5,3,5,19,9,17,5],[19,3,5,0,5,3,17,5,0],[19,3,5,8,5,3,17,5,12],[9,5,1,9,17,5,19,3,5],[0,17,5,3,5,19],[3,5,19,12,17,5],[8,17,5,9,17,8,19,
3,5],[0,17,5,3,5,19],[3,5,19,12,17,5],[5,10,17,5,19,15,11,14,10,17,10,14],[10,0,5,0,17,5,11,14,0,15,5,19],[10,8,5,11,14,9,12,17,5,15,5,19],[11,14,1,14,17,1,1,17,5,15,5,19],[0,17,5,0,11,14,19,15,5],[9,11,14,12,17,5,19,15,5],[8,17,5,14,17,8,11,14,8,15,5,19],[0,17,5,0,11,14,19,15,5],[9,11,14,12,17,5,19,15,5],[10,2,5,2,17,5,15,5,19],[19,15,5,0,5,10,17,5,0],[19,15,5,17,5,12,8,5,10],[2,17,1,17,5,1,19,15,5],[0,17,5,15,5,19],[15,5,19,12,17,5],[2,17,8,8,17,5,19,15,5],[0,17,5,15,5,19],[15,5,19,12,17,5],[10,
9,5,9,17,5,15,5,19],[19,15,5,0,5,10,17,5,0],[19,15,5,17,5,12,8,5,10],[9,5,1,9,17,5,19,15,5],[0,17,5,15,5,19],[15,5,19,12,17,5],[8,17,5,9,17,8,19,15,5],[0,17,5,15,5,19],[15,5,19,12,17,5],[5,19,14,5,14,4],[0,5,14,14,5,19],[8,5,19,8,19,14,9,8,14],[4,1,14,14,1,19,1,5,19],[1,5,19,1,19,14,1,14,0],[1,5,19,1,19,14,1,14,9],[4,8,14,8,10,14,14,10,19,10,5,19],[10,14,0,10,19,14,10,5,19],[10,14,9,10,19,14,10,5,19],[4,5,2,2,5,19],[2,5,19,2,0,5],[2,5,19,2,8,5],[2,4,1,2,1,19,19,1,5],[1,19,2,1,5,19],[1,19,2,1,5,19],
[2,4,8,2,10,19,10,5,19],[10,19,2,5,19,10],[10,19,2,5,19,10],[4,5,9,9,5,11,11,5,19],[11,0,5,11,5,19],[11,8,5,11,5,19],[9,4,1,11,1,5,11,5,19],[1,5,11,5,19,11],[1,5,11,5,19,11],[9,4,8,10,5,19,11,10,19],[10,19,11,5,19,10],[10,19,11,5,19,10],[4,5,3,4,3,14,3,5,19],[3,14,0,3,0,5,3,5,19],[3,14,9,3,8,5,3,5,19],[3,14,1,3,5,19,14,4,1],[0,3,14,5,19,3],[9,3,14,5,19,3],[3,14,8,3,5,19,8,14,4],[0,3,14,5,19,3],[9,3,14,5,19,3],[3,2,4,3,4,5,3,5,19],[0,5,3,5,19,3],[8,5,3,5,19,3],[2,4,1,5,19,3],[5,19,3],[5,19,3],[2,4,
8,5,19,3],[5,19,3],[5,19,3],[3,9,5,3,5,19,9,4,5],[0,5,3,5,19,3],[8,5,3,5,19,3],[9,4,1,5,19,3],[5,19,3],[5,19,3],[9,4,8,5,19,3],[5,19,3],[5,19,3],[4,5,10,4,11,14,4,10,11,15,5,19],[15,5,19,11,14,0,10,0,5],[15,5,19,11,14,9,10,8,5],[15,5,19,11,14,4,11,4,1],[0,11,14,5,19,15],[9,11,14,5,19,15],[11,14,8,8,14,4,15,5,19],[0,11,14,5,19,15],[9,11,14,5,19,15],[15,5,19,10,4,5,10,2,4],[0,5,10,5,19,15],[8,5,10,5,19,15],[2,4,1,5,19,15],[5,19,15],[5,19,15],[2,4,8,5,19,15],[5,19,15],[5,19,15],[10,9,5,9,4,5,15,5,19],
[0,5,10,5,19,15],[8,5,10,5,19,15],[9,4,1,5,19,15],[5,19,15],[5,19,15],[9,4,8,5,19,15],[5,19,15],[5,19,15],[5,19,14,5,14,12],[0,5,14,14,5,19],[8,5,19,8,19,14,9,8,14],[12,1,14,14,1,19,1,5,19],[1,5,19,1,19,14,1,14,0],[1,5,19,1,19,14,1,14,9],[8,10,14,12,8,14,14,10,19,10,5,19],[10,14,0,10,19,14,10,5,19],[10,14,9,10,19,14,10,5,19],[12,5,2,2,5,19],[2,5,19,2,0,5],[2,5,19,2,8,5],[2,1,19,2,12,1,19,1,5],[1,19,2,1,5,19],[1,19,2,1,5,19],[2,10,19,2,12,8,10,5,19],[10,19,2,5,19,10],[10,19,2,5,19,10],[12,5,9,9,5,
11,11,5,19],[11,0,5,11,5,19],[11,8,5,11,5,19],[9,12,1,11,1,5,11,5,19],[1,5,11,5,19,11],[1,5,11,5,19,11],[9,12,8,10,5,19,11,10,19],[10,19,11,5,19,10],[10,19,11,5,19,10],[12,3,14,12,5,3,3,5,19],[3,14,0,3,0,5,3,5,19],[3,14,9,3,8,5,3,5,19],[3,14,12,3,12,1,3,5,19],[0,3,14,5,19,3],[9,3,14,5,19,3],[3,14,8,3,5,19,8,14,12],[0,3,14,5,19,3],[9,3,14,5,19,3],[3,12,5,3,2,12,3,5,19],[0,5,3,5,19,3],[8,5,3,5,19,3],[2,12,1,5,19,3],[5,19,3],[5,19,3],[2,12,8,5,19,3],[5,19,3],[5,19,3],[3,9,5,3,5,19,9,12,5],[0,5,3,5,19,
3],[8,5,3,5,19,3],[9,12,1,5,19,3],[5,19,3],[5,19,3],[9,12,8,5,19,3],[5,19,3],[5,19,3],[12,11,14,12,10,11,12,5,10,15,5,19],[15,5,19,11,14,0,10,0,5],[15,5,19,11,14,9,10,8,5],[15,5,19,11,12,1,11,14,12],[0,11,14,5,19,15],[9,11,14,5,19,15],[11,14,12,11,12,8,15,5,19],[0,11,14,5,19,15],[9,11,14,5,19,15],[15,5,19,10,2,12,10,12,5],[0,5,10,5,19,15],[8,5,10,5,19,15],[2,12,1,5,19,15],[5,19,15],[5,19,15],[2,12,8,5,19,15],[5,19,15],[5,19,15],[10,12,5,10,9,12,15,5,19],[0,5,10,5,19,15],[8,5,10,5,19,15],[9,12,1,5,
19,15],[5,19,15],[5,19,15],[9,12,8,5,19,15],[5,19,15],[5,19,15],[19,14,18,18,14,13,14,16,13,17,16,14],[16,0,17,0,13,14,14,13,18,14,18,19],[16,12,17,9,8,13,9,13,14,14,18,19,14,13,18],[1,18,19,1,19,14,1,14,17,1,17,16],[1,18,19,1,19,14,1,14,0,0,17,16],[1,18,19,1,19,14,1,14,9,12,17,16],[18,19,10,10,19,14,10,14,8,14,17,8,16,8,17],[10,14,0,10,19,14,10,18,19,0,17,16],[10,14,9,10,19,14,10,18,19,12,17,16],[18,2,13,18,19,2,2,17,16,13,2,16],[2,18,19,2,13,18,2,0,13,0,17,16],[2,18,19,2,13,18,2,8,13,12,17,16],
[2,18,19,2,1,18,2,16,1,2,17,16],[1,18,2,0,17,16,19,2,18],[1,18,2,12,17,16,19,2,18],[2,10,19,2,17,8,10,18,19,17,16,8],[0,17,16,19,10,18,19,2,10],[12,17,16,19,10,18,19,2,10],[18,11,13,18,19,11,13,11,9,16,13,9,16,9,17],[0,17,16,11,18,19,11,13,18,11,0,13],[11,18,19,11,13,18,11,8,13,12,17,16],[11,1,18,11,18,19,1,9,16,17,16,9],[1,18,11,0,17,16,19,11,18],[1,18,11,12,17,16,19,11,18],[11,18,19,11,10,18,9,17,16,9,16,8],[0,17,16,18,11,10,19,11,18],[12,17,16,18,11,10,19,11,18],[18,19,3,3,14,13,14,16,13,14,17,
16],[3,18,19,3,14,0,3,0,13,0,17,16],[3,18,19,3,14,9,3,8,13,12,17,16],[3,18,19,3,14,1,14,17,1,17,16,1],[0,17,16,0,3,14,19,3,18],[9,3,14,12,17,16,19,3,18],[3,18,19,3,14,8,8,17,16,14,17,8],[0,17,16,0,3,14,19,3,18],[9,3,14,12,17,16,19,3,18],[3,18,19,3,2,13,13,2,16,2,17,16],[19,3,18,0,13,3,17,16,0],[19,3,18,8,13,3,17,16,12],[2,17,16,2,16,1,19,3,18],[0,17,16,3,18,19],[3,18,19,12,17,16],[2,17,8,8,17,16,19,3,18],[0,17,16,3,18,19],[3,18,19,12,17,16],[3,18,19,3,9,13,13,9,16,9,17,16],[19,3,18,0,13,3,17,16,0],
[19,3,18,8,13,3,17,16,12],[9,16,1,9,17,16,19,3,18],[0,17,16,3,18,19],[3,18,19,12,17,16],[9,16,8,9,17,16,19,3,18],[0,17,16,3,18,19],[3,18,19,12,17,16],[18,19,15,11,13,10,11,14,13,14,17,16,14,16,13],[10,0,13,0,17,16,11,14,0,15,18,19],[10,8,13,11,14,9,12,17,16,15,18,19],[11,14,1,14,17,1,17,16,1,15,18,19],[0,17,16,0,11,14,19,15,18],[9,11,14,12,17,16,19,15,18],[8,17,16,14,17,8,11,14,8,15,18,19],[0,17,16,0,11,14,19,15,18],[9,11,14,12,17,16,19,15,18],[10,2,13,13,2,16,2,17,16,15,18,19],[19,15,18,0,13,10,
17,16,0],[19,15,18,17,16,12,8,13,10],[2,17,16,2,16,1,19,15,18],[0,17,16,15,18,19],[15,18,19,12,17,16],[2,17,8,8,17,16,19,15,18],[0,17,16,15,18,19],[15,18,19,12,17,16],[10,9,13,13,9,16,9,17,16,15,18,19],[19,15,18,0,13,10,17,16,0],[19,15,18,17,16,12,8,13,10],[9,16,1,9,17,16,19,15,18],[0,17,16,15,18,19],[15,18,19,12,17,16],[9,16,8,9,17,16,19,15,18],[0,17,16,15,18,19],[15,18,19,12,17,16],[4,13,14,14,18,19,14,13,18],[0,13,14,14,13,18,14,18,19],[9,8,13,9,13,14,14,18,19,14,13,18],[4,1,14,14,1,19,19,1,18],
[1,18,19,1,19,14,1,14,0],[1,18,19,1,19,14,1,14,9],[4,8,14,8,10,14,14,10,19,10,18,19],[10,14,0,10,19,14,10,18,19],[10,14,9,10,19,14,10,18,19],[4,13,2,13,18,2,2,18,19],[2,18,19,2,13,18,2,0,13],[2,18,19,2,13,18,2,8,13],[2,4,1,2,18,19,2,1,18],[1,18,2,18,19,2],[1,18,2,18,19,2],[2,4,8,2,10,19,10,18,19],[10,19,2,18,19,10],[10,19,2,18,19,10],[4,13,9,9,13,11,11,18,19,13,18,11],[11,0,13,11,13,18,11,18,19],[11,8,13,11,13,18,11,18,19],[9,4,1,11,1,18,11,18,19],[1,18,11,18,19,11],[1,18,11,18,19,11],[9,4,8,11,10,
18,11,18,19],[10,18,11,18,19,11],[10,18,11,18,19,11],[4,3,14,4,13,3,3,18,19],[3,14,0,3,0,13,3,18,19],[3,14,9,3,8,13,3,18,19],[3,14,1,3,18,19,14,4,1],[0,3,14,18,19,3],[9,3,14,18,19,3],[3,14,8,3,18,19,8,14,4],[0,3,14,18,19,3],[9,3,14,18,19,3],[3,2,13,3,18,19,13,2,4],[0,13,3,18,19,3],[8,13,3,18,19,3],[2,4,1,18,19,3],[18,19,3],[18,19,3],[2,4,8,18,19,3],[18,19,3],[18,19,3],[3,9,13,3,18,19,9,4,13],[0,13,3,18,19,3],[8,13,3,18,19,3],[9,4,1,18,19,3],[18,19,3],[18,19,3],[9,4,8,18,19,3],[18,19,3],[18,19,3],
[4,11,14,4,10,11,4,13,10,15,18,19],[15,18,19,11,14,0,10,0,13],[15,18,19,11,14,9,10,8,13],[15,18,19,11,14,4,11,4,1],[0,11,14,18,19,15],[9,11,14,18,19,15],[11,14,8,8,14,4,15,18,19],[0,11,14,18,19,15],[9,11,14,18,19,15],[15,18,19,10,4,13,10,2,4],[0,13,10,18,19,15],[8,13,10,18,19,15],[2,4,1,18,19,15],[18,19,15],[18,19,15],[2,4,8,18,19,15],[18,19,15],[18,19,15],[10,9,13,9,4,13,15,18,19],[0,13,10,18,19,15],[8,13,10,18,19,15],[9,4,1,18,19,15],[18,19,15],[18,19,15],[9,4,8,18,19,15],[18,19,15],[18,19,15],
[18,19,14,13,18,14,13,14,12],[0,13,14,14,13,18,14,18,19],[9,8,13,9,13,14,14,18,19,14,13,18],[12,1,14,14,1,19,19,1,18],[1,18,19,1,19,14,1,14,0],[1,18,19,1,19,14,1,14,9],[8,10,14,12,8,14,14,10,19,10,18,19],[10,14,0,10,19,14,10,18,19],[10,14,9,10,19,14,10,18,19],[12,13,2,13,18,2,2,18,19],[2,18,19,2,13,18,2,0,13],[2,18,19,2,13,18,2,8,13],[2,18,19,2,1,18,2,12,1],[1,18,2,18,19,2],[1,18,2,18,19,2],[2,10,19,2,12,8,10,18,19],[10,19,2,18,19,10],[10,19,2,18,19,10],[12,13,9,13,18,11,9,13,11,11,18,19],[11,0,13,
11,13,18,11,18,19],[11,8,13,11,13,18,11,18,19],[9,12,1,11,1,18,11,18,19],[1,18,11,18,19,11],[1,18,11,18,19,11],[9,12,8,11,10,18,11,18,19],[10,18,11,18,19,11],[10,18,11,18,19,11],[12,3,14,12,13,3,3,18,19],[3,14,0,3,0,13,3,18,19],[3,14,9,3,8,13,3,18,19],[3,14,12,3,12,1,3,18,19],[0,3,14,18,19,3],[9,3,14,18,19,3],[3,14,8,3,18,19,8,14,12],[0,3,14,18,19,3],[9,3,14,18,19,3],[3,12,13,3,2,12,3,18,19],[0,13,3,18,19,3],[8,13,3,18,19,3],[2,12,1,18,19,3],[18,19,3],[18,19,3],[2,12,8,18,19,3],[18,19,3],[18,19,3],
[3,9,13,3,18,19,9,12,13],[0,13,3,18,19,3],[8,13,3,18,19,3],[9,12,1,18,19,3],[18,19,3],[18,19,3],[9,12,8,18,19,3],[18,19,3],[18,19,3],[12,11,14,12,10,11,12,13,10,15,18,19],[15,18,19,11,14,0,10,0,13],[15,18,19,11,14,9,10,8,13],[15,18,19,11,12,1,11,14,12],[0,11,14,18,19,15],[9,11,14,18,19,15],[11,14,12,11,12,8,15,18,19],[0,11,14,18,19,15],[9,11,14,18,19,15],[15,18,19,10,2,12,10,12,13],[0,13,10,18,19,15],[8,13,10,18,19,15],[2,12,1,18,19,15],[18,19,15],[18,19,15],[2,12,8,18,19,15],[18,19,15],[18,19,15],
[10,12,13,10,9,12,15,18,19],[0,13,10,18,19,15],[8,13,10,18,19,15],[9,12,1,18,19,15],[18,19,15],[18,19,15],[9,12,8,18,19,15],[18,19,15],[18,19,15],[],[],[7,8,12,7,9,8,7,12,9],[],[],[1,12,7,1,7,9,12,9,7],[7,13,8,7,8,10],[13,0,7,0,10,7],[13,12,7,12,9,7,10,7,9],[],[],[2,7,12,2,8,7,12,7,8],[],[1,7,2,1,0,7,0,2,7],[1,7,2,1,12,7,12,2,7],[2,10,7,2,7,8,13,8,7],[13,0,7,0,2,7,10,7,2],[12,2,7,13,12,7,10,7,2],[7,9,14,7,11,9],[14,7,0,0,7,11],[14,7,12,12,7,8,11,8,7],[11,1,7,1,9,7,14,7,9],[1,7,11,1,0,7,0,14,7],[1,
7,11,1,12,7,12,14,7],[11,10,7,9,13,8,9,14,13,14,7,13],[13,0,7,0,14,7,10,7,11],[12,14,7,13,12,7,10,7,11],[],[],[3,7,9,3,8,7,9,7,12,12,7,8],[3,7,1],[1,0,7,0,3,7],[1,12,7,9,3,7,12,9,7],[3,7,8,13,8,7],[13,0,7,0,3,7],[9,3,7,12,9,7,13,12,7],[3,2,7],[2,7,0,0,7,3],[2,7,12,8,7,3,12,7,8],[2,7,1],[1,0,7,0,2,7],[1,12,7,12,2,7],[2,7,8,8,7,13],[13,0,7,0,2,7],[12,2,7,13,12,7],[3,9,7,14,7,9],[14,7,0,0,7,3],[8,7,3,12,7,8,14,7,12],[9,7,1,14,7,9],[1,0,7,0,14,7],[1,12,7,12,14,7],[9,13,8,9,14,13,14,7,13],[13,0,7,0,14,
7],[12,14,7,13,12,7],[7,10,11],[11,7,0,0,7,10],[11,7,9,9,7,12,12,7,8,10,8,7],[1,11,7],[1,0,7,0,11,7],[1,12,7,9,11,7,12,9,7],[13,8,7,11,7,8],[13,0,7,0,11,7],[9,11,7,12,9,7,13,12,7],[2,7,10],[2,7,0,0,7,10],[2,7,12,8,7,10,12,7,8],[2,7,1],[1,0,7,0,2,7],[1,12,7,12,2,7],[2,7,8,8,7,13],[13,0,7,0,2,7],[12,2,7,13,12,7],[14,7,9,10,9,7],[14,7,0,0,7,10],[8,7,10,12,7,8,14,7,12],[9,7,1,14,7,9],[1,0,7,0,14,7],[1,12,7,12,14,7],[9,13,8,9,14,13,14,7,13],[13,0,7,0,14,7],[12,14,7,13,12,7],[],[],[4,9,7,4,7,8,9,8,7],[],
[1,4,7,1,7,0,0,7,4],[1,4,7,1,7,9,9,7,4],[4,7,13,4,8,7,10,7,8],[10,7,0,0,7,4,13,4,7],[9,7,4,10,7,9,13,4,7],[],[2,7,4,2,0,7,0,4,7],[2,7,4,2,8,7,8,4,7],[2,4,1,2,7,4,2,1,7,1,4,7],[1,7,2,1,4,7,7,4,2],[1,7,2,1,4,7,7,4,2],[2,4,8,2,7,4,2,10,7,13,4,7],[7,4,2,10,7,2,13,4,7],[7,4,2,10,7,2,13,4,7],[4,14,7,4,7,9,11,9,7],[11,0,7,0,4,7,14,7,4],[8,4,7,11,8,7,14,7,4],[9,4,1,1,4,7,11,1,7,14,7,4],[1,7,11,1,4,7,7,4,14],[1,7,11,1,4,7,7,4,14],[9,4,8,11,10,7,13,4,7,14,7,4],[10,7,11,7,4,14,13,4,7],[10,7,11,7,4,14,13,4,7],
[],[],[3,7,9,3,8,7,7,8,4,9,7,4],[3,4,1,3,7,4,1,4,7],[1,4,7,0,3,4,7,4,3],[1,4,7,7,9,3,7,4,9],[3,4,8,3,7,4,13,4,7],[0,3,4,7,4,3,13,4,7],[7,9,3,7,4,9,13,4,7],[3,2,4,3,4,7,2,7,4],[2,7,4,0,4,3,7,3,4],[2,7,4,7,3,8,7,8,4],[2,7,4,2,4,1,1,4,7],[1,4,7,7,4,2],[1,4,7,7,4,2],[2,7,4,2,4,8,13,4,7],[7,4,2,13,4,7],[7,4,2,13,4,7],[3,9,4,3,4,7,14,7,4],[0,4,3,7,3,4,14,7,4],[7,3,8,7,8,4,14,7,4],[9,4,1,1,4,7,14,7,4],[1,4,7,7,4,14],[1,4,7,7,4,14],[9,4,8,13,4,7,14,7,4],[7,4,14,13,4,7],[7,4,14,13,4,7],[4,11,7,4,7,10,4,10,
11],[7,10,4,11,7,4,11,4,0,0,4,10],[11,7,9,9,7,4,7,8,4,10,8,7],[1,4,7,11,4,1,11,7,4],[1,4,7,0,11,4,7,4,11],[1,4,7,7,9,11,7,4,9],[11,4,8,11,7,4,13,4,7],[0,11,4,7,4,11,13,4,7],[7,9,11,7,4,9,13,4,7],[2,7,4,10,2,4,10,4,7],[2,7,4,0,4,10,7,10,4],[2,7,4,7,10,8,7,8,4],[2,7,4,2,4,1,1,4,7],[1,4,7,7,4,2],[1,4,7,7,4,2],[2,7,4,2,4,8,13,4,7],[7,4,2,13,4,7],[7,4,2,13,4,7],[10,9,4,10,4,7,14,7,4],[0,4,10,7,10,4,14,7,4],[7,10,8,7,8,4,14,7,4],[9,4,1,1,4,7,14,7,4],[1,4,7,7,4,14],[1,4,7,7,4,14],[9,4,8,13,4,7,14,7,4],[7,
4,14,13,4,7],[7,4,14,13,4,7],[7,17,12,7,12,16],[17,0,7,0,16,7],[17,9,7,9,8,7,16,7,8],[16,7,1,1,7,12,17,12,7],[1,16,7,1,7,0,0,7,17],[1,16,7,1,7,9,9,7,17],[16,7,13,10,12,8,10,17,12,10,7,17],[10,7,0,0,7,17,13,16,7],[9,7,17,10,7,9,13,16,7],[17,2,7,2,12,7,16,7,12],[2,7,17,2,0,7,0,16,7],[2,7,17,2,8,7,8,16,7],[2,7,17,2,1,7,2,12,1,1,16,7],[1,7,2,1,16,7,7,17,2],[1,7,2,1,16,7,7,17,2],[2,7,17,2,10,7,2,12,8,13,16,7],[7,17,2,10,7,2,13,16,7],[7,17,2,10,7,2,13,16,7],[17,14,7,11,9,12,11,12,16,11,16,7],[11,0,7,0,
16,7,14,7,17],[8,16,7,11,8,7,14,7,17],[9,12,1,1,16,7,11,1,7,14,7,17],[1,7,11,1,16,7,7,17,14],[1,7,11,1,16,7,7,17,14],[9,12,8,11,10,7,13,16,7,14,7,17],[10,7,11,7,17,14,13,16,7],[10,7,11,7,17,14,13,16,7],[17,12,3,17,3,7,3,16,7,12,16,3],[3,7,17,3,17,0,3,0,16,3,16,7],[3,7,9,3,8,7,7,8,16,9,7,17],[3,7,17,3,17,12,3,12,1,1,16,7],[1,16,7,0,3,17,7,17,3],[1,16,7,7,9,3,7,17,9],[3,7,17,3,17,12,3,12,8,13,16,7],[0,3,17,7,17,3,13,16,7],[7,9,3,7,17,9,13,16,7],[3,16,7,3,12,16,3,2,12,2,7,17],[2,7,17,0,16,3,7,3,16],
[2,7,17,7,3,8,7,8,16],[2,7,17,2,12,1,1,16,7],[1,16,7,7,17,2],[1,16,7,7,17,2],[2,7,17,2,12,8,13,16,7],[7,17,2,13,16,7],[7,17,2,13,16,7],[3,16,7,3,12,16,3,9,12,14,7,17],[0,16,3,7,3,16,14,7,17],[7,3,8,7,8,16,14,7,17],[9,12,1,1,16,7,14,7,17],[1,16,7,7,17,14],[1,16,7,7,17,14],[9,12,8,13,16,7,14,7,17],[7,17,14,13,16,7],[7,17,14,13,16,7],[17,12,11,17,11,7,12,10,11,16,10,12,16,7,10],[7,10,16,11,17,0,11,7,17,0,16,10],[11,7,17,11,17,9,10,16,7,10,8,16],[1,16,7,11,7,17,11,17,12,11,12,1],[1,16,7,0,11,17,7,17,
11],[1,16,7,7,17,11,17,9,11],[11,7,17,11,17,12,11,12,8,13,16,7],[0,11,17,7,17,11,13,16,7],[7,17,11,13,16,7,17,9,11],[2,7,17,10,16,7,10,12,16,10,2,12],[2,7,17,0,16,10,7,10,16],[2,7,17,7,10,16,16,10,8],[2,7,17,2,12,1,1,16,7],[1,16,7,7,17,2],[1,16,7,7,17,2],[2,7,17,2,12,8,13,16,7],[7,17,2,13,16,7],[7,17,2,13,16,7],[10,16,7,10,12,16,10,9,12,14,7,17],[0,16,10,7,10,16,14,7,17],[7,10,16,14,7,17,16,10,8],[9,12,1,1,16,7,14,7,17],[1,16,7,7,17,14],[1,16,7,7,17,14],[9,12,8,13,16,7,14,7,17],[7,17,14,13,16,7],
[7,17,14,13,16,7],[],[],[5,12,7,5,7,8,9,8,7,12,9,7],[5,1,7],[1,7,0,0,7,5],[1,7,9,9,7,12,12,7,5],[5,8,7,10,7,8],[10,7,0,0,7,5],[9,7,12,10,7,9,12,7,5],[],[],[2,7,12,2,8,7,7,8,5,12,7,5],[2,5,1,2,7,5,2,1,7],[1,7,2,0,2,5,7,5,2],[1,7,2,7,12,2,7,5,12],[2,5,8,2,7,5,2,10,7],[0,2,5,7,5,2,10,7,2],[7,12,2,10,7,2,7,5,12],[5,14,7,5,7,11,5,11,9,5,9,14],[7,11,5,14,7,5,14,5,0,0,5,11],[14,7,12,12,7,5,7,8,5,11,8,7],[11,1,7,9,5,1,14,5,9,14,7,5],[1,7,11,0,14,5,7,5,14],[1,7,11,7,12,14,7,5,12],[11,10,7,9,5,8,14,5,9,14,
7,5],[0,14,5,10,7,11,7,5,14],[10,7,11,7,12,14,7,5,12],[5,3,7],[3,0,5,3,7,0,0,7,5],[3,8,5,3,7,9,9,7,12,12,7,5],[3,5,1,3,7,5],[0,7,5,0,3,7],[9,3,7,12,9,7,12,7,5],[3,7,8,7,5,8],[0,7,5,0,3,7],[9,3,7,12,9,7,12,7,5],[3,2,5,2,7,5],[2,7,5,2,5,0,0,5,3],[2,7,12,12,7,5,8,5,3],[2,7,5,2,5,1],[0,2,5,7,5,2],[7,12,2,7,5,12],[2,7,5,2,5,8],[0,2,5,7,5,2],[7,12,2,7,5,12],[3,9,5,9,14,5,14,7,5],[14,5,0,14,7,5,0,5,3],[12,7,5,14,7,12,8,5,3],[9,5,1,14,5,9,14,7,5],[0,14,5,7,5,14],[7,5,12,7,12,14],[9,5,8,14,5,9,14,7,5],[0,
14,5,7,5,14],[7,5,12,7,12,14],[5,11,7,5,10,11],[10,0,5,0,7,5,11,7,0],[10,8,5,9,7,12,11,7,9,12,7,5],[1,11,5,7,5,11],[0,7,5,0,11,7],[9,11,7,12,9,7,12,7,5],[7,5,8,11,7,8],[0,7,5,0,11,7],[9,11,7,12,9,7,12,7,5],[10,2,5,2,7,5],[2,7,5,2,5,0,0,5,10],[2,7,12,12,7,5,8,5,10],[2,7,5,2,5,1],[0,2,5,7,5,2],[7,12,2,7,5,12],[2,7,5,2,5,8],[0,2,5,7,5,2],[7,12,2,7,5,12],[10,9,5,9,14,5,14,7,5],[14,5,0,14,7,5,0,5,10],[12,7,5,14,7,12,8,5,10],[9,5,1,14,5,9,14,7,5],[0,14,5,7,5,14],[7,5,12,7,12,14],[9,5,8,14,5,9,14,7,5],[0,
14,5,7,5,14],[7,5,12,7,12,14],[5,7,4],[4,0,7,0,5,7],[4,9,7,8,5,7,9,8,7],[4,1,7],[1,7,0,0,7,4],[1,7,9,9,7,4],[4,8,7,8,10,7],[10,7,0,0,7,4],[9,7,4,10,7,9],[4,5,2,4,2,7,2,5,7],[2,7,4,2,5,7,2,0,5],[2,7,4,2,8,7,8,5,7],[2,4,1,2,7,4,2,1,7],[1,7,2,7,4,2],[1,7,2,7,4,2],[2,4,8,2,7,4,2,10,7],[7,4,2,10,7,2],[7,4,2,10,7,2],[4,5,9,4,14,7,9,5,11,11,5,7],[11,0,5,11,5,7,14,7,4],[8,5,7,11,8,7,14,7,4],[9,4,1,11,1,7,14,7,4],[1,7,11,7,4,14],[1,7,11,7,4,14],[9,4,8,11,10,7,14,7,4],[10,7,11,7,4,14],[10,7,11,7,4,14],[4,5,
3,4,3,7],[3,4,0,3,7,4,3,0,5],[3,7,9,3,8,5,9,7,4],[3,4,1,3,7,4],[0,3,4,7,4,3],[7,9,3,7,4,9],[3,4,8,3,7,4],[0,3,4,7,4,3],[7,9,3,7,4,9],[3,2,4,3,4,5,2,7,4],[2,7,4,0,5,3],[2,7,4,8,5,3],[2,7,4,2,4,1],[7,4,2],[7,4,2],[2,7,4,2,4,8],[7,4,2],[7,4,2],[3,9,5,9,4,5,14,7,4],[0,5,3,14,7,4],[8,5,3,14,7,4],[9,4,1,14,7,4],[7,4,14],[7,4,14],[9,4,8,14,7,4],[7,4,14],[7,4,14],[4,5,10,4,11,7,4,10,11],[11,7,4,11,4,0,10,0,5],[11,7,9,9,7,4,10,8,5],[11,7,4,11,4,1],[0,11,4,7,4,11],[7,4,9,7,9,11],[11,7,4,11,4,8],[0,11,4,7,4,
11],[7,4,9,7,9,11],[10,4,5,10,2,4,2,7,4],[2,7,4,0,5,10],[2,7,4,8,5,10],[2,7,4,2,4,1],[7,4,2],[7,4,2],[2,7,4,2,4,8],[7,4,2],[7,4,2],[10,9,5,9,4,5,14,7,4],[0,5,10,14,7,4],[8,5,10,14,7,4],[9,4,1,14,7,4],[7,4,14],[7,4,14],[9,4,8,14,7,4],[7,4,14],[7,4,14],[5,7,12,17,12,7],[17,0,7,0,5,7],[8,5,7,9,8,7,17,9,7],[12,1,7,17,12,7],[1,7,0,0,7,17],[1,7,9,9,7,17],[8,10,12,12,10,17,17,10,7],[10,7,0,0,7,17],[9,7,17,10,7,9],[12,5,2,2,5,7,17,2,7],[2,7,17,2,5,7,2,0,5],[2,7,17,2,8,7,8,5,7],[2,7,17,2,1,7,2,12,1],[1,7,
2,7,17,2],[1,7,2,7,17,2],[2,7,17,2,10,7,2,12,8],[7,17,2,10,7,2],[7,17,2,10,7,2],[12,5,9,9,5,11,17,14,7,11,5,7],[11,0,5,11,5,7,14,7,17],[8,5,7,11,8,7,14,7,17],[9,12,1,11,1,7,14,7,17],[1,7,11,7,17,14],[1,7,11,7,17,14],[9,12,8,11,10,7,14,7,17],[10,7,11,7,17,14],[10,7,11,7,17,14],[17,12,3,17,3,7,12,5,3],[3,7,17,3,17,0,3,0,5],[3,7,9,3,8,5,9,7,17],[3,7,17,3,17,12,3,12,1],[0,3,17,7,17,3],[7,9,3,7,17,9],[3,7,17,3,17,12,3,12,8],[0,3,17,7,17,3],[7,9,3,7,17,9],[3,12,5,3,2,12,2,7,17],[2,7,17,0,5,3],[2,7,17,8,
5,3],[2,7,17,2,12,1],[7,17,2],[7,17,2],[2,7,17,2,12,8],[7,17,2],[7,17,2],[3,9,5,14,7,17,9,12,5],[0,5,3,14,7,17],[8,5,3,14,7,17],[9,12,1,14,7,17],[7,17,14],[7,17,14],[9,12,8,14,7,17],[7,17,14],[7,17,14],[17,12,11,17,11,7,12,10,11,12,5,10],[11,17,0,11,7,17,10,0,5],[11,7,17,11,17,9,10,8,5],[11,17,12,11,7,17,11,12,1],[0,11,17,7,17,11],[7,17,11,17,9,11],[11,17,12,11,7,17,11,12,8],[0,11,17,7,17,11],[7,17,11,17,9,11],[10,2,12,10,12,5,2,7,17],[2,7,17,0,5,10],[2,7,17,8,5,10],[2,7,17,2,12,1],[7,17,2],[7,17,
2],[2,7,17,2,12,8],[7,17,2],[7,17,2],[10,12,5,10,9,12,14,7,17],[0,5,10,14,7,17],[8,5,10,14,7,17],[9,12,1,14,7,17],[7,17,14],[7,17,14],[9,12,8,14,7,17],[7,17,14],[7,17,14],[7,16,13],[16,0,7,0,13,7],[16,12,7,12,9,7,9,8,7,13,7,8],[1,7,16],[1,7,0,0,7,16],[1,7,9,9,7,12,12,7,16],[10,7,8,16,8,7],[10,7,0,0,7,16],[9,7,12,10,7,9,12,7,16],[16,13,2,16,2,7,2,13,7],[2,7,16,2,16,0,2,0,13,2,13,7],[2,7,12,2,8,7,7,8,13,12,7,16],[2,7,16,2,16,1,2,1,7],[1,7,2,0,2,16,7,16,2],[1,7,2,7,12,2,7,16,12],[2,7,16,2,16,8,2,10,
7],[0,2,16,7,16,2,10,7,2],[7,12,2,10,7,2,7,16,12],[16,13,9,16,9,14,16,14,7,13,11,9,13,7,11],[7,11,13,14,16,0,14,7,16,0,13,11],[14,7,16,14,16,12,11,13,7,11,8,13],[11,1,7,14,7,16,14,16,9,9,16,1],[1,7,11,0,14,16,7,16,14],[1,7,11,7,16,14,16,12,14],[11,10,7,14,7,16,14,16,9,9,16,8],[0,14,16,10,7,11,7,16,14],[10,7,11,7,16,14,16,12,14],[13,3,16,3,7,16],[3,7,0,3,0,13,0,7,16],[3,7,9,3,8,13,9,7,12,12,7,16],[3,7,16,3,16,1],[0,7,16,0,3,7],[9,3,7,12,9,7,12,7,16],[3,7,8,7,16,8],[0,7,16,0,3,7],[9,3,7,12,9,7,12,7,
16],[3,2,13,13,2,16,2,7,16],[2,7,16,2,16,0,0,13,3],[2,7,12,12,7,16,8,13,3],[2,7,16,2,16,1],[0,2,16,7,16,2],[7,12,2,7,16,12],[2,7,16,2,16,8],[0,2,16,7,16,2],[7,12,2,7,16,12],[3,9,13,13,9,16,14,7,16,9,14,16],[14,16,0,14,7,16,0,13,3],[14,16,12,14,7,16,8,13,3],[9,16,1,14,16,9,14,7,16],[0,14,16,7,16,14],[7,16,14,16,12,14],[9,16,8,14,16,9,14,7,16],[0,14,16,7,16,14],[7,16,14,16,12,14],[13,10,11,16,13,11,16,11,7],[10,0,13,0,7,16,11,7,0],[10,8,13,9,7,12,11,7,9,12,7,16],[1,11,16,7,16,11],[0,7,16,0,11,7],[9,
11,7,12,9,7,12,7,16],[11,7,16,11,16,8],[0,7,16,0,11,7],[9,11,7,12,9,7,12,7,16],[10,2,13,13,2,16,2,7,16],[2,7,16,2,16,0,0,13,10],[2,7,12,12,7,16,8,13,10],[2,7,16,2,16,1],[0,2,16,7,16,2],[7,12,2,7,16,12],[2,7,16,2,16,8],[0,2,16,7,16,2],[7,12,2,7,16,12],[10,9,13,13,9,16,9,14,16,14,7,16],[14,16,0,14,7,16,0,13,10],[14,16,12,14,7,16,8,13,10],[9,16,1,14,16,9,14,7,16],[0,14,16,7,16,14],[7,16,14,16,12,14],[9,16,8,14,16,9,14,7,16],[0,14,16,7,16,14],[7,16,14,16,12,14],[4,13,7],[4,0,7,0,13,7],[4,9,7,8,13,7,9,
8,7],[4,1,7],[1,7,0,0,7,4],[1,7,9,9,7,4],[4,8,7,8,10,7],[10,7,0,0,7,4],[9,7,4,10,7,9],[4,2,7,4,13,2,2,13,7],[2,7,4,2,13,7,2,0,13],[2,7,4,2,8,7,8,13,7],[2,4,1,2,7,4,2,1,7],[1,7,2,7,4,2],[1,7,2,7,4,2],[2,4,8,2,7,4,2,10,7],[7,4,2,10,7,2],[7,4,2,10,7,2],[4,14,7,4,13,9,9,13,11,11,13,7],[11,0,13,11,13,7,14,7,4],[11,8,13,11,13,7,14,7,4],[9,4,1,11,1,7,14,7,4],[1,7,11,7,4,14],[1,7,11,7,4,14],[9,4,8,11,10,7,14,7,4],[10,7,11,7,4,14],[10,7,11,7,4,14],[4,3,7,4,13,3],[3,4,0,3,7,4,3,0,13],[3,7,9,3,8,13,9,7,4],[3,
4,1,3,7,4],[0,3,4,7,4,3],[7,9,3,7,4,9],[3,4,8,3,7,4],[0,3,4,7,4,3],[7,9,3,7,4,9],[3,2,13,13,2,4,2,7,4],[2,7,4,0,13,3],[2,7,4,8,13,3],[2,7,4,2,4,1],[7,4,2],[7,4,2],[2,7,4,2,4,8],[7,4,2],[7,4,2],[3,9,13,9,4,13,14,7,4],[0,13,3,14,7,4],[8,13,3,14,7,4],[9,4,1,14,7,4],[7,4,14],[7,4,14],[9,4,8,14,7,4],[7,4,14],[7,4,14],[4,11,7,4,10,11,4,13,10],[11,7,4,11,4,0,10,0,13],[11,7,9,9,7,4,10,8,13],[11,7,4,11,4,1],[0,11,4,7,4,11],[7,4,9,7,9,11],[11,7,4,11,4,8],[0,11,4,7,4,11],[7,4,9,7,9,11],[10,4,13,10,2,4,2,7,4],
[2,7,4,0,13,10],[2,7,4,8,13,10],[2,7,4,2,4,1],[7,4,2],[7,4,2],[2,7,4,2,4,8],[7,4,2],[7,4,2],[10,9,13,9,4,13,14,7,4],[0,13,10,14,7,4],[8,13,10,14,7,4],[9,4,1,14,7,4],[7,4,14],[7,4,14],[9,4,8,14,7,4],[7,4,14],[7,4,14],[17,12,7,13,7,12],[17,0,7,0,13,7],[8,13,7,9,8,7,17,9,7],[12,1,7,17,12,7],[1,7,0,0,7,17],[1,7,9,9,7,17],[8,10,12,12,10,17,17,10,7],[10,7,0,0,7,17],[9,7,17,10,7,9],[12,13,2,2,13,7,17,2,7],[2,7,17,2,13,7,2,0,13],[2,7,17,2,8,7,8,13,7],[2,7,17,2,1,7,2,12,1],[1,7,2,7,17,2],[1,7,2,7,17,2],[2,
7,17,2,10,7,2,12,8],[7,17,2,10,7,2],[7,17,2,10,7,2],[12,13,9,11,13,7,9,13,11,17,14,7],[11,0,13,11,13,7,14,7,17],[11,8,13,11,13,7,14,7,17],[9,12,1,11,1,7,14,7,17],[1,7,11,7,17,14],[1,7,11,7,17,14],[9,12,8,11,10,7,14,7,17],[10,7,11,7,17,14],[10,7,11,7,17,14],[17,12,3,17,3,7,12,13,3],[3,7,17,3,17,0,3,0,13],[3,7,9,3,8,13,9,7,17],[3,7,17,3,17,12,3,12,1],[0,3,17,7,17,3],[7,9,3,7,17,9],[3,7,17,3,17,12,3,12,8],[0,3,17,7,17,3],[7,9,3,7,17,9],[3,12,13,3,2,12,2,7,17],[2,7,17,0,13,3],[2,7,17,8,13,3],[2,7,17,
2,12,1],[7,17,2],[7,17,2],[2,7,17,2,12,8],[7,17,2],[7,17,2],[3,9,13,9,12,13,14,7,17],[0,13,3,14,7,17],[8,13,3,14,7,17],[9,12,1,14,7,17],[7,17,14],[7,17,14],[9,12,8,14,7,17],[7,17,14],[7,17,14],[17,12,11,17,11,7,12,10,11,12,13,10],[11,17,0,11,7,17,10,0,13],[11,7,17,11,17,9,10,8,13],[11,17,12,11,7,17,11,12,1],[0,11,17,7,17,11],[7,17,11,17,9,11],[11,17,12,11,7,17,11,12,8],[0,11,17,7,17,11],[7,17,11,17,9,11],[10,2,12,10,12,13,2,7,17],[2,7,17,0,13,10],[2,7,17,8,13,10],[2,7,17,2,12,1],[7,17,2],[7,17,2],
[2,7,17,2,12,8],[7,17,2],[7,17,2],[10,12,13,10,9,12,14,7,17],[0,13,10,14,7,17],[8,13,10,14,7,17],[9,12,1,14,7,17],[7,17,14],[7,17,14],[9,12,8,14,7,17],[7,17,14],[7,17,14],[],[],[6,7,12,6,9,7,8,7,9,12,7,8],[],[],[1,12,7,1,7,9,7,6,9,12,6,7],[6,7,13,6,10,7,6,8,10,6,13,8],[7,6,10,13,6,7,13,0,6,0,10,6],[13,12,7,12,6,7,7,6,9,10,7,9],[6,7,2],[2,0,7,0,6,7],[2,8,7,8,12,7,12,6,7],[2,6,1,2,1,7,1,6,7],[1,7,2,1,6,7,1,0,6],[1,7,2,1,12,7,12,6,7],[2,6,8,2,10,7,8,6,13,13,6,7],[13,0,6,13,6,7,10,7,2],[12,6,7,13,12,
7,10,7,2],[6,7,9,11,9,7],[11,0,7,0,6,7],[8,12,7,11,8,7,12,6,7],[9,6,1,1,6,7,11,1,7],[1,7,11,1,6,7,1,0,6],[1,7,11,1,12,7,12,6,7],[9,6,8,8,6,13,11,10,7,13,6,7],[13,0,6,13,6,7,10,7,11],[12,6,7,13,12,7,10,7,11],[6,7,3],[3,6,0,3,0,7,0,6,7],[3,6,9,3,8,7,8,12,7,12,6,7],[3,6,1,1,6,7],[1,6,7,1,0,6,0,3,6],[1,12,7,12,6,7,9,3,6],[3,6,8,8,6,13,13,6,7],[13,0,6,13,6,7,0,3,6],[12,6,7,13,12,7,9,3,6],[3,2,6,3,6,7],[0,6,7,0,7,3],[8,7,3,12,7,8,12,6,7],[2,6,1,1,6,7],[1,6,7,1,0,6],[1,12,7,12,6,7],[2,6,8,8,6,13,13,6,7],
[13,0,6,13,6,7],[12,6,7,13,12,7],[3,9,7,7,9,6],[0,6,7,0,7,3],[8,7,3,12,7,8,12,6,7],[9,6,1,1,6,7],[1,6,7,1,0,6],[1,12,7,12,6,7],[8,6,13,9,6,8,13,6,7],[13,0,6,13,6,7],[12,6,7,13,12,7],[6,7,10,6,10,11],[11,6,0,0,6,7,10,0,7],[11,6,9,8,12,7,10,8,7,12,6,7],[11,6,1,1,6,7],[1,6,7,1,0,6,0,11,6],[1,12,7,12,6,7,9,11,6],[11,6,8,8,6,13,13,6,7],[13,0,6,13,6,7,0,11,6],[12,6,7,13,12,7,9,11,6],[2,6,10,7,10,6],[0,6,7,0,7,10],[8,7,10,12,7,8,12,6,7],[2,6,1,1,6,7],[1,6,7,1,0,6],[1,12,7,12,6,7],[2,6,8,8,6,13,13,6,7],[13,
0,6,13,6,7],[12,6,7,13,12,7],[7,9,6,10,9,7],[0,6,7,0,7,10],[8,7,10,12,7,8,12,6,7],[9,6,1,1,6,7],[1,6,7,1,0,6],[1,12,7,12,6,7],[8,6,13,9,6,8,13,6,7],[13,0,6,13,6,7],[12,6,7,13,12,7],[6,4,7],[4,7,0,0,7,6],[4,7,8,8,7,9,9,7,6],[4,1,6,4,7,1,1,7,6],[1,4,7,1,7,6,1,6,0],[1,4,7,1,7,9,9,7,6],[4,8,6,4,7,13,8,10,6,10,7,6],[10,6,0,10,7,6,13,4,7],[9,7,6,10,7,9,13,4,7],[4,7,2],[2,0,7,0,4,7],[2,8,7,8,4,7],[2,4,1,2,1,7,1,4,7],[1,7,2,1,4,7],[1,7,2,1,4,7],[2,4,8,2,10,7,13,4,7],[10,7,2,13,4,7],[10,7,2,13,4,7],[4,7,9,
9,7,11],[11,0,7,0,4,7],[8,4,7,11,8,7],[9,4,1,1,4,7,11,1,7],[1,7,11,1,4,7],[1,7,11,1,4,7],[9,4,8,11,10,7,13,4,7],[10,7,11,13,4,7],[10,7,11,13,4,7],[4,3,6,4,7,3],[3,0,4,3,4,7,3,6,0],[3,8,7,3,6,9,8,4,7],[3,4,1,3,6,4,1,4,7],[1,4,7,0,3,6],[1,4,7,9,3,6],[3,6,8,8,6,4,13,4,7],[0,3,6,13,4,7],[9,3,6,13,4,7],[3,2,4,3,4,7],[0,4,3,7,3,4],[7,3,8,7,8,4],[2,4,1,1,4,7],[1,4,7],[1,4,7],[2,4,8,13,4,7],[13,4,7],[13,4,7],[3,9,4,3,4,7],[0,4,3,7,3,4],[7,3,8,7,8,4],[9,4,1,1,4,7],[1,4,7],[1,4,7],[9,4,8,13,4,7],[13,4,7],[13,
4,7],[4,11,6,4,7,10,4,10,11],[10,4,7,10,0,4,11,6,0],[10,8,7,8,4,7,11,6,9],[11,6,4,11,4,1,1,4,7],[1,4,7,0,11,6],[1,4,7,9,11,6],[11,6,8,8,6,4,13,4,7],[0,11,6,13,4,7],[9,11,6,13,4,7],[10,4,7,10,2,4],[0,4,10,7,10,4],[7,8,4,7,10,8],[2,4,1,1,4,7],[1,4,7],[1,4,7],[2,4,8,13,4,7],[13,4,7],[13,4,7],[10,4,7,10,9,4],[0,4,10,7,10,4],[7,8,4,7,10,8],[9,4,1,1,4,7],[1,4,7],[1,4,7],[9,4,8,13,4,7],[13,4,7],[13,4,7],[6,12,7,16,7,12],[16,7,0,0,7,6],[8,7,9,16,7,8,9,7,6],[12,1,6,1,7,6,16,7,1],[1,16,7,1,7,6,1,6,0],[1,16,
7,1,7,9,9,7,6],[12,8,6,8,10,6,16,7,13,10,7,6],[10,6,0,10,7,6,13,16,7],[9,7,6,10,7,9,13,16,7],[12,7,2,16,7,12],[2,0,7,0,16,7],[2,8,7,8,16,7],[2,1,7,2,12,1,1,16,7],[1,7,2,1,16,7],[1,7,2,1,16,7],[2,10,7,2,12,8,13,16,7],[10,7,2,13,16,7],[10,7,2,13,16,7],[9,12,11,12,16,11,16,7,11],[11,0,7,0,16,7],[8,16,7,11,8,7],[9,12,1,1,16,7,11,1,7],[1,7,11,1,16,7],[1,7,11,1,16,7],[9,12,8,11,10,7,13,16,7],[10,7,11,13,16,7],[10,7,11,13,16,7],[16,3,12,16,7,3,12,3,6],[3,16,7,3,0,16,3,6,0],[3,8,7,3,6,9,8,16,7],[3,6,12,3,
12,1,1,16,7],[1,16,7,0,3,6],[1,16,7,9,3,6],[3,6,8,13,16,7,8,6,12],[0,3,6,13,16,7],[9,3,6,13,16,7],[3,16,7,3,12,16,3,2,12],[0,16,3,7,3,16],[7,3,8,7,8,16],[2,12,1,1,16,7],[1,16,7],[1,16,7],[2,12,8,13,16,7],[13,16,7],[13,16,7],[3,16,7,3,12,16,3,9,12],[0,16,3,7,3,16],[7,3,8,7,8,16],[9,12,1,1,16,7],[1,16,7],[1,16,7],[9,12,8,13,16,7],[13,16,7],[13,16,7],[16,10,12,16,7,10,12,11,6,12,10,11],[10,0,16,10,16,7,11,6,0],[10,16,7,10,8,16,11,6,9],[11,12,1,11,6,12,1,16,7],[1,16,7,0,11,6],[1,16,7,9,11,6],[11,6,12,
11,12,8,13,16,7],[0,11,6,13,16,7],[9,11,6,13,16,7],[10,12,16,10,16,7,10,2,12],[0,16,10,7,10,16],[7,10,16,16,10,8],[2,12,1,1,16,7],[1,16,7],[1,16,7],[2,12,8,13,16,7],[13,16,7],[13,16,7],[10,12,16,10,16,7,10,9,12],[0,16,10,7,10,16],[7,10,16,16,10,8],[9,12,1,1,16,7],[1,16,7],[1,16,7],[9,12,8,13,16,7],[13,16,7],[13,16,7],[6,5,7],[5,0,6,5,7,0,0,7,6],[5,12,6,5,7,8,8,7,9,9,7,6],[5,1,6,1,7,6],[1,7,6,1,6,0,0,6,5],[1,7,9,9,7,6,12,6,5],[5,8,6,8,10,6,10,7,6],[10,6,0,10,7,6,0,6,5],[9,7,6,10,7,9,12,6,5],[5,2,6,
5,7,2],[2,0,5,2,5,7,0,6,5],[2,8,7,8,5,7,12,6,5],[2,5,1,2,6,5,2,1,7],[1,7,2,0,6,5],[1,7,2,12,6,5],[2,6,8,2,10,7,8,6,5],[0,6,5,10,7,2],[12,6,5,10,7,2],[5,9,6,5,7,11,5,11,9],[11,5,7,11,0,5,0,6,5],[11,8,7,8,5,7,12,6,5],[9,6,5,9,5,1,11,1,7],[1,7,11,0,6,5],[1,7,11,12,6,5],[9,6,8,8,6,5,11,10,7],[0,6,5,10,7,11],[12,6,5,10,7,11],[5,3,6],[3,0,5,3,6,0,0,6,5],[3,8,5,3,6,9,12,6,5],[3,6,1,1,6,5],[0,6,5,0,3,6],[9,3,6,12,6,5],[3,6,8,8,6,5],[0,6,5,0,3,6],[9,3,6,12,6,5],[3,2,5,2,6,5],[6,5,0,0,5,3],[6,5,12,8,5,3],[2,
6,5,2,5,1],[0,6,5],[12,6,5],[2,6,8,8,6,5],[0,6,5],[12,6,5],[3,9,5,9,6,5],[6,5,0,0,5,3],[6,5,12,8,5,3],[9,5,1,9,6,5],[0,6,5],[12,6,5],[8,6,5,9,6,8],[0,6,5],[12,6,5],[5,10,6,10,11,6],[10,0,5,0,6,5,11,6,0],[10,8,5,11,6,9,12,6,5],[11,6,1,1,6,5],[0,6,5,0,11,6],[9,11,6,12,6,5],[8,6,5,11,6,8],[0,6,5,0,11,6],[9,11,6,12,6,5],[10,2,5,2,6,5],[6,5,0,0,5,10],[6,5,12,8,5,10],[2,6,5,2,5,1],[0,6,5],[12,6,5],[2,6,8,8,6,5],[0,6,5],[12,6,5],[10,9,5,9,6,5],[6,5,0,0,5,10],[6,5,12,8,5,10],[9,5,1,9,6,5],[0,6,5],[12,6,5],
[8,6,5,9,6,8],[0,6,5],[12,6,5],[5,6,4,5,7,6],[0,7,6,0,5,7],[8,5,7,9,8,7,9,7,6],[4,1,6,1,7,6],[1,7,6,1,6,0],[1,7,9,9,7,6],[4,8,6,8,10,6,10,7,6],[10,6,0,10,7,6],[9,7,6,10,7,9],[4,5,2,2,5,7],[2,5,7,2,0,5],[2,8,7,8,5,7],[2,4,1,2,1,7],[1,7,2],[1,7,2],[2,4,8,2,10,7],[10,7,2],[10,7,2],[4,5,9,9,5,11,11,5,7],[11,0,5,11,5,7],[8,5,7,11,8,7],[9,4,1,11,1,7],[1,7,11],[1,7,11],[9,4,8,11,10,7],[10,7,11],[10,7,11],[4,5,3,4,3,6],[3,6,0,3,0,5],[3,6,9,3,8,5],[3,4,1,3,6,4],[0,3,6],[9,3,6],[3,6,8,8,6,4],[0,3,6],[9,3,6],
[3,2,4,3,4,5],[0,5,3],[8,5,3],[2,4,1],[],[],[2,4,8],[],[],[3,9,5,9,4,5],[0,5,3],[8,5,3],[9,4,1],[],[],[9,4,8],[],[],[4,5,10,4,11,6,4,10,11],[11,6,0,10,0,5],[11,6,9,10,8,5],[11,6,4,11,4,1],[0,11,6],[9,11,6],[11,6,8,8,6,4],[0,11,6],[9,11,6],[10,4,5,10,2,4],[0,5,10],[8,5,10],[2,4,1],[],[],[2,4,8],[],[],[10,9,5,9,4,5],[0,5,10],[8,5,10],[9,4,1],[],[],[9,4,8],[],[],[5,7,12,7,6,12],[0,7,6,0,5,7],[8,5,7,9,8,7,9,7,6],[12,1,6,1,7,6],[1,7,6,1,6,0],[1,7,9,9,7,6],[8,10,6,12,8,6,10,7,6],[10,6,0,10,7,6],[9,7,6,
10,7,9],[12,5,2,2,5,7],[2,5,7,2,0,5],[2,8,7,8,5,7],[2,1,7,2,12,1],[1,7,2],[1,7,2],[2,10,7,2,12,8],[10,7,2],[10,7,2],[12,5,9,9,5,11,11,5,7],[11,0,5,11,5,7],[8,5,7,11,8,7],[9,12,1,11,1,7],[1,7,11],[1,7,11],[9,12,8,11,10,7],[10,7,11],[10,7,11],[12,3,6,12,5,3],[3,6,0,3,0,5],[3,6,9,3,8,5],[3,6,12,3,12,1],[0,3,6],[9,3,6],[3,6,8,8,6,12],[0,3,6],[9,3,6],[3,12,5,3,2,12],[0,5,3],[8,5,3],[2,12,1],[],[],[2,12,8],[],[],[3,9,5,9,12,5],[0,5,3],[8,5,3],[9,12,1],[],[],[9,12,8],[],[],[12,11,6,12,10,11,12,5,10],[11,
6,0,10,0,5],[11,6,9,10,8,5],[11,12,1,11,6,12],[0,11,6],[9,11,6],[11,6,12,11,12,8],[0,11,6],[9,11,6],[10,2,12,10,12,5],[0,5,10],[8,5,10],[2,12,1],[],[],[2,12,8],[],[],[10,12,5,10,9,12],[0,5,10],[8,5,10],[9,12,1],[],[],[9,12,8],[],[],[6,13,7,6,16,13],[16,0,6,0,7,6,13,7,0],[16,12,6,8,7,9,13,7,8,9,7,6],[16,1,6,1,7,6],[1,7,6,1,6,0,0,6,16],[1,7,9,9,7,6,12,6,16],[16,8,6,8,10,6,10,7,6],[10,6,0,10,7,6,0,6,16],[9,7,6,10,7,9,12,6,16],[16,13,2,16,2,6,13,7,2],[2,13,7,2,0,13,0,6,16],[2,8,7,12,6,16,8,13,7],[2,6,
16,2,16,1,2,1,7],[1,7,2,0,6,16],[1,7,2,12,6,16],[2,6,8,2,10,7,8,6,16],[0,6,16,10,7,2],[12,6,16,10,7,2],[16,13,9,16,9,6,13,11,9,13,7,11],[11,0,13,11,13,7,0,6,16],[11,13,7,11,8,13,12,6,16],[9,16,1,9,6,16,11,1,7],[1,7,11,0,6,16],[1,7,11,12,6,16],[9,6,16,9,16,8,11,10,7],[0,6,16,10,7,11],[12,6,16,10,7,11],[16,13,6,13,3,6],[3,6,0,3,0,13,0,6,16],[3,6,9,3,8,13,12,6,16],[3,6,1,1,6,16],[0,6,16,0,3,6],[9,3,6,12,6,16],[3,6,8,8,6,16],[0,6,16,0,3,6],[9,3,6,12,6,16],[3,2,13,13,2,16,2,6,16],[6,16,0,0,13,3],[6,16,
12,8,13,3],[2,6,16,2,16,1],[0,6,16],[12,6,16],[2,6,8,8,6,16],[0,6,16],[12,6,16],[3,9,13,13,9,16,9,6,16],[6,16,0,0,13,3],[6,16,12,8,13,3],[9,16,1,9,6,16],[0,6,16],[12,6,16],[9,16,8,9,6,16],[0,6,16],[12,6,16],[13,11,16,10,11,13,16,11,6],[10,0,13,0,6,16,11,6,0],[10,8,13,11,6,9,12,6,16],[11,6,1,1,6,16],[0,6,16,0,11,6],[9,11,6,12,6,16],[8,6,16,11,6,8],[0,6,16,0,11,6],[9,11,6,12,6,16],[10,2,13,13,2,16,2,6,16],[6,16,0,0,13,10],[6,16,12,8,13,10],[2,6,16,2,16,1],[0,6,16],[12,6,16],[2,6,8,8,6,16],[0,6,16],
[12,6,16],[10,9,13,13,9,16,9,6,16],[6,16,0,0,13,10],[6,16,12,8,13,10],[9,16,1,9,6,16],[0,6,16],[12,6,16],[9,16,8,9,6,16],[0,6,16],[12,6,16],[4,13,6,7,6,13],[0,7,6,0,13,7],[8,13,7,9,8,7,9,7,6],[4,1,6,1,7,6],[1,7,6,1,6,0],[1,7,9,9,7,6],[4,8,6,8,10,6,10,7,6],[10,6,0,10,7,6],[9,7,6,10,7,9],[4,13,2,2,13,7],[2,13,7,2,0,13],[2,8,7,8,13,7],[2,4,1,2,1,7],[1,7,2],[1,7,2],[2,4,8,2,10,7],[10,7,2],[10,7,2],[4,13,9,9,13,11,11,13,7],[11,0,13,11,13,7],[11,8,13,11,13,7],[9,4,1,11,1,7],[1,7,11],[1,7,11],[9,4,8,11,
10,7],[10,7,11],[10,7,11],[4,3,6,4,13,3],[3,6,0,3,0,13],[3,6,9,3,8,13],[3,4,1,3,6,4],[0,3,6],[9,3,6],[3,6,8,8,6,4],[0,3,6],[9,3,6],[3,2,13,13,2,4],[0,13,3],[8,13,3],[2,4,1],[],[],[2,4,8],[],[],[3,9,13,9,4,13],[0,13,3],[8,13,3],[9,4,1],[],[],[9,4,8],[],[],[4,11,6,4,10,11,4,13,10],[11,6,0,10,0,13],[11,6,9,10,8,13],[11,6,4,11,4,1],[0,11,6],[9,11,6],[11,6,8,8,6,4],[0,11,6],[9,11,6],[10,4,13,10,2,4],[0,13,10],[8,13,10],[2,4,1],[],[],[2,4,8],[],[],[10,9,13,9,4,13],[0,13,10],[8,13,10],[9,4,1],[],[],[9,4,
8],[],[],[7,6,12,13,7,12],[0,7,6,0,13,7],[8,13,7,9,8,7,9,7,6],[12,1,6,1,7,6],[1,7,6,1,6,0],[1,7,9,9,7,6],[8,10,6,12,8,6,10,7,6],[10,6,0,10,7,6],[9,7,6,10,7,9],[12,13,2,2,13,7],[2,13,7,2,0,13],[2,8,7,8,13,7],[2,1,7,2,12,1],[1,7,2],[1,7,2],[2,10,7,2,12,8],[10,7,2],[10,7,2],[12,13,9,11,13,7,9,13,11],[11,0,13,11,13,7],[11,8,13,11,13,7],[9,12,1,11,1,7],[1,7,11],[1,7,11],[9,12,8,11,10,7],[10,7,11],[10,7,11],[12,3,6,12,13,3],[3,6,0,3,0,13],[3,6,9,3,8,13],[3,6,12,3,12,1],[0,3,6],[9,3,6],[3,6,8,8,6,12],[0,
3,6],[9,3,6],[3,12,13,3,2,12],[0,13,3],[8,13,3],[2,12,1],[],[],[2,12,8],[],[],[3,9,13,9,12,13],[0,13,3],[8,13,3],[9,12,1],[],[],[9,12,8],[],[],[12,11,6,12,10,11,12,13,10],[11,6,0,10,0,13],[11,6,9,10,8,13],[11,12,1,11,6,12],[0,11,6],[9,11,6],[11,6,12,11,12,8],[0,11,6],[9,11,6],[10,2,12,10,12,13],[0,13,10],[8,13,10],[2,12,1],[],[],[2,12,8],[],[],[10,12,13,10,9,12],[0,13,10],[8,13,10],[9,12,1],[],[],[9,12,8],[],[],[7,14,17],[17,7,0,0,7,14],[17,7,12,12,7,8,8,7,9,14,9,7],[17,1,14,17,7,1,1,7,14],[1,17,
7,1,0,17,1,14,0,1,7,14],[1,12,7,1,7,9,7,14,9,12,17,7],[17,8,14,17,13,8,17,7,13,14,8,10,14,10,7],[7,14,10,13,0,17,13,17,7,0,10,14],[13,17,7,13,12,17,10,7,14,10,14,9],[2,17,7],[2,0,7,0,17,7],[2,8,7,8,12,7,12,17,7],[2,1,7,2,17,1,1,17,7],[1,7,2,1,17,7,1,0,17],[1,7,2,1,12,7,12,17,7],[2,10,7,2,17,8,8,17,13,13,17,7],[13,0,17,13,17,7,10,7,2],[13,12,17,13,17,7,10,7,2],[11,9,7,17,7,9],[11,0,7,0,17,7],[8,12,7,11,8,7,12,17,7],[9,17,1,1,17,7,11,1,7],[1,7,11,1,17,7,1,0,17],[1,7,11,1,12,7,12,17,7],[9,17,8,13,17,
7,8,17,13,11,10,7],[13,0,17,13,17,7,10,7,11],[13,12,17,13,17,7,10,7,11],[14,17,3,3,17,7],[3,0,7,3,14,0,0,17,7],[3,8,7,3,14,9,8,12,7,12,17,7],[3,14,1,14,17,1,1,17,7],[1,17,7,1,0,17,0,3,14],[1,12,7,12,17,7,9,3,14],[3,14,8,14,17,8,13,17,7,8,17,13],[13,0,17,13,17,7,0,3,14],[13,12,17,13,17,7,9,3,14],[3,17,7,3,2,17],[0,17,7,0,7,3],[8,7,3,12,7,8,12,17,7],[2,17,1,1,17,7],[1,17,7,1,0,17],[1,12,7,12,17,7],[2,17,8,8,17,13,13,17,7],[13,0,17,13,17,7],[13,12,17,13,17,7],[3,9,7,7,9,17],[0,17,7,0,7,3],[8,7,3,12,
7,8,12,17,7],[9,17,1,1,17,7],[1,17,7,1,0,17],[1,12,7,12,17,7],[8,17,13,9,17,8,13,17,7],[13,0,17,13,17,7],[13,12,17,13,17,7],[14,10,11,17,10,14,17,7,10],[11,14,0,0,17,7,10,0,7],[11,14,9,8,12,7,10,8,7,12,17,7],[11,14,1,14,17,1,1,17,7],[1,17,7,1,0,17,0,11,14],[1,12,7,12,17,7,9,11,14],[11,14,8,14,17,8,8,17,13,13,17,7],[13,0,17,13,17,7,0,11,14],[13,12,17,13,17,7,9,11,14],[2,17,10,7,10,17],[0,17,7,0,7,10],[8,7,10,12,7,8,12,17,7],[2,17,1,1,17,7],[1,17,7,1,0,17],[1,12,7,12,17,7],[2,17,8,8,17,13,13,17,7],
[13,0,17,13,17,7],[13,12,17,13,17,7],[10,17,7,10,9,17],[0,17,7,0,7,10],[8,7,10,12,7,8,12,17,7],[9,17,1,1,17,7],[1,17,7,1,0,17],[1,12,7,12,17,7],[8,17,13,9,17,8,13,17,7],[13,0,17,13,17,7],[13,12,17,13,17,7],[4,7,14],[4,7,0,0,7,14],[4,7,8,8,7,9,9,7,14],[4,7,1,4,1,14,1,7,14],[1,4,7,1,7,14,1,14,0],[1,4,7,1,7,9,9,7,14],[4,7,13,4,8,14,8,10,14,10,7,14],[10,14,0,10,7,14,13,4,7],[10,14,9,10,7,14,13,4,7],[4,7,2],[2,0,7,0,4,7],[2,8,7,8,4,7],[2,4,1,2,1,7,1,4,7],[1,7,2,1,4,7],[1,7,2,1,4,7],[2,4,8,2,10,7,13,4,
7],[10,7,2,13,4,7],[10,7,2,13,4,7],[4,7,9,9,7,11],[11,0,7,0,4,7],[8,4,7,11,8,7],[9,4,1,1,4,7,11,1,7],[1,7,11,1,4,7],[1,7,11,1,4,7],[9,4,8,11,10,7,13,4,7],[10,7,11,13,4,7],[10,7,11,13,4,7],[4,7,3,4,3,14],[3,0,4,3,4,7,3,14,0],[3,8,7,3,14,9,8,4,7],[3,14,1,14,4,1,1,4,7],[1,4,7,0,3,14],[1,4,7,9,3,14],[3,14,8,8,14,4,13,4,7],[0,3,14,13,4,7],[9,3,14,13,4,7],[3,2,4,3,4,7],[0,4,3,7,3,4],[7,3,8,7,8,4],[2,4,1,1,4,7],[1,4,7],[1,4,7],[2,4,8,13,4,7],[13,4,7],[13,4,7],[3,9,4,3,4,7],[0,4,3,7,3,4],[7,3,8,7,8,4],[9,
4,1,1,4,7],[1,4,7],[1,4,7],[9,4,8,13,4,7],[13,4,7],[13,4,7],[4,7,10,4,10,11,4,11,14],[10,4,7,10,0,4,11,14,0],[10,8,7,8,4,7,11,14,9],[11,14,4,11,4,1,1,4,7],[1,4,7,0,11,14],[1,4,7,9,11,14],[11,14,8,8,14,4,13,4,7],[0,11,14,13,4,7],[9,11,14,13,4,7],[10,4,7,10,2,4],[0,4,10,7,10,4],[7,8,4,7,10,8],[2,4,1,1,4,7],[1,4,7],[1,4,7],[2,4,8,13,4,7],[13,4,7],[13,4,7],[10,4,7,10,9,4],[0,4,10,7,10,4],[7,8,4,7,10,8],[9,4,1,1,4,7],[1,4,7],[1,4,7],[9,4,8,13,4,7],[13,4,7],[13,4,7],[16,7,12,14,12,7],[16,7,0,0,7,14],[8,
7,9,16,7,8,9,7,14],[12,1,14,1,7,14,16,7,1],[1,16,7,1,7,14,1,14,0],[1,16,7,1,7,9,9,7,14],[12,8,14,10,7,14,8,10,14,16,7,13],[10,14,0,10,7,14,13,16,7],[10,14,9,10,7,14,13,16,7],[12,7,2,16,7,12],[2,0,7,0,16,7],[2,8,7,8,16,7],[2,1,7,2,12,1,1,16,7],[1,7,2,1,16,7],[1,7,2,1,16,7],[2,10,7,2,12,8,13,16,7],[10,7,2,13,16,7],[10,7,2,13,16,7],[9,12,11,12,16,11,16,7,11],[11,0,7,0,16,7],[8,16,7,11,8,7],[9,12,1,1,16,7,11,1,7],[1,7,11,1,16,7],[1,7,11,1,16,7],[9,12,8,11,10,7,13,16,7],[10,7,11,13,16,7],[10,7,11,13,16,
7],[16,3,12,16,7,3,12,3,14],[3,16,7,3,0,16,3,14,0],[3,8,7,3,14,9,8,16,7],[3,14,12,3,12,1,1,16,7],[1,16,7,0,3,14],[1,16,7,9,3,14],[3,14,8,8,14,12,13,16,7],[0,3,14,13,16,7],[9,3,14,13,16,7],[3,16,7,3,12,16,3,2,12],[0,16,3,7,3,16],[7,3,8,7,8,16],[2,12,1,1,16,7],[1,16,7],[1,16,7],[2,12,8,13,16,7],[13,16,7],[13,16,7],[3,16,7,3,12,16,3,9,12],[0,16,3,7,3,16],[7,3,8,7,8,16],[9,12,1,1,16,7],[1,16,7],[1,16,7],[9,12,8,13,16,7],[13,16,7],[13,16,7],[16,10,12,16,7,10,12,11,14,12,10,11],[10,0,16,10,16,7,11,14,0],
[10,16,7,10,8,16,11,14,9],[11,12,1,11,14,12,1,16,7],[1,16,7,0,11,14],[1,16,7,9,11,14],[11,14,12,11,12,8,13,16,7],[0,11,14,13,16,7],[9,11,14,13,16,7],[10,12,16,10,16,7,10,2,12],[0,16,10,7,10,16],[7,10,16,16,10,8],[2,12,1,1,16,7],[1,16,7],[1,16,7],[2,12,8,13,16,7],[13,16,7],[13,16,7],[10,12,16,10,16,7,10,9,12],[0,16,10,7,10,16],[7,10,16,16,10,8],[9,12,1,1,16,7],[1,16,7],[1,16,7],[9,12,8,13,16,7],[13,16,7],[13,16,7],[17,5,14,5,7,14],[5,7,0,5,0,17,0,7,14],[5,7,8,5,12,17,8,7,9,9,7,14],[5,1,17,1,14,17,
1,7,14],[1,7,14,1,14,0,0,17,5],[1,7,9,9,7,14,12,17,5],[5,8,17,8,14,17,8,10,14,10,7,14],[10,14,0,10,7,14,0,17,5],[10,14,9,10,7,14,12,17,5],[5,7,2,5,2,17],[2,0,5,2,5,7,0,17,5],[2,8,7,8,5,7,12,17,5],[2,17,1,2,1,7,17,5,1],[1,7,2,0,17,5],[1,7,2,12,17,5],[2,17,8,2,10,7,8,17,5],[0,17,5,10,7,2],[12,17,5,10,7,2],[5,7,11,5,11,9,5,9,17],[11,5,7,11,0,5,0,17,5],[11,8,7,8,5,7,12,17,5],[9,17,5,9,5,1,11,1,7],[1,7,11,0,17,5],[1,7,11,12,17,5],[9,17,8,8,17,5,11,10,7],[0,17,5,10,7,11],[12,17,5,10,7,11],[5,3,14,5,14,
17],[3,0,5,3,14,0,0,17,5],[3,8,5,3,14,9,12,17,5],[3,14,1,14,17,1,1,17,5],[0,17,5,0,3,14],[9,3,14,12,17,5],[3,14,8,8,17,5,14,17,8],[0,17,5,0,3,14],[9,3,14,12,17,5],[3,2,5,2,17,5],[0,5,3,17,5,0],[8,5,3,17,5,12],[2,17,1,17,5,1],[0,17,5],[12,17,5],[2,17,8,8,17,5],[0,17,5],[12,17,5],[3,9,5,9,17,5],[0,5,3,17,5,0],[8,5,3,17,5,12],[9,5,1,9,17,5],[0,17,5],[12,17,5],[8,17,5,9,17,8],[0,17,5],[12,17,5],[5,10,17,17,10,14,10,11,14],[10,0,5,0,17,5,11,14,0],[10,8,5,11,14,9,12,17,5],[11,14,1,14,17,1,1,17,5],[0,17,
5,0,11,14],[9,11,14,12,17,5],[8,17,5,14,17,8,11,14,8],[0,17,5,0,11,14],[9,11,14,12,17,5],[10,2,5,2,17,5],[0,5,10,17,5,0],[17,5,12,8,5,10],[2,17,1,17,5,1],[0,17,5],[12,17,5],[2,17,8,8,17,5],[0,17,5],[12,17,5],[10,9,5,9,17,5],[0,5,10,17,5,0],[17,5,12,8,5,10],[9,5,1,9,17,5],[0,17,5],[12,17,5],[8,17,5,9,17,8],[0,17,5],[12,17,5],[5,7,14,5,14,4],[0,7,14,0,5,7],[8,5,7,9,8,7,9,7,14],[4,1,14,1,7,14],[1,7,14,1,14,0],[1,7,9,9,7,14],[4,8,14,8,10,14,10,7,14],[10,14,0,10,7,14],[10,14,9,10,7,14],[4,5,2,2,5,7],[2,
5,7,2,0,5],[2,8,7,8,5,7],[2,4,1,2,1,7],[1,7,2],[1,7,2],[2,4,8,2,10,7],[10,7,2],[10,7,2],[4,5,9,9,5,11,11,5,7],[11,0,5,11,5,7],[8,5,7,11,8,7],[9,4,1,11,1,7],[1,7,11],[1,7,11],[9,4,8,11,10,7],[10,7,11],[10,7,11],[4,5,3,4,3,14],[3,14,0,3,0,5],[3,14,9,3,8,5],[3,14,1,14,4,1],[0,3,14],[9,3,14],[3,14,8,8,14,4],[0,3,14],[9,3,14],[3,2,4,3,4,5],[0,5,3],[8,5,3],[2,4,1],[],[],[2,4,8],[],[],[3,9,5,9,4,5],[0,5,3],[8,5,3],[9,4,1],[],[],[9,4,8],[],[],[4,5,10,4,11,14,4,10,11],[11,14,0,10,0,5],[11,14,9,10,8,5],[11,
14,4,11,4,1],[0,11,14],[9,11,14],[11,14,8,8,14,4],[0,11,14],[9,11,14],[10,4,5,10,2,4],[0,5,10],[8,5,10],[2,4,1],[],[],[2,4,8],[],[],[10,9,5,9,4,5],[0,5,10],[8,5,10],[9,4,1],[],[],[9,4,8],[],[],[5,7,12,7,14,12],[0,7,14,0,5,7],[8,5,7,9,8,7,9,7,14],[12,1,14,1,7,14],[1,7,14,1,14,0],[1,7,9,9,7,14],[8,10,14,12,8,14,10,7,14],[10,14,0,10,7,14],[10,14,9,10,7,14],[12,5,2,2,5,7],[2,5,7,2,0,5],[2,8,7,8,5,7],[2,1,7,2,12,1],[1,7,2],[1,7,2],[2,10,7,2,12,8],[10,7,2],[10,7,2],[12,5,9,9,5,11,11,5,7],[11,0,5,11,5,7],
[8,5,7,11,8,7],[9,12,1,11,1,7],[1,7,11],[1,7,11],[9,12,8,11,10,7],[10,7,11],[10,7,11],[12,3,14,12,5,3],[3,14,0,3,0,5],[3,14,9,3,8,5],[3,14,12,3,12,1],[0,3,14],[9,3,14],[3,14,8,8,14,12],[0,3,14],[9,3,14],[3,12,5,3,2,12],[0,5,3],[8,5,3],[2,12,1],[],[],[2,12,8],[],[],[3,9,5,9,12,5],[0,5,3],[8,5,3],[9,12,1],[],[],[9,12,8],[],[],[12,11,14,12,10,11,12,5,10],[11,14,0,10,0,5],[11,14,9,10,8,5],[11,12,1,11,14,12],[0,11,14],[9,11,14],[11,14,12,11,12,8],[0,11,14],[9,11,14],[10,2,12,10,12,5],[0,5,10],[8,5,10],
[2,12,1],[],[],[2,12,8],[],[],[10,12,5,10,9,12],[0,5,10],[8,5,10],[9,12,1],[],[],[9,12,8],[],[],[16,13,14,17,16,14,14,13,7],[16,0,17,0,7,14,13,7,0],[16,12,17,8,7,9,13,7,8,9,7,14],[1,17,16,1,14,17,1,7,14],[1,7,14,1,14,0,0,17,16],[1,7,9,9,7,14,12,17,16],[16,8,17,8,14,17,8,10,14,10,7,14],[10,14,0,10,7,14,0,17,16],[10,14,9,10,7,14,12,17,16],[16,13,2,16,2,17,13,7,2],[2,13,7,2,0,13,0,17,16],[2,8,7,12,17,16,8,13,7],[2,17,16,2,16,1,2,1,7],[1,7,2,0,17,16],[1,7,2,12,17,16],[2,17,8,2,10,7,8,17,16],[0,17,16,
10,7,2],[12,17,16,10,7,2],[16,13,9,16,9,17,13,11,9,13,7,11],[11,0,13,11,13,7,0,17,16],[11,13,7,11,8,13,12,17,16],[9,16,1,9,17,16,11,1,7],[1,7,11,0,17,16],[1,7,11,12,17,16],[9,17,16,9,16,8,11,10,7],[0,17,16,10,7,11],[12,17,16,10,7,11],[13,14,16,13,3,14,16,14,17],[3,14,0,3,0,13,0,17,16],[3,14,9,3,8,13,12,17,16],[3,14,1,14,17,1,17,16,1],[0,17,16,0,3,14],[9,3,14,12,17,16],[3,14,8,8,17,16,14,17,8],[0,17,16,0,3,14],[9,3,14,12,17,16],[3,2,13,13,2,16,2,17,16],[0,13,3,17,16,0],[8,13,3,17,16,12],[2,17,16,2,
16,1],[0,17,16],[12,17,16],[2,17,8,8,17,16],[0,17,16],[12,17,16],[3,9,13,13,9,16,9,17,16],[0,13,3,17,16,0],[8,13,3,17,16,12],[9,16,1,9,17,16],[0,17,16],[12,17,16],[9,16,8,9,17,16],[0,17,16],[12,17,16],[13,14,16,13,11,14,10,11,13,16,14,17],[10,0,13,0,17,16,11,14,0],[10,8,13,11,14,9,12,17,16],[11,14,1,14,17,1,17,16,1],[0,17,16,0,11,14],[9,11,14,12,17,16],[8,17,16,14,17,8,11,14,8],[0,17,16,0,11,14],[9,11,14,12,17,16],[10,2,13,13,2,16,2,17,16],[0,13,10,17,16,0],[17,16,12,8,13,10],[2,17,16,2,16,1],[0,
17,16],[12,17,16],[2,17,8,8,17,16],[0,17,16],[12,17,16],[10,9,13,13,9,16,9,17,16],[0,13,10,17,16,0],[17,16,12,8,13,10],[9,16,1,9,17,16],[0,17,16],[12,17,16],[9,16,8,9,17,16],[0,17,16],[12,17,16],[4,13,14,7,14,13],[0,7,14,0,13,7],[8,13,7,9,8,7,9,7,14],[4,1,14,1,7,14],[1,7,14,1,14,0],[1,7,9,9,7,14],[4,8,14,8,10,14,10,7,14],[10,14,0,10,7,14],[10,14,9,10,7,14],[4,13,2,2,13,7],[2,13,7,2,0,13],[2,8,7,8,13,7],[2,4,1,2,1,7],[1,7,2],[1,7,2],[2,4,8,2,10,7],[10,7,2],[10,7,2],[4,13,9,9,13,11,11,13,7],[11,0,13,
11,13,7],[11,8,13,11,13,7],[9,4,1,11,1,7],[1,7,11],[1,7,11],[9,4,8,11,10,7],[10,7,11],[10,7,11],[4,3,14,4,13,3],[3,14,0,3,0,13],[3,14,9,3,8,13],[3,14,1,14,4,1],[0,3,14],[9,3,14],[3,14,8,8,14,4],[0,3,14],[9,3,14],[3,2,13,13,2,4],[0,13,3],[8,13,3],[2,4,1],[],[],[2,4,8],[],[],[3,9,13,9,4,13],[0,13,3],[8,13,3],[9,4,1],[],[],[9,4,8],[],[],[4,11,14,4,10,11,4,13,10],[11,14,0,10,0,13],[11,14,9,10,8,13],[11,14,4,11,4,1],[0,11,14],[9,11,14],[11,14,8,8,14,4],[0,11,14],[9,11,14],[10,4,13,10,2,4],[0,13,10],[8,
13,10],[2,4,1],[],[],[2,4,8],[],[],[10,9,13,9,4,13],[0,13,10],[8,13,10],[9,4,1],[],[],[9,4,8],[],[],[13,7,14,13,14,12],[0,7,14,0,13,7],[8,13,7,9,8,7,9,7,14],[12,1,14,1,7,14],[1,7,14,1,14,0],[1,7,9,9,7,14],[8,10,14,12,8,14,10,7,14],[10,14,0,10,7,14],[10,14,9,10,7,14],[12,13,2,2,13,7],[2,13,7,2,0,13],[2,8,7,8,13,7],[2,1,7,2,12,1],[1,7,2],[1,7,2],[2,10,7,2,12,8],[10,7,2],[10,7,2],[12,13,9,11,13,7,9,13,11],[11,0,13,11,13,7],[11,8,13,11,13,7],[9,12,1,11,1,7],[1,7,11],[1,7,11],[9,12,8,11,10,7],[10,7,11],
[10,7,11],[12,3,14,12,13,3],[3,14,0,3,0,13],[3,14,9,3,8,13],[3,14,12,3,12,1],[0,3,14],[9,3,14],[3,14,8,8,14,12],[0,3,14],[9,3,14],[3,12,13,3,2,12],[0,13,3],[8,13,3],[2,12,1],[],[],[2,12,8],[],[],[3,9,13,9,12,13],[0,13,3],[8,13,3],[9,12,1],[],[],[9,12,8],[],[],[12,11,14,12,10,11,12,13,10],[11,14,0,10,0,13],[11,14,9,10,8,13],[11,12,1,11,14,12],[0,11,14],[9,11,14],[11,14,12,11,12,8],[0,11,14],[9,11,14],[10,2,12,10,12,13],[0,13,10],[8,13,10],[2,12,1],[],[],[2,12,8],[],[],[10,12,13,10,9,12],[0,13,10],
[8,13,10],[9,12,1],[],[],[9,12,8],[],[],[15,19,18],[19,18,0,19,0,15,0,18,15],[19,9,15,19,12,9,19,18,12,18,8,12,18,15,8,15,9,8],[18,1,19,1,15,19],[1,15,0,1,0,18,18,0,19,0,15,19],[1,15,9,1,12,18,18,12,19,15,19,9,12,9,19],[15,8,10,19,8,15,19,18,8,18,13,8],[13,0,18,18,0,19,0,15,19,0,10,15],[13,12,18,18,12,19,12,9,19,15,19,9,10,15,9],[19,18,2,2,18,15],[2,0,15,2,19,0,0,19,18,0,18,15],[2,8,15,2,19,12,12,19,18,12,18,8,15,8,18],[2,1,15,2,18,1,2,19,18],[1,15,2,1,0,18,18,0,19,0,2,19],[1,15,2,1,12,18,12,2,19,
18,12,19],[2,19,8,2,10,15,13,8,18,19,18,8],[13,0,18,18,0,19,0,2,19,10,15,2],[12,2,19,18,12,19,13,12,18,10,15,2],[15,11,9,18,15,9,18,9,14,19,18,14],[14,19,0,19,18,0,0,18,15,0,15,11],[14,19,12,12,19,18,12,18,8,15,8,18,11,8,15],[11,1,15,1,9,18,14,18,9,14,19,18],[1,15,11,1,0,18,0,19,18,0,14,19],[1,15,11,1,12,18,12,14,19,18,12,19],[11,10,15,9,13,8,9,14,13,14,18,13,14,19,18],[13,0,18,0,19,18,0,14,19,10,15,11],[12,14,19,18,12,19,13,12,18,10,15,11],[3,19,18],[3,0,18,3,19,0,0,19,18],[3,8,18,3,19,9,9,19,12,
12,18,8,12,19,18],[3,19,1,1,19,18],[1,0,18,18,0,19,0,3,19],[1,12,18,9,3,19,12,9,19,18,12,19],[3,19,8,13,8,18,18,8,19],[13,0,18,18,0,19,0,3,19],[9,3,19,12,9,19,18,12,19,13,12,18],[3,2,18,2,19,18],[2,19,0,0,19,18,0,18,3],[2,19,12,8,18,3,12,18,8,12,19,18],[2,19,18,2,18,1],[1,0,18,18,0,19,0,2,19],[1,12,18,12,2,19,18,12,19],[2,19,8,8,18,13,19,18,8],[13,0,18,18,0,19,0,2,19],[12,2,19,18,12,19,13,12,18],[3,9,18,14,19,18,14,18,9],[14,19,0,19,18,0,0,18,3],[8,18,3,12,18,8,12,19,18,14,19,12],[9,18,1,14,18,9,
14,19,18],[1,0,18,0,19,18,0,14,19],[1,12,18,12,14,19,18,12,19],[9,13,8,9,14,13,14,18,13,14,19,18],[13,0,18,0,19,18,0,14,19],[12,14,19,18,12,19,13,12,18],[18,10,11,19,18,11],[11,19,0,0,19,18,0,18,10],[11,19,9,12,19,18,9,19,12,12,18,8,10,8,18],[1,11,19,1,19,18],[1,0,18,18,0,19,0,11,19],[1,12,18,9,11,19,12,9,19,18,12,19],[13,8,18,18,8,19,11,19,8],[13,0,18,18,0,19,0,11,19],[9,11,19,12,9,19,18,12,19,13,12,18],[2,18,10,2,19,18],[2,19,0,0,19,18,0,18,10],[2,19,12,8,18,10,12,18,8,12,19,18],[2,19,18,2,18,1],
[1,0,18,18,0,19,0,2,19],[1,12,18,12,2,19,18,12,19],[2,19,8,8,18,13,19,18,8],[13,0,18,18,0,19,0,2,19],[12,2,19,18,12,19,13,12,18],[14,19,18,14,18,9,10,9,18],[14,19,0,19,18,0,0,18,10],[8,18,10,12,18,8,12,19,18,14,19,12],[9,18,1,14,18,9,14,19,18],[1,0,18,0,19,18,0,14,19],[1,12,18,12,14,19,18,12,19],[9,13,8,9,14,13,14,18,13,14,19,18],[13,0,18,0,19,18,0,14,19],[12,14,19,18,12,19,13,12,18],[19,4,15,4,18,15],[4,18,0,4,0,19,0,15,19,0,18,15],[4,18,8,4,9,19,9,15,19,9,8,15,15,8,18],[4,15,19,4,1,15,4,18,1],[1,
4,18,1,15,0,15,19,0,0,19,4],[1,4,18,1,15,9,9,19,4,15,19,9],[4,8,19,4,18,13,10,15,8,19,8,15],[10,15,0,15,19,0,0,19,4,13,4,18],[9,19,4,15,19,9,10,15,9,13,4,18],[4,18,15,4,15,2,4,2,19],[2,19,4,2,0,15,15,0,18,0,4,18],[2,19,4,2,8,15,8,4,18,15,8,18],[2,4,1,2,19,4,2,1,15,1,4,18],[1,15,2,1,4,18,19,4,2],[1,15,2,1,4,18,19,4,2],[2,4,8,2,19,4,2,10,15,13,4,18],[19,4,2,10,15,2,13,4,18],[19,4,2,10,15,2,13,4,18],[4,18,9,4,14,19,11,9,15,18,15,9],[11,0,15,15,0,18,0,4,18,14,19,4],[8,4,18,15,8,18,11,8,15,14,19,4],[9,
4,1,1,4,18,11,1,15,14,19,4],[1,15,11,1,4,18,19,4,14],[1,15,11,1,4,18,19,4,14],[9,4,8,11,10,15,13,4,18,14,19,4],[10,15,11,13,4,18,19,4,14],[10,15,11,13,4,18,19,4,14],[4,18,3,4,3,19],[3,19,0,3,0,18,19,4,0,0,4,18],[3,19,9,3,8,18,9,19,4,18,8,4],[3,4,1,3,19,4,1,4,18],[1,4,18,0,19,4,0,3,19],[1,4,18,19,9,3,19,4,9],[3,4,8,3,19,4,13,4,18],[0,19,4,0,3,19,13,4,18],[19,9,3,13,4,18,19,4,9],[3,2,4,3,4,18,2,19,4],[2,19,4,0,4,18,0,18,3],[2,19,4,18,3,8,18,8,4],[2,19,4,2,4,1,1,4,18],[1,4,18,19,4,2],[1,4,18,19,4,2],
[2,19,4,2,4,8,13,4,18],[19,4,2,13,4,18],[19,4,2,13,4,18],[3,9,4,3,4,18,14,19,4],[0,4,18,0,18,3,14,19,4],[18,3,8,14,19,4,18,8,4],[9,4,1,1,4,18,14,19,4],[1,4,18,19,4,14],[1,4,18,19,4,14],[9,4,8,13,4,18,14,19,4],[13,4,18,19,4,14],[13,4,18,19,4,14],[4,18,10,4,10,11,4,11,19],[11,19,4,11,4,0,0,4,10,18,10,4],[11,19,9,9,19,4,18,8,4,10,8,18],[1,4,18,11,4,1,11,19,4],[1,4,18,0,11,4,19,4,11],[1,4,18,19,4,9,19,9,11],[11,4,8,11,19,4,13,4,18],[0,11,4,13,4,18,19,4,11],[13,4,18,19,4,9,19,9,11],[2,19,4,10,2,4,10,4,
18],[2,19,4,0,4,10,18,10,4],[2,19,4,18,8,4,18,10,8],[2,19,4,2,4,1,1,4,18],[1,4,18,19,4,2],[1,4,18,19,4,2],[2,19,4,2,4,8,13,4,18],[19,4,2,13,4,18],[19,4,2,13,4,18],[10,9,4,10,4,18,14,19,4],[0,4,10,14,19,4,18,10,4],[14,19,4,18,8,4,18,10,8],[9,4,1,1,4,18,14,19,4],[1,4,18,19,4,14],[1,4,18,19,4,14],[9,4,8,13,4,18,14,19,4],[13,4,18,19,4,14],[13,4,18,19,4,14],[19,17,15,17,12,15,15,12,16,18,15,16],[0,19,17,0,15,19,0,18,15,0,16,18],[17,9,19,9,15,19,9,8,15,15,8,18,16,18,8],[16,18,1,1,15,12,15,17,12,15,19,17],
[1,16,18,1,15,0,15,19,0,19,17,0],[1,16,18,1,15,9,9,19,17,15,19,9],[16,18,13,10,12,8,10,15,12,15,19,17,15,17,12],[10,15,0,15,19,0,19,17,0,13,16,18],[9,19,17,15,19,9,10,15,9,13,16,18],[17,2,19,2,12,15,15,12,16,15,16,18],[2,19,17,2,0,15,15,0,18,18,0,16],[2,19,17,2,8,15,8,16,18,15,8,18],[2,19,17,2,1,15,2,12,1,1,16,18],[1,15,2,1,16,18,19,17,2],[1,15,2,1,16,18,19,17,2],[2,19,17,2,10,15,2,12,8,13,16,18],[19,17,2,10,15,2,13,16,18],[19,17,2,10,15,2,13,16,18],[17,14,19,11,9,12,11,12,15,15,16,18,15,12,16],[11,
0,15,15,0,18,18,0,16,14,19,17],[8,16,18,15,8,18,11,8,15,14,19,17],[9,12,1,1,16,18,11,1,15,14,19,17],[1,15,11,1,16,18,19,17,14],[1,15,11,1,16,18,19,17,14],[9,12,8,11,10,15,13,16,18,14,19,17],[10,15,11,13,16,18,19,17,14],[10,15,11,13,16,18,19,17,14],[17,12,3,17,3,19,3,16,18,12,16,3],[3,19,17,3,17,0,3,0,16,3,16,18],[3,19,9,3,8,18,9,19,17,18,8,16],[3,19,17,3,17,12,3,12,1,1,16,18],[1,16,18,0,3,17,19,17,3],[1,16,18,19,9,3,19,17,9],[3,19,17,3,17,12,3,12,8,13,16,18],[0,3,17,19,17,3,13,16,18],[19,9,3,13,16,
18,19,17,9],[3,16,18,3,12,16,3,2,12,2,19,17],[2,19,17,0,16,3,18,3,16],[2,19,17,18,3,8,18,8,16],[2,19,17,2,12,1,1,16,18],[1,16,18,19,17,2],[1,16,18,19,17,2],[2,19,17,2,12,8,13,16,18],[19,17,2,13,16,18],[19,17,2,13,16,18],[3,16,18,3,12,16,3,9,12,14,19,17],[0,16,3,18,3,16,14,19,17],[18,3,8,14,19,17,18,8,16],[9,12,1,1,16,18,14,19,17],[1,16,18,19,17,14],[1,16,18,19,17,14],[9,12,8,13,16,18,14,19,17],[13,16,18,19,17,14],[13,16,18,19,17,14],[17,12,11,17,11,19,12,10,11,16,10,12,16,18,10],[11,17,0,11,19,17,
0,16,10,18,10,16],[11,19,17,11,17,9,10,16,18,10,8,16],[1,16,18,11,19,17,11,17,12,11,12,1],[1,16,18,0,11,17,19,17,11],[1,16,18,17,9,11,19,17,11],[11,19,17,11,17,12,11,12,8,13,16,18],[0,11,17,13,16,18,19,17,11],[13,16,18,17,9,11,19,17,11],[2,19,17,10,16,18,10,12,16,10,2,12],[2,19,17,0,16,10,18,10,16],[2,19,17,16,10,8,18,10,16],[2,19,17,2,12,1,1,16,18],[1,16,18,19,17,2],[1,16,18,19,17,2],[2,19,17,2,12,8,13,16,18],[19,17,2,13,16,18],[19,17,2,13,16,18],[10,16,18,10,12,16,10,9,12,14,19,17],[0,16,10,14,
19,17,18,10,16],[14,19,17,16,10,8,18,10,16],[9,12,1,1,16,18,14,19,17],[1,16,18,19,17,14],[1,16,18,19,17,14],[9,12,8,13,16,18,14,19,17],[13,16,18,19,17,14],[13,16,18,19,17,14],[5,15,19],[5,15,0,5,0,19,0,15,19],[5,15,8,5,12,19,12,9,19,9,8,15,9,15,19],[5,1,19,1,15,19],[1,15,0,15,19,0,0,19,5],[1,15,9,9,19,12,15,19,9,12,19,5],[5,8,19,10,15,8,15,19,8],[10,15,0,15,19,0,0,19,5],[9,19,12,15,19,9,10,15,9,12,19,5],[5,15,2,5,2,19],[2,19,0,2,0,15,19,5,0,0,5,15],[2,19,12,2,8,15,12,19,5,15,8,5],[2,5,1,2,19,5,2,
1,15],[1,15,2,0,19,5,0,2,19],[1,15,2,19,12,2,19,5,12],[2,5,8,2,19,5,2,10,15],[0,19,5,0,2,19,10,15,2],[19,12,2,10,15,2,19,5,12],[5,15,11,5,11,9,5,9,14,5,14,19],[14,19,5,14,5,0,0,5,11,15,11,5],[14,19,12,12,19,5,15,8,5,11,8,15],[11,1,15,9,5,1,14,5,9,14,19,5],[1,15,11,0,14,5,19,5,14],[1,15,11,19,5,12,19,12,14],[11,10,15,9,5,8,14,5,9,14,19,5],[0,14,5,10,15,11,19,5,14],[10,15,11,19,5,12,19,12,14],[5,3,19],[3,0,5,3,19,0,0,19,5],[3,8,5,3,19,9,9,19,12,12,19,5],[3,19,1,1,19,5],[0,19,5,0,3,19],[9,3,19,12,9,
19,12,19,5],[3,19,8,19,5,8],[0,19,5,0,3,19],[9,3,19,12,9,19,12,19,5],[3,2,5,2,19,5],[2,19,0,19,5,0,0,5,3],[2,19,12,12,19,5,8,5,3],[2,19,5,2,5,1],[0,19,5,0,2,19],[19,12,2,19,5,12],[2,19,5,2,5,8],[0,19,5,0,2,19],[19,12,2,19,5,12],[3,9,5,9,14,5,14,19,5],[14,5,0,14,19,5,0,5,3],[12,19,5,14,19,12,8,5,3],[9,5,1,14,5,9,14,19,5],[0,14,5,19,5,14],[19,12,14,19,5,12],[9,5,8,14,5,9,14,19,5],[0,14,5,19,5,14],[19,12,14,19,5,12],[5,11,19,5,10,11],[10,0,5,0,19,5,11,19,0],[10,8,5,9,19,12,11,19,9,12,19,5],[1,11,5,19,
5,11],[0,19,5,0,11,19],[9,11,19,12,9,19,12,19,5],[19,5,8,11,19,8],[0,19,5,0,11,19],[9,11,19,12,9,19,12,19,5],[10,2,5,2,19,5],[2,19,0,19,5,0,0,5,10],[2,19,12,12,19,5,8,5,10],[2,19,5,2,5,1],[0,19,5,0,2,19],[19,12,2,19,5,12],[2,19,5,2,5,8],[0,19,5,0,2,19],[19,12,2,19,5,12],[10,9,5,9,14,5,14,19,5],[14,5,0,14,19,5,0,5,10],[12,19,5,14,19,12,8,5,10],[9,5,1,14,5,9,14,19,5],[0,14,5,19,5,14],[19,12,14,19,5,12],[9,5,8,14,5,9,14,19,5],[0,14,5,19,5,14],[19,12,14,19,5,12],[5,15,4,4,15,19],[4,0,19,0,15,19,0,5,15],
[4,9,19,8,5,15,9,8,15,9,15,19],[4,15,19,4,1,15],[1,15,0,15,19,0,0,19,4],[1,15,9,9,19,4,15,19,9],[4,8,19,8,10,15,19,8,15],[10,15,0,15,19,0,0,19,4],[9,19,4,15,19,9,10,15,9],[4,5,2,4,2,19,2,5,15],[2,19,4,2,0,15,15,0,5],[2,19,4,2,8,15,8,5,15],[2,4,1,2,19,4,2,1,15],[1,15,2,19,4,2],[1,15,2,19,4,2],[2,4,8,2,19,4,2,10,15],[19,4,2,10,15,2],[19,4,2,10,15,2],[4,5,9,4,14,19,9,5,11,11,5,15],[11,0,5,11,5,15,14,19,4],[8,5,15,11,8,15,14,19,4],[9,4,1,11,1,15,14,19,4],[1,15,11,19,4,14],[1,15,11,19,4,14],[9,4,8,11,
10,15,14,19,4],[10,15,11,19,4,14],[10,15,11,19,4,14],[4,5,3,4,3,19],[3,19,0,3,0,5,19,4,0],[3,19,9,3,8,5,9,19,4],[3,4,1,3,19,4],[0,19,4,0,3,19],[19,9,3,19,4,9],[3,4,8,3,19,4],[0,19,4,0,3,19],[19,9,3,19,4,9],[3,2,4,3,4,5,2,19,4],[2,19,4,0,5,3],[2,19,4,8,5,3],[2,19,4,2,4,1],[19,4,2],[19,4,2],[2,19,4,2,4,8],[19,4,2],[19,4,2],[3,9,5,9,4,5,14,19,4],[0,5,3,14,19,4],[8,5,3,14,19,4],[9,4,1,14,19,4],[19,4,14],[19,4,14],[9,4,8,14,19,4],[19,4,14],[19,4,14],[4,5,10,4,11,19,4,10,11],[11,19,4,11,4,0,10,0,5],[11,
19,9,9,19,4,10,8,5],[11,19,4,11,4,1],[0,11,4,19,4,11],[19,9,11,19,4,9],[11,19,4,11,4,8],[0,11,4,19,4,11],[19,9,11,19,4,9],[10,4,5,10,2,4,2,19,4],[2,19,4,0,5,10],[2,19,4,8,5,10],[2,19,4,2,4,1],[19,4,2],[19,4,2],[2,19,4,2,4,8],[19,4,2],[19,4,2],[10,9,5,9,4,5,14,19,4],[0,5,10,14,19,4],[8,5,10,14,19,4],[9,4,1,14,19,4],[19,4,14],[19,4,14],[9,4,8,14,19,4],[19,4,14],[19,4,14],[5,15,12,15,19,17,15,17,12],[0,19,17,0,15,19,0,5,15],[8,5,15,9,8,15,9,15,19,17,9,19],[12,1,15,12,15,17,17,15,19],[1,15,0,15,19,0,
19,17,0],[1,15,9,9,19,17,15,19,9],[8,10,12,12,10,15,12,15,17,17,15,19],[10,15,0,15,19,0,19,17,0],[9,19,17,15,19,9,10,15,9],[12,5,2,2,5,15,17,2,19],[2,19,17,2,0,15,15,0,5],[2,19,17,2,8,15,8,5,15],[2,19,17,2,1,15,2,12,1],[1,15,2,19,17,2],[1,15,2,19,17,2],[2,19,17,2,10,15,2,12,8],[19,17,2,10,15,2],[19,17,2,10,15,2],[12,5,9,9,5,11,17,14,19,11,5,15],[11,0,5,11,5,15,14,19,17],[8,5,15,11,8,15,14,19,17],[9,12,1,11,1,15,14,19,17],[1,15,11,19,17,14],[1,15,11,19,17,14],[9,12,8,11,10,15,14,19,17],[10,15,11,19,
17,14],[10,15,11,19,17,14],[17,12,3,17,3,19,12,5,3],[3,19,17,3,17,0,3,0,5],[3,19,9,3,8,5,9,19,17],[3,19,17,3,17,12,3,12,1],[0,3,17,19,17,3],[19,9,3,19,17,9],[3,19,17,3,17,12,3,12,8],[0,3,17,19,17,3],[19,9,3,19,17,9],[3,12,5,3,2,12,2,19,17],[2,19,17,0,5,3],[2,19,17,8,5,3],[2,19,17,2,12,1],[19,17,2],[19,17,2],[2,19,17,2,12,8],[19,17,2],[19,17,2],[3,9,5,14,19,17,9,12,5],[0,5,3,14,19,17],[8,5,3,14,19,17],[9,12,1,14,19,17],[19,17,14],[19,17,14],[9,12,8,14,19,17],[19,17,14],[19,17,14],[17,12,11,17,11,19,
12,10,11,12,5,10],[11,17,0,11,19,17,10,0,5],[11,19,17,11,17,9,10,8,5],[11,17,12,11,19,17,11,12,1],[0,11,17,19,17,11],[19,17,11,17,9,11],[11,17,12,11,19,17,11,12,8],[0,11,17,19,17,11],[19,17,11,17,9,11],[10,2,12,10,12,5,2,19,17],[2,19,17,0,5,10],[2,19,17,8,5,10],[2,19,17,2,12,1],[19,17,2],[19,17,2],[2,19,17,2,12,8],[19,17,2],[19,17,2],[10,12,5,10,9,12,14,19,17],[0,5,10,14,19,17],[8,5,10,14,19,17],[9,12,1,14,19,17],[19,17,14],[19,17,14],[9,12,8,14,19,17],[19,17,14],[19,17,14],[15,16,13,19,16,15],[16,
0,19,0,15,19,0,13,15],[16,12,19,9,15,19,12,9,19,9,8,15,13,15,8],[1,19,16,1,15,19],[1,15,0,15,19,0,0,19,16],[1,15,9,9,19,12,15,19,9,12,19,16],[10,15,8,15,19,8,16,8,19],[10,15,0,15,19,0,0,19,16],[9,19,12,15,19,9,10,15,9,12,19,16],[16,13,2,16,2,19,2,13,15],[2,19,16,2,16,0,2,0,13,2,13,15],[2,19,12,2,8,15,12,19,16,15,8,13],[2,19,16,2,16,1,2,1,15],[1,15,2,0,2,16,19,16,2],[1,15,2,19,12,2,19,16,12],[2,19,16,2,16,8,2,10,15],[0,2,16,19,16,2,10,15,2],[19,12,2,10,15,2,19,16,12],[16,13,9,16,9,14,16,14,19,13,11,
9,13,15,11],[14,16,0,14,19,16,0,13,11,15,11,13],[14,19,16,14,16,12,11,13,15,11,8,13],[11,1,15,14,19,16,14,16,9,9,16,1],[1,15,11,0,14,16,19,16,14],[1,15,11,16,12,14,19,16,14],[11,10,15,14,19,16,14,16,9,9,16,8],[0,14,16,10,15,11,19,16,14],[10,15,11,16,12,14,19,16,14],[13,3,16,3,19,16],[3,19,0,3,0,13,0,19,16],[3,19,9,3,8,13,9,19,12,12,19,16],[3,19,16,3,16,1],[0,19,16,0,3,19],[9,3,19,12,9,19,12,19,16],[3,19,8,19,16,8],[0,19,16,0,3,19],[9,3,19,12,9,19,12,19,16],[3,2,13,13,2,16,2,19,16],[2,19,16,2,16,0,
0,13,3],[2,19,12,12,19,16,8,13,3],[2,19,16,2,16,1],[0,2,16,19,16,2],[19,12,2,19,16,12],[2,19,16,2,16,8],[0,2,16,19,16,2],[19,12,2,19,16,12],[3,9,13,13,9,16,14,19,16,9,14,16],[14,16,0,14,19,16,0,13,3],[14,16,12,14,19,16,8,13,3],[9,16,1,14,16,9,14,19,16],[0,14,16,19,16,14],[19,16,14,16,12,14],[9,16,8,14,16,9,14,19,16],[0,14,16,19,16,14],[19,16,14,16,12,14],[13,10,11,16,13,11,16,11,19],[10,0,13,0,19,16,11,19,0],[10,8,13,9,19,12,11,19,9,12,19,16],[1,11,16,19,16,11],[0,19,16,0,11,19],[9,11,19,12,9,19,
12,19,16],[11,19,16,11,16,8],[0,19,16,0,11,19],[9,11,19,12,9,19,12,19,16],[10,2,13,13,2,16,2,19,16],[2,19,16,2,16,0,0,13,10],[2,19,12,12,19,16,8,13,10],[2,19,16,2,16,1],[0,2,16,19,16,2],[19,12,2,19,16,12],[2,19,16,2,16,8],[0,2,16,19,16,2],[19,12,2,19,16,12],[10,9,13,13,9,16,9,14,16,14,19,16],[14,16,0,14,19,16,0,13,10],[14,16,12,14,19,16,8,13,10],[9,16,1,14,16,9,14,19,16],[0,14,16,19,16,14],[19,16,14,16,12,14],[9,16,8,14,16,9,14,19,16],[0,14,16,19,16,14],[19,16,14,16,12,14],[4,13,15,4,15,19],[4,0,
19,0,15,19,0,13,15],[4,9,19,8,13,15,9,8,15,9,15,19],[4,15,19,4,1,15],[1,15,0,15,19,0,0,19,4],[1,15,9,9,19,4,15,19,9],[4,8,19,8,10,15,19,8,15],[10,15,0,15,19,0,0,19,4],[9,19,4,15,19,9,10,15,9],[4,2,19,4,13,2,2,13,15],[2,19,4,2,13,15,2,0,13],[2,19,4,2,8,15,8,13,15],[2,4,1,2,19,4,2,1,15],[1,15,2,19,4,2],[1,15,2,19,4,2],[2,4,8,2,19,4,2,10,15],[19,4,2,10,15,2],[19,4,2,10,15,2],[4,14,19,4,13,9,9,13,11,11,13,15],[11,0,13,11,13,15,14,19,4],[11,8,13,11,13,15,14,19,4],[9,4,1,11,1,15,14,19,4],[1,15,11,19,4,
14],[1,15,11,19,4,14],[9,4,8,11,10,15,14,19,4],[10,15,11,19,4,14],[10,15,11,19,4,14],[4,3,19,4,13,3],[3,19,0,3,0,13,19,4,0],[3,19,9,3,8,13,9,19,4],[3,4,1,3,19,4],[0,19,4,0,3,19],[19,9,3,19,4,9],[3,4,8,3,19,4],[0,19,4,0,3,19],[19,9,3,19,4,9],[3,2,13,13,2,4,2,19,4],[2,19,4,0,13,3],[2,19,4,8,13,3],[2,19,4,2,4,1],[19,4,2],[19,4,2],[2,19,4,2,4,8],[19,4,2],[19,4,2],[3,9,13,9,4,13,14,19,4],[0,13,3,14,19,4],[8,13,3,14,19,4],[9,4,1,14,19,4],[19,4,14],[19,4,14],[9,4,8,14,19,4],[19,4,14],[19,4,14],[4,11,19,
4,10,11,4,13,10],[11,19,4,11,4,0,10,0,13],[11,19,9,9,19,4,10,8,13],[11,19,4,11,4,1],[0,11,4,19,4,11],[19,9,11,19,4,9],[11,19,4,11,4,8],[0,11,4,19,4,11],[19,9,11,19,4,9],[10,4,13,10,2,4,2,19,4],[2,19,4,0,13,10],[2,19,4,8,13,10],[2,19,4,2,4,1],[19,4,2],[19,4,2],[2,19,4,2,4,8],[19,4,2],[19,4,2],[10,9,13,9,4,13,14,19,4],[0,13,10,14,19,4],[8,13,10,14,19,4],[9,4,1,14,19,4],[19,4,14],[19,4,14],[9,4,8,14,19,4],[19,4,14],[19,4,14],[13,15,12,15,17,12,15,19,17],[0,19,17,0,15,19,0,13,15],[8,13,15,9,8,15,9,15,
19,17,9,19],[12,1,15,12,15,17,17,15,19],[1,15,0,15,19,0,19,17,0],[1,15,9,9,19,17,15,19,9],[8,10,12,12,10,15,12,15,17,17,15,19],[10,15,0,15,19,0,19,17,0],[9,19,17,15,19,9,10,15,9],[12,13,2,2,13,15,17,2,19],[2,19,17,2,13,15,2,0,13],[2,19,17,2,8,15,8,13,15],[2,19,17,2,1,15,2,12,1],[1,15,2,19,17,2],[1,15,2,19,17,2],[2,19,17,2,10,15,2,12,8],[19,17,2,10,15,2],[19,17,2,10,15,2],[12,13,9,11,13,15,9,13,11,17,14,19],[11,0,13,11,13,15,14,19,17],[11,8,13,11,13,15,14,19,17],[9,12,1,11,1,15,14,19,17],[1,15,11,
19,17,14],[1,15,11,19,17,14],[9,12,8,11,10,15,14,19,17],[10,15,11,19,17,14],[10,15,11,19,17,14],[17,12,3,17,3,19,12,13,3],[3,19,17,3,17,0,3,0,13],[3,19,9,3,8,13,9,19,17],[3,19,17,3,17,12,3,12,1],[0,3,17,19,17,3],[19,9,3,19,17,9],[3,19,17,3,17,12,3,12,8],[0,3,17,19,17,3],[19,9,3,19,17,9],[3,12,13,3,2,12,2,19,17],[2,19,17,0,13,3],[2,19,17,8,13,3],[2,19,17,2,12,1],[19,17,2],[19,17,2],[2,19,17,2,12,8],[19,17,2],[19,17,2],[3,9,13,9,12,13,14,19,17],[0,13,3,14,19,17],[8,13,3,14,19,17],[9,12,1,14,19,17],
[19,17,14],[19,17,14],[9,12,8,14,19,17],[19,17,14],[19,17,14],[17,12,11,17,11,19,12,10,11,12,13,10],[11,17,0,11,19,17,10,0,13],[11,19,17,11,17,9,10,8,13],[11,17,12,11,19,17,11,12,1],[0,11,17,19,17,11],[19,17,11,17,9,11],[11,17,12,11,19,17,11,12,8],[0,11,17,19,17,11],[19,17,11,17,9,11],[10,2,12,10,12,13,2,19,17],[2,19,17,0,13,10],[2,19,17,8,13,10],[2,19,17,2,12,1],[19,17,2],[19,17,2],[2,19,17,2,12,8],[19,17,2],[19,17,2],[10,12,13,10,9,12,14,19,17],[0,13,10,14,19,17],[8,13,10,14,19,17],[9,12,1,14,19,
17],[19,17,14],[19,17,14],[9,12,8,14,19,17],[19,17,14],[19,17,14],[6,18,15],[6,0,15,6,18,0,0,18,15],[6,9,15,6,18,12,12,18,8,8,15,9,8,18,15],[6,1,15,6,18,1],[1,0,18,1,15,0,18,0,6,0,15,6],[1,12,18,1,15,9,12,6,18,15,6,9],[6,10,15,6,8,10,6,13,8,6,18,13],[13,6,18,13,0,6,0,10,6,15,6,10],[13,12,18,12,6,18,15,6,9,10,15,9],[6,18,2,2,18,15],[2,0,15,15,0,18,0,6,18],[2,8,15,8,12,18,15,8,18,12,6,18],[2,6,1,2,1,15,1,6,18],[1,15,2,1,0,18,18,0,6],[1,15,2,1,12,18,12,6,18],[2,6,8,2,10,15,8,6,13,13,6,18],[13,0,6,13,
6,18,10,15,2],[12,6,18,13,12,18,10,15,2],[6,18,9,11,9,15,15,9,18],[11,0,15,15,0,18,0,6,18],[8,12,18,15,8,18,11,8,15,12,6,18],[9,6,1,1,6,18,11,1,15],[1,15,11,1,0,18,18,0,6],[1,15,11,1,12,18,12,6,18],[9,6,8,8,6,13,11,10,15,13,6,18],[13,0,6,13,6,18,10,15,11],[12,6,18,13,12,18,10,15,11],[6,18,3],[3,6,0,3,0,18,0,6,18],[3,6,9,3,8,18,8,12,18,12,6,18],[3,6,1,1,6,18],[1,0,18,18,0,6,0,3,6],[1,12,18,12,6,18,9,3,6],[3,6,8,8,6,13,13,6,18],[13,0,6,13,6,18,0,3,6],[12,6,18,13,12,18,9,3,6],[3,2,18,2,6,18],[0,6,18,
0,18,3],[8,18,3,12,18,8,12,6,18],[2,6,1,1,6,18],[1,0,18,18,0,6],[1,12,18,12,6,18],[2,6,8,8,6,13,13,6,18],[13,0,6,13,6,18],[12,6,18,13,12,18],[3,9,18,18,9,6],[0,6,18,0,18,3],[8,18,3,12,18,8,12,6,18],[9,6,1,1,6,18],[1,0,18,18,0,6],[1,12,18,12,6,18],[8,6,13,9,6,8,13,6,18],[13,0,6,13,6,18],[12,6,18,13,12,18],[6,18,10,6,10,11],[11,6,0,0,6,18,10,0,18],[11,6,9,8,12,18,10,8,18,12,6,18],[11,6,1,1,6,18],[1,0,18,18,0,6,0,11,6],[1,12,18,12,6,18,9,11,6],[11,6,8,8,6,13,13,6,18],[13,0,6,13,6,18,0,11,6],[12,6,18,
13,12,18,9,11,6],[2,6,10,18,10,6],[0,6,18,0,18,10],[8,18,10,12,18,8,12,6,18],[2,6,1,1,6,18],[1,0,18,18,0,6],[1,12,18,12,6,18],[2,6,8,8,6,13,13,6,18],[13,0,6,13,6,18],[12,6,18,13,12,18],[18,9,6,10,9,18],[0,6,18,0,18,10],[8,18,10,12,18,8,12,6,18],[9,6,1,1,6,18],[1,0,18,18,0,6],[1,12,18,12,6,18],[8,6,13,9,6,8,13,6,18],[13,0,6,13,6,18],[12,6,18,13,12,18],[6,4,15,4,18,15],[4,18,0,0,18,15,0,15,6],[4,18,8,8,15,9,8,18,15,9,15,6],[4,1,6,4,18,1,1,15,6],[1,4,18,1,15,0,15,6,0],[1,4,18,1,15,9,9,15,6],[4,8,6,4,
18,13,8,10,6,10,15,6],[10,6,0,10,15,6,13,4,18],[9,15,6,10,15,9,13,4,18],[4,18,15,4,15,2],[2,0,15,15,0,18,0,4,18],[2,8,15,8,4,18,15,8,18],[2,4,1,2,1,15,1,4,18],[1,15,2,1,4,18],[1,15,2,1,4,18],[2,4,8,2,10,15,13,4,18],[10,15,2,13,4,18],[10,15,2,13,4,18],[4,18,9,9,15,11,18,15,9],[11,0,15,15,0,18,0,4,18],[8,4,18,15,8,18,11,8,15],[9,4,1,1,4,18,11,1,15],[1,15,11,1,4,18],[1,15,11,1,4,18],[9,4,8,11,10,15,13,4,18],[10,15,11,13,4,18],[10,15,11,13,4,18],[4,3,6,4,18,3],[3,0,18,3,6,0,18,0,4],[3,8,18,3,6,9,8,4,
18],[3,4,1,3,6,4,1,4,18],[1,4,18,0,3,6],[1,4,18,9,3,6],[3,6,8,8,6,4,13,4,18],[0,3,6,13,4,18],[9,3,6,13,4,18],[3,2,4,3,4,18],[0,4,18,0,18,3],[18,3,8,18,8,4],[2,4,1,1,4,18],[1,4,18],[1,4,18],[2,4,8,13,4,18],[13,4,18],[13,4,18],[3,9,4,3,4,18],[0,4,18,0,18,3],[18,3,8,18,8,4],[9,4,1,1,4,18],[1,4,18],[1,4,18],[9,4,8,13,4,18],[13,4,18],[13,4,18],[4,11,6,4,18,10,4,10,11],[10,4,18,10,0,4,11,6,0],[10,8,18,8,4,18,11,6,9],[11,6,4,11,4,1,1,4,18],[1,4,18,0,11,6],[1,4,18,9,11,6],[11,6,8,8,6,4,13,4,18],[0,11,6,13,
4,18],[9,11,6,13,4,18],[10,4,18,10,2,4],[0,4,10,18,10,4],[18,10,8,18,8,4],[2,4,1,1,4,18],[1,4,18],[1,4,18],[2,4,8,13,4,18],[13,4,18],[13,4,18],[10,4,18,10,9,4],[0,4,10,18,10,4],[18,10,8,18,8,4],[9,4,1,1,4,18],[1,4,18],[1,4,18],[9,4,8,13,4,18],[13,4,18],[13,4,18],[6,12,15,15,16,18,15,12,16],[0,16,18,0,18,15,0,15,6],[8,15,9,8,18,15,16,18,8,9,15,6],[12,1,6,1,15,6,16,18,1],[1,16,18,1,15,0,15,6,0],[1,16,18,1,15,9,9,15,6],[12,8,6,8,10,6,16,18,13,10,15,6],[10,6,0,10,15,6,13,16,18],[9,15,6,10,15,9,13,16,
18],[12,15,2,12,16,15,16,18,15],[2,0,15,15,0,18,18,0,16],[2,8,15,8,16,18,15,8,18],[2,1,15,2,12,1,1,16,18],[1,15,2,1,16,18],[1,15,2,1,16,18],[2,10,15,2,12,8,13,16,18],[10,15,2,13,16,18],[10,15,2,13,16,18],[9,12,11,12,15,11,12,16,15,16,18,15],[11,0,15,15,0,18,18,0,16],[8,16,18,15,8,18,11,8,15],[9,12,1,1,16,18,11,1,15],[1,15,11,1,16,18],[1,15,11,1,16,18],[9,12,8,11,10,15,13,16,18],[10,15,11,13,16,18],[10,15,11,13,16,18],[16,3,12,16,18,3,12,3,6],[3,16,18,3,0,16,3,6,0],[3,8,18,3,6,9,8,16,18],[3,6,12,3,
12,1,1,16,18],[1,16,18,0,3,6],[1,16,18,9,3,6],[3,6,8,13,16,18,8,6,12],[0,3,6,13,16,18],[9,3,6,13,16,18],[3,16,18,3,12,16,3,2,12],[0,16,3,18,3,16],[18,3,8,18,8,16],[2,12,1,1,16,18],[1,16,18],[1,16,18],[2,12,8,13,16,18],[13,16,18],[13,16,18],[3,16,18,3,12,16,3,9,12],[0,16,3,18,3,16],[18,3,8,18,8,16],[9,12,1,1,16,18],[1,16,18],[1,16,18],[9,12,8,13,16,18],[13,16,18],[13,16,18],[16,10,12,16,18,10,12,11,6,12,10,11],[10,0,16,10,16,18,11,6,0],[10,16,18,10,8,16,11,6,9],[11,12,1,11,6,12,1,16,18],[1,16,18,0,
11,6],[1,16,18,9,11,6],[11,6,12,11,12,8,13,16,18],[0,11,6,13,16,18],[9,11,6,13,16,18],[10,12,16,10,16,18,10,2,12],[0,16,10,18,10,16],[18,10,16,16,10,8],[2,12,1,1,16,18],[1,16,18],[1,16,18],[2,12,8,13,16,18],[13,16,18],[13,16,18],[10,12,16,10,16,18,10,9,12],[0,16,10,18,10,16],[18,10,16,16,10,8],[9,12,1,1,16,18],[1,16,18],[1,16,18],[9,12,8,13,16,18],[13,16,18],[13,16,18],[6,5,15],[5,0,6,5,15,0,0,15,6],[5,12,6,5,15,8,8,15,9,9,15,6],[5,1,6,1,15,6],[1,15,0,15,6,0,0,6,5],[1,15,9,9,15,6,12,6,5],[5,8,6,8,
10,6,10,15,6],[10,6,0,10,15,6,0,6,5],[9,15,6,10,15,9,12,6,5],[5,2,6,5,15,2],[2,0,15,15,0,5,0,6,5],[2,8,15,8,5,15,12,6,5],[2,5,1,2,6,5,2,1,15],[1,15,2,0,6,5],[1,15,2,12,6,5],[2,6,8,2,10,15,8,6,5],[0,6,5,10,15,2],[12,6,5,10,15,2],[5,9,6,5,15,11,5,11,9],[11,5,15,11,0,5,0,6,5],[11,8,15,8,5,15,12,6,5],[9,6,5,9,5,1,11,1,15],[1,15,11,0,6,5],[1,15,11,12,6,5],[9,6,8,8,6,5,11,10,15],[0,6,5,10,15,11],[12,6,5,10,15,11],[5,3,6],[3,0,5,3,6,0,0,6,5],[3,8,5,3,6,9,12,6,5],[3,6,1,1,6,5],[0,6,5,0,3,6],[9,3,6,12,6,5],
[3,6,8,8,6,5],[0,6,5,0,3,6],[9,3,6,12,6,5],[3,2,5,2,6,5],[6,5,0,0,5,3],[6,5,12,8,5,3],[2,6,5,2,5,1],[0,6,5],[12,6,5],[2,6,8,8,6,5],[0,6,5],[12,6,5],[3,9,5,9,6,5],[6,5,0,0,5,3],[6,5,12,8,5,3],[9,5,1,9,6,5],[0,6,5],[12,6,5],[8,6,5,9,6,8],[0,6,5],[12,6,5],[5,10,6,10,11,6],[10,0,5,0,6,5,11,6,0],[10,8,5,11,6,9,12,6,5],[11,6,1,1,6,5],[0,6,5,0,11,6],[9,11,6,12,6,5],[8,6,5,11,6,8],[0,6,5,0,11,6],[9,11,6,12,6,5],[10,2,5,2,6,5],[6,5,0,0,5,10],[6,5,12,8,5,10],[2,6,5,2,5,1],[0,6,5],[12,6,5],[2,6,8,8,6,5],[0,
6,5],[12,6,5],[10,9,5,9,6,5],[6,5,0,0,5,10],[6,5,12,8,5,10],[9,5,1,9,6,5],[0,6,5],[12,6,5],[8,6,5,9,6,8],[0,6,5],[12,6,5],[5,15,4,4,15,6],[0,15,6,0,5,15],[8,5,15,9,8,15,9,15,6],[4,1,6,1,15,6],[1,15,0,15,6,0],[1,15,9,9,15,6],[4,8,6,8,10,6,10,15,6],[10,6,0,10,15,6],[9,15,6,10,15,9],[4,5,2,2,5,15],[2,0,15,15,0,5],[2,8,15,8,5,15],[2,4,1,2,1,15],[1,15,2],[1,15,2],[2,4,8,2,10,15],[10,15,2],[10,15,2],[4,5,9,9,5,11,11,5,15],[11,0,5,11,5,15],[8,5,15,11,8,15],[9,4,1,11,1,15],[1,15,11],[1,15,11],[9,4,8,11,10,
15],[10,15,11],[10,15,11],[4,5,3,4,3,6],[3,6,0,3,0,5],[3,6,9,3,8,5],[3,4,1,3,6,4],[0,3,6],[9,3,6],[3,6,8,8,6,4],[0,3,6],[9,3,6],[3,2,4,3,4,5],[0,5,3],[8,5,3],[2,4,1],[],[],[2,4,8],[],[],[3,9,5,9,4,5],[0,5,3],[8,5,3],[9,4,1],[],[],[9,4,8],[],[],[4,5,10,4,11,6,4,10,11],[11,6,0,10,0,5],[11,6,9,10,8,5],[11,6,4,11,4,1],[0,11,6],[9,11,6],[11,6,8,8,6,4],[0,11,6],[9,11,6],[10,4,5,10,2,4],[0,5,10],[8,5,10],[2,4,1],[],[],[2,4,8],[],[],[10,9,5,9,4,5],[0,5,10],[8,5,10],[9,4,1],[],[],[9,4,8],[],[],[5,15,12,15,
6,12],[0,15,6,0,5,15],[8,5,15,9,8,15,9,15,6],[12,1,6,1,15,6],[1,15,0,15,6,0],[1,15,9,9,15,6],[8,10,6,12,8,6,10,15,6],[10,6,0,10,15,6],[9,15,6,10,15,9],[12,5,2,2,5,15],[2,0,15,15,0,5],[2,8,15,8,5,15],[2,1,15,2,12,1],[1,15,2],[1,15,2],[2,10,15,2,12,8],[10,15,2],[10,15,2],[12,5,9,9,5,11,11,5,15],[11,0,5,11,5,15],[8,5,15,11,8,15],[9,12,1,11,1,15],[1,15,11],[1,15,11],[9,12,8,11,10,15],[10,15,11],[10,15,11],[12,3,6,12,5,3],[3,6,0,3,0,5],[3,6,9,3,8,5],[3,6,12,3,12,1],[0,3,6],[9,3,6],[3,6,8,8,6,12],[0,3,
6],[9,3,6],[3,12,5,3,2,12],[0,5,3],[8,5,3],[2,12,1],[],[],[2,12,8],[],[],[3,9,5,9,12,5],[0,5,3],[8,5,3],[9,12,1],[],[],[9,12,8],[],[],[12,11,6,12,10,11,12,5,10],[11,6,0,10,0,5],[11,6,9,10,8,5],[11,12,1,11,6,12],[0,11,6],[9,11,6],[11,6,12,11,12,8],[0,11,6],[9,11,6],[10,2,12,10,12,5],[0,5,10],[8,5,10],[2,12,1],[],[],[2,12,8],[],[],[10,12,5,10,9,12],[0,5,10],[8,5,10],[9,12,1],[],[],[9,12,8],[],[],[6,13,15,6,16,13],[16,0,6,0,15,6,13,15,0],[16,12,6,8,15,9,13,15,8,9,15,6],[16,1,6,1,15,6],[1,15,0,15,6,0,
0,6,16],[1,15,9,9,15,6,12,6,16],[16,8,6,8,10,6,10,15,6],[10,6,0,10,15,6,0,6,16],[9,15,6,10,15,9,12,6,16],[16,13,2,16,2,6,13,15,2],[2,13,15,2,0,13,0,6,16],[2,8,15,8,13,15,12,6,16],[2,6,16,2,16,1,2,1,15],[1,15,2,0,6,16],[1,15,2,12,6,16],[2,6,8,2,10,15,8,6,16],[0,6,16,10,15,2],[12,6,16,10,15,2],[16,13,9,16,9,6,13,11,9,13,15,11],[11,0,13,11,13,15,0,6,16],[11,13,15,11,8,13,12,6,16],[9,16,1,9,6,16,11,1,15],[1,15,11,0,6,16],[1,15,11,12,6,16],[9,6,16,9,16,8,11,10,15],[0,6,16,10,15,11],[12,6,16,10,15,11],
[16,13,6,13,3,6],[3,6,0,3,0,13,0,6,16],[3,6,9,3,8,13,12,6,16],[3,6,1,1,6,16],[0,6,16,0,3,6],[9,3,6,12,6,16],[3,6,8,8,6,16],[0,6,16,0,3,6],[9,3,6,12,6,16],[3,2,13,13,2,16,2,6,16],[6,16,0,0,13,3],[6,16,12,8,13,3],[2,6,16,2,16,1],[0,6,16],[12,6,16],[2,6,8,8,6,16],[0,6,16],[12,6,16],[3,9,13,13,9,16,9,6,16],[6,16,0,0,13,3],[6,16,12,8,13,3],[9,16,1,9,6,16],[0,6,16],[12,6,16],[9,16,8,9,6,16],[0,6,16],[12,6,16],[13,11,16,10,11,13,16,11,6],[10,0,13,0,6,16,11,6,0],[10,8,13,11,6,9,12,6,16],[11,6,1,1,6,16],[0,
6,16,0,11,6],[9,11,6,12,6,16],[8,6,16,11,6,8],[0,6,16,0,11,6],[9,11,6,12,6,16],[10,2,13,13,2,16,2,6,16],[6,16,0,0,13,10],[6,16,12,8,13,10],[2,6,16,2,16,1],[0,6,16],[12,6,16],[2,6,8,8,6,16],[0,6,16],[12,6,16],[10,9,13,13,9,16,9,6,16],[6,16,0,0,13,10],[6,16,12,8,13,10],[9,16,1,9,6,16],[0,6,16],[12,6,16],[9,16,8,9,6,16],[0,6,16],[12,6,16],[4,13,6,15,6,13],[0,15,6,0,13,15],[8,13,15,9,8,15,9,15,6],[4,1,6,1,15,6],[1,15,0,15,6,0],[1,15,9,9,15,6],[4,8,6,8,10,6,10,15,6],[10,6,0,10,15,6],[9,15,6,10,15,9],[4,
13,2,2,13,15],[2,13,15,2,0,13],[2,8,15,8,13,15],[2,4,1,2,1,15],[1,15,2],[1,15,2],[2,4,8,2,10,15],[10,15,2],[10,15,2],[4,13,9,9,13,11,11,13,15],[11,0,13,11,13,15],[11,8,13,11,13,15],[9,4,1,11,1,15],[1,15,11],[1,15,11],[9,4,8,11,10,15],[10,15,11],[10,15,11],[4,3,6,4,13,3],[3,6,0,3,0,13],[3,6,9,3,8,13],[3,4,1,3,6,4],[0,3,6],[9,3,6],[3,6,8,8,6,4],[0,3,6],[9,3,6],[3,2,13,13,2,4],[0,13,3],[8,13,3],[2,4,1],[],[],[2,4,8],[],[],[3,9,13,9,4,13],[0,13,3],[8,13,3],[9,4,1],[],[],[9,4,8],[],[],[4,11,6,4,10,11,
4,13,10],[11,6,0,10,0,13],[11,6,9,10,8,13],[11,6,4,11,4,1],[0,11,6],[9,11,6],[11,6,8,8,6,4],[0,11,6],[9,11,6],[10,4,13,10,2,4],[0,13,10],[8,13,10],[2,4,1],[],[],[2,4,8],[],[],[10,9,13,9,4,13],[0,13,10],[8,13,10],[9,4,1],[],[],[9,4,8],[],[],[15,6,12,13,15,12],[0,15,6,0,13,15],[8,13,15,9,8,15,9,15,6],[12,1,6,1,15,6],[1,15,0,15,6,0],[1,15,9,9,15,6],[8,10,6,12,8,6,10,15,6],[10,6,0,10,15,6],[9,15,6,10,15,9],[12,13,2,2,13,15],[2,13,15,2,0,13],[2,8,15,8,13,15],[2,1,15,2,12,1],[1,15,2],[1,15,2],[2,10,15,
2,12,8],[10,15,2],[10,15,2],[12,13,9,11,13,15,9,13,11],[11,0,13,11,13,15],[11,8,13,11,13,15],[9,12,1,11,1,15],[1,15,11],[1,15,11],[9,12,8,11,10,15],[10,15,11],[10,15,11],[12,3,6,12,13,3],[3,6,0,3,0,13],[3,6,9,3,8,13],[3,6,12,3,12,1],[0,3,6],[9,3,6],[3,6,8,8,6,12],[0,3,6],[9,3,6],[3,12,13,3,2,12],[0,13,3],[8,13,3],[2,12,1],[],[],[2,12,8],[],[],[3,9,13,9,12,13],[0,13,3],[8,13,3],[9,12,1],[],[],[9,12,8],[],[],[12,11,6,12,10,11,12,13,10],[11,6,0,10,0,13],[11,6,9,10,8,13],[11,12,1,11,6,12],[0,11,6],[9,
11,6],[11,6,12,11,12,8],[0,11,6],[9,11,6],[10,2,12,10,12,13],[0,13,10],[8,13,10],[2,12,1],[],[],[2,12,8],[],[],[10,12,13,10,9,12],[0,13,10],[8,13,10],[9,12,1],[],[],[9,12,8],[],[],[15,14,17,18,15,17],[17,18,0,0,18,15,0,15,14],[17,18,12,8,18,15,12,18,8,8,15,9,14,9,15],[17,1,14,17,18,1,1,15,14],[1,17,18,1,0,17,1,14,0,1,15,14],[1,12,18,1,15,9,12,17,18,15,14,9],[17,8,14,17,13,8,17,18,13,14,8,10,14,10,15],[13,0,17,13,17,18,0,10,14,15,14,10],[13,17,18,13,12,17,10,15,14,10,14,9],[2,17,18,2,18,15],[2,0,15,
15,0,18,0,17,18],[2,8,15,8,12,18,15,8,18,12,17,18],[2,1,15,2,17,1,1,17,18],[1,15,2,1,17,18,1,0,17],[1,15,2,1,12,18,12,17,18],[2,10,15,2,17,8,8,17,13,13,17,18],[13,0,17,13,17,18,10,15,2],[13,12,17,13,17,18,10,15,2],[11,9,15,15,9,18,17,18,9],[11,0,15,15,0,18,0,17,18],[8,12,18,15,8,18,11,8,15,12,17,18],[9,17,1,1,17,18,11,1,15],[1,15,11,1,17,18,1,0,17],[1,15,11,1,12,18,12,17,18],[9,17,8,13,17,18,8,17,13,11,10,15],[13,0,17,13,17,18,10,15,11],[13,12,17,13,17,18,10,15,11],[14,17,3,3,17,18],[3,0,18,3,14,
0,0,17,18],[3,8,18,3,14,9,8,12,18,12,17,18],[3,14,1,14,17,1,1,17,18],[1,17,18,1,0,17,0,3,14],[1,12,18,12,17,18,9,3,14],[3,14,8,14,17,8,13,17,18,8,17,13],[13,0,17,13,17,18,0,3,14],[13,12,17,13,17,18,9,3,14],[3,17,18,3,2,17],[0,17,18,0,18,3],[8,18,3,12,18,8,12,17,18],[2,17,1,1,17,18],[1,17,18,1,0,17],[1,12,18,12,17,18],[2,17,8,8,17,13,13,17,18],[13,0,17,13,17,18],[13,12,17,13,17,18],[3,9,18,18,9,17],[0,17,18,0,18,3],[8,18,3,12,18,8,12,17,18],[9,17,1,1,17,18],[1,17,18,1,0,17],[1,12,18,12,17,18],[8,17,
13,9,17,8,13,17,18],[13,0,17,13,17,18],[13,12,17,13,17,18],[14,10,11,17,10,14,17,18,10],[11,14,0,0,17,18,10,0,18],[11,14,9,8,12,18,10,8,18,12,17,18],[11,14,1,14,17,1,1,17,18],[1,17,18,1,0,17,0,11,14],[1,12,18,12,17,18,9,11,14],[11,14,8,14,17,8,8,17,13,13,17,18],[13,0,17,13,17,18,0,11,14],[13,12,17,13,17,18,9,11,14],[2,17,10,18,10,17],[0,17,18,0,18,10],[8,18,10,12,18,8,12,17,18],[2,17,1,1,17,18],[1,17,18,1,0,17],[1,12,18,12,17,18],[2,17,8,8,17,13,13,17,18],[13,0,17,13,17,18],[13,12,17,13,17,18],[10,
17,18,10,9,17],[0,17,18,0,18,10],[8,18,10,12,18,8,12,17,18],[9,17,1,1,17,18],[1,17,18,1,0,17],[1,12,18,12,17,18],[8,17,13,9,17,8,13,17,18],[13,0,17,13,17,18],[13,12,17,13,17,18],[4,15,14,4,18,15],[4,18,0,0,18,15,0,15,14],[4,18,8,8,15,9,8,18,15,9,15,14],[4,18,1,4,1,14,1,15,14],[1,4,18,1,15,14,1,14,0],[1,4,18,1,15,9,9,15,14],[4,18,13,4,8,14,8,10,14,10,15,14],[10,14,0,10,15,14,13,4,18],[10,14,9,10,15,14,13,4,18],[4,18,15,4,15,2],[2,0,15,15,0,18,0,4,18],[2,8,15,8,4,18,15,8,18],[2,4,1,2,1,15,1,4,18],[1,
15,2,1,4,18],[1,15,2,1,4,18],[2,4,8,2,10,15,13,4,18],[10,15,2,13,4,18],[10,15,2,13,4,18],[4,18,9,9,15,11,18,15,9],[11,0,15,15,0,18,0,4,18],[8,4,18,15,8,18,11,8,15],[9,4,1,1,4,18,11,1,15],[1,15,11,1,4,18],[1,15,11,1,4,18],[9,4,8,11,10,15,13,4,18],[10,15,11,13,4,18],[10,15,11,13,4,18],[4,18,3,4,3,14],[3,0,18,3,14,0,18,0,4],[3,8,18,3,14,9,8,4,18],[3,14,1,14,4,1,1,4,18],[1,4,18,0,3,14],[1,4,18,9,3,14],[3,14,8,8,14,4,13,4,18],[0,3,14,13,4,18],[9,3,14,13,4,18],[3,2,4,3,4,18],[0,4,18,0,18,3],[18,3,8,18,
8,4],[2,4,1,1,4,18],[1,4,18],[1,4,18],[2,4,8,13,4,18],[13,4,18],[13,4,18],[3,9,4,3,4,18],[0,4,18,0,18,3],[18,3,8,18,8,4],[9,4,1,1,4,18],[1,4,18],[1,4,18],[9,4,8,13,4,18],[13,4,18],[13,4,18],[4,18,10,4,10,11,4,11,14],[10,4,18,10,0,4,11,14,0],[10,8,18,8,4,18,11,14,9],[11,14,4,11,4,1,1,4,18],[1,4,18,0,11,14],[1,4,18,9,11,14],[11,14,8,8,14,4,13,4,18],[0,11,14,13,4,18],[9,11,14,13,4,18],[10,4,18,10,2,4],[0,4,10,18,10,4],[18,10,8,18,8,4],[2,4,1,1,4,18],[1,4,18],[1,4,18],[2,4,8,13,4,18],[13,4,18],[13,4,
18],[10,4,18,10,9,4],[0,4,10,18,10,4],[18,10,8,18,8,4],[9,4,1,1,4,18],[1,4,18],[1,4,18],[9,4,8,13,4,18],[13,4,18],[13,4,18],[14,12,15,15,12,16,15,16,18],[0,16,18,0,18,15,0,15,14],[8,15,9,8,18,15,16,18,8,9,15,14],[12,1,14,1,15,14,16,18,1],[1,16,18,1,15,14,1,14,0],[1,16,18,1,15,9,9,15,14],[12,8,14,10,15,14,8,10,14,16,18,13],[10,14,0,10,15,14,13,16,18],[10,14,9,10,15,14,13,16,18],[12,15,2,12,16,15,16,18,15],[2,0,15,15,0,18,18,0,16],[2,8,15,8,16,18,15,8,18],[2,1,15,2,12,1,1,16,18],[1,15,2,1,16,18],[1,
15,2,1,16,18],[2,10,15,2,12,8,13,16,18],[10,15,2,13,16,18],[10,15,2,13,16,18],[9,12,11,12,15,11,12,16,15,16,18,15],[11,0,15,15,0,18,18,0,16],[8,16,18,15,8,18,11,8,15],[9,12,1,1,16,18,11,1,15],[1,15,11,1,16,18],[1,15,11,1,16,18],[9,12,8,11,10,15,13,16,18],[10,15,11,13,16,18],[10,15,11,13,16,18],[16,3,12,16,18,3,12,3,14],[3,16,18,3,0,16,3,14,0],[3,8,18,3,14,9,8,16,18],[3,14,12,3,12,1,1,16,18],[1,16,18,0,3,14],[1,16,18,9,3,14],[3,14,8,8,14,12,13,16,18],[0,3,14,13,16,18],[9,3,14,13,16,18],[3,16,18,3,
12,16,3,2,12],[0,16,3,18,3,16],[18,3,8,18,8,16],[2,12,1,1,16,18],[1,16,18],[1,16,18],[2,12,8,13,16,18],[13,16,18],[13,16,18],[3,16,18,3,12,16,3,9,12],[0,16,3,18,3,16],[18,3,8,18,8,16],[9,12,1,1,16,18],[1,16,18],[1,16,18],[9,12,8,13,16,18],[13,16,18],[13,16,18],[16,10,12,16,18,10,12,11,14,12,10,11],[10,0,16,10,16,18,11,14,0],[10,16,18,10,8,16,11,14,9],[11,12,1,11,14,12,1,16,18],[1,16,18,0,11,14],[1,16,18,9,11,14],[11,14,12,11,12,8,13,16,18],[0,11,14,13,16,18],[9,11,14,13,16,18],[10,12,16,10,16,18,
10,2,12],[0,16,10,18,10,16],[18,10,16,16,10,8],[2,12,1,1,16,18],[1,16,18],[1,16,18],[2,12,8,13,16,18],[13,16,18],[13,16,18],[10,12,16,10,16,18,10,9,12],[0,16,10,18,10,16],[18,10,16,16,10,8],[9,12,1,1,16,18],[1,16,18],[1,16,18],[9,12,8,13,16,18],[13,16,18],[13,16,18],[17,5,14,5,15,14],[5,15,0,5,0,17,0,15,14],[5,15,8,5,12,17,8,15,9,9,15,14],[5,1,17,1,14,17,1,15,14],[1,15,14,1,14,0,0,17,5],[1,15,9,9,15,14,12,17,5],[5,8,17,8,14,17,8,10,14,10,15,14],[10,14,0,10,15,14,0,17,5],[10,14,9,10,15,14,12,17,5],
[5,15,2,5,2,17],[2,0,15,15,0,5,0,17,5],[2,8,15,8,5,15,12,17,5],[2,17,1,2,1,15,17,5,1],[1,15,2,0,17,5],[1,15,2,12,17,5],[2,17,8,2,10,15,8,17,5],[0,17,5,10,15,2],[12,17,5,10,15,2],[5,15,11,5,11,9,5,9,17],[11,5,15,11,0,5,0,17,5],[11,8,15,8,5,15,12,17,5],[9,17,5,9,5,1,11,1,15],[1,15,11,0,17,5],[1,15,11,12,17,5],[9,17,8,8,17,5,11,10,15],[0,17,5,10,15,11],[12,17,5,10,15,11],[5,3,14,5,14,17],[3,0,5,3,14,0,0,17,5],[3,8,5,3,14,9,12,17,5],[3,14,1,14,17,1,1,17,5],[0,17,5,0,3,14],[9,3,14,12,17,5],[3,14,8,8,17,
5,14,17,8],[0,17,5,0,3,14],[9,3,14,12,17,5],[3,2,5,2,17,5],[0,5,3,17,5,0],[8,5,3,17,5,12],[2,17,1,17,5,1],[0,17,5],[12,17,5],[2,17,8,8,17,5],[0,17,5],[12,17,5],[3,9,5,9,17,5],[0,5,3,17,5,0],[8,5,3,17,5,12],[9,5,1,9,17,5],[0,17,5],[12,17,5],[8,17,5,9,17,8],[0,17,5],[12,17,5],[5,10,17,17,10,14,10,11,14],[10,0,5,0,17,5,11,14,0],[10,8,5,11,14,9,12,17,5],[11,14,1,14,17,1,1,17,5],[0,17,5,0,11,14],[9,11,14,12,17,5],[8,17,5,14,17,8,11,14,8],[0,17,5,0,11,14],[9,11,14,12,17,5],[10,2,5,2,17,5],[0,5,10,17,5,
0],[17,5,12,8,5,10],[2,17,1,17,5,1],[0,17,5],[12,17,5],[2,17,8,8,17,5],[0,17,5],[12,17,5],[10,9,5,9,17,5],[0,5,10,17,5,0],[17,5,12,8,5,10],[9,5,1,9,17,5],[0,17,5],[12,17,5],[8,17,5,9,17,8],[0,17,5],[12,17,5],[5,15,14,5,14,4],[0,15,14,0,5,15],[8,5,15,9,8,15,9,15,14],[4,1,14,1,15,14],[1,15,14,1,14,0],[1,15,9,9,15,14],[4,8,14,8,10,14,10,15,14],[10,14,0,10,15,14],[10,14,9,10,15,14],[4,5,2,2,5,15],[2,0,15,15,0,5],[2,8,15,8,5,15],[2,4,1,2,1,15],[1,15,2],[1,15,2],[2,4,8,2,10,15],[10,15,2],[10,15,2],[4,5,
9,9,5,11,11,5,15],[11,0,5,11,5,15],[8,5,15,11,8,15],[9,4,1,11,1,15],[1,15,11],[1,15,11],[9,4,8,11,10,15],[10,15,11],[10,15,11],[4,5,3,4,3,14],[3,14,0,3,0,5],[3,14,9,3,8,5],[3,14,1,14,4,1],[0,3,14],[9,3,14],[3,14,8,8,14,4],[0,3,14],[9,3,14],[3,2,4,3,4,5],[0,5,3],[8,5,3],[2,4,1],[],[],[2,4,8],[],[],[3,9,5,9,4,5],[0,5,3],[8,5,3],[9,4,1],[],[],[9,4,8],[],[],[4,5,10,4,11,14,4,10,11],[11,14,0,10,0,5],[11,14,9,10,8,5],[11,14,4,11,4,1],[0,11,14],[9,11,14],[11,14,8,8,14,4],[0,11,14],[9,11,14],[10,4,5,10,2,
4],[0,5,10],[8,5,10],[2,4,1],[],[],[2,4,8],[],[],[10,9,5,9,4,5],[0,5,10],[8,5,10],[9,4,1],[],[],[9,4,8],[],[],[5,15,12,15,14,12],[0,15,14,0,5,15],[8,5,15,9,8,15,9,15,14],[12,1,14,1,15,14],[1,15,14,1,14,0],[1,15,9,9,15,14],[8,10,14,12,8,14,10,15,14],[10,14,0,10,15,14],[10,14,9,10,15,14],[12,5,2,2,5,15],[2,0,15,15,0,5],[2,8,15,8,5,15],[2,1,15,2,12,1],[1,15,2],[1,15,2],[2,10,15,2,12,8],[10,15,2],[10,15,2],[12,5,9,9,5,11,11,5,15],[11,0,5,11,5,15],[8,5,15,11,8,15],[9,12,1,11,1,15],[1,15,11],[1,15,11],
[9,12,8,11,10,15],[10,15,11],[10,15,11],[12,3,14,12,5,3],[3,14,0,3,0,5],[3,14,9,3,8,5],[3,14,12,3,12,1],[0,3,14],[9,3,14],[3,14,8,8,14,12],[0,3,14],[9,3,14],[3,12,5,3,2,12],[0,5,3],[8,5,3],[2,12,1],[],[],[2,12,8],[],[],[3,9,5,9,12,5],[0,5,3],[8,5,3],[9,12,1],[],[],[9,12,8],[],[],[12,11,14,12,10,11,12,5,10],[11,14,0,10,0,5],[11,14,9,10,8,5],[11,12,1,11,14,12],[0,11,14],[9,11,14],[11,14,12,11,12,8],[0,11,14],[9,11,14],[10,2,12,10,12,5],[0,5,10],[8,5,10],[2,12,1],[],[],[2,12,8],[],[],[10,12,5,10,9,12],
[0,5,10],[8,5,10],[9,12,1],[],[],[9,12,8],[],[],[16,13,14,17,16,14,14,13,15],[16,0,17,0,15,14,13,15,0],[16,12,17,8,15,9,13,15,8,9,15,14],[1,17,16,1,14,17,1,15,14],[1,15,14,1,14,0,0,17,16],[1,15,9,9,15,14,12,17,16],[16,8,17,8,14,17,8,10,14,10,15,14],[10,14,0,10,15,14,0,17,16],[10,14,9,10,15,14,12,17,16],[16,13,2,16,2,17,13,15,2],[2,13,15,2,0,13,0,17,16],[2,8,15,8,13,15,12,17,16],[2,17,16,2,16,1,2,1,15],[1,15,2,0,17,16],[1,15,2,12,17,16],[2,17,8,2,10,15,8,17,16],[0,17,16,10,15,2],[12,17,16,10,15,2],
[16,13,9,16,9,17,13,11,9,13,15,11],[11,0,13,11,13,15,0,17,16],[11,13,15,11,8,13,12,17,16],[9,16,1,9,17,16,11,1,15],[1,15,11,0,17,16],[1,15,11,12,17,16],[9,17,16,9,16,8,11,10,15],[0,17,16,10,15,11],[12,17,16,10,15,11],[13,14,16,13,3,14,16,14,17],[3,14,0,3,0,13,0,17,16],[3,14,9,3,8,13,12,17,16],[3,14,1,14,17,1,17,16,1],[0,17,16,0,3,14],[9,3,14,12,17,16],[3,14,8,8,17,16,14,17,8],[0,17,16,0,3,14],[9,3,14,12,17,16],[3,2,13,13,2,16,2,17,16],[0,13,3,17,16,0],[8,13,3,17,16,12],[2,17,16,2,16,1],[0,17,16],
[12,17,16],[2,17,8,8,17,16],[0,17,16],[12,17,16],[3,9,13,13,9,16,9,17,16],[0,13,3,17,16,0],[8,13,3,17,16,12],[9,16,1,9,17,16],[0,17,16],[12,17,16],[9,16,8,9,17,16],[0,17,16],[12,17,16],[13,14,16,13,11,14,10,11,13,16,14,17],[10,0,13,0,17,16,11,14,0],[10,8,13,11,14,9,12,17,16],[11,14,1,14,17,1,17,16,1],[0,17,16,0,11,14],[9,11,14,12,17,16],[8,17,16,14,17,8,11,14,8],[0,17,16,0,11,14],[9,11,14,12,17,16],[10,2,13,13,2,16,2,17,16],[0,13,10,17,16,0],[17,16,12,8,13,10],[2,17,16,2,16,1],[0,17,16],[12,17,16],
[2,17,8,8,17,16],[0,17,16],[12,17,16],[10,9,13,13,9,16,9,17,16],[0,13,10,17,16,0],[17,16,12,8,13,10],[9,16,1,9,17,16],[0,17,16],[12,17,16],[9,16,8,9,17,16],[0,17,16],[12,17,16],[4,13,14,15,14,13],[0,15,14,0,13,15],[8,13,15,9,8,15,9,15,14],[4,1,14,1,15,14],[1,15,14,1,14,0],[1,15,9,9,15,14],[4,8,14,8,10,14,10,15,14],[10,14,0,10,15,14],[10,14,9,10,15,14],[4,13,2,2,13,15],[2,13,15,2,0,13],[2,8,15,8,13,15],[2,4,1,2,1,15],[1,15,2],[1,15,2],[2,4,8,2,10,15],[10,15,2],[10,15,2],[4,13,9,9,13,11,11,13,15],[11,
0,13,11,13,15],[11,8,13,11,13,15],[9,4,1,11,1,15],[1,15,11],[1,15,11],[9,4,8,11,10,15],[10,15,11],[10,15,11],[4,3,14,4,13,3],[3,14,0,3,0,13],[3,14,9,3,8,13],[3,14,1,14,4,1],[0,3,14],[9,3,14],[3,14,8,8,14,4],[0,3,14],[9,3,14],[3,2,13,13,2,4],[0,13,3],[8,13,3],[2,4,1],[],[],[2,4,8],[],[],[3,9,13,9,4,13],[0,13,3],[8,13,3],[9,4,1],[],[],[9,4,8],[],[],[4,11,14,4,10,11,4,13,10],[11,14,0,10,0,13],[11,14,9,10,8,13],[11,14,4,11,4,1],[0,11,14],[9,11,14],[11,14,8,8,14,4],[0,11,14],[9,11,14],[10,4,13,10,2,4],
[0,13,10],[8,13,10],[2,4,1],[],[],[2,4,8],[],[],[10,9,13,9,4,13],[0,13,10],[8,13,10],[9,4,1],[],[],[9,4,8],[],[],[13,15,14,13,14,12],[0,15,14,0,13,15],[8,13,15,9,8,15,9,15,14],[12,1,14,1,15,14],[1,15,14,1,14,0],[1,15,9,9,15,14],[8,10,14,12,8,14,10,15,14],[10,14,0,10,15,14],[10,14,9,10,15,14],[12,13,2,2,13,15],[2,13,15,2,0,13],[2,8,15,8,13,15],[2,1,15,2,12,1],[1,15,2],[1,15,2],[2,10,15,2,12,8],[10,15,2],[10,15,2],[12,13,9,11,13,15,9,13,11],[11,0,13,11,13,15],[11,8,13,11,13,15],[9,12,1,11,1,15],[1,
15,11],[1,15,11],[9,12,8,11,10,15],[10,15,11],[10,15,11],[12,3,14,12,13,3],[3,14,0,3,0,13],[3,14,9,3,8,13],[3,14,12,3,12,1],[0,3,14],[9,3,14],[3,14,8,8,14,12],[0,3,14],[9,3,14],[3,12,13,3,2,12],[0,13,3],[8,13,3],[2,12,1],[],[],[2,12,8],[],[],[3,9,13,9,12,13],[0,13,3],[8,13,3],[9,12,1],[],[],[9,12,8],[],[],[12,11,14,12,10,11,12,13,10],[11,14,0,10,0,13],[11,14,9,10,8,13],[11,12,1,11,14,12],[0,11,14],[9,11,14],[11,14,12,11,12,8],[0,11,14],[9,11,14],[10,2,12,10,12,13],[0,13,10],[8,13,10],[2,12,1],[],
[],[2,12,8],[],[],[10,12,13,10,9,12],[0,13,10],[8,13,10],[9,12,1],[],[],[9,12,8],[],[]];
}).call(this);//# sourceMappingURL=CindyPrint.js.map