cubing 0.49.2 → 0.50.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/cubing/bluetooth/index.js +1 -1
- package/dist/lib/cubing/chunks/{chunk-JNIAXRNE.js → chunk-C4UUCOBH.js} +1 -1
- package/dist/lib/cubing/chunks/{chunk-W2Z7MAP2.js → chunk-I4MRKD4Z.js} +2 -2
- package/dist/lib/cubing/chunks/{chunk-OW4IHAI4.js → chunk-P5TX6QDI.js} +2 -2
- package/dist/lib/cubing/chunks/{chunk-4K67JPLC.js → chunk-YOMULQ2R.js} +7 -7
- package/dist/lib/cubing/chunks/{inside-BKENXSSR.js → inside-UAYHMFKU.js} +11 -9
- package/dist/lib/cubing/chunks/inside-UAYHMFKU.js.map +7 -0
- package/dist/lib/cubing/chunks/{puzzles-dynamic-unofficial-EE5FDJ3S.js → puzzles-dynamic-unofficial-NCMLO2AJ.js} +73 -73
- package/dist/lib/cubing/chunks/puzzles-dynamic-unofficial-NCMLO2AJ.js.map +7 -0
- package/dist/lib/cubing/chunks/{search-dynamic-sgs-side-events-OOIOU5SK.js → search-dynamic-sgs-side-events-RPVZU2YB.js} +2 -2
- package/dist/lib/cubing/chunks/{search-dynamic-sgs-unofficial-COV225SC.js → search-dynamic-sgs-unofficial-2TYKOUM4.js} +2 -2
- package/dist/lib/cubing/chunks/{search-dynamic-solve-4x4x4-EWVB2ON7.js → search-dynamic-solve-4x4x4-BUXBRWGT.js} +4 -4
- package/dist/lib/cubing/chunks/search-dynamic-solve-fto-UOKDYVD5.js +1405 -0
- package/dist/lib/cubing/chunks/search-dynamic-solve-fto-UOKDYVD5.js.map +7 -0
- package/dist/lib/cubing/chunks/search-worker-entry.js +1 -1
- package/dist/lib/cubing/chunks/{twisty-dynamic-3d-TINH44QH.js → twisty-dynamic-3d-HF7KVBOE.js} +3 -3
- package/dist/lib/cubing/puzzles/index.js +1 -1
- package/dist/lib/cubing/scramble/index.js +3 -3
- package/dist/lib/cubing/search/index.js +3 -3
- package/dist/lib/cubing/twisty/index.js +2 -2
- package/package.json +1 -1
- package/dist/lib/cubing/chunks/inside-BKENXSSR.js.map +0 -7
- package/dist/lib/cubing/chunks/puzzles-dynamic-unofficial-EE5FDJ3S.js.map +0 -7
- package/dist/lib/cubing/chunks/search-dynamic-solve-fto-EY5ZVAGO.js +0 -1781
- package/dist/lib/cubing/chunks/search-dynamic-solve-fto-EY5ZVAGO.js.map +0 -7
- /package/dist/lib/cubing/chunks/{chunk-JNIAXRNE.js.map → chunk-C4UUCOBH.js.map} +0 -0
- /package/dist/lib/cubing/chunks/{chunk-W2Z7MAP2.js.map → chunk-I4MRKD4Z.js.map} +0 -0
- /package/dist/lib/cubing/chunks/{chunk-OW4IHAI4.js.map → chunk-P5TX6QDI.js.map} +0 -0
- /package/dist/lib/cubing/chunks/{chunk-4K67JPLC.js.map → chunk-YOMULQ2R.js.map} +0 -0
- /package/dist/lib/cubing/chunks/{search-dynamic-sgs-side-events-OOIOU5SK.js.map → search-dynamic-sgs-side-events-RPVZU2YB.js.map} +0 -0
- /package/dist/lib/cubing/chunks/{search-dynamic-sgs-unofficial-COV225SC.js.map → search-dynamic-sgs-unofficial-2TYKOUM4.js.map} +0 -0
- /package/dist/lib/cubing/chunks/{search-dynamic-solve-4x4x4-EWVB2ON7.js.map → search-dynamic-solve-4x4x4-BUXBRWGT.js.map} +0 -0
- /package/dist/lib/cubing/chunks/{twisty-dynamic-3d-TINH44QH.js.map → twisty-dynamic-3d-HF7KVBOE.js.map} +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/cubing/vendor/mit/cs0x7f/fto/scramble_fto_standalone.js"],
|
|
4
|
+
"sourcesContent": ["// From https://gist.github.com/cs0x7f/1579492aa43c794d529057386c489702\n\n\"use strict\";\n\nimport { randomUIntBelow } from \"random-uint-below\";\nimport { Alg } from \"../../../../../cubing/alg\";\n\n/*\nMIT Licence\n\nCopyright (c) 2024 Chen Shuang\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\n/*\n\n*/\nvar DEBUG = false;\n\nvar mathlib = (function() {\n\tvar fact = [1];\n\tfor (var i = 0; i < 32; ++i) {\n\t\tfact[i + 1] = fact[i] * (i + 1);\n\t}\n\n\tfunction circle(arr) {\n\t\tvar length = arguments.length - 1,\n\t\t\ttemp = arr[arguments[length]];\n\t\tfor (var i = length; i > 1; i--) {\n\t\t\tarr[arguments[i]] = arr[arguments[i - 1]];\n\t\t}\n\t\tarr[arguments[1]] = temp;\n\t\treturn circle;\n\t}\n\n\tfunction getPruning(table, index) {\n\t\treturn table[index >> 3] >> ((index & 7) << 2) & 15;\n\t}\n\n\tfunction setNPerm(arr, idx, n, even) {\n\t\tvar prt = 0;\n\t\tif (even < 0) {\n\t\t\tidx <<= 1;\n\t\t}\n\t\tif (n >= 16) {\n\t\t\tarr[n - 1] = 0;\n\t\t\tfor (var i = n - 2; i >= 0; i--) {\n\t\t\t\tarr[i] = idx % (n - i);\n\t\t\t\tprt ^= arr[i];\n\t\t\t\tidx = ~~(idx / (n - i));\n\t\t\t\tfor (var j = i + 1; j < n; j--) {\n\t\t\t\t\tarr[j] >= arr[i] && arr[j]++;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (even < 0 && (prt & 1) != 0) {\n\t\t\t\tvar tmp = arr[n - 1];\n\t\t\t\tarr[n - 1] = arr[n - 2];\n\t\t\t\tarr[n - 2] = tmp;\n\t\t\t}\n\t\t\treturn arr;\n\t\t}\n\t\tvar vall = 0x76543210;\n\t\tvar valh = 0xfedcba98;\n\t\tfor (var i = 0; i < n - 1; i++) {\n\t\t\tvar p = fact[n - 1 - i];\n\t\t\tvar v = idx / p;\n\t\t\tidx = idx % p;\n\t\t\tprt ^= v;\n\t\t\tv <<= 2;\n\t\t\tif (v >= 32) {\n\t\t\t\tv = v - 32;\n\t\t\t\tarr[i] = valh >> v & 0xf;\n\t\t\t\tvar m = (1 << v) - 1;\n\t\t\t\tvalh = (valh & m) + ((valh >> 4) & ~m);\n\t\t\t} else {\n\t\t\t\tarr[i] = vall >> v & 0xf;\n\t\t\t\tvar m = (1 << v) - 1;\n\t\t\t\tvall = (vall & m) + ((vall >>> 4) & ~m) + (valh << 28);\n\t\t\t\tvalh = valh >> 4;\n\t\t\t}\n\t\t}\n\t\tif (even < 0 && (prt & 1) != 0) {\n\t\t\tarr[n - 1] = arr[n - 2];\n\t\t\tarr[n - 2] = vall & 0xf;\n\t\t} else {\n\t\t\tarr[n - 1] = vall & 0xf;\n\t\t}\n\t\treturn arr;\n\t}\n\n\tfunction getNPerm(arr, n, even) {\n\t\tn = n || arr.length;\n\t\tvar idx = 0;\n\t\tif (n >= 16) {\n\t\t\tfor (var i = 0; i < n - 1; i++) {\n\t\t\t\tidx *= n - i;\n\t\t\t\tfor (var j = i + 1; j < n; j++) {\n\t\t\t\t\tarr[j] < arr[i] && idx++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn even < 0 ? (idx >> 1) : idx;\n\t\t}\n\t\tvar vall = 0x76543210;\n\t\tvar valh = 0xfedcba98;\n\t\tfor (var i = 0; i < n - 1; i++) {\n\t\t\tvar v = arr[i] << 2;\n\t\t\tidx *= n - i;\n\t\t\tif (v >= 32) {\n\t\t\t\tidx += (valh >> (v - 32)) & 0xf;\n\t\t\t\tvalh -= 0x11111110 << (v - 32);\n\t\t\t} else {\n\t\t\t\tidx += (vall >> v) & 0xf;\n\t\t\t\tvalh -= 0x11111111;\n\t\t\t\tvall -= 0x11111110 << v;\n\t\t\t}\n\t\t}\n\t\treturn even < 0 ? (idx >> 1) : idx;\n\t}\n\n\tfunction getNParity(idx, n) {\n\t\tvar i, p;\n\t\tp = 0;\n\t\tfor (i = n - 2; i >= 0; --i) {\n\t\t\tp ^= idx % (n - i);\n\t\t\tidx = ~~(idx / (n - i));\n\t\t}\n\t\treturn p & 1;\n\t}\n\n\tfunction getNOri(arr, n, evenbase) {\n\t\tvar base = Math.abs(evenbase);\n\t\tvar idx = evenbase < 0 ? 0 : arr[0] % base;\n\t\tfor (var i = n - 1; i > 0; i--) {\n\t\t\tidx = idx * base + arr[i] % base;\n\t\t}\n\t\treturn idx;\n\t}\n\n\tfunction setNOri(arr, idx, n, evenbase) {\n\t\tvar base = Math.abs(evenbase);\n\t\tvar parity = base * n;\n\t\tfor (var i = 1; i < n; i++) {\n\t\t\tarr[i] = idx % base;\n\t\t\tparity -= arr[i];\n\t\t\tidx = ~~(idx / base);\n\t\t}\n\t\tarr[0] = (evenbase < 0 ? parity : idx) % base;\n\t\treturn arr;\n\t}\n\n\tfunction bitCount(x) {\n\t\tx -= (x >> 1) & 0x55555555;\n\t\tx = (x & 0x33333333) + ((x >> 2) & 0x33333333);\n\t\treturn ((x + (x >> 4) & 0xf0f0f0f) * 0x1010101) >> 24;\n\t}\n\n\tfunction getMPerm(arr, n, cnts, cums) {\n\t\tvar seen = ~0;\n\t\tvar idx = 0;\n\t\tvar x = 1;\n\t\tfor (var i = 0; i < n; i++) {\n\t\t\tvar pi = arr[i];\n\t\t\tidx = idx * (n - i) + bitCount(seen & ((1 << cums[pi]) - 1)) * x;\n\t\t\tx = x * cnts[pi]--;\n\t\t\tseen &= ~(1 << (cums[pi] + cnts[pi]));\n\t\t}\n\t\treturn Math.round(idx / x);\n\t}\n\n\tfunction setMPerm(arr, idx, n, cnts, x) {\n\t\tfor (var i = 0; i < n; i++) {\n\t\t\tfor (var j = 0; j < cnts.length; j++) {\n\t\t\t\tif (cnts[j] == 0) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tvar x2 = ~~(x * cnts[j] / (n - i));\n\t\t\t\tif (idx < x2) {\n\t\t\t\t\tcnts[j]--;\n\t\t\t\t\tarr[i] = j;\n\t\t\t\t\tx = x2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tidx -= x2;\n\t\t\t}\n\t\t}\n\t\treturn arr;\n\t}\n\n\t// type: 'p' (permutation), 'o' (orientation), 'c' (combination)\n\t// evenbase: base for ori, sign for even parity, cnts for combination\n\tfunction Coord(type, length, evenbase) {\n\t\tthis.length = length;\n\t\tthis.evenbase = evenbase;\n\t\tif (type == 'p') {\n\t\t\tthis.get = function(arr) {\n\t\t\t\treturn getNPerm(arr, this.length, this.evenbase);\n\t\t\t};\n\t\t\tthis.set = function(arr, idx) {\n\t\t\t\treturn setNPerm(arr, idx, this.length, this.evenbase);\n\t\t\t};\n\t\t} else if (type == 'o') {\n\t\t\tthis.get = function(arr) {\n\t\t\t\treturn getNOri(arr, this.length, this.evenbase);\n\t\t\t};\n\t\t\tthis.set = function(arr, idx) {\n\t\t\t\treturn setNOri(arr, idx, this.length, this.evenbase);\n\t\t\t};\n\t\t} else if (type == 'c') {\n\t\t\tvar cnts = evenbase;\n\t\t\tthis.cnts = cnts.slice();\n\t\t\tthis.cntn = this.cnts.length;\n\t\t\tthis.cums = [0];\n\t\t\tfor (var i = 1; i <= this.cntn; i++) {\n\t\t\t\tthis.cums[i] = this.cums[i - 1] + cnts[i - 1];\n\t\t\t}\n\t\t\tthis.n = this.cums[this.cntn];\n\t\t\tvar n = this.n;\n\t\t\tvar x = 1;\n\t\t\tfor (var i = 0; i < this.cntn; i++) {\n\t\t\t\tfor (var j = 1; j <= cnts[i]; j++, n--) {\n\t\t\t\t\tx *= n / j;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.x = Math.round(x);\n\t\t\tthis.get = function(arr) {\n\t\t\t\treturn getMPerm(arr, this.n, this.cnts.slice(), this.cums);\n\t\t\t};\n\t\t\tthis.set = function(arr, idx) {\n\t\t\t\treturn setMPerm(arr, idx, this.n, this.cnts.slice(), this.x);\n\t\t\t};\n\t\t} else { // invalid type\n\t\t\tdebugger;\n\t\t}\n\t}\n\n\tfunction fillFacelet(facelets, f, perm, ori, divcol) {\n\t\tfor (var i = 0; i < facelets.length; i++) {\n\t\t\tvar cubie = facelets[i];\n\t\t\tvar p = perm[i] === undefined ? i : perm[i];\n\t\t\tif (typeof(cubie) == 'number') {\n\t\t\t\tf[cubie] = ~~(facelets[p] / divcol);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tvar o = ori[i] || 0;\n\t\t\tfor (var j = 0; j < cubie.length; j++) {\n\t\t\t\tf[cubie[(j + o) % cubie.length]] = ~~(facelets[p][j] / divcol);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction detectFacelet(facelets, f, perm, ori, divcol) {\n\t\tfor (var i = 0; i < facelets.length; i++) {\n\t\t\tvar n_ori = facelets[i].length;\n\t\t\touter_loop: for (var j = 0; j < facelets.length + 1; j++) {\n\t\t\t\tif (j == facelets.length) { // not matched\n\t\t\t\t\treturn -1;\n\t\t\t\t} else if (facelets[j].length != n_ori) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tfor (var o = 0; o < n_ori; o++) {\n\t\t\t\t\tvar isMatch = true;\n\t\t\t\t\tfor (var t = 0; t < n_ori; t++) {\n\t\t\t\t\t\tif (~~(facelets[j][t] / divcol) != f[facelets[i][(t + o) % n_ori]]) {\n\t\t\t\t\t\t\tisMatch = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (isMatch) {\n\t\t\t\t\t\tperm[i] = j;\n\t\t\t\t\t\tori[i] = o;\n\t\t\t\t\t\tbreak outer_loop;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn 0;\n\t}\n\n\tfunction createMoveHash(initState, validMoves, hashFunc, moveFunc) {\n\t\tvar states = [initState];\n\t\tvar hash2idx = {};\n\t\tvar depthEnds = [];\n\t\thash2idx[hashFunc(initState)] = 0;\n\t\tdepthEnds[0] = 1;\n\t\tvar moveTable = [];\n\t\tfor (var m = 0; m < validMoves.length; m++) {\n\t\t\tmoveTable[m] = [];\n\t\t}\n\t\tvar tt = +new Date;\n\t\tfor (var i = 0; i < states.length; i++) {\n\t\t\tif (i == depthEnds[depthEnds.length - 1]) {\n\t\t\t\tdepthEnds.push(states.length);\n\t\t\t}\n\t\t\tif (i % 10000 == 9999) {\n\t\t\t\tDEBUG && console.log(i, 'states scanned, tt=', +new Date - tt);\n\t\t\t}\n\t\t\tvar curState = states[i];\n\t\t\tfor (var m = 0; m < validMoves.length; m++) {\n\t\t\t\tvar newState = moveFunc(curState, validMoves[m]);\n\t\t\t\tif (!newState) {\n\t\t\t\t\tmoveTable[m][i] = -1;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tvar newHash = hashFunc(newState);\n\t\t\t\tif (!(newHash in hash2idx)) {\n\t\t\t\t\thash2idx[newHash] = states.length;\n\t\t\t\t\tstates.push(newState);\n\t\t\t\t}\n\t\t\t\tmoveTable[m][i] = hash2idx[newHash];\n\t\t\t}\n\t\t}\n\t\tDEBUG && console.log('[move hash] ' + states.length + ' states generated, tt=', +new Date - tt, JSON.stringify(depthEnds));\n\t\treturn [moveTable, hash2idx];\n\t}\n\n\tfunction createPrun(prun, init, size, maxd, doMove, N_MOVES, N_POWER, N_INV) {\n\t\tvar isMoveTable = Array.isArray(doMove);\n\t\tN_MOVES = N_MOVES || 6;\n\t\tN_POWER = N_POWER || 3;\n\t\tN_INV = N_INV || 256;\n\t\tmaxd = maxd || 256;\n\t\tfor (var i = 0, len = (size + 7) >>> 3; i < len; i++) {\n\t\t\tprun[i] = -1;\n\t\t}\n\t\tif (!Array.isArray(init)) {\n\t\t\tinit = [init];\n\t\t}\n\t\tfor (var i = 0; i < init.length; i++) {\n\t\t\tprun[init[i] >> 3] ^= 15 << ((init[i] & 7) << 2);\n\t\t}\n\t\tvar val = 0;\n\t\t// var t = +new Date;\n\t\tfor (var l = 0; l <= maxd; l++) {\n\t\t\tvar done = 0;\n\t\t\tvar inv = l >= N_INV;\n\t\t\tvar fill = (l + 1) ^ 15;\n\t\t\tvar find = inv ? 0xf : l;\n\t\t\tvar check = inv ? l : 0xf;\n\n\t\t\touter_loop: for (var p = 0; p < size; p++, val >>= 4) {\n\t\t\t\tif ((p & 7) == 0) {\n\t\t\t\t\tval = prun[p >> 3];\n\t\t\t\t\tif (!inv && val == -1) {\n\t\t\t\t\t\tp += 7;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif ((val & 0xf) != find) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tfor (var m = 0; m < N_MOVES; m++) {\n\t\t\t\t\tvar q = p;\n\t\t\t\t\tfor (var c = 0; c < N_POWER; c++) {\n\t\t\t\t\t\tq = isMoveTable ? doMove[m][q] : doMove(q, m);\n\t\t\t\t\t\tif (q < 0) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (getPruning(prun, q) != check) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t++done;\n\t\t\t\t\t\tif (inv) {\n\t\t\t\t\t\t\tprun[p >> 3] ^= fill << ((p & 7) << 2);\n\t\t\t\t\t\t\tcontinue outer_loop;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tprun[q >> 3] ^= fill << ((q & 7) << 2);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (done == 0) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tDEBUG && console.log('[prun]', done);\n\t\t}\n\t}\n\n\t// ida search algorithm\n\t// isSolved(state) -> boolean, in case isSolved = null, getPrun(idx) == 0 is used\n\t// getPrun(state) -> int\n\t// doMove(state) -> newState\n\t// if ckmv[last_move] >> cur_move & 1, cur_move is skipped\n\tfunction Searcher(isSolved, getPrun, doMove, N_AXIS, N_POWER, ckmv) {\n\t\tthis.isSolved = isSolved || function() { return true; };\n\t\tthis.getPrun = getPrun;\n\t\tthis.doMove = doMove;\n\t\tthis.N_AXIS = N_AXIS;\n\t\tthis.N_POWER = N_POWER;\n\t\tthis.ckmv = ckmv || valuedArray(N_AXIS, function(i) { return 1 << i; } );\n\t}\n\n\tvar _ = Searcher.prototype;\n\n\t_.solve = function(idx, minl, MAXL, callback) {\n\t\tvar sols = this.solveMulti([idx], minl, MAXL, callback);\n\t\treturn sols == null ? null : sols[0];\n\t};\n\n\t_.solveMulti = function(idxs, minl, MAXL, callback) {\n\t\tthis.callback = callback || function() { return true; };\n\t\tvar sol = [];\n\t\touter_loop: for (var l = minl; l <= MAXL; l++) {\n\t\t\tfor (var s = 0; s < idxs.length; s++) {\n\t\t\t\tthis.sidx = s;\n\t\t\t\tif (this.idaSearch(idxs[s], l, -1, sol) == 0) {\n\t\t\t\t\tbreak outer_loop;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.sidx = -1;\n\t\t}\n\t\treturn this.sidx == -1 ? null : [sol, this.sidx];\n\t};\n\n\t_.idaSearch = function(idx, maxl, lm, sol) {\n\t\tvar prun = this.getPrun(idx);\n\t\tif (prun > maxl) {\n\t\t\treturn prun > maxl + 1 ? 2 : 1;\n\t\t}\n\t\tif (maxl == 0) {\n\t\t\treturn this.isSolved(idx) && this.callback(sol, this.sidx) ? 0 : 1;\n\t\t}\n\t\tif (prun == 0 && this.isSolved(idx) && maxl == 1) {\n\t\t\treturn 1;\n\t\t}\n\t\tfor (var axis = 0; axis < this.N_AXIS; axis++) {\n\t\t\tif (this.ckmv[lm] >> axis & 1) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tvar idx1 = Array.isArray(idx) ? idx.slice() : idx;\n\t\t\tfor (var pow = 0; pow < this.N_POWER; pow++) {\n\t\t\t\tidx1 = this.doMove(idx1, axis);\n\t\t\t\tif (idx1 == null) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tsol.push([axis, pow]);\n\t\t\t\tvar ret = this.idaSearch(idx1, maxl - 1, axis, sol);\n\t\t\t\tif (ret == 0) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\tsol.pop();\n\t\t\t\tif (ret == 2) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn 1;\n\t};\n\n\tfunction rn(n) {\n\t\treturn randomUIntBelow(n)\n\t}\n\n\tfunction rndPerm(n, isEven) {\n\t\tvar p = 0;\n\t\tvar arr = [];\n\t\tfor (var i = 0; i < n; i++) {\n\t\t\tarr[i] = i;\n\t\t}\n\t\tfor (var i = 0; i < n - 1; i++) {\n\t\t\tvar k = rn(n - i);\n\t\t\tcircle(arr, i, i + k);\n\t\t\tp ^= k != 0;\n\t\t}\n\t\tif (isEven && p) {\n\t\t\tcircle(arr, 0, 1);\n\t\t}\n\t\treturn arr;\n\t}\n\n\tfunction valuedArray(len, val) {\n\t\tvar ret = [];\n\t\tvar isFun = typeof val == 'function';\n\t\tfor (var i = 0; i < len; i++) {\n\t\t\tret[i] = isFun ? val(i) : val;\n\t\t}\n\t\treturn ret;\n\t}\n\n\tfunction permOriMult(p1, p2, prod, o1, o2, ori, oriMod) {\n\t\tfor (var i = 0; i < p2.length; i++) {\n\t\t\tif (oriMod) {\n\t\t\t\tori[i] = (o1[p2[i]] + o2[i]) % oriMod;\n\t\t\t}\n\t\t\tprod[i] = p1[p2[i]];\n\t\t}\n\t}\n\n\treturn {\n\t\tbitCount: bitCount,\n\t\tgetPruning: getPruning,\n\t\tsetNOri: setNOri,\n\t\tgetNOri: getNOri,\n\t\tgetNPerm: getNPerm,\n\t\tgetNParity: getNParity,\n\t\tCoord: Coord,\n\t\tcreateMoveHash: createMoveHash,\n\t\tcreatePrun: createPrun,\n\t\tfillFacelet: fillFacelet,\n\t\tdetectFacelet: detectFacelet,\n\t\trn: rn,\n\t\tvaluedArray: valuedArray,\n\t\tSearcher: Searcher,\n\t\trndPerm: rndPerm,\n\t\tpermOriMult: permOriMult,\n\t};\n})();\n\nvar ftosolver = (function() {\n\t//face-turning octahedron cube w/o identical pieces\n\tfunction FtoCubie(cp, co, ep, uf, rl) {\n\t\tthis.cp = (cp && cp.slice()) || [0, 1, 2, 3, 4, 5];\n\t\tthis.co = (co && co.slice()) || [0, 0, 0, 0, 0, 0];\n\t\tthis.ep = (ep && ep.slice()) || [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];\n\t\tthis.uf = (uf && uf.slice()) || [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];\n\t\tthis.rl = (rl && rl.slice()) || [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];\n\t}\n\n\tvar U = 0, F = 9, r = 18, l = 27, D = 36, B = 45, R = 54, L = 63;\n\n\tvar cornFacelets = [\n\t\t[U + 0, R + 0, F + 0, L + 0],\n\t\t[U + 4, B + 8, r + 4, R + 8],\n\t\t[U + 8, L + 4, l + 8, B + 4],\n\t\t[l + 0, D + 0, r + 0, B + 0],\n\t\t[F + 4, D + 8, l + 4, L + 8],\n\t\t[r + 8, D + 4, F + 8, R + 4]\n\t];\n\n\tvar edgeFacelets = [\n\t\t[U + 1, R + 3], [U + 3, L + 1], [U + 6, B + 6],\n\t\t[l + 1, D + 3], [r + 3, D + 1], [F + 6, D + 6],\n\t\t[F + 3, R + 1], [F + 1, L + 3], [l + 6, L + 6],\n\t\t[l + 3, B + 1], [r + 1, B + 3], [r + 6, R + 6]\n\t];\n\n\tvar ctufFacelets = [\n\t\tU + 2, U + 5, U + 7,\n\t\tF + 2, F + 5, F + 7,\n\t\tr + 2, r + 5, r + 7,\n\t\tl + 2, l + 5, l + 7\n\t];\n\n\tvar ctrlFacelets = [\n\t\tD + 2, D + 5, D + 7,\n\t\tB + 2, B + 5, B + 7,\n\t\tL + 2, L + 5, L + 7,\n\t\tR + 2, R + 5, R + 7\n\t];\n\n\tFtoCubie.prototype.isEqual = function(fc) {\n\t\tfor (var i = 0; i < 12; i++) {\n\t\t\tif (this.ep[i] != fc.ep[i] || this.uf[i] != fc.uf[i] || this.rl[i] != fc.rl[i]\n\t\t\t\t\t|| i < 6 && (this.cp[i] != fc.cp[i] || this.co[i] != fc.co[i])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tFtoCubie.prototype.toFaceCube = function(todiv) {\n\t\tvar f = [];\n\t\ttodiv = todiv || 9;\n\t\tvar co = [];\n\t\tfor (var i = 0; i < 6; i++) {\n\t\t\tco[i] = this.co[i] * 2;\n\t\t}\n\t\tmathlib.fillFacelet(cornFacelets, f, this.cp, co, todiv);\n\t\tmathlib.fillFacelet(edgeFacelets, f, this.ep, [], todiv);\n\t\tmathlib.fillFacelet(ctufFacelets, f, this.uf, null, todiv);\n\t\tmathlib.fillFacelet(ctrlFacelets, f, this.rl, null, todiv);\n\t\treturn f;\n\t}\n\n\tFtoCubie.prototype.fromFacelet = function(facelet) {\n\t\tvar count = 0;\n\t\tvar f = [];\n\t\tfor (var i = 0; i < 72; ++i) {\n\t\t\tf[i] = facelet[i];\n\t\t\tcount += Math.pow(16, f[i]);\n\t\t}\n\t\tif (count != 0x99999999) {\n\t\t\treturn -1;\n\t\t}\n\t\tvar co = [];\n\t\tif (mathlib.detectFacelet(cornFacelets, f, this.cp, co, 9) == -1\n\t\t\t\t|| mathlib.detectFacelet(edgeFacelets, f, this.ep, [], 9) == -1) {\n\t\t\treturn -1;\n\t\t}\n\t\tvar parity = 0;\n\t\tfor (var i = 0; i < 6; i++) {\n\t\t\tthis.co[i] = co[i] >> 1;\n\t\t\tparity ^= this.co[i];\n\t\t}\n\t\tif (parity != 0\n\t\t\t\t|| mathlib.getNParity(mathlib.getNPerm(this.cp, 6), 6) != 0\n\t\t\t\t|| mathlib.getNParity(mathlib.getNPerm(this.ep, 12), 12) != 0) {\n\t\t\treturn -1;\n\t\t}\n\t\tvar remainCnts = [3, 3, 3, 3];\n\t\tfor (var i = 0; i < 12; i++) {\n\t\t\tvar col = f[ctufFacelets[i]];\n\t\t\tif (!(remainCnts[col] > 0)) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tthis.uf[i] = col * 3 + 3 - remainCnts[col];\n\t\t\tremainCnts[col]--;\n\t\t}\n\t\tremainCnts = [3, 3, 3, 3];\n\t\tfor (var i = 0; i < 12; i++) {\n\t\t\tvar col = [0, 1, 3, 2][f[ctrlFacelets[i]] - 4];\n\t\t\tif (!(remainCnts[col] > 0)) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tthis.rl[i] = col * 3 + 3 - remainCnts[col];\n\t\t\tremainCnts[col]--;\n\t\t}\n\t\tif (mathlib.getNParity(mathlib.getNPerm(this.uf, 12), 12) != 0) {\n\t\t\tfor (var i = 0; i < 12; i++) { // swap 0 and 1 to fix parity\n\t\t\t\tthis.uf[i] ^= this.uf[i] < 2 ? 1 : 0;\n\t\t\t}\n\t\t}\n\t\tif (mathlib.getNParity(mathlib.getNPerm(this.rl, 12), 12) != 0) {\n\t\t\tfor (var i = 0; i < 12; i++) { // swap 0 and 1 to fix parity\n\t\t\t\tthis.rl[i] ^= this.rl[i] < 2 ? 1 : 0;\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n\n\tFtoCubie.prototype.toString = function(todiv) {\n\t\tvar f = this.toFaceCube(todiv);\n\t\tvar ret = '' +\n\t\t\t' U8 U7 U6 U5 U4 B8 B7 B6 B5 B4\\n' +\n\t\t\t'L4 U3 U2 U1 R8 r4 B3 B2 B1 l8\\n' +\n\t\t\t'L5 L1 U0 R3 R7 r5 r1 B0 l3 l7\\n' +\n\t\t\t'L6 L2 L0 R0 R2 R6 r6 r2 r0 l0 l2 l6\\n' +\n\t\t\t'L7 L3 F0 R1 R5 r7 r3 D0 l1 l5\\n' +\n\t\t\t'L8 F1 F2 F3 R4 r8 D1 D2 D3 l4\\n' +\n\t\t\t' F4 F5 F6 F7 F8 D4 D5 D6 D7 D8';\n\t\tret = ret.replace(/([UFrlDBRL])([0-8])/g, function(m, p1, p2) {\n\t\t\tvar i = 'UFrlDBRL'.indexOf(p1) * 9 + (~~p2);\n\t\t\treturn 'UFrlDBRL' [~~(f[i] / 9)] + (f[i] % 9);\n\t\t});\n\t\treturn ret;\n\t}\n\n\tFtoCubie.FtoMult = function() {\n\t\tvar prod = arguments[arguments.length - 1] || new FtoCubie();\n\t\tfor (var k = 0; k < arguments.length; k++) {\n\t\t\tvar a = arguments[arguments.length - 1 - k];\n\t\t\tfor (var i = 0; i < 6; i++) {\n\t\t\t\tprod.co[i] = k == 0 ? 0 : (a.co[prod.cp[i]] ^ prod.co[i]);\n\t\t\t\tprod.cp[i] = k == 0 ? i : a.cp[prod.cp[i]];\n\t\t\t}\n\t\t\tfor (var i = 0; i < 12; i++) {\n\t\t\t\tprod.ep[i] = k == 0 ? i : a.ep[prod.ep[i]];\n\t\t\t\tprod.uf[i] = k == 0 ? i : a.uf[prod.uf[i]];\n\t\t\t\tprod.rl[i] = k == 0 ? i : a.rl[prod.rl[i]];\n\t\t\t}\n\t\t}\n\t\treturn prod;\n\t}\n\n\tfunction initMoveCube() {\n\t\tvar rotU = new FtoCubie( //move[U]\n\t\t\t[1, 2, 0, 4, 5, 3], [0, 0, 0, 0, 0, 0], [2, 0, 1, 5, 3, 4, 10, 11, 6, 7, 8, 9],\n\t\t\t[1, 2, 0, 7, 8, 6, 10, 11, 9, 4, 5, 3], [2, 0, 1, 8, 6, 7, 11, 9, 10, 5, 3, 4]);\n\t\tvar rotR = new FtoCubie( //move[R]\n\t\t\t[5, 0, 4, 2, 3, 1], [1, 1, 0, 1, 1, 0], [6, 5, 7, 9, 2, 10, 11, 4, 3, 8, 1, 0],\n\t\t\t[5, 3, 4, 8, 6, 7, 2, 0, 1, 11, 9, 10], [4, 5, 3, 7, 8, 6, 1, 2, 0, 10, 11, 9]);\n\n\t\tvar rotUi = FtoCubie.FtoMult(rotU, rotU, null);\n\t\tvar rotRi = FtoCubie.FtoMult(rotR, rotR, null);\n\t\tvar rotL = FtoCubie.FtoMult(rotUi, rotR, rotU, null);\n\t\tvar rotF = FtoCubie.FtoMult(rotR, rotU, rotRi, null);\n\n\t\tvar moveCube = [];\n\t\tmoveCube[0] = new FtoCubie( //moveU\n\t\t\t[1, 2, 0, 3, 4, 5], [0, 0, 0, 0, 0, 0], [2, 0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11],\n\t\t\t[1, 2, 0, 3, 4, 5, 6, 7, 8, 9, 10, 11], [0, 1, 2, 3, 6, 7, 11, 9, 8, 5, 10, 4]);\n\t\tmoveCube[2] = new FtoCubie( //moveF\n\t\t\t[4, 1, 2, 3, 5, 0], [1, 0, 0, 0, 1, 0], [0, 1, 2, 3, 4, 6, 7, 5, 8, 9, 10, 11],\n\t\t\t[0, 1, 2, 4, 5, 3, 6, 7, 8, 9, 10, 11], [0, 9, 10, 3, 4, 5, 2, 7, 1, 8, 6, 11]);\n\t\tmoveCube[4] = new FtoCubie( //mover\n\t\t\t[0, 5, 2, 1, 4, 3], [0, 1, 0, 0, 0, 1], [0, 1, 2, 3, 10, 5, 6, 7, 8, 9, 11, 4],\n\t\t\t[0, 1, 2, 3, 4, 5, 7, 8, 6, 9, 10, 11], [5, 3, 2, 11, 4, 10, 6, 7, 8, 9, 0, 1]);\n\t\tmoveCube[6] = new FtoCubie( //movel\n\t\t\t[0, 1, 3, 4, 2, 5], [0, 0, 1, 1, 0, 0], [0, 1, 2, 8, 4, 5, 6, 7, 9, 3, 10, 11],\n\t\t\t[0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 9], [8, 1, 7, 2, 0, 5, 6, 3, 4, 9, 10, 11]);\n\t\tmoveCube[8] = new FtoCubie( //moveD\n\t\t\t[0, 1, 2, 5, 3, 4], [0, 0, 0, 0, 0, 0], [0, 1, 2, 4, 5, 3, 6, 7, 8, 9, 10, 11],\n\t\t\t[0, 1, 2, 3, 9, 10, 5, 7, 4, 8, 6, 11], [1, 2, 0, 3, 4, 5, 6, 7, 8, 9, 10, 11]);\n\t\tmoveCube[10] = new FtoCubie( //moveB\n\t\t\t[0, 3, 1, 2, 4, 5], [0, 1, 1, 0, 0, 0], [0, 1, 10, 3, 4, 5, 6, 7, 8, 2, 9, 11],\n\t\t\t[0, 6, 7, 3, 4, 5, 11, 9, 8, 2, 10, 1], [0, 1, 2, 4, 5, 3, 6, 7, 8, 9, 10, 11]);\n\t\tmoveCube[12] = new FtoCubie( //moveR\n\t\t\t[5, 0, 2, 3, 4, 1], [1, 1, 0, 0, 0, 0], [6, 1, 2, 3, 4, 5, 11, 7, 8, 9, 10, 0],\n\t\t\t[5, 3, 2, 8, 4, 7, 6, 0, 1, 9, 10, 11], [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 9]);\n\t\tmoveCube[14] = new FtoCubie( //moveL\n\t\t\t[2, 1, 4, 3, 0, 5], [1, 0, 1, 0, 0, 0], [0, 8, 2, 3, 4, 5, 6, 1, 7, 9, 10, 11],\n\t\t\t[11, 1, 10, 2, 0, 5, 6, 7, 8, 9, 3, 4], [0, 1, 2, 3, 4, 5, 7, 8, 6, 9, 10, 11]);\n\t\tmoveCube[16] = FtoCubie.FtoMult(rotU, moveCube[8], null); // moveUw = [U] * D\n\t\tmoveCube[18] = FtoCubie.FtoMult(rotF, moveCube[10], null); // moveFw = [F] * B\n\t\tmoveCube[20] = FtoCubie.FtoMult(rotR, moveCube[6], null); // moveRw = [R] * l\n\t\tmoveCube[22] = FtoCubie.FtoMult(rotL, moveCube[4], null); // moveLw = [L] * r\n\n\t\tfor (var i = 1; i < 24; i += 2) {\n\t\t\tmoveCube[i] = new FtoCubie();\n\t\t\tFtoCubie.FtoMult(moveCube[i - 1], moveCube[i - 1], moveCube[i]);\n\t\t}\n\n\t\tvar moveHash = [];\n\t\tfor (var i = 0; i < 24; i ++) {\n\t\t\tmoveHash[i] = moveCube[i].ep.join(',');\n\t\t}\n\t\t//init sym\n\t\tvar symCube = [];\n\t\tvar symMult = [];\n\t\tvar symMulI = [];\n\t\tvar symMulM = [];\n\t\tvar symHash = [];\n\t\tvar fc = new FtoCubie();\n\t\tvar fc2 = new FtoCubie();\n\t\tvar tmp;\n\t\tfor (var s = 0; s < 12; s++) {\n\t\t\tsymCube[s] = new FtoCubie(fc.cp, fc.co, fc.ep, fc.uf, fc.rl);\n\t\t\tsymHash[s] = symCube[s].ep.join(',');\n\t\t\tsymMult[s] = [];\n\t\t\tsymMulI[s] = [];\n\t\t\tfc = FtoCubie.FtoMult(fc, rotU, null);\n\t\t\tif (s % 3 == 2) { // [F] or [R]\n\t\t\t\tfc = FtoCubie.FtoMult(fc, rotR, rotU, null);\n\t\t\t}\n\t\t\tif (s % 6 == 5) {\n\t\t\t\tfc = FtoCubie.FtoMult(fc, rotU, rotR, null);\n\t\t\t}\n\t\t}\n\t\tfor (var i = 0; i < 12; i++) {\n\t\t\tfor (var j = 0; j < 12; j++) {\n\t\t\t\tFtoCubie.FtoMult(symCube[i], symCube[j], fc);\n\t\t\t\tvar k = symHash.indexOf(fc.ep.join(','));\n\t\t\t\tsymMult[i][j] = k;\n\t\t\t\tsymMulI[k][j] = i;\n\t\t\t}\n\t\t}\n\t\tfor (var s = 0; s < 12; s++) {\n\t\t\tsymMulM[s] = [];\n\t\t\tfor (var j = 0; j < 8; j++) {\n\t\t\t\tFtoCubie.FtoMult(symCube[symMulI[0][s]], moveCube[j * 2], symCube[s], fc);\n\t\t\t\tvar k = moveHash.indexOf(fc.ep.join(','));\n\t\t\t\tsymMulM[s][j] = k >> 1;\n\t\t\t}\n\t\t}\n\t\tFtoCubie.moveCube = moveCube;\n\t\tFtoCubie.symCube = symCube;\n\t\tFtoCubie.symMult = symMult;\n\t\tFtoCubie.symMulI = symMulI;\n\t\tFtoCubie.symMulM = symMulM;\n\t};\n\n\tinitMoveCube();\n\n\tfunction ftoPermMove(key, perm, move) {\n\t\tvar ret = [];\n\t\tvar movePerm = FtoCubie.moveCube[move][key];\n\t\tfor (var i = 0; i < 12; i++) {\n\t\t\tret[i] = perm[movePerm[i]];\n\t\t}\n\t\treturn ret;\n\t}\n\n\tfunction ftoFullMove(fc, move) {\n\t\treturn FtoCubie.FtoMult(fc, FtoCubie.moveCube[move], null);\n\t}\n\n\tfunction phase1EdgeHash(ep) {\n\t\tvar ret = 0;\n\t\tvar e3fst = -1;\n\t\tfor (var i = 0; i < 12; i++) {\n\t\t\tif ((0x38 >> ep[i] & 1) == 0) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (e3fst == -1) {\n\t\t\t\te3fst = ep[i];\n\t\t\t}\n\t\t\tret += ((ep[i] - e3fst + 3) % 3 + 1) << i * 2;\n\t\t}\n\t\treturn ret;\n\t}\n\n\tfunction phase1CtrlHash(rl) {\n\t\tvar ret = 0;\n\t\tfor (var i = 0; i < 12; i++) {\n\t\t\tif (rl[i] < 3) {\n\t\t\t\tret |= 1 << i;\n\t\t\t}\n\t\t}\n\t\treturn ret;\n\t}\n\n\tfunction phase2EdgeHash(ep) {\n\t\tvar edge2group = [0, 1, 2, 3, 3, 3, 0, 1, 1, 2, 2, 0];\n\t\tvar groups = [[0, 6, 11], [1, 7, 8], [2, 9, 10], [3, 4, 5]];\n\t\tvar ret = 0;\n\t\tvar egoff = [-1, -1, -1, -1];\n\t\tfor (var i = 0; i < 12; i++) {\n\t\t\tvar g = edge2group[ep[i]];\n\t\t\tvar gidx = groups[g].indexOf(ep[i]);\n\t\t\tif (egoff[g] == -1) {\n\t\t\t\tegoff[g] = gidx;\n\t\t\t}\n\t\t\tret += (g * 4 + (gidx - egoff[g] + 3) % 3) * Math.pow(16, i);\n\t\t}\n\t\treturn ret;\n\t}\n\n\tfunction phase2CtHash(ct) {\n\t\tvar ret = 0;\n\t\tfor (var i = 0; i < 12; i++) {\n\t\t\tret |= ~~(ct[i] / 3) << (i * 2);\n\t\t}\n\t\treturn ret;\n\t}\n\n\tfunction phase3EdgeHash(ep) {\n\t\treturn String.fromCharCode.apply(null, ep);\n\t}\n\n\tfunction phase3CcufHash(fc) {\n\t\treturn String.fromCharCode.apply(null, [].concat(fc.cp, fc.co));\n\t}\n\n\tfunction randomMoves(validMoves, len) {\n\t\tvar scramble = [];\n\t\tfor (var i = 0; i < len; i++) {\n\t\t\tscramble.push(validMoves[~~(Math.random() * validMoves.length)]);\n\t\t}\n\t\tvar fc = new FtoCubie();\n\t\tfor (var i = 0; i < scramble.length; i++) {\n\t\t\tfc = FtoCubie.FtoMult(fc, FtoCubie.moveCube[scramble[i]], null);\n\t\t}\n\t\treturn [fc, scramble];\n\t}\n\n\tfunction genCkmv(moves) {\n\t\tvar ckmv = [];\n\t\tvar tmp1 = new FtoCubie();\n\t\tvar tmp2 = new FtoCubie();\n\t\tfor (var m1 = 0; m1 < moves.length; m1++) {\n\t\t\tckmv[m1] = 1 << m1;\n\t\t\tfor (var m2 = 0; m2 < m1; m2++) {\n\t\t\t\tFtoCubie.FtoMult(FtoCubie.moveCube[moves[m1]], FtoCubie.moveCube[moves[m2]], tmp1);\n\t\t\t\tFtoCubie.FtoMult(FtoCubie.moveCube[moves[m2]], FtoCubie.moveCube[moves[m1]], tmp2);\n\t\t\t\tif (tmp1.isEqual(tmp2)) {\n\t\t\t\t\tckmv[m1] |= 1 << m2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn ckmv;\n\t}\n\n\tvar phase1Moves = [0, 2, 22, 6, 16, 10, 12, 14]; // keep the (D, DR) edge\n\tvar p1epMoves = null;\n\tvar p1rlMoves = null;\n\tvar ckmv1 = null;\n\tvar solv1 = null;\n\n\tvar pyraSymCube = [];\n\tfor (var i = 0; i < 12; i++) {\n\t\tpyraSymCube.push(new FtoCubie(\n\t\t\tFtoCubie.symCube[i].cp,\n\t\t\tFtoCubie.symCube[i].co,\n\t\t\tnull,\n\t\t\tFtoCubie.symCube[i].uf,\n\t\t\tnull\n\t\t));\n\t}\n\n\tfunction phase1Init() {\n\t\tvar fc = new FtoCubie();\n\t\tp1epMoves = mathlib.createMoveHash(fc.ep.slice(), phase1Moves, phase1EdgeHash, ftoPermMove.bind(null, 'ep'));\n\t\tp1rlMoves = mathlib.createMoveHash(fc.rl.slice(), phase1Moves, phase1CtrlHash, ftoPermMove.bind(null, 'rl'));\n\t\tvar N_P1EP = p1epMoves[0][0].length;\n\t\tvar N_P1RL = p1rlMoves[0][0].length;\n\t\tDEBUG && console.log('p1ep len=' + N_P1EP + ' p1rl len=' + N_P1RL);\n\n\t\tckmv1 = genCkmv(phase1Moves);\n\t\tvar p1eprlPrun = [];\n\t\tmathlib.createPrun(p1eprlPrun, 0, N_P1EP * N_P1RL, 14, function(idx, move) {\n\t\t\tvar rl = ~~(idx / N_P1EP);\n\t\t\tvar ep = idx % N_P1EP;\n\t\t\treturn p1rlMoves[0][move][rl] * N_P1EP + p1epMoves[0][move][ep];\n\t\t}, phase1Moves.length, 2);\n\n\t\tsolv1 = new mathlib.Searcher(null, function(idx) {\n\t\t\treturn mathlib.getPruning(p1eprlPrun, idx[1] * N_P1EP + idx[0]);\n\t\t}, function(idx, move) {\n\t\t\treturn [\n\t\t\t\tp1epMoves[0][move][idx[0]],\n\t\t\t\tp1rlMoves[0][move][idx[1]]\n\t\t\t];\n\t\t}, 8, 2, ckmv1);\n\t}\n\n\tfunction phase1GenIdxs(fc) {\n\t\tvar idxs = [];\n\t\tvar syms = [];\n\t\tvar fc2 = new FtoCubie();\n\t\tvar fc3 = new FtoCubie();\n\n\t\tfor (var sidx = 0; sidx < 12; sidx += 3) {\n\t\t\tFtoCubie.FtoMult(FtoCubie.symCube[sidx % 12], fc, fc2);\n\t\t\tvar rot;\n\t\t\tfor (rot = 0; rot < 12; rot++) {\n\t\t\t\tFtoCubie.FtoMult(fc2, FtoCubie.symCube[rot], fc3);\n\t\t\t\tif (fc3.ep[4] == 4) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar epidxs = [];\n\t\t\tvar rlidxs = [];\n\t\t\tidxs.push([\n\t\t\t\tp1epMoves[1][phase1EdgeHash(fc3.ep)],\n\t\t\t\tp1rlMoves[1][phase1CtrlHash(fc3.rl)]\n\t\t\t]);\n\t\t\tsyms.push([sidx, rot]);\n\t\t}\n\t\treturn [idxs, syms];\n\t}\n\n\tfunction phase1ProcSol(sol, solsym, fc) {\n\t\tfor (var i = 0; i < sol.length; i++) {\n\t\t\tsol[i] = phase1Moves[sol[i][0]] + sol[i][1];\n\t\t}\n\t\tvar std = move2std(sol);\n\t\tfor (var i = 0; i < std[0].length; i++) {\n\t\t\tvar move = std[0][i];\n\t\t\tsol[i] = FtoCubie.symMulM[FtoCubie.symMulI[0][solsym[1]]][move >> 1] * 2 + (move & 1);\n\t\t\tfc = FtoCubie.FtoMult(fc, FtoCubie.moveCube[sol[i]], null);\n\t\t}\n\t\tsolsym[1] = FtoCubie.symMulI[solsym[1]][std[1]];\n\t\tfc = FtoCubie.FtoMult(\n\t\t\tpyraSymCube[~~(solsym[0] / 12)], FtoCubie.symCube[solsym[0] % 12],\n\t\t\tfc, FtoCubie.symCube[solsym[1]], null\n\t\t);\n\t\treturn [fc, sol, solsym[0], solsym[1]];\n\t}\n\n\tvar N_PHASE1_SOLS = 1000;\n\n\tfunction solvePhase1(fc) {\n\t\tif (!solv1) {\n\t\t\tphase1Init();\n\t\t}\n\n\t\tvar tt = performance.now();\n\t\tvar idxs = phase1GenIdxs(fc);\n\t\tvar syms = idxs[1];\n\t\tidxs = idxs[0];\n\n\t\tvar p1sols = [];\n\n\t\tvar sol1s = solv1.solveMulti(idxs, 0, 12, function(sol, sidx) {\n\t\t\tvar param = phase1ProcSol(sol.slice(), syms[sidx].slice(), fc);\n\t\t\tp1sols.push(param);\n\t\t\treturn p1sols.length >= N_PHASE1_SOLS;\n\t\t});\n\n\t\ttt = performance.now() - tt;\n\t\tfor (var i = 0; i < p1sols.length; i++) {\n\t\t\tp1sols[i].push(tt);\n\t\t}\n\t\treturn p1sols;\n\t}\n\n\tvar phase2Moves = [0, 12, 14, 8, 10];\n\tvar p2epMoves = null;\n\tvar p2rlMoves = null;\n\tvar p2ccMoves = null;\n\tvar p2cc2ufBit = {};\n\tvar ckmv2 = null;\n\tvar solv2 = null;\n\tvar P2EPRL_MAXL = 11;\n\tvar p2symMap = [];\n\tvar ufStd2Raw = [];\n\tvar ufRaw2Std = [];\n\tvar p2ufCoord = new mathlib.Coord('c', 12, [3, 3, 3, 3]);\n\n\tvar cornExFacelets = [\n\t\t[U + 2, R + 2, F + 2, L + 2],\n\t\t[U + 5, B + 7, r + 5, R + 7],\n\t\t[U + 7, L + 5, l + 7, B + 5],\n\t\t[l + 2, D + 2, r + 2, B + 2],\n\t\t[F + 5, D + 7, l + 5, L + 7],\n\t\t[r + 7, D + 5, F + 7, R + 5]\n\t];\n\n\tfunction phase2CpcoHash(fc) {\n\t\tvar ret = String.fromCharCode.apply(null, [].concat(fc.cp, fc.co));\n\t\tif (!(ret in p2cc2ufBit)) {\n\t\t\tvar co = [];\n\t\t\tfor (var i = 0; i < 6; i++) {\n\t\t\t\tco[i] = fc.co[i] * 2;\n\t\t\t}\n\t\t\tvar facelet = fc.toFaceCube();\n\t\t\tmathlib.fillFacelet(cornExFacelets, facelet, fc.cp, co, 9);\n\t\t\tvar fc2 = new FtoCubie().fromFacelet(facelet);\n\t\t\tp2cc2ufBit[ret] = phase2CtHash(fc2.uf);\n\t\t}\n\t\treturn ret;\n\t}\n\n\t// re-color the cube s.t. uf is minimized in lexicographical order\n\tfunction phase2ufStd(uf, symMap) {\n\t\tvar col1 = uf[0], col2 = -1;\n\t\tfor (var i = 1; i < 12; i++) {\n\t\t\tif (uf[i] != col1) {\n\t\t\t\tcol2 = uf[i];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tvar sym = symMap[col1 * 4 + col2];\n\t\tfor (var i = 0; i < 12; i++) {\n\t\t\tuf[i] = ~~(FtoCubie.symCube[sym].uf[uf[i] * 3] / 3);\n\t\t}\n\t\treturn sym;\n\t}\n\n\tfunction getPhase2ufIdx(uf) {\n\t\tvar ufstd = [];\n\t\tfor (var i = 0; i < 12; i++) {\n\t\t\tufstd[i] = ~~(uf[i] / 3);\n\t\t}\n\t\tvar sym = phase2ufStd(ufstd, p2symMap);\n\t\treturn ufRaw2Std[p2ufCoord.get(ufstd)] << 4 | sym;\n\t}\n\n\tfunction phase2Init() {\n\t\tvar fc = new FtoCubie();\n\t\tp2epMoves = mathlib.createMoveHash(fc.ep.slice(), phase2Moves, phase2EdgeHash, ftoPermMove.bind(null, 'ep'));\n\t\tp2rlMoves = mathlib.createMoveHash(fc.rl.slice(), phase2Moves, phase2CtHash, ftoPermMove.bind(null, 'rl'));\n\t\tp2ccMoves = mathlib.createMoveHash(fc, phase2Moves, phase2CpcoHash, ftoFullMove);\n\n\t\tvar arr = [];\n\t\tvar arr2 = [];\n\t\tvar p2ufMoveStd = [[], [], [], [], []];\n\t\tvar ufStd2Bit = [];\n\t\tvar p2ccRecol = [];\n\t\tfor (var s = 0; s < 12; s++) {\n\t\t\tvar uf = FtoCubie.symCube[s].uf;\n\t\t\tvar col1 = ~~(uf.indexOf(0) / 3);\n\t\t\tvar col2 = ~~(uf.indexOf(3) / 3);\n\t\t\tp2symMap[col1 * 4 + col2] = s;\n\t\t\tp2ccRecol[s] = [];\n\t\t}\n\t\tout: for (var i = 0; i < 42000; i++) {\n\t\t\tp2ufCoord.set(arr, i);\n\t\t\tfor (var j = 1; j < 12; j++) {\n\t\t\t\tif (arr[j] > 1) {\n\t\t\t\t\tcontinue out;\n\t\t\t\t} else if (arr[j] == 1) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tufRaw2Std[i] = ufStd2Raw.length;\n\t\t\tufStd2Raw.push(i);\n\t\t}\n\t\tfor (var i = 0; i < ufStd2Raw.length; i++) {\n\t\t\tp2ufCoord.set(arr, ufStd2Raw[i]);\n\t\t\tvar hash = 0;\n\t\t\tfor (var j = 0; j < 12; j++) {\n\t\t\t\thash |= arr[j] << (j * 2);\n\t\t\t}\n\t\t\tufStd2Bit[i] = hash;\n\t\t\tfor (var m = 0; m < phase2Moves.length; m++) {\n\t\t\t\tmathlib.permOriMult(arr, FtoCubie.moveCube[phase2Moves[m]].uf, arr2);\n\t\t\t\tvar sym = phase2ufStd(arr2, p2symMap);\n\t\t\t\tp2ufMoveStd[m][i] = ufRaw2Std[p2ufCoord.get(arr2)] << 4 | sym;\n\t\t\t}\n\t\t}\n\t\tvar cc2Bit = [];\n\t\tfor (var key in p2ccMoves[1]) {\n\t\t\tvar idx = p2ccMoves[1][key];\n\t\t\tcc2Bit[idx] = p2cc2ufBit[key];\n\t\t\tvar cpco = [];\n\t\t\tfor (var s = 0; s < 12; s++) {\n\t\t\t\tvar sc = FtoCubie.symCube[s];\n\t\t\t\tfor (var i = 0; i < 6; i++) {\n\t\t\t\t\tvar scpi = key.charCodeAt(i);\n\t\t\t\t\tcpco[i] = sc.cp[scpi];\n\t\t\t\t\tcpco[i + 6] = sc.co[scpi] ^ key.charCodeAt(i + 6);\n\t\t\t\t}\n\t\t\t\tvar hash = String.fromCharCode.apply(null, cpco);\n\t\t\t\tp2ccRecol[s][idx] = p2ccMoves[1][hash];\n\t\t\t}\n\t\t}\n\t\tvar p2necPrun = [ // idx = a * 7 + b, a: #mismatch 3 U corners, b: other corners\n\t\t\t0, 0, 3, 4, 5, 6, 8,\n\t\t\t0, 2, 3, 4, 5, 6, 8,\n\t\t\t1, 2, 4, 4, 5, 6, 8,\n\t\t\t1, 3, 4, 5, 6, 7, 8,\n\t\t\t3, 3, 4, 5, 6, 7, 9,\n\t\t\t4, 4, 5, 6, 7, 8, 9,\n\t\t\t5, 5, 6, 7, 8, 9, 10\n\t\t];\n\n\t\tvar N_P2EP = p2epMoves[0][0].length;\n\t\tvar N_P2RL = p2rlMoves[0][0].length;\n\t\tvar p2eprlPrun = [];\n\t\tmathlib.createPrun(p2eprlPrun, 0, N_P2EP * N_P2RL, P2EPRL_MAXL - 2, function(idx, move) {\n\t\t\tvar rl = ~~(idx / N_P2EP);\n\t\t\tvar ep = idx % N_P2EP;\n\t\t\treturn p2rlMoves[0][move][rl] * N_P2EP + p2epMoves[0][move][ep];\n\t\t}, phase2Moves.length, 2);\n\t\tckmv2 = genCkmv(phase2Moves);\n\n\t\tsolv2 = new mathlib.Searcher(function(idx) {\n\t\t\treturn ufStd2Bit[idx[3] >> 4] == cc2Bit[p2ccRecol[idx[3] & 0xf][idx[2]]];\n\t\t}, function(idx) {\n\t\t\tvar xors = ufStd2Bit[idx[3] >> 4] ^ cc2Bit[p2ccRecol[idx[3] & 0xf][idx[2]]];\n\t\t\txors = (xors | xors >> 1) & 0x555555;\n\t\t\tvar necIdx = mathlib.bitCount(xors & 0xc0c0ff) * 7 + mathlib.bitCount(xors & 0x3f3f00);\n\t\t\treturn Math.max(\n\t\t\t\tMath.min(P2EPRL_MAXL, mathlib.getPruning(p2eprlPrun, idx[1] * N_P2EP + idx[0])),\n\t\t\t\tp2necPrun[necIdx]\n\t\t\t);\n\t\t}, function(idx, move) {\n\t\t\tvar ufidx1 = p2ufMoveStd[move][idx[3] >> 4];\n\t\t\tvar ufcol = FtoCubie.symMult[ufidx1 & 0xf][idx[3] & 0xf];\n\t\t\treturn [\n\t\t\t\tp2epMoves[0][move][idx[0]],\n\t\t\t\tp2rlMoves[0][move][idx[1]],\n\t\t\t\tp2ccMoves[0][move][idx[2]],\n\t\t\t\tufidx1 & ~0xf | ufcol,\n\t\t\t];\n\t\t}, phase2Moves.length, 2, ckmv2);\n\t}\n\n\tfunction solvePhase2(solvInfos) {\n\t\tif (!solv2) {\n\t\t\tphase2Init();\n\t\t}\n\t\tvar tt = performance.now();\n\t\tvar idxs = [];\n\t\tfor (var i = 0; i < solvInfos.length; i++) {\n\t\t\tidxs.push([\n\t\t\t\tp2epMoves[1][phase2EdgeHash(solvInfos[i][0].ep)],\n\t\t\t\tp2rlMoves[1][phase2CtHash(solvInfos[i][0].rl)],\n\t\t\t\tp2ccMoves[1][phase2CpcoHash(solvInfos[i][0])],\n\t\t\t\tgetPhase2ufIdx(solvInfos[i][0].uf)\n\t\t\t]);\n\t\t}\n\t\tvar sol2s = solv2.solveMulti(idxs, 0, 25);\n\t\tvar sol = sol2s[0];\n\t\tvar src = sol2s[1];\n\t\tvar solvInfo = solvInfos[src];\n\t\tvar fc = solvInfo[0];\n\t\tfor (var i = 0; i < sol.length; i++) {\n\t\t\tvar move = phase2Moves[sol[i][0]] + sol[i][1];\n\t\t\tsol[i] = FtoCubie.symMulM[FtoCubie.symMulI[0][solvInfo[3]]][move >> 1] * 2 + (move & 1);\n\t\t\tfc = FtoCubie.FtoMult(fc, FtoCubie.moveCube[move], null);\n\t\t}\n\t\treturn [fc, sol, solvInfo[2], solvInfo[3], src, performance.now() - tt];\n\t}\n\n\tvar phase3Moves = [8, 10, 12, 14];\n\tvar p3epMoves = null;\n\tvar p3ufMoves = null;\n\tvar p3epPrun = null;\n\tvar p3ufPrun = null;\n\tvar ckmv3 = null;\n\tvar solv3 = null;\n\n\tfunction phase3Init() {\n\t\tvar fc = new FtoCubie();\n\t\tp3epMoves = mathlib.createMoveHash(fc.ep.slice(), phase3Moves, phase3EdgeHash, ftoPermMove.bind(null, 'ep'));\n\t\tp3ufMoves = mathlib.createMoveHash(new FtoCubie(), phase3Moves, phase3CcufHash, ftoFullMove);\n\t\tp3epPrun = [];\n\t\tp3ufPrun = [];\n\t\tmathlib.createPrun(p3epPrun, 0, 81, 14, p3epMoves[0], 4, 2);\n\t\tmathlib.createPrun(p3ufPrun, 0, 11520, 14, p3ufMoves[0], 4, 2);\n\t\tckmv3 = genCkmv(phase3Moves);\n\n\t\tsolv3 = new mathlib.Searcher(null, function(idx) {\n\t\t\treturn Math.max(\n\t\t\t\tmathlib.getPruning(p3epPrun, idx[0]),\n\t\t\t\tmathlib.getPruning(p3ufPrun, idx[1])\n\t\t\t);\n\t\t}, function(idx, move) {\n\t\t\treturn [p3epMoves[0][move][idx[0]], p3ufMoves[0][move][idx[1]]];\n\t\t}, 4, 2, ckmv3);\n\t}\n\n\tfunction solvePhase3(solvInfo) {\n\t\tvar fc = solvInfo[0];\n\t\tif (!p3epPrun) {\n\t\t\tphase3Init();\n\t\t}\n\n\t\tvar tt = performance.now();\n\t\tvar p3epidx = p3epMoves[1][phase3EdgeHash(fc.ep)];\n\t\tvar p3ufidx = p3ufMoves[1][phase3CcufHash(fc)];\n\n\t\tvar sol = solv3.solve([p3epidx, p3ufidx], 0, 25);\n\n\t\tfor (var i = 0; i < sol.length; i++) {\n\t\t\tvar move = phase3Moves[sol[i][0]] + sol[i][1];\n\t\t\tsol[i] = FtoCubie.symMulM[FtoCubie.symMulI[0][solvInfo[3]]][move >> 1] * 2 + (move & 1);\n\n\t\t\tfc = FtoCubie.FtoMult(fc, FtoCubie.moveCube[move], null);\n\t\t}\n\t\treturn [fc, sol, solvInfo[2], solvInfo[3], performance.now() - tt];\n\t}\n\n\t// convert wide moves to face moves\n\tfunction move2std(moves) {\n\t\tvar sym = 0;\n\t\tvar ret = [];\n\t\t// Uw = [U] * D, Fw = [F] * B, Rw = [R] * l, Lw = [L] * r\n\t\tvar w2axis = [4, 5, 3, 2];\n\t\tvar w2rot = [1, 10, 5, 11];\n\t\tfor (var i = 0; i < moves.length; i++) {\n\t\t\tvar rot = 0;\n\t\t\tvar axis = moves[i] >> 1;\n\t\t\tvar pow = moves[i] & 1;\n\t\t\tif (axis >= 8) {\n\t\t\t\trot = w2rot[axis - 8];\n\t\t\t\taxis = w2axis[axis - 8];\n\t\t\t}\n\t\t\tif (!pow) {\n\t\t\t\trot = FtoCubie.symMult[rot][rot];\n\t\t\t}\n\t\t\tret.push(FtoCubie.symMulM[sym][axis] * 2 + pow);\n\t\t\tsym = FtoCubie.symMult[rot][sym];\n\t\t}\n\t\treturn [ret, sym];\n\t}\n\n\tfunction applyMoves(fc, moves) {\n\t\tfor (var i = 0; i < moves.length; i++) {\n\t\t\tfc = FtoCubie.FtoMult(fc, FtoCubie.moveCube[moves[i]], null);\n\t\t}\n\t\treturn fc;\n\t}\n\n\tvar move2str = [\"U\", \"U'\", \"F\", \"F'\", \"r\", \"r'\", \"l\", \"l'\", \"D\", \"D'\", \"B\", \"B'\", \"R\", \"R'\", \"L\", \"L'\"]\n\n\tfunction prettyMoves(moves) {\n\t\tvar buf = [];\n\t\tfor (var i = 0; i < moves.length; i++) {\n\t\t\tbuf[i] = move2str[moves[i]];\n\t\t}\n\t\treturn buf.join(' ').replace(/l/g, 'BL').replace(/r/g, 'BR');\n\t}\n\n\tfunction FtoSolver() {}\n\n\tFtoSolver.prototype.solveFto = function(fc, invSol) {\n\t\tif (!solv1) {\n\t\t\tvar tt = performance.now();\n\t\t\tphase1Init();\n\t\t\tphase2Init();\n\t\t\tphase3Init();\n\t\t\tDEBUG && console.log('[ftosolver] init time:', performance.now() - tt);\n\t\t}\n\t\tvar solvInfos = solvePhase1(fc);\n\n\t\tvar solvInfo2 = solvePhase2(solvInfos);\n\n\t\tvar solvInfo1 = solvInfos[solvInfo2[4]];\n\t\tthis.sol1 = solvInfo1[1].slice();\n\t\tthis.tt1 = solvInfo1[4];\n\t\tvar sym1Idx = solvInfo1[2];\n\n\t\tthis.sol2 = solvInfo2[1].slice();\n\t\tthis.tt2 = solvInfo2[5];\n\t\tsolvInfo2[0] = FtoCubie.FtoMult(pyraSymCube[FtoCubie.symMulI[0][~~(sym1Idx / 12)]], solvInfo2[0], null);\n\n\t\tvar solvInfo3 = solvePhase3(solvInfo2);\n\t\tthis.sol3 = solvInfo3[1].slice();\n\t\tthis.tt3 = solvInfo3[4];\n\n\t\tvar sol = [].concat(this.sol1, this.sol2, this.sol3);\n\t\tif (invSol) {\n\t\t\tfor (var i = 0; i < sol.length; i++) {\n\t\t\t\tsol[i] ^= 1;\n\t\t\t}\n\t\t\tsol.reverse();\n\t\t}\n\t\treturn prettyMoves(sol);\n\t}\n\n\tvar solver = new FtoSolver();\n\n\tfunction solveTest(n_moves) {\n\t\tvar solvInfo = randomMoves([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], n_moves);\n\n\t\tvar scramble = prettyMoves(solvInfo[1].slice());\n\t\tvar solution = solver.solveFto(solvInfo[0]);\n\n\t\tvar fc = solvInfo[0];\n\t\tDEBUG && console.log('scrambled state\\n', fc.toString(1));\n\t\tfc = applyMoves(fc, solver.sol1);\n\t\tDEBUG && console.log('after phase 1 (' + prettyMoves(solver.sol1) + '):\\n', fc.toString(1));\n\t\tfc = applyMoves(fc, solver.sol2);\n\t\tDEBUG && console.log('after phase 2 (' + prettyMoves(solver.sol2) + '):\\n', fc.toString(1));\n\t\tfc = applyMoves(fc, solver.sol3);\n\t\tDEBUG && console.log('after phase 3 (' + prettyMoves(solver.sol3) + '):\\n', fc.toString(1));\n\n\t\tvar facelets = fc.toFaceCube();\n\t\tvar isSolved = true;\n\t\touter_loop: for (var i = 0; i < 8; i++) {\n\t\t\tfor (var j = 1; j < 9; j++) {\n\t\t\t\tif (facelets[i * 9 + j] != facelets[i * 9]) {\n\t\t\t\t\tisSolved = false;\n\t\t\t\t\tbreak outer_loop;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (!isSolved) {\n\t\t\tconsole.log('error, FTO not solved!!!');\n\t\t}\n\n\t\tDEBUG && console.log(scramble, solution);\n\t\treturn [\n\t\t\tsolver.sol1.length + solver.sol2.length + solver.sol3.length,\n\t\t\tsolver.sol1.length,\n\t\t\tsolver.sol2.length,\n\t\t\tsolver.sol3.length,\n\t\t\tsolver.tt1,\n\t\t\tsolver.tt2,\n\t\t\tsolver.tt3\n\t\t];\n\t}\n\n\tfunction testbench(ntest) {\n\t\tntest = ntest || 100;\n\t\tvar cumlen = [];\n\t\tfor (var nsolv = 0; nsolv < ntest; nsolv++) {\n\t\t\tvar lengths = solveTest(200);\n\t\t\tfor (var i = 0; i < lengths.length; i++) {\n\t\t\t\tcumlen[i] = (cumlen[i] || 0) + lengths[i];\n\t\t\t}\n\t\t\tconsole.log('AvgL: ', cumlen[0] / (nsolv + 1));\n\t\t}\n\t\tconsole.log('AvgL1:', cumlen[1] / ntest);\n\t\tconsole.log('AvgL2:', cumlen[2] / ntest);\n\t\tconsole.log('AvgL3:', cumlen[3] / ntest);\n\t\tconsole.log('AvgT1:', cumlen[4] / ntest);\n\t\tconsole.log('AvgT2:', cumlen[5] / ntest);\n\t\tconsole.log('AvgT3:', cumlen[6] / ntest);\n\t}\n\n\tfunction solveFacelet(facelet, invSol) {\n\t\tvar fc = new FtoCubie();\n\t\tif (fc.fromFacelet(facelet) == -1) {\n\t\t\treturn \"FTO Solver ERROR!\";\n\t\t}\n\t\treturn solver.solveFto(fc, invSol);\n\t}\n\n\treturn {\n\t\tsolveFacelet: solveFacelet,\n\t\tFtoCubie: FtoCubie,\n\t\ttestbench: testbench\n\t};\n})();\n\nvar fto_scrambler = (function() {\n\n\tfunction getRandomScramble(solvedEdge, solvedCenter, solvedCorner) {\n\t\tvar fc = new ftosolver.FtoCubie();\n\t\tif (!solvedEdge) {\n\t\t\tfc.ep = mathlib.rndPerm(12, true);\n\t\t}\n\t\tif (!solvedCenter) {\n\t\t\tfc.uf = mathlib.rndPerm(12, true);\n\t\t\tfc.rl = mathlib.rndPerm(12, true);\n\t\t}\n\t\tif (!solvedCorner) {\n\t\t\tfc.cp = mathlib.rndPerm(6, true);\n\t\t\tmathlib.setNOri(fc.co, mathlib.rn(32), 6, -2);\n\t\t}\n\t\treturn new Alg(ftosolver.solveFacelet(fc.toFaceCube(), true));\n\t}\n\n\tfunction getLNTScramble(ufs) {\n\t\tvar solved = false;\n\t\tvar nCorn = ufs.length >> 1;\n\t\tvar fc = new ftosolver.FtoCubie();\n\t\tvar cp, co, uf;\n\t\tdo {\n\t\t\tcp = mathlib.rndPerm(nCorn, true);\n\t\t\tco = mathlib.setNOri([], mathlib.rn(1 << nCorn >> 1), nCorn, -2);\n\t\t\tuf = mathlib.rndPerm(ufs.length, true);\n\t\t\tsolved = true;\n\t\t\tfor (var i = 0; i < ufs.length; i++) {\n\t\t\t\tsolved = solved && (~~(ufs[uf[i]] / 3) == ~~(ufs[i] / 3));\n\t\t\t}\n\t\t\tfor (var i = 0; i < nCorn; i++) {\n\t\t\t\tsolved = solved && cp[i] == i && co[i] == 0;\n\t\t\t}\n\t\t} while (solved);\n\t\tfor (var i = 0; i < nCorn; i++) {\n\t\t\tfc.cp[i] = cp[i];\n\t\t\tfc.co[i] = co[i];\n\t\t}\n\t\tfor (var i = 0; i < ufs.length; i++) {\n\t\t\tfc.uf[ufs[i]] = ufs[uf[i]];\n\t\t}\n\t\treturn ftosolver.solveFacelet(fc.toFaceCube(), true);\n\t}\n\n\treturn {\n\t\tgetRandomScramble: getRandomScramble.bind(null, false, false, false)\n\t};\n})();\n\n// TODO: solve an externally generated random state\nexport function getRandomFTOScramble() {\n\treturn fto_scrambler.getRandomScramble();\n};\n\n// export function setRandomGen(gen) {\n// \tmathlib.setRandomGen(gen);\n// };\n\n// export function fto_testbench() {\n// \tftosolver.testbench();\n// };\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["i", "idx"]
|
|
7
|
+
}
|
|
@@ -9,7 +9,7 @@ import "./chunk-RDSQRW3G.js";
|
|
|
9
9
|
// src/cubing/search/worker-workarounds/search-worker-entry.js
|
|
10
10
|
if (exposeAPI.expose) {
|
|
11
11
|
(async () => {
|
|
12
|
-
await import("./inside-
|
|
12
|
+
await import("./inside-UAYHMFKU.js");
|
|
13
13
|
const messagePort = globalThis.postMessage ? globalThis : await nodeEndpointPort();
|
|
14
14
|
messagePort.postMessage("comlink-exposed");
|
|
15
15
|
})();
|
package/dist/lib/cubing/chunks/{twisty-dynamic-3d-TINH44QH.js → twisty-dynamic-3d-HF7KVBOE.js}
RENAMED
|
@@ -3,10 +3,10 @@ import {
|
|
|
3
3
|
THREEJS,
|
|
4
4
|
haveStartedSharingRenderers,
|
|
5
5
|
hintFaceletStyles
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-P5TX6QDI.js";
|
|
7
7
|
import {
|
|
8
8
|
cube3x3x3
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-YOMULQ2R.js";
|
|
10
10
|
import {
|
|
11
11
|
getFaceletStickeringMask
|
|
12
12
|
} from "./chunk-VVXSTWUD.js";
|
|
@@ -1849,4 +1849,4 @@ export {
|
|
|
1849
1849
|
cube3DShim,
|
|
1850
1850
|
pg3dShim
|
|
1851
1851
|
};
|
|
1852
|
-
//# sourceMappingURL=twisty-dynamic-3d-
|
|
1852
|
+
//# sourceMappingURL=twisty-dynamic-3d-HF7KVBOE.js.map
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import "../chunks/chunk-NAPITA3L.js";
|
|
2
2
|
import {
|
|
3
3
|
randomScrambleForEvent
|
|
4
|
-
} from "../chunks/chunk-
|
|
5
|
-
import "../chunks/chunk-
|
|
4
|
+
} from "../chunks/chunk-C4UUCOBH.js";
|
|
5
|
+
import "../chunks/chunk-I4MRKD4Z.js";
|
|
6
6
|
import "../chunks/chunk-7GUL3OBQ.js";
|
|
7
7
|
import "../chunks/chunk-RDSQRW3G.js";
|
|
8
|
-
import "../chunks/chunk-
|
|
8
|
+
import "../chunks/chunk-YOMULQ2R.js";
|
|
9
9
|
import "../chunks/chunk-VVXSTWUD.js";
|
|
10
10
|
import "../chunks/chunk-H57WKFBE.js";
|
|
11
11
|
import "../chunks/chunk-EF6G34T7.js";
|
|
@@ -6,13 +6,13 @@ import {
|
|
|
6
6
|
solvePyraminx,
|
|
7
7
|
solveSkewb,
|
|
8
8
|
solveTwsearch
|
|
9
|
-
} from "../chunks/chunk-
|
|
9
|
+
} from "../chunks/chunk-C4UUCOBH.js";
|
|
10
10
|
import {
|
|
11
11
|
random333Pattern
|
|
12
|
-
} from "../chunks/chunk-
|
|
12
|
+
} from "../chunks/chunk-I4MRKD4Z.js";
|
|
13
13
|
import "../chunks/chunk-7GUL3OBQ.js";
|
|
14
14
|
import "../chunks/chunk-RDSQRW3G.js";
|
|
15
|
-
import "../chunks/chunk-
|
|
15
|
+
import "../chunks/chunk-YOMULQ2R.js";
|
|
16
16
|
import "../chunks/chunk-VVXSTWUD.js";
|
|
17
17
|
import "../chunks/chunk-H57WKFBE.js";
|
|
18
18
|
import "../chunks/chunk-EF6G34T7.js";
|
|
@@ -18,7 +18,7 @@ import {
|
|
|
18
18
|
rawRenderPooled,
|
|
19
19
|
setCameraFromOrbitCoordinates,
|
|
20
20
|
setTwistyDebug
|
|
21
|
-
} from "../chunks/chunk-
|
|
21
|
+
} from "../chunks/chunk-P5TX6QDI.js";
|
|
22
22
|
import {
|
|
23
23
|
countAnimatedLeaves,
|
|
24
24
|
countLeavesInExpansionForSimultaneousMoveIndexer,
|
|
@@ -27,7 +27,7 @@ import {
|
|
|
27
27
|
import {
|
|
28
28
|
cube3x3x3,
|
|
29
29
|
puzzles
|
|
30
|
-
} from "../chunks/chunk-
|
|
30
|
+
} from "../chunks/chunk-YOMULQ2R.js";
|
|
31
31
|
import {
|
|
32
32
|
customPGPuzzleLoader,
|
|
33
33
|
getPartialAppendOptionsForPuzzleSpecificSimplifyOptions,
|
package/package.json
CHANGED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/cubing/search/inside/solve/puzzles/2x2x2.ts", "../../../../src/cubing/search/inside/solve/tremble.ts", "../../../../src/cubing/search/inside/solve/twsearch.ts", "../../../../src/cubing/search/inside/solve/puzzles/dynamic/sgs-side-events/index.ts", "../../../../src/cubing/search/inside/solve/puzzles/dynamic/4x4x4/index.ts", "../../../../src/cubing/search/inside/solve/puzzles/4x4x4.ts", "../../../../src/cubing/search/inside/solve/puzzles/dynamic/fto/index.ts", "../../../../src/cubing/search/inside/solve/puzzles/fto.ts", "../../../../src/cubing/search/inside/solve/puzzles/dynamic/kilominx/index.ts", "../../../../src/cubing/search/inside/solve/puzzles/kilominx.ts", "../../../../src/cubing/search/inside/solve/puzzles/dynamic/master_tetraminx/index.ts", "../../../../src/cubing/search/inside/solve/puzzles/master_tetraminx.ts", "../../../../src/cubing/search/inside/solve/puzzles/megaminx.ts", "../../../../src/cubing/search/inside/solve/puzzles/pyraminx.ts", "../../../../src/cubing/search/inside/solve/puzzles/dynamic/sgs-unofficial/index.ts", "../../../../src/cubing/search/inside/solve/puzzles/redi_cube.ts", "../../../../src/cubing/search/inside/solve/puzzles/skewb.ts", "../../../../src/cubing/search/inside/solve/puzzles/dynamic/sq1/index.ts", "../../../../src/cubing/search/inside/solve/puzzles/sq1.ts", "../../../../src/cubing/search/inside/api.ts", "../../../../src/cubing/search/inside/index.ts"],
|
|
4
|
-
"sourcesContent": ["import { randomPermuteInPlace, randomUIntBelow } from \"random-uint-below\";\nimport type { Alg } from \"../../../../alg\";\nimport type { KPuzzle } from \"../../../../kpuzzle\";\nimport { KPattern } from \"../../../../kpuzzle\";\nimport { cube2x2x2, puzzles } from \"../../../../puzzles\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport type { SGSCachedData } from \"../parseSGS\";\nimport { TrembleSolver } from \"../tremble\";\nimport { wasmTwsearch } from \"../twsearch\";\nimport { searchDynamicSideEvents } from \"./dynamic/sgs-side-events\";\n\nlet cachedTrembleSolver: Promise<TrembleSolver> | null = null;\nasync function getCachedTrembleSolver(): Promise<TrembleSolver> {\n return (\n cachedTrembleSolver ||\n (cachedTrembleSolver = (async (): Promise<TrembleSolver> => {\n const sgsCachedData: SGSCachedData = await (\n await searchDynamicSideEvents\n ).cachedData222();\n return new TrembleSolver(\n await puzzles[\"2x2x2\"].kpuzzle(),\n sgsCachedData,\n \"URFLBD\".split(\"\"),\n );\n })())\n );\n}\n\nexport async function preInitialize222(): Promise<void> {\n await getCachedTrembleSolver();\n}\n\n// TODO: fix def consistency.\nexport async function solve222(pattern: KPattern): Promise<Alg> {\n mustBeInsideWorker();\n return wasmTwsearch((await cube2x2x2.kpuzzle()).definition, pattern, {\n generatorMoves: \"UFLR\".split(\"\"),\n });\n}\n\n// TODO: factor out and test.\nfunction mutatingRandomizeOrbit(\n kpuzzle: KPuzzle,\n orbitName: string,\n pattern: KPattern,\n options?: { orientationSum?: number },\n): void {\n randomPermuteInPlace(pattern.patternData[orbitName].pieces);\n\n const orbitDefinition = kpuzzle.lookupOrbitDefinition(orbitName);\n const ori = pattern.patternData[orbitName].orientation;\n\n let sum = 0;\n for (let i = 0; i < orbitDefinition.numPieces; i++) {\n const o = randomUIntBelow(orbitDefinition.numOrientations);\n ori[i] = o;\n sum += o;\n }\n\n // console.log(\"aaaa\", options && \"orientationSum\" in options);\n if (options && \"orientationSum\" in options) {\n // console.log(\"sfdsf\", options!.orientationSum),\n ori[0] =\n (((ori[0] + options.orientationSum! - sum) %\n orbitDefinition.numOrientations) +\n orbitDefinition.numOrientations) %\n orbitDefinition.numOrientations;\n }\n}\n\n// TODO: Use SGS?\nexport async function random222Pattern(): Promise<KPattern> {\n const kpuzzle = await puzzles[\"2x2x2\"].kpuzzle();\n const patternCopy: KPattern = new KPattern(\n kpuzzle,\n structuredClone(kpuzzle.defaultPattern().patternData),\n ); // TODO\n mutatingRandomizeOrbit(kpuzzle, \"CORNERS\", patternCopy, {\n orientationSum: 0,\n });\n return patternCopy;\n}\n", "import { randomChoice } from \"random-uint-below\";\nimport { Alg, AlgBuilder, Move, type QuantumMove } from \"../../../alg\";\nimport type { KPuzzle, KTransformation } from \"../../../kpuzzle\";\nimport type { KPattern } from \"../../../kpuzzle/KPattern\";\nimport { experimentalCountMoves } from \"../../../notation\";\nimport type { SGSCachedData } from \"./parseSGS\";\n\nconst DEFAULT_STAGE1_DEPTH_LIMIT = 2; // Moderately performant default.\n\nconst DOUBLECHECK_PLACED_PIECES = true;\nconst DEBUG = false;\n\n// TODO: Take moves instead of move names?\nfunction calculateMoves(\n kpuzzle: KPuzzle,\n moveNames: string[],\n): {\n move: Move;\n transformation: KTransformation;\n}[] {\n const searchMoves: {\n move: Move;\n transformation: KTransformation;\n }[] = [];\n // const identity = identityTransformation(def); // TODO\n // TODO: Make it easy to filter moves.\n for (const moveName of moveNames) {\n const rootMove = new Move(moveName);\n if (rootMove.amount !== 1) {\n throw new Error(\n \"SGS cannot handle def moves with an amount other than 1 yet.\",\n );\n }\n let transformation = kpuzzle.identityTransformation();\n for (let i = 1; ; i++) {\n transformation = transformation.applyMove(rootMove);\n if (transformation.isIdentityTransformation()) {\n break;\n }\n searchMoves.push({\n move: rootMove.modified({ amount: i }),\n transformation,\n });\n }\n }\n return searchMoves;\n}\n\n// function badRandomMoves(moves: string[], ksp: KSolvePuzzle): KSolvePuzzleState {\n// // var sum = 0;\n// var scramble = \"\";\n// for (var i = 0; i < 1000; i++) {\n// scramble = scramble + \" \" + moves[Math.floor(moves.length * Math.random())];\n// }\n// // var sol = \"\";\n// const indexer = new TreeAlgIndexer(ksp, Alg.fromString(scramble));\n// return indexer.transformAtIndex(indexer.numMoves()) as any; // TODO\n// }\n\nexport class TrembleSolver {\n private searchMoves: {\n move: Move;\n transformation: KTransformation;\n }[];\n\n constructor(\n private kpuzzle: KPuzzle,\n private sgs: SGSCachedData,\n trembleMoveNames?: string[],\n ) {\n this.searchMoves = calculateMoves(\n this.kpuzzle,\n trembleMoveNames ?? Object.keys(this.kpuzzle.definition.moves),\n );\n }\n\n // public badRandomMoves(): KSolvePuzzleState {\n // return badRandomMoves(this.moves, this.ksp);\n // }\n\n public async solve(\n pattern: KPattern,\n stage1DepthLimit: number = DEFAULT_STAGE1_DEPTH_LIMIT,\n quantumMoveOrder?: (quantumMove: QuantumMove) => number,\n ): Promise<Alg> {\n const transformation = pattern.experimentalToTransformation();\n if (!transformation) {\n throw new Error(\n \"distinguishable pieces are not supported in tremble solver yt\",\n );\n }\n let bestAlg: Alg | null = null;\n let bestLen = 1000000;\n const recur = (\n recursiveTransformation: KTransformation, // TODO: Support KStatq1\n togo: number,\n sofar: Alg,\n ) => {\n // console.log(\"recur\");\n if (togo === 0) {\n const sgsAlg = this.sgsPhaseSolve(recursiveTransformation, bestLen);\n if (!sgsAlg) {\n return;\n }\n // console.log(\"sgs done!\", sofar.toString(), \"|\", sgsAlg.toString());\n const newAlg = sofar.concat(sgsAlg).experimentalSimplify({\n cancel: {\n directional: \"any-direction\",\n puzzleSpecificModWrap: \"canonical-centered\",\n },\n puzzleSpecificSimplifyOptions: { quantumMoveOrder },\n });\n\n const len = experimentalCountMoves(newAlg);\n if (bestAlg === null || len < bestLen) {\n if (DEBUG) {\n console.log(`New best (${len} moves): ${newAlg.toString()}`);\n console.log(`Tremble moves are: ${sofar.toString()}`);\n }\n bestAlg = newAlg;\n bestLen = len;\n }\n return;\n }\n for (const searchMove of this.searchMoves) {\n recur(\n recursiveTransformation.applyTransformation(\n searchMove.transformation,\n ),\n togo - 1,\n sofar.concat([searchMove.move]),\n );\n }\n };\n for (let d = 0; d <= stage1DepthLimit; d++) {\n recur(transformation, d, new Alg());\n }\n if (bestAlg === null) {\n throw new Error(\"SGS search failed.\");\n }\n return bestAlg;\n }\n\n private sgsPhaseSolve(\n initialTransformation: KTransformation, // TODO: Handle KPattern\n bestLenSofar: number,\n ): Alg | null {\n // const pieceNames = \"UFR URB UBL ULF DRF DFL DLB DBR\".split(\" \");\n\n // function loggo(s: string) {\n // // console.warn(s);\n // // document.body.appendChild(document.createElement(\"div\")).textContent = s;\n // }\n\n // console.log(\"sgsPhaseSolve\");\n const algBuilder = new AlgBuilder();\n let transformation = initialTransformation;\n for (const step of this.sgs.ordering) {\n const cubieSeq = step.pieceOrdering;\n let key = \"\";\n const inverseTransformation = transformation.invert();\n for (let i = 0; i < cubieSeq.length; i++) {\n const loc = cubieSeq[i];\n const orbitName = loc.orbitName;\n const idx = loc.permutationIdx;\n key += ` ${inverseTransformation.transformationData[orbitName].permutation[idx]} ${inverseTransformation.transformationData[orbitName].orientationDelta[idx]}`;\n }\n // console.log(key, step.lookup);\n const info = step.lookup[key];\n if (!info) {\n throw new Error(\"Missing algorithm in sgs or esgs?\");\n }\n algBuilder.experimentalPushAlg(info.alg);\n if (algBuilder.experimentalNumAlgNodes() >= bestLenSofar) {\n return null;\n }\n transformation = transformation.applyTransformation(info.transformation);\n if (DOUBLECHECK_PLACED_PIECES) {\n for (let i = 0; i < cubieSeq.length; i++) {\n const location = cubieSeq[i];\n const orbitName = location.orbitName;\n const idx = location.permutationIdx;\n if (\n transformation.transformationData[orbitName].permutation[idx] !==\n idx ||\n transformation.transformationData[orbitName].orientationDelta[\n idx\n ] !== 0\n ) {\n throw new Error(\"bad SGS :-(\");\n }\n }\n }\n }\n return algBuilder.toAlg();\n }\n}\n\nexport function randomPatternFromSGS(\n kpuzzle: KPuzzle,\n sgs: SGSCachedData,\n): KPattern {\n let transformation = kpuzzle.identityTransformation();\n for (const step of sgs.ordering) {\n const sgsAction = randomChoice(Object.values(step.lookup));\n transformation = transformation.applyTransformation(\n sgsAction.transformation,\n );\n }\n return transformation.toKPattern();\n}\n", "import type { Alg } from \"../../../alg\";\nimport type {\n KPattern,\n KPuzzleDefinition,\n KTransformationData,\n} from \"../../../kpuzzle\";\nimport { from } from \"../../../vendor/mit/p-lazy/p-lazy\";\n\nexport const twsearchPromise: Promise<\n typeof import(\"../../../vendor/mpl/twsearch\")\n> = from(async () => import(\"../../../vendor/mpl/twsearch\"));\n\nexport interface TwsearchOptions {\n // TODO: start prune depth?\n generatorMoves?: string[];\n targetPattern?: KTransformationData;\n minDepth?: number;\n maxDepth?: number;\n}\n\nexport async function wasmTwsearch(\n def: KPuzzleDefinition,\n pattern: KPattern,\n options?: TwsearchOptions,\n): Promise<Alg> {\n const { wasmTwsearch } = await twsearchPromise;\n return wasmTwsearch(def, pattern, options);\n}\n\nexport async function wasmRandomScrambleForEvent(\n eventID: string,\n): Promise<Alg> {\n const { wasmRandomScrambleForEvent } = await twsearchPromise;\n return wasmRandomScrambleForEvent(eventID);\n}\n", "import { from } from \"../../../../../../vendor/mit/p-lazy/p-lazy\";\n\nexport const searchDynamicSideEvents = from<\n typeof import(\"./search-dynamic-sgs-side-events\")\n>(() => import(\"./search-dynamic-sgs-side-events\"));\n", "import { from } from \"../../../../../../vendor/mit/p-lazy/p-lazy\";\n\nexport const dynamic4x4x4Solver = from<\n typeof import(\"./search-dynamic-solve-4x4x4\")\n>(() => import(\"./search-dynamic-solve-4x4x4\"));\n", "import type { Alg } from \"../../../../alg\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport { addOrientationSuffix } from \"../addOrientationSuffix\";\nimport { dynamic4x4x4Solver } from \"./dynamic/4x4x4\";\n\nconst randomSuffixes = [\n [null, \"x\", \"x2\", \"x'\", \"z\", \"z'\"],\n [null, \"y\", \"y2\", \"y'\"],\n];\n\nexport async function initialize444(): Promise<void> {\n return (await dynamic4x4x4Solver).initialize();\n}\n\nexport async function random444Scramble(): Promise<Alg> {\n mustBeInsideWorker();\n return (await dynamic4x4x4Solver).random444Scramble();\n}\n\nexport async function random444OrientedScramble(): Promise<Alg> {\n return addOrientationSuffix(await random444Scramble(), randomSuffixes);\n}\n", "import { from } from \"../../../../../../vendor/mit/p-lazy/p-lazy\";\n\nexport const dynamicFTOSolver = from<\n typeof import(\"./search-dynamic-solve-fto\")\n>(() => import(\"./search-dynamic-solve-fto\"));\n", "import { Alg } from \"../../../../alg\";\nimport type { KPattern } from \"../../../../kpuzzle/KPattern\";\nimport { puzzles } from \"../../../../puzzles\";\nimport { from } from \"../../../../vendor/mit/p-lazy/p-lazy\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport type { SGSCachedData } from \"../parseSGS\";\nimport { TrembleSolver } from \"../tremble\";\nimport { dynamicFTOSolver } from \"./dynamic/fto\";\n\nconst dynamic = from<\n typeof import(\"./dynamic/sgs-unofficial/search-dynamic-sgs-unofficial\")\n>(() => import(\"./dynamic/sgs-unofficial/search-dynamic-sgs-unofficial\"));\n\nconst TREMBLE_DEPTH = 3;\n\nlet cachedTrembleSolver: Promise<TrembleSolver> | null = null;\nasync function getCachedTrembleSolver(): Promise<TrembleSolver> {\n return (\n cachedTrembleSolver ||\n (cachedTrembleSolver = (async (): Promise<TrembleSolver> => {\n const json: SGSCachedData = await (await dynamic).sgsDataFTO();\n return new TrembleSolver(await puzzles[\"fto\"].kpuzzle(), json, [\n \"U\",\n \"R\",\n \"F\",\n \"L\",\n \"D\",\n \"B\",\n \"BR\",\n \"BL\",\n ]);\n })())\n );\n}\n\nexport async function preInitializeFTO(): Promise<void> {\n await getCachedTrembleSolver();\n}\n\n// TODO: centers\nexport async function solveFTO(pattern: KPattern): Promise<Alg> {\n mustBeInsideWorker();\n const trembleSolver = await getCachedTrembleSolver();\n const alg = await trembleSolver.solve(\n pattern,\n TREMBLE_DEPTH,\n () => 3, // TODO: Attach quantum move order lookup to puzzle.\n );\n return alg;\n}\n\nexport async function randomFTOScramble(): Promise<Alg> {\n mustBeInsideWorker();\n return new Alg(await (await dynamicFTOSolver).randomFTOScrambleString());\n}\n", "import { from } from \"../../../../../../vendor/mit/p-lazy/p-lazy\";\n\nexport const dynamicKilominxSolver = from<\n typeof import(\"./search-dynamic-solve-kilominx\")\n>(() => import(\"./search-dynamic-solve-kilominx\"));\n", "import type { Alg } from \"../../../../alg\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport { dynamicKilominxSolver } from \"./dynamic/kilominx\";\n\nexport async function randomKilominxScramble(): Promise<Alg> {\n mustBeInsideWorker();\n return (await dynamicKilominxSolver).getRandomKilominxScramble();\n}\n", "import { from } from \"../../../../../../vendor/mit/p-lazy/p-lazy\";\n\nexport const dynamicMasterTetraminxSolver = from<\n typeof import(\"./search-dynamic-solve-master_tetraminx\")\n>(() => import(\"./search-dynamic-solve-master_tetraminx\"));\n", "import { Alg } from \"../../../../alg\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport { dynamicMasterTetraminxSolver } from \"./dynamic/master_tetraminx\";\n\nexport async function randomMasterTetraminxScramble(): Promise<Alg> {\n mustBeInsideWorker();\n return new Alg(\n await (\n await dynamicMasterTetraminxSolver\n ).randomMasterTetraminxScrambleString(),\n );\n}\n", "import type { Alg } from \"../../../../alg\";\nimport type { KPatternData } from \"../../../../kpuzzle\";\nimport { KPattern } from \"../../../../kpuzzle\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport type { SGSCachedData } from \"../parseSGS\";\nimport { TrembleSolver } from \"../tremble\";\nimport { searchDynamicSideEvents } from \"./dynamic/sgs-side-events\";\n\nconst TREMBLE_DEPTH = 2;\n\nlet cachedTrembleSolver: Promise<TrembleSolver> | null = null;\nasync function getCachedTrembleSolver(): Promise<TrembleSolver> {\n return (\n cachedTrembleSolver ||\n (cachedTrembleSolver = (async (): Promise<TrembleSolver> => {\n const json: SGSCachedData = await (\n await searchDynamicSideEvents\n ).cachedSGSDataMegaminx();\n return new TrembleSolver(\n await (await searchDynamicSideEvents).cachedMegaminxKPuzzleWithoutMO(),\n json,\n [\"U\", \"R\", \"F\", \"L\", \"BR\", \"BL\", \"FR\", \"FL\", \"DR\", \"DL\", \"B\", \"D\"],\n );\n })())\n );\n}\n\nexport async function preInitializeMegaminx(): Promise<void> {\n await getCachedTrembleSolver();\n}\n\n// TODO: centers\nexport async function solveMegaminx(pattern: KPattern): Promise<Alg> {\n mustBeInsideWorker();\n const trembleSolver = await getCachedTrembleSolver();\n const patternDataWithoutMO: KPatternData = structuredClone(\n pattern.patternData,\n );\n patternDataWithoutMO.CENTERS.orientation = new Array(12).fill(0);\n const patternWithoutMO = new KPattern(\n await (await searchDynamicSideEvents).cachedMegaminxKPuzzleWithoutMO(),\n patternDataWithoutMO,\n );\n const alg = await trembleSolver.solve(\n patternWithoutMO,\n TREMBLE_DEPTH,\n () => 5, // TODO: Attach quantum move order lookup to puzzle.\n );\n return alg;\n}\n", "import type { Alg } from \"../../../../alg\";\nimport type { KPattern } from \"../../../../kpuzzle/KPattern\";\nimport { puzzles } from \"../../../../puzzles\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport type { SGSCachedData } from \"../parseSGS\";\nimport { randomPatternFromSGS, TrembleSolver } from \"../tremble\";\nimport { searchDynamicSideEvents } from \"./dynamic/sgs-side-events\";\n\nconst TREMBLE_DEPTH = 3;\n\nlet cachedTrembleSolver: Promise<TrembleSolver> | null = null;\nasync function getCachedTrembleSolver(): Promise<TrembleSolver> {\n return (\n cachedTrembleSolver ||\n (cachedTrembleSolver = (async (): Promise<TrembleSolver> => {\n const json: SGSCachedData = await (\n await searchDynamicSideEvents\n ).sgsDataPyraminx();\n return new TrembleSolver(\n await puzzles.pyraminx.kpuzzle(),\n json,\n \"RLUB\".split(\"\"),\n );\n })())\n );\n}\n\nexport async function preInitializePyraminx(): Promise<void> {\n await getCachedTrembleSolver();\n}\n\nexport async function solvePyraminx(pattern: KPattern): Promise<Alg> {\n mustBeInsideWorker();\n const trembleSolver = await getCachedTrembleSolver();\n const alg = await trembleSolver.solve(pattern, TREMBLE_DEPTH, () => 3); // TODO: Attach quantum move order lookup to puzzle.\n return alg;\n}\n\nexport async function randomPyraminxPatternFixedOrientation(): Promise<KPattern> {\n mustBeInsideWorker();\n // Note: this sets all center orientations to 0.\n return randomPatternFromSGS(\n await puzzles.pyraminx.kpuzzle(),\n await (await searchDynamicSideEvents).sgsDataPyraminxFixedOrientation(),\n );\n}\n", "import { from } from \"../../../../../../vendor/mit/p-lazy/p-lazy\";\n\nexport const searchDynamicUnofficial = from<\n typeof import(\"./search-dynamic-sgs-unofficial\")\n>(() => import(\"./search-dynamic-sgs-unofficial\"));\n", "import type { Alg } from \"../../../../alg\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport { searchDynamicUnofficial } from \"./dynamic/sgs-unofficial\";\n\nexport async function randomRediCubeScramble(): Promise<Alg> {\n mustBeInsideWorker();\n return (await searchDynamicUnofficial).getRandomRediCubeScramble();\n}\n", "import type { Alg, QuantumMove } from \"../../../../alg\";\nimport { KPattern } from \"../../../../kpuzzle\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport type { SGSCachedData } from \"../parseSGS\";\nimport { randomPatternFromSGS, TrembleSolver } from \"../tremble\";\nimport { searchDynamicSideEvents } from \"./dynamic/sgs-side-events\";\n\nconst TREMBLE_DEPTH = 3;\n\nlet cachedTrembleSolver: Promise<TrembleSolver> | null = null;\nasync function getCachedTrembleSolver(): Promise<TrembleSolver> {\n return (\n cachedTrembleSolver ||\n (cachedTrembleSolver = (async (): Promise<TrembleSolver> => {\n const json: SGSCachedData = await (\n await searchDynamicSideEvents\n ).sgsDataSkewb();\n return new TrembleSolver(\n await (await searchDynamicSideEvents).skewbKPuzzleWithoutMOCached(),\n json,\n \"RLUB\".split(\"\"),\n );\n })())\n );\n}\n\nexport async function preInitializeSkewb(): Promise<void> {\n await getCachedTrembleSolver();\n}\n\nasync function resetCenterOrientation(pattern: KPattern): Promise<KPattern> {\n return new KPattern(\n await (await searchDynamicSideEvents).skewbKPuzzleWithoutMOCached(),\n {\n CORNERS: pattern.patternData.CORNERS,\n CENTERS: {\n pieces: pattern.patternData.CENTERS.pieces,\n orientation: new Array(6).fill(0),\n },\n },\n );\n}\n\n// TODO: fix def consistency.\nexport async function solveSkewb(pattern: KPattern): Promise<Alg> {\n mustBeInsideWorker();\n const trembleSolver = await getCachedTrembleSolver();\n const alg = await trembleSolver.solve(\n await resetCenterOrientation(pattern),\n TREMBLE_DEPTH,\n (quantumMove: QuantumMove) => (quantumMove.family === \"y\" ? 4 : 3), // TODO: Attach quantum move order lookup to puzzle.\n );\n return alg;\n}\n\nexport async function randomSkewbFixedCornerPattern(): Promise<KPattern> {\n // Note: this sets all center orientations to 0.\n return randomPatternFromSGS(\n await (await searchDynamicSideEvents).skewbKPuzzleWithoutMOCached(),\n await (await searchDynamicSideEvents).sgsDataSkewbFixedCorner(),\n );\n}\n\nexport async function randomSkewbFixedCornerScramble(): Promise<Alg> {\n return solveSkewb(await randomSkewbFixedCornerPattern());\n}\n", "import { from } from \"../../../../../../vendor/mit/p-lazy/p-lazy\";\n\nexport const dynamicSq1Solver = from<\n typeof import(\"./search-dynamic-solve-sq1\")\n>(() => import(\"./search-dynamic-solve-sq1\"));\n", "import { Alg } from \"../../../../alg\";\nimport { dynamicSq1Solver } from \"./dynamic/sq1\";\n\nexport async function getRandomSquare1Scramble(): Promise<Alg> {\n return Alg.fromString(\n await (await dynamicSq1Solver).getRandomSquare1ScrambleString(),\n );\n}\n", "import type { Alg } from \"../../alg\";\nimport {\n KPattern,\n KPuzzle,\n type KPatternData,\n type KPuzzleDefinition,\n} from \"../../kpuzzle\";\nimport { puzzles } from \"../../puzzles\";\nimport { setIsInsideWorker } from \"./inside-worker\";\nimport { preInitialize222, solve222 } from \"./solve/puzzles/2x2x2\";\nimport {\n initialize333,\n random333OrientedScramble,\n random333Scramble,\n solve333,\n} from \"./solve/puzzles/3x3x3\";\nimport {\n initialize444,\n random444OrientedScramble,\n random444Scramble,\n} from \"./solve/puzzles/4x4x4\";\nimport { randomFTOScramble } from \"./solve/puzzles/fto\";\nimport { randomKilominxScramble } from \"./solve/puzzles/kilominx\";\nimport { randomMasterTetraminxScramble } from \"./solve/puzzles/master_tetraminx\";\nimport { solveMegaminx } from \"./solve/puzzles/megaminx\";\nimport { solvePyraminx } from \"./solve/puzzles/pyraminx\";\nimport { randomRediCubeScramble } from \"./solve/puzzles/redi_cube\";\nimport {\n randomSkewbFixedCornerScramble,\n solveSkewb,\n} from \"./solve/puzzles/skewb\";\nimport { getRandomSquare1Scramble } from \"./solve/puzzles/sq1\";\nimport {\n wasmRandomScrambleForEvent,\n wasmTwsearch,\n type TwsearchOptions,\n} from \"./solve/twsearch\";\n\nconst IDLE_PREFETCH_TIMEOUT_MS = 1000;\n\nsetIsInsideWorker(true);\n\nlet DEBUG_MEASURE_PERF = true;\nexport function setDebugMeasurePerf(newDebugMeasurePerf: boolean): void {\n DEBUG_MEASURE_PERF = newDebugMeasurePerf;\n}\n\nfunction now() {\n return (typeof performance === \"undefined\" ? Date : performance).now();\n}\n\nasync function measurePerf<T>(\n name: string,\n f: () => T | Promise<T>,\n options?: { isPrefetch?: boolean },\n): Promise<T> {\n if (!DEBUG_MEASURE_PERF) {\n return f();\n }\n\n const start = now();\n const result = f();\n if ((result as any)?.then) {\n await result;\n }\n const end = now();\n console.warn(\n `${name}${options?.isPrefetch ? \" (prefetched)\" : \"\"}: ${Math.round(\n end - start,\n )}ms`,\n );\n return result;\n}\n\nconst prefetchPromises: Map<string, Promise<Alg>> = new Map();\n// This would just be a number, except `node` is extremely silly and returns an object instead.\n// https://nodejs.org/api/timers.html#settimeoutcallback-delay-args\nlet queuedPrefetchTimeoutID: ReturnType<typeof setTimeout> | null = null;\n\nasync function randomScrambleForEvent(\n eventID: string,\n options?: { isPrefetch?: boolean },\n): Promise<Alg> {\n function wasm(): Promise<Alg> {\n return measurePerf(\n `wasmRandomScrambleForEvent(${JSON.stringify(eventID)})`,\n () => wasmRandomScrambleForEvent(eventID),\n {\n isPrefetch: options?.isPrefetch,\n },\n );\n }\n\n switch (eventID) {\n // case \"333\":\n case \"222\":\n return (await wasm()).experimentalSimplify({\n puzzleSpecificSimplifyOptions: {\n quantumMoveOrder: () => 4,\n },\n });\n // case \"444\":\n case \"555\":\n case \"666\":\n case \"777\":\n // case \"333bf\":\n case \"333fm\":\n // case \"333oh\":\n // case \"clock\":\n case \"minx\":\n case \"pyram\":\n // case \"skewb\":\n // case \"sq1\":\n // case \"444bf\":\n case \"555bf\":\n // case \"333mbf\":\n // case \"fto\":\n // case \"master_tetraminx\":\n // case \"kilominx\":\n // case \"redi_cube\":m\n return wasm();\n case \"333\":\n case \"333oh\":\n case \"333ft\":\n return measurePerf(\"random333Scramble\", random333Scramble, {\n isPrefetch: options?.isPrefetch,\n });\n case \"333bf\":\n case \"333mbf\":\n return measurePerf(\n \"random333OrientedScramble\",\n random333OrientedScramble,\n );\n case \"444\":\n return measurePerf(\"random444Scramble\", random444Scramble, {\n isPrefetch: options?.isPrefetch,\n });\n case \"444bf\":\n return measurePerf(\n \"random444OrientedScramble\",\n random444OrientedScramble,\n );\n case \"skewb\":\n return measurePerf(\n \"randomSkewbFixedCornerScramble\",\n randomSkewbFixedCornerScramble,\n );\n case \"sq1\":\n return measurePerf(\"getRandomSquare1Scramble\", getRandomSquare1Scramble, {\n isPrefetch: options?.isPrefetch,\n });\n case \"fto\":\n return measurePerf(\"randomFTOScramble\", randomFTOScramble, {\n isPrefetch: options?.isPrefetch,\n });\n case \"master_tetraminx\":\n return measurePerf(\n \"randomMasterTetraminxScramble\",\n randomMasterTetraminxScramble,\n );\n case \"kilominx\":\n return measurePerf(\"randomKilominxScramble\", randomKilominxScramble, {\n isPrefetch: options?.isPrefetch,\n });\n case \"redi_cube\":\n return measurePerf(\"randomRediCubeScramble\", randomRediCubeScramble, {\n isPrefetch: options?.isPrefetch,\n });\n default:\n throw new Error(`unsupported event: ${eventID}`);\n }\n}\n\nexport enum PrefetchLevel {\n Auto = \"auto\",\n None = \"none\",\n Immediate = \"immediate\",\n}\n\nlet currentPrefetchLevel = PrefetchLevel.Auto;\n\nexport const insideAPI = {\n initialize: async (eventID: string) => {\n switch (eventID) {\n case \"222\":\n return measurePerf(\"preInitialize222\", preInitialize222);\n case \"333\":\n case \"333oh\":\n case \"333ft\":\n return measurePerf(\"initialize333\", initialize333);\n case \"444\":\n return measurePerf(\"initialize444\", initialize444);\n default:\n throw new Error(`unsupported event: ${eventID}`);\n }\n },\n\n setScramblePrefetchLevel(prefetchLevel: `${PrefetchLevel}`) {\n currentPrefetchLevel = prefetchLevel as PrefetchLevel;\n },\n\n randomScrambleForEvent: async (eventID: string): Promise<Alg> => {\n let promise = prefetchPromises.get(eventID);\n if (promise) {\n prefetchPromises.delete(eventID);\n } else {\n promise = randomScrambleForEvent(eventID);\n }\n if (currentPrefetchLevel !== PrefetchLevel.None) {\n promise.then(() => {\n // `queuedPrefetch` could be 0, but:\n // > Passing an invalid ID to clearTimeout() silently does nothing; no exception is thrown.\n // https://developer.mozilla.org/en-US/docs/Web/API/clearTimeout#notes\n if (queuedPrefetchTimeoutID) {\n clearTimeout(queuedPrefetchTimeoutID);\n }\n queuedPrefetchTimeoutID = setTimeout(\n () => {\n prefetchPromises.set(\n eventID,\n randomScrambleForEvent(eventID, {\n isPrefetch: true,\n }),\n );\n },\n currentPrefetchLevel === PrefetchLevel.Immediate\n ? 0\n : IDLE_PREFETCH_TIMEOUT_MS,\n );\n });\n }\n return promise;\n },\n\n randomScrambleStringForEvent: async (eventID: string): Promise<string> => {\n return (await insideAPI.randomScrambleForEvent(eventID)).toString();\n },\n\n solve333ToString: async (patternData: KPatternData): Promise<string> => {\n const pattern = new KPattern(await puzzles[\"3x3x3\"].kpuzzle(), patternData);\n return (await solve333(pattern)).toString();\n },\n\n solve222ToString: async (patternData: KPatternData): Promise<string> => {\n const pattern = new KPattern(await puzzles[\"2x2x2\"].kpuzzle(), patternData);\n return (await solve222(pattern)).toString();\n },\n\n solveSkewbToString: async (patternData: KPatternData): Promise<string> => {\n const pattern = new KPattern(await puzzles[\"skewb\"].kpuzzle(), patternData);\n return (await solveSkewb(pattern)).toString();\n },\n\n solvePyraminxToString: async (patternData: KPatternData): Promise<string> => {\n const pattern = new KPattern(\n await puzzles[\"pyraminx\"].kpuzzle(),\n patternData,\n );\n return (await solvePyraminx(pattern)).toString();\n },\n\n solveMegaminxToString: async (patternData: KPatternData): Promise<string> => {\n const pattern = new KPattern(\n await puzzles[\"megaminx\"].kpuzzle(),\n patternData,\n );\n return (await solveMegaminx(pattern)).toString();\n },\n\n setDebugMeasurePerf: async (measure: boolean): Promise<void> => {\n setDebugMeasurePerf(measure);\n },\n\n solveTwsearchToString: async (\n def: KPuzzleDefinition,\n patternData: KPatternData,\n options?: TwsearchOptions,\n ): Promise<string> => {\n const kpuzzle = new KPuzzle(def);\n const pattern = new KPattern(kpuzzle, patternData);\n return (await wasmTwsearch(def, pattern, options)).toString();\n },\n};\n\nexport type WorkerInsideAPI = typeof insideAPI;\n", "import { expose } from \"../../vendor/apache/comlink-everywhere/inside\";\nimport { insideAPI } from \"./api\";\n\nexpose(insideAPI);\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["wasmTwsearch", "wasmRandomScrambleForEvent", "cachedTrembleSolver", "getCachedTrembleSolver", "getCachedTrembleSolver", "TREMBLE_DEPTH", "cachedTrembleSolver", "getCachedTrembleSolver", "getCachedTrembleSolver", "TREMBLE_DEPTH", "TREMBLE_DEPTH", "cachedTrembleSolver", "getCachedTrembleSolver", "getCachedTrembleSolver", "TREMBLE_DEPTH"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/cubing/puzzles/implementations/dynamic/unofficial/fto.kpuzzle.svg.ts", "../../../../src/cubing/puzzles/implementations/dynamic/unofficial/kilominx.kpuzzle.svg.ts", "../../../../src/cubing/puzzles/implementations/dynamic/unofficial/redi_cube.kpuzzle.json.ts", "../../../../src/cubing/puzzles/implementations/dynamic/unofficial/redi_cube.kpuzzle.svg.ts", "../../../../src/cubing/puzzles/implementations/dynamic/unofficial/loopover.kpuzzle.json.ts", "../../../../src/cubing/puzzles/implementations/dynamic/unofficial/loopover.kpuzzle.svg.ts"],
|
|
4
|
-
"sourcesContent": ["export const ftoSVG = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"2368px\" height=\"1216px\" viewBox=\"0 0 2368 1216\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>fto</title>\n <g id=\"fto\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" stroke-linejoin=\"round\">\n <g id=\"BL\" transform=\"translate(2040.000000, 608.000000) scale(-1, -1) rotate(90.000000) translate(-2040.000000, -608.000000) translate(1560.000000, 368.000000)\" stroke=\"#000000\" stroke-width=\"12\">\n <polygon id=\"C4RNER-l4-o3\" style=\"fill: #FF7F00;\" points=\"480 0 640 160 320 160\"></polygon>\n <polygon id=\"EDGES-l9-o0\" style=\"fill: #FF7F00;\" points=\"640 160 800 320 480 320\"></polygon>\n <polygon id=\"CENTERS-l16-o0\" style=\"fill: #FF7F00;\" transform=\"translate(480.000000, 240.000000) scale(1, -1) translate(-480.000000, -240.000000) \" points=\"480 160 640 320 320 320\"></polygon>\n <polygon id=\"EDGES-l3-o0\" style=\"fill: #FF7F00;\" points=\"320 160 480 320 160 320\"></polygon>\n <polygon id=\"C4RNER-l3-o2\" style=\"fill: #FF7F00;\" points=\"800 320 960 480 640 480\"></polygon>\n <polygon id=\"CENTERS-l19-o0\" style=\"fill: #FF7F00;\" transform=\"translate(640.000000, 400.000000) scale(1, -1) translate(-640.000000, -400.000000) \" points=\"640 320 800 480 480 480\"></polygon>\n <polygon id=\"EDGES-l7-o0\" style=\"fill: #FF7F00;\" points=\"480 320 640 480 320 480\"></polygon>\n <polygon id=\"CENTERS-l3-o0\" style=\"fill: #FF7F00;\" transform=\"translate(320.000000, 400.000000) scale(1, -1) translate(-320.000000, -400.000000) \" points=\"320 320 480 480 160 480\"></polygon>\n <polygon id=\"C4RNER-l0-o1\" style=\"fill: #FF7F00;\" points=\"160 320 320 480 0 480\"></polygon>\n </g>\n <g id=\"D\" transform=\"translate(1280.000000, 648.000000)\" stroke=\"#000000\" stroke-width=\"12\">\n <polygon id=\"C4RNER-l4-o0\" style=\"fill: #FFFF00;\" points=\"480 0 640 160 320 160\"></polygon>\n <polygon id=\"EDGES-l3-o1\" style=\"fill: #FFFF00;\" points=\"640 160 800 320 480 320\"></polygon>\n <polygon id=\"CENTERS-l8-o0\" style=\"fill: #FFFF00;\" transform=\"translate(480.000000, 240.000000) scale(1, -1) translate(-480.000000, -240.000000) \" points=\"480 160 640 320 320 320\"></polygon>\n <polygon id=\"EDGES-l5-o1\" style=\"fill: #FFFF00;\" points=\"320 160 480 320 160 320\"></polygon>\n <polygon id=\"C4RNER-l0-o0\" style=\"fill: #FFFF00;\" points=\"800 320 960 480 640 480\"></polygon>\n <polygon id=\"CENTERS-l17-o0\" style=\"fill: #FFFF00;\" transform=\"translate(640.000000, 400.000000) scale(1, -1) translate(-640.000000, -400.000000) \" points=\"640 320 800 480 480 480\"></polygon>\n <polygon id=\"EDGES-l1-o1\" style=\"fill: #FFFF00;\" points=\"480 320 640 480 320 480\"></polygon>\n <polygon id=\"CENTERS-l6-o0\" style=\"fill: #FFFF00;\" transform=\"translate(320.000000, 400.000000) scale(1, -1) translate(-320.000000, -400.000000) \" points=\"320 320 480 480 160 480\"></polygon>\n <polygon id=\"C4RNER-l2-o0\" style=\"fill: #FFFF00;\" points=\"160 320 320 480 0 480\"></polygon>\n </g>\n <g id=\"BR\" transform=\"translate(1480.000000, 608.000000) scale(1, -1) rotate(90.000000) translate(-1480.000000, -608.000000) translate(1000.000000, 368.000000)\" stroke=\"#000000\" stroke-width=\"12\">\n <polygon id=\"C4RNER-l4-o1\" style=\"fill: #7F7F7F;\" points=\"480 0 640 160 320 160\"></polygon>\n <polygon id=\"EDGES-l2-o0\" style=\"fill: #7F7F7F;\" points=\"640 160 800 320 480 320\"></polygon>\n <polygon id=\"CENTERS-l15-o0\" style=\"fill: #7F7F7F;\" transform=\"translate(480.000000, 240.000000) scale(1, -1) translate(-480.000000, -240.000000) \" points=\"480 160 640 320 320 320\"></polygon>\n <polygon id=\"EDGES-l5-o0\" style=\"fill: #7F7F7F;\" points=\"320 160 480 320 160 320\"></polygon>\n <polygon id=\"C4RNER-l5-o2\" style=\"fill: #7F7F7F;\" points=\"800 320 960 480 640 480\"></polygon>\n <polygon id=\"CENTERS-l2-o0\" style=\"fill: #7F7F7F;\" transform=\"translate(640.000000, 400.000000) scale(1, -1) translate(-640.000000, -400.000000) \" points=\"640 320 800 480 480 480\"></polygon>\n <polygon id=\"EDGES-l4-o0\" style=\"fill: #7F7F7F;\" points=\"480 320 640 480 320 480\"></polygon>\n <polygon id=\"CENTERS-l4-o0\" style=\"fill: #7F7F7F;\" transform=\"translate(320.000000, 400.000000) scale(1, -1) translate(-320.000000, -400.000000) \" points=\"320 320 480 480 160 480\"></polygon>\n <polygon id=\"C4RNER-l2-o3\" style=\"fill: #7F7F7F;\" points=\"160 320 320 480 0 480\"></polygon>\n </g>\n <g id=\"B\" transform=\"translate(1760.000000, 328.000000) scale(1, -1) translate(-1760.000000, -328.000000) translate(1280.000000, 88.000000)\" stroke=\"#000000\" stroke-width=\"12\">\n <polygon id=\"C4RNER-l4-o2\" style=\"fill: #26F;\" points=\"480 0 640 160 320 160\"></polygon>\n <polygon id=\"EDGES-l9-o1\" style=\"fill: #26F;\" points=\"640 160 800 320 480 320\"></polygon>\n <polygon id=\"CENTERS-l13-o0\" style=\"fill: #26F;\" transform=\"translate(480.000000, 240.000000) scale(1, -1) translate(-480.000000, -240.000000) \" points=\"480 160 640 320 320 320\"></polygon>\n <polygon id=\"EDGES-l2-o1\" style=\"fill: #26F;\" points=\"320 160 480 320 160 320\"></polygon>\n <polygon id=\"C4RNER-l3-o3\" style=\"fill: #26F;\" points=\"800 320 960 480 640 480\"></polygon>\n <polygon id=\"CENTERS-l12-o0\" style=\"fill: #26F;\" transform=\"translate(640.000000, 400.000000) scale(1, -1) translate(-640.000000, -400.000000) \" points=\"640 320 800 480 480 480\"></polygon>\n <polygon id=\"EDGES-l8-o1\" style=\"fill: #26F;\" points=\"480 320 640 480 320 480\"></polygon>\n <polygon id=\"CENTERS-l10-o0\" style=\"fill: #26F;\" transform=\"translate(320.000000, 400.000000) scale(1, -1) translate(-320.000000, -400.000000) \" points=\"320 320 480 480 160 480\"></polygon>\n <polygon id=\"C4RNER-l5-o1\" style=\"fill: #26F;\" points=\"160 320 320 480 0 480\"></polygon>\n </g>\n <g id=\"R\" transform=\"translate(888.000000, 608.000000) scale(-1, -1) rotate(90.000000) translate(-888.000000, -608.000000) translate(408.000000, 368.000000)\" stroke=\"#000000\" stroke-width=\"12\">\n <polygon id=\"C4RNER-l1-o1\" style=\"fill: #32CD32;\" points=\"480 0 640 160 320 160\"></polygon>\n <polygon id=\"EDGES-l6-o1\" style=\"fill: #32CD32;\" points=\"640 160 800 320 480 320\"></polygon>\n <polygon id=\"CENTERS-l7-o0\" style=\"fill: #32CD32;\" transform=\"translate(480.000000, 240.000000) scale(1, -1) translate(-480.000000, -240.000000) \" points=\"480 160 640 320 320 320\"></polygon>\n <polygon id=\"EDGES-l0-o1\" style=\"fill: #32CD32;\" points=\"320 160 480 320 160 320\"></polygon>\n <polygon id=\"C4RNER-l5-o3\" style=\"fill: #32CD32;\" points=\"800 320 960 480 640 480\"></polygon>\n <polygon id=\"CENTERS-l5-o0\" style=\"fill: #32CD32;\" transform=\"translate(640.000000, 400.000000) scale(1, -1) translate(-640.000000, -400.000000) \" points=\"640 320 800 480 480 480\"></polygon>\n <polygon id=\"EDGES-l4-o1\" style=\"fill: #32CD32;\" points=\"480 320 640 480 320 480\"></polygon>\n <polygon id=\"CENTERS-l11-o0\" style=\"fill: #32CD32;\" transform=\"translate(320.000000, 400.000000) scale(1, -1) translate(-320.000000, -400.000000) \" points=\"320 320 480 480 160 480\"></polygon>\n <polygon id=\"C4RNER-l2-o2\" style=\"fill: #32CD32;\" points=\"160 320 320 480 0 480\"></polygon>\n </g>\n <g id=\"F\" transform=\"translate(128.000000, 648.000000)\" stroke=\"#000000\" stroke-width=\"12\">\n <polygon id=\"C4RNER-l1-o2\" style=\"fill: red;\" points=\"480 0 640 160 320 160\"></polygon>\n <polygon id=\"EDGES-l0-o0\" style=\"fill: red;\" points=\"640 160 800 320 480 320\"></polygon>\n <polygon id=\"CENTERS-l0-o0\" style=\"fill: red;\" transform=\"translate(480.000000, 240.000000) scale(1, -1) translate(-480.000000, -240.000000) \" points=\"480 160 640 320 320 320\"></polygon>\n <polygon id=\"EDGES-l10-o0\" style=\"fill: red;\" points=\"320 160 480 320 160 320\"></polygon>\n <polygon id=\"C4RNER-l2-o1\" style=\"fill: red;\" points=\"800 320 960 480 640 480\"></polygon>\n <polygon id=\"CENTERS-l1-o0\" style=\"fill: red;\" transform=\"translate(640.000000, 400.000000) scale(1, -1) translate(-640.000000, -400.000000) \" points=\"640 320 800 480 480 480\"></polygon>\n <polygon id=\"EDGES-l1-o0\" style=\"fill: red;\" points=\"480 320 640 480 320 480\"></polygon>\n <polygon id=\"CENTERS-l14-o0\" style=\"fill: red;\" transform=\"translate(320.000000, 400.000000) scale(1, -1) translate(-320.000000, -400.000000) \" points=\"320 320 480 480 160 480\"></polygon>\n <polygon id=\"C4RNER-l0-o3\" style=\"fill: red;\" points=\"160 320 320 480 0 480\"></polygon>\n </g>\n <g id=\"L\" transform=\"translate(328.000000, 608.000000) scale(1, -1) rotate(90.000000) translate(-328.000000, -608.000000) translate(-152.000000, 368.000000)\" stroke=\"#000000\" stroke-width=\"12\">\n <polygon id=\"C4RNER-l1-o3\" style=\"fill: #7F007F;\" points=\"480 0 640 160 320 160\"></polygon>\n <polygon id=\"EDGES-l11-o1\" style=\"fill: #7F007F;\" points=\"640 160 800 320 480 320\"></polygon>\n <polygon id=\"CENTERS-l21-o0\" style=\"fill: #7F007F;\" transform=\"translate(480.000000, 240.000000) scale(1, -1) translate(-480.000000, -240.000000) \" points=\"480 160 640 320 320 320\"></polygon>\n <polygon id=\"EDGES-l10-o1\" style=\"fill: #7F007F;\" points=\"320 160 480 320 160 320\"></polygon>\n <polygon id=\"C4RNER-l3-o1\" style=\"fill: #7F007F;\" points=\"800 320 960 480 640 480\"></polygon>\n <polygon id=\"CENTERS-l18-o0\" style=\"fill: #7F007F;\" transform=\"translate(640.000000, 400.000000) scale(1, -1) translate(-640.000000, -400.000000) \" points=\"640 320 800 480 480 480\"></polygon>\n <polygon id=\"EDGES-l7-o1\" style=\"fill: #7F007F;\" points=\"480 320 640 480 320 480\"></polygon>\n <polygon id=\"CENTERS-l9-o0\" style=\"fill: #7F007F;\" transform=\"translate(320.000000, 400.000000) scale(1, -1) translate(-320.000000, -400.000000) \" points=\"320 320 480 480 160 480\"></polygon>\n <polygon id=\"C4RNER-l0-o2\" style=\"fill: #7F007F;\" points=\"160 320 320 480 0 480\"></polygon>\n </g>\n <g id=\"U\" transform=\"translate(608.000000, 328.000000) scale(1, -1) translate(-608.000000, -328.000000) translate(128.000000, 88.000000)\" stroke=\"#000000\" stroke-width=\"12\">\n <polygon id=\"C4RNER-l1-o0\" style=\"fill: #FFFFFF;\" points=\"480 0 640 160 320 160\"></polygon>\n <polygon id=\"EDGES-l6-o0\" style=\"fill: #FFFFFF;\" points=\"640 160 800 320 480 320\"></polygon>\n <polygon id=\"CENTERS-l20-o0\" style=\"fill: #FFFFFF;\" transform=\"translate(480.000000, 240.000000) scale(1, -1) translate(-480.000000, -240.000000) \" points=\"480 160 640 320 320 320\"></polygon>\n <polygon id=\"EDGES-l11-o0\" style=\"fill: #FFFFFF;\" points=\"320 160 480 320 160 320\"></polygon>\n <polygon id=\"C4RNER-l5-o0\" style=\"fill: #FFFFFF;\" points=\"800 320 960 480 640 480\"></polygon>\n <polygon id=\"CENTERS-l23-o0\" style=\"fill: #FFFFFF;\" transform=\"translate(640.000000, 400.000000) scale(1, -1) translate(-640.000000, -400.000000) \" points=\"640 320 800 480 480 480\"></polygon>\n <polygon id=\"EDGES-l8-o0\" style=\"fill: #FFFFFF;\" points=\"480 320 640 480 320 480\"></polygon>\n <polygon id=\"CENTERS-l22-o0\" style=\"fill: #FFFFFF;\" transform=\"translate(320.000000, 400.000000) scale(1, -1) translate(-320.000000, -400.000000) \" points=\"320 320 480 480 160 480\"></polygon>\n <polygon id=\"C4RNER-l3-o0\" style=\"fill: #FFFFFF;\" points=\"160 320 320 480 0 480\"></polygon>\n </g>\n </g>\n</svg>\n`;\n", "export const kilominxSVG = `<svg id=\"svg\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 800 500\">\n<style type=\"text/css\"><![CDATA[.sticker { stroke: #000000; stroke-width: 1px; }]]></style>\n<g><title>U</title>\n<polygon id=\"CORNERS-l7-o0\" class=\"sticker\" style=\"fill: #ffffff\" points=\"247.941 89.861 283.500 115.696 269.918 157.499 212.382 138.805\"/>\n<polygon id=\"CORNERS-l1-o0\" class=\"sticker\" style=\"fill: #ffffff\" points=\"154.845 157.499 141.263 115.696 176.822 89.861 212.382 138.805\"/>\n<polygon id=\"CORNERS-l6-o0\" class=\"sticker\" style=\"fill: #ffffff\" points=\"176.822 89.861 212.381 64.025 247.941 89.861 212.382 138.805\"/>\n<polygon id=\"CORNERS-l0-o0\" class=\"sticker\" style=\"fill: #ffffff\" points=\"212.381 199.301 168.427 199.301 154.845 157.499 212.382 138.805\"/>\n<polygon id=\"CORNERS-l2-o0\" class=\"sticker\" style=\"fill: #ffffff\" points=\"269.918 157.499 256.335 199.301 212.381 199.301 212.382 138.805\"/>\n</g><g><title>F</title>\n<polygon id=\"CORNERS-l8-o0\" class=\"sticker\" style=\"fill: #008800\" points=\"247.941 319.263 212.381 345.098 176.822 319.263 212.382 270.32\"/>\n<polygon id=\"CORNERS-l2-o2\" class=\"sticker\" style=\"fill: #008800\" points=\"212.381 209.823 256.335 209.823 269.918 251.625 212.382 270.32\"/>\n<polygon id=\"CORNERS-l19-o1\" class=\"sticker\" style=\"fill: #008800\" points=\"269.918 251.625 283.500 293.428 247.941 319.263 212.382 270.32\"/>\n<polygon id=\"CORNERS-l0-o1\" class=\"sticker\" style=\"fill: #008800\" points=\"154.845 251.625 168.427 209.823 212.381 209.823 212.382 270.32\"/>\n<polygon id=\"CORNERS-l3-o2\" class=\"sticker\" style=\"fill: #008800\" points=\"176.822 319.263 141.263 293.428 154.845 251.625 212.382 270.32\"/>\n</g><g><title>L</title>\n<polygon id=\"CORNERS-l4-o0\" class=\"sticker\" style=\"fill: #8800dd\" points=\"87.302 290.176 43.349 290.176 29.766 248.374 87.303 229.68\"/>\n<polygon id=\"CORNERS-l0-o2\" class=\"sticker\" style=\"fill: #8800dd\" points=\"122.862 180.736 158.421 206.571 144.839 248.374 87.303 229.68\"/>\n<polygon id=\"CORNERS-l3-o1\" class=\"sticker\" style=\"fill: #8800dd\" points=\"144.839 248.374 131.256 290.176 87.302 290.176 87.303 229.68\"/>\n<polygon id=\"CORNERS-l1-o1\" class=\"sticker\" style=\"fill: #8800dd\" points=\"51.743 180.736 87.302 154.901 122.862 180.736 87.303 229.68\"/>\n<polygon id=\"CORNERS-l5-o2\" class=\"sticker\" style=\"fill: #8800dd\" points=\"29.766 248.374 16.184 206.571 51.743 180.736 87.303 229.68\"/>\n</g><g><title>BL</title>\n<polygon id=\"CORNERS-l10-o0\" class=\"sticker\" style=\"fill: #ffff00\" points=\"700.480 172.224 664.921 198.059 629.361 172.224 664.921 123.281\"/>\n<polygon id=\"CORNERS-l1-o2\" class=\"sticker\" style=\"fill: #ffff00\" points=\"664.921 62.784 708.874 62.784 722.457 104.586 664.921 123.281\"/>\n<polygon id=\"CORNERS-l5-o1\" class=\"sticker\" style=\"fill: #ffff00\" points=\"722.457 104.586 736.039 146.389 700.480 172.224 664.921 123.281\"/>\n<polygon id=\"CORNERS-l6-o1\" class=\"sticker\" style=\"fill: #ffff00\" points=\"607.384 104.586 620.967 62.784 664.921 62.784 664.921 123.281\"/>\n<polygon id=\"CORNERS-l11-o2\" class=\"sticker\" style=\"fill: #ffff00\" points=\"629.361 172.224 593.802 146.389 607.384 104.586 664.921 123.281\"/>\n</g><g><title>BR</title>\n<polygon id=\"CORNERS-l13-o0\" class=\"sticker\" style=\"fill: #0000ff\" points=\"545.874 172.224 510.315 198.059 474.755 172.224 510.315 123.281\"/>\n<polygon id=\"CORNERS-l6-o2\" class=\"sticker\" style=\"fill: #0000ff\" points=\"510.315 62.784 554.269 62.784 567.851 104.586 510.315 123.281\"/>\n<polygon id=\"CORNERS-l11-o1\" class=\"sticker\" style=\"fill: #0000ff\" points=\"567.851 104.586 581.433 146.389 545.874 172.224 510.315 123.281\"/>\n<polygon id=\"CORNERS-l7-o1\" class=\"sticker\" style=\"fill: #0000ff\" points=\"452.779 104.586 466.361 62.784 510.315 62.784 510.315 123.281\"/>\n<polygon id=\"CORNERS-l12-o2\" class=\"sticker\" style=\"fill: #0000ff\" points=\"474.755 172.224 439.196 146.389 452.779 104.586 510.315 123.281\"/>\n</g><g><title>R</title>\n<polygon id=\"CORNERS-l12-o1\" class=\"sticker\" style=\"fill: #ff0000\" points=\"373.019 180.736 408.579 206.571 394.996 248.374 337.461 229.68\"/>\n<polygon id=\"CORNERS-l2-o1\" class=\"sticker\" style=\"fill: #ff0000\" points=\"279.924 248.374 266.341 206.571 301.901 180.736 337.461 229.68\"/>\n<polygon id=\"CORNERS-l7-o2\" class=\"sticker\" style=\"fill: #ff0000\" points=\"301.901 180.736 337.460 154.901 373.019 180.736 337.461 229.68\"/>\n<polygon id=\"CORNERS-l19-o2\" class=\"sticker\" style=\"fill: #ff0000\" points=\"337.460 290.176 293.506 290.176 279.924 248.374 337.461 229.68\"/>\n<polygon id=\"CORNERS-l14-o0\" class=\"sticker\" style=\"fill: #ff0000\" points=\"394.996 248.374 381.414 290.176 337.460 290.176 337.461 229.68\"/>\n</g><g><title>FR</title>\n<polygon id=\"CORNERS-l16-o1\" class=\"sticker\" style=\"fill: #ffffd0\" points=\"347.220 395.413 333.638 437.215 289.684 437.215 289.685 376.719\"/>\n<polygon id=\"CORNERS-l19-o0\" class=\"sticker\" style=\"fill: #ffffd0\" points=\"254.125 327.775 289.684 301.940 325.244 327.775 289.685 376.719\"/>\n<polygon id=\"CORNERS-l14-o2\" class=\"sticker\" style=\"fill: #ffffd0\" points=\"325.244 327.775 360.803 353.610 347.220 395.413 289.685 376.719\"/>\n<polygon id=\"CORNERS-l8-o1\" class=\"sticker\" style=\"fill: #ffffd0\" points=\"232.148 395.413 218.566 353.610 254.125 327.775 289.685 376.719\"/>\n<polygon id=\"CORNERS-l17-o2\" class=\"sticker\" style=\"fill: #ffffd0\" points=\"289.684 437.215 245.730 437.215 232.148 395.413 289.685 376.719\"/>\n</g><g><title>FL</title>\n<polygon id=\"CORNERS-l17-o1\" class=\"sticker\" style=\"fill: #3399ff\" points=\"192.615 395.413 179.032 437.215 135.078 437.215 135.079 376.719\"/>\n<polygon id=\"CORNERS-l3-o0\" class=\"sticker\" style=\"fill: #3399ff\" points=\"99.519 327.775 135.078 301.940 170.638 327.775 135.079 376.719\"/>\n<polygon id=\"CORNERS-l8-o2\" class=\"sticker\" style=\"fill: #3399ff\" points=\"170.638 327.775 206.197 353.610 192.615 395.413 135.079 376.719\"/>\n<polygon id=\"CORNERS-l4-o1\" class=\"sticker\" style=\"fill: #3399ff\" points=\"77.542 395.413 63.960 353.610 99.519 327.775 135.079 376.719\"/>\n<polygon id=\"CORNERS-l9-o2\" class=\"sticker\" style=\"fill: #3399ff\" points=\"135.078 437.215 91.125 437.215 77.542 395.413 135.079 376.719\"/>\n</g><g><title>DL</title>\n<polygon id=\"CORNERS-l18-o2\" class=\"sticker\" style=\"fill: #ff6633\" points=\"677.137 319.263 641.578 293.428 655.160 251.625 712.697 270.32\"/>\n<polygon id=\"CORNERS-l4-o2\" class=\"sticker\" style=\"fill: #ff6633\" points=\"770.233 251.625 783.815 293.428 748.256 319.263 712.697 270.32\"/>\n<polygon id=\"CORNERS-l9-o1\" class=\"sticker\" style=\"fill: #ff6633\" points=\"748.256 319.263 712.697 345.098 677.137 319.263 712.697 270.32\"/>\n<polygon id=\"CORNERS-l5-o0\" class=\"sticker\" style=\"fill: #ff6633\" points=\"712.697 209.823 756.650 209.823 770.233 251.625 712.697 270.32\"/>\n<polygon id=\"CORNERS-l10-o1\" class=\"sticker\" style=\"fill: #ff6633\" points=\"655.160 251.625 668.743 209.823 712.697 209.823 712.697 270.32\"/>\n</g><g><title>B</title>\n<polygon id=\"CORNERS-l15-o2\" class=\"sticker\" style=\"fill: #99ff00\" points=\"587.618 290.176 543.664 290.176 530.081 248.374 587.618 229.68\"/>\n<polygon id=\"CORNERS-l10-o2\" class=\"sticker\" style=\"fill: #99ff00\" points=\"623.177 180.736 658.736 206.571 645.154 248.374 587.618 229.68\"/>\n<polygon id=\"CORNERS-l18-o1\" class=\"sticker\" style=\"fill: #99ff00\" points=\"645.154 248.374 631.572 290.176 587.618 290.176 587.618 229.68\"/>\n<polygon id=\"CORNERS-l11-o0\" class=\"sticker\" style=\"fill: #99ff00\" points=\"552.058 180.736 587.618 154.901 623.177 180.736 587.618 229.68\"/>\n<polygon id=\"CORNERS-l13-o1\" class=\"sticker\" style=\"fill: #99ff00\" points=\"530.081 248.374 516.499 206.571 552.058 180.736 587.618 229.68\"/>\n</g><g><title>DR</title>\n<polygon id=\"CORNERS-l16-o2\" class=\"sticker\" style=\"fill: #ff66cc\" points=\"498.098 319.263 462.539 345.098 426.980 319.263 462.539 270.32\"/>\n<polygon id=\"CORNERS-l13-o2\" class=\"sticker\" style=\"fill: #ff66cc\" points=\"462.539 209.823 506.493 209.823 520.075 251.625 462.539 270.32\"/>\n<polygon id=\"CORNERS-l15-o1\" class=\"sticker\" style=\"fill: #ff66cc\" points=\"520.075 251.625 533.658 293.428 498.098 319.263 462.539 270.32\"/>\n<polygon id=\"CORNERS-l12-o0\" class=\"sticker\" style=\"fill: #ff66cc\" points=\"405.003 251.625 418.585 209.823 462.539 209.823 462.539 270.32\"/>\n<polygon id=\"CORNERS-l14-o1\" class=\"sticker\" style=\"fill: #ff66cc\" points=\"426.980 319.263 391.420 293.428 405.003 251.625 462.539 270.32\"/>\n</g><g><title>D</title>\n<polygon id=\"CORNERS-l18-o0\" class=\"sticker\" style=\"fill: #999999\" points=\"587.618 300.698 631.572 300.698 645.154 342.500 587.618 361.195\"/>\n<polygon id=\"CORNERS-l16-o0\" class=\"sticker\" style=\"fill: #999999\" points=\"552.058 410.138 516.499 384.303 530.081 342.500 587.618 361.195\"/>\n<polygon id=\"CORNERS-l15-o0\" class=\"sticker\" style=\"fill: #999999\" points=\"530.081 342.500 543.664 300.698 587.618 300.698 587.618 361.195\"/>\n<polygon id=\"CORNERS-l17-o0\" class=\"sticker\" style=\"fill: #999999\" points=\"623.177 410.138 587.618 435.974 552.058 410.138 587.618 361.195\"/>\n<polygon id=\"CORNERS-l9-o0\" class=\"sticker\" style=\"fill: #999999\" points=\"645.154 342.500 658.736 384.303 623.177 410.138 587.618 361.195\"/>\n</g></svg>\n`;\n", "import type { KPuzzleDefinition } from \"../../../../kpuzzle\";\n\nexport const rediCubeJSON: KPuzzleDefinition = {\n name: \"redi_cube\",\n orbits: [\n { orbitName: \"EDGES\", numPieces: 12, numOrientations: 2 },\n { orbitName: \"CORNERS\", numPieces: 8, numOrientations: 3 },\n ],\n defaultPattern: {\n EDGES: {\n pieces: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n },\n CORNERS: {\n pieces: [0, 1, 2, 3, 4, 5, 6, 7],\n orientation: [0, 0, 0, 0, 0, 0, 0, 0],\n },\n },\n moves: {\n F: {\n EDGES: {\n permutation: [8, 0, 2, 3, 4, 5, 6, 7, 1, 9, 10, 11],\n orientationDelta: [0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],\n },\n CORNERS: {\n permutation: [0, 1, 2, 3, 4, 5, 6, 7],\n orientationDelta: [1, 0, 0, 0, 0, 0, 0, 0],\n },\n },\n x: {\n EDGES: {\n permutation: [4, 8, 0, 9, 6, 10, 2, 11, 5, 7, 1, 3],\n orientationDelta: [1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0],\n },\n CORNERS: {\n permutation: [4, 0, 3, 5, 7, 6, 2, 1],\n orientationDelta: [2, 1, 2, 1, 1, 2, 1, 2],\n },\n },\n y: {\n EDGES: {\n permutation: [1, 2, 3, 0, 5, 6, 7, 4, 10, 8, 11, 9],\n orientationDelta: [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1],\n },\n CORNERS: {\n permutation: [1, 2, 3, 0, 7, 4, 5, 6],\n orientationDelta: [0, 0, 0, 0, 0, 0, 0, 0],\n },\n },\n },\n derivedMoves: {\n z: \"[x: y]\",\n UR: \"[y: F]\",\n U: \"[y2: F]\",\n UL: \"[y': F]\",\n D: \"[x: F]\",\n L: \"[z2: F]\",\n R: \"[x2: F]\",\n B: \"[y2 x: F]\",\n },\n};\n", "export const rediCubeSVG = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"546px\" height=\"418px\" viewBox=\"-20 -20 546 418\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n<title>redi-cube</title>\n<g istroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g transform=\"translate(1.000000, 1.000000)\" fill-rule=\"nonzero\" stroke=\"#000000\" stroke-width=\"1.6\">\n <g id=\"CORNERS-l0-o0\" transform=\"translate(208.000000, 80.000000)\" style=\"fill: #FFFFFF;\">\n <rect id=\"Rectangle\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"></rect>\n </g>\n <g id=\"CORNERS-l0-o1\" transform=\"translate(256.000000, 128.000000)\" style=\"fill: #FF0000;\">\n <rect id=\"Rectangle\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"></rect>\n </g>\n <g id=\"CORNERS-l0-o2\" transform=\"translate(208.000000, 128.000000)\" style=\"fill: #32CD32;\">\n <rect id=\"Rectangle\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"></rect>\n </g>\n <g id=\"CORNERS-l1-o0\" transform=\"translate(208.000000, 0.000000)\" style=\"fill: #FFFFFF;\">\n <rect id=\"Rectangle\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"></rect>\n </g>\n <g id=\"CORNERS-l1-o1\" transform=\"translate(384.000000, 128.000000)\" style=\"fill: #2266FF;\">\n <rect id=\"Rectangle\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"></rect>\n </g>\n <g id=\"CORNERS-l1-o2\" transform=\"translate(336.000000, 128.000000)\" style=\"fill: #FF0000;\">\n <rect id=\"Rectangle\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"></rect>\n </g>\n <g id=\"CORNERS-l2-o0\" transform=\"translate(128.000000, 0.000000)\" style=\"fill: #FFFFFF;\">\n <rect id=\"Rectangle\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"></rect>\n </g>\n <g id=\"CORNERS-l2-o1\" transform=\"translate(0.000000, 128.000000)\" style=\"fill: #FFA500;\">\n <rect id=\"Rectangle\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"></rect>\n </g>\n <g id=\"CORNERS-l2-o2\" transform=\"translate(464.000000, 128.000000)\" style=\"fill: #2266FF;\">\n <rect id=\"Rectangle\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"></rect>\n </g>\n <g id=\"CORNERS-l3-o0\" transform=\"translate(128.000000, 80.000000)\" style=\"fill: #FFFFFF;\">\n <rect id=\"Rectangle\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"></rect>\n </g>\n <g id=\"CORNERS-l3-o1\" transform=\"translate(128.000000, 128.000000)\" style=\"fill: #32CD32;\">\n <rect id=\"Rectangle\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"></rect>\n </g>\n <g id=\"CORNERS-l3-o2\" transform=\"translate(80.000000, 128.000000)\" style=\"fill: #FFA500;\">\n <rect id=\"Rectangle\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"></rect>\n </g>\n <g id=\"CORNERS-l4-o0\" transform=\"translate(208.000000, 256.000000)\" style=\"fill: #FFFF00;\">\n <rect id=\"Rectangle\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"></rect>\n </g>\n <g id=\"CORNERS-l4-o1\" transform=\"translate(208.000000, 208.000000)\" style=\"fill: #32CD32;\">\n <rect id=\"Rectangle\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"></rect>\n </g>\n <g id=\"CORNERS-l4-o2\" transform=\"translate(256.000000, 208.000000)\" style=\"fill: #FF0000;\">\n <rect id=\"Rectangle\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"></rect>\n </g>\n <g id=\"CORNERS-l5-o0\" transform=\"translate(128.000000, 256.000000)\" style=\"fill: #FFFF00;\">\n <rect id=\"Rectangle\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"></rect>\n </g>\n <g id=\"CORNERS-l5-o1\" transform=\"translate(80.000000, 208.000000)\" style=\"fill: #FFA500;\">\n <rect id=\"Rectangle\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"></rect>\n </g>\n <g id=\"CORNERS-l5-o2\" transform=\"translate(128.000000, 208.000000)\" style=\"fill: #32CD32;\">\n <rect id=\"Rectangle\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"></rect>\n </g>\n <g id=\"CORNERS-l6-o0\" transform=\"translate(128.000000, 336.000000)\" style=\"fill: #FFFF00;\">\n <rect id=\"Rectangle\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"></rect>\n </g>\n <g id=\"CORNERS-l6-o1\" transform=\"translate(464.000000, 208.000000)\" style=\"fill: #2266FF;\">\n <rect id=\"Rectangle\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"></rect>\n </g>\n <g id=\"CORNERS-l6-o2\" transform=\"translate(0.000000, 208.000000)\" style=\"fill: #FFA500;\">\n <rect id=\"Rectangle\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"></rect>\n </g>\n <g id=\"CORNERS-l7-o0\" transform=\"translate(208.000000, 336.000000)\" style=\"fill: #FFFF00;\">\n <rect id=\"Rectangle\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"></rect>\n </g>\n <g id=\"CORNERS-l7-o1\" transform=\"translate(336.000000, 208.000000)\" style=\"fill: #FF0000;\">\n <rect id=\"Rectangle\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"></rect>\n </g>\n <g id=\"CORNERS-l7-o2\" transform=\"translate(384.000000, 208.000000)\" style=\"fill: #2266FF;\">\n <rect id=\"Rectangle\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"></rect>\n </g>\n <g id=\"EDGES-l0-o0\" transform=\"translate(168.000000, 60.000000)\" style=\"fill: #FFFFFF;\">\n <polygon id=\"Rectangle\" points=\"0 20 20 -8.8817842e-16 40 20 40 60 0 60\"></polygon>\n </g>\n <g id=\"EDGES-l0-o1\" transform=\"translate(168.000000, 128.000000)\" style=\"fill: #32CD32;\">\n <polygon id=\"Rectangle\" points=\"0 0 40 0 40 40 20 60 0 40\"></polygon>\n </g>\n <g id=\"EDGES-l1-o0\" transform=\"translate(188.000000, 40.000000)\" style=\"fill: #FFFFFF;\">\n <polygon id=\"Rectangle\" points=\"20 0 60 0 60 40 20 40 0 20\"></polygon>\n </g>\n <g id=\"EDGES-l1-o1\" transform=\"translate(296.000000, 128.000000)\" style=\"fill: #FF0000;\">\n <polygon id=\"Rectangle\" points=\"0 0 40 0 40 40 20 60 0 40\"></polygon>\n </g>\n <g id=\"EDGES-l2-o0\" transform=\"translate(168.000000, 0.000000)\" style=\"fill: #FFFFFF;\">\n <polygon id=\"Rectangle\" points=\"0 0 40 0 40 40 20 60 0 40\"></polygon>\n </g>\n <g id=\"EDGES-l2-o1\" transform=\"translate(424.000000, 128.000000)\" style=\"fill: #2266FF;\">\n <polygon id=\"Rectangle\" points=\"0 0 40 0 40 40 20 60 0 40\"></polygon>\n </g>\n <g id=\"EDGES-l3-o0\" transform=\"translate(128.000000, 40.000000)\" style=\"fill: #FFFFFF;\">\n <polygon id=\"Rectangle\" points=\"0 0 40 0 60 20 40 40 0 40\"></polygon>\n </g>\n <g id=\"EDGES-l3-o1\" transform=\"translate(40.000000, 128.000000)\" style=\"fill: #FFA500;\">\n <polygon id=\"Rectangle\" points=\"0 0 40 0 40 40 20 60 0 40\"></polygon>\n </g>\n <g id=\"EDGES-l4-o0\" transform=\"translate(168.000000, 256.000000)\" style=\"fill: #FFFF00;\">\n <polygon id=\"Rectangle\" points=\"0 0 40 0 40 40 20 60 0 40\"></polygon>\n </g>\n <g id=\"EDGES-l4-o1\" transform=\"translate(168.000000, 188.000000)\" style=\"fill: #32CD32;\">\n <polygon id=\"Rectangle\" points=\"0 20 20 0 40 20 40 60 0 60\"></polygon>\n </g>\n <g id=\"EDGES-l5-o0\" transform=\"translate(188.000000, 296.000000)\" style=\"fill: #FFFF00;\">\n <polygon id=\"Rectangle\" points=\"20 0 60 0 60 40 20 40 0 20\"></polygon>\n </g>\n <g id=\"EDGES-l5-o1\" transform=\"translate(296.000000, 188.000000)\" style=\"fill: #FF0000;\">\n <polygon id=\"Rectangle\" points=\"0 20 20 0 40 20 40 60 0 60\"></polygon>\n </g>\n <g id=\"EDGES-l6-o0\" transform=\"translate(168.000000, 316.000000)\" style=\"fill: #FFFF00;\">\n <polygon id=\"Rectangle\" points=\"0 20 20 -5.32907052e-14 40 20 40 60 0 60\"></polygon>\n </g>\n <g id=\"EDGES-l6-o1\" transform=\"translate(424.000000, 188.000000)\" style=\"fill: #2266FF;\">\n <polygon id=\"Rectangle\" points=\"0 20 20 -1.77635684e-15 40 20 40 60 0 60\"></polygon>\n </g>\n <g id=\"EDGES-l7-o0\" transform=\"translate(128.000000, 296.000000)\" style=\"fill: #FFFF00;\">\n <polygon id=\"Rectangle\" points=\"0 0 40 0 60 20 40 40 0 40\"></polygon>\n </g>\n <g id=\"EDGES-l7-o1\" transform=\"translate(40.000000, 188.000000)\" style=\"fill: #FFA500;\">\n <polygon id=\"Rectangle\" points=\"0 20 20 0 40 20 40 60 0 60\"></polygon>\n </g>\n <g id=\"EDGES-l8-o0\" transform=\"translate(188.000000, 168.000000)\" style=\"fill: #32CD32;\">\n <polygon id=\"Rectangle\" points=\"20 0 60 0 60 40 20 40 2.66453526e-14 20\"></polygon>\n </g>\n <g id=\"EDGES-l8-o1\" transform=\"translate(256.000000, 168.000000)\" style=\"fill: #FF0000;\">\n <polygon id=\"Rectangle\" points=\"0 0 40 0 60 20 40 40 0 40\"></polygon>\n </g>\n <g id=\"EDGES-l9-o0\" transform=\"translate(128.000000, 168.000000)\" style=\"fill: #32CD32;\">\n <polygon id=\"Rectangle\" points=\"0 0 40 0 60 20 40 40 0 40\"></polygon>\n </g>\n <g id=\"EDGES-l9-o1\" transform=\"translate(60.000000, 168.000000)\" style=\"fill: #FFA500;\">\n <polygon id=\"Rectangle\" points=\"20 0 60 0 60 40 20 40 0 20\"></polygon>\n </g>\n <g id=\"EDGES-l10-o0\" transform=\"translate(384.000000, 168.000000)\" style=\"fill: #2266FF;\">\n <polygon id=\"Rectangle\" points=\"0 0 40 0 60 20 40 40 0 40\"></polygon>\n </g>\n <g id=\"EDGES-l10-o1\" transform=\"translate(316.000000, 168.000000)\" style=\"fill: #FF0000;\">\n <polygon id=\"Rectangle\" points=\"20 0 60 0 60 40 20 40 5.32907052e-14 20\"></polygon>\n </g>\n <g id=\"EDGES-l11-o0\" transform=\"translate(444.000000, 168.000000)\" style=\"fill: #2266FF;\">\n <polygon id=\"Rectangle\" points=\"20 0 60 0 60 40 20 40 -3.55271368e-15 20\"></polygon>\n </g>\n <g id=\"EDGES-l11-o1\" transform=\"translate(0.000000, 168.000000)\" style=\"fill: #FFA500;\">\n <polygon id=\"Rectangle\" points=\"0 0 40 0 60 20 40 40 0 40\"></polygon>\n </g>\n </g>\n</g>\n</svg>\n`;\n", "import type { KPuzzleDefinition } from \"../../../../kpuzzle\";\n\nconst o = [\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n];\n\nexport const loopoverJSON: KPuzzleDefinition = {\n name: \"2x2x2\",\n orbits: [{ orbitName: \"SQUARES\", numPieces: 25, numOrientations: 3 }],\n defaultPattern: {\n SQUARES: {\n pieces: [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,\n 20, 21, 22, 23, 24,\n ],\n orientation: o,\n },\n },\n moves: {\n U: {\n SQUARES: {\n permutation: [\n 1, 2, 3, 4, 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,\n 20, 21, 22, 23, 24,\n ],\n orientationDelta: o,\n },\n },\n \"2U\": {\n SQUARES: {\n permutation: [\n 0, 1, 2, 3, 4, 6, 7, 8, 9, 5, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,\n 20, 21, 22, 23, 24,\n ],\n orientationDelta: o,\n },\n },\n \"3U\": {\n SQUARES: {\n permutation: [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 10, 15, 16, 17, 18, 19,\n 20, 21, 22, 23, 24,\n ],\n orientationDelta: o,\n },\n },\n \"4U\": {\n SQUARES: {\n permutation: [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 15,\n 20, 21, 22, 23, 24,\n ],\n orientationDelta: o,\n },\n },\n \"5U\": {\n SQUARES: {\n permutation: [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,\n 21, 22, 23, 24, 20,\n ],\n orientationDelta: o,\n },\n },\n R: {\n SQUARES: {\n permutation: [\n 0, 1, 2, 3, 9, 5, 6, 7, 8, 14, 10, 11, 12, 13, 19, 15, 16, 17, 18, 24,\n 20, 21, 22, 23, 4,\n ],\n orientationDelta: o,\n },\n },\n \"2R\": {\n SQUARES: {\n permutation: [\n 0, 1, 2, 8, 4, 5, 6, 7, 13, 9, 10, 11, 12, 18, 14, 15, 16, 17, 23, 19,\n 20, 21, 22, 3, 24,\n ],\n orientationDelta: o,\n },\n },\n \"3R\": {\n SQUARES: {\n permutation: [\n 0, 1, 7, 3, 4, 5, 6, 12, 8, 9, 10, 11, 17, 13, 14, 15, 16, 22, 18, 19,\n 20, 21, 2, 23, 24,\n ],\n orientationDelta: o,\n },\n },\n \"4R\": {\n SQUARES: {\n permutation: [\n 0, 6, 2, 3, 4, 5, 11, 7, 8, 9, 10, 16, 12, 13, 14, 15, 21, 17, 18, 19,\n 20, 1, 22, 23, 24,\n ],\n orientationDelta: o,\n },\n },\n \"5R\": {\n SQUARES: {\n permutation: [\n 5, 1, 2, 3, 4, 10, 6, 7, 8, 9, 15, 11, 12, 13, 14, 20, 16, 17, 18, 19,\n 0, 21, 22, 23, 24,\n ],\n orientationDelta: o,\n },\n },\n },\n derivedMoves: {\n L: \"5R'\",\n \"2L\": \"4R'\",\n \"3L\": \"3R'\",\n \"4L\": \"2R'\",\n \"5L\": \"R'\",\n D: \"5U'\",\n \"2D\": \"4U'\",\n \"3D\": \"3U'\",\n \"4D\": \"2U'\",\n \"5D\": \"U'\",\n E: \"3D\",\n M: \"3L\",\n },\n};\n", "export const loopoverSVG = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"600px\" height=\"600px\" viewBox=\"-50 -50 600 600\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>3x3x3 LL</title>\n <defs>\n <g id=\"sticker\">\n <rect x=\"0\" y=\"0\" width=\"100\" height=\"100\" stroke=\"black\" stroke-width=\"0.5px\" />\n </g>\n </defs>\n <g id=\"3x3x3-LL\" stroke=\"none\" stroke-width=\"4\" style=\"none\" stroke-linejoin=\"round\">\n <use id=\"SQUARES-l0-o0\" href=\"#sticker\" transform=\"translate( 00, 00)\" style=\"fill: #E23424\"/>\n <use id=\"SQUARES-l1-o0\" href=\"#sticker\" transform=\"translate(100, 00)\" style=\"fill: #AC2A3C\"/>\n <use id=\"SQUARES-l2-o0\" href=\"#sticker\" transform=\"translate(200, 00)\" style=\"fill: #762668\"/>\n <use id=\"SQUARES-l3-o0\" href=\"#sticker\" transform=\"translate(300, 00)\" style=\"fill: #412798\"/>\n <use id=\"SQUARES-l4-o0\" href=\"#sticker\" transform=\"translate(400, 00)\" style=\"fill: #152DC9\"/>\n\n <use id=\"SQUARES-l5-o0\" href=\"#sticker\" transform=\"translate( 00,100)\" style=\"fill: #E34F27\"/>\n <use id=\"SQUARES-l6-o0\" href=\"#sticker\" transform=\"translate(100,100)\" style=\"fill: #AD4D3E\"/>\n <use id=\"SQUARES-l7-o0\" href=\"#sticker\" transform=\"translate(200,100)\" style=\"fill: #794E6A\"/>\n <use id=\"SQUARES-l8-o0\" href=\"#sticker\" transform=\"translate(300,100)\" style=\"fill: #485399\"/>\n <use id=\"SQUARES-l9-o0\" href=\"#sticker\" transform=\"translate(400,100)\" style=\"fill: #2758CA\"/>\n\n <use id=\"SQUARES-l10-o0\" href=\"#sticker\" transform=\"translate( 00,200)\" style=\"fill: #E67A30\"/>\n <use id=\"SQUARES-l11-o0\" href=\"#sticker\" transform=\"translate(100,200)\" style=\"fill: #B17A44\"/>\n <use id=\"SQUARES-l12-o0\" href=\"#sticker\" transform=\"translate(200,200)\" style=\"fill: #7F7B6D\"/>\n <use id=\"SQUARES-l13-o0\" href=\"#sticker\" transform=\"translate(300,200)\" style=\"fill: #547F9B\"/>\n <use id=\"SQUARES-l14-o0\" href=\"#sticker\" transform=\"translate(400,200)\" style=\"fill: #3B83CB\"/>\n\n <use id=\"SQUARES-l15-o0\" href=\"#sticker\" transform=\"translate( 00,300)\" style=\"fill: #EAA93C\"/>\n <use id=\"SQUARES-l16-o0\" href=\"#sticker\" transform=\"translate(100,300)\" style=\"fill: #B8A94C\"/>\n <use id=\"SQUARES-l17-o0\" href=\"#sticker\" transform=\"translate(200,300)\" style=\"fill: #89AA72\"/>\n <use id=\"SQUARES-l18-o0\" href=\"#sticker\" transform=\"translate(300,300)\" style=\"fill: #63AB9E\"/>\n <use id=\"SQUARES-l19-o0\" href=\"#sticker\" transform=\"translate(400,300)\" style=\"fill: #50ADCD\"/>\n\n <use id=\"SQUARES-l20-o0\" href=\"#sticker\" transform=\"translate( 00,400)\" style=\"fill: #F1DA49\"/>\n <use id=\"SQUARES-l21-o0\" href=\"#sticker\" transform=\"translate(100,400)\" style=\"fill: #C1D957\"/>\n <use id=\"SQUARES-l22-o0\" href=\"#sticker\" transform=\"translate(200,400)\" style=\"fill: #95D878\"/>\n <use id=\"SQUARES-l23-o0\" href=\"#sticker\" transform=\"translate(300,400)\" style=\"fill: #74D7A2\"/>\n <use id=\"SQUARES-l24-o0\" href=\"#sticker\" transform=\"translate(400,400)\" style=\"fill: #64D8D0\"/>\n </g>\n</svg>`;\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|