Commit 9130b88f by Иван Кубота

WIP. Video quality Calculator is mostly done

parent 74b3b6c7
# dependencies
/node_modules
/.pnp
.pnp.js
# testing
/coverage
# production
/build
# misc
.DS_Store
.vscode
/.idea
.env
.env.local
.env.development.local
.env.test.local
.env.production.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*
package-lock.json
const maps = true;
var env = process.env;
const pack = require('./pack.production');
const dir = function(...args) {
return path.posix.join.apply(path, ['./', ...args])
};
const fs = require( 'fs' );
var path = require('path');
var bCore = require( "@babel/core" );
var loadList = [dir(pack.src, pack.entry.js)];
var loaded = {};
let searchFile = function(base, name) {
if(fs.existsSync(name))
return name;
let option;
if(base === 'C:\\code\\kus-front-new/src/view/cmp/switch/Switch.jsx')
debugger
if(name[0] ==='/'){
option = dir(pack.src, name.substr(1));
if(fs.existsSync(option))
return option;
option = dir(pack.src, name.substr(1))+'.jsx';
if(fs.existsSync(option))
return option;
}else if(name[0] === '.'){
option = path.posix.join(path.dirname(base), name)
if(fs.existsSync(option))
return option;
option = path.posix.join(path.dirname(base), name)+'.jsx'
if(fs.existsSync(option))
return option;
}else {
option = path.posix.join(path.dirname(base), name);
if(fs.existsSync(option))
return option;
option = path.posix.join(path.dirname(base), name)+'.jsx'
if(fs.existsSync(option))
return option;
}
console.log('gmm', base, name);
};
let idx = 13;
let idxes = {};
var sass = require('node-sass');
let getAllDeps = async function(parent, out, loadList, hash) {
out = out || [];
hash = hash || {};
let resolved = [];
//for( let i = loadList.length-1; i >= 0; i-- ){
for( let i = 0, _i = loadList.length; i < _i; i++ ){
let textIDX = idx.toString(36);
let isSVG = false;
if(loadList[i][0] !== '.' && loadList[i][0] !== '/'){
loadList[i] = '/'+loadList[i];
}
const loadListElement = {fileName: searchFile(parent, loadList[ i ]), name: loadList[ i ], compacted: textIDX, deps: {}};
idxes[textIDX] = loadListElement;
idx++;
resolved[i] = loadListElement;
out.push(loadListElement);
if(!loadListElement.fileName){
console.error(`Unresolved dependency \`${loadList[i]}\` from \`${parent}\``);
loadListElement.compacted = 'a';
continue;
}
if(loadListElement.fileName in hash){
resolved[i] = hash[loadListElement.fileName];
continue;
}
hash[loadListElement.fileName] = loadListElement;
let fileData = fs.readFileSync(loadListElement.fileName, 'utf-8');
if(loadListElement.fileName.substr(-4)==='.svg'){
fileData = `const SVG = D.declare("${
textIDX
}", (cfg)=>{ return ${
(fileData+'')
.replace(/(<svg[^>]+"\s*)>/i,'$1 {...cfg}>')
}; });
export default SVG;
`;
isSVG = true;
}
if(loadListElement.fileName.substr(-5)==='.scss'){
loadListElement.compacted='a';
let cssData = await new Promise(function(r, j){
let dir = pack.src;
sass.render( {
data: ( pack && pack.scss && pack.scss.shared || '' ) + ';\n' + fileData + '',
file: loadListElement.fileName,
sourceMap: maps,
importer: function( url, prev, done ){
if( url[ 0 ] === '/' ){
url = path.join( __dirname, dir, url.substr( 1 ) );
}
var displayName = path.relative( path.join( __dirname, dir ), path.resolve( path.dirname( prev ), url ) )
var name = path.resolve( path.dirname( prev ), url );
let fName;
let contents;
try{
contents = fs.readFileSync( name ) + '';
done( {
file: displayName, // only one of them is required, see section Special Behaviours.
contents: contents
} );
return;
}catch( e ){
}
res._log( 'Resolve scss dep ', url, 'for', fixedUrl );
try{
contents = fs.readFileSync( name + '.scss' ) + '';
done( {
file: displayName, // only one of them is required, see section Special Behaviours.
contents: contents
} );
return;
}catch( e ){
}
j( new Error( 'Can not resolve dependency!' ) )
}
}, function( err, result ){
if( err ){
const errorText = `Error at ${err.file}:\n` + err.formatted;
return j( errorText )
}
r( result.css+'' )
} );
});
loadListElement.code = cssData;
continue
}
await new Promise(function(r, j) {
bCore.transform( fileData,
{
"plugins": [
[ "@babel/plugin-transform-react-jsx", {
"pragma": isSVG ? "D.s":"D.h", // default pragma is React.createElement
"pragmaFrag": "D.f", // default is React.Fragment
"throwIfNamespace": false // defaults to true
} ],
['@babel/plugin-transform-modules-amd']
],
sourceFileName: textIDX,
moduleId: textIDX
}, async function( c, d, e ){
if(c){
console.log(c)
}else{
let them = (d.code.match(/define\([^\[]*\[([^\]]*)\]/)[1].split(',').map(a=>a.trim()).map(a=>a.substr(1)).map(a=>a.substr(0,a.length-1)));
//them.length && console.log(them)
let resolved = await getAllDeps(loadListElement.fileName, out, them.filter(a=>a && a!=='exports'), hash);
for( var k = 0, _k = resolved.length; k < _k; k++ ){
const resolvedElement = resolved[ k ];
loadListElement.deps[resolvedElement.compacted] = true;
}
let index = 0;
loadListElement.code = d.code.replace(/define\(([^[]*)\[([^\]]*)\]/, function(a, b, c) {
return `define(${b}[${
c.split(',')
.map(a=>a.trim())
.map(a=>a.substr(1))
.map(a=>a.substr(0,a.length-1))
.map((name)=>
name === 'exports' ? 'exports': resolved[index++].compacted
)
.map(name=>`"${name}"`)
.join(',')
}]`;
});
}
r()
} );
})
}
return resolved;
};
(async function() {
let out = [];
await getAllDeps('./',out, [dir(pack.entry.js)])
let hash = {};
let uniq = out.filter(function(f) {
return !(f.fileName in hash) ?hash[f.fileName] = true: false;
});
let scss = [], js = [], svg = [];
uniq.forEach(item=>{
if(item.fileName === void 0)
return;
if(item.fileName.substr(-4) === '.svg'){
svg.push(item);
}else if(item.fileName.substr(-5) === '.scss'){
scss.push(item);
}else{
js.push(item);
}
});
try{
fs.mkdirSync( pack.build, { recursive: true } );
fs.mkdirSync( path.join(pack.public, pack.build), { recursive: true } );
}catch(e){};
var fJS = 'var jsLoader=function(){};define("a",[], function(){});'+svg.map(f=>f.code).join('\n');
var outjsordered = [];
let tolong = 0;
let resolved = {a: true};
svg.forEach(s=>resolved[s.compacted] = true);
while(js.length && tolong<10000){
tolong++;
for( let i = js.length - 1; i >= 0; i-- ){
const j = js[ i ];
if(Object.keys(j.deps).filter(d=>!(d in resolved)).length === 0){
outjsordered.push(js.splice(i, 1)[0]);
resolved[j.compacted] = true;
}
}
}
console.log(tolong)
fJS+=outjsordered.map(f=>f.code).join('\n');
var Terser = require("terser");
var html = fs.readFileSync(path.join(pack.src, pack.entry.jsDonor), 'utf-8');
let inlining = [];
var g = html.replace(/<script src="([^"]+)"/g, function(f, a) {
if(a.indexOf('http')!==0){
if(a.indexOf('build')===0)
return '';
// including
var content;
try{
content = fs.readFileSync(path.join(pack.src, a), 'utf-8');
}catch(e){
content = fs.readFileSync(path.join(pack.public, a), 'utf-8');
}
inlining.push(content)
}
});
fJS = inlining.join('\n')+fJS;
fJS = await new Promise((r, j) => {
bCore.transform(fJS, {
"plugins": [
'@babel/plugin-transform-modules-commonjs',
["@babel/plugin-transform-runtime",
{
"regenerator": false
}
]
],
presets: [
[
"@babel/preset-env",
{
useBuiltIns: 'usage',
forceAllTransforms: true,
corejs: {
version: 3,
proposals: false
},
"targets": {
ie: "11",
"browsers": ["last 2 versions"]
}
}
],
]
}, function (c, d, e) {
if (c)
j(c)
else
r(d.code);
});
});
fs.writeFileSync(path.join(pack.build, 'j.js'), fJS);
var browserify = require('browserify');
var b = browserify();
b.add(path.join(pack.build, 'j.js'));
fJS = await new Promise((r,j)=>{
b.bundle(function(a,b,c) {
if(a){
console.log('Build error', a);
j(a);
}else{
console.log('Build built');
r(b);
}
})
});
let tersed = Terser.minify(fJS.toString('utf-8'));
tersed.error && console.error(tersed.error);
fJS = tersed.code;
console.log('minified')
fs.writeFileSync(path.join(pack.public, pack.build, 'j.js'), fJS);
fs.writeFileSync(path.join(pack.build, 'c.css'), scss.map(f=>f.code).join('\n'));
fs.writeFileSync(path.join(pack.public, pack.build, 'c.css'), scss.map(f=>f.code).join('\n'));
console.log('SVG:', svg.length);
console.log('SCSS:', scss.length);
console.log('JS:',js.length);
return;
console.log(svg);
console.log('\n');
console.log(scss);
console.log('\n');
console.log(js)
console.log('\n');
})();
var parsed = require('dotenv').config();
const fs = require( 'fs' );
if(parsed.error){
parsed = require('dotenv').parse(fs.readFileSync('./.env.example', 'utf-8'));
if(!parsed.error){
for (const k in parsed) {
process.env[k] = parsed[k].split('|')[0]
}
}
}
var env = process.env;
const maps = env.LAMUR_ENV === 'DEVELOP';//true
const compression = require('compression')
const LAMUR_HOST = '0.0.0.0';//env.LAMUR_HOST || "127.0.0.1";
const APP_PORT = env.LAMUR_PORT || 4000;
const App = require('express');
const Router = require('node-async-router');
const app = App(),
router = Router();
const pack = require('./pack'+(env.LAMUR_ENV?'.'+env.LAMUR_ENV.toLowerCase():''));
const dir = function(...args) {
return path.join.apply(path, [__dirname, ...args])
};
var cache = {};
const {execSync} = require('child_process');
let commit, commitNUMBER, lastUpdateNumber;
const updateCommitInfo = function() {
commit = execSync('git rev-parse HEAD').toString().trim();
if(!lastUpdateNumber || lastUpdateNumber+45000<+new Date()) {
lastUpdateNumber = +new Date()
commitNUMBER = execSync('git rev-list --count HEAD').toString().trim();
}
};
updateCommitInfo();
const serveBundle = async function(tpl, res){
var fileName = dir(pack.src, pack.entry.js);
var posixName = pack.entry.js;//path.posix.join(pack.src, );
//console.log(fileName)
fs.readFile(fileName, function(err, jsx) {
if(err){
return res.end(err.message);
}
const cacheEntry = posixName;//+new Date()+'_'+Math.random().toString(36).substr(2)
updateCommitInfo();
res.end(tpl
//.replace('$DATA$', JSON.stringify(data))
.replace('$BUNDLE$',
'<script src="'+cacheEntry+'"></script>')
.replace('$COMMIT$', '<script>var CommitID = "'+commit+'";var CommitNUMBER = "'+commitNUMBER+'";</script>')
.replace('$ENV$', 'var env='+JSON.stringify(
Object.keys(process.env)
.filter(p=>p.indexOf('FRONT_APP')===0)
.reduce((s,k)=>{s[k]=process.env[k]; return s;}, {})
)+';')
.replace(/\$CMT\$/g, commit)
);
transformJSX(jsx+'', pack.entry.js, function(err, result) {
if(err){
res._log('!', err)
cache[ '/' + cacheEntry ] = JSON.stringify(err, null,2);
}else
cache['/'+cacheEntry] = result.code;
});
});
};
var path = require('path');
var bCore = require( "@babel/core" );
//var simpleTransformToAMD = require('./pack/babel-plugin-transform-2015es-to-amd')
var transformJSX = function(code, fileName, cb) {
bCore.transform(
code,
{
"plugins": [
[ "@babel/plugin-transform-react-jsx", {
"pragma": "D.h", // default pragma is React.createElement
"pragmaFrag": "D.f", // default is React.Fragment
"throwIfNamespace": false // defaults to true
} ],
//[simpleTransformToAMD]
['@babel/plugin-transform-modules-amd']
],
sourceMaps: maps,
sourceFileName: fileName,
moduleId: fileName
}, function( c, d, e ){
if(c){
cb(c);
}else{
cb(false, d);
}
} );
};
var transformJS = function(code, fileName, cb) {
bCore.transform(
code,
{
"plugins": [
['@babel/plugin-transform-modules-amd']
],
sourceMaps: maps,
sourceFileName: fileName,
moduleId: fileName
}, function( c, d, e ){
if(c){
cb(c);
}else{
cb(false, d);
}
} );
};
/*
var transformTSX = function(code, fileName, cb) {
bCore.transform(
`import "main.ts";const x:number = 4;
export const trata = 2 as number;
`,//code,
{
"plugins": [
['@babel/plugin-transform-typescript', {
isTSX: true,
jsxPragma: 'D'
}],
/!*[ "@babel/plugin-transform-react-jsx", {
"pragma": "D.h", // default pragma is React.createElement
"pragmaFrag": "D.f", // default is React.Fragment
"throwIfNamespace": false // defaults to true
} ],*!/
[simpleTransformToAMD]
],
sourceMaps: 'both',
sourceFileName: fileName,
moduleId: fileName
}, function( c, d, e ){
console.log(c)
console.log(d.code)
debugger
if(c){
cb(c);
}else{
cb(false, d);
}
} );
};*/
//transformTSX('', 'aga', ()=>{})
var sass = require('node-sass');
var transformServe = function(dir, anything) {
let outerFixedUrl;
let serve = function (req, res, next) {
var qRes = res;
let fixedUrl;
if (req.url in cache) {
return res.end(cache[req.url])
}
if(req.url === '/global-styles/base.scss')
debugger
if(!anything){
fixedUrl = req.url;
}else{
fixedUrl = arguments[3];
}
var ext = '.'+fixedUrl.split('.').pop();
if (ext === '.scss'){
// not secure
//console.log('scss', dir, req.url, __dirname)
fs.readFile( path.join( __dirname, dir, fixedUrl ), function( err, data ){
if( err ){
next();
}else{
if(pack && pack.scss && pack.scss.shared){
data = pack.scss.shared+';\n'+data;
}
sass.render( {
data: data+'',
file: path.join( __dirname, dir, req.url ),
sourceMap: maps,
importer: function( url, prev, done ){
if(url[0] === '/'){
url = path.join( __dirname, dir, url.substr(1));
}
var displayName = path.relative( path.join( __dirname, dir ), path.resolve( path.dirname( prev ), url ) )
var name = path.resolve( path.dirname( prev ), url );
let fName;
let contents;
try{
contents = fs.readFileSync( name ) + '';
done( {
file: displayName, // only one of them is required, see section Special Behaviours.
contents: contents
} );
return;
}catch(e){}
res._log('Resolve scss dep ', url, 'for', fixedUrl);
try{
contents = fs.readFileSync( name+'.scss' ) + '';
done( {
file: displayName, // only one of them is required, see section Special Behaviours.
contents: contents
} );
return;
}catch(e){}
try{
contents = fs.readFileSync( name+'.css' ) + '';
done( {
file: displayName, // only one of them is required, see section Special Behaviours.
contents: contents
} );
return;
}catch(e){}
done(new Error('Can not resolve dependency!'))
}
}, function( err, result ){
if( err ){
const errorText = `Error at ${err.file}:\n` + err.formatted;
return res.end( errorText )
}
res.set( 'Content-type', 'text/css; charset=UTF-8' );
res.end( result.css )
} );
}
} );
}else if (ext === '.jsx') {
fs.readFile(path.join(dir, fixedUrl), function(err, data){
if( err ){
next();
}else{
res._log('Transform jsx');
transformJSX(data+'', req.url, function(err, result) {
if(err){
res._log('!Error in transforming jsx', err);
res.end(err.message+'\n'+err.stack)
}else{
cache[ req.url + '.map' ] = JSON.stringify( result.map );
res.set( 'SourceMap', req.url + '.map' );
res.set( 'Content-type', 'application/javascript; charset=UTF-8' );
res.end( result.code );
}
})
}
});
}else if (ext === '.js' && fixedUrl.toLowerCase().indexOf('/core/') !== 0 ) {
fs.readFile(path.join(dir, fixedUrl), function(err, data){
if( err ){
next();
}else{
res._log('Transform js');
transformJS(data+'', req.url, function(err, result) {
if(err){
res._log('!Error in transforming js', err);
res.end(err.message+'\n'+err.stack)
}else{
cache[ req.url + '.map' ] = JSON.stringify( result.map );
res.set( 'SourceMap', req.url + '.map' );
res.set( 'Content-type', 'application/javascript; charset=UTF-8' );
res.end( result.code );
}
})
}
});
} else if (ext === '.svg') {
fs.readFile(path.join(dir, fixedUrl), function(err, data){
if( err ){
next();
}else{
res._log('Generate SVG declaration');
bCore.transform(
`const SVG = D.declare("${req.url.replace(/\//g,'.').split('.').filter(String).join('.')}", (cfg)=>{ return ${(data+'').replace(/(<svg[^>]+"\s*)>/i,'$1 {...cfg}>')}; });
export default SVG;
`,
{
"plugins": [
[ "@babel/plugin-transform-react-jsx", {
"pragma": "D.s", // default pragma is React.createElement
"throwIfNamespace": false // defaults to true
} ],
['@babel/plugin-transform-modules-amd']
],
sourceMaps: maps,
sourceFileName: req.url,
moduleId: req.url
}, function( err, result ){
if(err){
res._log('!Error in transforming svg', err);
res.end(err.message+'\n'+err.stack)
}else{
cache[ req.url + '.map' ] = JSON.stringify( result.map );
res.set( 'SourceMap', req.url + '.map' );
res.header( 'Content-Type', 'text/javascript' );
res.end( result.code );
}
} );
}
});
} else {
next();
}
};
if(!anything)
return function(req, res, next) {
return serve(req, res, next);
};
return function(req, res, next) {
//return next();
if(req.url.substr(-3)[0] === '.' || req.url.substr(-4)[0] === '.')
return next();
let types = 'jsx,scss,svg'.split(',')
let test = 0;
let iterate = function() {
let outerFixedUrl = req.url+'.'+types[test];
serve(req, res, function(a,b,c) {
if(test<types.length){
res._log('try serve', outerFixedUrl);
test++;
iterate();
}else{
next();
test = 0;
}
}, outerFixedUrl);
};
iterate();
};
};
var count = 0;
var list = [];
var pad = function(n) {
return n<10 ? '0'+n: n+'';
};
var getLogItem = function(logItem) {
if( logItem[ 0 ] === '!' ){
return {data: [ '\t' ].concat( logItem.substr( 1 ) ), error: true };
}else if( logItem[ 0 ][ 0 ] === '!' ){
return {data: [ '\t', logItem[ 0 ].substr( 1 ) ].concat( logItem.slice( 1 ) ), error: true };
}else{
return {data: [ '\t' ].concat( logItem ), error: false };
}
};
app.use(function(req, res, next) {
var d = new Date();
res.on('finish', function() {
// Do log;
if(log.length){
let udishen = '';
if(log.length === 1){
udishen = getLogItem(log[0]).data;
console[udishen.error?'error':'log'].apply(console, [
d.getHours() + ':' + pad( d.getMinutes() ) + ':' + pad( d.getSeconds() ),
'Request', req.url, '\t→ '
].concat(udishen) )
}else{
console.log.apply(console, [
d.getHours() + ':' + pad( d.getMinutes() ) + ':' + pad( d.getSeconds() ),
'Request', req.url
]);
log.forEach( function( logItem ){
var item = getLogItem(logItem);;
if(item.error){
console.error.apply(console, item.data);
}else{
console.log.apply(console, item.data);
}
} )
}
}
});
let log = [];
res._log = function() {
log.push([...arguments]);
};
next();
});
var serveMain = function(res, file) {
fs.readFile( dir( pack.src, file||pack.entry.html ), function( err, data ){
if( err ){
res.end( JSON.stringify( err, null, 2 ) );
}else{
serveBundle( data + '', res );
}
} );
};
app.use(transformServe('src'));
var lives = [];
var log = [];
app.use('/', function(req, res, next){
//console.log( req.originalUrl )
if( req.originalUrl === '/' ){
serveMain(res);
}else if( req.originalUrl === '/[live]' ){
lives.push( res );
}else if( req.originalUrl === '/log' ){
if(req.method === 'GET'){
res.end(JSON.stringify(log))
}else{
debugger
log.push( req.body );
res.end('OK')
}
}else if( req.originalUrl in cache ){
res( cache[ req.originalUrl ] );
}else{
next();
}
});
app.use(compression());
app.use(App.static(dir(pack.public)));
app.use(App.static(dir(pack.src)))
app.get('/blog', function(req, res) {
serveMain(res, 'blog.html');
});
app.use(transformServe('src', true));
app.use(function(req, res, next) {
res._log('!Not serving', req.url);
serveMain(res);
});
const util = require('util');
const readFile = util.promisify(fs.readFile);
const transformJSXPromised = util.promisify(transformJSX);
const transformJSPromised = util.promisify(transformJS);
let debounce = {};
let shouldUpdate = false;
var doUpdate = async function(){
var files = [];
for( let filename in debounce ){
try{
if(filename.substr(-4)==='.jsx'){
var code = await readFile( filename ) + '';
var url = '/' + path.relative( './src', filename ).replace( /\\/g, '/' )
console.log( 'Live transform jsx ', url )
var result = await transformJSXPromised( code, url );
files.push( { file: url, content: result.code } );
}else if(filename.substr(-3)==='.js'){
var code = await readFile( filename ) + '';
var url = '/' + path.relative( './src', filename ).replace( /\\/g, '/' )
console.log( 'Live transform js ', url )
var result = await transformJSPromised( code, url );
files.push( { file: url, content: result.code } );
}
}catch( e ){
console.log( 'Error in ' + e );
}
delete debounce[filename];
}
var live, liveUpdate = JSON.stringify(files);
while((live = lives.pop()))
live.end(liveUpdate);
shouldUpdate = false;
};
let debounceUpdate = function(filename){
if(filename.indexOf('_tmp_')===-1 && filename.indexOf('_old__')===-1){
debounce[ filename ] = true;
if(!shouldUpdate){
shouldUpdate = true;
setTimeout(doUpdate, 300);
}
}
};
var watch = require('recursive-watch');
watch('./src', function(filename){
if(filename.indexOf('_tmp_')>-1)
return;
debounceUpdate(filename);
});
/*watch('./src', function(filename){
if(filename.indexOf('_tmp_')>-1)
return;
debounceUpdate(filename);
});*/
app.listen(APP_PORT, LAMUR_HOST);
if(pack.serveBuild){
require('./build.js');
}
console.log(`FRONT APP LISTEN http://${LAMUR_HOST}:${APP_PORT}`);
console.log(`FRONT APP MODE: ${env.LAMUR_ENV}`);
module.exports = {
src: './src',
entry: {js: 'main.jsx', html: 'index.html'},
public: './public',
scss: {
shared: `@import '/main.scss';`
},
build: './build'
};
{
"name": "lamur",
"version": "0.1.0",
"main": "bin/index.js",
"dependencies": {
"@babel/plugin-transform-runtime": "^7.8.3",
"dotenv": "^8.2.0",
"express": "^4.17.1",
"node-async-router": "^0.0.2",
"node-sass": "^4.13.1",
"observable-sequence": "^0.0.4",
"recursive-watch": "^1.1.4",
"terser": "^4.6.3",
"yargs": "^15.1.0"
},
"scripts": {
"start": "node index.js",
"test": "mocha",
"build": "node build.js",
"serve-production": "node buildServe.js",
"webpack": "webpack"
},
"devDependencies": {
"@babel/core": "^7.8.3",
"@babel/plugin-transform-modules-amd": "^7.8.3",
"@babel/plugin-transform-react-jsx": "^7.8.3",
"@babel/plugin-transform-typescript": "^7.8.3",
"@babel/preset-env": "*",
"@babel/template": "^7.8.3",
"babel-plugin-module-resolver": "^4.0.0",
"babel-preset-es2015": "*",
"chai": "^4.2.0",
"compression": "^1.7.4",
"gulp": "^4.0.2",
"gulp-babel": "*",
"gulp-plumber": "*",
"mocha": "^7.0.1",
"browserify": "*",
"core-js": "^3.6.4"
}
}
var sqrt = Math.sqrt;
var abs = Math.abs || function(n){return n>0 ? n: -n}
var Point = function( x, y ){
if(arguments.length === 0){
x = 0;
y = 0;
}
if(x instanceof Point || x.hasOwnProperty('x')) {
y = x.y;
x = x.x;
}
this.x = x;
this.y = y;
};
Point.prototype = {
add: null, addClone: null,
sub: null, subClone: null,
mul: null, mulClone: null,
div: null, divClone: null,
mod: null, modClone: null,
passable: true,
borrow: function(from) {
this.x = from.x;
this.y = from.y;
return this;
},
join: function(symbol) {
return this.x+symbol+this.y;
},
set: function(x, y) {
this.x = x;
this.y = y;
return this;
},
middle: function(point) {
return new Point((this.x+point.x)/2, (this.y+point.y)/2)
},
clone: function(){
return new Point( this.x, this.y );
},
distance: function( obj ){
var tmp;
return sqrt( (tmp = this.x - obj.x) * tmp + (tmp = this.y - obj.y) * tmp );
},
distancePow2: function( obj ){
var tmp;
return (tmp = this.x - obj.x) * tmp + (tmp = this.y - obj.y) * tmp;
},
manhattan: function( obj ){
return abs(this.x - obj.x) + abs(this.y - obj.y);
},
magnitude: function() {
return sqrt(this.x*this.x+this.y*this.y);
},
rotate: function(angleRAD) {
var angle = Math.atan2(this.y, this.x) + angleRAD;
var length = this.magnitude();
return new Point(Math.cos(angle)*length,Math.sin(angle)*length)
},
getAngle: function(p) {
if(p)
return Math.atan2(p.y - this.y, p.x - this.x);
else
return Math.atan2(this.y, this.x);
},
toString: function(fixed) {
fixed === void 0 && (fixed = 3);
return 'x:'+this.x.toFixed(fixed)+' y:'+this.y.toFixed(fixed);
},
normalize: function() {
return this.div(this.magnitude())
},
projection: function(to) {
var angle = this.getAngle()-to.getAngle();
return to.clone().normalize().mul(this.magnitude()*Math.cos(angle));
},
lerp: function(to, amount) {
return new Point(this.x+(to.x-this.x)*amount,this.y+(to.y-this.y)*amount)
},
clamp: function(n) {
return new Point((n/2%1)+(this.x|0), (n/2%1)+(this.y|0));
}
};
Point.prototype.getter = Point.prototype.clone;
[
{
name: 'add',
sign: '+'
},
{
name: 'sub',
sign: '-'
},
{
name: 'mul',
sign: '*'
},
{
name: 'div',
sign: '/'
},
{
name: 'mod',
sign: '%'
}
].forEach(function( el ){
var sign = el.sign;
Point.prototype[ el.name ] = Function( 'objOrX, y', [
'if( y === void 0 ){',
' if( typeof objOrX === \'number\' ){',
' this.x '+ sign +'= objOrX;',
' this.y '+ sign +'= objOrX;',
' }else{',
' this.x '+ sign +'= objOrX.x;',
' this.y '+ sign +'= objOrX.y;',
' }',
'}else{',
' this.x '+ sign +'= objOrX;',
' this.y '+ sign +'= y;',
'}',
'return this;'
].join('\n') );
Point.prototype[ el.name +'Clone'] = Function( 'objOrX, y',
'return this.clone().'+el.name+'(objOrX, y);'
)
});
export {Point};
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<base href="/"/>
<title>Lamur-DB</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<script>$ENV$</script>
<script src="core/Path.js"></script>
<script src="core/Require.js"></script>
<script src="core/LivestReloading.js"></script>
<script src="core/Observer.js"></script>
<script src="core/DOM.js"></script>
<script src="core/Localizer.js"></script>
<script src="core/Random.Seeded.js"></script>
<script src="core/data/store/Store.js"></script>
<script src="core/data/Transform.js"></script>
<script src="core/Route.js"></script>
$COMMIT$
<style>
.slider-background {
background: #104361;
height: 2px;
position: absolute;
left: 8px;
top: 7px;
right: 8px;
}
.slider {
position: relative;
height: 32px;
}
.slider-start {
position: absolute;
left:0;
}
.slider-start:before {
content: '';
height: 6px;
top: 5px;
left: 5px;
position: absolute;
background: #104361;
width: 6px;
border-radius: 50%;
z-index: 2;
}
.slider-end {
position: absolute;
right:0;
}
.slider-end:before {
content: '';
height: 6px;
top: 5px;
right: 5px;
position: absolute;
background: #104361;
width: 6px;
border-radius: 50%;
z-index: 2;
}
.slider-end__label {
position: absolute;
text-align: center;
left: 0;
font-family: Tahoma;
top: -3px;
}
.slider-start__label {
position: absolute;
text-align: center;
right: 4px;
font-family: Tahoma;
top: -3px;
}
.slider-drag {
width: 12px;
height: 12px;
margin-left: 2px;
top: 2px;
border: 2px solid #104361;
box-sizing: border-box;
cursor: pointer;
position: absolute;
z-index: 1;
border-radius: 50%;
background: #fff;
}
.grhm {
width: 50%;
left:25%;
position: relative;
}
.slider-zone {
position: absolute;
left: 8px;
right: 8px;
height: 8px;
top: 4px;
}
.slider-hover-val {
position: absolute;
top: -28px;
transform: translate(-40%);
font-family: Tahoma;
}
</style>
</head>
<body>
BLOG
<script>
define('0', [
'2D/Point.js',
'cmp/Slider/Slider.jsx',
'cmp/Checkbox/Checkbox.jsx',
'cmp/Radio/Radio.jsx',
'cmp/List/List.jsx'
], function(
{Point}, {Slider}, {Checkbox}, {Radio}, {List}){
var s = window.s = new Store( {
val: 33,
from: -10,
to: 100,
bool: false,
bool2: true,
ku: {
list: [
1, 2, 3, 4, 5, 6, 13
],
kuk: {
l: [
{title: 'name'},
{title: 'name2'},
{title: 'name3'},
{title: 'name4'},
]
}
}
} );
var Input = function( cfg ){
var dom = D.h( 'input', { cls: "field__input", attr: { type: 'number' } } );
if( cfg.bind ){
cfg.bind.sub( function( val ){
dom.value = val;
} );
dom.addEventListener( 'input', function(){
cfg.bind.set( dom.value );
} )
}
return dom;
};
var val = s.bind( 'val' ), to = s.bind( 'to' );
val = new Store.Value.Number( 33 ), to = new Store.Value.Number( 333 );
D.div( { renderTo: document.body, class: 'grhm' }, 'aaa',
//Input({bind: s.bind('val')}),
D.div( {},
new Array( 5 ).join( '.' ).split( '' ).map( () => {
var group = new Store.Value.String( 'gr3' );
console.log( 123 );
return [
window.sl1 = new Slider( {
value: val, from: -10, to: to, step: 0.01,
afterInit: function(){
//console.log(this.value)
D.div( { renderTo: this.dragEl, cls: 'slider-hover-val' }, T.toFixed( this.value, 0 ) );
}
} ),
window.sl2 = new Slider( {
value: to, from: -10, to: 300, step: 0.01,
afterInit: function(){
D.div( { renderTo: this.dragEl, cls: 'slider-hover-val' }, T.toFixed( this.value, 0 ) );
}
} ),
window.sl2 = new Slider( {
value: to, from: -10, to: 300, step: 0.01,
afterInit: function(){
D.div( { renderTo: this.dragEl, cls: 'slider-hover-val' }, T.toFixed( this.value, 0 ) );
}
} ),
window.sl3 = new Checkbox( {
value: s.bind( 'bool' )
} ),
window.sl4 = new Checkbox( {
value: s.bind( 'bool2' )
} ),
new Array( 10 ).join( '.' ).split( '' ).map( function( a, i ){
return [ new Radio( {
value: 'gr' + i,
group: group
} ), 'gr' + i + ' ' ]
} ),
new List( {
items: s.bind( 'ku.list' )
}, ( item, index, first, last ) => {
return D.div( {}, index, ' ', item.get(),' ',
(_)=>{first.hook(val=>_(val?'First': 'NotFirst'))}, ' | ',
(_)=>{last.hook(val=>_(val?'Last': 'NotLast'))}
)
} ),
new List( {
items: s.bind( 'ku.kuk.l' )
}, ( item ) => {
console.log(item);
return D.div( {}, item.val('title'))
} )
]
} )
) );
});
</script>
</body>
</html>
import {Component} from 'cmp/Component.jsx';
import { Radio } from "cmp/Radio/Radio.jsx";
var Checkbox = new Component({
ctor: function(cfg) {
Object.assign(this, cfg);
this.createDOM();
this.initBinding();
this.afterInit && this.afterInit();
},
prop: {
value: {type: Boolean, default: false}
},
createDOM: function() {
var val = this.value,
el = this.dom = this.inputEl = D.h('input', {
attr: {type: 'checkbox'},
cls: 'picker-button__field',
onchange: function() {
val.set(el.checked);
}
});
this.afterDOM && this.afterDOM();
},
initBinding: function() {
var _self = this;
this.sub([this.value], function (val) {
console.log(val)
_self.inputEl.checked = !!val;
});
}
});
Checkbox.prototype.name = 'checkbox';
export { Checkbox };
\ No newline at end of file
const slice = [].slice;
const Component = function(cfg) {
var original = cfg;
var _ctor = function(cfg, children){
if(!(this instanceof _ctor)){
return new _ctor(cfg, children);
}
this.store = new Store();
this._apply(cfg);
arguments.length > 1 && this._children.call(this, slice.call(arguments, 1));
this.__un = new D.Unsubscribe();
original.ctor && original.ctor.apply(this);
};
_ctor.prototype = Object.assign(Object.create(Component.prototype), cfg);
_ctor.constructor = _ctor;
return _ctor;
};
Component.prototype = {
prop: {},
_children: function(children) {
this.children = children;
},
_apply: function(cfg) {
var prop = this.prop;
for(var key in cfg){
var val = cfg[key];
if(key in prop){
if(val instanceof Store.StoreBinding || val instanceof Store.HookPrototype){
this[key] = val;
}else{
this[key] = new Store.Value[prop[key].type.name](val);
}
}else{
this[key] = val;
}
}
for(key in prop){
if(!(key in cfg)){
var property = prop[key];
if(!property.optional){
this[ key ] = new Store.Value[ property.type.name ]();
if(property.default){
this[ key ].set( property.default );
}
}
}
}
},
'~destroy': function() {
var pointer = this.dom.parentNode;
if(!pointer){
pointer = this.dom;
}
var allHooked = [].slice.call(pointer.querySelectorAll('[data-hooked]'));
for( var i = 0, _i = allHooked.length; i < _i; i++ ){
var un = allHooked[ i ].__un;
if(!un)
continue;
var uns = allHooked[ i ].__un;
for( var j = 0, _j = uns.length; j < _j; j++ ){
var unSubscribe = uns[ j ];
unSubscribe();
}
delete allHooked[ i ].__un;
}
if(this.dom.parentNode){
pointer.removeChild( this.dom );
}
this.dom = void 0;
this.__un.un();
for(var key in this)
this.hasOwnProperty(key) && delete this[key];
},
sub: function() {
var un = this.store.sub.apply(this.store, arguments);
this.__un.add(un);
}
};
var Property = function(type) {
this.name = type;
};
Property.prototype = {
set: function(val) {
return val;
},
get: function(val) {
return val;
},
compare: function(val1, val2) {
return val1 === val2;
}
};
Component.Property = {
Any: new Property('Any')
};
export { Component };
\ No newline at end of file
import {Component} from 'cmp/Component.jsx';
var x = 0;
var List = new Component({
ctor: function(){
this.lastBound = this.dom = document.createTextNode('');
this.items = this.items.array();
this.els = [];
this.initEls();
this.bindEvents();
console.log(this.dom);
console.log(window.w = this.items)
},
bindEvents: function() {
var els = this.els,
_self = this;
this.items.on('add', function(item, after, before, pos) {
var count = _self.items.length;
var wrapped = _self.createItem(item, pos, count);
if(wrapped.isLast.get()){
els[els.length-1].isLast.set(false);
els.push(wrapped);
D.insertBefore(wrapped.el, _self.lastBound);
}else{
var where = _self.lastBound;
// IF NEXT ITEM EL\S IS EMPTY
for(var p = pos, _p = els.length; p < _p; p++){
var wrappedItem = els[p];
if(wrappedItem.el && wrappedItem.el.length){
where = wrappedItem.el[0];
break;
}
}
els.splice(pos, 0, wrapped);
D.insertBefore(wrapped.el, where);
}
if(pos === 0){
if(els.length>1){
els[ 1 ].isFirst.set( false );
}
}
for( var i = 0, _i = els.length; i < _i; i++ ){
var el = els[ i ];
el.index.set(i);
}
});
this.items.on('remove', function(item,before,after,pos) {
var subEl;
var item = _self.els[pos],
els = item.el,
parent;
if(!els || !els.length){
return;
}
parent = els[0].parentNode;
var isInDOM = D.isInDOM(els[0]);
while((subEl = els.pop())){
isInDOM && D._recursiveCmpCall(parent, subEl, 'beforeRemoveFromDOM');
parent.removeChild(subEl);
isInDOM && D._recursiveCmpCall(parent, subEl, 'afterRemoveFromDOM');
}
_self.els.splice(pos, 1);
for( var i = 0, _i = _self.els.length; i < _i; i++ ){
var el = _self.els[ i ];
el.index.set(i);
}
if(_self.els.length>0){
_self.els[0].isFirst.set(true);
_self.els[_i - 1].isLast.set(true);
}
});
},
createItem: function(item, i, _i) {
var index = new Store.Value.Integer(i),
isFirst = new Store.Value.Boolean(i === 0),
isLast = new Store.Value.Boolean(i === _i-1),
storeItem = new Store(item),
data = {isFirst: isFirst, isLast: isLast, index: index, item: storeItem},
fragment = [],
children = this.children;
storeItem.setParent(this.items, void 0, item);
for( var j = 0, _j = children.length; j < _j; j++ ){
var child = children[ j ],
el = child.call(this, storeItem, index, isFirst, isLast, this);
fragment.push(el);
}
data.el = fragment;
return data;
},
prop: {
items: {type: Array}
},
initEls: function(a,b) {
var items = this.items.get(),
fragment = document.createDocumentFragment();
var arr = [];
for( var i = 0, _i = items.length; i < _i; i++ ){
var item = items[ i ];
var wrapped = this.createItem(item, i, _i);
this.els.push(wrapped);
//D.appendChild(fragment, wrapped.el)
arr.push(wrapped.el);
}
//this.dom = arr;
//fragment.appendChild(this.dom);
arr.push(this.dom);
this.dom = arr;//fragment;
//.parentNode.insertBefore(fragment, this.dom);
//this.dom.parentNode.replaceChild(fragment, this.dom);
}
});
export { List };
\ No newline at end of file
import {Component} from 'cmp/Component.jsx';
import { List } from "cmp/List/List.jsx";
var PlainSelect = new Component( {
ctor: function(){
var vals = this.values.get()
.split('\n')
.map(a=>a.trim())
.filter(String),
_self = this;
this.values.set(vals.map(function(val) {
var item = {},
selected = false;
if(val[0] === '>'){
val = val.substr(1);
selected = true;
}
var tokens = val.split(':');
if(tokens.length === 1){
tokens.push( tokens[ 0 ] );
}
item.id = tokens[0].trim();
item.text = tokens.slice(1).join(':').trim();
if(selected){
_self.value.set( item.id );
}
return item;
}));
this.createDOM();
this.initBinding();
this.afterInit && this.afterInit();
},
prop: {
value: { type: Component.Property.Any, default: false },
values: { type: Component.Property.Any, default: '' },
map: { type: Function, default: false }
},
createDOM: function() {
this.dom = <select>
{
this.values.get().map(item=>
D.h('OPTION', {value: item.id}, item.text)
)
}
</select>;
},
initBinding: function() {
var _self = this;
this.value.sub(function (val) {
_self.dom.value = val;
});
_self.dom.addEventListener('change', function () {
_self.value.set(_self.dom.value);
});
}
});
export {PlainSelect};
\ No newline at end of file
import {Component} from 'cmp/Component.jsx';
var Radio = new Component({
ctor: function() {
this.createDOM();
this.initBinding();
this.afterInit && this.afterInit();
},
prop: {
value: {type: Component.Property.Any, default: false},
group: {type: Component.Property.Any, default: false}
},
createDOM: function() {
var val = this.value,
group = this.group,
el = this.dom = this.inputEl = D.h('input', {
attr: {type: 'radio'},
cls: 'picker-button__field',
onchange: function() {
if(el.checked){
group.set(val.get())
}
}
});
this.afterDOM && this.afterDOM();
},
initBinding: function() {
var _self = this;
this.sub([this.value, this.group], function (val, group) {
_self.inputEl.checked = val === group;
});
}
});
Radio.prototype.name = 'radio';
export { Radio };
\ No newline at end of file
import {Point} from '2D/Point.js';
import {Component} from 'cmp/Component.jsx';
var Slider = new Component({
ctor: function(cfg) {
Object.assign(this, cfg);
this.createDOM();
this.initBinding();
this.initEvents();
this.afterInit && this.afterInit();
},
prop: {
from: {type: Number},
to: {type: Number},
value: {type: Number, default: 0},
step: {type: Number, optional: true},
},
createDOM: function() {
this.dom = D.div({cls: 'slider'},
D.div({cls: 'slider-background'}),
this.zoneEl = D.div({cls: 'slider-zone'}),
D.div({cls: 'slider-start'},
D.div({cls: 'slider-start__label'}, T.toFixed(this.from,0) ),
),
D.div({cls: 'slider-end'},
D.div({cls: 'slider-end__label'}, T.toFixed(this.to, 0) )
),
this.dragEl = D.div({cls: 'slider-drag', style: {left: '0px'}})
);
this._updateUI = this._updateUI.bind(this);
this.afterDOM && this.afterDOM();
},
initEvents: function() {
var _self = this;
D.mouse.down(this.dom, function(e) {
var pos = new Point(e.clientX, e.clientY);
_self.getBound();
_self.calculateValue(pos);
_self.updateUI();
var update = D.AnimationFrame(function(pos) {
_self.calculateValue(pos);
_self.updateUI();
});
var un = D.mouse.move(document, function(e) {
e.preventDefault();
e.stopPropagation();
pos.x = e.clientX;
pos.y = e.clientY;
update(pos);
}, true);
D.overlay.show();
//un.add( D.mouse.up(_self.dom, un) );
un.add(function() {
D.overlay.hide();
});
un.add( D.mouse.up(window, un) );
});
},
getBound: function() {
var bound = this.zoneEl.getBoundingClientRect();
this.bound = {
left: bound.left,
top: bound.top,
height: bound.height,
width: bound.width
};
},
calculateValue: function(pos) {
var bound = this.bound;
var val = Math.min(Math.max(0, pos.x-bound.left), bound.width);
this.setValue(this.from.get()+(val/bound.width*(this.delta)));
},
afterAddToDOM: function() {
this.getBound();
this.updateUI();
},
bound: null,
_updateRequested: false,
_updateUI: function() {
this._updateRequested = false;
this.dragEl.style.left = (this.value.get()-this.from.get())/(this.delta)*this.bound.width+'px';
},
updateUI: function() {
if(this.bound){
if(!this._updateRequested){
this._updateRequested = true;
requestAnimationFrame(this._updateUI)
}
}
},
initBinding: function() {
var _self = this;
this.sub([this.value, this.from, this.to], function (val, from, to) {
_self.delta = to - from;
_self.setValue(val);
_self.updateUI();
});
},
lastValue: null,
setValue: function(val, silent) {
var inVal = val;
val = Math.min(this.to.get(), Math.max(this.from.get(), val));
if('step' in this){
var step = this.step.get();
val = Math.round(val/step)*step;
}
if(val !== this.lastValue || inVal !== val){
this.lastValue = val;
if(!silent) this.value.set(val);
}
}
});
export { Slider };
\ No newline at end of file
const Table = function(cfg){
Object.assign(this, cfg);
if(this.childrenEl && this.dom){
D.appendChild(this.dom, this.childrenEl);
}
if(this.childrenEl && !this.dom){
this.dom = this.childrenEl.parentNode;
if(!this.dom){
this.dom = this.childrenEl;
}
}
const children = this.childrenEl = this.childrenEl || D.div({
cls: 'cmp-table__children'
});
this.dom = this.dom || D.div({
cls: D.cls('cmp-table', cfg.cls)
}, children);
this.currentSlice = [];
this.childrenEls = [];
if(this.items instanceof Store.StoreBinding){
this.items.sub((items)=>{
this.items = items;
this.updateChildren();
});
}
if(this.action){
let actions = this.action;
delete this.action;
this.getActionDelegate((name, obj)=>{
if(name in actions){
actions[name].call(this, obj.data, obj)
}else{
console.warn('CMP.TABLE:error → action `'+name+'` is not specified!', obj);
}
});
}
setTimeout(()=>this.updateChildren(),0);
};
let regExpsCache = {};
Table.prototype = {
key: 'id',
currentSlice: [],
childrenEls: [],
sort: [{name: 'asc'}],
childrenEl: null,
filterText: '',
filterFn: () => true,
afterFilter: ()=>true,
emptyTpl: ()=><div class={'empty-table'}/>,
buildFilterRegExp: function(text) {
return new RegExp(text.replace(/[\[\]\(\)\?\*\.\+]/g,'').replace(/\s+/g,'|'), 'ig');
},
filter: function(text) {
this.filterText = text;
this.filterRegExp = this.buildFilterRegExp(text);
},
fetch: function() {
const sortFn = typeof this.sort === 'function';
const field = sortFn ? null :Object.keys(this.sort[0])[0]
this.currentSlice = (this.items || [])
.filter(item=>this.filterFn.call(item, this.filterText, this))
.sort(sortFn?this.sort:(a,b)=>a[field] > b[field] ? 1 : a[field] < b[field] ? -1 : 0)
.map(data=>({data, dom: null}));
this.afterFilter(this.getSelected());
},
updateChildren: function() {
this.fetch();
D.removeChildren(this.childrenEl);
this.currentSlice.forEach((item) => {
D.appendChild(this.childrenEl, item.dom = this.itemTpl(item.data, this, item));
});
if(this.currentSlice.length === 0){
D.appendChild(this.childrenEl, this.emptyTpl(this.items));
}
},
updateChild: function(item) {
if(item.dom){
const dom = this.itemTpl(item.data, this, item);
item.dom.parentNode.replaceChild(dom, item.dom);
item.dom = dom;
}
},
removeChild: function(item, full) {
if(item.dom){
item.dom.parentNode.removeChild(item.dom);
item.dom = null;
this.currentSlice = this.currentSlice.filter(i=>!(i.data===item.data));
if(full)
this.items = this.items.filter(i=>!(i===item.data));
}
},
removeChildByData: function(data, full) {
const match = this.currentSlice.filter(i=>i.data===data),
item = match[0];
if(!item)
return;
this.removeChild(item, full);
},
updateChildByData: function(data) {
const match = this.currentSlice.filter(i=>i.data===data),
item = match[0];
if(!item)
return;
if(item.dom){
const dom = this.itemTpl(item.data, this, item);
item.dom.parentNode.replaceChild(dom, item.dom);
item.dom = dom;
}
},
getSelected: function() {
return this.currentSlice.filter(i=>!i.hidden).map(i=>i.data)
},
highlight: function(text, filterText) {
if(!filterText)
return text;
let reg = regExpsCache[filterText] || (regExpsCache[filterText] = this.buildFilterRegExp(filterText))
const txts = [];
return D.join(text.replace(reg, function(match) {
txts.push(match);
return '|||||'
}).split('|||||'), (i)=>D.span({cls: 'highlighted'}, txts[i]))
},
preventAction: true,
getActionDelegate: function(fn) {
var me = this;
return this.action || (this.action = function(e) {
const [type, val] = this.getAttribute('data-action').split(':');
const match = me.currentSlice.filter(({data})=>data[me.key]+'' === val+'');
if(!match || !match.length){
debugger
return;
}
if(fn){
fn(type, match[0]);
}else{
if( type === 'hide' ){
if( match.length ){
match[ 0 ].hidden = true;
me.updateChild( match[ 0 ] )
me.afterFilter( me.getSelected() );
}
}
if( type === 'toggle' ){
if( match.length ){
match[ 0 ].full = !match[ 0 ].full;
me.updateChild( match[ 0 ] )
}
}
}
me.preventAction && e.stopPropagation();
});
},
};
export default Table;
export { Table };
\ No newline at end of file
import '../labeledField/labeledFormField.scss';
import './dropdownField.scss';
import '../searchField/searchField.scss';
import IconSearch from '/svg/ic_search.svg';
import { Table } from "view/cmp/table/Table.jsx";
import { textFilter } from "text/String.TextFilter.jsx";
import Input from "view/cmp/field/Input.jsx";
const noHighlight = {
highlight: (a)=>a
};
const DropdownField = D.declare('view.cmp.DropdownField', function(cfg, children){
this.textTpl = this.valueItemTpl = (item,me)=>me?me.highlight(item.name,dropStore.get('filterText')):item.name;
this.valueTpl = items=>D.join(items.map((item, i)=>this.valueItemTpl(item,noHighlight)), ', ');
Object.assign(this, cfg);
let isOpen = this.isOpen = new Store.Value.Boolean(false);
if(!cfg.bind)
cfg.bind = {sub: ()=>{console.error('BIND FOR DROPDOWN IS NOT SPECIFIED')}, set: ()=>{}, get: ()=>{}}
let table;
let dropStore = new Store({
filterText: ''
});
let action = this.action = {
CHANGE_JOB: function(set, item) {
if(cfg.singlevalue === true){
cfg.bind.set(void 0);
cfg.bind.set(item);
isOpen.set(false);
table.updateChildren();
}else{
let vals = cfg.bind.get();
if( set ){
vals = vals.concat( item )
}else{
vals = vals.filter( v => v.name !== item.name );
}
cfg.bind.set(vals);
if(cfg.multivalue === false){
isOpen.set(false);
table.removeChildByData(item, false);
dropStore.set('filterText', '');
}
}
},
CLEAR: function () {
dropStore.set('filterText', '');
},
BLUR: function () {
minput && minput.blur();
}
};
let listen = (e) => {
let target = e.target;
do{
if(target === this.dom){
return;
}
}while((target = target.parentNode));
isOpen.set(false);
}, minput;
isOpen.hook((v)=>{
if(v === true){
document.addEventListener('click', listen);
}else{
document.removeEventListener('click', listen);
}
});
this.dom = <div class="form-field">
<div class="form-field__label">
<span class="form-field__label-text">{cfg.label}</span>
<div class={D.cls('dropdown-field', {
'dropdown-field--opened': isOpen
})} >
{cfg.input
? <div className="form-field__wrapper">
{minput = <Input type="text" class="form-field__input form-field__input--selection" bind={dropStore.bind('filterText')}
placeholder={cfg.placeholder} on={{
focus: ()=>isOpen.set(true),
keydown:(e)=>{
if(e.key === 'Enter'){
cfg.onEnter && cfg.onEnter(dropStore.get('filterText'));
}
}
}}/>}
<span className="form-field__indicator"/>
</div>
: <button class="dropdown-field__toggler" on={{ click: () => isOpen.toggle() }}>
<span class={D.cls(
"dropdown-field__placeholder", {
"dropdown-field__placeholder--filled": _=>cfg.bind.sub(val=>_(!!(cfg.multivalue ? val && val.length : val && val.name)))
} )}>{_ => {
cfg.bind.sub( val => {
if( val && ( cfg.multivalue ? val.length : val && val.name ) ){
if( cfg.multivalue ){
_( this.valueTpl( val, table ) )
}else{
_( this.valueItemTpl( val ) )
}
}else{
_( cfg.placeholder );
}
} );
}}</span>
</button>
}
<div class="dropdown-field__tooltip">
{children}
{cfg.filterBox
? <div class="dropdown-field__search">
<div class="dropdown-field__search-field">
<label className="search-field">
<IconSearch width={"20"} height={"20"}/>
<Input type="search" class="search-field__input" bind={dropStore.bind('filterText')} placeholder={cfg.placeholder || 'Выбрать из списка'}/>
</label>
{/*<div class="dropdown-field__search-clear">*/}
{/*<IconClose width={"20"} height={"20"}/>*/}
{/*</div>*/}
</div>
<button class="dropdown-field__clear" type={"button"} onClick={()=>dropStore.set('filterText','')}>Сбросить</button>
</div>
: null}
{table = this.table = new Table({
sorters: [{id: 'title', type: String}],
sort: [{title: 'asc'}],
filterFn: function(text, me) {
if(cfg.filterFn){
if( !cfg.filterFn.call( this, text, me ) ){
return false;
}
}
if(cfg.singlevalue){
return this.name !== cfg.bind.get().name;
}
return (cfg.multivalue ?(text ? textFilter(this.name.toLowerCase(), text) : true):
cfg.bind.get().filter( i => i.name === this.name ).length === 0 && (text ? textFilter(this.name.toLowerCase(), text):true))
},
childrenEl: <ul className={cfg.multivalue?"dropdown-field__list":"form-field__selection-list"}/>,
itemTpl: (item, me, bonus)=>{
if(cfg.multivalue){
return <li>
<label className="picker-button picker-button--admin picker-button--multiple">
<input
checked={cfg.bind.get().filter( i => i.name === item.name ).length === 1}
type="checkbox" className="picker-button__field" onChange={
( e ) =>
action.CHANGE_JOB( e.currentTarget.checked, item )
}/>
<span className="picker-button__indicator"/>
<span className="picker-button__desc">{this.textTpl.call( me, item, me )}</span>
</label>
</li>;
}else{
return <li onClick={
( e ) =>
action.CHANGE_JOB( true, item )
}>
<span className="picker-button__desc">{this.textTpl.call( me, item, me )}</span>
</li>;
}
},
emptyTpl: cfg.emptyTpl || ((items)=><li>Нет должностей</li>),
items: []
})}
</div>
</div>
</div>
</div>;
cfg.items && cfg.items.sub(items=>{
table.items = items || [];
table.updateChildren();
});
cfg.bind.sub( Store.debounce(val => {
console.log('items changed',val)
table.updateChildren();
}, 100));
dropStore.sub('filterText', Store.debounce(function(text) {
table.filterText = (text+'').trim().toLowerCase();
table.updateChildren();
}, 200));
});
export default DropdownField;
export {DropdownField};
.dropdown-field {
position: relative;
width: 100%;
min-width: 330px;
}
.dropdown-field__toggler {
@include btn-reset;
position: relative;
box-sizing: border-box;
padding: 14px 25px;
width: 100%;
height: 50px;
text-align: left;
font-weight: 500;
font-size: 17px;
line-height: 20px;
color: $text-main;
background-color: #F6F6F6;
border: 1px solid rgba(208, 209, 209, 0.8);
border-radius: 2px;
transition: all 0.3s ease;
&::after {
content: "";
position: absolute;
top: 22px;
right: 22px;
width: 0;
height: 0;
border-style: solid;
border-width: 6px 5px 0 5px;
border-color: $gray-dark transparent transparent transparent;
pointer-events: none;
transition: all 0.3s ease;
}
&:hover {
background-color: #F2F2F2;
border-color: #D7D8D7;
}
//&:focus,
.dropdown-field--opened & {
outline: none;
background-color: $bg-main;
border-color: $accent-main;
border-radius: 2px 2px 0 0;
box-shadow: 0px 3px 10px #CFF3D9;
&::after {
transform: scale(1,-1);
border-color: $accent-main transparent transparent transparent;
}
& + .dropdown-field__tooltip {
max-height: none;
opacity: 1;
pointer-events: auto;
}
}
}
.dropdown-field__placeholder {
display: inline-block;
vertical-align: top;
max-width: calc(100% - 20px);
color: rgba(166, 166, 166, 0.5);
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
.dropdown-field__placeholder--filled {
color: $text-main;
}
.dropdown-field__tooltip {
position: absolute;
top: 100%;
left: 0;
right: 0;
padding: 20px;
max-height: 0;
background-color: $bg-main;
border-radius: 0 0 2px 2px;
box-shadow: 0px 3px 10px #ADADAD;
z-index: 1;
opacity: 0;
pointer-events: none;
overflow: hidden;
transition: opacity 0.3s ease;
.dropdown-field--opened & {
max-height: none;
opacity: 1;
pointer-events: auto;
}
/*
.dropdown-field__toggler:focus-within + & {
max-height: none;
opacity: 1;
pointer-events: auto;
}*/
/*
&:focus-within {
max-height: none;
opacity: 1;
pointer-events: auto;
}*/
}
.dropdown-field__search {
position: relative;
display: flex;
flex-direction: column;
}
.dropdown-field__search-field {
position: relative;
display: block;
}
.dropdown-field__search-clear {
@include hover;
position: absolute;
top: 0;
right: 0;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
width: 40px;
height: 40px;
cursor: pointer;
}
.dropdown-field__clear {
@include btn-reset;
align-self: flex-end;
margin: 5px 0;
font-weight: 500;
font-size: 15px;
line-height: 30px;
color: $accent-dark;
transition: all 0.3s ease;
&:hover,
&:focus,
&:active {
color: $accent-medium;
outline: none;
}
&:disabled {
color: $gray-medium;
}
}
.dropdown-field__list {
@include list-reset;
max-height: 250px;
overflow-y: auto;
}
.dropdown-field__button {
padding-top: 10px;
button {
min-width: 136px;
}
}
var NS = window['NS'] = function(cfg) {
if(cfg.consts){
this.consts = NS.apply(NS.apply({}, this.consts), cfg.consts);
delete cfg.consts;
}
NS.apply(this, cfg);
this._update = this._update.bind(this);
this.resize = this.resize.bind(this);
this.init();
};
NS.apply = function(a,b) {
for(var k in b){
a[k] = b[k];
}
return a;
};
(function(NS, glob, document){
var ArraySlice = [].slice;
var svgNS = 'http://www.w3.org/2000/svg';
var setters = {
cls: function(el) {
return function(cls) {
var tagName = el.tagName.toLowerCase();
if( tagName in customElementClassNameSetter ){
customElementClassNameSetter[tagName](el, cls);
}else{
el.className = D.cls.apply(D, arguments);
}
}
},
attr: function(el, attrName) {
return function(val) {
if(val !== void 0 && val !== false){
el.setAttribute( attrName, val );
}else{
el.removeAttribute(attrName)
}
}
}
};
var used = {
cls: true, className: true, 'class': true, classname: true,
attr: true, style: true, renderTo: true,
prop: true, bind: true,
on: true, renderto: true
};
// ~jsx h function
var domEl = function( type, cfg ){
var typeOfType = typeof type;
if(typeOfType === 'function'){
// factory passed
return type(cfg, ArraySlice.call(arguments, 2));
}else if(typeof type === 'object' && type.hook){
// hooked future element creation
return type.hook(cfg, ArraySlice.call(arguments, 2));
}
cfg = cfg || {};
var cls = cfg.cls || cfg['class'] || cfg.className,
style = cfg.style,
attr = cfg.attr || {},
prop = cfg.prop,
on = cfg.on || {},
renderTo = cfg.renderTo,
el = cfg.el || (type in customElementCreate ? customElementCreate[type](type, cfg) : document.createElement( type )),
classList = el.classList;
var i, _i, name;
for(i in cfg)
if( cfg.hasOwnProperty(i)){
name = i.toLowerCase();
if(name in used)
continue;
if(name.substr(0, 2) === 'on'){
// it is an event
on[ name.substr( 2 ) ] = cfg[ i ];
}else{
// attribute
attr[i] = cfg[i];
}
}
if( cls ){
if(typeof cls === 'function'){
cls(setters.cls(el));
}else if(typeof cls === 'object' && cls.hook){
cls.hook(setters.cls(el));
}else if(typeof cls === 'object'){
var resolvedCls = Array.isArray(cls)?D.cls.apply(D, cls):D.cls(cls);
if(typeof resolvedCls === 'function'){
resolvedCls(setters.cls(el));
}else{
setters.cls(el)(resolvedCls);
}
}else{
setters.cls(el)(cls);
}
}
if( style ){
if(typeof style === 'string'){
el.style = style;
}else{
NS.apply( el.style, style );
}
}
for( i in attr ){
if(attr.hasOwnProperty( i )){
if( typeof attr[ i ] === 'function' ){
attr[ i ]( setters.attr( el, i ) );
}else if(typeof attr[ i ] === 'object'&& attr[ i ] !== null && attr[ i ].hook){
return attr[ i ].hook(setters.attr(el, i));
}else{
setters.attr( el, i )( attr[ i ] );
}
}
}
for( i in prop ){
prop.hasOwnProperty( i ) && ( el[ i ] = prop[ i ] );
}
for( i in on ){
on.hasOwnProperty( i ) && el.addEventListener( i, on[ i ] );
}
for( i = 2, _i = arguments.length; i < _i; i++ ){
var child = arguments[ i ];
D.appendChild( el, child );
}
if( renderTo ){
D.appendChild( renderTo, el );
}
return el;
};
var D = NS.D = {
svg: null,
label: null,
div: null,
span: null,
path: null,
canvas: null,
input: null,
textarea: null,
tBody: null,
tHead: null,
th: null,
td: null,
tr: null,
Text: function( val ){ return document.createTextNode( val );}
};
'div,template,span,input,label,canvas,span,textarea,table,tr,td,th,tBody,tHead'.split( ',' ).forEach( function( name ){
D[ name ] = function(){
return domEl.apply( null, [ name ].concat(ArraySlice.call(arguments)))
};
} );
var customElementCreate = {};
var customElementClassNameSetter = {};
var createElementSVG = function(name) {
var el = document.createElementNS( svgNS, name );
el.setAttribute( 'xmlns', svgNS );
return el;
},
setClassNameSVG = function(el, cls) {
el.setAttribute( 'class', cls );
};
'svg,path,circle,g,defs,marker'.split( ',' ).forEach( function( name ){
customElementCreate[name] = createElementSVG;
customElementClassNameSetter[name] = setClassNameSVG;
D[ name ] = function(cfg){
if( !cfg ){
cfg = {};
}
cfg.el = createElementSVG( name );
return domEl.apply( null, [ null ].concat(ArraySlice.call(arguments)))
};
} );
D.html = function(cfg){
var el = domEl('div', cfg);
el.innerHTML = ArraySlice.call(arguments,1).join('\n');
return el;
};
D.h = domEl;
D.f = function(cfg, children) {
return children;
};
D.isInDOM = function(el) {
return document.body.contains(el);
};
D._recursiveCmpCall = function(el, sub, fnName){
if(sub.__cmp)
sub.__cmp[fnName] && sub.__cmp[fnName](el);
for( var i = 0, _i = sub.childNodes.length; i < _i; i++ ){
var childNode = sub.childNodes[ i ];
D._recursiveCmpCall(sub, childNode, fnName);
}
};
D.replaceChildren = function(el) {
D.removeChildren(el);
D.appendChild.apply(D, arguments);
};
D.removeChildren = function(el){
var subEl;
var isInDOM = D.isInDOM(el);
while((subEl = el.lastChild)){
isInDOM && D._recursiveCmpCall(el, subEl, 'beforeRemoveFromDOM');
el.removeChild(subEl);
isInDOM && D._recursiveCmpCall(el, subEl, 'afterRemoveFromDOM');
}
};
var DFragment = DocumentFragment;
D.insertBefore = function(newChild, refChild) {
var f = document.createDocumentFragment();
D.appendChild(f, newChild);
var el = refChild.parentNode,
subEl = newChild;
var isInDOM = D.isInDOM(el);
isInDOM && D._recursiveCmpCall(el, f, 'beforeAddToDOM');
el.insertBefore( f, refChild );
isInDOM && D._recursiveCmpCall(el, {childNodes: newChild}, 'afterAddToDOM');
};
D.appendChild = function(el, subEl){
var type = typeof subEl;
if(subEl === null){
return ;
}
var notObject = type !== 'object';
var isHook = !notObject && ('hook' in subEl);
if(isHook){
type = 'function'; notObject = true;
}
if( notObject ){
// TODO : add hook
if( type === 'function' ){
var tmp = D.Text('');//( {cls: 'zero-wrapper'} );
el.appendChild( tmp );
var list = [];
el.setAttribute('data-hooked', 'yep');
// maybe do it through outer weak map?
el.__un = el.__un || [];
var hookFn;
if(isHook){
hookFn = function(val){
// TODO: append 2 TextNodes and remove children between them
if(list.length === 1){
list[0].textContent = val;
}else{
if(el instanceof DFragment){
el = tmp.parentNode;
}
if(!el)
return;
for( var i = 0, _i = list.length; i < _i; i++ ){
list[ i ].parentNode === el && el.removeChild( list[ i ] );
}
var fragment = document.createDocumentFragment();
D.appendChild( fragment, ArraySlice.call( arguments ) );
list = ArraySlice.call( fragment.childNodes );
if( !tmp || !tmp.parentNode )
return;
el.insertBefore( fragment, tmp );
}
};
el.__un.push(subEl.hook( hookFn ));
}else{
hookFn = function(){
// TODO: append 2 TextNodes and remove children between them
if(el instanceof DFragment){
el = tmp.parentNode;
}
if(!el)
return;
for( var i = 0, _i = list.length; i < _i; i++ ){
list[ i ].parentNode === el && el.removeChild( list[ i ] );
}
var fragment = document.createDocumentFragment();
D.appendChild( fragment, ArraySlice.call( arguments ) );
list = ArraySlice.call(fragment.childNodes);
if(!tmp || !tmp.parentNode)
return;
el.insertBefore(fragment, tmp);
};
el.__un.push(subEl( hookFn ));
}
}else if( subEl !== void 0 && subEl !== false && subEl !== null ){
el.appendChild( D.Text( subEl ) );
}
}else if('dom' in subEl){
var isInDOM = D.isInDOM(el);
subEl.dom.__cmp = subEl;
isInDOM && D._recursiveCmpCall(el, subEl.dom, 'beforeAddToDOM');
D.appendChild(el, subEl.dom);
//el.appendChild( subEl.dom );
isInDOM && D._recursiveCmpCall(el, subEl.dom, 'afterAddToDOM');
//subEl
}else if( Array.isArray(subEl) ){
subEl.forEach(subEl => D.appendChild( el, subEl ) );
}else{
var isInDOM = D.isInDOM(el);
isInDOM && D._recursiveCmpCall(el, subEl, 'beforeAddToDOM');
el.appendChild( subEl );
isInDOM && D._recursiveCmpCall(el, subEl, 'afterAddToDOM');
}
};
D.join = function(arr, delimiter){
var out = [], isFn = typeof delimiter === 'function';
for( var i = 0, _i = arr.length - 1; i < _i; i++ ){
out.push(arr[i], isFn?delimiter(i):delimiter);
}
if(i < _i+1)
out.push(arr[i]);
return out;
};
var dpID = 1;
var DataPiece = function(id){this.id = id;};
DataPiece.prototype = {value: void 0, update: function(){}};
var DataPieceFactory = function(refs, fn, scope) {
var id = dpID++;
var dp = new DataPiece(id);
refs.push(dp);
fn.call(scope, function(val) {
dp.value = val;
dp.update();
});
return dp;
};
var RefHash = function(){};RefHash.prototype = {any: false};
D.__cls = function(args, refs) {
return function(update) {
var i, _i, lastCls,
constructCls = function() {
var cls = D._cls(args, [], 0);
if(lastCls !== cls)
update(lastCls = cls);
};
for( i = 0, _i = refs.length; i < _i; i++ )
refs[ i ].update = constructCls;
constructCls();
};
};
D._cls = function(args, refs, depth) {
var out = [], i = 0, _i = args.length, token, tmp, key;
for(;i<_i;i++){
token = args[i];
if(typeof token === 'string' && token){
out.push( token );
}else if(typeof token === 'object'){
if(token instanceof DataPiece){
token.value && out.push( token.value );
}else if ( token.hook ){
args[i] = DataPieceFactory(refs, token.hook, token);
}else if(Array.isArray(token)){
tmp = D._cls(token, refs, depth+1);
// TODO check for push tmp
tmp && out.push( token );
}else{
for(key in token){
if(token[key] === null)
continue;
if(token[key] instanceof DataPiece){
token[key].value && out.push(key);
}else if(typeof token[key] === 'function'){
token[ key ] = DataPieceFactory(refs, token[ key ]);
}else if(typeof token[key] === 'object' && token[key].hook){
token[key] = DataPieceFactory(refs, token[ key ].hook, token[key])
}else{
token[ key ] && out.push( key );
}
}
}
}else if(typeof token === 'function'){
args[i] = DataPieceFactory(refs, args[i]);
}
}
return depth === 0 && refs.length ? D.__cls(args, refs): out.join(' ');
};
D.cls = function() {
return D._cls(arguments, [], 0);
};
D.escapeCls = function(cls) {
return (cls+'').replace(/[^a-zA-Z0-9\-_]/g,'');
};
var _construct = function(ctor, cfg, p) {
//if it is not an arrow function
if('prototype' in ctor && ctor.prototype.constructor === ctor){
var cls = new ctor(cfg || {}, p);
return cls;//'dom' in cls ? cls.dom : cls;
}else{
return ctor(cfg || {}, p);
}
};
var usage = {};
var populate = function(name, construct) {
var tokens = name.split('.'),
last = tokens.pop(),
first = tokens.shift();
// ES 6 consts are not in global scope. So we can not just add vars to window
var pointer = first?
new Function('glob', 'return typeof '+first+' !== "undefined"?'+first+':(glob["'+first+'"] = {})')(glob)
:glob;
try{
tokens.reduce( function( pointer, token, i, full ){
return pointer[ token ] || ( pointer[ token ] = {} );
}, pointer )[ last + '' ] = construct;
}catch(e){
console.error('can not populate', name)
}
return construct;
};
D.declare = function(name, ctor) {
var uses;
if(typeof ctor === 'object'){
var original = ctor;
var _ctor = function(a,b,c,d){
if(!(this instanceof _ctor)){
return new _ctor(a,b,c,d);
}
original.ctor && original.ctor.apply(this, arguments);
};
_ctor.prototype = ctor;
_ctor.constructor = _ctor;
ctor = _ctor;
}
if(name in usage){
log('updated', `${name} (${usage[name].instances.length})`)
usage[ name ].ctor = ctor;
uses = usage[ name ].instances;
for( var i = 0, _i = uses.length; i < _i; i++ ){
var u = uses[ i ], d = u.dom;
u.dom = _construct(ctor, u.cfg, u.p);
if(d.parentNode){
d.parentNode.replaceChild( u.dom, d )
}
}
}else{
log('declared', `${name}`);
uses = (usage[ name ] = {ctor: ctor, instances: []}).instances;
}
return populate(name, function construct (cfg, p) {
var dom = _construct(ctor, cfg, p);
uses.push({dom: dom, cfg: cfg, p: p});
return dom;
});
};
var _log = [], later = false,
realLog = function() {
later = false;
var aggregated = _log.reduce(function(s, item) {
(s[item.evt] || (s[item.evt] = [])).push(item);
return s;
}, {});
_log.length = 0;
for(var evt in aggregated){
console.log('DOM:'+evt+' → '+aggregated[evt].map(function(item) {
return item.args.join(' ');
}).join(', '));
}
};
var log = function(evt) {
_log.push({type: 'log', evt: evt, args: ArraySlice.call(arguments, 1)});
if(!later)
later = setTimeout(realLog, 3000);
};
var emptyFn = function() {};
D.Unsubscribe = function(fn) {
this.fn = [];
fn && this.fn.push(fn);
};
D.Unsubscribe.prototype = {
un: function() {
var fn;
while((fn = this.fn.pop()))
fn();
},
add: function(fn) {
typeof fn !== 'function' && (fn = getCallableFunction(fn));
this.fn.push(fn);
}
};
var getCallableFunction = function(obj) {
if(obj instanceof D.Unsubscribe){
return function() {
obj.un();
}
}
};
var unsubscribable = function(name) {
return function(el, fn, arg) {
typeof fn !== 'function' && (fn = getCallableFunction(fn));
el.addEventListener(name, fn, arg);
return new D.Unsubscribe(function() {
el.removeEventListener(name, fn, arg);
});
};
};
D.mouse = {
down: unsubscribable('mousedown'),
up: unsubscribable('mouseup'),
move: unsubscribable('mousemove'),
over: unsubscribable('mouseover'),
};
D.AnimationFrame = function(fn) {
var requested = false,
arg,
update = function() {
fn.call(null, arg);
requested = false;
};
return function(a) {
arg = a;
if(!requested){
requestAnimationFrame(update);
requested = true;
}
};
};
D.overlay = {
inited: false,
show: function() {
this.init();
this.el.style.display = 'block';
},
hide: function() {
this.init();
this.el.style.display = 'none';
},
init: function() {
if(this.inited)
return;
this.inited = true;
this.el = D.div({
renderTo: document.body,
cls: 'D-overlay', style: {display: 'none', position: 'absolute', zIndex:10000, left: 0, right: 0, top: 0, bottom: 0}})
this.el.addEventListener('mousemove', function(e) {
e.preventDefault();
e.stopPropagation();
}, true)
}
};
})(window['NS'], typeof window !== "undefined" ? window :
typeof WorkerGlobalScope !== "undefined" ? self :
typeof global !== "undefined" ? global :
typeof GLOBAL !== "undefined" ? GLOBAL :
Function("return this;")(), document);
var D = NS.D,
div = D.div,
span = D.span,
view = {
page: {},
cmp: {}
};
async function subscribe() {
if(window.nolive)
return;
let response = {};
try{
response = await fetch( "/[live]" );
}catch( e ){
}
if (response.status === 502) {
} else if (response.status !== 200) {
// An error - let's show it
//debugger
//showMessage(response.statusText);
// Reconnect in one second
} else {
// Get and show the message
try{
let message = await response.text();
let data = JSON.parse( message ),
should = data.filter(live =>
[...document.scripts]
.map((a)=>a.src.replace(location.protocol+'//'+location.host,''))
.indexOf(live.file)>-1
).forEach(a=>{
try{
eval( a.content )
console.log('Reloaded: '+a.file);
}catch(e){
console.error(e)
}
});
}catch(e){
console.error(e)
}
//showMessage(message);
// Call subscribe() again to get the next message
}
setTimeout(subscribe, 1000);
}
setTimeout(subscribe, 10000);
\ No newline at end of file
(function(w) {
var L = function() {
},
l = L.prototype = {
_plural: function(n) {
return (n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)
},
plural: function(num) {
return arguments[l._plural(num)+1];
}
};
window.Localizer = window.L = new L;
})(window);
var Observable = (function(){
'use strict';
var ArraySlice = [].slice;
var Observable = function(){
this._clearListeners();
};
Observable.prototype = {
on: function( k, v ){
( this._listeners[ k ] || ( this._listeners[ k ] = [] ) ).push( v );
var _self = this;
return function ReleaseObservable(){
_self.un( k, v );
};
},
un: function( k, v ){
var list = this._listeners[ k ];
if( list ){
var id = list.indexOf( v );
if( id > -1 ){
list.splice( id, 1 );
}
}
},
fire: function( k ){
console.log(k)
var listeners = this._listeners[ k ],
listener;
if( listeners === void 0 )
return;
for( var i = 0, _i = listeners.length; i < _i; i++ ){
listener = listeners[ i ];
if( listener ){
listener.apply( this, ArraySlice.call( arguments, 1 ) );
}
}
},
once: function( k, v ){
var _self = this,
wrap = function(){
v.apply( this, arguments );
_self.un( k, wrap )
};
this.on( k, wrap );
},
_clearListeners: function(){
this._listeners = {};
}
};
return Observable;
})();
typeof module === 'object' && (module.exports = Observable);
\ No newline at end of file
// It is mostly node.js posix path.
window.__Path = (function(){
var splitPathRe =
/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;
var Path = {
dirname: function( path ){
var result = Path.posixSplitPath( path ),
root = result[ 0 ],
dir = result[ 1 ];
if( !root && !dir ){
// No dirname whatsoever
return '.';
}
if( dir ){
// It has a dirname, strip trailing slash
dir = dir.substr( 0, dir.length - 1 );
}
return root + dir;
},
trim: function(result) {
if( result[ 0 ] === '/' )
return result.substr( 1 );
return result;
},
resolve: function(){
var resolvedPath = '',
resolvedAbsolute = false;
for( var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i-- ){
var path = ( i >= 0 ) ? arguments[ i ] : '/';
// Skip empty and invalid entries
if( typeof path !== 'string' ){
throw new TypeError( 'Arguments to path.resolve must be strings' );
}else if( !path ){
continue;
}
resolvedPath = path + '/' + resolvedPath;
resolvedAbsolute = path[ 0 ] === '/';
}
// At this point the path should be resolved to a full absolute path, but
// handle relative paths to be safe (might happen when process.cwd() fails)
// Normalize the path
resolvedPath = Path.normalizeArray( resolvedPath.split( '/' ),
!resolvedAbsolute ).join( '/' );
return Path.trim(( ( resolvedAbsolute ? '/' : '' ) + resolvedPath ) || '.');
},
normalizeArray: function( parts, allowAboveRoot ){
var res = [];
for( var i = 0; i < parts.length; i++ ){
var p = parts[ i ];
// ignore empty parts
if( !p || p === '.' )
continue;
if( p === '..' ){
if( res.length && res[ res.length - 1 ] !== '..' ){
res.pop();
}else if( allowAboveRoot ){
res.push( '..' );
}
}else{
res.push( p );
}
}
return res;
},
join: function(){
var path = '';
for( var i = 0; i < arguments.length; i++ ){
var segment = arguments[ i ];
if( typeof segment !== 'string' ){
throw new TypeError( 'Arguments to path.join must be strings' );
}
if( segment ){
if( !path ){
path += segment;
}else{
path += '/' + segment;
}
}
}
return Path.normalize( path );
},
basename: function( path, ext ){
var f = Path.posixSplitPath( path )[ 2 ];
// TODO: make this comparison case-insensitive on windows?
if( ext && f.substr( -1 * ext.length ) === ext ){
f = f.substr( 0, f.length - ext.length );
}
return f;
},
posixSplitPath: function( filename ){
return splitPathRe.exec( filename ).slice( 1 );
},
normalize: function( path ){
var isAbsolute = Path.isAbsolute( path ),
trailingSlash = path && path[ path.length - 1 ] === '/';
// Normalize the path
path = Path.normalizeArray( path.split( '/' ), !isAbsolute ).join( '/' );
if( !path && !isAbsolute ){
path = '.';
}
if( path && trailingSlash ){
path += '/';
}
return ( isAbsolute ? '/' : '' ) + path;
},
// posix version
isAbsolute: function( path ){
return path.charAt( 0 ) === '/';
}
};
return Path;
})();
\ No newline at end of file
function mulberry32(a) {
var out = function() {
var t = a += 0x6D2B79F5;
t = Math.imul(t ^ t >>> 15, t | 1);
t ^= t + Math.imul(t ^ t >>> 7, t | 61);
return ((t ^ t >>> 14) >>> 0) / 4294967296;
};
out.getSeed = function() {
return a;
};
out.setSeed = function(A) {
a = A;
};
out.setStringSeed = function(str) {
str = str.replace(/[^0-9a-z]/g,'').substr(0,12);
if(str.length === 0)str = '1';
a = parseInt(str,36);
};
out.getStringSeed = function() {
return a.toString(36);
};
return out;
}
Math.random.seeded = mulberry32(Math.floor(Math.random()*4294967296));
\ No newline at end of file
//
let self = window;
self.fetch||(self.fetch=function(e,n){return n=n||{},new Promise(function(t,s){var r=new XMLHttpRequest,o=[],u=[],i={},a=function(){return{ok:2==(r.status/100|0),statusText:r.statusText,status:r.status,url:r.responseURL,text:function(){return Promise.resolve(r.responseText)},json:function(){return Promise.resolve(JSON.parse(r.responseText))},blob:function(){return Promise.resolve(new Blob([r.response]))},clone:a,headers:{keys:function(){return o},entries:function(){return u},get:function(e){return i[e.toLowerCase()]},has:function(e){return e.toLowerCase()in i}}}};for(var c in r.open(n.method||"get",e,!0),r.onload=function(){r.getAllResponseHeaders().replace(/^(.*?):[^\S\n]*([\s\S]*?)$/gm,function(e,n,t){o.push(n=n.toLowerCase()),u.push([n,t]),i[n]=i[n]?i[n]+","+t:t}),t(a())},r.onerror=s,r.withCredentials="include"==n.credentials,n.headers)r.setRequestHeader(c,n.headers[c]);r.send(n.body||null)})});
var ansispan = function (str) {
Object.keys(ansispan.foregroundColors).forEach(function (ansi) {
var span = '<span style="color: ' + ansispan.foregroundColors[ansi] + '">';
str = str.replace(
new RegExp(String.fromCharCode(33)+'\\[' + ansi + 'm', 'g'),
span
).replace(
new RegExp( String.fromCharCode( 33 ) +'\\[0;' + ansi + 'm', 'g'),
span
);
});
str = str.replace(/\033\[1m/g, '<b>').replace(/\033\[22m/g, '</b>');
str = str.replace(/\033\[3m/g, '<i>').replace(/\033\[23m/g, '</i>');
str = str.replace(/\033\[m/g, '</span>');
str = str.replace(/\033\[0m/g, '</span>');
return str.replace(/\033\[39m/g, '</span>')
.replace(/\[90m/g, ' ');
};
ansispan.foregroundColors = {
'30': 'black',
'31': 'red',
'32': 'green',
'33': 'yellow',
'34': 'blue',
'35': 'purple',
'36': 'cyan',
'37': 'white'
};
;(function(Path){
'use strict';
var log = console.log;
/*var log = function() {
console.log.apply(console, ['Define'].concat([].slice.call(arguments)));
};*/
if(window.env.LAMUR_ENV !== 'PRODUCTION'){
window.onerror = function( message, source, lineno, colno, error ){
fetch( source )
.then( function( resp ){
return resp.text();
} )
.then( function( data ){
if( data.match( /^(unknown|Error|error)/ ) !== null ){
var erDiv = D.div( { cls: 'error-block', renderTo: document.body },
D.input( {
attr: { type: 'button', value: 'Hide' }, on: {
click: function(){
erDiv.parentNode.removeChild( erDiv );
}
}
} ) )
var dataEl = D.div();
erDiv.appendChild( dataEl )
dataEl.innerHTML = ansispan( data )
}
} )
.catch();
var urla = source.substr( document.location.origin.length );
urla[ 0 ] === '/' && ( urla = urla.substr( 1 ) );
if( define.waiting[ urla ] ){
define( urla, [], function(){
} );
console.error( 'LOADER: сделаем вид что ', '`' + source.substr( document.location.origin.length ) + '`', 'загрузилось, но вообще — нет. Его поджидали:', define.waiting[ urla ] );
console.error( source, message, error );
}
};
}
var head = document.getElementsByTagName( 'head' )[ 0 ];
window.allLoaded = {css: {}, js: {}, jsList: [], cssList: []}
var cssLoader = function( fileName ){
var link = document.createElement( 'link' );
link.setAttribute( 'rel', 'stylesheet' );
link.setAttribute( 'type', 'text/css' );
link.setAttribute( 'href', fileName );
head.appendChild( link );
if(!window.allLoaded.css[fileName]){
window.allLoaded.css[ fileName ] = true;
window.allLoaded.cssList.push( fileName );
}
return true;
};
var jsLoader = function( fileName ){
var script = document.createElement( 'script' );
script.setAttribute( 'type', script.type = 'text/javascript' );
script.onload = function(a,b,c){
};
script.onerror = function(a,b,c){
if(fileName.indexOf('Fields')>-1)debugger
console.log('kkk',a,b,c)
};
script.setAttribute( 'src', script.src = fileName );
head.appendChild( script );
if(!window.allLoaded.js[fileName]){
window.allLoaded.js[ fileName ] = true;
window.allLoaded.jsList.push( fileName );
}
};
var InstantLoaders = [
{ name: '.scss', loader: cssLoader },
{ name: '.css', loader: cssLoader },
{ name: '.jsx', loader: jsLoader },
{ name: '.js', loader: jsLoader },
{ name: '.tsx', loader: jsLoader },
{ name: '.ts', loader: jsLoader },
{ name: '.svg', loader: jsLoader },
];
var definitions = {};
var waiting = {};
var resolve = function(base, file) {
if(file[0] !== '.' && file[0] !== '/')file = '/'+file;
return Path.resolve(Path.dirname(base), file);
};
var _define = function(name) {
var definition = definitions[name];
if(definition.notResolved === 0){
definition.fn.apply(null, definition.deps.map(function(dep) {
return dep === 'exports' ? definition.exports : definitions[dep].exports
}));
(waiting[definition.fileName] || []).forEach(function(name) {
definitions[name].notResolved--;
_define(name)
});
}
};
window.define = function(fileName, deps, fn) {
fileName = Path.trim(fileName);
deps = deps.map(function(dep) {
return dep === 'exports' ? 'exports': resolve(fileName, dep);
});
if(!(fileName in definitions) || definitions[fileName].notResolved !== 0){
definitions[ fileName ] = { fileName: fileName, deps: deps, fn: fn, exports: {} };
var notResolved = 0;
for( var i = 0, _i = deps.length; i < _i; i++ ){
const dep = deps[ i ];
if( dep === 'exports' )
continue;
var skip = false;
if( !( dep in definitions ) ){
var matched = false;
for( var j = 0, _j = InstantLoaders.length; j < _j; j++ ){
const instantLoader = InstantLoaders[ j ];
if( dep.substr( -instantLoader.name.length ).toLowerCase() === instantLoader.name ){
if( !( dep in definitions ) ){
definitions[ dep ] = { exports: {} };
if( instantLoader.loader( dep ) ){
skip = true;
definitions[ dep ].notResolved = 0;
}else{
definitions[ dep ].loading = true;
}
matched = true;
}
break;
}
}
if(!matched){
if( !( dep in definitions ) ){
definitions[ dep ] = { exports: {} };
if( jsLoader( dep ) ){
skip = true;
}else{
definitions[ dep ].loading = true;
}
matched = true;
}
}
}else{
skip = definitions[ dep ].notResolved === 0;
}
if( !skip ){
( waiting[ dep ] || ( waiting[ dep ] = [] ) ).push( fileName );
notResolved++;
}
}
definitions[ fileName ].notResolved = notResolved;
}else{
definitions[ fileName ].fn = fn;
}
_define(fileName)
};
window.define.definitions = definitions;
window.define.waiting = waiting;
})(window.__Path);
\ No newline at end of file
var Route = function(url) {
if(!(this instanceof Route))
return new Route(url);
//url.replace(/(:[a-zA-Z0-9\-_]+)(?=\/|$)/g)
var list = this.list = [];
var rand = Math.random().toString(36).substr(2);
this.splitted = url.replace(/(:([^\/]+))(?=\/|$)/g, function(str, full, token) {
list.push(token);
return rand;
}).split(rand);
var splitted = this.splitted,
out = [];
for( var i = 0, _i = splitted.length; i < _i; i++ ){
out.push(splitted[i].replace(/[.*+?^${}()|[\]\\]/g, '\\$&'));
i<_i-1 && out.push('([^\\/]+)');
}
this.RegExp = new RegExp('^'+out.join('')+'/?$', 'i');
};
Route.prototype = {
generate: function(data) {
var list = this.list,
splitted = this.splitted,
out = [];
for( var i = 0, _i = splitted.length; i < _i; i++ ){
out.push(splitted[i]);
i<_i-1 && out.push(data[list[i]] || '');
}
return out.join('');
},
load: function(url) {
var matched = url.match(this.RegExp),
data = {}, list = this.list,
silent = true;
var state = history.state || {},
stateData = state.data || {},
dataNotMatched = false;
for( var i = 0, _i = list.length; i < _i; i++ ){
var listElement = list[ i ];
data[listElement] = matched[i+1];
if(stateData[listElement] !== matched[i+1])
dataNotMatched = true;
}
for(i in stateData){
if(!(i in data)){
dataNotMatched = true;
}
}
if(state.place === this.pageName || dataNotMatched){
silent = false;
}
ACTION.NAVIGATE.execute(this.pageName, data, silent);
/*
store.set({
'navigation.current': event.state.place,
'navigation.data': event.state.data || {}
});
*/
},
match: function(url) {
return (url.match(this.RegExp) !== null? 1 : 0)*url.length;
}
};
var jwtDecode = function (jwt) {
function b64DecodeUnicode(str) {
return decodeURIComponent(atob(str).replace(/(.)/g, function (m, p) {
var code = p.charCodeAt(0).toString(16).toUpperCase();
if (code.length < 2) {
code = '0' + code;
}
return '%' + code;
}));
}
function decode(str) {
var output = str.replace(/-/g, "+").replace(/_/g, "/");
switch (output.length % 4) {
case 0:
break;
case 2:
output += "==";
break;
case 3:
output += "=";
break;
default:
throw "Illegal base64url string!";
}
try {
return b64DecodeUnicode(output);
} catch (err) {
return atob(output);
}
}
var jwtArray = jwt.split('.');
return {
header: decode(jwtArray[0]),
payload: decode(jwtArray[1]),
signature: decode(jwtArray[2])
};
};
if(typeof window !== 'undefined'){
window.Route = Route;
window.jwtDecode = jwtDecode;
}
var Transform = (function() {
'use strict';
var hookAndConvert = function(fn) {
return function(hook, a) {
var type = typeof hook;
var notObject = type !== 'object';
var isHook = !notObject && ('hook' in hook);
if(isHook){
type = 'function'; notObject = true;
}
if(notObject){
if( type === 'function' ){
var last, val;
if(isHook){
return {hook: function(draw) {
return hook.hook(function(arg) {
val = fn(arg, a);
if(last === val)
return;
return draw(last = val);
});
}};
}else{
return function(draw) {
return hook(function(arg) {
val = fn(arg, a);
if(last === val)
return;
return draw(last = val);
});
};
}
}
}else{
return hook;
}
}
};
var Transform = {
toFixed: hookAndConvert(function(val, digits) {
return (val-0).toFixed(digits);
})
};
return Transform;
})();
typeof module === 'object' && (module.exports = Transform);
(typeof window === 'object') && (window.T = window.Transform = Transform);
\ No newline at end of file
const checkSpecialCharsAndEmpty = (value) => {
const thisValue = value.toString().toLowerCase();
let hasSpecialChars = false;
if (typeof value === 'string') {
hasSpecialChars = thisValue.includes('\n')
|| thisValue.includes('\t')
|| thisValue.includes(',')
|| thisValue.includes(';')
|| thisValue.includes('.')
|| thisValue.includes('"')
|| thisValue.includes('\'')
|| thisValue.includes('`')
|| thisValue.includes('´')
|| thisValue.includes(' ')
|| thisValue.length === 0;
}
return hasSpecialChars;
};
const separatorOrLineBreak = (length, elementIdx, separator) => (
length - 1 === elementIdx ? '\n' : separator
);
const escapeDoubleQuotesInsideElement = (element) => {
const thisElement = element.replace(/"/g, '""');
return thisElement;
};
const appendElement = (element, lineLength, elementIdx, separator) => {
const includesSpecials = checkSpecialCharsAndEmpty(element);
let thisElement = element;
if (includesSpecials) {
thisElement = escapeDoubleQuotesInsideElement(thisElement);
}
return (
includesSpecials
? `"${thisElement}"${separatorOrLineBreak(lineLength, elementIdx, separator)}`
: `${thisElement}${separatorOrLineBreak(lineLength, elementIdx, separator)}`
);
};
const toCSV = data => convertArrayOfObjectsToCSV(data, {separator: ','});
const convertArrayOfObjectsToCSV = (data, { header, separator }) => {
const array = [...data];
let csv = '';
if (header) {
header.forEach((headerEl, i) => {
const thisHeaderEl = headerEl || (headerEl === 0 ? 0 : '');
csv += appendElement(thisHeaderEl, header.length, i, separator);
});
}
array.forEach((row, idx) => {
const thisRow = Object.keys(row);
if (!header && idx === 0) {
thisRow.forEach((key, i) => {
const value = key || (key === 0 ? 0 : '');
csv += appendElement(value, thisRow.length, i, separator);
});
}
thisRow.forEach((key, i) => {
const value = row[key] || (row[key] === 0 ? 0 : '');
csv += appendElement(value, thisRow.length, i, separator);
});
});
return csv;
};
\ No newline at end of file
export default ["Emma","Isabella","Emily","Madison","Ava","Olivia","Sophia","Abigail","Elizabeth","Chloe","Samantha","Addison","Natalie","Mia","Alexis","Alyssa","Hannah","Ashley","Ella","Sarah","Grace","Taylor","Brianna","Lily","Hailey","Anna","Victoria","Kayla","Lillian","Lauren","Kaylee","Allison","Savannah","Nevaeh","Gabriella","Sofia","Makayla","Avery","Riley","Julia","Leah","Aubrey","Jasmine","Audrey","Katherine","Morgan","Brooklyn","Destiny","Sydney","Alexa","Kylie","Brooke","Kaitlyn","Evelyn","Layla","Madeline","Kimberly","Zoe","Jessica","Peyton","Alexandra","Claire","Madelyn","Maria","Mackenzie","Arianna","Jocelyn","Amelia","Angelina","Trinity","Andrea","Maya","Valeria","Sophie","Rachel","Vanessa","Aaliyah","Mariah","Gabrielle","Katelyn","Ariana","Bailey","Camila","Jennifer","Melanie","Gianna","Charlotte","Paige","Autumn","Payton","Faith","Sara","Isabelle","Caroline","Genesis","Isabel","Mary","Zoey","Gracie","Megan","Haley","Mya","Michelle","Molly","Stephanie","Nicole","Jenna","Natalia","Sadie","Jada","Serenity","Lucy","Ruby","Eva","Kennedy","Rylee","Jayla","Naomi","Rebecca","Lydia","Daniela","Bella","Keira","Adriana","Lilly","Hayden","Miley","Katie","Jade","Jordan","Gabriela","Amy","Angela","Melissa","Valerie","Giselle","Diana","Amanda","Kate","Laila","Reagan","Jordyn","Kylee","Danielle","Briana","Marley","Leslie","Kendall","Catherine","Liliana","Mckenzie","Jacqueline","Ashlyn","Reese","Marissa","London","Juliana","Shelby","Cheyenne","Angel","Daisy","Makenzie","Miranda","Erin","Amber","Alana","Ellie","Breanna","Ana","Mikayla","Summer","Piper","Adrianna","Jillian","Sierra","Jayden","Sienna","Alicia","Lila","Margaret","Alivia","Brooklynn","Karen","Violet","Sabrina","Stella","Aniyah","Annabelle","Alexandria","Kathryn","Skylar","Aliyah","Delilah","Julianna","Kelsey","Khloe","Carly","Amaya","Mariana","Christina","Alondra","Tessa","Eliana","Bianca","Jazmin","Clara","Vivian","Josephine","Delaney","Scarlett","Elena","Cadence","Alexia","Maggie","Laura","Nora","Ariel","Elise","Nadia","Mckenna","Chelsea","Lyla","Alaina","Jasmin","Hope","Leila","Caitlyn","Cassidy","Makenna","Allie","Izabella","Eden","Callie","Haylee","Caitlin","Kendra","Karina","Kyra","Kayleigh","Addyson","Kiara","Jazmine","Karla","Camryn","Alina","Lola","Kyla","Kelly","Fatima","Tiffany","Kira","Crystal","Mallory","Esmeralda","Alejandra","Eleanor","Angelica","Jayda","Abby","Kara","Veronica","Carmen","Jamie","Ryleigh","Valentina","Allyson","Dakota","Kamryn","Courtney","Cecilia","Madeleine","Aniya","Alison","Esther","Heaven","Aubree","Lindsey","Leilani","Nina","Melody","Macy","Ashlynn","Joanna","Cassandra","Alayna","Kaydence","Madilyn","Aurora","Heidi","Emerson","Kimora","Madalyn","Erica","Josie","Katelynn","Guadalupe","Harper","Ivy","Lexi","Camille","Savanna","Dulce","Daniella","Lucia","Emely","Joselyn","Kiley","Kailey","Miriam","Cynthia","Rihanna","Georgia","Rylie","Harmony","Kiera","Kyleigh","Monica","Bethany","Kaylie","Cameron","Teagan","Cora","Brynn","Ciara","Genevieve","Alice","Maddison","Eliza","Tatiana","Jaelyn","Erika","Ximena","April","Marely","Julie","Danica","Presley","Brielle","Julissa","Angie","Iris","Brenda","Hazel","Rose","Malia","Shayla","Fiona","Phoebe","Nayeli","Paola","Kaelyn","Selena","Audrina","Rebekah","Carolina","Janiyah","Michaela","Penelope","Janiya","Anastasia","Adeline","Ruth","Sasha","Denise","Holly","Madisyn","Hanna","Tatum","Marlee","Nataly","Helen","Janelle","Lizbeth","Serena","Anya","Jaslene","Kaylin","Jazlyn","Nancy","Lindsay","Desiree","Hayley","Itzel","Imani","Madelynn","Asia","Kadence","Madyson","Talia","Jane","Kayden","Annie","Amari","Bridget","Raegan","Jadyn","Celeste","Jimena","Luna","Yasmin","Emilia","Annika","Estrella","Sarai","Lacey","Ayla","Alessandra","Willow","Nyla","Dayana","Lilah","Lilliana","Natasha","Hadley","Harley","Priscilla","Claudia","Allisson","Baylee","Brenna","Brittany","Skyler","Fernanda","Danna","Melany","Cali","Lia","Macie","Lyric","Logan","Gloria","Lana","Mylee","Cindy","Lilian","Amira","Anahi","Alissa","Anaya","Lena","Ainsley","Sandra","Noelle","Marisol","Meredith","Kailyn","Lesly","Johanna","Diamond","Evangeline","Juliet","Kathleen","Meghan","Paisley","Athena","Hailee","Rosa","Wendy","Emilee","Sage","Alanna","Elaina","Cara","Nia","Paris","Casey","Dana","Emery","Rowan","Aubrie","Kaitlin","Jaden","Kenzie","Kiana","Viviana","Norah","Lauryn","Perla","Amiyah","Alyson","Rachael","Shannon","Aileen","Miracle","Lillie","Danika","Heather","Kassidy","Taryn","Tori","Francesca","Kristen","Amya","Elle","Kristina","Cheyanne","Haylie","Patricia","Anne","Samara","Skye","Kali","America","Lexie","Parker","Halle","Londyn","Abbigail","Linda","Hallie","Saniya","Bryanna","Bailee","Jaylynn","Mckayla","Quinn","Jaelynn","Jaida","Caylee","Jaiden","Melina","Abril","Sidney","Kassandra","Elisabeth","Adalyn","Kaylynn","Mercedes","Yesenia","Elliana","Brylee","Dylan","Isabela","Ryan","Ashlee","Daphne","Kenya","Marina","Christine","Mikaela","Kaitlynn","Justice","Saniyah","Jaliyah","Ingrid","Marie","Natalee","Joy","Juliette","Simone","Adelaide","Krystal","Kennedi","Mila","Tamia","Addisyn","Aylin","Dayanara","Sylvia","Clarissa","Maritza","Virginia","Braelyn","Jolie","Jaidyn","Kinsley","Kirsten","Laney","Marilyn","Whitney","Janessa","Raquel","Anika","Kamila","Aria","Rubi","Adelyn","Amara","Ayanna","Teresa","Zariah","Kaleigh","Amani","Carla","Yareli","Gwendolyn","Paulina","Nathalie","Annabella","Jaylin","Tabitha","Deanna","Madalynn","Journey","Aiyana","Skyla","Yaretzi","Ada","Liana","Karlee","Jenny","Myla","Cristina","Myah","Lisa","Tania","Isis","Jayleen","Jordin","Arely","Azul","Helena","Aryanna","Jaqueline","Lucille","Destinee","Martha","Zoie","Arielle","Liberty","Marlene","Elisa","Isla","Noemi","Raven","Jessie","Aleah","Kailee","Kaliyah","Lilyana","Haven","Tara","Giana","Camilla","Maliyah","Irene","Carley","Maeve","Lea","Macey","Sharon","Alisha","Marisa","Jaylene","Kaya","Scarlet","Siena","Adyson","Maia","Shiloh","Tiana","Jaycee","Gisselle","Yazmin","Eve","Shyanne","Arabella","Sherlyn","Sariah","Amiya","Kiersten","Madilynn","Shania","Aleena","Finley","Kinley","Kaia","Aliya","Taliyah","Pamela","Yoselin","Ellen","Carlie","Monserrat","Jakayla","Reyna","Yaritza","Carolyn","Clare","Lorelei","Paula","Zaria","Gracelyn","Kasey","Regan","Alena","Angelique","Regina","Britney","Emilie","Mariam","Jaylee","Julianne","Greta","Elyse","Lainey","Kallie","Felicity","Zion","Aspen","Carlee","Annalise","Iliana","Larissa","Akira","Sonia","Catalina","Phoenix","Joslyn","Anabelle","Mollie","Susan","Judith","Destiney","Hillary","Janet","Katrina","Mareli","Ansley","Kaylyn","Alexus","Gia","Maci","Elsa","Stacy","Kaylen","Carissa","Haleigh","Lorena","Jazlynn","Milagros","Luz","Leanna","Renee","Shaniya","Charlie","Abbie","Cailyn","Cherish","Elsie","Jazmyn","Elaine","Emmalee","Luciana","Dahlia","Jamya","Belinda","Mariyah","Chaya","Dayami","Rhianna","Yadira","Aryana","Rosemary","Armani","Cecelia","Celia","Barbara","Cristal","Eileen","Rayna","Campbell","Amina","Aisha","Amirah","Ally","Araceli","Averie","Mayra","Sanaa","Patience","Leyla","Selah","Zara","Chanel","Kaiya","Keyla","Miah","Aimee","Giovanna","Amelie","Kelsie","Alisson","Angeline","Dominique","Adrienne","Brisa","Cierra","Paloma","Isabell","Precious","Alma","Charity","Jacquelyn","Janae","Frances","Shyla","Janiah","Kierra","Karlie","Annabel","Jacey","Karissa","Jaylah","Xiomara","Edith","Marianna","Damaris","Deborah","Jaylyn","Evelin","Mara","Olive","Ayana","India","Kendal","Kayley","Tamara","Briley","Charlee","Nylah","Abbey","Moriah","Saige","Savanah","Giada","Hana","Lizeth","Matilda","Ann","Jazlene","Gillian","Beatrice","Ireland","Karly","Mylie","Yasmine","Ashly","Kenna","Maleah","Corinne","Keely","Tanya","Tianna","Adalynn","Ryann","Salma","Areli","Karma","Shyann","Kaley","Theresa","Evie","Gina","Roselyn","Kaila","Jaylen","Natalya","Meadow","Rayne","Aliza","Yuliana","June","Lilianna","Nathaly","Ali","Alisa","Aracely","Belen","Tess","Jocelynn","Litzy","Makena","Abagail","Giuliana","Joyce","Libby","Lillianna","Thalia","Tia","Sarahi","Zaniyah","Kristin","Lorelai","Mattie","Taniya","Jaslyn","Gemma","Valery","Lailah","Mckinley","Micah","Deja","Frida","Brynlee","Jewel","Krista","Mira","Yamilet","Adison","Carina","Karli","Magdalena","Stephany","Charlize","Raelynn","Aliana","Cassie","Mina","Karley","Shirley","Marlie","Alani","Taniyah","Cloe","Sanai","Lina","Nola","Anabella","Dalia","Raina","Mariela","Ariella","Bria","Kamari","Monique","Ashleigh","Reina","Alia","Ashanti","Lara","Lilia","Justine","Leia","Maribel","Abigayle","Tiara","Alannah","Princess","Sydnee","Kamora","Paityn","Payten","Naima","Gretchen","Heidy","Nyasia","Livia","Marin","Shaylee","Maryjane","Laci","Nathalia","Azaria","Anabel","Chasity","Emmy","Izabelle","Denisse","Emelia","Mireya","Shea","Amiah","Dixie","Maren","Averi","Esperanza","Micaela","Selina","Alyvia","Chana","Avah","Donna","Kaylah","Ashtyn","Karsyn","Makaila","Shayna","Essence","Leticia","Miya","Rory","Desirae","Kianna","Laurel","Neveah","Amaris","Hadassah","Dania","Hailie","Jamiya","Kathy","Laylah","Riya","Diya","Carleigh","Iyana","Kenley","Sloane","Elianna","Jacob","Michael","Ethan","Joshua","Daniel","Alexander","Anthony","William","Christopher","Matthew","Jayden","Andrew","Joseph","David","Noah","Aiden","James","Ryan","Logan","John","Nathan","Elijah","Christian","Gabriel","Benjamin","Jonathan","Tyler","Samuel","Nicholas","Gavin","Dylan","Jackson","Brandon","Caleb","Mason","Angel","Isaac","Evan","Jack","Kevin","Jose","Isaiah","Luke","Landon","Justin","Lucas","Zachary","Jordan","Robert","Aaron","Brayden","Thomas","Cameron","Hunter","Austin","Adrian","Connor","Owen","Aidan","Jason","Julian","Wyatt","Charles","Luis","Carter","Juan","Chase","Diego","Jeremiah","Brody","Xavier","Adam","Carlos","Sebastian","Liam","Hayden","Nathaniel","Henry","Jesus","Ian","Tristan","Bryan","Sean","Cole","Alex","Eric","Brian","Jaden","Carson","Blake","Ayden","Cooper","Dominic","Brady","Caden","Josiah","Kyle","Colton","Kaden","Eli","Miguel","Antonio","Parker","Steven","Alejandro","Riley","Richard","Timothy","Devin","Jesse","Victor","Jake","Joel","Colin","Kaleb","Bryce","Levi","Oliver","Oscar","Vincent","Ashton","Cody","Micah","Preston","Marcus","Max","Patrick","Seth","Jeremy","Peyton","Nolan","Ivan","Damian","Maxwell","Alan","Kenneth","Jonah","Jorge","Mark","Giovanni","Eduardo","Grant","Collin","Gage","Omar","Emmanuel","Trevor","Edward","Ricardo","Cristian","Nicolas","Kayden","George","Jaxon","Paul","Braden","Elias","Andres","Derek","Garrett","Tanner","Malachi","Conner","Fernando","Cesar","Javier","Miles","Jaiden","Alexis","Leonardo","Santiago","Francisco","Cayden","Shane","Edwin","Hudson","Travis","Bryson","Erick","Jace","Hector","Josue","Peter","Jaylen","Mario","Manuel","Abraham","Grayson","Damien","Kaiden","Spencer","Stephen","Edgar","Wesley","Shawn","Trenton","Jared","Jeffrey","Landen","Johnathan","Bradley","Braxton","Ryder","Camden","Roman","Asher","Brendan","Maddox","Sergio","Israel","Andy","Lincoln","Erik","Donovan","Raymond","Avery","Rylan","Dalton","Harrison","Andre","Martin","Keegan","Marco","Jude","Sawyer","Dakota","Leo","Calvin","Kai","Drake","Troy","Zion","Clayton","Roberto","Zane","Gregory","Tucker","Rafael","Kingston","Dominick","Ezekiel","Griffin","Devon","Drew","Lukas","Johnny","Ty","Pedro","Tyson","Caiden","Mateo","Braylon","Cash","Aden","Chance","Taylor","Marcos","Maximus","Ruben","Emanuel","Simon","Corbin","Brennan","Dillon","Skyler","Myles","Xander","Jaxson","Dawson","Kameron","Kyler","Axel","Colby","Jonas","Joaquin","Payton","Brock","Frank","Enrique","Quinn","Emilio","Malik","Grady","Angelo","Julio","Derrick","Raul","Fabian","Corey","Gerardo","Dante","Ezra","Armando","Allen","Theodore","Gael","Amir","Zander","Adan","Maximilian","Randy","Easton","Dustin","Luca","Phillip","Julius","Charlie","Ronald","Jakob","Cade","Brett","Trent","Silas","Keith","Emiliano","Trey","Jalen","Darius","Lane","Jerry","Jaime","Scott","Graham","Weston","Braydon","Anderson","Rodrigo","Pablo","Saul","Danny","Donald","Elliot","Brayan","Dallas","Lorenzo","Casey","Mitchell","Alberto","Tristen","Rowan","Jayson","Gustavo","Aaden","Amari","Dean","Braeden","Declan","Chris","Ismael","Dane","Louis","Arturo","Brenden","Felix","Jimmy","Cohen","Tony","Holden","Reid","Abel","Bennett","Zackary","Arthur","Nehemiah","Ricky","Esteban","Cruz","Finn","Mauricio","Dennis","Keaton","Albert","Marvin","Mathew","Larry","Moises","Issac","Philip","Quentin","Curtis","Greyson","Jameson","Everett","Jayce","Darren","Elliott","Uriel","Alfredo","Hugo","Alec","Jamari","Marshall","Walter","Judah","Jay","Lance","Beau","Ali","Landyn","Yahir","Phoenix","Nickolas","Kobe","Bryant","Maurice","Russell","Leland","Colten","Reed","Davis","Joe","Ernesto","Desmond","Kade","Reece","Morgan","Ramon","Rocco","Orlando","Ryker","Brodie","Paxton","Jacoby","Douglas","Kristopher","Gary","Lawrence","Izaiah","Solomon","Nikolas","Mekhi","Justice","Tate","Jaydon","Salvador","Shaun","Alvin","Eddie","Kane","Davion","Zachariah","Dorian","Titus","Kellen","Camron","Isiah","Javon","Nasir","Milo","Johan","Byron","Jasper","Jonathon","Chad","Marc","Kelvin","Chandler","Sam","Cory","Deandre","River","Reese","Roger","Quinton","Talon","Romeo","Franklin","Noel","Alijah","Guillermo","Gunner","Damon","Jadon","Emerson","Micheal","Bruce","Terry","Kolton","Melvin","Beckett","Porter","August","Brycen","Dayton","Jamarion","Leonel","Karson","Zayden","Keagan","Carl","Khalil","Cristopher","Nelson","Braiden","Moses","Isaias","Roy","Triston","Walker","Kale","Jermaine","Leon","Rodney","Kristian","Mohamed","Ronan","Pierce","Trace","Warren","Jeffery","Maverick","Cyrus","Quincy","Nathanael","Skylar","Tommy","Conor","Noe","Ezequiel","Demetrius","Jaylin","Kendrick","Frederick","Terrance","Bobby","Jamison","Jon","Rohan","Jett","Kieran","Tobias","Ari","Colt","Gideon","Felipe","Kenny","Wilson","Orion","Kamari","Gunnar","Jessie","Alonzo","Gianni","Omari","Waylon","Malcolm","Emmett","Abram","Julien","London","Tomas","Allan","Terrell","Matteo","Tristin","Jairo","Reginald","Brent","Ahmad","Yandel","Rene","Willie","Boston","Billy","Marlon","Trevon","Aydan","Jamal","Aldo","Ariel","Cason","Braylen","Javion","Joey","Rogelio","Ahmed","Dominik","Brendon","Toby","Kody","Marquis","Ulises","Armani","Adriel","Alfonso","Branden","Will","Craig","Ibrahim","Osvaldo","Wade","Harley","Steve","Davin","Deshawn","Kason","Damion","Jaylon","Jefferson","Aron","Brooks","Darian","Gerald","Rolando","Terrence","Enzo","Kian","Ryland","Barrett","Jaeden","Ben","Bradyn","Giovani","Blaine","Madden","Jerome","Muhammad","Ronnie","Layne","Kolby","Leonard","Vicente","Cale","Alessandro","Zachery","Gavyn","Aydin","Xzavier","Malakai","Raphael","Cannon","Rudy","Asa","Darrell","Giancarlo","Elisha","Junior","Zackery","Alvaro","Lewis","Valentin","Deacon","Jase","Harry","Kendall","Rashad","Finnegan","Mohammed","Ramiro","Cedric","Brennen","Santino","Stanley","Tyrone","Chace","Francis","Johnathon","Teagan","Zechariah","Alonso","Kaeden","Kamden","Gilberto","Ray","Karter","Luciano","Nico","Kole","Aryan","Draven","Jamie","Misael","Lee","Alexzander","Camren","Giovanny","Amare","Rhett","Rhys","Rodolfo","Nash","Markus","Deven","Mohammad","Moshe","Quintin","Dwayne","Memphis","Atticus","Davian","Eugene","Jax","Antoine","Wayne","Randall","Semaj","Uriah","Clark","Aidyn","Jorden","Maxim","Aditya","Lawson","Messiah","Korbin","Sullivan","Freddy","Demarcus","Neil","Brice","King","Davon","Elvis","Ace","Dexter","Heath","Duncan","Jamar","Sincere","Irvin","Remington","Kadin","Soren","Tyree","Damarion","Talan","Adrien","Gilbert","Keenan","Darnell","Adolfo","Tristian","Derick","Isai","Rylee","Gauge","Harold","Kareem","Deangelo","Agustin","Coleman","Zavier","Lamar","Emery","Jaydin","Devan","Jordyn","Mathias","Prince","Sage","Seamus","Jasiah","Efrain","Darryl","Arjun","Mike","Roland","Conrad","Kamron","Hamza","Santos","Frankie","Dominique","Marley","Vance","Dax","Jamir","Kylan","Todd","Maximo","Jabari","Matthias","Haiden","Luka","Marcelo","Keon","Layton","Tyrell","Kash","Raiden","Cullen","Donte","Jovani","Cordell","Kasen","Rory","Alfred","Darwin","Ernest","Bailey","Gaige","Hassan","Jamarcus","Killian","Augustus","Trevin","Zain","Ellis","Rex","Yusuf","Bruno","Jaidyn","Justus","Ronin","Humberto","Jaquan","Josh","Kasey","Winston","Dashawn","Lucian","Matias","Sidney","Ignacio","Nigel","Van","Elian","Finley","Jaron","Addison","Aedan","Braedon","Jadyn","Konner","Zayne","Franco","Niko","Savion","Cristofer","Deon","Krish","Anton","Brogan","Cael","Coby","Kymani","Marcel","Yair","Dale","Bo","Jordon","Samir","Darien","Zaire","Ross","Vaughn","Devyn","Kenyon","Clay","Dario","Ishaan","Jair","Kael","Adonis","Jovanny","Clinton","Rey","Chaim","German","Harper","Nathen","Rigoberto","Sonny","Glenn","Octavio","Blaze","Keshawn","Ralph","Ean","Nikhil","Rayan","Sterling","Branson","Jadiel","Dillan","Jeramiah","Koen","Konnor","Antwan","Houston","Tyrese","Dereon","Leonidas","Zack","Fisher","Jaydan","Quinten","Nick","Urijah","Darion","Jovan","Salvatore","Beckham","Jarrett","Antony","Eden","Makai","Zaiden","Broderick","Camryn","Malaki","Nikolai","Howard","Immanuel","Demarion","Valentino","Jovanni","Ayaan","Ethen","Leandro","Royce","Yael","Yosef","Jean","Marquise","Alden","Leroy","Gaven","Jovany","Tyshawn","Aarav","Kadyn","Milton","Zaid","Kelton","Tripp","Kamren","Slade","Hezekiah","Jakobe","Nathanial","Rishi","Shamar","Geovanni","Pranav","Roderick","Bentley","Clarence","Lyric","Bernard","Carmelo","Denzel","Maximillian","Reynaldo","Cassius","Gordon","Reuben","Samson","Yadiel","Jayvon","Reilly","Sheldon","Abdullah","Jagger","Thaddeus","Case","Kyson","Lamont","Chaz","Makhi","Jan","Marques","Oswaldo","Donavan","Keyon","Kyan","Simeon","Trystan","Andreas","Dangelo","Landin","Reagan","Turner","Arnav","Brenton","Callum","Jayvion","Bridger","Sammy","Deegan","Jaylan","Lennon","Odin","Abdiel","Jerimiah","Eliezer","Bronson","Cornelius","Pierre","Cortez","Baron","Carlo","Carsen","Fletcher","Izayah","Kolten","Damari","Hugh","Jensen","Yurem"];
/*
Observable Store based in 2016 April by Ivan Kubota
License: MPL 2.0
Contact: zibx@quokka.pub
*/
const isEqual = function(original, fn) {
return function(val) {
fn(val===original);
}
};
const isContain = function(original, fn) {
return function(val) {
fn((val||[]).indexOf(original)>-1);
}
};
/*
-- DESIGN --
Store MUST notify all subscribers on each change
Store MUST NOT notify subscribers if it does not change
*/
const Store = function(cfg) {
Observable.call(this);
this.events = new Observable();
this._props = cfg || {};
},
isObject = function(obj) {
// null is not an object. treat Date as primitive
return typeof obj === 'object' && obj !== null && !(obj instanceof Date);
};
const recursiveWalk = function(path, pointer, key, list) {
if(typeof pointer[key] === 'object'){
for(let subKey in pointer[key]){
if(typeof pointer[key][subKey] === 'object'){
list.push( [ path.concat( key, subKey ).join('.'), void 0 ] );
}
recursiveWalk(path.concat(key), pointer[key], subKey, list);
}
}else{
list.push( [ path.concat( key ).join('.'), void 0 ] );
}
},
recursiveSet = function(path, pointer, key, val, list){
let subKey,i, originalLength;
if( isObject(val) ){
if(Array.isArray(val)){
if(!Array.isArray(pointer[key])){
pointer[ key ] = [];
list.push([path.concat(key).join( '.' ), pointer[ key ]])
}
originalLength = pointer[ key ].length;
}else{
if(!isObject(pointer[ key ])){
pointer[ key ] = {};
list.push([path.concat(key).join( '.' ), pointer[ key ]])
}
}
for(subKey in val){
recursiveSet( path.concat( key ), pointer[ key ], subKey, val[subKey], list );
}
for( subKey in pointer[ key ] ){
if( !val.hasOwnProperty( subKey ) ){
// remove
recursiveWalk( path.concat( key ), pointer[key], subKey, list );
delete pointer[ key ][ subKey ];
}
}
if(Array.isArray(val)){
if(originalLength !== val.length){
recursiveSet( path.concat( key ), pointer[ key ], 'length', val.length, list );
list.push([path.concat(key).join( '.' ), pointer[ key ]]);
}
}
}else{
if( val !== pointer[ key ] ){
pointer[ key ] = val;
list.push( [ path.concat(key).join( '.' ), pointer[ key ] ] );
}
}
};
var StoreParent = function(parent, key, item) {
this.parent = parent;
this.key = key;
this.item = item;
};
StoreParent.prototype = {
getKey: function() {
if(this.item){
var idx = this.parent._props.indexOf(this.item);
if(idx > -1)
return idx;
console.error('try to write to not existed item');
}else{
return this.key;
}
}
};
Store.prototype = {
parent: null,
setParent: function(parent, key, item){
this.parent = new StoreParent(parent, key, item);
},
bindings: function() {
var out = {};
for(var k in this._props){
out[k] = this.bind(k);
}
return out;
},
item: function(key, item){
let subStore = new Store(item?item:key);
subStore.setParent(this, key, item);
return subStore;
},
array: function(key){
let arrayStore = new ArrayStore(this.get(key));
arrayStore.setParent(this, key);
return arrayStore;
},
experimental: false,
_set: function(keys, val, pointer, changeList) {
changeList = changeList || [];
let parent, i, _i;
for(i=0, _i = keys.length - 1; i < _i; i++){
let key = keys[i];
parent = pointer;
if(key in pointer){
pointer = parent[key];
if(!isObject(pointer)){
pointer = parent[key] = {};
changeList.push([keys.slice(0, i).join( '.' ), parent[key]]);
}
}else{
pointer = parent[key] = {};
changeList.push([keys.slice(0, i+1).join( '.' ), parent[key]]);
}
}
let key = keys[i];
recursiveSet(keys.slice(0, keys.length - 1), pointer, key, val, changeList);
},
clear: function() {
this._props = {};
this.events.fire('change', null, null);
},
/*
key: String, val: any
key: {k: v, ...}
*/
set: function(key, val, changeList) {
var isChangeList = changeList !== void 0;
changeList = changeList || [];
var type = typeof key;
if(type === 'object'){
for(let k in key){
this.set(k, key[k], changeList);
}
this._notify(changeList);
return this;
}
var _key;
if(type === 'string') {
_key = key.split('.');
}else if(type === 'number'){
_key = [key];
}
this._set(
_key,
val,
this._props,
changeList
);
if(!isChangeList)
this._notify(changeList);
return this;
},
reSet: function(key, val, changeList) {
this._props = {};
if(key===void 0)
return this;
return this.set(key, val, changeList);
},
_notify: function(changeList, prefix) {
prefix = prefix || '';
for( let i = changeList.length; i; ){
const changeListElement = changeList[ --i ];
var key = changeListElement[0], val = changeListElement[1],
fullKey = prefix+(key===''?'':(prefix===''?'':'.')+key);
this.events.fire('change', fullKey, changeListElement[1]);
this.fire(fullKey, changeListElement[1]);
}
if(this.parent){
if(prefix) {
this.parent.parent._notify(changeList, this.parent.getKey() + '.' + prefix);
}else{
this.parent.parent._notify(changeList, this.parent.getKey());
}
}
},
get: function(key, returnLastStore) {
if(key === void 0)
return this._props;
let type = typeof key;
if(type === 'string') {
key = key.split('.');
}
if(type === 'number') {
key = [key];
}
let ref = this,
lastStore = ref, i, _i;
for( i = 0, _i = key.length; i < _i; i++ ){
if( ref instanceof Store ){
ref = ref._props[key[i]];
lastStore = ref;
}else{
ref = ref[key[i]];
}
if( !ref && i < key.length - 1 )
return void 0;
}
if( returnLastStore )
return { lastQObject: lastStore, result: ref };
return ref;
},
sub: function(key, fn, suppresFirstCall) {
var un;
if(Array.isArray(key)){
var _self = this;
var args = new Array(key.length);
var caller = function() {
return fn.apply(_self, args);
};
var wrap = function(i){
return function(val) {
args[i] = val;
return caller();
};
};
var uns = [];
for( var i = 0, _i = key.length; i < _i; i++ ){
if(key[i] instanceof StoreBinding){
uns.push(key[i].sub(wrap(i)));
args[i] = key[i].get();
}else if(key[i] instanceof HookPrototype){
uns.push(key[i].hook(wrap(i)));
args[i] = key[i].get();
}else{
uns.push(this.on( key[ i ], wrap(i) ));
args[i] = this.get(key[ i ]);
}
}
!suppresFirstCall && wrap();
return function() {
for( var i = 0, _i = uns.length; i < _i; i++ ){
uns[ i ]();
}
};
}else{
un = this.on( key, fn );
!suppresFirstCall && fn( this.get( key ) );
return un;
}
},
equal: function(key, val, fn) {
const wrap = isEqual(val, fn);
this.on(key, wrap);
wrap(this.get(key));
return this;
},
contain: function(key, val, fn) {
const wrap = isContain(val, fn);
this.on(key, wrap);
wrap(this.get(key));
return this;
},
bind: function (key) {
return new StoreBinding(this, key);
},
val: function(key) {
const me = this;
return function backwardCallback(update) {
me.sub(key, val => update(val));
}
},
valEqual: function(key, val) {
const me = this;
return function backwardCallback(update) {
me.equal(key, val, compareResult => {update(compareResult)});
}
},
valEqualOnly: function(key, val) {
const me = this;
return function backwardCallback(update) {
me.equal(key, val, compareResult => {compareResult && update(compareResult)});
}
},
valContains: function(key, val) {
const me = this;
return function backwardCallback(update) {
me.contain(key, val, compareResult => {compareResult && update(compareResult)});
}
},
valTrue: function(key) {
return this.valEqual(key, true);
},
valFalse: function(key) {
return this.valEqual(key, false);
}
};
const StoreBinding = function(store, key){
this.store = store;
this.key = key;
};
StoreBinding.prototype = {
sub: function (k, fn) {
if(typeof k === 'function'){
fn = k;
return this.un = this.store.sub(this.key, fn);
}else{
return this.un = this.store.sub(
(Array.isArray(k)?k:[k]).map(k=>this.key+'.'+k), fn);
}
},
set: function (val) {
this.store.set(this.key, val);
},
get: function() {
return this.store.get(this.key);
},
bind: function(key) {
return new StoreBinding(this.store, this.key+'.'+key);
},
hook: function(draw) {
return this.sub(function(val){
draw(val);
});
},
array: function() {
return this.store.array(this.key);
}
};
Store.prototype = Object.assign(new Observable, Store.prototype);
Store.StoreBinding = StoreBinding;
Store.AGGREGATE = function(fn) {
return function(...args) {
let composite, _i = args.length,
vals = new Array(_i);
return function(update) {
let check = ()=>{
let result = fn(vals, _i);
if(composite !== result)
update(composite = result);
};
for(let i = 0; i < _i; i++){
// set backward callback
let hook = val => {
// update item corresponding value and check condition
vals[ i ] = val;
check();
};
if(args[i] instanceof HookPrototype){
args[i].hook(hook)
}else{
args[ i ]( hook )
}
}
};
};
};
Store.AND = Store.AGGREGATE(function(values, length) {
let result = true;
for(let i = 0; i < length; i++){
result = result && values[i];
}
return result;
});
Store.OR = Store.AGGREGATE(function(values, length) {
let result = false;
for(let i = 0; i < length; i++){
result = result || values[i];
}
return result;
});
Store.ELSE = function(){if(!( this instanceof Store.ELSE))return new Store.ELSE()};
Store.IF = function(cfg, children){
var holders = {true: [], false: []},
holder = holders.true;
for( var i = 0, _i = children.length; i < _i; i++ ){
var child = children[ i ];
if(child instanceof Store.ELSE){
holder = holders.false;
}else{
holder.push(child);
}
}
holders.true.length === 0 && (holders.true = null);
holders.false.length === 0 && (holders.false = null);
return function( update ){
if( 'condition' in cfg )
var hook = function( cond ){
update( cond ? holders.true : holders.false );
};
if(cfg.condition instanceof HookPrototype){
cfg.condition.hook( hook );
}else if(typeof cfg.condition === 'function'){
cfg.condition( hook );
}else{
// TODO other hooklikes
hook(cfg.condition)
}
}
};
Store.NOT = Store.AGGREGATE(function(values, length) {
return !values[0];
});
Store.debounce = function(fn, dt) {
var timeout = false, args, scope,
realCall = function() {
timeout = false;
fn.apply(scope, args)
};
return function(){
args = [].slice.call(arguments);
scope = this;
if(!timeout){
timeout = setTimeout(realCall, dt);
}
}
};
var HookPrototype = function() {};
HookPrototype.prototype = {
setter: function(val) { return val; },
//getter: function(val) { return val; },
set: function(val) {
val = this.setter(val);
var oldVal = this.get();
if(!this.equal(oldVal, val)){
this.data = val;
this._emit(oldVal, val);
}
},
equal: function(oldVal, newVal){
return newVal === oldVal;
},
get: function() {
return this.data;
},
binding: function() {
var x = new StoreBinding();
x.get = ()=> this.get();
x.set = (a)=> this.set(a);
x.sub = (fn)=> this.hook(fn);
return x;
},
hook: function(fn) {
this.subscribers.push(fn);
fn(this.get());
var _self = this;
return function() {
var index = _self.subscribers.indexOf(fn);
if(index>-1){
_self.subscribers.splice( index, 1 );
}
}
},
_emit: function(oldVal, val) {
var subscribers = this.subscribers;
for( var i = 0, _i = subscribers.length; i < _i; i++ ){
subscribers[ i ](val);
}
}
};
var HookFactory = function(accessor) {
var Hook = function(cfg) {
if(!(this instanceof Hook))
return new Hook(cfg);
this.data = {};
this.subscribers = [];
this.set(cfg);
};
Hook.prototype = Object.assign( new HookPrototype(), accessor );
return Hook;
};
Store.getValue = function(val) {
if(val instanceof StoreBinding){
return val.hook();
}else{
return val;
}
};
Store.Value = {
Boolean: new HookFactory({
setter: function(val) { return !!val; },
toggle: function() { this.set(!this.get()); }
}),
Number: new HookFactory({
setter: function(val) { return val-0; }
}),
String: new HookFactory({
setter: function(val) { return val+''; }
}),
Integer: new HookFactory({
setter: function(val) { return val|0; }
}),
Any: new HookFactory(),
Function: new HookFactory()
};
Store.HookPrototype = HookPrototype;
/*
-- DESIGN --
Array DOES NOT notify the store when it's item changes
Array MUST notify itself when item is added or removed
Array MUST notify when it is reordered
Array Item MUST be observed itself
*/
var getter = function( i ){ return this[i]; };
var fns = Array.prototype;
const ArrayStore = function(cfg) {
Store.call(this, cfg);
if( !('get' in this._props) ){
Object.defineProperties( this._props, {
get: { value: getter, enumerable: false }
} );
}
this.length = this._props.length;
};
ArrayStore.prototype = {
length: 0,
indexOf: function (a) {
return this._props.indexOf(a);
},
toArray: function () {
return this._props;
},
_fireAdd: function (item, pos) {
var arr = this._props;
this.fire('add', item, pos > 0 ? arr.get(pos-1) : null, pos < this.length - 1 ? arr.get(pos+1) : null, pos)
},
_fireRemove: function (item, pos) {
var arr = this._props;
this.fire('remove', item, pos > 0 ? arr.get(pos-1) : null, pos < this.length ? arr.get(pos) : null, pos)
},
push: function (item) {
// single item push only
var out = this._props.push(item);
this._fireAdd(item, this.length++);
return out;
},
unshift: function (item) {
// single item unshift only
var out = this._props.unshift(item);
this.length++;
this._fireAdd(item, 0);
return out;
},
shift: function(){
var pos = --this.length,
arr = this._props,
item = arr.shift();
this._fireRemove(item, 0);
return item;
},
pop: function () {
var pos = --this.length,
arr = this._props,
item = arr.pop();
this._fireRemove(item, pos);
return item;
},
splice: function(start, count){
var i, _i, newItems = fns.slice.call(arguments,2 ), out = [];
for(i = 0;i<count; i++)
out.push(this.remove(start));
for(i = 0, _i = newItems.length; i < _i; i++)
this.insert(newItems[i], i + start);
return out;
},
/*
set - updates element
@arg pos: position of element. defined on [0..length]
@arg item: element to set
@return element that was in that position before
*/
set: function(pos, item){
if(pos === this.length){
this.push( item );
return void 0; // for same behavior we return empty array
}
return this.splice(pos, 1, item)[0];
},
iterator: function(start){
return new Iterator(this, start);
},
remove: function(pos){
var item = this._props.splice(pos,1)[0];
this.length--;
this._fireRemove(item, pos);
return item;
},
insert: function(item, pos){
this._props.splice(pos, 0, item);
this.length++;
this._fireAdd(item, pos)
},
forEach: function (fn) {
return this._props.forEach(fn);
}
};
ArrayStore.prototype = Object.assign(new Store(), ArrayStore.prototype);
/*
const ArrayStore = function (cfg) {
Store.call(this, cfg);
};
ArrayStore.prototype = {
push: function (val) {
var changeList = [];
changeList.push(['', this._props])
this.set(this.getLength(), val, changeList);
this._notify(changeList);
return this;
},
pop: function () {
var changeList = [];
changeList.push(['', this._props]);
var out = this.get(this.getLength()-1);
this.set(this.getLength()-1, void 0, changeList);
this._props.pop();
this._notify(changeList);
return out;
},
remove: function(item) {
var idx = this._props.indexOf(item);
if(idx>-1){
var changeList = [];
changeList.push(['', this._props]);
this._props.splice(idx,1);
//this.set(this.getLength()-1, void 0, changeList);
this._notify(changeList);
}
return this;
},
slice: function () {},
splice: function () {},
getLength: function () {
return this._props.length;
},
update: function() {
var changeList = [];
changeList.push(['', this._props]);
this._notify(changeList);
return this;
},
'~destructor': function() {
this._listeners = this.events = this._props = null;
}
};
ArrayStore.prototype = Object.assign(new Store(), ArrayStore.prototype);*/
typeof module === 'object' && (module.exports = Store);
(typeof window === 'object') && (window.Store = Store);
\ No newline at end of file
var evts = [
{
"year": 1776,
"name": "Declaration of Independence",
"place": "North America",
"require": ['Boston Tea Party', '']
},
{
"year": 1787,
"name": "Constitution of the United States of America",
"place": "North America"
},
{
"year": 1794,
"name": "Whiskey Rebellion",
"place": "North America"
},
{
"year": 1803,
"name": "Louisiana Purchase",
"place": "North America"
},
{
"year": 1815,
"name": "Battle of New Orleans",
"place": "North America"
},
{
"year": 1823,
"name": "Monroe Doctrine",
"place": "North America"
},
{
"year": 1829,
"name": "Era of the Common Man",
"place": "North America"
},
{
"year": 1848,
"name": "Treaty of Guadalupe Hidalgo",
"place": "North America"
},
{
"year": 1857,
"name": "Dred Scott Decision",
"place": "North America"
},
{
"year": 1863,
"name": "Battle of Gettysburg",
"place": "North America"
},
{
"year": 1876,
"name": "Battle of the Little Bighorn",
"place": "North America"
},
{
"year": 1886,
"name": "Haymarket Riot",
"place": "North America"
},
{
"year": 1896,
"name": "Plessy v. Ferguson",
"place": "North America"
},
{
"year": 1902,
"name": "Breakup of Northern Securities",
"place": "North America"
},
{
"year": 1915,
"name": "Sinking of the Lusitania",
"place": "North America"
},
{
"year": 1929,
"name": "Stock Market Crash",
"place": "North America"
},
{
"year": 1933,
"name": "FDR’s First Fireside Chat",
"place": "North America"
},
{
"year": 1945,
"name": "The Atomic Bombing of Hiroshima and Nagasaki",
"place": "North America"
},
{
"year": 1954,
"name": "U.S. Army–McCarthy Hearings",
"place": "North America"
},
{
"year": 1968,
"name": "Assassination of Martin Luther King, Jr.",
"place": "North America"
},
{
"year": 1972,
"name": "Watergate Scandal",
"place": "North America"
},
{
"year": 1981,
"name": "PATCO Strike",
"place": "North America"
},
{
"year": 1998,
"name": "The Monica Lewinsky Affair",
"place": "North America"
},
{
"year": null,
"name": "September 11 Attacks",
"place": "North America"
},
{
"year": 2016,
"name": "Election of Donald Trump",
"place": "North America"
}
];
\ No newline at end of file
var events = [
{
name: 'Fire control',
place: '%PLANET.REGION#HOT%',
require: ['Evolved brain', '#Curious']
},
{
name: 'COVID-19',
place: 'WORLD',
date: 2020,
require: ['Genome manipulation']
},
{
name: '%ANIMAL% war',
place: '%PLACE%',
require: ['%ANIMAL% evolved']
},
{
name: '%ANIMAL% evolved',
place: '%PLACE%',
require: ['Genome manipulation']
},
{
name: 'Genome fabrication',
place: [
{probability: 10, value: function(event){
return Math.rand(event.predecessors);
}},
{probability: 1, value: function(event) {
return Math.rand(event.world.countries)
}}
],
require: ['Genome manipulation'],
},
{
name: '%ANIMAL% creation',
place: '%PLACE%',
require: ['Genome fabrication']
},
{
name: 'Genome manipulation',
require: [],
place: 'any'
}
];
var Spread = {Normal: function(centerPercent, slope) {
slope = slope || 1;
}};/*function(cfg) {
Object.assign(this, cfg);
};
Spread.prototype = {
random: Math.random,
fn: function(){ return this.random() }
};
Spread.Normal = new Spread({ fn: function(){
}});*/
var dicts = {
ANIMAL: {
cat: {
weight: 3,//[2, 7, Spread.Normal(50) ],
humanLoyal: 5
},
dog: {
weight: 12,//[5, 30, Spread.Normal(50)],
humanLoyal: 9
},
crab: {
weight: 1,//[0.4, 19, Spread.Normal(10)],
humanLoyal: 1
},
parrot: {
weight: 0.08,//[0.03, 4, Spread.Normal(10)],
humanLoyal: 5
}
}
};
export {events, dicts};
\ No newline at end of file
@import "./fonts.scss";
body {
margin: 0;
padding: 0;
min-width: 320px;
font-family: $font;
font-size: 18px;
line-height: 1.28;
color: $text-main;
background-color: $bg-main;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
@media (max-width: $mobile) {
font-family: $font-mobile;
}
}
img {
display: block;
max-width: 100%;
height: auto;
}
.page-content {
display: flex;
flex-direction: column;
box-sizing: border-box;
padding-top: 90px;
min-height: 100vh;
min-height: calc(var(--vh, 1vh) * 100);
@media (max-width: $mobile) {
padding-top: 60px;
}
&.isAdminArea {
min-width: 1280px;
.page-header {
position: absolute;
min-width: 1280px;
}
}
}
.page-content__inner {
display: flex;
flex-direction: column;
flex-grow: 1;
}
.readers-only {
position: absolute;
width: 1px;
height: 1px;
margin: -1px;
padding: 0;
border: 0;
white-space: nowrap;
clip-path: inset(100%);
clip: rect(0 0 0 0);
overflow: hidden;
}
.zero-wrapper {
width: 100%;
}
.error-block {
background: #194965;
div {
white-space: pre;
font-family: monospace;
padding: 0 32px 16px;
color: #ccdde8;
font-size: 16px;
}
}
.log-block {
background: #ccdde8;
div {
white-space: pre;
font-family: monospace;
padding: 0 32px 16px;
color: #194965;
font-size: 14px;
}
}
.test-request-block {
padding: 0 32px 16px;
}
.tmp {
display: contents;
}
.onerror {
animation-name: shake;
animation-duration: 1s;
animation-fill-mode: both;
}
input[type=number]::-webkit-inner-spin-button,
input[type=number]::-webkit-outer-spin-button {
-webkit-appearance: none;
margin: 0;
}
@keyframes shake {
from, to {
transform: translate3d(0, 0, 0);
}
10%, 30%, 50%, 70%, 90% {
transform: translate3d(-10px, 0, 0);
}
20%, 40%, 60%, 80% {
transform: translate3d(10px, 0, 0);
}
}
.highlighted {
background: rgba($accent-main, 0.5);
}
@font-face {
font-family: "SF Pro Text";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("/fonts/SFProText-Regular.woff2") format("woff2"),
url("/fonts/SFProText-Regular.woff") format("woff");
}
@font-face {
font-family: "SF Pro Text";
font-style: italic;
font-weight: 400;
font-display: swap;
src: url("/fonts/SFProText-RegularItalic.woff2") format("woff2"),
url("/fonts/SFProText-RegularItalic.woff") format("woff");
}
@font-face {
font-family: "SF Pro Text";
font-style: normal;
font-weight: 500;
font-display: swap;
src: url("/fonts/SFProText-Medium.woff2") format("woff2"),
url("/fonts/SFProText-Medium.woff") format("woff");
}
@font-face {
font-family: "SF Pro Text";
font-style: italic;
font-weight: 500;
font-display: swap;
src: url("/fonts/SFProText-MediumItalic.woff2") format("woff2"),
url("/fonts/SFProText-MediumItalic.woff") format("woff");
}
@font-face {
font-family: "SF Pro Text";
font-style: normal;
font-weight: 600;
font-display: swap;
src: url("/fonts/SFProText-Semibold.woff2") format("woff2"),
url("/fonts/SFProText-Semibold.woff") format("woff");
}
@font-face {
font-family: "SF Pro Text";
font-style: italic;
font-weight: 600;
font-display: swap;
src: url("/fonts/SFProText-SemiboldItalic.woff2") format("woff2"),
url("/fonts/SFProText-SemiboldItalic.woff") format("woff");
}
@font-face {
font-family: "SF Pro Text";
font-style: normal;
font-weight: 700;
font-display: swap;
src: url("/fonts/SFProText-Bold.woff2") format("woff2"),
url("/fonts/SFProText-Bold.woff") format("woff");
}
@font-face {
font-family: "SF Pro Text";
font-style: italic;
font-weight: 700;
font-display: swap;
src: url("/fonts/SFProText-BoldItalic.woff2") format("woff2"),
url("/fonts/SFProText-BoldItalic.woff") format("woff");
}
@font-face {
font-family: "Helvetica Neue";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("/fonts/HelveticaNeueCyrRoman.woff2") format("woff2"),
url("/fonts/HelveticaNeueCyrRoman.woff") format("woff");
}
@font-face {
font-family: "Helvetica Neue";
font-style: normal;
font-weight: 500;
font-display: swap;
src: url("/fonts/HelveticaNeueCyrMedium.woff") format("woff");
}
@font-face {
font-family: "Helvetica Neue";
font-style: normal;
font-weight: 700;
font-display: swap;
src: url("/fonts/HelveticaNeueCyrBold.woff2") format("woff2"),
url("/fonts/HelveticaNeueCyrBold.woff") format("woff");
}
@mixin container {
margin: 0 auto;
box-sizing: border-box;
padding: 0 30px;
width: 100%;
max-width: 1060px;
@media (max-width: $mobile) {
padding: 0 20px;
}
}
@mixin pageInner {
flex-grow: 1;
display: flex;
margin: 0 30px 30px;
padding: 54px;
background-image: url("/uploads/images/bg-leaves.svg");
background-repeat: no-repeat;
background-size: 100% auto;
background-position: bottom center;
@media (max-width: 1024px) {
padding: 40px;
}
@media (max-width: $mobile) {
margin: 0;
padding: 0 30px 30px;
background-image: url("/uploads/images/bg-leaves-mob.svg");
}
}
@mixin infoPage {
flex-grow: 1;
display: flex;
margin: 0 30px 30px;
padding: 30px 30px 25px;
background-color: $bg-accent;
}
@mixin adminPage {
flex-grow: 1;
display: flex;
margin: 0 30px 30px;
padding: 30px 30px 25px;
background-color: $bg-accent;
background-image: url("/uploads/images/bg-leaves-admin.svg");
background-repeat: no-repeat;
background-size: 100% auto;
background-position: bottom center;
}
@mixin list-reset {
margin: 0;
padding: 0;
list-style: none;
}
@mixin btn-reset {
display: inline-block;
vertical-align: top;
padding: 0;
border: 0;
background-color: transparent;
cursor: pointer;
}
@mixin center {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
@mixin hover {
transition: opacity 0.3s ease;
&:hover,
&:focus {
opacity: 0.7;
outline: none;
}
}
@mixin flagSeen {
display: flex;
align-items: center;
font-weight: 400;
font-size: 12px;
line-height: 30px;
color: #B2C5B7;
svg {
display: block;
margin-left: 9px;
color: $accent-main;
}
}
@mixin mainTitle {
font-weight: 700;
font-size: 44px;
line-height: 1.14;
letter-spacing: 0.01em;
@media (max-width: 1024px) {
font-size: 38px;
}
}
@mixin title {
font-weight: 700;
font-size: 32px;
line-height: 40px;
@media (max-width: $mobile) {
font-size: 16px;
line-height: 20px;
letter-spacing: 0.15px;
}
}
@mixin headline {
font-weight: 700;
font-size: 24px;
line-height: 32px;
@media (max-width: $mobile) {
font-size: 20px;
line-height: 25px;
}
}
@mixin lesserHeadline {
font-weight: 700;
font-size: 18px;
line-height: 24px;
@media (max-width: $mobile) {
font-weight: 700;
font-size: 16px;
line-height: 20px;
letter-spacing: 0.15px;
}
}
@mixin mainSubtitle {
font-weight: 600;
font-size: 18px;
line-height: 22px;
}
@mixin subtitle {
font-weight: 600;
font-size: 16px;
line-height: 22px;
}
@mixin mainBodyText {
font-weight: 500;
font-size: 18px;
line-height: 23px;
color: $gray-dark;
@media (max-width: 1024px) {
font-size: 17px;
line-height: 22px;
}
@media (max-width: $mobile) {
font-weight: 400;
font-size: 16px;
line-height: 19px;
letter-spacing: 0.25px;
}
}
@mixin bodyText {
font-weight: 500;
font-size: 17px;
line-height: 22px;
@media (max-width: $mobile) {
font-weight: 400;
font-size: 14px;
line-height: 18px;
letter-spacing: 0.1px;
}
}
@mixin mainCaption {
font-weight: 500;
font-size: 15px;
line-height: 20px;
color: $gray-dark;
@media (max-width: $mobile) {
font-weight: 400;
font-size: 16px;
line-height: 19px;
letter-spacing: 0.25px;
}
}
@mixin caption {
font-weight: 500;
font-size: 13px;
line-height: 17px;
color: $gray-dark;
}
@mixin lesserCaption {
font-weight: 400;
font-size: 12px;
line-height: 17px;
color: $green-gray;
}
$bg-main: #ffffff;
$bg-accent: #f6f6f6;
$bg-pattern: #e0e0e0;
$text-main: #000000;
$gray-dark: #575756;
$gray-medium: #a6a6a6;
$gray-light: #dfdfdf;
$accent-main: #34BE5B;
$accent-medium: #259C47;
$accent-dark: #006C43;
$green-gray: #B2C5B7;
$teal: #3B6977;
$indigo: #4591A9;
$red: #FF0000;
$brick: #C94C0A;
$persimmon: #EC7B3F;
$sienna: #D8960D;
$standardCard: #BDD6DE;
$standardCardSeen: #f8f8f8;
$font: 'SF Pro Text', Arial, sans-serif;
$font-mobile: 'Helvetica Neue', Arial, sans-serif;
$mobile: 767px;
$tablet: 1024px;
$desktopMin: 1279px;
function mulberry32(a) {
var out = function() {
var t = a += 0x6D2B79F5;
t = Math.imul(t ^ t >>> 15, t | 1);
t ^= t + Math.imul(t ^ t >>> 7, t | 61);
return ((t ^ t >>> 14) >>> 0) / 4294967296;
}
out.getSeed = function() {
return a;
};
out.setSeed = function(A) {
a = A;
};
out.setStringSeed = function(str) {
str = str.replace(/[^0-9a-z]/g,'').substr(0,12);
if(str.length === 0)str = '1';
a = parseInt(str,36);
};
out.getStringSeed = function() {
return a.toString(36);
};
return out;
}
Math.random.seeded = mulberry32(Math.floor(Math.random()*4294967296));
Math.rand = function(a, b){
if(Array.isArray(a)){
return a[Math.random.seeded()*a.length|0];
}
if(typeof a === 'object' && 'max' in a){
b = a.max;
a = a.min || 0;
}
a = Math.ceil(a);
b = Math.floor(b);
return Math.floor(Math.random.seeded() * (b - a + 1)) + a;
};
Math.rand.probability = function(items) {
var sum = 0, i, _i, total = 0;
for( i = 0, _i = items.length; i < _i; i++ ){
const item = items[ i ];
sum += item.probability |0;
}
const theRandom = Math.random.seeded();
for( i = 0, _i = items.length; i < _i; i++ ){
const item = items[ i ];
total += item.probability/sum;
if(theRandom < total)
return item;
}
};
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<base href="/"/>
<title>Техническое задание</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<script>$ENV$</script>
<script src="core/Path.js"></script>
<script src="core/Require.js"></script>
<script src="core/LivestReloading.js"></script>
<script src="core/Observer.js"></script>
<script src="core/DOM.js"></script>
<script src="core/Localizer.js"></script>
<script src="core/Random.Seeded.js"></script>
<script src="core/data/store/Store.js"></script>
<script src="core/Route.js"></script>
<link async href="https://fonts.googleapis.com/css2?family=Literata:ital@0;1&display=swap" rel="stylesheet">
$COMMIT$
$BUNDLE$
<style>
td {
padding: 4px 8px;
text-align: center;
}
.info {
background: #fffabc;
padding: 16px 32px;
margin: 16px 0;
}
.page-content {
max-width: 1024px;
margin: auto;
font-family: 'Literata', serif;
position: relative;
}
.note {
max-width: 800px;
margin: 16px 0 32px auto;
padding: 16px 16px 8px 8px;
border-bottom: 2px solid #ff5e00;
}
.header {
font-weight: bold;
font-size: 64px;
margin: 32px 0 16px;
}
.subHeader {
font-weight: bold;
font-size: 32px;
margin: 32px 0 16px 0px;
}
.thead td {
border-bottom: 2px solid #000;
}
.thead td {
border-bottom: 2px solid #000;
padding: 4px 16px;
font-size: 24px;
}
a {
color: #1c7cf3;
font-family: sans-serif;
}
.note.note-float {
float: right;
margin: 0;
background: #ffe7d8;
font-family: sans-serif;
padding: 16px 32px 16px;
}
.summary td {
padding-top: 32px;
text-align: left;
font-size: 18px;
}
input[type=checkbox], input[type=radio] {
left: -42px !important;
height: 24px;
width: 24px;
}
</style>
</head>
<body>
<script>
define('start', ['main.jsx'], function(main) {
main.default();
});
let d = document.createElement('div');
d.innerText = 'v0.'+ CommitNUMBER;
d.style = 'position: fixed;\n' +
' z-index: 100;\n' +
' top: 0px;\n' +
' right: 0px;\n' +
' font-size: 11px;';
document.body.appendChild(d);
/*define('start', ['d'], function(main) {
main.default();
});*/
</script>
</body>
</html>
import '/model/Store';
import {lal} from '/posts/post.jsx';
import {VideoCalculator} from '/posts/VideoCalculator.jsx';
const {IF, ELSE} = Store;
export default function() {
var krokotau = Store.Value.Boolean(false);
let graph,
dom = <div renderTo={document.body} class={["page-content", {krokotau}]}>
<button onClick={()=>krokotau.toggle()}>togl</button>
Hello world!
{VideoCalculator}
</div>;
const w = window;
let resizeFn;
w.addEventListener('resize', Store.debounce(resizeFn = function() {
tmpStore.set({
isMobile: w.innerWidth < 1025,
width: w.innerWidth
});
},1000/4));
resizeFn();
tmpStore.set('loaded', true);
};
@import "/global-styles/variables.scss";
@import "/global-styles/mixins.scss";
select, input {
font-size: 18px;
padding: 8px;
}
.field label {
select, input {
position: absolute;
left: 300px;
}
}
.field {
margin: 24px 0;
font-size: 18px;
}
\ No newline at end of file
let latest, STORE_VERSION = 'v1.0';
const store = new Store(latest = {
_VERSION_: STORE_VERSION,
'navigation': {
current: 'Login'
}
});
try{
var data = JSON.parse( localStorage.getItem( 'store' ) );
if(data._VERSION_ !== store.get('_VERSION_')){
console.warn('STORE:outdated, new state → localStorage');
console.warn('\tSTORE:currentData #'+ store.get('_VERSION_'), store._props);
console.warn('\tSTORE:savedData #'+ STORE_VERSION, data);
console.warn('\tSTORE:hint → Run Store.restore() for restore saved state');
console.warn('\tStore:hint → Run Store.update() for load latest default state');
Store.restore = function() {
for( var k in data ){
if(k !== '_VERSION_'){
store.set( k, data[ k ] );
}
}
};
Store.update = function() {
for( var k in latest ){
if(k !== '_VERSION_'){
store.set( k, latest[ k ] );
}
}
};
}else{
for( var k in data ){
store.set( k, data[ k ] );
}
console.log('STORE:loaded ← localStorage', data);
}
}catch( e ){}
store.events.on('change', function(a) {
localStorage.setItem('store', JSON.stringify(store._props));
});
const tmpStore = new Store({
loaded: false,
navigation: {current: 'Login'},
isMobile: false,
width: window.innerWidth
});
let lastNav = null;
store.sub('navigation.current', function(val) {
console.log('APP:navigation', lastNav,'→', val);
lastNav = val;
});
window.store = store;
window.tmpStore = tmpStore;
import { DropdownField } from "cmp/dropdownField/DropdownField.jsx";
import { PlainSelect } from "cmp/PlainSelect/PlainSelect.jsx";
import { Checkbox } from "cmp/Checkbox/Checkbox.jsx";
import { Radio } from "cmp/Radio/Radio.jsx";
var s = window.s = new Store({
size: '',
codec: 1,
framerate: 0,
time: 0,
filesize: 0,
filesize2: 0,
filesize3: 0,
perDay: 0,
simult: 0,
popularity: 0,
creating: 0,
useInterlacing: false,
calculation: 'tv-show',
backups: 0,
duration: 0,
dc: 0
});
var {
size,
codec,
framerate,
time,
filesize,
filesize2,
filesize3,
perDay,
simult,
popularity,
creating,
useInterlacing,
calculation,
backups,
duration,
dc
} = s.bindings();
var AWSPrice = function(gb) {
if(gb<1024*50)
return 0.023;
if(gb<1024*450)
return 0.022;
return 0.021;
};
var moneyFormatter = function(num) {
var strNum = num+'';
var i,
out = [],
_i = strNum.length,
count = (_i%3)||3,
last = count;
out.push(strNum.substr(0, count));
count = 3;
for(i = last; i < _i; i+=3){
out.push(strNum.substr(i, count))
}
return out.join(',');
};
var GBFormatter = function(gb) {
if(gb-0 < 1024){
return (gb-0).toFixed(2)+'GB';
}
gb/=1024;
if(gb-0 < 1024){
return (gb-0).toFixed(2)+'TB';
}
gb/=1024;
//if(gb-0 < 1024){
return (gb-0).toFixed(2)+'PB';
//}
}
var sizeSelector;
var Info = function(cfg, children) {
return D.div({cls: 'info'}, children)
};
var Note = function(cfg, children) {
cfg = cfg || {};
return D.div({cls: D.cls('note', {'note-float': cfg.float})}, children)
};
var Header = function(cfg, children) {
return D.div({cls: 'header'}, children)
};
var SubHeader = function(cfg, children) {
return D.div({cls: 'subHeader'}, children)
};
var Field = function(cfg, children) {
if(children[0].name === 'radio' || children[0].name === 'checkbox'){
return <div className={'field'}><label>{children} <span class='field-label'>{cfg.label}</span></label></div>
}else{
return <div className={'field'}><label><span class='field-label'>{cfg.label}</span> {children}</label></div>
}
};
var VideoCalculator = <div class={'calculator'}>
Видеосервис.
<Info>
<p>
Видеосервис должен позволять загружать видео в популярных форматах.
</p>
<p>
После загрузки видеосервер должен автоматически запускать процесс перекодирования видеопотока в форматы подходящий для передачи через интернет в браузеры и smartTV.
</p>
<p>
Обязательно должно производиться кодирование в видеофайлы с пониженным битрейтом для передачи пользователям не имеющим широкого канала интернет соединяния или оплачивающим траффик.
</p>
</Info>
<Note>
Интерактивные калькуляторы позволяют донести информацию наглядным образом и обеспечивают прозрачность
</Note>
<Header>
Хранение и передача видео
</Header>
<SubHeader>
Калькулятор размера видеофайла
</SubHeader>
<div class={'field'}><label>Разрешение видео: {sizeSelector = <PlainSelect value={size} map={(val)=>({w: val.split('x')[0]-0, h: val.split('x')[1]-0})} values={`
256x144
426x240
640x360
854x480
>1280x720
1920x1080
2560x1440
3840x2160
7680x4320
`}/>}</label></div>
{_=>{
sizeSelector.values.get().forEach(item=> {
s.set( 'use-' + item.id.split( 'x' )[ 1 ], true );
})
}}
<div class={'field'}><label>Используемый кодек: <PlainSelect value={codec} map={Number} values={`
180: H.264 High quality
>340: H.264 Medium quality
675: H.264 Low quality
`}/></label></div>
<div className={'field'}><label>Кадров в секунду: <PlainSelect value={framerate} map={Number} values={`
24
30
>60
120
240
`}/></label></div>
<div className={'field'}><label>Продолжительность серии: <PlainSelect value={time} map={Number} values={`
15: 15 минут
>30: 30 минут
60: 1 час
120: 2 часа
135: 2 часа 15 минут
`}/></label></div>
{_=>s.sub([size, codec, framerate, time], (size, codec, framerate, time)=>{
var [w,h] = size.split('x');
filesize.set((w*h*3/codec*framerate*time*60 / 1024 / 1024 / 1024).toFixed(2));
})}
<div className={'field'}>Размер видеофайла: {GBFormatter(filesize)}</div>
<SubHeader>
Интерлейсинг
</SubHeader>
<Info>
Технология широко использовалась во времена дисплеев основанных на лучевых трубках — чередовались кадры с чётными и нечётными строками. Позволяет получить двойной выигрыш по объёму файлов за счёт ухудшения качества картинки.
</Info>
<img src="https://blog.video.ibm.com/wp-content/uploads/2016/03/interlace-soccer2-1024x394.jpg" style="display: block;margin: auto;"/>
<div className={'field'}><label><Checkbox value={useInterlacing}/> Использовать интерлэйсинг</label></div>
{_=>s.sub([useInterlacing, filesize], (useInterlacing, filesize)=>{
filesize2.set(useInterlacing ? filesize/2 : filesize);
})}
{_=>s.sub([size, codec, framerate, time, 'filesize3', useInterlacing,
'use-144', 'use-240', 'use-360', 'use-480', 'use-720', 'use-1080', 'use-1440', 'use-2160', 'use-4320'], (size, codec, framerate, time, filesize3, useInterlacing)=>{
var downscales = [],
vals = sizeSelector.values.get();
for( var i = 0, _i = vals.length; i < _i; i++ ){
var [w,h] = vals[ i ].text.split('x');
downscales.push({p: h, size: (w*h*3/codec*framerate*time*60 / 1024 / 1024 / 1024).toFixed(2)});
if(vals[ i ].id === size){
break;
}
}
if(downscales.length>1){
s.set('filesize3', (downscales.map(item=>s.get('use-'+item.p)?item.size-0:0).reduce((a,b)=>a+b) * (useInterlacing ? 0.5 : 1)).toFixed(2));
_(<div><SubHeader>Объём необходимый для хранения различных форматов</SubHeader>
<Note float>форматы которые не нравятся можно выключить</Note>
<table>
<tr class={'thead'}>
<td></td>
<td>Формат</td>
<td>Объём</td>
</tr>
{downscales.map(item=><tr>
<td><Checkbox value={s.bind('use-'+item.p)}/></td>
<td>{item.p}p</td>
<td>{GBFormatter(item.size * (useInterlacing ? 0.5 : 1))}</td>
</tr>)}
<tr class={'summary'}>
<td colSpan={3}>
Всего <b>{GBFormatter(s.get('filesize3'))}</b> на серию
</td>
</tr>
</table>
</div>);
console.log(s.get('filesize3'));
}else{
s.set('filesize3', (downscales[0].size * (useInterlacing ? 0.5 : 1)).toFixed(2));
_(<div>Объём необходимый для хранения одного выпуска: {GBFormatter(s.get('filesize3'))}</div>);
}
})}
<SubHeader>Выберите тип расчёта</SubHeader>
<Field label='Сериальный'><Radio value='tv-show' group={calculation}/></Field>
<Field label='Видеоплатформенный'><Radio value='ott' group={calculation}/></Field>
{_=>{
calculation.sub(val=>{
if(val === 'tv-show'){
_(<div>
<Header>Сериальный расчёт</Header>
<SubHeader>Планируемая частота и количество шоу</SubHeader>
<div className={'field'}><label>Одновременно выходят: <PlainSelect value={simult} map={Number} values={`
1: Одно шоу
2: Два шоу
>5: Пять шоу
10: Десять шоу
50: Сорок шоу, некоторые разветвились и получлось 50
100: Шоу, челленджи, платформа популярна, но не на весь мир
`}/></label></div>
<div class={'field'}><label>Новая серия выходит: <PlainSelect value={perDay} map={Number} values={`
1: Каждый день
>7: Каждую неделю
30: Каждый месяц
28: Сезон из 13 серий USA\Canada standard
16.5: Сезон из 13 серий USA\Canada standard
`}/></label></div>
</div>);
}else if(val === 'ott'){
_(<div>
<Header>Расчёт для видеоплатформы</Header>
<Info>На основе <a href="https://merchdope.com/youtube-stats/#:~:text=The%20total%20number%20of%20people,on%20Youtube%20every%20single%20day.&text=In%20an%20average%20month%2C%208,49%20year%2Dolds%20watch%20YouTube" target='_blank'>статистики по ютубу за 2020 год</a> и
доступных публичных данных <a href="https://www.similarweb.com/top-websites">от similarweb</a> были выстроены примерные оценки нагрузки на хранилища файлов для различных видеосервисов.
</Info>
<Field label={'Популярность'}>
<PlainSelect value={popularity} map={Number} values={`
300: YouTube. 300 hours of video uploaded every minute. Traffic: 33.39B
25: Pornhub. 25 hours of video uploaded every minute (scaled). Traffic: 2.85B
1.19: Vimeo. 1.19 hours of video uploaded every minute (scaled). Traffic: 133.7M
0.1: Traffic: 10M Good globally known platform. 8 minutes of video per minute
0.0125: Traffic: 1M. Good local OTT platform. 1 minute of video per minute
>0.002: Netflix 90000 minutes of original video in 2018 year
`}/>
</Field>
</div>);
}
})
}}
<SubHeader>Расчёт требуемого для хранения данных места</SubHeader>
<p>
Расчитаем нарастающий объём данных на дисках.
</p>
<Field label={'Временной промежуток'}>
<PlainSelect value={duration} map={Number} values={`
1:1 month
12: 1 year
>24: 2 year
36: 3 year
48: 4 year
60: 5 year
`}/>
</Field>
<p>
Будем считать что наполнение происходит линейно
</p>
<Field label={'Хранение бэкапов'}>
<PlainSelect value={backups} map={Number} values={`
0: Мы не храним бэкапов!
1: RAID 10. Дублирование всех записанных данных
>0.3: RAID 3. Отдельный диск для битов чётности. Минимум 4 диска
2: Кворум из трёх машин. Обычно используется для финансовых БД
`}/>
</Field>
<Note>
<p>
На первых этапах (демонстрация, первые 6 месяцев) можно раздавать контент с одного сервера.
</p>
<p>
Далее можно взять несколько серверов в оптимальных местах (европа, северная и южная америка, азия, западная и восточная Россия).
</p>
<p>
Но при серьёзном масштабировании OTT платформы нужно будет обязательно выбрать подходящее CDN решение или построить своё.
</p>
<p>
CDN позволяет как экономить международный траффик между клиентом и сервером раздающим видео, так и снять нагрузку с ключевых элементов инфраструктуры.
</p>
<p>
Много пользователей из Америки одновременно смотрящих премьеру передачи с европейского сервера способны существенно забить трансокеанические кабели передачи данных, или, как минимум, сделать его использование нерентабельным.
</p>
</Note>
<Field label={'Датацентры'}>
<PlainSelect value={dc} map={Number} values={`
0: Не нужен
>2: Разворачиваем 3 своих датацентров
5: Разворачиваем 6 своих датацентров
`}/>
</Field>
<Note>
<p>
На больших объёмах основными потребителями ежемесячного бюджета становятся сервера и оплата траффика. Траффик напрямую зависит от количества пользователей платформы.
</p>
<p>
Дальнейшие вычисления нагрузки будут произведены с учётом самого популярного разрешения видео 720p
</p>
</Note>
<Field label={'Пользователей в месяц '}>
<PlainSelect value={dc} map={Number} values={`
0: Нет пользователей
20: 20 — Тестирование платформы
500: 500 — Ранний запуск
4000: 4000 — Набирает популярность
10000: 10000 — Набирает популярность
180000000: 180 000 000 — Аудитория Netflix
500: 500 — Ранний запуск
5: Разворачиваем 6 своих датацентров
`}/>
</Field>
{_=>{
s.sub([
duration,
backups,
calculation,
simult, perDay,
popularity,
time,
filesize3, dc
], (
duration,
backups,
calculation,
simult, perDay,
popularity, time,
filesize3, dc)=>{
var origDate = +new Date(),
d = origDate,
lastDate = d,
slices = [],
stored = 0;
for(var i = 0; i < duration; i++){
d = new Date(d);
d.setMonth(d.getMonth()+1);
var slice = {date: d},
newData;
if(calculation === 'ott'){
newData =
(filesize3/time)* // minute size
(((+d)-(+lastDate))/1000/60)* // minutes in month
popularity*60;
}else{
newData = filesize3*simult*(((+d)-(+lastDate))/1000/60/60/24 / perDay)
}
newData+=newData*backups;
newData+=newData*dc;
stored += newData;
slice.stored = stored;
slice.newData = newData;
lastDate = d;
slices.push(slice);
}
_(<table>
<tr className={'thead'}>
<td>Дата</td>
<td>Объём</td>
<td>AWS Storage</td>
<td>AWS Data Transfer</td>
</tr>
{slices.map(slice=><tr>
<td>{slice.date.getMonth() +' '+ slice.date.getFullYear()}</td>
<td>{GBFormatter(slice.stored)}</td>
<td>${moneyFormatter((slice.stored*AWSPrice(slice.stored))|0)}/month</td>
<td>${moneyFormatter((slice.stored*AWSPrice(slice.stored))|0)}/month</td>
</tr>)}
</table>);
});
}}
2020 June | 100 Tb
2020 Jule | 200 Tb
2020 August | 300 Tb
Таблица, график, стоимость у амазона
Netflix использует для хранения Amazon AWS
<Info>
<a href="https://medium.com/refraction-tech-everything/how-netflix-works-the-hugely-simplified-complex-stuff-that-happens-every-time-you-hit-play-3a40c9be254b">
Здесь можно почитать о том как строится инфраструктура подобная Netflix
</a>
</Info>
USE: https://www.wowza.com/products/streaming-engine/deployment-options
</div>;
export {VideoCalculator};
\ No newline at end of file
const lal = <div>aga!</div>;
export {lal};
\ No newline at end of file
<svg width="17" height="11" viewBox="0 0 17 11" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.75667 10.6538C6.3956 11.0717 5.76411 11.1177 5.34621 10.7567L0.346207 6.43667C0.131602 6.25125 0.00582357 5.98343 0.000182138 5.69987C-0.00545977 5.41632 0.109567 5.14371 0.316626 4.9499L5.31663 0.2699C5.71984 -0.107509 6.35266 -0.0865889 6.73007 0.316626C7.10748 0.719839 7.08656 1.35266 6.68334 1.73007L2.49513 5.65024L6.65376 9.2433C7.07167 9.60437 7.11774 10.2359 6.75667 10.6538Z" fill="currentColor"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M16.5 5.5C16.5 6.05228 16.0523 6.5 15.5 6.5L1.5 6.5C0.947715 6.5 0.5 6.05228 0.5 5.5C0.5 4.94771 0.947715 4.5 1.5 4.5L15.5 4.5C16.0523 4.5 16.5 4.94772 16.5 5.5Z" fill="currentColor"/>
</svg>
<svg width="17" height="11" viewBox="0 0 17 11" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M10.0386 0.346239C10.4106 -0.0716678 11.0612 -0.117742 11.4918 0.243329L16.6433 4.56333C16.8644 4.74875 16.994 5.01657 16.9998 5.30012C17.0056 5.58368 16.8871 5.85629 16.6738 6.0501L11.5223 10.7301C11.1068 11.1075 10.4548 11.0866 10.066 10.6834C9.67714 10.2802 9.69869 9.64734 10.1141 9.26993L14.4293 5.34976L10.1446 1.7567C9.71403 1.39563 9.66656 0.764145 10.0386 0.346239Z" fill="currentColor"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 5.5C0 4.94772 0.461282 4.5 1.0303 4.5H15.4545C16.0236 4.5 16.4848 4.94772 16.4848 5.5C16.4848 6.05228 16.0236 6.5 15.4545 6.5H1.0303C0.461282 6.5 0 6.05228 0 5.5Z" fill="currentColor"/>
</svg>
<svg width="16" height="14" viewBox="0 0 16 14" xmlns="http://www.w3.org/2000/svg">
<path d="M9.84254 0.288818C9.44977 -0.0994427 8.81661 -0.0957828 8.42835 0.296992C8.04009 0.689767 8.04375 1.32292 8.43653 1.71118L9.84254 0.288818ZM15 6.7931L15.7271 7.47963C16.1001 7.08455 16.0894 6.4639 15.703 6.08192L15 6.7931ZM8.41243 12.3135C8.03327 12.715 8.05144 13.3479 8.45301 13.7271C8.85458 14.1063 9.48748 14.0881 9.86664 13.6865L8.41243 12.3135ZM13.3721 7.7931C13.9244 7.7931 14.3721 7.34539 14.3721 6.7931C14.3721 6.24082 13.9244 5.7931 13.3721 5.7931V7.7931ZM1 5.7931C0.447715 5.7931 0 6.24082 0 6.7931C0 7.34539 0.447715 7.7931 1 7.7931V5.7931ZM8.43653 1.71118L14.297 7.50429L15.703 6.08192L9.84254 0.288818L8.43653 1.71118ZM14.2729 6.10658L8.41243 12.3135L9.86664 13.6865L15.7271 7.47963L14.2729 6.10658ZM13.3721 5.7931H1V7.7931H13.3721V5.7931Z" fill="currentColor"/>
</svg>
<svg width="22" height="18" viewBox="0 0 22 18" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M10.5626 17.5098C10.0049 18.1224 9.05621 18.1669 8.44365 17.6091L0.490157 10.3678C0.184593 10.0896 0.00733684 9.69761 0.000224305 9.28443C-0.00689014 8.87125 0.156768 8.47344 0.452577 8.18488L8.40606 0.426257C8.99907 -0.152219 9.94874 -0.140441 10.5272 0.452565C11.1057 1.04557 11.0939 1.99524 10.5009 2.57372L5.1858 7.75861L20.5 7.75861C21.3284 7.75861 22 8.43018 22 9.25861C22 10.087 21.3284 10.7586 20.5 10.7586L5.37558 10.7586L10.4633 15.3908C11.0759 15.9486 11.1204 16.8973 10.5626 17.5098Z" fill="currentColor"/>
</svg>
<svg width="21" height="17" viewBox="0 0 21 17" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M2.44727 8.36693L8.29444 14.7339L18.8194 2" stroke="white" stroke-opacity="0.67" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
<svg width="24" height="24" xmlns="http://www.w3.org/2000/svg">
<path d="M17.8552 4.45284L4.44862 17.8595c-.46863.4686-.46863 1.2284 0 1.697.46862.4686 1.22841.4686 1.69704 0L19.5523 6.14988c.4686-.46862.4686-1.22841 0-1.69704-.4687-.46862-1.2284-.46862-1.6971 0z" fill="currentColor"/>
<path d="M19.5523 17.8551L6.14566 4.44851c-.46863-.46863-1.22842-.46863-1.69704 0-.46863.46862-.46863 1.22841 0 1.69704L17.8552 19.5522c.4687.4686 1.2284.4686 1.6971 0 .4686-.4687.4686-1.2285 0-1.6971z" fill="currentColor"/>
</svg>
<svg width="17" height="16" viewBox="0 0 17 16" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M2.97052 8.7225L11.693 0L16.003 4.30994L7.28047 13.0324L2.97052 8.7225ZM1.45125 10.195L0 16L5.80499 14.5488L1.45125 10.195Z" fill="currentColor"/>
</svg>
<svg width="20" height="14" viewBox="0 0 20 14" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M10 13.5234C15.5228 13.5234 20 7.02344 20 7.02344C20 7.02344 15.5228 0.523438 10 0.523438C4.47715 0.523438 0 7.02344 0 7.02344C0 7.02344 4.47715 13.5234 10 13.5234ZM9.99984 10.5248C11.8408 10.5248 13.3332 8.95782 13.3332 7.02482C13.3332 5.09182 11.8408 3.52482 9.99984 3.52482C8.15889 3.52482 6.6665 5.09182 6.6665 7.02482C6.6665 8.95782 8.15889 10.5248 9.99984 10.5248Z" fill="currentColor"/>
<ellipse cx="10" cy="6.82363" rx="2" ry="2.1" fill="currentColor"/>
</svg>
<svg width="21" height="13" viewBox="0 0 21 13" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M10.5 13C16.299 13 21 6.5 21 6.5C21 6.5 16.299 0 10.5 0C4.70101 0 0 6.5 0 6.5C0 6.5 4.70101 13 10.5 13ZM10.5 11.0015C12.9853 11.0015 15 8.98675 15 6.50146C15 4.01618 12.9853 2.00146 10.5 2.00146C8.01472 2.00146 6 4.01618 6 6.50146C6 8.98675 8.01472 11.0015 10.5 11.0015Z" fill="currentColor"/>
<circle cx="10.5" cy="6.5" r="2.5" fill="currentColor"/>
<mask id="mask0" mask-type="alpha" maskUnits="userSpaceOnUse" x="0" y="0" width="21" height="13">
<path d="M21 6.5C21 6.5 16.299 13 10.5 13C4.70101 13 0 6.5 0 6.5C0 6.5 4.70101 0 10.5 0C16.299 0 21 6.5 21 6.5Z" fill="white"/>
</mask>
<g mask="url(#mask0)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M15.0589 12.881L4.47549 1.47964L5.94131 0.118988L16.5247 11.5204L15.0589 12.881Z" fill="white"/>
</g>
</svg>
<svg width="11" height="18" viewBox="0 0 11 18" xmlns="http://www.w3.org/2000/svg">
<path d="M1.65127 0.241154C1.23217 -0.118533 0.600841 -0.0703692 0.241154 0.34873C-0.118533 0.767829 -0.0703692 1.39916 0.34873 1.75885L1.65127 0.241154ZM10 8.72414L10.6769 9.46024C10.8872 9.26684 11.0047 8.9927 10.9999 8.70701C10.995 8.42133 10.8681 8.15138 10.6513 7.96529L10 8.72414ZM0.323127 16.2639C-0.0834098 16.6377 -0.109926 17.2703 0.2639 17.6769C0.637727 18.0834 1.27034 18.1099 1.67687 17.7361L0.323127 16.2639ZM0.34873 1.75885L9.34873 9.48298L10.6513 7.96529L1.65127 0.241154L0.34873 1.75885ZM9.32313 7.98804L0.323127 16.2639L1.67687 17.7361L10.6769 9.46024L9.32313 7.98804Z" fill="currentColor"/>
</svg>
<svg width="700" height="250" viewBox="0 0 700 250" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M147.627 237.195H192.756V195.62H222.371V157.653H192.756V10.8049H126.473C96.231 57.2439 65.5186 107.448 37 158.437V195.62H147.627V237.195ZM79.4646 156.397C99.9917 119.842 124.123 80.4634 146.217 46.7324H148.724V158.908H79.4646V156.397Z" fill="#BFBFBF"/>
<path d="M349.922 243C405.862 243 439.708 198.757 439.708 123.765C439.708 48.615 405.392 5 349.922 5C294.295 5 260.135 48.615 260.135 123.608C260.135 198.757 293.981 243 349.922 243ZM349.922 205.504C324.067 205.504 308.084 177.891 308.084 123.608C308.084 69.795 324.224 42.4964 349.922 42.4964C375.776 42.4964 391.759 69.6381 391.759 123.608C391.759 177.891 375.933 205.504 349.922 205.504Z" fill="#BFBFBF"/>
<path d="M588.256 237.195H633.385V195.62H663V157.653H633.385V10.8049H567.102C536.86 57.2439 506.147 107.448 477.629 158.437V195.62H588.256V237.195ZM520.093 156.397C540.621 119.842 564.752 80.4634 586.846 46.7324H589.353V158.908H520.093V156.397Z" fill="#BFBFBF"/>
<path d="M590.98 37.8144C590.98 37.8144 584.921 47.472 574.456 40.6179C563.99 33.7638 547.636 31.6243 539.016 44.5193C530.396 57.4144 522.409 53.1056 522.409 53.1056C522.409 53.1056 535.276 60.8392 545.203 58.331C555.117 55.9131 559.62 51.0093 559.62 51.0093C559.62 51.0093 568.91 59.8184 580.207 51.7032C591.492 43.6782 591.6 39.1865 591.6 39.1865L590.98 37.8144Z" fill="#E0E0E0"/>
<path d="M583.503 169.157C591.733 176.534 602.866 180.536 610.882 187.148C621.478 195.859 619.589 215.926 617.483 221.249C615.946 217.728 614.513 214.222 610.131 211.325C604.192 207.388 593.544 203.728 588.225 197.576C582.356 190.797 581.738 178.205 582.16 170.445C583.023 172.678 584.737 177.234 587.304 180.988C589.858 184.831 592.769 187.619 597.703 191.143C583.444 175.035 585.794 172.596 583.503 169.157Z" fill="#E0E0E0"/>
<path d="M85.3707 48.2779C85.3707 48.2779 86.1862 59.6499 98.6442 58.5121C111.102 57.3742 126.547 63.1642 128.102 78.5967C129.658 94.0293 138.734 93.9754 138.734 93.9754C138.734 93.9754 123.742 94.7619 116.155 87.8865C108.537 81.0966 106.864 74.6528 106.864 74.6528C106.864 74.6528 94.5252 78.0683 88.3613 65.5989C82.1659 53.215 84.1791 49.1983 84.1791 49.1983L85.3707 48.2779Z" fill="#E0E0E0"/>
</svg>
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="9" cy="9" r="8.5" fill="#6ECE89" fill-opacity="0.46" stroke="#34BE5B"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.8512 7.11546C12.0308 7.28678 12.0506 7.58642 11.8954 7.78471L8.42415 11.8357C8.34445 11.9375 8.22934 11.9972 8.10746 11.9999C7.98558 12.0026 7.86841 11.948 7.7851 11.8498L6.11602 9.95175C5.9538 9.76043 5.96279 9.46016 6.1361 9.28109C6.30941 9.10201 6.58141 9.11194 6.74363 9.30326L8.08612 10.8161L11.2449 7.16429C11.4001 6.96599 11.6716 6.94413 11.8512 7.11546Z" fill="#34BE5B"/>
</svg>
<svg width="26" height="26" viewBox="0 0 26 26" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="13" cy="13" r="13" fill="#7CD996"/>
<path d="M13.8385 13.8052H18V12.1948H13.8385V8H12.1615V12.1948H8V13.8052H12.1615V18H13.8385V13.8052Z" fill="white"/>
</svg>
<svg width="60" height="60" viewBox="0 0 60 60" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="60" height="60" fill="white"/>
<path d="M57.2864 13.4848V18.3612H0.675317C0.453364 18.3612 0.231411 18.3873 0.0355699 18.3808V7.42676C0.0355699 7.15259 0.00292969 6.87841 0.00292969 6.5977C0.0290418 4.60012 1.61535 3.02687 3.60641 3.00728C6.00872 2.9877 8.41104 3.01381 10.8134 3.01381H14.9913C16.1011 3.01381 17.2043 2.93547 18.1705 3.61439C18.6405 3.94732 18.9669 4.35859 19.3129 4.80249C19.7437 5.35738 20.1811 5.91226 20.6119 6.46061C21.082 7.06119 21.552 7.66177 22.022 8.26888C22.2701 8.58223 22.5051 8.92821 22.7792 9.22197C23.2166 9.68546 23.7911 9.92047 24.4178 9.92047C24.5875 9.92047 24.7572 9.93353 24.9204 9.93353H52.175C52.6581 9.93353 53.1411 9.92047 53.6242 9.927C55.5239 9.93353 57.071 11.3566 57.2407 13.2237C57.2734 13.302 57.2864 13.3869 57.2864 13.4848Z" fill="#D4E3DD"/>
<path d="M57.2859 21.0702V31.5151C57.09 31.3258 56.8485 31.143 56.62 30.9667C56.5939 30.9472 56.5678 30.9276 56.5417 30.9015C56.5155 30.8819 56.4894 30.8623 56.4633 30.8427C56.4503 30.8362 56.4372 30.8231 56.4242 30.8166C56.2675 30.7056 56.1173 30.5946 55.9541 30.4902C55.6604 30.2878 55.3536 30.0528 55.0467 29.9223C54.9423 29.857 54.8378 29.7917 54.7399 29.7329C54.6551 29.6872 54.5767 29.635 54.4919 29.5893C54.407 29.5436 54.3221 29.5045 54.2373 29.4588C54.1524 29.4131 54.0675 29.4 53.9827 29.3347C53.9696 29.3347 53.9566 29.3151 53.9435 29.3086C53.826 29.2368 53.715 29.1846 53.5975 29.1454C53.5975 29.1454 53.5975 29.1454 53.591 29.1454C53.591 29.1454 53.591 29.1519 53.5845 29.1519C53.5061 29.1258 53.4278 29.0801 53.356 29.0801C53.2189 29.0149 53.0753 28.9365 52.9317 28.8843C52.8598 28.8582 52.788 28.819 52.7162 28.7929C52.1222 28.5644 51.5085 28.3621 50.8884 28.2119C47.8072 27.4547 44.4583 27.6309 41.5011 28.806C39.497 29.6089 37.7148 30.7644 36.2068 32.2528C36.1415 32.318 36.0763 32.3833 36.011 32.4486C35.9457 32.5139 35.8804 32.5792 35.8217 32.6444C35.3778 33.1145 34.96 33.6106 34.5683 34.1394C30.7102 39.3096 30.5927 46.7385 34.2484 52.0458C34.2549 52.0588 34.268 52.0719 34.2745 52.0849C34.4312 52.3134 34.5944 52.5419 34.7641 52.7639C34.9404 52.9923 35.1232 53.2469 35.3125 53.4428H4.65031C4.29127 53.4428 3.93222 53.4558 3.57318 53.4493C1.59519 53.4232 0.0284582 51.8434 0.00234601 49.8589C-0.0107101 48.8666 0.0349862 47.8678 0.0349862 46.8756V21.0376H57.0639C57.1422 21.0376 57.2206 21.0702 57.2859 21.0702Z" fill="#D4E3DD"/>
<path d="M59.9623 42.097C59.9493 41.9207 59.9297 41.7379 59.9101 41.5617C59.9101 41.5551 59.9101 41.5421 59.9101 41.5355C59.9101 41.5225 59.9036 41.5094 59.9036 41.4964C59.8905 41.4115 59.8774 41.3201 59.8644 41.2353C59.7338 40.4911 59.551 39.7599 59.303 39.0418C59.2312 38.8264 59.1528 38.6175 59.068 38.4086C59.0549 38.3825 59.0353 38.3303 59.0223 38.2976C59.0223 38.2976 59.0223 38.2976 59.0223 38.2911C58.9962 38.2324 58.9635 38.1671 58.9374 38.1083C58.7938 37.795 58.6436 37.4882 58.4804 37.1879C58.2911 36.8419 58.0888 36.5024 57.8733 36.176C57.7689 36.0194 57.6644 35.8627 57.5535 35.7125C57.5274 35.6734 57.4164 35.5232 57.3642 35.4449C56.9398 34.8574 56.4045 34.3286 55.8823 33.839C55.6016 33.5779 55.3078 33.3298 55.0075 33.0883C55.001 33.0817 54.9945 33.0752 54.9879 33.0687C54.9749 33.0622 54.9684 33.0491 54.9488 33.0426C54.877 32.9903 54.8052 32.9381 54.7334 32.8859C54.5767 32.7749 54.4135 32.6639 54.2568 32.5595C53.604 32.1286 52.9186 31.7696 52.207 31.4432C52.1939 31.4367 52.1809 31.4301 52.1678 31.4236C52.1613 31.4171 52.1483 31.4171 52.1352 31.4106C52.0373 31.3714 51.9394 31.3322 51.8349 31.2931C51.6652 31.2278 51.502 31.169 51.3322 31.1103C50.9732 30.9862 50.6076 30.8818 50.2421 30.7904C49.8373 30.6859 49.4261 30.6076 49.0083 30.5423C49.0017 30.5423 48.9103 30.5293 48.8451 30.5162H48.8385C48.7798 30.5097 48.708 30.5032 48.708 30.5032C48.5252 30.4836 48.3359 30.464 48.1531 30.4509C47.4089 30.3987 46.6647 30.4052 45.9205 30.464C45.7377 30.4771 45.5615 30.4966 45.3852 30.5227C45.3852 30.5227 45.3852 30.5227 45.3787 30.5227C45.3721 30.5227 45.3656 30.5227 45.3591 30.5293C45.2808 30.5423 45.2089 30.5554 45.1306 30.5684C44.8173 30.6207 44.5039 30.6859 44.1906 30.7578C43.5508 30.9079 42.9176 31.1103 42.304 31.3453C42.2387 31.3714 42.1081 31.3975 42.0559 31.4432C42.1342 31.4106 42.1865 31.3844 42.2061 31.3779C42.193 31.3844 42.1669 31.391 42.1342 31.4106C42.1081 31.4236 42.082 31.4367 42.0494 31.4432C41.9123 31.502 41.7817 31.5672 41.6446 31.6325C41.3509 31.7761 41.0636 31.9263 40.7829 32.0829C40.5022 32.2396 40.2281 32.4093 39.9539 32.5921C39.7254 32.7488 39.3337 32.9316 39.164 33.1535C39.2097 33.1209 39.2554 33.0883 39.2945 33.0491C39.2489 33.0883 39.2032 33.1209 39.1575 33.1601C39.0922 33.2123 39.0204 33.271 38.9551 33.3298C38.8441 33.4212 38.7331 33.5191 38.6222 33.617C38.4002 33.8129 38.1913 34.0152 37.9824 34.2176C37.7343 34.4657 37.4993 34.7268 37.2709 34.9879C37.1729 35.0989 37.0815 35.2099 36.9902 35.3274C36.9771 35.347 36.9575 35.36 36.9445 35.3796C36.9183 35.4122 36.8922 35.4514 36.8792 35.471C36.494 35.9867 36.1415 36.5351 35.8282 37.0965C35.665 37.3968 35.5083 37.6971 35.3647 38.0039C35.332 38.0692 35.3059 38.141 35.2733 38.2062C35.2472 38.2585 35.2276 38.3172 35.2015 38.3694C35.2211 38.3172 35.2472 38.265 35.2668 38.2128C35.1884 38.2911 35.1427 38.5261 35.1035 38.6306C34.8685 39.2507 34.6792 39.8839 34.5356 40.5237C34.4638 40.8501 34.4051 41.183 34.3528 41.5094C34.3528 41.516 34.3528 41.5225 34.3463 41.529C34.3463 41.529 34.3463 41.529 34.3463 41.5355C34.3398 41.6074 34.3267 41.6792 34.3202 41.751C34.3006 41.9207 34.2875 42.0904 34.2745 42.2602C34.2223 42.9978 34.2223 43.7355 34.2875 44.4732C34.3006 44.6037 34.3071 44.7343 34.3267 44.8583C34.3267 44.8779 34.3332 44.9301 34.3398 44.9823C34.3398 44.9889 34.3398 44.9954 34.3398 45.0085C34.3594 45.1651 34.392 45.3283 34.4181 45.485C34.4834 45.844 34.5617 46.1966 34.6531 46.5491C34.7641 46.9669 34.8881 47.3781 35.0383 47.7829C35.097 47.9526 35.1623 48.1158 35.2276 48.2855C35.2341 48.2921 35.2341 48.3051 35.2341 48.3116V48.3182C35.2406 48.3312 35.2472 48.3443 35.2537 48.3573C35.2863 48.4226 35.3124 48.4879 35.3386 48.5532C35.665 49.2582 36.0501 49.9371 36.481 50.5834C36.5985 50.7597 36.7225 50.9294 36.8465 51.0991C36.8596 51.1187 36.8726 51.1383 36.8792 51.1513C36.8857 51.1579 36.8857 51.1579 36.8922 51.1644C36.9445 51.2297 37.0032 51.3015 37.0554 51.3668C37.2839 51.6475 37.5255 51.9216 37.78 52.1828C38.0412 52.4504 38.3088 52.7115 38.5895 52.9596C38.7397 53.0967 38.8963 53.2273 39.053 53.3578C39.1052 53.4035 39.1575 53.4427 39.2097 53.4884C39.2227 53.4949 39.2293 53.508 39.2423 53.5145C39.2489 53.521 39.2554 53.521 39.2619 53.5275C39.8755 53.9715 40.5022 54.3827 41.1681 54.7287C41.4684 54.8854 41.7752 55.042 42.0951 55.1726C42.1016 55.1726 42.1081 55.1791 42.1147 55.1791C42.1212 55.1791 42.1212 55.1857 42.1277 55.1857C42.2126 55.2183 42.4084 55.2901 42.4541 55.3097C42.6304 55.375 42.8132 55.4403 42.9959 55.499C43.714 55.734 44.4517 55.9168 45.1959 56.0343C45.2546 56.0474 45.3199 56.0539 45.3787 56.0604C45.4635 56.0735 45.5484 56.08 45.6333 56.0865C45.8291 56.1061 46.0315 56.1257 46.2273 56.1388C46.5798 56.1583 46.9389 56.1714 47.2914 56.1649C47.6635 56.1583 48.0421 56.1388 48.4142 56.1061C48.5513 56.0931 48.6884 56.08 48.8255 56.0604H48.832H48.8385C48.9169 56.0474 48.9887 56.0408 49.067 56.0278C49.7263 55.9233 50.3726 55.7667 51.0058 55.5643C51.3192 55.4664 51.626 55.3554 51.9328 55.2379C51.9655 55.2248 52.0242 55.2118 52.0764 55.1922C52.0895 55.1791 52.1156 55.1661 52.1483 55.153C52.2984 55.0877 52.442 55.0225 52.5922 54.9507C53.1732 54.67 53.7411 54.3501 54.2829 53.991C54.4853 53.8539 54.779 53.7103 54.9749 53.5275C54.9945 53.4949 55.0402 53.4492 55.0728 53.4231C55.1185 53.3839 55.1642 53.3513 55.2099 53.3121C55.3339 53.2077 55.458 53.1032 55.5755 52.9988C56.0455 52.581 56.4894 52.1371 56.9007 51.6605C57.0247 51.5169 57.1422 51.3668 57.2662 51.2231C57.2793 51.2036 57.2989 51.184 57.3185 51.1709C57.3511 51.1252 57.3772 51.0795 57.4033 51.0404C57.5796 50.8054 57.7428 50.5638 57.906 50.3158C58.2585 49.7739 58.5718 49.1995 58.846 48.6119C58.8917 48.5205 58.9309 48.4226 58.9766 48.3312C58.9962 48.2855 59.0223 48.2529 59.0353 48.2398C59.0745 48.1419 59.1006 48.0244 59.1267 47.9461C59.2442 47.6393 59.3487 47.3259 59.4401 47.0126C59.6294 46.3728 59.7665 45.72 59.8774 45.0607C59.8774 45.0542 59.8774 45.0476 59.884 45.0411C59.884 45.0411 59.884 45.0411 59.884 45.0346C59.897 44.9497 59.9036 44.8583 59.9166 44.7734C59.9297 44.6168 59.9493 44.4666 59.9558 44.31C59.9819 43.964 59.9884 43.6245 59.995 43.2785C60.008 42.8934 59.995 42.4952 59.9623 42.097ZM52.331 44.6037H48.473V48.4944C48.473 49.2452 47.8593 49.8066 47.1347 49.8392C46.4101 49.8718 45.7965 49.1995 45.7965 48.4944V44.6037H41.9319C41.1811 44.6037 40.6197 43.9901 40.5871 43.2655C40.5545 42.5409 41.2268 41.9272 41.9319 41.9272H45.7965V38.0953C45.7965 37.3445 46.4101 36.7831 47.1347 36.7505C47.8593 36.7179 48.473 37.3902 48.473 38.0953V41.9272H52.331C53.0818 41.9272 53.6432 42.5409 53.6758 43.2655C53.7019 43.9901 53.0295 44.6037 52.331 44.6037Z" fill="#D4E3DD"/>
</svg>
<svg width="34" height="34" viewBox="0 0 34 34" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M6.47368 1H27.5263C30.5789 1 33 3.52632 33 6.47368V27.5263C33 30.5789 30.4737 33 27.5263 33H6.47368C3.42105 33 1 30.4737 1 27.5263V6.47368C1 3.42105 3.42105 1 6.47368 1Z" stroke="#8A8A8A" stroke-width="1.5"/>
<path d="M27.1403 13.8497L27.1308 10.6324C27.1308 10.3126 26.9149 10.0533 26.6484 10.0533H25.6834V8.31644C25.6834 7.99658 25.4676 7.73758 25.201 7.73758H24.236V6.00073C24.236 5.68087 24.0202 5.42188 23.7537 5.42188H19.4115C19.2832 5.42188 19.1607 5.48301 19.0702 5.59139L17.7643 7.15872H10.2447C9.97789 7.15872 9.76229 7.41772 9.76229 7.73758V9.47443H8.7973C8.53052 9.47443 8.31491 9.73343 8.31491 10.0533V11.7901H7.34992C7.08314 11.7901 6.86754 12.0494 6.86754 12.3693V13.8497L5.42967 15.4295L5.42161 26.5783C5.42081 27.6835 6.31648 28.5798 7.42161 28.5798H26.5796C27.6836 28.5798 28.5788 27.6852 28.5796 26.5812L28.5877 15.4454L27.1403 13.8497ZM10.7273 8.31644H17.9642C18.0922 8.31644 18.2147 8.2553 18.3053 8.14692L19.6114 6.57959H23.2713V7.73758H20.8589C20.7306 7.73758 20.6081 7.79872 20.5176 7.9071L19.2114 9.47443H10.7273V8.31644ZM9.27991 10.6324H19.4115C19.5396 10.6324 19.6621 10.5713 19.7526 10.4629L21.0588 8.89557H24.7186V10.0533H22.3063C22.178 10.0533 22.0555 10.1144 21.9649 10.2228L20.6588 11.7901H9.27991V10.6324ZM7.83253 12.9481H20.8589C20.987 12.9481 21.1095 12.887 21.2 12.7786L22.5061 11.2113H26.166L26.1755 14.5272H7.84204L7.83253 12.9481ZM27.1317 25.7913C27.1312 26.3432 26.6836 26.7903 26.1317 26.7903H7.86754C7.31526 26.7903 6.86754 26.3426 6.86754 25.7903V16.264H27.1405L27.1317 25.7913Z" fill="#8A8A8A"/>
</svg>
<svg width="60" height="60" viewBox="0 0 60 60" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="30" cy="30" r="30" fill="#D8960D" fill-opacity="0.5"/>
<path d="M27.3626 17L27.7912 33.7434H32.1923L32.6374 17H27.3626ZM30 43C31.8626 43 33 41.8269 33 39.9389C33 38.0326 31.8626 36.8595 30 36.8595C28.1538 36.8595 27 38.0326 27 39.9389C27 41.8269 28.1538 43 30 43Z" fill="white"/>
</svg>
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M16.4211 1.24211H14.3789V0.505263C14.3789 0.231579 14.1474 0 13.8737 0C13.6 0 13.3684 0.231579 13.3684 0.505263V1.22105H6.02105V0.505263C6.02105 0.231579 5.78947 0 5.51579 0C5.24211 0 5.01053 0.231579 5.01053 0.505263V1.22105H2.94737C1.32632 1.24211 0 2.54737 0 4.16842V17.0737C0 18.6947 1.32632 20 2.92632 20H16.4C18.0211 20 19.3263 18.6737 19.3263 17.0737V4.16842C19.3684 2.54737 18.0421 1.24211 16.4211 1.24211ZM2.94737 2.25263H4.98947V2.96842C4.98947 3.24211 5.22105 3.47368 5.49474 3.47368C5.76842 3.47368 6 3.24211 6 2.96842V2.25263H13.3474V2.96842C13.3474 3.24211 13.5789 3.47368 13.8526 3.47368C14.1263 3.47368 14.3579 3.24211 14.3579 2.96842V2.25263H16.4211C17.4737 2.25263 18.3368 3.11579 18.3368 4.16842V5.05263H1.03158V4.16842C1.03158 3.11579 1.89474 2.25263 2.94737 2.25263ZM16.4211 18.9684H2.94737C1.89474 18.9684 1.03158 18.1053 1.03158 17.0526V6.08421H18.3368V17.0737C18.3368 18.1263 17.4737 18.9684 16.4211 18.9684Z" fill="#34BE5B"/>
<path d="M15.0526 16.568H14.6737V13.9996C14.6737 13.1154 13.9579 12.3996 13.0737 12.3996H11.0737V11.5364C11.0737 11.0733 10.6947 10.7154 10.2526 10.7154H10.1053V10.3575C10.5684 10.168 10.9053 9.70483 10.9053 9.13641C10.9053 8.56799 10.4842 8.06273 10.1474 7.68378C9.9158 7.41009 9.43159 7.41009 9.20001 7.68378L9.13686 7.76799C8.86317 8.08378 8.44212 8.58904 8.44212 9.15746C8.44212 9.72588 8.77896 10.189 9.24212 10.3785V10.7364H9.1158C8.65264 10.7364 8.29475 11.1154 8.29475 11.5575V12.4206H6.3158C5.43159 12.4206 4.7158 13.1364 4.7158 14.0206V16.589H4.33685C4.10528 16.589 3.9158 16.7785 3.9158 17.0101C3.9158 17.2417 4.10528 17.4311 4.33685 17.4311H15.0737C15.3053 17.4311 15.4947 17.2417 15.4947 17.0101C15.4737 16.7575 15.2842 16.568 15.0526 16.568ZM9.68422 8.42062C9.85264 8.63115 10.0632 8.92588 10.0632 9.11536C10.0632 9.36799 9.89475 9.57852 9.68422 9.57852C9.4737 9.57852 9.30528 9.36799 9.30528 9.11536C9.30528 8.90483 9.5158 8.63115 9.68422 8.42062ZM9.13686 11.5575L10.1895 11.5364V12.3996H9.13686V11.5575ZM6.3158 13.2627H13.0526C13.4737 13.2627 13.8105 13.5996 13.8105 14.0206V14.3996C13.4316 14.168 12.9684 14.168 12.6105 14.4206L12.2105 14.7154C12.1263 14.7785 12.0211 14.7785 11.9369 14.7154L11.5158 14.4206C11.1369 14.1469 10.6316 14.1469 10.2526 14.4206L9.85264 14.7154C9.76843 14.7785 9.66317 14.7785 9.57896 14.7154L9.15791 14.4206C8.77896 14.1469 8.2737 14.1469 7.89475 14.4206L7.4737 14.7154C7.38949 14.7785 7.28422 14.7785 7.20001 14.7154L6.77896 14.4206C6.42107 14.168 5.93685 14.168 5.55791 14.3996V13.9996C5.55791 13.5785 5.89475 13.2627 6.3158 13.2627ZM5.55791 15.4101C5.57896 15.4101 5.57896 15.4101 5.60001 15.389L6.00001 15.0943C6.08422 15.0311 6.18949 15.0311 6.2737 15.0943L6.6737 15.389C6.86317 15.5154 7.0737 15.5785 7.30528 15.5785C7.53685 15.5785 7.74738 15.5154 7.93685 15.368L8.35791 15.0733C8.44212 15.0101 8.54738 15.0101 8.63159 15.0733L9.05264 15.368C9.43159 15.6417 9.93685 15.6417 10.3158 15.368L10.7158 15.0733C10.8 15.0101 10.9053 15.0101 10.9895 15.0733L11.4105 15.368C11.7895 15.6417 12.2947 15.6417 12.6737 15.368L13.0737 15.0733C13.1579 15.0101 13.2632 15.0101 13.3474 15.0733L13.7684 15.368H13.7895V16.5048H5.55791V15.4101Z" fill="#34BE5B"/>
</svg>
<svg fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><rect height="18" rx="2" ry="2" width="18" x="3" y="4"/><line x1="16" x2="16" y1="2" y2="6"/><line x1="8" x2="8" y1="2" y2="6"/><line x1="3" x2="21" y1="10" y2="10"/></svg>
<svg width="15" height="11" viewBox="0 0 15 11" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.648 0.254006C15.0729 0.63092 15.1197 1.29011 14.7526 1.72636L6.54308 10.6386C6.3546 10.8626 6.08235 10.9939 5.79411 10.9998C5.50587 11.0057 5.22875 10.8856 5.03174 10.6695L0.274381 5.45008C-0.109266 5.02918 -0.0879995 4.36859 0.321879 3.97463C0.731757 3.58066 1.37504 3.6025 1.75868 4.0234L5.74365 8.39538L13.2143 0.36143C13.5813 -0.0748123 14.2232 -0.122908 14.648 0.254006Z" fill="currentColor"/>
</svg>
<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
<path d="M15.5864 3.00346L3 15.5898L4.4142 17.004L17.0006 4.41766L15.5864 3.00346Z" fill="currentColor"/>
<path d="M4.4142 2.99986L3 4.41406L15.5864 17.0004L17.0006 15.5862L4.4142 2.99986Z" fill="currentColor"/>
</svg>
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.03115 1.6947C3.60817 1.6947 1.6947 3.60817 1.6947 6.03115V25.9688C1.6947 28.3028 3.61871 30.3053 6.03115 30.3053H25.9688C28.3028 30.3053 30.3053 28.3813 30.3053 25.9688V6.03115C30.3053 3.69724 28.3813 1.6947 25.9688 1.6947H6.03115ZM0 6.03115C0 2.67221 2.67221 0 6.03115 0H25.9688C29.3383 0 32 2.78251 32 6.03115V25.9688C32 29.3383 29.2175 32 25.9688 32H6.03115C2.66166 32 0 29.2175 0 25.9688V6.03115Z" fill="#4591A9"/>
<path d="M23 21H9V22H23V21Z" fill="#4591A9" stroke="#4591A9" stroke-width="0.5"/>
<path d="M23 24H9V25H23V24Z" fill="#4591A9" stroke="#4591A9" stroke-width="0.5"/>
<path d="M16 27H9V28H16V27Z" fill="#4591A9" stroke="#4591A9" stroke-width="0.5"/>
<path d="M9.51852 18H22.4815C22.7682 18 23 17.7468 23 17.4348V5.56522C23 5.25322 22.7682 5 22.4815 5H9.51852C9.23178 5 9 5.25322 9 5.56522V17.4348C9 17.7468 9.23178 18 9.51852 18ZM16.8063 11.5L21.963 6.77817V16.2218L16.8063 11.5ZM21.0581 16.8696H10.9419L16 12.2382L21.0581 16.8696ZM16 10.7618L10.9419 6.13043H21.0576L16 10.7618ZM15.1937 11.5L10.037 16.2218V6.77817L15.1937 11.5Z" fill="#4591A9" stroke="#4591A9" stroke-width="0.5"/>
</svg>
<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M3.93335 6H16.0667V17.1981C16.0667 18.1289 15.356 19 14.3377 19H5.66235C4.64407 19 3.93335 18.1289 3.93335 17.1981V6ZM5.02535 7.04107V17.1981C5.02535 17.6827 5.37392 17.9589 5.66235 17.9589H14.3377C14.6261 17.9589 14.9747 17.6827 14.9747 17.1981V7.04107H5.02535Z" fill="currentColor"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.2 9C7.45774 9 7.66667 9.2032 7.66667 9.45385V15.5461C7.66667 15.7968 7.45774 16 7.2 16C6.94227 16 6.73334 15.7968 6.73334 15.5461V9.45385C6.73334 9.2032 6.94227 9 7.2 9Z" fill="currentColor"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.99999 9C10.2577 9 10.4667 9.2032 10.4667 9.45385V15.5461C10.4667 15.7968 10.2577 16 9.99999 16C9.74226 16 9.53333 15.7968 9.53333 15.5461V9.45385C9.53333 9.2032 9.74226 9 9.99999 9Z" fill="currentColor"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.8 9C13.0577 9 13.2666 9.2032 13.2666 9.45385V15.5461C13.2666 15.7968 13.0577 16 12.8 16C12.5422 16 12.3333 15.7968 12.3333 15.5461V9.45385C12.3333 9.2032 12.5422 9 12.8 9Z" fill="currentColor"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M8.36367 2.02914C8.06404 2.02914 7.81224 2.26453 7.81224 2.56502V3.48459C7.81224 3.76878 7.57072 3.99916 7.27279 3.99916C6.97486 3.99916 6.73334 3.76878 6.73334 3.48459V2.56502C6.73334 1.70528 7.45866 1 8.36367 1H11.6363C12.5413 1 13.2667 1.70528 13.2667 2.56502V3.48543C13.2667 3.76962 13.0252 4 12.7272 4C12.4293 4 12.1878 3.76962 12.1878 3.48543V2.56502C12.1878 2.26453 11.936 2.02914 11.6363 2.02914H8.36367Z" fill="currentColor"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M3 3.62111C3 3.27808 3.24065 3 3.5375 3H16.4625C16.7594 3 17 3.27808 17 3.62111V6.37889C17 6.72192 16.7594 7 16.4625 7H3.5375C3.24065 7 3 6.72192 3 6.37889V3.62111ZM4 4.15556V5.84444H16V4.15556H4Z" fill="currentColor"/>
</svg>
<svg width="60" height="60" viewBox="0 0 60 60" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M27.3626 17L27.7912 33.7434H32.1923L32.6374 17H27.3626ZM30 43C31.8626 43 33 41.8269 33 39.9389C33 38.0326 31.8626 36.8595 30 36.8595C28.1538 36.8595 27 38.0326 27 39.9389C27 41.8269 28.1538 43 30 43Z" fill="white"/>
<circle cx="30" cy="30" r="30" fill="#34BE5B"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M43.3386 20.5131C44.1369 21.2746 44.2249 22.6063 43.5352 23.4876L28.1073 41.4921C27.7531 41.9447 27.2415 42.2099 26.6998 42.2218C26.1581 42.2337 25.6374 41.9911 25.2671 41.5545L17.849 33.1189C17.128 32.2686 17.168 30.9341 17.9382 30.1382C18.7085 29.3423 19.9174 29.3864 20.6383 30.2367L26.605 36.9604L40.6441 20.7302C41.3339 19.8489 42.5402 19.7517 43.3386 20.5131Z" fill="white"/>
</svg>
<svg width="21" height="20" viewBox="0 0 21 20" xmlns="http://www.w3.org/2000/svg">
<path d="M20.0379 14.5562V18.9915C20.0379 19.0799 20.0253 19.1619 20.0063 19.2376C19.918 19.6729 19.5331 20.001 19.0789 20.001H0.952682C0.466877 20.001 0.0630916 19.6288 0.0126184 19.1556C4.7947e-08 19.0988 0 19.0483 0 18.9852V14.5499C0 14.0262 0.429023 13.6035 0.946373 13.6035C1.20505 13.6035 1.4448 13.7108 1.61514 13.8811C1.78549 14.0515 1.89275 14.2912 1.89275 14.5499V18.1019H18.1514V14.5499C18.1514 14.0262 18.5805 13.6035 19.0978 13.6035C19.3565 13.6035 19.5962 13.7108 19.7666 13.8811C19.9306 14.0578 20.0379 14.2975 20.0379 14.5562Z" fill="currentColor"/>
<path d="M15.4764 10.1136L10.8265 14.7634C10.8202 14.776 10.8076 14.7824 10.8013 14.7887C10.631 14.959 10.4101 15.0663 10.1893 15.0978C10.1704 15.0978 10.1515 15.1041 10.1325 15.1041C10.0947 15.1104 10.0568 15.1104 10.019 15.1104L9.91172 15.1041C9.89279 15.1041 9.87386 15.0978 9.85493 15.0978C9.6278 15.0663 9.41329 14.959 9.24295 14.7887C9.23664 14.7824 9.22402 14.7697 9.21771 14.7634L4.56786 10.1136C4.35335 9.89907 4.24609 9.61515 4.24609 9.33124C4.24609 9.04733 4.35335 8.76342 4.56786 8.54891C4.99688 8.11988 5.6972 8.11988 6.13253 8.54891L8.92749 11.3439V1.1041C8.92749 0.498423 9.42591 0 10.0316 0C10.3344 0 10.612 0.126183 10.8139 0.321767C11.0158 0.52366 11.1357 0.794954 11.1357 1.1041V11.3439L13.9306 8.54891C14.3597 8.11988 15.06 8.11988 15.4953 8.54891C15.9054 8.98424 15.9054 9.68456 15.4764 10.1136Z" fill="currentColor"/>
</svg>
<svg width="60" height="60" viewBox="0 0 60 60" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="30" cy="30" r="30" fill="#D4E3DD"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M25.1274 29.4889L33.2021 21.4141C33.9832 20.6331 35.2495 20.6331 36.0305 21.4142L38.5896 23.9732C39.3706 24.7542 39.3706 26.0206 38.5896 26.8016L30.5148 34.8764C29.7338 35.6574 28.4674 35.6574 27.6864 34.8764L25.1274 32.3173C24.3463 31.5363 24.3463 30.27 25.1274 29.4889ZM20.4042 38.3831C20.2211 39.1155 20.8845 39.7789 21.6169 39.5958L25.5428 38.6143C26.2969 38.4258 26.557 37.4867 26.0074 36.9371L23.0629 33.9927C22.5133 33.443 21.5742 33.7031 21.3857 34.4572L20.4042 38.3831Z" fill="white"/>
</svg>
<svg width="60" height="60" viewBox="0 0 60 60" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="30" cy="30" r="30" fill="#D4E3DD"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M23 24C23 23.4477 23.4477 23 24 23H28C28.5523 23 29 22.5523 29 22V19C29 18.4477 28.5523 18 28 18H22.5C20.0147 18 18 20.0147 18 22.5V38.5C18 40.9853 20.0147 43 22.5 43H28C28.5523 43 29 42.5523 29 42V39C29 38.4477 28.5523 38 28 38H24C23.4477 38 23 37.5523 23 37V24Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M33.9941 34.053L28.6026 33.9976C27.4981 33.9862 26.6119 33.0817 26.6232 31.9772L26.6541 28.9799C26.6654 27.8754 27.57 26.9892 28.6745 27.0005L33.9805 27.0551L33.9746 23.9997L42.9998 30.4999L33.9998 36.9998L33.9941 34.053Z" fill="white"/>
</svg>
<svg width="18" height="10" viewBox="0 0 18 10" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M18 7L8.44999 7C8.21836 5.85888 7.20948 5 6 5C4.79052 5 3.78164 5.85888 3.55001 7L2.62268e-07 7L1.74845e-07 8L3.55001 8C3.78164 9.14112 4.79052 10 6 10C7.20948 10 8.21836 9.14112 8.44999 8L18 8L18 7ZM13.5 2.5C13.5 3.32843 12.8284 4 12 4C11.1716 4 10.5 3.32843 10.5 2.5C10.5 1.67157 11.1716 0.999999 12 0.999999C12.8284 1 13.5 1.67157 13.5 2.5ZM12 5C13.2095 5 14.2184 4.14112 14.45 3L18 3L18 2L14.45 2C14.2184 0.85888 13.2095 -4.18801e-07 12 -5.24537e-07C10.7905 -6.30273e-07 9.78164 0.858879 9.55001 2L6.99382e-07 2L6.11959e-07 3L9.55001 3C9.78164 4.14112 10.7905 5 12 5Z" fill="currentColor"/>
</svg>
<svg width="60" height="60" viewBox="0 0 60 60" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="30" cy="30" r="30" fill="#D4E3DD"/>
<path d="M30 31.041C29.9168 31.041 29.8336 31.0288 29.7544 31.0003L13.5466 25.5814C13.2218 25.4717 13 25.1589 13 24.8096V22.5591C13 22.1976 13.2337 21.8767 13.5743 21.7792L29.7822 17.0305C29.9247 16.9898 30.0753 16.9898 30.2178 17.0305L46.4257 21.7792C46.7663 21.8807 47 22.1976 47 22.5591V24.8096C47 25.163 46.7782 25.4717 46.4534 25.5814L41.7321 27.1616L30.2456 31.0044C30.1664 31.0288 30.0832 31.041 30 31.041Z" fill="white"/>
<path d="M29.7979 37.8692C26.1936 37.8692 22.708 36.5693 20.4741 34.392C20.3157 34.2376 20.2285 34.0264 20.2285 33.803V27.8925C20.2285 27.4457 20.585 27.0801 21.0207 27.0801C21.4564 27.0801 21.8129 27.4457 21.8129 27.8925V33.4455C23.7656 35.2044 26.7204 36.2444 29.7979 36.2444C32.8755 36.2444 35.8303 35.2044 37.783 33.4455V27.5878C37.783 27.141 38.1395 26.7754 38.5752 26.7754C39.0109 26.7754 39.3674 27.141 39.3674 27.5878V33.807C39.3674 34.0305 39.2802 34.2417 39.1218 34.3961C36.8879 36.5693 33.4023 37.8692 29.7979 37.8692Z" fill="white"/>
<path d="M41.6331 35.3999C41.1974 35.3999 40.8409 35.0343 40.8409 34.5875V25.3541L30.5823 22.5146C30.1585 22.3968 29.9089 21.9541 30.0238 21.5194C30.1387 21.0847 30.5704 20.8288 30.9942 20.9466L41.839 23.9486C42.1836 24.0461 42.4252 24.367 42.4252 24.7326V34.5875C42.4252 35.0343 42.0688 35.3999 41.6331 35.3999Z" fill="white"/>
<path d="M41.839 27C41.4033 27 40.8409 27.4468 40.8409 27V25.3541L30.5823 22.5146C30.1585 22.3968 29.9089 21.9541 30.0238 21.5194C30.1387 21.0847 30.5704 20.8288 30.9942 20.9466L41.839 23.9486C42.1836 24.0461 42.4252 24.367 42.4252 24.7326V27C42.4252 27.4468 42.2747 27 41.839 27Z" fill="#D4E3DD"/>
<path d="M41.637 39.0834C40.2349 39.0834 39.0902 37.9134 39.0902 36.4714C39.0902 35.0333 40.2309 33.8594 41.637 33.8594C43.0431 33.8594 44.1839 35.0293 44.1839 36.4714C44.1799 37.9094 43.0392 39.0834 41.637 39.0834ZM41.637 35.4883C41.1063 35.4883 40.6746 35.9311 40.6746 36.4754C40.6746 37.0198 41.1063 37.4625 41.637 37.4625C42.1678 37.4625 42.5995 37.0198 42.5995 36.4754C42.5995 35.9311 42.1638 35.4883 41.637 35.4883Z" fill="white"/>
<path d="M43.3957 42.9999H39.8745C39.6328 42.9999 39.4031 42.8862 39.2526 42.6871C39.1021 42.4921 39.0466 42.2362 39.106 41.9925L40.0725 37.9465C40.1755 37.5119 40.6072 37.2438 41.031 37.3494C41.3835 37.4388 41.6212 37.7556 41.6331 38.109C41.645 37.7556 41.8866 37.4388 42.2351 37.3494C42.6589 37.2438 43.0907 37.5078 43.1936 37.9465L44.1601 41.9925C44.2195 42.2362 44.1641 42.4921 44.0135 42.6871C43.867 42.8862 43.6373 42.9999 43.3957 42.9999Z" fill="white"/>
</svg>
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="9" cy="9" r="8.5" fill="#FF0000" fill-opacity="0.1" stroke="#FF0D0D"/>
<line x1="15.3536" y1="3.35355" x2="3.35355" y2="15.3536" stroke="#E40606"/>
</svg>
<svg width="16" height="20" viewBox="0 0 16 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M8 1.30841C4.32465 1.30841 1.28736 4.44313 1.28736 8.32759C1.28736 11.3591 2.9183 13.0882 5.56846 15.8979C5.8205 16.1651 6.08177 16.4421 6.35172 16.7309C6.56916 16.9635 6.8106 17.1986 7.06572 17.4467L7.07155 17.4523C7.32044 17.6944 7.58254 17.9493 7.82299 18.2066L8 18.3959L8.17701 18.2066C8.41746 17.9493 8.67956 17.6944 8.92845 17.4523L8.93428 17.4467C9.1894 17.1986 9.43083 16.9635 9.64828 16.7309C9.6532 16.7257 9.65821 16.7205 9.66331 16.7154C12.5626 13.8137 14.7126 11.6454 14.7126 8.32759C14.7126 4.44313 11.6754 1.30841 8 1.30841ZM0 8.32759C0 3.75166 3.5834 0 8 0C12.4166 0 16 3.75166 16 8.32759C16 12.2127 13.4696 14.7438 10.7296 17.4846C10.6778 17.5363 10.626 17.5882 10.5741 17.6401C10.3357 17.8947 10.0764 18.1468 9.83011 18.3864L9.82434 18.392C9.56922 18.6401 9.32778 18.8751 9.11034 19.1077L8.46667 19.7964C8.34514 19.9264 8.17644 20 8 20C7.82356 20 7.65486 19.9264 7.53333 19.7964L6.88966 19.1077C6.67221 18.8751 6.43078 18.6401 6.17566 18.392L6.16989 18.3864C5.92097 18.1443 5.65886 17.8894 5.41839 17.6321C5.1369 17.3309 4.85996 17.0387 4.58923 16.7531C2.0127 14.0347 0 11.9111 0 8.32759Z" fill="#34BE5B"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.89485 5.07373C6.29445 5.07373 4.96546 6.4146 4.96546 8.10822C4.96546 9.80183 6.29445 11.1427 7.89485 11.1427C9.49525 11.1427 10.8242 9.80183 10.8242 8.10822C10.8242 6.4146 9.49525 5.07373 7.89485 5.07373ZM3.6781 8.10822C3.6781 5.73905 5.54854 3.78638 7.89485 3.78638C10.2412 3.78638 12.1116 5.73905 12.1116 8.10822C12.1116 10.4774 10.2412 12.4301 7.89485 12.4301C5.54854 12.4301 3.6781 10.4774 3.6781 8.10822Z" fill="#34BE5B"/>
</svg>
<svg width="18" height="20" viewBox="0 0 18 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M10.6954 13.3886C10.9959 13.1845 11.4087 13.0305 11.8737 13.0851C12.932 13.2092 14.0739 13.7526 15.0703 14.4414C16.078 15.1381 17.0177 16.0392 17.6572 16.972C18.1651 17.7127 18.08 18.5254 17.5902 19.1216C17.1306 19.681 16.365 19.9999 15.5586 19.9999H2.44191C1.63498 19.9999 0.869081 19.6806 0.409519 19.1209C-0.0803018 18.5242 -0.164976 17.7113 0.343335 16.9704C0.98303 16.0381 1.92231 15.1373 2.92962 14.4409C3.92557 13.7523 5.06688 13.2091 6.12487 13.0851C6.58984 13.0305 7.00265 13.1845 7.30321 13.3886L8.99928 14.5402L10.6954 13.3886ZM11.6678 14.5208C11.6503 14.5258 11.623 14.5372 11.5896 14.5599L9.44642 16.0151C9.17934 16.1964 8.81922 16.1964 8.55214 16.0151L6.40892 14.5599C6.37556 14.5372 6.34821 14.5258 6.33078 14.5208C6.32051 14.5179 6.31494 14.5174 6.31318 14.5174C5.61973 14.5989 4.72633 14.9883 3.83455 15.6049C2.95389 16.2138 2.15219 16.9909 1.62832 17.7545C1.54196 17.8803 1.52793 17.9723 1.5309 18.031C1.53399 18.0922 1.55797 18.1621 1.61971 18.2373C1.75022 18.3963 2.04055 18.5566 2.44191 18.5566H15.5586C15.9597 18.5566 16.2499 18.3964 16.3803 18.2376C16.442 18.1625 16.466 18.0928 16.4691 18.0317C16.4721 17.9732 16.4581 17.8814 16.3719 17.7556C15.8484 16.992 15.0465 16.2146 14.1653 15.6054C13.2731 14.9886 12.3791 14.5989 11.6854 14.5174C11.6836 14.5174 11.6781 14.5179 11.6678 14.5208Z" fill="#34BE5B"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M8.999 1.44331C6.80523 1.44331 4.9055 3.31049 4.9055 5.76178C4.9055 8.21307 6.80523 10.0803 8.999 10.0803C11.1928 10.0803 13.0925 8.21307 13.0925 5.76178C13.0925 3.31049 11.1928 1.44331 8.999 1.44331ZM3.375 5.76178C3.375 2.6459 5.82595 0 8.999 0C12.172 0 14.623 2.6459 14.623 5.76178C14.623 8.87766 12.172 11.5236 8.999 11.5236C5.82595 11.5236 3.375 8.87766 3.375 5.76178Z" fill="#34BE5B"/>
</svg>
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M19 15.2159C19 15.446 18.9574 15.7464 18.8722 16.1172C18.7869 16.4879 18.6974 16.7798 18.6037 16.9929C18.4247 17.419 17.9048 17.8707 17.044 18.348C16.2429 18.7827 15.4503 19 14.6662 19C14.4361 19 14.2124 18.9851 13.995 18.9553C13.7777 18.9254 13.5327 18.8722 13.26 18.7955C12.9872 18.7188 12.7848 18.6569 12.6527 18.6101C12.5206 18.5632 12.2841 18.4759 11.9432 18.348C11.6023 18.2202 11.3935 18.1435 11.3168 18.1179C10.4815 17.8196 9.73578 17.4659 9.07954 17.0568C7.98864 16.3835 6.86151 15.4652 5.69816 14.3018C4.5348 13.1385 3.61647 12.0114 2.94317 10.9205C2.5341 10.2642 2.18041 9.51846 1.88211 8.68322C1.85653 8.60651 1.77984 8.3977 1.65199 8.05681C1.52414 7.7159 1.43678 7.47938 1.3899 7.34729C1.34304 7.21519 1.28125 7.01277 1.20454 6.74003C1.12785 6.46731 1.07457 6.22229 1.04475 6.00495C1.01489 5.78765 1 5.56393 1 5.3338C1 4.54971 1.21734 3.75709 1.65197 2.95597C2.12925 2.09517 2.58098 1.57528 3.00711 1.3963C3.22017 1.30255 3.51207 1.21306 3.88281 1.12785C4.25354 1.04261 4.55398 1 4.7841 1C4.90342 1 4.99291 1.01278 5.05255 1.03836C5.20597 1.08949 5.43181 1.41335 5.73012 2.00995C5.82386 2.17188 5.9517 2.402 6.11363 2.70028C6.27556 2.99858 6.42472 3.26918 6.56109 3.51207C6.69744 3.75497 6.82954 3.98296 6.95738 4.19604C6.98296 4.23012 7.05753 4.33666 7.1811 4.51562C7.30468 4.69461 7.39631 4.84588 7.45597 4.96946C7.51563 5.09303 7.54544 5.2145 7.54544 5.3338C7.54544 5.50425 7.42401 5.71734 7.1811 5.97301C6.93821 6.2287 6.67401 6.46307 6.3885 6.67613C6.10298 6.8892 5.83878 7.11506 5.59589 7.3537C5.35298 7.59232 5.23153 7.78836 5.23153 7.94176C5.23153 8.01847 5.25283 8.11434 5.29546 8.22941C5.33807 8.34446 5.37428 8.43182 5.40411 8.49148C5.43394 8.55114 5.4936 8.65341 5.58309 8.79829C5.67258 8.94319 5.72161 9.02415 5.73012 9.0412C6.37783 10.2088 7.11931 11.2102 7.95454 12.0455C8.78978 12.8807 9.79119 13.6222 10.9588 14.2699C10.9759 14.2784 11.0568 14.3274 11.2017 14.4169C11.3466 14.5064 11.4489 14.5661 11.5085 14.5959C11.5682 14.6257 11.6555 14.6619 11.7706 14.7045C11.8857 14.7472 11.9815 14.7685 12.0582 14.7685C12.2116 14.7685 12.4077 14.647 12.6463 14.4041C12.8849 14.1612 13.1108 13.897 13.3239 13.6115C13.5369 13.326 13.7713 13.0618 14.027 12.8189C14.2827 12.576 14.4957 12.4545 14.6662 12.4545C14.7855 12.4545 14.907 12.4844 15.0305 12.544C15.1541 12.6037 15.3054 12.6953 15.4844 12.8189C15.6634 12.9425 15.7699 13.017 15.804 13.0426C16.017 13.1705 16.245 13.3026 16.4879 13.4389C16.7308 13.5753 17.0014 13.7244 17.2997 13.8864C17.598 14.0483 17.8281 14.1761 17.99 14.2699C18.5867 14.5682 18.9105 14.794 18.9616 14.9475C18.9872 15.0071 19 15.0966 19 15.2159Z" stroke="#34BE5B" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg">
<rect x="0.5" y="0.5" width="29" height="29" rx="2.5" fill="none" stroke="currentColor"/>
<circle cx="18.75" cy="8.25" r="2.25" fill="currentColor"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.6627 9.00918C11.9837 8.95935 12.3032 9.11462 12.5115 9.42168L16.27 15.5254L18.8862 13.1402C19.0778 12.8557 19.5437 12.7094 19.6641 12.7165C19.9626 12.7341 20.2372 12.9241 20.4061 13.2298L25.3328 22.1462C25.5331 22.5087 25.5551 22.979 25.3899 23.3678C25.2248 23.7566 24.8997 24 24.5455 24H5.45455C5.12593 24 4.82041 23.7903 4.64584 23.4449C4.47126 23.0995 4.45217 22.667 4.5953 22.3L10.922 9.66843C11.0629 9.30716 11.3417 9.05901 11.6627 9.00918ZM11.9991 12.3444L6.97684 21.6316H22.7338L19.5437 15.858L17.0053 18.1276C16.8243 18.3964 16.5567 18.552 16.2745 18.5526C15.9922 18.5533 15.7242 18.3989 15.5424 18.131L11.9991 12.3444Z" fill="currentColor"/>
</svg>
<svg width="60" height="60" viewBox="0 0 60 60" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="30" cy="30" r="30" fill="#34BE5B"/>
<path d="M31.9349 31.858H39.6803C40.7065 31.858 41.5383 31.0261 41.5383 29.9999C41.5383 28.9737 40.7065 28.1418 39.6803 28.1418H31.9349V20.3964C31.9349 19.3278 31.0686 18.4614 29.9999 18.4614C28.9312 18.4614 28.0649 19.3278 28.0649 20.3964V28.1418H20.3195C19.2933 28.1418 18.4614 28.9737 18.4614 29.9999C18.4614 31.0261 19.2933 31.858 20.3195 31.858H28.0649V39.6033C28.0649 40.672 28.9312 41.5383 29.9999 41.5383C31.0686 41.5383 31.9349 40.672 31.9349 39.6033V31.858Z" fill="white"/>
</svg>
<svg width="16" height="20" viewBox="0 0 16 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<mask id="path-1-inside-1" fill="white">
<path d="M12.9764 10.6508C12.6856 10.6508 12.4476 10.3947 12.4476 10.0816V3.17338C12.4476 2.05203 11.5989 1.13843 10.5571 1.13843H5.43806C4.39628 1.13843 3.54752 2.05203 3.54752 3.17338V10.0816C3.54752 10.3947 3.30954 10.6508 3.01869 10.6508C2.72784 10.6508 2.48987 10.3947 2.48987 10.0816V3.17338C2.48987 1.42304 3.81193 0 5.43806 0H10.5571C12.1832 0 13.5053 1.42304 13.5053 3.17338V10.0816C13.5053 10.3947 13.2673 10.6508 12.9764 10.6508Z"/>
</mask>
<path d="M12.9764 9.05084C13.6781 9.05084 14.0476 9.62399 14.0476 10.0816H10.8476C10.8476 11.1654 11.6931 12.2508 12.9764 12.2508V9.05084ZM14.0476 10.0816V3.17338H10.8476V10.0816H14.0476ZM14.0476 3.17338C14.0476 1.28132 12.5914 -0.461567 10.5571 -0.461567V2.73843C10.5943 2.73843 10.6536 2.75206 10.7208 2.82441C10.7897 2.89854 10.8476 3.01879 10.8476 3.17338H14.0476ZM10.5571 -0.461567H5.43806V2.73843H10.5571V-0.461567ZM5.43806 -0.461567C3.40375 -0.461567 1.94752 1.28132 1.94752 3.17338H5.14752C5.14752 3.01879 5.20545 2.89854 5.27432 2.82441C5.34153 2.75206 5.40083 2.73843 5.43806 2.73843V-0.461567ZM1.94752 3.17338V10.0816H5.14752V3.17338H1.94752ZM1.94752 10.0816C1.94752 9.62399 2.31702 9.05084 3.01869 9.05084V12.2508C4.30207 12.2508 5.14752 11.1654 5.14752 10.0816H1.94752ZM3.01869 9.05084C3.72036 9.05084 4.08987 9.62399 4.08987 10.0816H0.889868C0.889868 11.1654 1.73531 12.2508 3.01869 12.2508V9.05084ZM4.08987 10.0816V3.17338H0.889868V10.0816H4.08987ZM4.08987 3.17338C4.08987 2.19375 4.80445 1.6 5.43806 1.6V-1.6C2.8194 -1.6 0.889868 0.652334 0.889868 3.17338H4.08987ZM5.43806 1.6H10.5571V-1.6H5.43806V1.6ZM10.5571 1.6C11.1907 1.6 11.9053 2.19375 11.9053 3.17338H15.1053C15.1053 0.652334 13.1757 -1.6 10.5571 -1.6V1.6ZM11.9053 3.17338V10.0816H15.1053V3.17338H11.9053ZM11.9053 10.0816C11.9053 9.62398 12.2748 9.05084 12.9764 9.05084V12.2508C14.2598 12.2508 15.1053 11.1654 15.1053 10.0816H11.9053Z" fill="#34BE5B" mask="url(#path-1-inside-1)"/>
<mask id="path-3-inside-2" fill="white">
<path d="M3.26646 20C3.26167 20 3.25687 20 3.25448 20C2.99073 19.9931 2.77973 19.7811 2.78692 19.5277L2.83008 18.9539C2.83008 17.8825 3.74841 17 4.87533 17H10.9176C12.0469 17 12.9628 17.8825 12.9628 18.9654L13.006 19.5277C13.0132 19.7811 12.8046 19.9931 12.5408 20C12.536 20 12.5312 20 12.5264 20C12.2675 20 12.0541 19.8018 12.0469 19.5507L12.0013 18.977C12.0013 18.3894 11.5146 17.9194 10.9152 17.9194H4.87533C4.2759 17.9194 3.78917 18.3871 3.78917 18.9631L3.74361 19.5507C3.73881 19.8018 3.52542 20 3.26646 20Z"/>
</mask>
<path d="M3.25448 20L3.21256 21.5995C3.22653 21.5998 3.2405 21.6 3.25448 21.6V20ZM2.78692 19.5277L1.19143 19.4076C1.18956 19.4325 1.18827 19.4574 1.18757 19.4823L2.78692 19.5277ZM2.83008 18.9539L4.42557 19.0739C4.42858 19.034 4.43008 18.994 4.43008 18.9539H2.83008ZM12.9628 18.9654H11.3628C11.3628 19.0063 11.3644 19.0472 11.3675 19.0879L12.9628 18.9654ZM13.006 19.5277L14.6053 19.4823C14.6046 19.4565 14.6033 19.4308 14.6013 19.4052L13.006 19.5277ZM12.5408 20V21.6C12.5548 21.6 12.5688 21.5998 12.5827 21.5995L12.5408 20ZM12.0469 19.5507L13.6462 19.5049C13.6455 19.4779 13.644 19.451 13.6419 19.424L12.0469 19.5507ZM12.0013 18.977H10.4013C10.4013 19.0192 10.403 19.0615 10.4064 19.1036L12.0013 18.977ZM3.78917 18.9631L5.38438 19.0868C5.38757 19.0457 5.38917 19.0044 5.38917 18.9631H3.78917ZM3.74361 19.5507L2.1484 19.427C2.14599 19.458 2.14449 19.4891 2.1439 19.5201L3.74361 19.5507ZM3.26646 18.4C3.26646 18.4 3.26645 18.4 3.26644 18.4C3.26643 18.4 3.26642 18.4 3.26641 18.4C3.2664 18.4 3.26639 18.4 3.26638 18.4C3.26637 18.4 3.26636 18.4 3.26635 18.4C3.26634 18.4 3.26633 18.4 3.26632 18.4C3.26631 18.4 3.26631 18.4 3.2663 18.4C3.26629 18.4 3.26628 18.4 3.26627 18.4C3.26626 18.4 3.26625 18.4 3.26624 18.4C3.26623 18.4 3.26622 18.4 3.26621 18.4C3.2662 18.4 3.26619 18.4 3.26618 18.4C3.26617 18.4 3.26616 18.4 3.26616 18.4C3.26615 18.4 3.26614 18.4 3.26613 18.4C3.26612 18.4 3.26611 18.4 3.2661 18.4C3.26609 18.4 3.26608 18.4 3.26607 18.4C3.26606 18.4 3.26605 18.4 3.26604 18.4C3.26603 18.4 3.26602 18.4 3.26601 18.4C3.26601 18.4 3.266 18.4 3.26599 18.4C3.26598 18.4 3.26597 18.4 3.26596 18.4C3.26595 18.4 3.26594 18.4 3.26593 18.4C3.26592 18.4 3.26591 18.4 3.2659 18.4C3.26589 18.4 3.26588 18.4 3.26587 18.4C3.26587 18.4 3.26586 18.4 3.26585 18.4C3.26584 18.4 3.26583 18.4 3.26582 18.4C3.26581 18.4 3.2658 18.4 3.26579 18.4C3.26578 18.4 3.26577 18.4 3.26576 18.4C3.26575 18.4 3.26574 18.4 3.26573 18.4C3.26572 18.4 3.26572 18.4 3.26571 18.4C3.2657 18.4 3.26569 18.4 3.26568 18.4C3.26567 18.4 3.26566 18.4 3.26565 18.4C3.26564 18.4 3.26563 18.4 3.26562 18.4C3.26561 18.4 3.2656 18.4 3.26559 18.4C3.26558 18.4 3.26558 18.4 3.26557 18.4C3.26556 18.4 3.26555 18.4 3.26554 18.4C3.26553 18.4 3.26552 18.4 3.26551 18.4C3.2655 18.4 3.26549 18.4 3.26548 18.4C3.26547 18.4 3.26546 18.4 3.26545 18.4C3.26544 18.4 3.26544 18.4 3.26543 18.4C3.26542 18.4 3.26541 18.4 3.2654 18.4C3.26539 18.4 3.26538 18.4 3.26537 18.4C3.26536 18.4 3.26535 18.4 3.26534 18.4C3.26533 18.4 3.26532 18.4 3.26531 18.4C3.2653 18.4 3.26529 18.4 3.26529 18.4C3.26528 18.4 3.26527 18.4 3.26526 18.4C3.26525 18.4 3.26524 18.4 3.26523 18.4C3.26522 18.4 3.26521 18.4 3.2652 18.4C3.26519 18.4 3.26518 18.4 3.26517 18.4C3.26516 18.4 3.26515 18.4 3.26515 18.4C3.26514 18.4 3.26513 18.4 3.26512 18.4C3.26511 18.4 3.2651 18.4 3.26509 18.4C3.26508 18.4 3.26507 18.4 3.26506 18.4C3.26505 18.4 3.26504 18.4 3.26503 18.4C3.26502 18.4 3.26502 18.4 3.26501 18.4C3.265 18.4 3.26499 18.4 3.26498 18.4C3.26497 18.4 3.26496 18.4 3.26495 18.4C3.26494 18.4 3.26493 18.4 3.26492 18.4C3.26491 18.4 3.2649 18.4 3.26489 18.4C3.26488 18.4 3.26488 18.4 3.26487 18.4C3.26486 18.4 3.26485 18.4 3.26484 18.4C3.26483 18.4 3.26482 18.4 3.26481 18.4C3.2648 18.4 3.26479 18.4 3.26478 18.4C3.26477 18.4 3.26476 18.4 3.26475 18.4C3.26475 18.4 3.26474 18.4 3.26473 18.4C3.26472 18.4 3.26471 18.4 3.2647 18.4C3.26469 18.4 3.26468 18.4 3.26467 18.4C3.26466 18.4 3.26465 18.4 3.26464 18.4C3.26463 18.4 3.26462 18.4 3.26462 18.4C3.26461 18.4 3.2646 18.4 3.26459 18.4C3.26458 18.4 3.26457 18.4 3.26456 18.4C3.26455 18.4 3.26454 18.4 3.26453 18.4C3.26452 18.4 3.26451 18.4 3.2645 18.4C3.26449 18.4 3.26449 18.4 3.26448 18.4C3.26447 18.4 3.26446 18.4 3.26445 18.4C3.26444 18.4 3.26443 18.4 3.26442 18.4C3.26441 18.4 3.2644 18.4 3.26439 18.4C3.26438 18.4 3.26437 18.4 3.26436 18.4C3.26436 18.4 3.26435 18.4 3.26434 18.4C3.26433 18.4 3.26432 18.4 3.26431 18.4C3.2643 18.4 3.26429 18.4 3.26428 18.4C3.26427 18.4 3.26426 18.4 3.26425 18.4C3.26424 18.4 3.26423 18.4 3.26423 18.4C3.26422 18.4 3.26421 18.4 3.2642 18.4C3.26419 18.4 3.26418 18.4 3.26417 18.4C3.26416 18.4 3.26415 18.4 3.26414 18.4C3.26413 18.4 3.26412 18.4 3.26411 18.4C3.26411 18.4 3.2641 18.4 3.26409 18.4C3.26408 18.4 3.26407 18.4 3.26406 18.4C3.26405 18.4 3.26404 18.4 3.26403 18.4C3.26402 18.4 3.26401 18.4 3.264 18.4C3.26399 18.4 3.26399 18.4 3.26398 18.4C3.26397 18.4 3.26396 18.4 3.26395 18.4C3.26394 18.4 3.26393 18.4 3.26392 18.4C3.26391 18.4 3.2639 18.4 3.26389 18.4C3.26388 18.4 3.26387 18.4 3.26387 18.4C3.26386 18.4 3.26385 18.4 3.26384 18.4C3.26383 18.4 3.26382 18.4 3.26381 18.4C3.2638 18.4 3.26379 18.4 3.26378 18.4C3.26377 18.4 3.26376 18.4 3.26376 18.4C3.26375 18.4 3.26374 18.4 3.26373 18.4C3.26372 18.4 3.26371 18.4 3.2637 18.4C3.26369 18.4 3.26368 18.4 3.26367 18.4C3.26366 18.4 3.26365 18.4 3.26364 18.4C3.26364 18.4 3.26363 18.4 3.26362 18.4C3.26361 18.4 3.2636 18.4 3.26359 18.4C3.26358 18.4 3.26357 18.4 3.26356 18.4C3.26355 18.4 3.26354 18.4 3.26353 18.4C3.26353 18.4 3.26352 18.4 3.26351 18.4C3.2635 18.4 3.26349 18.4 3.26348 18.4C3.26347 18.4 3.26346 18.4 3.26345 18.4C3.26344 18.4 3.26343 18.4 3.26342 18.4C3.26342 18.4 3.26341 18.4 3.2634 18.4C3.26339 18.4 3.26338 18.4 3.26337 18.4C3.26336 18.4 3.26335 18.4 3.26334 18.4C3.26333 18.4 3.26332 18.4 3.26332 18.4C3.26331 18.4 3.2633 18.4 3.26329 18.4C3.26328 18.4 3.26327 18.4 3.26326 18.4C3.26325 18.4 3.26324 18.4 3.26323 18.4C3.26322 18.4 3.26321 18.4 3.26321 18.4C3.2632 18.4 3.26319 18.4 3.26318 18.4C3.26317 18.4 3.26316 18.4 3.26315 18.4C3.26314 18.4 3.26313 18.4 3.26312 18.4C3.26311 18.4 3.26311 18.4 3.2631 18.4C3.26309 18.4 3.26308 18.4 3.26307 18.4C3.26306 18.4 3.26305 18.4 3.26304 18.4C3.26303 18.4 3.26302 18.4 3.26301 18.4C3.26301 18.4 3.263 18.4 3.26299 18.4C3.26298 18.4 3.26297 18.4 3.26296 18.4C3.26295 18.4 3.26294 18.4 3.26293 18.4C3.26292 18.4 3.26291 18.4 3.26291 18.4C3.2629 18.4 3.26289 18.4 3.26288 18.4C3.26287 18.4 3.26286 18.4 3.26285 18.4C3.26284 18.4 3.26283 18.4 3.26282 18.4C3.26281 18.4 3.26281 18.4 3.2628 18.4C3.26279 18.4 3.26278 18.4 3.26277 18.4C3.26276 18.4 3.26275 18.4 3.26274 18.4C3.26273 18.4 3.26272 18.4 3.26272 18.4C3.26271 18.4 3.2627 18.4 3.26269 18.4C3.26268 18.4 3.26267 18.4 3.26266 18.4C3.26265 18.4 3.26264 18.4 3.26263 18.4C3.26262 18.4 3.26262 18.4 3.26261 18.4C3.2626 18.4 3.26259 18.4 3.26258 18.4C3.26257 18.4 3.26256 18.4 3.26255 18.4C3.26254 18.4 3.26253 18.4 3.26253 18.4C3.26252 18.4 3.26251 18.4 3.2625 18.4C3.26249 18.4 3.26248 18.4 3.26247 18.4C3.26246 18.4 3.26245 18.4 3.26244 18.4C3.26244 18.4 3.26243 18.4 3.26242 18.4C3.26241 18.4 3.2624 18.4 3.26239 18.4C3.26238 18.4 3.26237 18.4 3.26236 18.4C3.26235 18.4 3.26235 18.4 3.26234 18.4C3.26233 18.4 3.26232 18.4 3.26231 18.4C3.2623 18.4 3.26229 18.4 3.26228 18.4C3.26227 18.4 3.26227 18.4 3.26226 18.4C3.26225 18.4 3.26224 18.4 3.26223 18.4C3.26222 18.4 3.26221 18.4 3.2622 18.4C3.26219 18.4 3.26218 18.4 3.26218 18.4C3.26217 18.4 3.26216 18.4 3.26215 18.4C3.26214 18.4 3.26213 18.4 3.26212 18.4C3.26211 18.4 3.2621 18.4 3.2621 18.4C3.26209 18.4 3.26208 18.4 3.26207 18.4C3.26206 18.4 3.26205 18.4 3.26204 18.4C3.26203 18.4 3.26202 18.4 3.26202 18.4C3.26201 18.4 3.262 18.4 3.26199 18.4C3.26198 18.4 3.26197 18.4 3.26196 18.4C3.26195 18.4 3.26194 18.4 3.26194 18.4C3.26193 18.4 3.26192 18.4 3.26191 18.4C3.2619 18.4 3.26189 18.4 3.26188 18.4C3.26187 18.4 3.26186 18.4 3.26186 18.4C3.26185 18.4 3.26184 18.4 3.26183 18.4C3.26182 18.4 3.26181 18.4 3.2618 18.4C3.26179 18.4 3.26178 18.4 3.26178 18.4C3.26177 18.4 3.26176 18.4 3.26175 18.4C3.26174 18.4 3.26173 18.4 3.26172 18.4C3.26171 18.4 3.2617 18.4 3.2617 18.4C3.26169 18.4 3.26168 18.4 3.26167 18.4C3.26166 18.4 3.26165 18.4 3.26164 18.4C3.26163 18.4 3.26163 18.4 3.26162 18.4C3.26161 18.4 3.2616 18.4 3.26159 18.4C3.26158 18.4 3.26157 18.4 3.26156 18.4C3.26155 18.4 3.26155 18.4 3.26154 18.4C3.26153 18.4 3.26152 18.4 3.26151 18.4C3.2615 18.4 3.26149 18.4 3.26148 18.4C3.26148 18.4 3.26147 18.4 3.26146 18.4C3.26145 18.4 3.26144 18.4 3.26143 18.4C3.26142 18.4 3.26141 18.4 3.26141 18.4C3.2614 18.4 3.26139 18.4 3.26138 18.4C3.26137 18.4 3.26136 18.4 3.26135 18.4C3.26134 18.4 3.26134 18.4 3.26133 18.4C3.26132 18.4 3.26131 18.4 3.2613 18.4C3.26129 18.4 3.26128 18.4 3.26127 18.4C3.26127 18.4 3.26126 18.4 3.26125 18.4C3.26124 18.4 3.26123 18.4 3.26122 18.4C3.26121 18.4 3.2612 18.4 3.2612 18.4C3.26119 18.4 3.26118 18.4 3.26117 18.4C3.26116 18.4 3.26115 18.4 3.26114 18.4C3.26114 18.4 3.26113 18.4 3.26112 18.4C3.26111 18.4 3.2611 18.4 3.26109 18.4C3.26108 18.4 3.26107 18.4 3.26107 18.4C3.26106 18.4 3.26105 18.4 3.26104 18.4C3.26103 18.4 3.26102 18.4 3.26101 18.4C3.261 18.4 3.261 18.4 3.26099 18.4C3.26098 18.4 3.26097 18.4 3.26096 18.4C3.26095 18.4 3.26094 18.4 3.26094 18.4C3.26093 18.4 3.26092 18.4 3.26091 18.4C3.2609 18.4 3.26089 18.4 3.26088 18.4C3.26088 18.4 3.26087 18.4 3.26086 18.4C3.26085 18.4 3.26084 18.4 3.26083 18.4C3.26082 18.4 3.26082 18.4 3.26081 18.4C3.2608 18.4 3.26079 18.4 3.26078 18.4C3.26077 18.4 3.26076 18.4 3.26075 18.4C3.26075 18.4 3.26074 18.4 3.26073 18.4C3.26072 18.4 3.26071 18.4 3.2607 18.4C3.26069 18.4 3.26069 18.4 3.26068 18.4C3.26067 18.4 3.26066 18.4 3.26065 18.4C3.26064 18.4 3.26063 18.4 3.26063 18.4C3.26062 18.4 3.26061 18.4 3.2606 18.4C3.26059 18.4 3.26058 18.4 3.26058 18.4C3.26057 18.4 3.26056 18.4 3.26055 18.4C3.26054 18.4 3.26053 18.4 3.26052 18.4C3.26052 18.4 3.26051 18.4 3.2605 18.4C3.26049 18.4 3.26048 18.4 3.26047 18.4C3.26046 18.4 3.26046 18.4 3.26045 18.4C3.26044 18.4 3.26043 18.4 3.26042 18.4C3.26041 18.4 3.26041 18.4 3.2604 18.4C3.26039 18.4 3.26038 18.4 3.26037 18.4C3.26036 18.4 3.26035 18.4 3.26035 18.4C3.26034 18.4 3.26033 18.4 3.26032 18.4C3.26031 18.4 3.2603 18.4 3.2603 18.4C3.26029 18.4 3.26028 18.4 3.26027 18.4C3.26026 18.4 3.26025 18.4 3.26024 18.4C3.26024 18.4 3.26023 18.4 3.26022 18.4C3.26021 18.4 3.2602 18.4 3.26019 18.4C3.26019 18.4 3.26018 18.4 3.26017 18.4C3.26016 18.4 3.26015 18.4 3.26014 18.4C3.26014 18.4 3.26013 18.4 3.26012 18.4C3.26011 18.4 3.2601 18.4 3.26009 18.4C3.26008 18.4 3.26008 18.4 3.26007 18.4C3.26006 18.4 3.26005 18.4 3.26004 18.4C3.26003 18.4 3.26003 18.4 3.26002 18.4C3.26001 18.4 3.26 18.4 3.25999 18.4C3.25998 18.4 3.25998 18.4 3.25997 18.4C3.25996 18.4 3.25995 18.4 3.25994 18.4C3.25993 18.4 3.25993 18.4 3.25992 18.4C3.25991 18.4 3.2599 18.4 3.25989 18.4C3.25988 18.4 3.25988 18.4 3.25987 18.4C3.25986 18.4 3.25985 18.4 3.25984 18.4C3.25983 18.4 3.25983 18.4 3.25982 18.4C3.25981 18.4 3.2598 18.4 3.25979 18.4C3.25978 18.4 3.25978 18.4 3.25977 18.4C3.25976 18.4 3.25975 18.4 3.25974 18.4C3.25974 18.4 3.25973 18.4 3.25972 18.4C3.25971 18.4 3.2597 18.4 3.25969 18.4C3.25969 18.4 3.25968 18.4 3.25967 18.4C3.25966 18.4 3.25965 18.4 3.25964 18.4C3.25964 18.4 3.25963 18.4 3.25962 18.4C3.25961 18.4 3.2596 18.4 3.2596 18.4C3.25959 18.4 3.25958 18.4 3.25957 18.4C3.25956 18.4 3.25955 18.4 3.25955 18.4C3.25954 18.4 3.25953 18.4 3.25952 18.4C3.25951 18.4 3.25951 18.4 3.2595 18.4C3.25949 18.4 3.25948 18.4 3.25947 18.4C3.25946 18.4 3.25946 18.4 3.25945 18.4C3.25944 18.4 3.25943 18.4 3.25942 18.4C3.25942 18.4 3.25941 18.4 3.2594 18.4C3.25939 18.4 3.25938 18.4 3.25938 18.4C3.25937 18.4 3.25936 18.4 3.25935 18.4C3.25934 18.4 3.25933 18.4 3.25933 18.4C3.25932 18.4 3.25931 18.4 3.2593 18.4C3.25929 18.4 3.25929 18.4 3.25928 18.4C3.25927 18.4 3.25926 18.4 3.25925 18.4C3.25925 18.4 3.25924 18.4 3.25923 18.4C3.25922 18.4 3.25921 18.4 3.25921 18.4C3.2592 18.4 3.25919 18.4 3.25918 18.4C3.25917 18.4 3.25917 18.4 3.25916 18.4C3.25915 18.4 3.25914 18.4 3.25913 18.4C3.25912 18.4 3.25912 18.4 3.25911 18.4C3.2591 18.4 3.25909 18.4 3.25908 18.4C3.25908 18.4 3.25907 18.4 3.25906 18.4C3.25905 18.4 3.25904 18.4 3.25904 18.4C3.25903 18.4 3.25902 18.4 3.25901 18.4C3.259 18.4 3.259 18.4 3.25899 18.4C3.25898 18.4 3.25897 18.4 3.25897 18.4C3.25896 18.4 3.25895 18.4 3.25894 18.4C3.25893 18.4 3.25893 18.4 3.25892 18.4C3.25891 18.4 3.2589 18.4 3.25889 18.4C3.25889 18.4 3.25888 18.4 3.25887 18.4C3.25886 18.4 3.25885 18.4 3.25885 18.4C3.25884 18.4 3.25883 18.4 3.25882 18.4C3.25881 18.4 3.25881 18.4 3.2588 18.4C3.25879 18.4 3.25878 18.4 3.25878 18.4C3.25877 18.4 3.25876 18.4 3.25875 18.4C3.25874 18.4 3.25874 18.4 3.25873 18.4C3.25872 18.4 3.25871 18.4 3.2587 18.4C3.2587 18.4 3.25869 18.4 3.25868 18.4C3.25867 18.4 3.25867 18.4 3.25866 18.4C3.25865 18.4 3.25864 18.4 3.25863 18.4C3.25863 18.4 3.25862 18.4 3.25861 18.4C3.2586 18.4 3.25859 18.4 3.25859 18.4C3.25858 18.4 3.25857 18.4 3.25856 18.4C3.25856 18.4 3.25855 18.4 3.25854 18.4C3.25853 18.4 3.25852 18.4 3.25852 18.4C3.25851 18.4 3.2585 18.4 3.25849 18.4C3.25849 18.4 3.25848 18.4 3.25847 18.4C3.25846 18.4 3.25846 18.4 3.25845 18.4C3.25844 18.4 3.25843 18.4 3.25842 18.4C3.25842 18.4 3.25841 18.4 3.2584 18.4C3.25839 18.4 3.25839 18.4 3.25838 18.4C3.25837 18.4 3.25836 18.4 3.25836 18.4C3.25835 18.4 3.25834 18.4 3.25833 18.4C3.25832 18.4 3.25832 18.4 3.25831 18.4C3.2583 18.4 3.25829 18.4 3.25829 18.4C3.25828 18.4 3.25827 18.4 3.25826 18.4C3.25826 18.4 3.25825 18.4 3.25824 18.4C3.25823 18.4 3.25822 18.4 3.25822 18.4C3.25821 18.4 3.2582 18.4 3.25819 18.4C3.25819 18.4 3.25818 18.4 3.25817 18.4C3.25816 18.4 3.25816 18.4 3.25815 18.4C3.25814 18.4 3.25813 18.4 3.25813 18.4C3.25812 18.4 3.25811 18.4 3.2581 18.4C3.2581 18.4 3.25809 18.4 3.25808 18.4C3.25807 18.4 3.25807 18.4 3.25806 18.4C3.25805 18.4 3.25804 18.4 3.25804 18.4C3.25803 18.4 3.25802 18.4 3.25801 18.4C3.25801 18.4 3.258 18.4 3.25799 18.4C3.25798 18.4 3.25798 18.4 3.25797 18.4C3.25796 18.4 3.25795 18.4 3.25795 18.4C3.25794 18.4 3.25793 18.4 3.25792 18.4C3.25792 18.4 3.25791 18.4 3.2579 18.4C3.25789 18.4 3.25789 18.4 3.25788 18.4C3.25787 18.4 3.25786 18.4 3.25786 18.4C3.25785 18.4 3.25784 18.4 3.25783 18.4C3.25783 18.4 3.25782 18.4 3.25781 18.4C3.2578 18.4 3.2578 18.4 3.25779 18.4C3.25778 18.4 3.25777 18.4 3.25777 18.4C3.25776 18.4 3.25775 18.4 3.25775 18.4C3.25774 18.4 3.25773 18.4 3.25772 18.4C3.25772 18.4 3.25771 18.4 3.2577 18.4C3.25769 18.4 3.25769 18.4 3.25768 18.4C3.25767 18.4 3.25766 18.4 3.25766 18.4C3.25765 18.4 3.25764 18.4 3.25763 18.4C3.25763 18.4 3.25762 18.4 3.25761 18.4C3.25761 18.4 3.2576 18.4 3.25759 18.4C3.25758 18.4 3.25758 18.4 3.25757 18.4C3.25756 18.4 3.25755 18.4 3.25755 18.4C3.25754 18.4 3.25753 18.4 3.25753 18.4C3.25752 18.4 3.25751 18.4 3.2575 18.4C3.2575 18.4 3.25749 18.4 3.25748 18.4C3.25748 18.4 3.25747 18.4 3.25746 18.4C3.25745 18.4 3.25745 18.4 3.25744 18.4C3.25743 18.4 3.25742 18.4 3.25742 18.4C3.25741 18.4 3.2574 18.4 3.2574 18.4C3.25739 18.4 3.25738 18.4 3.25737 18.4C3.25737 18.4 3.25736 18.4 3.25735 18.4C3.25735 18.4 3.25734 18.4 3.25733 18.4C3.25732 18.4 3.25732 18.4 3.25731 18.4C3.2573 18.4 3.2573 18.4 3.25729 18.4C3.25728 18.4 3.25727 18.4 3.25727 18.4C3.25726 18.4 3.25725 18.4 3.25725 18.4C3.25724 18.4 3.25723 18.4 3.25722 18.4C3.25722 18.4 3.25721 18.4 3.2572 18.4C3.2572 18.4 3.25719 18.4 3.25718 18.4C3.25718 18.4 3.25717 18.4 3.25716 18.4C3.25715 18.4 3.25715 18.4 3.25714 18.4C3.25713 18.4 3.25713 18.4 3.25712 18.4C3.25711 18.4 3.25711 18.4 3.2571 18.4C3.25709 18.4 3.25708 18.4 3.25708 18.4C3.25707 18.4 3.25706 18.4 3.25706 18.4C3.25705 18.4 3.25704 18.4 3.25704 18.4C3.25703 18.4 3.25702 18.4 3.25701 18.4C3.25701 18.4 3.257 18.4 3.25699 18.4C3.25699 18.4 3.25698 18.4 3.25697 18.4C3.25697 18.4 3.25696 18.4 3.25695 18.4C3.25695 18.4 3.25694 18.4 3.25693 18.4C3.25692 18.4 3.25692 18.4 3.25691 18.4C3.2569 18.4 3.2569 18.4 3.25689 18.4C3.25688 18.4 3.25688 18.4 3.25687 18.4C3.25686 18.4 3.25686 18.4 3.25685 18.4C3.25684 18.4 3.25684 18.4 3.25683 18.4C3.25682 18.4 3.25681 18.4 3.25681 18.4C3.2568 18.4 3.25679 18.4 3.25679 18.4C3.25678 18.4 3.25677 18.4 3.25677 18.4C3.25676 18.4 3.25675 18.4 3.25675 18.4C3.25674 18.4 3.25673 18.4 3.25673 18.4C3.25672 18.4 3.25671 18.4 3.25671 18.4C3.2567 18.4 3.25669 18.4 3.25669 18.4C3.25668 18.4 3.25667 18.4 3.25667 18.4C3.25666 18.4 3.25665 18.4 3.25665 18.4C3.25664 18.4 3.25663 18.4 3.25663 18.4C3.25662 18.4 3.25661 18.4 3.25661 18.4C3.2566 18.4 3.25659 18.4 3.25659 18.4C3.25658 18.4 3.25657 18.4 3.25657 18.4C3.25656 18.4 3.25655 18.4 3.25655 18.4C3.25654 18.4 3.25653 18.4 3.25653 18.4C3.25652 18.4 3.25651 18.4 3.25651 18.4C3.2565 18.4 3.25649 18.4 3.25649 18.4C3.25648 18.4 3.25647 18.4 3.25647 18.4C3.25646 18.4 3.25645 18.4 3.25645 18.4C3.25644 18.4 3.25643 18.4 3.25643 18.4C3.25642 18.4 3.25641 18.4 3.25641 18.4C3.2564 18.4 3.25639 18.4 3.25639 18.4C3.25638 18.4 3.25637 18.4 3.25637 18.4C3.25636 18.4 3.25636 18.4 3.25635 18.4C3.25634 18.4 3.25634 18.4 3.25633 18.4C3.25632 18.4 3.25632 18.4 3.25631 18.4C3.2563 18.4 3.2563 18.4 3.25629 18.4C3.25628 18.4 3.25628 18.4 3.25627 18.4C3.25626 18.4 3.25626 18.4 3.25625 18.4C3.25625 18.4 3.25624 18.4 3.25623 18.4C3.25623 18.4 3.25622 18.4 3.25621 18.4C3.25621 18.4 3.2562 18.4 3.25619 18.4C3.25619 18.4 3.25618 18.4 3.25618 18.4C3.25617 18.4 3.25616 18.4 3.25616 18.4C3.25615 18.4 3.25614 18.4 3.25614 18.4C3.25613 18.4 3.25612 18.4 3.25612 18.4C3.25611 18.4 3.25611 18.4 3.2561 18.4C3.25609 18.4 3.25609 18.4 3.25608 18.4C3.25607 18.4 3.25607 18.4 3.25606 18.4C3.25606 18.4 3.25605 18.4 3.25604 18.4C3.25604 18.4 3.25603 18.4 3.25602 18.4C3.25602 18.4 3.25601 18.4 3.25601 18.4C3.256 18.4 3.25599 18.4 3.25599 18.4C3.25598 18.4 3.25597 18.4 3.25597 18.4C3.25596 18.4 3.25596 18.4 3.25595 18.4C3.25594 18.4 3.25594 18.4 3.25593 18.4C3.25592 18.4 3.25592 18.4 3.25591 18.4C3.25591 18.4 3.2559 18.4 3.25589 18.4C3.25589 18.4 3.25588 18.4 3.25588 18.4C3.25587 18.4 3.25586 18.4 3.25586 18.4C3.25585 18.4 3.25584 18.4 3.25584 18.4C3.25583 18.4 3.25583 18.4 3.25582 18.4C3.25581 18.4 3.25581 18.4 3.2558 18.4C3.2558 18.4 3.25579 18.4 3.25578 18.4C3.25578 18.4 3.25577 18.4 3.25577 18.4C3.25576 18.4 3.25575 18.4 3.25575 18.4C3.25574 18.4 3.25574 18.4 3.25573 18.4C3.25572 18.4 3.25572 18.4 3.25571 18.4C3.25571 18.4 3.2557 18.4 3.25569 18.4C3.25569 18.4 3.25568 18.4 3.25568 18.4C3.25567 18.4 3.25566 18.4 3.25566 18.4C3.25565 18.4 3.25565 18.4 3.25564 18.4C3.25563 18.4 3.25563 18.4 3.25562 18.4C3.25562 18.4 3.25561 18.4 3.25561 18.4C3.2556 18.4 3.25559 18.4 3.25559 18.4C3.25558 18.4 3.25558 18.4 3.25557 18.4C3.25556 18.4 3.25556 18.4 3.25555 18.4C3.25555 18.4 3.25554 18.4 3.25553 18.4C3.25553 18.4 3.25552 18.4 3.25552 18.4C3.25551 18.4 3.25551 18.4 3.2555 18.4C3.25549 18.4 3.25549 18.4 3.25548 18.4C3.25548 18.4 3.25547 18.4 3.25547 18.4C3.25546 18.4 3.25545 18.4 3.25545 18.4C3.25544 18.4 3.25544 18.4 3.25543 18.4C3.25542 18.4 3.25542 18.4 3.25541 18.4C3.25541 18.4 3.2554 18.4 3.2554 18.4C3.25539 18.4 3.25538 18.4 3.25538 18.4C3.25537 18.4 3.25537 18.4 3.25536 18.4C3.25536 18.4 3.25535 18.4 3.25535 18.4C3.25534 18.4 3.25533 18.4 3.25533 18.4C3.25532 18.4 3.25532 18.4 3.25531 18.4C3.25531 18.4 3.2553 18.4 3.25529 18.4C3.25529 18.4 3.25528 18.4 3.25528 18.4C3.25527 18.4 3.25527 18.4 3.25526 18.4C3.25526 18.4 3.25525 18.4 3.25524 18.4C3.25524 18.4 3.25523 18.4 3.25523 18.4C3.25522 18.4 3.25522 18.4 3.25521 18.4C3.25521 18.4 3.2552 18.4 3.25519 18.4C3.25519 18.4 3.25518 18.4 3.25518 18.4C3.25517 18.4 3.25517 18.4 3.25516 18.4C3.25516 18.4 3.25515 18.4 3.25515 18.4C3.25514 18.4 3.25513 18.4 3.25513 18.4C3.25512 18.4 3.25512 18.4 3.25511 18.4C3.25511 18.4 3.2551 18.4 3.2551 18.4C3.25509 18.4 3.25509 18.4 3.25508 18.4C3.25507 18.4 3.25507 18.4 3.25506 18.4C3.25506 18.4 3.25505 18.4 3.25505 18.4C3.25504 18.4 3.25504 18.4 3.25503 18.4C3.25503 18.4 3.25502 18.4 3.25502 18.4C3.25501 18.4 3.25501 18.4 3.255 18.4C3.25499 18.4 3.25499 18.4 3.25498 18.4C3.25498 18.4 3.25497 18.4 3.25497 18.4C3.25496 18.4 3.25496 18.4 3.25495 18.4C3.25495 18.4 3.25494 18.4 3.25494 18.4C3.25493 18.4 3.25493 18.4 3.25492 18.4C3.25492 18.4 3.25491 18.4 3.25491 18.4C3.2549 18.4 3.2549 18.4 3.25489 18.4C3.25488 18.4 3.25488 18.4 3.25487 18.4C3.25487 18.4 3.25486 18.4 3.25486 18.4C3.25485 18.4 3.25485 18.4 3.25484 18.4C3.25484 18.4 3.25483 18.4 3.25483 18.4C3.25482 18.4 3.25482 18.4 3.25481 18.4C3.25481 18.4 3.2548 18.4 3.2548 18.4C3.25479 18.4 3.25479 18.4 3.25478 18.4C3.25478 18.4 3.25477 18.4 3.25477 18.4C3.25476 18.4 3.25476 18.4 3.25475 18.4C3.25475 18.4 3.25474 18.4 3.25474 18.4C3.25473 18.4 3.25473 18.4 3.25472 18.4C3.25472 18.4 3.25471 18.4 3.25471 18.4C3.2547 18.4 3.2547 18.4 3.25469 18.4C3.25469 18.4 3.25468 18.4 3.25468 18.4C3.25467 18.4 3.25467 18.4 3.25466 18.4C3.25466 18.4 3.25465 18.4 3.25465 18.4C3.25464 18.4 3.25464 18.4 3.25463 18.4C3.25463 18.4 3.25462 18.4 3.25462 18.4C3.25461 18.4 3.25461 18.4 3.2546 18.4C3.2546 18.4 3.25459 18.4 3.25459 18.4C3.25458 18.4 3.25458 18.4 3.25458 18.4C3.25457 18.4 3.25457 18.4 3.25456 18.4C3.25456 18.4 3.25455 18.4 3.25455 18.4C3.25454 18.4 3.25454 18.4 3.25453 18.4C3.25453 18.4 3.25452 18.4 3.25452 18.4C3.25451 18.4 3.25451 18.4 3.2545 18.4C3.2545 18.4 3.25449 18.4 3.25449 18.4C3.25449 18.4 3.25448 18.4 3.25448 18.4V21.6C3.25448 21.6 3.25449 21.6 3.25449 21.6C3.25449 21.6 3.2545 21.6 3.2545 21.6C3.25451 21.6 3.25451 21.6 3.25452 21.6C3.25452 21.6 3.25453 21.6 3.25453 21.6C3.25454 21.6 3.25454 21.6 3.25455 21.6C3.25455 21.6 3.25456 21.6 3.25456 21.6C3.25457 21.6 3.25457 21.6 3.25458 21.6C3.25458 21.6 3.25458 21.6 3.25459 21.6C3.25459 21.6 3.2546 21.6 3.2546 21.6C3.25461 21.6 3.25461 21.6 3.25462 21.6C3.25462 21.6 3.25463 21.6 3.25463 21.6C3.25464 21.6 3.25464 21.6 3.25465 21.6C3.25465 21.6 3.25466 21.6 3.25466 21.6C3.25467 21.6 3.25467 21.6 3.25468 21.6C3.25468 21.6 3.25469 21.6 3.25469 21.6C3.2547 21.6 3.2547 21.6 3.25471 21.6C3.25471 21.6 3.25472 21.6 3.25472 21.6C3.25473 21.6 3.25473 21.6 3.25474 21.6C3.25474 21.6 3.25475 21.6 3.25475 21.6C3.25476 21.6 3.25476 21.6 3.25477 21.6C3.25477 21.6 3.25478 21.6 3.25478 21.6C3.25479 21.6 3.25479 21.6 3.2548 21.6C3.2548 21.6 3.25481 21.6 3.25481 21.6C3.25482 21.6 3.25482 21.6 3.25483 21.6C3.25483 21.6 3.25484 21.6 3.25484 21.6C3.25485 21.6 3.25485 21.6 3.25486 21.6C3.25486 21.6 3.25487 21.6 3.25487 21.6C3.25488 21.6 3.25488 21.6 3.25489 21.6C3.2549 21.6 3.2549 21.6 3.25491 21.6C3.25491 21.6 3.25492 21.6 3.25492 21.6C3.25493 21.6 3.25493 21.6 3.25494 21.6C3.25494 21.6 3.25495 21.6 3.25495 21.6C3.25496 21.6 3.25496 21.6 3.25497 21.6C3.25497 21.6 3.25498 21.6 3.25498 21.6C3.25499 21.6 3.25499 21.6 3.255 21.6C3.25501 21.6 3.25501 21.6 3.25502 21.6C3.25502 21.6 3.25503 21.6 3.25503 21.6C3.25504 21.6 3.25504 21.6 3.25505 21.6C3.25505 21.6 3.25506 21.6 3.25506 21.6C3.25507 21.6 3.25507 21.6 3.25508 21.6C3.25509 21.6 3.25509 21.6 3.2551 21.6C3.2551 21.6 3.25511 21.6 3.25511 21.6C3.25512 21.6 3.25512 21.6 3.25513 21.6C3.25513 21.6 3.25514 21.6 3.25515 21.6C3.25515 21.6 3.25516 21.6 3.25516 21.6C3.25517 21.6 3.25517 21.6 3.25518 21.6C3.25518 21.6 3.25519 21.6 3.25519 21.6C3.2552 21.6 3.25521 21.6 3.25521 21.6C3.25522 21.6 3.25522 21.6 3.25523 21.6C3.25523 21.6 3.25524 21.6 3.25524 21.6C3.25525 21.6 3.25526 21.6 3.25526 21.6C3.25527 21.6 3.25527 21.6 3.25528 21.6C3.25528 21.6 3.25529 21.6 3.25529 21.6C3.2553 21.6 3.25531 21.6 3.25531 21.6C3.25532 21.6 3.25532 21.6 3.25533 21.6C3.25533 21.6 3.25534 21.6 3.25535 21.6C3.25535 21.6 3.25536 21.6 3.25536 21.6C3.25537 21.6 3.25537 21.6 3.25538 21.6C3.25538 21.6 3.25539 21.6 3.2554 21.6C3.2554 21.6 3.25541 21.6 3.25541 21.6C3.25542 21.6 3.25542 21.6 3.25543 21.6C3.25544 21.6 3.25544 21.6 3.25545 21.6C3.25545 21.6 3.25546 21.6 3.25547 21.6C3.25547 21.6 3.25548 21.6 3.25548 21.6C3.25549 21.6 3.25549 21.6 3.2555 21.6C3.25551 21.6 3.25551 21.6 3.25552 21.6C3.25552 21.6 3.25553 21.6 3.25553 21.6C3.25554 21.6 3.25555 21.6 3.25555 21.6C3.25556 21.6 3.25556 21.6 3.25557 21.6C3.25558 21.6 3.25558 21.6 3.25559 21.6C3.25559 21.6 3.2556 21.6 3.25561 21.6C3.25561 21.6 3.25562 21.6 3.25562 21.6C3.25563 21.6 3.25563 21.6 3.25564 21.6C3.25565 21.6 3.25565 21.6 3.25566 21.6C3.25566 21.6 3.25567 21.6 3.25568 21.6C3.25568 21.6 3.25569 21.6 3.25569 21.6C3.2557 21.6 3.25571 21.6 3.25571 21.6C3.25572 21.6 3.25572 21.6 3.25573 21.6C3.25574 21.6 3.25574 21.6 3.25575 21.6C3.25575 21.6 3.25576 21.6 3.25577 21.6C3.25577 21.6 3.25578 21.6 3.25578 21.6C3.25579 21.6 3.2558 21.6 3.2558 21.6C3.25581 21.6 3.25581 21.6 3.25582 21.6C3.25583 21.6 3.25583 21.6 3.25584 21.6C3.25584 21.6 3.25585 21.6 3.25586 21.6C3.25586 21.6 3.25587 21.6 3.25588 21.6C3.25588 21.6 3.25589 21.6 3.25589 21.6C3.2559 21.6 3.25591 21.6 3.25591 21.6C3.25592 21.6 3.25592 21.6 3.25593 21.6C3.25594 21.6 3.25594 21.6 3.25595 21.6C3.25596 21.6 3.25596 21.6 3.25597 21.6C3.25597 21.6 3.25598 21.6 3.25599 21.6C3.25599 21.6 3.256 21.6 3.25601 21.6C3.25601 21.6 3.25602 21.6 3.25602 21.6C3.25603 21.6 3.25604 21.6 3.25604 21.6C3.25605 21.6 3.25606 21.6 3.25606 21.6C3.25607 21.6 3.25607 21.6 3.25608 21.6C3.25609 21.6 3.25609 21.6 3.2561 21.6C3.25611 21.6 3.25611 21.6 3.25612 21.6C3.25612 21.6 3.25613 21.6 3.25614 21.6C3.25614 21.6 3.25615 21.6 3.25616 21.6C3.25616 21.6 3.25617 21.6 3.25618 21.6C3.25618 21.6 3.25619 21.6 3.25619 21.6C3.2562 21.6 3.25621 21.6 3.25621 21.6C3.25622 21.6 3.25623 21.6 3.25623 21.6C3.25624 21.6 3.25625 21.6 3.25625 21.6C3.25626 21.6 3.25626 21.6 3.25627 21.6C3.25628 21.6 3.25628 21.6 3.25629 21.6C3.2563 21.6 3.2563 21.6 3.25631 21.6C3.25632 21.6 3.25632 21.6 3.25633 21.6C3.25634 21.6 3.25634 21.6 3.25635 21.6C3.25636 21.6 3.25636 21.6 3.25637 21.6C3.25637 21.6 3.25638 21.6 3.25639 21.6C3.25639 21.6 3.2564 21.6 3.25641 21.6C3.25641 21.6 3.25642 21.6 3.25643 21.6C3.25643 21.6 3.25644 21.6 3.25645 21.6C3.25645 21.6 3.25646 21.6 3.25647 21.6C3.25647 21.6 3.25648 21.6 3.25649 21.6C3.25649 21.6 3.2565 21.6 3.25651 21.6C3.25651 21.6 3.25652 21.6 3.25653 21.6C3.25653 21.6 3.25654 21.6 3.25655 21.6C3.25655 21.6 3.25656 21.6 3.25657 21.6C3.25657 21.6 3.25658 21.6 3.25659 21.6C3.25659 21.6 3.2566 21.6 3.25661 21.6C3.25661 21.6 3.25662 21.6 3.25663 21.6C3.25663 21.6 3.25664 21.6 3.25665 21.6C3.25665 21.6 3.25666 21.6 3.25667 21.6C3.25667 21.6 3.25668 21.6 3.25669 21.6C3.25669 21.6 3.2567 21.6 3.25671 21.6C3.25671 21.6 3.25672 21.6 3.25673 21.6C3.25673 21.6 3.25674 21.6 3.25675 21.6C3.25675 21.6 3.25676 21.6 3.25677 21.6C3.25677 21.6 3.25678 21.6 3.25679 21.6C3.25679 21.6 3.2568 21.6 3.25681 21.6C3.25681 21.6 3.25682 21.6 3.25683 21.6C3.25684 21.6 3.25684 21.6 3.25685 21.6C3.25686 21.6 3.25686 21.6 3.25687 21.6C3.25688 21.6 3.25688 21.6 3.25689 21.6C3.2569 21.6 3.2569 21.6 3.25691 21.6C3.25692 21.6 3.25692 21.6 3.25693 21.6C3.25694 21.6 3.25695 21.6 3.25695 21.6C3.25696 21.6 3.25697 21.6 3.25697 21.6C3.25698 21.6 3.25699 21.6 3.25699 21.6C3.257 21.6 3.25701 21.6 3.25701 21.6C3.25702 21.6 3.25703 21.6 3.25704 21.6C3.25704 21.6 3.25705 21.6 3.25706 21.6C3.25706 21.6 3.25707 21.6 3.25708 21.6C3.25708 21.6 3.25709 21.6 3.2571 21.6C3.25711 21.6 3.25711 21.6 3.25712 21.6C3.25713 21.6 3.25713 21.6 3.25714 21.6C3.25715 21.6 3.25715 21.6 3.25716 21.6C3.25717 21.6 3.25718 21.6 3.25718 21.6C3.25719 21.6 3.2572 21.6 3.2572 21.6C3.25721 21.6 3.25722 21.6 3.25722 21.6C3.25723 21.6 3.25724 21.6 3.25725 21.6C3.25725 21.6 3.25726 21.6 3.25727 21.6C3.25727 21.6 3.25728 21.6 3.25729 21.6C3.2573 21.6 3.2573 21.6 3.25731 21.6C3.25732 21.6 3.25732 21.6 3.25733 21.6C3.25734 21.6 3.25735 21.6 3.25735 21.6C3.25736 21.6 3.25737 21.6 3.25737 21.6C3.25738 21.6 3.25739 21.6 3.2574 21.6C3.2574 21.6 3.25741 21.6 3.25742 21.6C3.25742 21.6 3.25743 21.6 3.25744 21.6C3.25745 21.6 3.25745 21.6 3.25746 21.6C3.25747 21.6 3.25748 21.6 3.25748 21.6C3.25749 21.6 3.2575 21.6 3.2575 21.6C3.25751 21.6 3.25752 21.6 3.25753 21.6C3.25753 21.6 3.25754 21.6 3.25755 21.6C3.25755 21.6 3.25756 21.6 3.25757 21.6C3.25758 21.6 3.25758 21.6 3.25759 21.6C3.2576 21.6 3.25761 21.6 3.25761 21.6C3.25762 21.6 3.25763 21.6 3.25763 21.6C3.25764 21.6 3.25765 21.6 3.25766 21.6C3.25766 21.6 3.25767 21.6 3.25768 21.6C3.25769 21.6 3.25769 21.6 3.2577 21.6C3.25771 21.6 3.25772 21.6 3.25772 21.6C3.25773 21.6 3.25774 21.6 3.25775 21.6C3.25775 21.6 3.25776 21.6 3.25777 21.6C3.25777 21.6 3.25778 21.6 3.25779 21.6C3.2578 21.6 3.2578 21.6 3.25781 21.6C3.25782 21.6 3.25783 21.6 3.25783 21.6C3.25784 21.6 3.25785 21.6 3.25786 21.6C3.25786 21.6 3.25787 21.6 3.25788 21.6C3.25789 21.6 3.25789 21.6 3.2579 21.6C3.25791 21.6 3.25792 21.6 3.25792 21.6C3.25793 21.6 3.25794 21.6 3.25795 21.6C3.25795 21.6 3.25796 21.6 3.25797 21.6C3.25798 21.6 3.25798 21.6 3.25799 21.6C3.258 21.6 3.25801 21.6 3.25801 21.6C3.25802 21.6 3.25803 21.6 3.25804 21.6C3.25804 21.6 3.25805 21.6 3.25806 21.6C3.25807 21.6 3.25807 21.6 3.25808 21.6C3.25809 21.6 3.2581 21.6 3.2581 21.6C3.25811 21.6 3.25812 21.6 3.25813 21.6C3.25813 21.6 3.25814 21.6 3.25815 21.6C3.25816 21.6 3.25816 21.6 3.25817 21.6C3.25818 21.6 3.25819 21.6 3.25819 21.6C3.2582 21.6 3.25821 21.6 3.25822 21.6C3.25822 21.6 3.25823 21.6 3.25824 21.6C3.25825 21.6 3.25826 21.6 3.25826 21.6C3.25827 21.6 3.25828 21.6 3.25829 21.6C3.25829 21.6 3.2583 21.6 3.25831 21.6C3.25832 21.6 3.25832 21.6 3.25833 21.6C3.25834 21.6 3.25835 21.6 3.25836 21.6C3.25836 21.6 3.25837 21.6 3.25838 21.6C3.25839 21.6 3.25839 21.6 3.2584 21.6C3.25841 21.6 3.25842 21.6 3.25842 21.6C3.25843 21.6 3.25844 21.6 3.25845 21.6C3.25846 21.6 3.25846 21.6 3.25847 21.6C3.25848 21.6 3.25849 21.6 3.25849 21.6C3.2585 21.6 3.25851 21.6 3.25852 21.6C3.25852 21.6 3.25853 21.6 3.25854 21.6C3.25855 21.6 3.25856 21.6 3.25856 21.6C3.25857 21.6 3.25858 21.6 3.25859 21.6C3.25859 21.6 3.2586 21.6 3.25861 21.6C3.25862 21.6 3.25863 21.6 3.25863 21.6C3.25864 21.6 3.25865 21.6 3.25866 21.6C3.25867 21.6 3.25867 21.6 3.25868 21.6C3.25869 21.6 3.2587 21.6 3.2587 21.6C3.25871 21.6 3.25872 21.6 3.25873 21.6C3.25874 21.6 3.25874 21.6 3.25875 21.6C3.25876 21.6 3.25877 21.6 3.25878 21.6C3.25878 21.6 3.25879 21.6 3.2588 21.6C3.25881 21.6 3.25881 21.6 3.25882 21.6C3.25883 21.6 3.25884 21.6 3.25885 21.6C3.25885 21.6 3.25886 21.6 3.25887 21.6C3.25888 21.6 3.25889 21.6 3.25889 21.6C3.2589 21.6 3.25891 21.6 3.25892 21.6C3.25893 21.6 3.25893 21.6 3.25894 21.6C3.25895 21.6 3.25896 21.6 3.25897 21.6C3.25897 21.6 3.25898 21.6 3.25899 21.6C3.259 21.6 3.259 21.6 3.25901 21.6C3.25902 21.6 3.25903 21.6 3.25904 21.6C3.25904 21.6 3.25905 21.6 3.25906 21.6C3.25907 21.6 3.25908 21.6 3.25908 21.6C3.25909 21.6 3.2591 21.6 3.25911 21.6C3.25912 21.6 3.25912 21.6 3.25913 21.6C3.25914 21.6 3.25915 21.6 3.25916 21.6C3.25917 21.6 3.25917 21.6 3.25918 21.6C3.25919 21.6 3.2592 21.6 3.25921 21.6C3.25921 21.6 3.25922 21.6 3.25923 21.6C3.25924 21.6 3.25925 21.6 3.25925 21.6C3.25926 21.6 3.25927 21.6 3.25928 21.6C3.25929 21.6 3.25929 21.6 3.2593 21.6C3.25931 21.6 3.25932 21.6 3.25933 21.6C3.25933 21.6 3.25934 21.6 3.25935 21.6C3.25936 21.6 3.25937 21.6 3.25938 21.6C3.25938 21.6 3.25939 21.6 3.2594 21.6C3.25941 21.6 3.25942 21.6 3.25942 21.6C3.25943 21.6 3.25944 21.6 3.25945 21.6C3.25946 21.6 3.25946 21.6 3.25947 21.6C3.25948 21.6 3.25949 21.6 3.2595 21.6C3.25951 21.6 3.25951 21.6 3.25952 21.6C3.25953 21.6 3.25954 21.6 3.25955 21.6C3.25955 21.6 3.25956 21.6 3.25957 21.6C3.25958 21.6 3.25959 21.6 3.2596 21.6C3.2596 21.6 3.25961 21.6 3.25962 21.6C3.25963 21.6 3.25964 21.6 3.25964 21.6C3.25965 21.6 3.25966 21.6 3.25967 21.6C3.25968 21.6 3.25969 21.6 3.25969 21.6C3.2597 21.6 3.25971 21.6 3.25972 21.6C3.25973 21.6 3.25974 21.6 3.25974 21.6C3.25975 21.6 3.25976 21.6 3.25977 21.6C3.25978 21.6 3.25978 21.6 3.25979 21.6C3.2598 21.6 3.25981 21.6 3.25982 21.6C3.25983 21.6 3.25983 21.6 3.25984 21.6C3.25985 21.6 3.25986 21.6 3.25987 21.6C3.25988 21.6 3.25988 21.6 3.25989 21.6C3.2599 21.6 3.25991 21.6 3.25992 21.6C3.25993 21.6 3.25993 21.6 3.25994 21.6C3.25995 21.6 3.25996 21.6 3.25997 21.6C3.25998 21.6 3.25998 21.6 3.25999 21.6C3.26 21.6 3.26001 21.6 3.26002 21.6C3.26003 21.6 3.26003 21.6 3.26004 21.6C3.26005 21.6 3.26006 21.6 3.26007 21.6C3.26008 21.6 3.26008 21.6 3.26009 21.6C3.2601 21.6 3.26011 21.6 3.26012 21.6C3.26013 21.6 3.26014 21.6 3.26014 21.6C3.26015 21.6 3.26016 21.6 3.26017 21.6C3.26018 21.6 3.26019 21.6 3.26019 21.6C3.2602 21.6 3.26021 21.6 3.26022 21.6C3.26023 21.6 3.26024 21.6 3.26024 21.6C3.26025 21.6 3.26026 21.6 3.26027 21.6C3.26028 21.6 3.26029 21.6 3.2603 21.6C3.2603 21.6 3.26031 21.6 3.26032 21.6C3.26033 21.6 3.26034 21.6 3.26035 21.6C3.26035 21.6 3.26036 21.6 3.26037 21.6C3.26038 21.6 3.26039 21.6 3.2604 21.6C3.26041 21.6 3.26041 21.6 3.26042 21.6C3.26043 21.6 3.26044 21.6 3.26045 21.6C3.26046 21.6 3.26046 21.6 3.26047 21.6C3.26048 21.6 3.26049 21.6 3.2605 21.6C3.26051 21.6 3.26052 21.6 3.26052 21.6C3.26053 21.6 3.26054 21.6 3.26055 21.6C3.26056 21.6 3.26057 21.6 3.26058 21.6C3.26058 21.6 3.26059 21.6 3.2606 21.6C3.26061 21.6 3.26062 21.6 3.26063 21.6C3.26063 21.6 3.26064 21.6 3.26065 21.6C3.26066 21.6 3.26067 21.6 3.26068 21.6C3.26069 21.6 3.26069 21.6 3.2607 21.6C3.26071 21.6 3.26072 21.6 3.26073 21.6C3.26074 21.6 3.26075 21.6 3.26075 21.6C3.26076 21.6 3.26077 21.6 3.26078 21.6C3.26079 21.6 3.2608 21.6 3.26081 21.6C3.26082 21.6 3.26082 21.6 3.26083 21.6C3.26084 21.6 3.26085 21.6 3.26086 21.6C3.26087 21.6 3.26088 21.6 3.26088 21.6C3.26089 21.6 3.2609 21.6 3.26091 21.6C3.26092 21.6 3.26093 21.6 3.26094 21.6C3.26094 21.6 3.26095 21.6 3.26096 21.6C3.26097 21.6 3.26098 21.6 3.26099 21.6C3.261 21.6 3.261 21.6 3.26101 21.6C3.26102 21.6 3.26103 21.6 3.26104 21.6C3.26105 21.6 3.26106 21.6 3.26107 21.6C3.26107 21.6 3.26108 21.6 3.26109 21.6C3.2611 21.6 3.26111 21.6 3.26112 21.6C3.26113 21.6 3.26114 21.6 3.26114 21.6C3.26115 21.6 3.26116 21.6 3.26117 21.6C3.26118 21.6 3.26119 21.6 3.2612 21.6C3.2612 21.6 3.26121 21.6 3.26122 21.6C3.26123 21.6 3.26124 21.6 3.26125 21.6C3.26126 21.6 3.26127 21.6 3.26127 21.6C3.26128 21.6 3.26129 21.6 3.2613 21.6C3.26131 21.6 3.26132 21.6 3.26133 21.6C3.26134 21.6 3.26134 21.6 3.26135 21.6C3.26136 21.6 3.26137 21.6 3.26138 21.6C3.26139 21.6 3.2614 21.6 3.26141 21.6C3.26141 21.6 3.26142 21.6 3.26143 21.6C3.26144 21.6 3.26145 21.6 3.26146 21.6C3.26147 21.6 3.26148 21.6 3.26148 21.6C3.26149 21.6 3.2615 21.6 3.26151 21.6C3.26152 21.6 3.26153 21.6 3.26154 21.6C3.26155 21.6 3.26155 21.6 3.26156 21.6C3.26157 21.6 3.26158 21.6 3.26159 21.6C3.2616 21.6 3.26161 21.6 3.26162 21.6C3.26163 21.6 3.26163 21.6 3.26164 21.6C3.26165 21.6 3.26166 21.6 3.26167 21.6C3.26168 21.6 3.26169 21.6 3.2617 21.6C3.2617 21.6 3.26171 21.6 3.26172 21.6C3.26173 21.6 3.26174 21.6 3.26175 21.6C3.26176 21.6 3.26177 21.6 3.26178 21.6C3.26178 21.6 3.26179 21.6 3.2618 21.6C3.26181 21.6 3.26182 21.6 3.26183 21.6C3.26184 21.6 3.26185 21.6 3.26186 21.6C3.26186 21.6 3.26187 21.6 3.26188 21.6C3.26189 21.6 3.2619 21.6 3.26191 21.6C3.26192 21.6 3.26193 21.6 3.26194 21.6C3.26194 21.6 3.26195 21.6 3.26196 21.6C3.26197 21.6 3.26198 21.6 3.26199 21.6C3.262 21.6 3.26201 21.6 3.26202 21.6C3.26202 21.6 3.26203 21.6 3.26204 21.6C3.26205 21.6 3.26206 21.6 3.26207 21.6C3.26208 21.6 3.26209 21.6 3.2621 21.6C3.2621 21.6 3.26211 21.6 3.26212 21.6C3.26213 21.6 3.26214 21.6 3.26215 21.6C3.26216 21.6 3.26217 21.6 3.26218 21.6C3.26218 21.6 3.26219 21.6 3.2622 21.6C3.26221 21.6 3.26222 21.6 3.26223 21.6C3.26224 21.6 3.26225 21.6 3.26226 21.6C3.26227 21.6 3.26227 21.6 3.26228 21.6C3.26229 21.6 3.2623 21.6 3.26231 21.6C3.26232 21.6 3.26233 21.6 3.26234 21.6C3.26235 21.6 3.26235 21.6 3.26236 21.6C3.26237 21.6 3.26238 21.6 3.26239 21.6C3.2624 21.6 3.26241 21.6 3.26242 21.6C3.26243 21.6 3.26244 21.6 3.26244 21.6C3.26245 21.6 3.26246 21.6 3.26247 21.6C3.26248 21.6 3.26249 21.6 3.2625 21.6C3.26251 21.6 3.26252 21.6 3.26253 21.6C3.26253 21.6 3.26254 21.6 3.26255 21.6C3.26256 21.6 3.26257 21.6 3.26258 21.6C3.26259 21.6 3.2626 21.6 3.26261 21.6C3.26262 21.6 3.26262 21.6 3.26263 21.6C3.26264 21.6 3.26265 21.6 3.26266 21.6C3.26267 21.6 3.26268 21.6 3.26269 21.6C3.2627 21.6 3.26271 21.6 3.26272 21.6C3.26272 21.6 3.26273 21.6 3.26274 21.6C3.26275 21.6 3.26276 21.6 3.26277 21.6C3.26278 21.6 3.26279 21.6 3.2628 21.6C3.26281 21.6 3.26281 21.6 3.26282 21.6C3.26283 21.6 3.26284 21.6 3.26285 21.6C3.26286 21.6 3.26287 21.6 3.26288 21.6C3.26289 21.6 3.2629 21.6 3.26291 21.6C3.26291 21.6 3.26292 21.6 3.26293 21.6C3.26294 21.6 3.26295 21.6 3.26296 21.6C3.26297 21.6 3.26298 21.6 3.26299 21.6C3.263 21.6 3.26301 21.6 3.26301 21.6C3.26302 21.6 3.26303 21.6 3.26304 21.6C3.26305 21.6 3.26306 21.6 3.26307 21.6C3.26308 21.6 3.26309 21.6 3.2631 21.6C3.26311 21.6 3.26311 21.6 3.26312 21.6C3.26313 21.6 3.26314 21.6 3.26315 21.6C3.26316 21.6 3.26317 21.6 3.26318 21.6C3.26319 21.6 3.2632 21.6 3.26321 21.6C3.26321 21.6 3.26322 21.6 3.26323 21.6C3.26324 21.6 3.26325 21.6 3.26326 21.6C3.26327 21.6 3.26328 21.6 3.26329 21.6C3.2633 21.6 3.26331 21.6 3.26332 21.6C3.26332 21.6 3.26333 21.6 3.26334 21.6C3.26335 21.6 3.26336 21.6 3.26337 21.6C3.26338 21.6 3.26339 21.6 3.2634 21.6C3.26341 21.6 3.26342 21.6 3.26342 21.6C3.26343 21.6 3.26344 21.6 3.26345 21.6C3.26346 21.6 3.26347 21.6 3.26348 21.6C3.26349 21.6 3.2635 21.6 3.26351 21.6C3.26352 21.6 3.26353 21.6 3.26353 21.6C3.26354 21.6 3.26355 21.6 3.26356 21.6C3.26357 21.6 3.26358 21.6 3.26359 21.6C3.2636 21.6 3.26361 21.6 3.26362 21.6C3.26363 21.6 3.26364 21.6 3.26364 21.6C3.26365 21.6 3.26366 21.6 3.26367 21.6C3.26368 21.6 3.26369 21.6 3.2637 21.6C3.26371 21.6 3.26372 21.6 3.26373 21.6C3.26374 21.6 3.26375 21.6 3.26376 21.6C3.26376 21.6 3.26377 21.6 3.26378 21.6C3.26379 21.6 3.2638 21.6 3.26381 21.6C3.26382 21.6 3.26383 21.6 3.26384 21.6C3.26385 21.6 3.26386 21.6 3.26387 21.6C3.26387 21.6 3.26388 21.6 3.26389 21.6C3.2639 21.6 3.26391 21.6 3.26392 21.6C3.26393 21.6 3.26394 21.6 3.26395 21.6C3.26396 21.6 3.26397 21.6 3.26398 21.6C3.26399 21.6 3.26399 21.6 3.264 21.6C3.26401 21.6 3.26402 21.6 3.26403 21.6C3.26404 21.6 3.26405 21.6 3.26406 21.6C3.26407 21.6 3.26408 21.6 3.26409 21.6C3.2641 21.6 3.26411 21.6 3.26411 21.6C3.26412 21.6 3.26413 21.6 3.26414 21.6C3.26415 21.6 3.26416 21.6 3.26417 21.6C3.26418 21.6 3.26419 21.6 3.2642 21.6C3.26421 21.6 3.26422 21.6 3.26423 21.6C3.26423 21.6 3.26424 21.6 3.26425 21.6C3.26426 21.6 3.26427 21.6 3.26428 21.6C3.26429 21.6 3.2643 21.6 3.26431 21.6C3.26432 21.6 3.26433 21.6 3.26434 21.6C3.26435 21.6 3.26436 21.6 3.26436 21.6C3.26437 21.6 3.26438 21.6 3.26439 21.6C3.2644 21.6 3.26441 21.6 3.26442 21.6C3.26443 21.6 3.26444 21.6 3.26445 21.6C3.26446 21.6 3.26447 21.6 3.26448 21.6C3.26449 21.6 3.26449 21.6 3.2645 21.6C3.26451 21.6 3.26452 21.6 3.26453 21.6C3.26454 21.6 3.26455 21.6 3.26456 21.6C3.26457 21.6 3.26458 21.6 3.26459 21.6C3.2646 21.6 3.26461 21.6 3.26462 21.6C3.26462 21.6 3.26463 21.6 3.26464 21.6C3.26465 21.6 3.26466 21.6 3.26467 21.6C3.26468 21.6 3.26469 21.6 3.2647 21.6C3.26471 21.6 3.26472 21.6 3.26473 21.6C3.26474 21.6 3.26475 21.6 3.26475 21.6C3.26476 21.6 3.26477 21.6 3.26478 21.6C3.26479 21.6 3.2648 21.6 3.26481 21.6C3.26482 21.6 3.26483 21.6 3.26484 21.6C3.26485 21.6 3.26486 21.6 3.26487 21.6C3.26488 21.6 3.26488 21.6 3.26489 21.6C3.2649 21.6 3.26491 21.6 3.26492 21.6C3.26493 21.6 3.26494 21.6 3.26495 21.6C3.26496 21.6 3.26497 21.6 3.26498 21.6C3.26499 21.6 3.265 21.6 3.26501 21.6C3.26502 21.6 3.26502 21.6 3.26503 21.6C3.26504 21.6 3.26505 21.6 3.26506 21.6C3.26507 21.6 3.26508 21.6 3.26509 21.6C3.2651 21.6 3.26511 21.6 3.26512 21.6C3.26513 21.6 3.26514 21.6 3.26515 21.6C3.26515 21.6 3.26516 21.6 3.26517 21.6C3.26518 21.6 3.26519 21.6 3.2652 21.6C3.26521 21.6 3.26522 21.6 3.26523 21.6C3.26524 21.6 3.26525 21.6 3.26526 21.6C3.26527 21.6 3.26528 21.6 3.26529 21.6C3.26529 21.6 3.2653 21.6 3.26531 21.6C3.26532 21.6 3.26533 21.6 3.26534 21.6C3.26535 21.6 3.26536 21.6 3.26537 21.6C3.26538 21.6 3.26539 21.6 3.2654 21.6C3.26541 21.6 3.26542 21.6 3.26543 21.6C3.26544 21.6 3.26544 21.6 3.26545 21.6C3.26546 21.6 3.26547 21.6 3.26548 21.6C3.26549 21.6 3.2655 21.6 3.26551 21.6C3.26552 21.6 3.26553 21.6 3.26554 21.6C3.26555 21.6 3.26556 21.6 3.26557 21.6C3.26558 21.6 3.26558 21.6 3.26559 21.6C3.2656 21.6 3.26561 21.6 3.26562 21.6C3.26563 21.6 3.26564 21.6 3.26565 21.6C3.26566 21.6 3.26567 21.6 3.26568 21.6C3.26569 21.6 3.2657 21.6 3.26571 21.6C3.26572 21.6 3.26572 21.6 3.26573 21.6C3.26574 21.6 3.26575 21.6 3.26576 21.6C3.26577 21.6 3.26578 21.6 3.26579 21.6C3.2658 21.6 3.26581 21.6 3.26582 21.6C3.26583 21.6 3.26584 21.6 3.26585 21.6C3.26586 21.6 3.26587 21.6 3.26587 21.6C3.26588 21.6 3.26589 21.6 3.2659 21.6C3.26591 21.6 3.26592 21.6 3.26593 21.6C3.26594 21.6 3.26595 21.6 3.26596 21.6C3.26597 21.6 3.26598 21.6 3.26599 21.6C3.266 21.6 3.26601 21.6 3.26601 21.6C3.26602 21.6 3.26603 21.6 3.26604 21.6C3.26605 21.6 3.26606 21.6 3.26607 21.6C3.26608 21.6 3.26609 21.6 3.2661 21.6C3.26611 21.6 3.26612 21.6 3.26613 21.6C3.26614 21.6 3.26615 21.6 3.26616 21.6C3.26616 21.6 3.26617 21.6 3.26618 21.6C3.26619 21.6 3.2662 21.6 3.26621 21.6C3.26622 21.6 3.26623 21.6 3.26624 21.6C3.26625 21.6 3.26626 21.6 3.26627 21.6C3.26628 21.6 3.26629 21.6 3.2663 21.6C3.26631 21.6 3.26631 21.6 3.26632 21.6C3.26633 21.6 3.26634 21.6 3.26635 21.6C3.26636 21.6 3.26637 21.6 3.26638 21.6C3.26639 21.6 3.2664 21.6 3.26641 21.6C3.26642 21.6 3.26643 21.6 3.26644 21.6C3.26645 21.6 3.26646 21.6 3.26646 21.6V18.4ZM3.29639 18.4005C3.84697 18.415 4.40614 18.8731 4.38628 19.573L1.18757 19.4823C1.15331 20.6892 2.13448 21.5712 3.21256 21.5995L3.29639 18.4005ZM4.38241 19.6477L4.42557 19.0739L1.23459 18.8339L1.19143 19.4076L4.38241 19.6477ZM4.43008 18.9539C4.43008 18.8316 4.5652 18.6 4.87533 18.6V15.4C2.93161 15.4 1.23008 16.9334 1.23008 18.9539H4.43008ZM4.87533 18.6H10.9176V15.4H4.87533V18.6ZM10.9176 18.6C11.2226 18.6 11.3628 18.8244 11.3628 18.9654H14.5628C14.5628 16.9406 12.8712 15.4 10.9176 15.4V18.6ZM11.3675 19.0879L11.4107 19.6501L14.6013 19.4052L14.5581 18.843L11.3675 19.0879ZM11.4066 19.573C11.3871 18.8835 11.9374 18.4153 12.4989 18.4005L12.5827 21.5995C13.6717 21.5709 14.6393 20.6787 14.6053 19.4823L11.4066 19.573ZM12.5408 18.4C12.5408 18.4 12.5408 18.4 12.5408 18.4C12.5408 18.4 12.5408 18.4 12.5408 18.4C12.5408 18.4 12.5407 18.4 12.5407 18.4C12.5407 18.4 12.5407 18.4 12.5407 18.4C12.5407 18.4 12.5407 18.4 12.5407 18.4C12.5407 18.4 12.5407 18.4 12.5407 18.4C12.5406 18.4 12.5406 18.4 12.5406 18.4C12.5406 18.4 12.5406 18.4 12.5406 18.4C12.5406 18.4 12.5406 18.4 12.5406 18.4C12.5406 18.4 12.5405 18.4 12.5405 18.4C12.5405 18.4 12.5405 18.4 12.5405 18.4C12.5405 18.4 12.5405 18.4 12.5405 18.4C12.5405 18.4 12.5405 18.4 12.5405 18.4C12.5404 18.4 12.5404 18.4 12.5404 18.4C12.5404 18.4 12.5404 18.4 12.5404 18.4C12.5404 18.4 12.5404 18.4 12.5404 18.4C12.5404 18.4 12.5404 18.4 12.5403 18.4C12.5403 18.4 12.5403 18.4 12.5403 18.4C12.5403 18.4 12.5403 18.4 12.5403 18.4C12.5403 18.4 12.5403 18.4 12.5403 18.4C12.5402 18.4 12.5402 18.4 12.5402 18.4C12.5402 18.4 12.5402 18.4 12.5402 18.4C12.5402 18.4 12.5402 18.4 12.5402 18.4C12.5402 18.4 12.5402 18.4 12.5401 18.4C12.5401 18.4 12.5401 18.4 12.5401 18.4C12.5401 18.4 12.5401 18.4 12.5401 18.4C12.5401 18.4 12.5401 18.4 12.5401 18.4C12.5401 18.4 12.54 18.4 12.54 18.4C12.54 18.4 12.54 18.4 12.54 18.4C12.54 18.4 12.54 18.4 12.54 18.4C12.54 18.4 12.54 18.4 12.54 18.4C12.5399 18.4 12.5399 18.4 12.5399 18.4C12.5399 18.4 12.5399 18.4 12.5399 18.4C12.5399 18.4 12.5399 18.4 12.5399 18.4C12.5399 18.4 12.5398 18.4 12.5398 18.4C12.5398 18.4 12.5398 18.4 12.5398 18.4C12.5398 18.4 12.5398 18.4 12.5398 18.4C12.5398 18.4 12.5398 18.4 12.5398 18.4C12.5397 18.4 12.5397 18.4 12.5397 18.4C12.5397 18.4 12.5397 18.4 12.5397 18.4C12.5397 18.4 12.5397 18.4 12.5397 18.4C12.5397 18.4 12.5396 18.4 12.5396 18.4C12.5396 18.4 12.5396 18.4 12.5396 18.4C12.5396 18.4 12.5396 18.4 12.5396 18.4C12.5396 18.4 12.5396 18.4 12.5396 18.4C12.5395 18.4 12.5395 18.4 12.5395 18.4C12.5395 18.4 12.5395 18.4 12.5395 18.4C12.5395 18.4 12.5395 18.4 12.5395 18.4C12.5395 18.4 12.5395 18.4 12.5394 18.4C12.5394 18.4 12.5394 18.4 12.5394 18.4C12.5394 18.4 12.5394 18.4 12.5394 18.4C12.5394 18.4 12.5394 18.4 12.5394 18.4C12.5394 18.4 12.5393 18.4 12.5393 18.4C12.5393 18.4 12.5393 18.4 12.5393 18.4C12.5393 18.4 12.5393 18.4 12.5393 18.4C12.5393 18.4 12.5393 18.4 12.5392 18.4C12.5392 18.4 12.5392 18.4 12.5392 18.4C12.5392 18.4 12.5392 18.4 12.5392 18.4C12.5392 18.4 12.5392 18.4 12.5392 18.4C12.5392 18.4 12.5391 18.4 12.5391 18.4C12.5391 18.4 12.5391 18.4 12.5391 18.4C12.5391 18.4 12.5391 18.4 12.5391 18.4C12.5391 18.4 12.5391 18.4 12.5391 18.4C12.539 18.4 12.539 18.4 12.539 18.4C12.539 18.4 12.539 18.4 12.539 18.4C12.539 18.4 12.539 18.4 12.539 18.4C12.539 18.4 12.5389 18.4 12.5389 18.4C12.5389 18.4 12.5389 18.4 12.5389 18.4C12.5389 18.4 12.5389 18.4 12.5389 18.4C12.5389 18.4 12.5389 18.4 12.5389 18.4C12.5388 18.4 12.5388 18.4 12.5388 18.4C12.5388 18.4 12.5388 18.4 12.5388 18.4C12.5388 18.4 12.5388 18.4 12.5388 18.4C12.5388 18.4 12.5388 18.4 12.5387 18.4C12.5387 18.4 12.5387 18.4 12.5387 18.4C12.5387 18.4 12.5387 18.4 12.5387 18.4C12.5387 18.4 12.5387 18.4 12.5387 18.4C12.5386 18.4 12.5386 18.4 12.5386 18.4C12.5386 18.4 12.5386 18.4 12.5386 18.4C12.5386 18.4 12.5386 18.4 12.5386 18.4C12.5386 18.4 12.5386 18.4 12.5385 18.4C12.5385 18.4 12.5385 18.4 12.5385 18.4C12.5385 18.4 12.5385 18.4 12.5385 18.4C12.5385 18.4 12.5385 18.4 12.5385 18.4C12.5385 18.4 12.5384 18.4 12.5384 18.4C12.5384 18.4 12.5384 18.4 12.5384 18.4C12.5384 18.4 12.5384 18.4 12.5384 18.4C12.5384 18.4 12.5384 18.4 12.5383 18.4C12.5383 18.4 12.5383 18.4 12.5383 18.4C12.5383 18.4 12.5383 18.4 12.5383 18.4C12.5383 18.4 12.5383 18.4 12.5383 18.4C12.5383 18.4 12.5382 18.4 12.5382 18.4C12.5382 18.4 12.5382 18.4 12.5382 18.4C12.5382 18.4 12.5382 18.4 12.5382 18.4C12.5382 18.4 12.5382 18.4 12.5382 18.4C12.5381 18.4 12.5381 18.4 12.5381 18.4C12.5381 18.4 12.5381 18.4 12.5381 18.4C12.5381 18.4 12.5381 18.4 12.5381 18.4C12.5381 18.4 12.538 18.4 12.538 18.4C12.538 18.4 12.538 18.4 12.538 18.4C12.538 18.4 12.538 18.4 12.538 18.4C12.538 18.4 12.538 18.4 12.538 18.4C12.5379 18.4 12.5379 18.4 12.5379 18.4C12.5379 18.4 12.5379 18.4 12.5379 18.4C12.5379 18.4 12.5379 18.4 12.5379 18.4C12.5379 18.4 12.5379 18.4 12.5378 18.4C12.5378 18.4 12.5378 18.4 12.5378 18.4C12.5378 18.4 12.5378 18.4 12.5378 18.4C12.5378 18.4 12.5378 18.4 12.5378 18.4C12.5377 18.4 12.5377 18.4 12.5377 18.4C12.5377 18.4 12.5377 18.4 12.5377 18.4C12.5377 18.4 12.5377 18.4 12.5377 18.4C12.5377 18.4 12.5377 18.4 12.5376 18.4C12.5376 18.4 12.5376 18.4 12.5376 18.4C12.5376 18.4 12.5376 18.4 12.5376 18.4C12.5376 18.4 12.5376 18.4 12.5376 18.4C12.5376 18.4 12.5375 18.4 12.5375 18.4C12.5375 18.4 12.5375 18.4 12.5375 18.4C12.5375 18.4 12.5375 18.4 12.5375 18.4C12.5375 18.4 12.5375 18.4 12.5374 18.4C12.5374 18.4 12.5374 18.4 12.5374 18.4C12.5374 18.4 12.5374 18.4 12.5374 18.4C12.5374 18.4 12.5374 18.4 12.5374 18.4C12.5374 18.4 12.5373 18.4 12.5373 18.4C12.5373 18.4 12.5373 18.4 12.5373 18.4C12.5373 18.4 12.5373 18.4 12.5373 18.4C12.5373 18.4 12.5373 18.4 12.5373 18.4C12.5372 18.4 12.5372 18.4 12.5372 18.4C12.5372 18.4 12.5372 18.4 12.5372 18.4C12.5372 18.4 12.5372 18.4 12.5372 18.4C12.5372 18.4 12.5371 18.4 12.5371 18.4C12.5371 18.4 12.5371 18.4 12.5371 18.4C12.5371 18.4 12.5371 18.4 12.5371 18.4C12.5371 18.4 12.5371 18.4 12.5371 18.4C12.537 18.4 12.537 18.4 12.537 18.4C12.537 18.4 12.537 18.4 12.537 18.4C12.537 18.4 12.537 18.4 12.537 18.4C12.537 18.4 12.537 18.4 12.5369 18.4C12.5369 18.4 12.5369 18.4 12.5369 18.4C12.5369 18.4 12.5369 18.4 12.5369 18.4C12.5369 18.4 12.5369 18.4 12.5369 18.4C12.5368 18.4 12.5368 18.4 12.5368 18.4C12.5368 18.4 12.5368 18.4 12.5368 18.4C12.5368 18.4 12.5368 18.4 12.5368 18.4C12.5368 18.4 12.5368 18.4 12.5367 18.4C12.5367 18.4 12.5367 18.4 12.5367 18.4C12.5367 18.4 12.5367 18.4 12.5367 18.4C12.5367 18.4 12.5367 18.4 12.5367 18.4C12.5367 18.4 12.5366 18.4 12.5366 18.4C12.5366 18.4 12.5366 18.4 12.5366 18.4C12.5366 18.4 12.5366 18.4 12.5366 18.4C12.5366 18.4 12.5366 18.4 12.5365 18.4C12.5365 18.4 12.5365 18.4 12.5365 18.4C12.5365 18.4 12.5365 18.4 12.5365 18.4C12.5365 18.4 12.5365 18.4 12.5365 18.4C12.5365 18.4 12.5364 18.4 12.5364 18.4C12.5364 18.4 12.5364 18.4 12.5364 18.4C12.5364 18.4 12.5364 18.4 12.5364 18.4C12.5364 18.4 12.5364 18.4 12.5364 18.4C12.5363 18.4 12.5363 18.4 12.5363 18.4C12.5363 18.4 12.5363 18.4 12.5363 18.4C12.5363 18.4 12.5363 18.4 12.5363 18.4C12.5363 18.4 12.5363 18.4 12.5362 18.4C12.5362 18.4 12.5362 18.4 12.5362 18.4C12.5362 18.4 12.5362 18.4 12.5362 18.4C12.5362 18.4 12.5362 18.4 12.5362 18.4C12.5361 18.4 12.5361 18.4 12.5361 18.4C12.5361 18.4 12.5361 18.4 12.5361 18.4C12.5361 18.4 12.5361 18.4 12.5361 18.4C12.5361 18.4 12.5361 18.4 12.536 18.4C12.536 18.4 12.536 18.4 12.536 18.4C12.536 18.4 12.536 18.4 12.536 18.4C12.536 18.4 12.536 18.4 12.536 18.4C12.536 18.4 12.5359 18.4 12.5359 18.4C12.5359 18.4 12.5359 18.4 12.5359 18.4C12.5359 18.4 12.5359 18.4 12.5359 18.4C12.5359 18.4 12.5359 18.4 12.5358 18.4C12.5358 18.4 12.5358 18.4 12.5358 18.4C12.5358 18.4 12.5358 18.4 12.5358 18.4C12.5358 18.4 12.5358 18.4 12.5358 18.4C12.5358 18.4 12.5357 18.4 12.5357 18.4C12.5357 18.4 12.5357 18.4 12.5357 18.4C12.5357 18.4 12.5357 18.4 12.5357 18.4C12.5357 18.4 12.5357 18.4 12.5357 18.4C12.5356 18.4 12.5356 18.4 12.5356 18.4C12.5356 18.4 12.5356 18.4 12.5356 18.4C12.5356 18.4 12.5356 18.4 12.5356 18.4C12.5356 18.4 12.5355 18.4 12.5355 18.4C12.5355 18.4 12.5355 18.4 12.5355 18.4C12.5355 18.4 12.5355 18.4 12.5355 18.4C12.5355 18.4 12.5355 18.4 12.5355 18.4C12.5354 18.4 12.5354 18.4 12.5354 18.4C12.5354 18.4 12.5354 18.4 12.5354 18.4C12.5354 18.4 12.5354 18.4 12.5354 18.4C12.5354 18.4 12.5354 18.4 12.5353 18.4C12.5353 18.4 12.5353 18.4 12.5353 18.4C12.5353 18.4 12.5353 18.4 12.5353 18.4C12.5353 18.4 12.5353 18.4 12.5353 18.4C12.5352 18.4 12.5352 18.4 12.5352 18.4C12.5352 18.4 12.5352 18.4 12.5352 18.4C12.5352 18.4 12.5352 18.4 12.5352 18.4C12.5352 18.4 12.5352 18.4 12.5351 18.4C12.5351 18.4 12.5351 18.4 12.5351 18.4C12.5351 18.4 12.5351 18.4 12.5351 18.4C12.5351 18.4 12.5351 18.4 12.5351 18.4C12.5351 18.4 12.535 18.4 12.535 18.4C12.535 18.4 12.535 18.4 12.535 18.4C12.535 18.4 12.535 18.4 12.535 18.4C12.535 18.4 12.535 18.4 12.5349 18.4C12.5349 18.4 12.5349 18.4 12.5349 18.4C12.5349 18.4 12.5349 18.4 12.5349 18.4C12.5349 18.4 12.5349 18.4 12.5349 18.4C12.5349 18.4 12.5348 18.4 12.5348 18.4C12.5348 18.4 12.5348 18.4 12.5348 18.4C12.5348 18.4 12.5348 18.4 12.5348 18.4C12.5348 18.4 12.5348 18.4 12.5348 18.4C12.5347 18.4 12.5347 18.4 12.5347 18.4C12.5347 18.4 12.5347 18.4 12.5347 18.4C12.5347 18.4 12.5347 18.4 12.5347 18.4C12.5347 18.4 12.5346 18.4 12.5346 18.4C12.5346 18.4 12.5346 18.4 12.5346 18.4C12.5346 18.4 12.5346 18.4 12.5346 18.4C12.5346 18.4 12.5346 18.4 12.5346 18.4C12.5345 18.4 12.5345 18.4 12.5345 18.4C12.5345 18.4 12.5345 18.4 12.5345 18.4C12.5345 18.4 12.5345 18.4 12.5345 18.4C12.5345 18.4 12.5345 18.4 12.5344 18.4C12.5344 18.4 12.5344 18.4 12.5344 18.4C12.5344 18.4 12.5344 18.4 12.5344 18.4C12.5344 18.4 12.5344 18.4 12.5344 18.4C12.5343 18.4 12.5343 18.4 12.5343 18.4C12.5343 18.4 12.5343 18.4 12.5343 18.4C12.5343 18.4 12.5343 18.4 12.5343 18.4C12.5343 18.4 12.5343 18.4 12.5342 18.4C12.5342 18.4 12.5342 18.4 12.5342 18.4C12.5342 18.4 12.5342 18.4 12.5342 18.4C12.5342 18.4 12.5342 18.4 12.5342 18.4C12.5342 18.4 12.5341 18.4 12.5341 18.4C12.5341 18.4 12.5341 18.4 12.5341 18.4C12.5341 18.4 12.5341 18.4 12.5341 18.4C12.5341 18.4 12.5341 18.4 12.534 18.4C12.534 18.4 12.534 18.4 12.534 18.4C12.534 18.4 12.534 18.4 12.534 18.4C12.534 18.4 12.534 18.4 12.534 18.4C12.534 18.4 12.5339 18.4 12.5339 18.4C12.5339 18.4 12.5339 18.4 12.5339 18.4C12.5339 18.4 12.5339 18.4 12.5339 18.4C12.5339 18.4 12.5339 18.4 12.5339 18.4C12.5338 18.4 12.5338 18.4 12.5338 18.4C12.5338 18.4 12.5338 18.4 12.5338 18.4C12.5338 18.4 12.5338 18.4 12.5338 18.4C12.5338 18.4 12.5337 18.4 12.5337 18.4C12.5337 18.4 12.5337 18.4 12.5337 18.4C12.5337 18.4 12.5337 18.4 12.5337 18.4C12.5337 18.4 12.5337 18.4 12.5337 18.4C12.5336 18.4 12.5336 18.4 12.5336 18.4C12.5336 18.4 12.5336 18.4 12.5336 18.4C12.5336 18.4 12.5336 18.4 12.5336 18.4C12.5336 18.4 12.5336 18.4 12.5335 18.4C12.5335 18.4 12.5335 18.4 12.5335 18.4C12.5335 18.4 12.5335 18.4 12.5335 18.4C12.5335 18.4 12.5335 18.4 12.5335 18.4C12.5334 18.4 12.5334 18.4 12.5334 18.4C12.5334 18.4 12.5334 18.4 12.5334 18.4C12.5334 18.4 12.5334 18.4 12.5334 18.4C12.5334 18.4 12.5334 18.4 12.5333 18.4C12.5333 18.4 12.5333 18.4 12.5333 18.4C12.5333 18.4 12.5333 18.4 12.5333 18.4C12.5333 18.4 12.5333 18.4 12.5333 18.4C12.5333 18.4 12.5332 18.4 12.5332 18.4C12.5332 18.4 12.5332 18.4 12.5332 18.4C12.5332 18.4 12.5332 18.4 12.5332 18.4C12.5332 18.4 12.5332 18.4 12.5331 18.4C12.5331 18.4 12.5331 18.4 12.5331 18.4C12.5331 18.4 12.5331 18.4 12.5331 18.4C12.5331 18.4 12.5331 18.4 12.5331 18.4C12.5331 18.4 12.533 18.4 12.533 18.4C12.533 18.4 12.533 18.4 12.533 18.4C12.533 18.4 12.533 18.4 12.533 18.4C12.533 18.4 12.533 18.4 12.533 18.4C12.5329 18.4 12.5329 18.4 12.5329 18.4C12.5329 18.4 12.5329 18.4 12.5329 18.4C12.5329 18.4 12.5329 18.4 12.5329 18.4C12.5329 18.4 12.5329 18.4 12.5328 18.4C12.5328 18.4 12.5328 18.4 12.5328 18.4C12.5328 18.4 12.5328 18.4 12.5328 18.4C12.5328 18.4 12.5328 18.4 12.5328 18.4C12.5327 18.4 12.5327 18.4 12.5327 18.4C12.5327 18.4 12.5327 18.4 12.5327 18.4C12.5327 18.4 12.5327 18.4 12.5327 18.4C12.5327 18.4 12.5327 18.4 12.5326 18.4C12.5326 18.4 12.5326 18.4 12.5326 18.4C12.5326 18.4 12.5326 18.4 12.5326 18.4C12.5326 18.4 12.5326 18.4 12.5326 18.4C12.5325 18.4 12.5325 18.4 12.5325 18.4C12.5325 18.4 12.5325 18.4 12.5325 18.4C12.5325 18.4 12.5325 18.4 12.5325 18.4C12.5325 18.4 12.5325 18.4 12.5324 18.4C12.5324 18.4 12.5324 18.4 12.5324 18.4C12.5324 18.4 12.5324 18.4 12.5324 18.4C12.5324 18.4 12.5324 18.4 12.5324 18.4C12.5324 18.4 12.5323 18.4 12.5323 18.4C12.5323 18.4 12.5323 18.4 12.5323 18.4C12.5323 18.4 12.5323 18.4 12.5323 18.4C12.5323 18.4 12.5323 18.4 12.5323 18.4C12.5322 18.4 12.5322 18.4 12.5322 18.4C12.5322 18.4 12.5322 18.4 12.5322 18.4C12.5322 18.4 12.5322 18.4 12.5322 18.4C12.5322 18.4 12.5321 18.4 12.5321 18.4C12.5321 18.4 12.5321 18.4 12.5321 18.4C12.5321 18.4 12.5321 18.4 12.5321 18.4C12.5321 18.4 12.5321 18.4 12.5321 18.4C12.532 18.4 12.532 18.4 12.532 18.4C12.532 18.4 12.532 18.4 12.532 18.4C12.532 18.4 12.532 18.4 12.532 18.4C12.532 18.4 12.532 18.4 12.5319 18.4C12.5319 18.4 12.5319 18.4 12.5319 18.4C12.5319 18.4 12.5319 18.4 12.5319 18.4C12.5319 18.4 12.5319 18.4 12.5319 18.4C12.5318 18.4 12.5318 18.4 12.5318 18.4C12.5318 18.4 12.5318 18.4 12.5318 18.4C12.5318 18.4 12.5318 18.4 12.5318 18.4C12.5318 18.4 12.5318 18.4 12.5317 18.4C12.5317 18.4 12.5317 18.4 12.5317 18.4C12.5317 18.4 12.5317 18.4 12.5317 18.4C12.5317 18.4 12.5317 18.4 12.5317 18.4C12.5317 18.4 12.5316 18.4 12.5316 18.4C12.5316 18.4 12.5316 18.4 12.5316 18.4C12.5316 18.4 12.5316 18.4 12.5316 18.4C12.5316 18.4 12.5316 18.4 12.5315 18.4C12.5315 18.4 12.5315 18.4 12.5315 18.4C12.5315 18.4 12.5315 18.4 12.5315 18.4C12.5315 18.4 12.5315 18.4 12.5315 18.4C12.5315 18.4 12.5314 18.4 12.5314 18.4C12.5314 18.4 12.5314 18.4 12.5314 18.4C12.5314 18.4 12.5314 18.4 12.5314 18.4C12.5314 18.4 12.5314 18.4 12.5314 18.4C12.5313 18.4 12.5313 18.4 12.5313 18.4C12.5313 18.4 12.5313 18.4 12.5313 18.4C12.5313 18.4 12.5313 18.4 12.5313 18.4C12.5313 18.4 12.5312 18.4 12.5312 18.4C12.5312 18.4 12.5312 18.4 12.5312 18.4C12.5312 18.4 12.5312 18.4 12.5312 18.4C12.5312 18.4 12.5312 18.4 12.5312 18.4C12.5311 18.4 12.5311 18.4 12.5311 18.4C12.5311 18.4 12.5311 18.4 12.5311 18.4C12.5311 18.4 12.5311 18.4 12.5311 18.4C12.5311 18.4 12.5311 18.4 12.531 18.4C12.531 18.4 12.531 18.4 12.531 18.4C12.531 18.4 12.531 18.4 12.531 18.4C12.531 18.4 12.531 18.4 12.531 18.4C12.5309 18.4 12.5309 18.4 12.5309 18.4C12.5309 18.4 12.5309 18.4 12.5309 18.4C12.5309 18.4 12.5309 18.4 12.5309 18.4C12.5309 18.4 12.5309 18.4 12.5308 18.4C12.5308 18.4 12.5308 18.4 12.5308 18.4C12.5308 18.4 12.5308 18.4 12.5308 18.4C12.5308 18.4 12.5308 18.4 12.5308 18.4C12.5308 18.4 12.5307 18.4 12.5307 18.4C12.5307 18.4 12.5307 18.4 12.5307 18.4C12.5307 18.4 12.5307 18.4 12.5307 18.4C12.5307 18.4 12.5307 18.4 12.5306 18.4C12.5306 18.4 12.5306 18.4 12.5306 18.4C12.5306 18.4 12.5306 18.4 12.5306 18.4C12.5306 18.4 12.5306 18.4 12.5306 18.4C12.5306 18.4 12.5305 18.4 12.5305 18.4C12.5305 18.4 12.5305 18.4 12.5305 18.4C12.5305 18.4 12.5305 18.4 12.5305 18.4C12.5305 18.4 12.5305 18.4 12.5305 18.4C12.5304 18.4 12.5304 18.4 12.5304 18.4C12.5304 18.4 12.5304 18.4 12.5304 18.4C12.5304 18.4 12.5304 18.4 12.5304 18.4C12.5304 18.4 12.5303 18.4 12.5303 18.4C12.5303 18.4 12.5303 18.4 12.5303 18.4C12.5303 18.4 12.5303 18.4 12.5303 18.4C12.5303 18.4 12.5303 18.4 12.5303 18.4C12.5302 18.4 12.5302 18.4 12.5302 18.4C12.5302 18.4 12.5302 18.4 12.5302 18.4C12.5302 18.4 12.5302 18.4 12.5302 18.4C12.5302 18.4 12.5302 18.4 12.5301 18.4C12.5301 18.4 12.5301 18.4 12.5301 18.4C12.5301 18.4 12.5301 18.4 12.5301 18.4C12.5301 18.4 12.5301 18.4 12.5301 18.4C12.53 18.4 12.53 18.4 12.53 18.4C12.53 18.4 12.53 18.4 12.53 18.4C12.53 18.4 12.53 18.4 12.53 18.4C12.53 18.4 12.53 18.4 12.5299 18.4C12.5299 18.4 12.5299 18.4 12.5299 18.4C12.5299 18.4 12.5299 18.4 12.5299 18.4C12.5299 18.4 12.5299 18.4 12.5299 18.4C12.5299 18.4 12.5298 18.4 12.5298 18.4C12.5298 18.4 12.5298 18.4 12.5298 18.4C12.5298 18.4 12.5298 18.4 12.5298 18.4C12.5298 18.4 12.5298 18.4 12.5297 18.4C12.5297 18.4 12.5297 18.4 12.5297 18.4C12.5297 18.4 12.5297 18.4 12.5297 18.4C12.5297 18.4 12.5297 18.4 12.5297 18.4C12.5297 18.4 12.5296 18.4 12.5296 18.4C12.5296 18.4 12.5296 18.4 12.5296 18.4C12.5296 18.4 12.5296 18.4 12.5296 18.4C12.5296 18.4 12.5296 18.4 12.5296 18.4C12.5295 18.4 12.5295 18.4 12.5295 18.4C12.5295 18.4 12.5295 18.4 12.5295 18.4C12.5295 18.4 12.5295 18.4 12.5295 18.4C12.5295 18.4 12.5294 18.4 12.5294 18.4C12.5294 18.4 12.5294 18.4 12.5294 18.4C12.5294 18.4 12.5294 18.4 12.5294 18.4C12.5294 18.4 12.5294 18.4 12.5294 18.4C12.5293 18.4 12.5293 18.4 12.5293 18.4C12.5293 18.4 12.5293 18.4 12.5293 18.4C12.5293 18.4 12.5293 18.4 12.5293 18.4C12.5293 18.4 12.5293 18.4 12.5292 18.4C12.5292 18.4 12.5292 18.4 12.5292 18.4C12.5292 18.4 12.5292 18.4 12.5292 18.4C12.5292 18.4 12.5292 18.4 12.5292 18.4C12.5292 18.4 12.5291 18.4 12.5291 18.4C12.5291 18.4 12.5291 18.4 12.5291 18.4C12.5291 18.4 12.5291 18.4 12.5291 18.4C12.5291 18.4 12.5291 18.4 12.529 18.4C12.529 18.4 12.529 18.4 12.529 18.4C12.529 18.4 12.529 18.4 12.529 18.4C12.529 18.4 12.529 18.4 12.529 18.4C12.529 18.4 12.5289 18.4 12.5289 18.4C12.5289 18.4 12.5289 18.4 12.5289 18.4C12.5289 18.4 12.5289 18.4 12.5289 18.4C12.5289 18.4 12.5289 18.4 12.5289 18.4C12.5288 18.4 12.5288 18.4 12.5288 18.4C12.5288 18.4 12.5288 18.4 12.5288 18.4C12.5288 18.4 12.5288 18.4 12.5288 18.4C12.5288 18.4 12.5287 18.4 12.5287 18.4C12.5287 18.4 12.5287 18.4 12.5287 18.4C12.5287 18.4 12.5287 18.4 12.5287 18.4C12.5287 18.4 12.5287 18.4 12.5287 18.4C12.5286 18.4 12.5286 18.4 12.5286 18.4C12.5286 18.4 12.5286 18.4 12.5286 18.4C12.5286 18.4 12.5286 18.4 12.5286 18.4C12.5286 18.4 12.5286 18.4 12.5285 18.4C12.5285 18.4 12.5285 18.4 12.5285 18.4C12.5285 18.4 12.5285 18.4 12.5285 18.4C12.5285 18.4 12.5285 18.4 12.5285 18.4C12.5284 18.4 12.5284 18.4 12.5284 18.4C12.5284 18.4 12.5284 18.4 12.5284 18.4C12.5284 18.4 12.5284 18.4 12.5284 18.4C12.5284 18.4 12.5284 18.4 12.5283 18.4C12.5283 18.4 12.5283 18.4 12.5283 18.4C12.5283 18.4 12.5283 18.4 12.5283 18.4C12.5283 18.4 12.5283 18.4 12.5283 18.4C12.5283 18.4 12.5282 18.4 12.5282 18.4C12.5282 18.4 12.5282 18.4 12.5282 18.4C12.5282 18.4 12.5282 18.4 12.5282 18.4C12.5282 18.4 12.5282 18.4 12.5281 18.4C12.5281 18.4 12.5281 18.4 12.5281 18.4C12.5281 18.4 12.5281 18.4 12.5281 18.4C12.5281 18.4 12.5281 18.4 12.5281 18.4C12.5281 18.4 12.528 18.4 12.528 18.4C12.528 18.4 12.528 18.4 12.528 18.4C12.528 18.4 12.528 18.4 12.528 18.4C12.528 18.4 12.528 18.4 12.528 18.4C12.5279 18.4 12.5279 18.4 12.5279 18.4C12.5279 18.4 12.5279 18.4 12.5279 18.4C12.5279 18.4 12.5279 18.4 12.5279 18.4C12.5279 18.4 12.5278 18.4 12.5278 18.4C12.5278 18.4 12.5278 18.4 12.5278 18.4C12.5278 18.4 12.5278 18.4 12.5278 18.4C12.5278 18.4 12.5278 18.4 12.5278 18.4C12.5277 18.4 12.5277 18.4 12.5277 18.4C12.5277 18.4 12.5277 18.4 12.5277 18.4C12.5277 18.4 12.5277 18.4 12.5277 18.4C12.5277 18.4 12.5277 18.4 12.5276 18.4C12.5276 18.4 12.5276 18.4 12.5276 18.4C12.5276 18.4 12.5276 18.4 12.5276 18.4C12.5276 18.4 12.5276 18.4 12.5276 18.4C12.5275 18.4 12.5275 18.4 12.5275 18.4C12.5275 18.4 12.5275 18.4 12.5275 18.4C12.5275 18.4 12.5275 18.4 12.5275 18.4C12.5275 18.4 12.5275 18.4 12.5274 18.4C12.5274 18.4 12.5274 18.4 12.5274 18.4C12.5274 18.4 12.5274 18.4 12.5274 18.4C12.5274 18.4 12.5274 18.4 12.5274 18.4C12.5274 18.4 12.5273 18.4 12.5273 18.4C12.5273 18.4 12.5273 18.4 12.5273 18.4C12.5273 18.4 12.5273 18.4 12.5273 18.4C12.5273 18.4 12.5273 18.4 12.5272 18.4C12.5272 18.4 12.5272 18.4 12.5272 18.4C12.5272 18.4 12.5272 18.4 12.5272 18.4C12.5272 18.4 12.5272 18.4 12.5272 18.4C12.5272 18.4 12.5271 18.4 12.5271 18.4C12.5271 18.4 12.5271 18.4 12.5271 18.4C12.5271 18.4 12.5271 18.4 12.5271 18.4C12.5271 18.4 12.5271 18.4 12.5271 18.4C12.527 18.4 12.527 18.4 12.527 18.4C12.527 18.4 12.527 18.4 12.527 18.4C12.527 18.4 12.527 18.4 12.527 18.4C12.527 18.4 12.5269 18.4 12.5269 18.4C12.5269 18.4 12.5269 18.4 12.5269 18.4C12.5269 18.4 12.5269 18.4 12.5269 18.4C12.5269 18.4 12.5269 18.4 12.5269 18.4C12.5268 18.4 12.5268 18.4 12.5268 18.4C12.5268 18.4 12.5268 18.4 12.5268 18.4C12.5268 18.4 12.5268 18.4 12.5268 18.4C12.5268 18.4 12.5268 18.4 12.5267 18.4C12.5267 18.4 12.5267 18.4 12.5267 18.4C12.5267 18.4 12.5267 18.4 12.5267 18.4C12.5267 18.4 12.5267 18.4 12.5267 18.4C12.5266 18.4 12.5266 18.4 12.5266 18.4C12.5266 18.4 12.5266 18.4 12.5266 18.4C12.5266 18.4 12.5266 18.4 12.5266 18.4C12.5266 18.4 12.5266 18.4 12.5265 18.4C12.5265 18.4 12.5265 18.4 12.5265 18.4C12.5265 18.4 12.5265 18.4 12.5265 18.4C12.5265 18.4 12.5265 18.4 12.5265 18.4C12.5265 18.4 12.5264 18.4 12.5264 18.4V21.6C12.5264 21.6 12.5265 21.6 12.5265 21.6C12.5265 21.6 12.5265 21.6 12.5265 21.6C12.5265 21.6 12.5265 21.6 12.5265 21.6C12.5265 21.6 12.5265 21.6 12.5265 21.6C12.5266 21.6 12.5266 21.6 12.5266 21.6C12.5266 21.6 12.5266 21.6 12.5266 21.6C12.5266 21.6 12.5266 21.6 12.5266 21.6C12.5266 21.6 12.5266 21.6 12.5267 21.6C12.5267 21.6 12.5267 21.6 12.5267 21.6C12.5267 21.6 12.5267 21.6 12.5267 21.6C12.5267 21.6 12.5267 21.6 12.5267 21.6C12.5268 21.6 12.5268 21.6 12.5268 21.6C12.5268 21.6 12.5268 21.6 12.5268 21.6C12.5268 21.6 12.5268 21.6 12.5268 21.6C12.5268 21.6 12.5268 21.6 12.5269 21.6C12.5269 21.6 12.5269 21.6 12.5269 21.6C12.5269 21.6 12.5269 21.6 12.5269 21.6C12.5269 21.6 12.5269 21.6 12.5269 21.6C12.5269 21.6 12.527 21.6 12.527 21.6C12.527 21.6 12.527 21.6 12.527 21.6C12.527 21.6 12.527 21.6 12.527 21.6C12.527 21.6 12.527 21.6 12.5271 21.6C12.5271 21.6 12.5271 21.6 12.5271 21.6C12.5271 21.6 12.5271 21.6 12.5271 21.6C12.5271 21.6 12.5271 21.6 12.5271 21.6C12.5271 21.6 12.5272 21.6 12.5272 21.6C12.5272 21.6 12.5272 21.6 12.5272 21.6C12.5272 21.6 12.5272 21.6 12.5272 21.6C12.5272 21.6 12.5272 21.6 12.5272 21.6C12.5273 21.6 12.5273 21.6 12.5273 21.6C12.5273 21.6 12.5273 21.6 12.5273 21.6C12.5273 21.6 12.5273 21.6 12.5273 21.6C12.5273 21.6 12.5274 21.6 12.5274 21.6C12.5274 21.6 12.5274 21.6 12.5274 21.6C12.5274 21.6 12.5274 21.6 12.5274 21.6C12.5274 21.6 12.5274 21.6 12.5274 21.6C12.5275 21.6 12.5275 21.6 12.5275 21.6C12.5275 21.6 12.5275 21.6 12.5275 21.6C12.5275 21.6 12.5275 21.6 12.5275 21.6C12.5275 21.6 12.5275 21.6 12.5276 21.6C12.5276 21.6 12.5276 21.6 12.5276 21.6C12.5276 21.6 12.5276 21.6 12.5276 21.6C12.5276 21.6 12.5276 21.6 12.5276 21.6C12.5277 21.6 12.5277 21.6 12.5277 21.6C12.5277 21.6 12.5277 21.6 12.5277 21.6C12.5277 21.6 12.5277 21.6 12.5277 21.6C12.5277 21.6 12.5277 21.6 12.5278 21.6C12.5278 21.6 12.5278 21.6 12.5278 21.6C12.5278 21.6 12.5278 21.6 12.5278 21.6C12.5278 21.6 12.5278 21.6 12.5278 21.6C12.5278 21.6 12.5279 21.6 12.5279 21.6C12.5279 21.6 12.5279 21.6 12.5279 21.6C12.5279 21.6 12.5279 21.6 12.5279 21.6C12.5279 21.6 12.5279 21.6 12.528 21.6C12.528 21.6 12.528 21.6 12.528 21.6C12.528 21.6 12.528 21.6 12.528 21.6C12.528 21.6 12.528 21.6 12.528 21.6C12.528 21.6 12.5281 21.6 12.5281 21.6C12.5281 21.6 12.5281 21.6 12.5281 21.6C12.5281 21.6 12.5281 21.6 12.5281 21.6C12.5281 21.6 12.5281 21.6 12.5281 21.6C12.5282 21.6 12.5282 21.6 12.5282 21.6C12.5282 21.6 12.5282 21.6 12.5282 21.6C12.5282 21.6 12.5282 21.6 12.5282 21.6C12.5282 21.6 12.5283 21.6 12.5283 21.6C12.5283 21.6 12.5283 21.6 12.5283 21.6C12.5283 21.6 12.5283 21.6 12.5283 21.6C12.5283 21.6 12.5283 21.6 12.5283 21.6C12.5284 21.6 12.5284 21.6 12.5284 21.6C12.5284 21.6 12.5284 21.6 12.5284 21.6C12.5284 21.6 12.5284 21.6 12.5284 21.6C12.5284 21.6 12.5284 21.6 12.5285 21.6C12.5285 21.6 12.5285 21.6 12.5285 21.6C12.5285 21.6 12.5285 21.6 12.5285 21.6C12.5285 21.6 12.5285 21.6 12.5285 21.6C12.5286 21.6 12.5286 21.6 12.5286 21.6C12.5286 21.6 12.5286 21.6 12.5286 21.6C12.5286 21.6 12.5286 21.6 12.5286 21.6C12.5286 21.6 12.5286 21.6 12.5287 21.6C12.5287 21.6 12.5287 21.6 12.5287 21.6C12.5287 21.6 12.5287 21.6 12.5287 21.6C12.5287 21.6 12.5287 21.6 12.5287 21.6C12.5287 21.6 12.5288 21.6 12.5288 21.6C12.5288 21.6 12.5288 21.6 12.5288 21.6C12.5288 21.6 12.5288 21.6 12.5288 21.6C12.5288 21.6 12.5288 21.6 12.5289 21.6C12.5289 21.6 12.5289 21.6 12.5289 21.6C12.5289 21.6 12.5289 21.6 12.5289 21.6C12.5289 21.6 12.5289 21.6 12.5289 21.6C12.5289 21.6 12.529 21.6 12.529 21.6C12.529 21.6 12.529 21.6 12.529 21.6C12.529 21.6 12.529 21.6 12.529 21.6C12.529 21.6 12.529 21.6 12.529 21.6C12.5291 21.6 12.5291 21.6 12.5291 21.6C12.5291 21.6 12.5291 21.6 12.5291 21.6C12.5291 21.6 12.5291 21.6 12.5291 21.6C12.5291 21.6 12.5292 21.6 12.5292 21.6C12.5292 21.6 12.5292 21.6 12.5292 21.6C12.5292 21.6 12.5292 21.6 12.5292 21.6C12.5292 21.6 12.5292 21.6 12.5292 21.6C12.5293 21.6 12.5293 21.6 12.5293 21.6C12.5293 21.6 12.5293 21.6 12.5293 21.6C12.5293 21.6 12.5293 21.6 12.5293 21.6C12.5293 21.6 12.5293 21.6 12.5294 21.6C12.5294 21.6 12.5294 21.6 12.5294 21.6C12.5294 21.6 12.5294 21.6 12.5294 21.6C12.5294 21.6 12.5294 21.6 12.5294 21.6C12.5294 21.6 12.5295 21.6 12.5295 21.6C12.5295 21.6 12.5295 21.6 12.5295 21.6C12.5295 21.6 12.5295 21.6 12.5295 21.6C12.5295 21.6 12.5295 21.6 12.5296 21.6C12.5296 21.6 12.5296 21.6 12.5296 21.6C12.5296 21.6 12.5296 21.6 12.5296 21.6C12.5296 21.6 12.5296 21.6 12.5296 21.6C12.5296 21.6 12.5297 21.6 12.5297 21.6C12.5297 21.6 12.5297 21.6 12.5297 21.6C12.5297 21.6 12.5297 21.6 12.5297 21.6C12.5297 21.6 12.5297 21.6 12.5297 21.6C12.5298 21.6 12.5298 21.6 12.5298 21.6C12.5298 21.6 12.5298 21.6 12.5298 21.6C12.5298 21.6 12.5298 21.6 12.5298 21.6C12.5298 21.6 12.5299 21.6 12.5299 21.6C12.5299 21.6 12.5299 21.6 12.5299 21.6C12.5299 21.6 12.5299 21.6 12.5299 21.6C12.5299 21.6 12.5299 21.6 12.5299 21.6C12.53 21.6 12.53 21.6 12.53 21.6C12.53 21.6 12.53 21.6 12.53 21.6C12.53 21.6 12.53 21.6 12.53 21.6C12.53 21.6 12.53 21.6 12.5301 21.6C12.5301 21.6 12.5301 21.6 12.5301 21.6C12.5301 21.6 12.5301 21.6 12.5301 21.6C12.5301 21.6 12.5301 21.6 12.5301 21.6C12.5302 21.6 12.5302 21.6 12.5302 21.6C12.5302 21.6 12.5302 21.6 12.5302 21.6C12.5302 21.6 12.5302 21.6 12.5302 21.6C12.5302 21.6 12.5302 21.6 12.5303 21.6C12.5303 21.6 12.5303 21.6 12.5303 21.6C12.5303 21.6 12.5303 21.6 12.5303 21.6C12.5303 21.6 12.5303 21.6 12.5303 21.6C12.5303 21.6 12.5304 21.6 12.5304 21.6C12.5304 21.6 12.5304 21.6 12.5304 21.6C12.5304 21.6 12.5304 21.6 12.5304 21.6C12.5304 21.6 12.5304 21.6 12.5305 21.6C12.5305 21.6 12.5305 21.6 12.5305 21.6C12.5305 21.6 12.5305 21.6 12.5305 21.6C12.5305 21.6 12.5305 21.6 12.5305 21.6C12.5305 21.6 12.5306 21.6 12.5306 21.6C12.5306 21.6 12.5306 21.6 12.5306 21.6C12.5306 21.6 12.5306 21.6 12.5306 21.6C12.5306 21.6 12.5306 21.6 12.5306 21.6C12.5307 21.6 12.5307 21.6 12.5307 21.6C12.5307 21.6 12.5307 21.6 12.5307 21.6C12.5307 21.6 12.5307 21.6 12.5307 21.6C12.5307 21.6 12.5308 21.6 12.5308 21.6C12.5308 21.6 12.5308 21.6 12.5308 21.6C12.5308 21.6 12.5308 21.6 12.5308 21.6C12.5308 21.6 12.5308 21.6 12.5308 21.6C12.5309 21.6 12.5309 21.6 12.5309 21.6C12.5309 21.6 12.5309 21.6 12.5309 21.6C12.5309 21.6 12.5309 21.6 12.5309 21.6C12.5309 21.6 12.5309 21.6 12.531 21.6C12.531 21.6 12.531 21.6 12.531 21.6C12.531 21.6 12.531 21.6 12.531 21.6C12.531 21.6 12.531 21.6 12.531 21.6C12.5311 21.6 12.5311 21.6 12.5311 21.6C12.5311 21.6 12.5311 21.6 12.5311 21.6C12.5311 21.6 12.5311 21.6 12.5311 21.6C12.5311 21.6 12.5311 21.6 12.5312 21.6C12.5312 21.6 12.5312 21.6 12.5312 21.6C12.5312 21.6 12.5312 21.6 12.5312 21.6C12.5312 21.6 12.5312 21.6 12.5312 21.6C12.5312 21.6 12.5313 21.6 12.5313 21.6C12.5313 21.6 12.5313 21.6 12.5313 21.6C12.5313 21.6 12.5313 21.6 12.5313 21.6C12.5313 21.6 12.5313 21.6 12.5314 21.6C12.5314 21.6 12.5314 21.6 12.5314 21.6C12.5314 21.6 12.5314 21.6 12.5314 21.6C12.5314 21.6 12.5314 21.6 12.5314 21.6C12.5314 21.6 12.5315 21.6 12.5315 21.6C12.5315 21.6 12.5315 21.6 12.5315 21.6C12.5315 21.6 12.5315 21.6 12.5315 21.6C12.5315 21.6 12.5315 21.6 12.5315 21.6C12.5316 21.6 12.5316 21.6 12.5316 21.6C12.5316 21.6 12.5316 21.6 12.5316 21.6C12.5316 21.6 12.5316 21.6 12.5316 21.6C12.5316 21.6 12.5317 21.6 12.5317 21.6C12.5317 21.6 12.5317 21.6 12.5317 21.6C12.5317 21.6 12.5317 21.6 12.5317 21.6C12.5317 21.6 12.5317 21.6 12.5317 21.6C12.5318 21.6 12.5318 21.6 12.5318 21.6C12.5318 21.6 12.5318 21.6 12.5318 21.6C12.5318 21.6 12.5318 21.6 12.5318 21.6C12.5318 21.6 12.5318 21.6 12.5319 21.6C12.5319 21.6 12.5319 21.6 12.5319 21.6C12.5319 21.6 12.5319 21.6 12.5319 21.6C12.5319 21.6 12.5319 21.6 12.5319 21.6C12.532 21.6 12.532 21.6 12.532 21.6C12.532 21.6 12.532 21.6 12.532 21.6C12.532 21.6 12.532 21.6 12.532 21.6C12.532 21.6 12.532 21.6 12.5321 21.6C12.5321 21.6 12.5321 21.6 12.5321 21.6C12.5321 21.6 12.5321 21.6 12.5321 21.6C12.5321 21.6 12.5321 21.6 12.5321 21.6C12.5321 21.6 12.5322 21.6 12.5322 21.6C12.5322 21.6 12.5322 21.6 12.5322 21.6C12.5322 21.6 12.5322 21.6 12.5322 21.6C12.5322 21.6 12.5322 21.6 12.5323 21.6C12.5323 21.6 12.5323 21.6 12.5323 21.6C12.5323 21.6 12.5323 21.6 12.5323 21.6C12.5323 21.6 12.5323 21.6 12.5323 21.6C12.5323 21.6 12.5324 21.6 12.5324 21.6C12.5324 21.6 12.5324 21.6 12.5324 21.6C12.5324 21.6 12.5324 21.6 12.5324 21.6C12.5324 21.6 12.5324 21.6 12.5324 21.6C12.5325 21.6 12.5325 21.6 12.5325 21.6C12.5325 21.6 12.5325 21.6 12.5325 21.6C12.5325 21.6 12.5325 21.6 12.5325 21.6C12.5325 21.6 12.5325 21.6 12.5326 21.6C12.5326 21.6 12.5326 21.6 12.5326 21.6C12.5326 21.6 12.5326 21.6 12.5326 21.6C12.5326 21.6 12.5326 21.6 12.5326 21.6C12.5327 21.6 12.5327 21.6 12.5327 21.6C12.5327 21.6 12.5327 21.6 12.5327 21.6C12.5327 21.6 12.5327 21.6 12.5327 21.6C12.5327 21.6 12.5327 21.6 12.5328 21.6C12.5328 21.6 12.5328 21.6 12.5328 21.6C12.5328 21.6 12.5328 21.6 12.5328 21.6C12.5328 21.6 12.5328 21.6 12.5328 21.6C12.5329 21.6 12.5329 21.6 12.5329 21.6C12.5329 21.6 12.5329 21.6 12.5329 21.6C12.5329 21.6 12.5329 21.6 12.5329 21.6C12.5329 21.6 12.5329 21.6 12.533 21.6C12.533 21.6 12.533 21.6 12.533 21.6C12.533 21.6 12.533 21.6 12.533 21.6C12.533 21.6 12.533 21.6 12.533 21.6C12.533 21.6 12.5331 21.6 12.5331 21.6C12.5331 21.6 12.5331 21.6 12.5331 21.6C12.5331 21.6 12.5331 21.6 12.5331 21.6C12.5331 21.6 12.5331 21.6 12.5331 21.6C12.5332 21.6 12.5332 21.6 12.5332 21.6C12.5332 21.6 12.5332 21.6 12.5332 21.6C12.5332 21.6 12.5332 21.6 12.5332 21.6C12.5332 21.6 12.5333 21.6 12.5333 21.6C12.5333 21.6 12.5333 21.6 12.5333 21.6C12.5333 21.6 12.5333 21.6 12.5333 21.6C12.5333 21.6 12.5333 21.6 12.5333 21.6C12.5334 21.6 12.5334 21.6 12.5334 21.6C12.5334 21.6 12.5334 21.6 12.5334 21.6C12.5334 21.6 12.5334 21.6 12.5334 21.6C12.5334 21.6 12.5334 21.6 12.5335 21.6C12.5335 21.6 12.5335 21.6 12.5335 21.6C12.5335 21.6 12.5335 21.6 12.5335 21.6C12.5335 21.6 12.5335 21.6 12.5335 21.6C12.5336 21.6 12.5336 21.6 12.5336 21.6C12.5336 21.6 12.5336 21.6 12.5336 21.6C12.5336 21.6 12.5336 21.6 12.5336 21.6C12.5336 21.6 12.5336 21.6 12.5337 21.6C12.5337 21.6 12.5337 21.6 12.5337 21.6C12.5337 21.6 12.5337 21.6 12.5337 21.6C12.5337 21.6 12.5337 21.6 12.5337 21.6C12.5337 21.6 12.5338 21.6 12.5338 21.6C12.5338 21.6 12.5338 21.6 12.5338 21.6C12.5338 21.6 12.5338 21.6 12.5338 21.6C12.5338 21.6 12.5338 21.6 12.5339 21.6C12.5339 21.6 12.5339 21.6 12.5339 21.6C12.5339 21.6 12.5339 21.6 12.5339 21.6C12.5339 21.6 12.5339 21.6 12.5339 21.6C12.5339 21.6 12.534 21.6 12.534 21.6C12.534 21.6 12.534 21.6 12.534 21.6C12.534 21.6 12.534 21.6 12.534 21.6C12.534 21.6 12.534 21.6 12.534 21.6C12.5341 21.6 12.5341 21.6 12.5341 21.6C12.5341 21.6 12.5341 21.6 12.5341 21.6C12.5341 21.6 12.5341 21.6 12.5341 21.6C12.5341 21.6 12.5342 21.6 12.5342 21.6C12.5342 21.6 12.5342 21.6 12.5342 21.6C12.5342 21.6 12.5342 21.6 12.5342 21.6C12.5342 21.6 12.5342 21.6 12.5342 21.6C12.5343 21.6 12.5343 21.6 12.5343 21.6C12.5343 21.6 12.5343 21.6 12.5343 21.6C12.5343 21.6 12.5343 21.6 12.5343 21.6C12.5343 21.6 12.5343 21.6 12.5344 21.6C12.5344 21.6 12.5344 21.6 12.5344 21.6C12.5344 21.6 12.5344 21.6 12.5344 21.6C12.5344 21.6 12.5344 21.6 12.5344 21.6C12.5345 21.6 12.5345 21.6 12.5345 21.6C12.5345 21.6 12.5345 21.6 12.5345 21.6C12.5345 21.6 12.5345 21.6 12.5345 21.6C12.5345 21.6 12.5345 21.6 12.5346 21.6C12.5346 21.6 12.5346 21.6 12.5346 21.6C12.5346 21.6 12.5346 21.6 12.5346 21.6C12.5346 21.6 12.5346 21.6 12.5346 21.6C12.5346 21.6 12.5347 21.6 12.5347 21.6C12.5347 21.6 12.5347 21.6 12.5347 21.6C12.5347 21.6 12.5347 21.6 12.5347 21.6C12.5347 21.6 12.5347 21.6 12.5348 21.6C12.5348 21.6 12.5348 21.6 12.5348 21.6C12.5348 21.6 12.5348 21.6 12.5348 21.6C12.5348 21.6 12.5348 21.6 12.5348 21.6C12.5348 21.6 12.5349 21.6 12.5349 21.6C12.5349 21.6 12.5349 21.6 12.5349 21.6C12.5349 21.6 12.5349 21.6 12.5349 21.6C12.5349 21.6 12.5349 21.6 12.5349 21.6C12.535 21.6 12.535 21.6 12.535 21.6C12.535 21.6 12.535 21.6 12.535 21.6C12.535 21.6 12.535 21.6 12.535 21.6C12.535 21.6 12.5351 21.6 12.5351 21.6C12.5351 21.6 12.5351 21.6 12.5351 21.6C12.5351 21.6 12.5351 21.6 12.5351 21.6C12.5351 21.6 12.5351 21.6 12.5351 21.6C12.5352 21.6 12.5352 21.6 12.5352 21.6C12.5352 21.6 12.5352 21.6 12.5352 21.6C12.5352 21.6 12.5352 21.6 12.5352 21.6C12.5352 21.6 12.5352 21.6 12.5353 21.6C12.5353 21.6 12.5353 21.6 12.5353 21.6C12.5353 21.6 12.5353 21.6 12.5353 21.6C12.5353 21.6 12.5353 21.6 12.5353 21.6C12.5354 21.6 12.5354 21.6 12.5354 21.6C12.5354 21.6 12.5354 21.6 12.5354 21.6C12.5354 21.6 12.5354 21.6 12.5354 21.6C12.5354 21.6 12.5354 21.6 12.5355 21.6C12.5355 21.6 12.5355 21.6 12.5355 21.6C12.5355 21.6 12.5355 21.6 12.5355 21.6C12.5355 21.6 12.5355 21.6 12.5355 21.6C12.5355 21.6 12.5356 21.6 12.5356 21.6C12.5356 21.6 12.5356 21.6 12.5356 21.6C12.5356 21.6 12.5356 21.6 12.5356 21.6C12.5356 21.6 12.5356 21.6 12.5357 21.6C12.5357 21.6 12.5357 21.6 12.5357 21.6C12.5357 21.6 12.5357 21.6 12.5357 21.6C12.5357 21.6 12.5357 21.6 12.5357 21.6C12.5357 21.6 12.5358 21.6 12.5358 21.6C12.5358 21.6 12.5358 21.6 12.5358 21.6C12.5358 21.6 12.5358 21.6 12.5358 21.6C12.5358 21.6 12.5358 21.6 12.5358 21.6C12.5359 21.6 12.5359 21.6 12.5359 21.6C12.5359 21.6 12.5359 21.6 12.5359 21.6C12.5359 21.6 12.5359 21.6 12.5359 21.6C12.5359 21.6 12.536 21.6 12.536 21.6C12.536 21.6 12.536 21.6 12.536 21.6C12.536 21.6 12.536 21.6 12.536 21.6C12.536 21.6 12.536 21.6 12.536 21.6C12.5361 21.6 12.5361 21.6 12.5361 21.6C12.5361 21.6 12.5361 21.6 12.5361 21.6C12.5361 21.6 12.5361 21.6 12.5361 21.6C12.5361 21.6 12.5361 21.6 12.5362 21.6C12.5362 21.6 12.5362 21.6 12.5362 21.6C12.5362 21.6 12.5362 21.6 12.5362 21.6C12.5362 21.6 12.5362 21.6 12.5362 21.6C12.5363 21.6 12.5363 21.6 12.5363 21.6C12.5363 21.6 12.5363 21.6 12.5363 21.6C12.5363 21.6 12.5363 21.6 12.5363 21.6C12.5363 21.6 12.5363 21.6 12.5364 21.6C12.5364 21.6 12.5364 21.6 12.5364 21.6C12.5364 21.6 12.5364 21.6 12.5364 21.6C12.5364 21.6 12.5364 21.6 12.5364 21.6C12.5364 21.6 12.5365 21.6 12.5365 21.6C12.5365 21.6 12.5365 21.6 12.5365 21.6C12.5365 21.6 12.5365 21.6 12.5365 21.6C12.5365 21.6 12.5365 21.6 12.5365 21.6C12.5366 21.6 12.5366 21.6 12.5366 21.6C12.5366 21.6 12.5366 21.6 12.5366 21.6C12.5366 21.6 12.5366 21.6 12.5366 21.6C12.5366 21.6 12.5367 21.6 12.5367 21.6C12.5367 21.6 12.5367 21.6 12.5367 21.6C12.5367 21.6 12.5367 21.6 12.5367 21.6C12.5367 21.6 12.5367 21.6 12.5367 21.6C12.5368 21.6 12.5368 21.6 12.5368 21.6C12.5368 21.6 12.5368 21.6 12.5368 21.6C12.5368 21.6 12.5368 21.6 12.5368 21.6C12.5368 21.6 12.5368 21.6 12.5369 21.6C12.5369 21.6 12.5369 21.6 12.5369 21.6C12.5369 21.6 12.5369 21.6 12.5369 21.6C12.5369 21.6 12.5369 21.6 12.5369 21.6C12.537 21.6 12.537 21.6 12.537 21.6C12.537 21.6 12.537 21.6 12.537 21.6C12.537 21.6 12.537 21.6 12.537 21.6C12.537 21.6 12.537 21.6 12.5371 21.6C12.5371 21.6 12.5371 21.6 12.5371 21.6C12.5371 21.6 12.5371 21.6 12.5371 21.6C12.5371 21.6 12.5371 21.6 12.5371 21.6C12.5371 21.6 12.5372 21.6 12.5372 21.6C12.5372 21.6 12.5372 21.6 12.5372 21.6C12.5372 21.6 12.5372 21.6 12.5372 21.6C12.5372 21.6 12.5372 21.6 12.5373 21.6C12.5373 21.6 12.5373 21.6 12.5373 21.6C12.5373 21.6 12.5373 21.6 12.5373 21.6C12.5373 21.6 12.5373 21.6 12.5373 21.6C12.5373 21.6 12.5374 21.6 12.5374 21.6C12.5374 21.6 12.5374 21.6 12.5374 21.6C12.5374 21.6 12.5374 21.6 12.5374 21.6C12.5374 21.6 12.5374 21.6 12.5374 21.6C12.5375 21.6 12.5375 21.6 12.5375 21.6C12.5375 21.6 12.5375 21.6 12.5375 21.6C12.5375 21.6 12.5375 21.6 12.5375 21.6C12.5375 21.6 12.5376 21.6 12.5376 21.6C12.5376 21.6 12.5376 21.6 12.5376 21.6C12.5376 21.6 12.5376 21.6 12.5376 21.6C12.5376 21.6 12.5376 21.6 12.5376 21.6C12.5377 21.6 12.5377 21.6 12.5377 21.6C12.5377 21.6 12.5377 21.6 12.5377 21.6C12.5377 21.6 12.5377 21.6 12.5377 21.6C12.5377 21.6 12.5377 21.6 12.5378 21.6C12.5378 21.6 12.5378 21.6 12.5378 21.6C12.5378 21.6 12.5378 21.6 12.5378 21.6C12.5378 21.6 12.5378 21.6 12.5378 21.6C12.5379 21.6 12.5379 21.6 12.5379 21.6C12.5379 21.6 12.5379 21.6 12.5379 21.6C12.5379 21.6 12.5379 21.6 12.5379 21.6C12.5379 21.6 12.5379 21.6 12.538 21.6C12.538 21.6 12.538 21.6 12.538 21.6C12.538 21.6 12.538 21.6 12.538 21.6C12.538 21.6 12.538 21.6 12.538 21.6C12.538 21.6 12.5381 21.6 12.5381 21.6C12.5381 21.6 12.5381 21.6 12.5381 21.6C12.5381 21.6 12.5381 21.6 12.5381 21.6C12.5381 21.6 12.5381 21.6 12.5382 21.6C12.5382 21.6 12.5382 21.6 12.5382 21.6C12.5382 21.6 12.5382 21.6 12.5382 21.6C12.5382 21.6 12.5382 21.6 12.5382 21.6C12.5382 21.6 12.5383 21.6 12.5383 21.6C12.5383 21.6 12.5383 21.6 12.5383 21.6C12.5383 21.6 12.5383 21.6 12.5383 21.6C12.5383 21.6 12.5383 21.6 12.5383 21.6C12.5384 21.6 12.5384 21.6 12.5384 21.6C12.5384 21.6 12.5384 21.6 12.5384 21.6C12.5384 21.6 12.5384 21.6 12.5384 21.6C12.5384 21.6 12.5385 21.6 12.5385 21.6C12.5385 21.6 12.5385 21.6 12.5385 21.6C12.5385 21.6 12.5385 21.6 12.5385 21.6C12.5385 21.6 12.5385 21.6 12.5385 21.6C12.5386 21.6 12.5386 21.6 12.5386 21.6C12.5386 21.6 12.5386 21.6 12.5386 21.6C12.5386 21.6 12.5386 21.6 12.5386 21.6C12.5386 21.6 12.5386 21.6 12.5387 21.6C12.5387 21.6 12.5387 21.6 12.5387 21.6C12.5387 21.6 12.5387 21.6 12.5387 21.6C12.5387 21.6 12.5387 21.6 12.5387 21.6C12.5388 21.6 12.5388 21.6 12.5388 21.6C12.5388 21.6 12.5388 21.6 12.5388 21.6C12.5388 21.6 12.5388 21.6 12.5388 21.6C12.5388 21.6 12.5388 21.6 12.5389 21.6C12.5389 21.6 12.5389 21.6 12.5389 21.6C12.5389 21.6 12.5389 21.6 12.5389 21.6C12.5389 21.6 12.5389 21.6 12.5389 21.6C12.5389 21.6 12.539 21.6 12.539 21.6C12.539 21.6 12.539 21.6 12.539 21.6C12.539 21.6 12.539 21.6 12.539 21.6C12.539 21.6 12.539 21.6 12.5391 21.6C12.5391 21.6 12.5391 21.6 12.5391 21.6C12.5391 21.6 12.5391 21.6 12.5391 21.6C12.5391 21.6 12.5391 21.6 12.5391 21.6C12.5391 21.6 12.5392 21.6 12.5392 21.6C12.5392 21.6 12.5392 21.6 12.5392 21.6C12.5392 21.6 12.5392 21.6 12.5392 21.6C12.5392 21.6 12.5392 21.6 12.5392 21.6C12.5393 21.6 12.5393 21.6 12.5393 21.6C12.5393 21.6 12.5393 21.6 12.5393 21.6C12.5393 21.6 12.5393 21.6 12.5393 21.6C12.5393 21.6 12.5394 21.6 12.5394 21.6C12.5394 21.6 12.5394 21.6 12.5394 21.6C12.5394 21.6 12.5394 21.6 12.5394 21.6C12.5394 21.6 12.5394 21.6 12.5394 21.6C12.5395 21.6 12.5395 21.6 12.5395 21.6C12.5395 21.6 12.5395 21.6 12.5395 21.6C12.5395 21.6 12.5395 21.6 12.5395 21.6C12.5395 21.6 12.5395 21.6 12.5396 21.6C12.5396 21.6 12.5396 21.6 12.5396 21.6C12.5396 21.6 12.5396 21.6 12.5396 21.6C12.5396 21.6 12.5396 21.6 12.5396 21.6C12.5396 21.6 12.5397 21.6 12.5397 21.6C12.5397 21.6 12.5397 21.6 12.5397 21.6C12.5397 21.6 12.5397 21.6 12.5397 21.6C12.5397 21.6 12.5397 21.6 12.5398 21.6C12.5398 21.6 12.5398 21.6 12.5398 21.6C12.5398 21.6 12.5398 21.6 12.5398 21.6C12.5398 21.6 12.5398 21.6 12.5398 21.6C12.5398 21.6 12.5399 21.6 12.5399 21.6C12.5399 21.6 12.5399 21.6 12.5399 21.6C12.5399 21.6 12.5399 21.6 12.5399 21.6C12.5399 21.6 12.5399 21.6 12.54 21.6C12.54 21.6 12.54 21.6 12.54 21.6C12.54 21.6 12.54 21.6 12.54 21.6C12.54 21.6 12.54 21.6 12.54 21.6C12.54 21.6 12.5401 21.6 12.5401 21.6C12.5401 21.6 12.5401 21.6 12.5401 21.6C12.5401 21.6 12.5401 21.6 12.5401 21.6C12.5401 21.6 12.5401 21.6 12.5401 21.6C12.5402 21.6 12.5402 21.6 12.5402 21.6C12.5402 21.6 12.5402 21.6 12.5402 21.6C12.5402 21.6 12.5402 21.6 12.5402 21.6C12.5402 21.6 12.5402 21.6 12.5403 21.6C12.5403 21.6 12.5403 21.6 12.5403 21.6C12.5403 21.6 12.5403 21.6 12.5403 21.6C12.5403 21.6 12.5403 21.6 12.5403 21.6C12.5404 21.6 12.5404 21.6 12.5404 21.6C12.5404 21.6 12.5404 21.6 12.5404 21.6C12.5404 21.6 12.5404 21.6 12.5404 21.6C12.5404 21.6 12.5404 21.6 12.5405 21.6C12.5405 21.6 12.5405 21.6 12.5405 21.6C12.5405 21.6 12.5405 21.6 12.5405 21.6C12.5405 21.6 12.5405 21.6 12.5405 21.6C12.5405 21.6 12.5406 21.6 12.5406 21.6C12.5406 21.6 12.5406 21.6 12.5406 21.6C12.5406 21.6 12.5406 21.6 12.5406 21.6C12.5406 21.6 12.5406 21.6 12.5407 21.6C12.5407 21.6 12.5407 21.6 12.5407 21.6C12.5407 21.6 12.5407 21.6 12.5407 21.6C12.5407 21.6 12.5407 21.6 12.5407 21.6C12.5407 21.6 12.5408 21.6 12.5408 21.6C12.5408 21.6 12.5408 21.6 12.5408 21.6C12.5408 21.6 12.5408 21.6 12.5408 21.6V18.4ZM12.5264 18.4C13.0744 18.4 13.627 18.8329 13.6462 19.5049L10.4475 19.5965C10.4812 20.7708 11.4605 21.6 12.5264 21.6V18.4ZM13.6419 19.424L13.5963 18.8503L10.4064 19.1036L10.4519 19.6773L13.6419 19.424ZM13.6013 18.977C13.6013 17.462 12.3539 16.3194 10.9152 16.3194V19.5194C10.6753 19.5194 10.4013 19.3168 10.4013 18.977H13.6013ZM10.9152 16.3194H4.87533V19.5194H10.9152V16.3194ZM4.87533 16.3194C3.45287 16.3194 2.18917 17.444 2.18917 18.9631H5.38917C5.38917 19.3302 5.09893 19.5194 4.87533 19.5194V16.3194ZM2.19395 18.8394L2.1484 19.427L5.33882 19.6744L5.38438 19.0868L2.19395 18.8394ZM2.1439 19.5201C2.15702 18.8328 2.7221 18.4 3.26646 18.4V21.6C4.32874 21.6 5.3206 20.7708 5.34332 19.5812L2.1439 19.5201Z" fill="#34BE5B" mask="url(#path-3-inside-2)"/>
<mask id="path-5-inside-3" fill="white">
<path d="M7.8964 20C7.64092 20 7.43188 19.815 7.43188 19.589V14.411C7.43188 14.185 7.64092 14 7.8964 14C8.15189 14 8.36092 14.185 8.36092 14.411V19.589C8.36092 19.815 8.15421 20 7.8964 20Z"/>
</mask>
<path d="M7.8964 18.4C8.33503 18.4 9.03188 18.7531 9.03188 19.589H5.83188C5.83188 20.877 6.94681 21.6 7.8964 21.6V18.4ZM9.03188 19.589V14.411H5.83188V19.589H9.03188ZM9.03188 14.411C9.03188 15.2469 8.33503 15.6 7.8964 15.6V12.4C6.94681 12.4 5.83188 13.123 5.83188 14.411H9.03188ZM7.8964 15.6C7.45778 15.6 6.76092 15.2469 6.76092 14.411H9.96092C9.96092 13.123 8.846 12.4 7.8964 12.4V15.6ZM6.76092 14.411V19.589H9.96092V14.411H6.76092ZM6.76092 19.589C6.76092 18.7579 7.45463 18.4 7.8964 18.4V21.6C8.85379 21.6 9.96092 20.8722 9.96092 19.589H6.76092Z" fill="#34BE5B" mask="url(#path-5-inside-3)"/>
<mask id="path-7-inside-4" fill="white">
<path d="M13.872 14.4448H2.12153C1.44992 14.4448 0.902588 13.8556 0.902588 13.1327V10.8843C0.902588 10.1614 1.44992 9.57227 2.12153 9.57227H13.872C14.5436 9.57227 15.0909 10.1614 15.0909 10.8843V13.1327C15.0909 13.8556 14.5436 14.4448 13.872 14.4448ZM2.12153 10.7107C2.03427 10.7107 1.96024 10.7904 1.96024 10.8843V13.1327C1.96024 13.2266 2.03427 13.3063 2.12153 13.3063H13.872C13.9592 13.3063 14.0333 13.2266 14.0333 13.1327V10.8843C14.0333 10.7904 13.9592 10.7107 13.872 10.7107H2.12153Z"/>
</mask>
<path d="M13.872 12.8448H2.12153V16.0448H13.872V12.8448ZM2.12153 12.8448C2.26951 12.8448 2.37808 12.9123 2.4324 12.9708C2.48509 13.0275 2.50259 13.088 2.50259 13.1327H-0.697412C-0.697412 14.6263 0.457395 16.0448 2.12153 16.0448V12.8448ZM2.50259 13.1327V10.8843H-0.697412V13.1327H2.50259ZM2.50259 10.8843C2.50259 10.9291 2.48509 10.9895 2.4324 11.0462C2.37808 11.1047 2.26951 11.1723 2.12153 11.1723V7.97227C0.457397 7.97227 -0.697412 9.3907 -0.697412 10.8843H2.50259ZM2.12153 11.1723H13.872V7.97227H2.12153V11.1723ZM13.872 11.1723C13.724 11.1723 13.6154 11.1047 13.5611 11.0462C13.5084 10.9895 13.4909 10.9291 13.4909 10.8843H16.6909C16.6909 9.3907 15.5361 7.97227 13.872 7.97227V11.1723ZM13.4909 10.8843V13.1327H16.6909V10.8843H13.4909ZM13.4909 13.1327C13.4909 13.088 13.5084 13.0275 13.5611 12.9708C13.6154 12.9123 13.724 12.8448 13.872 12.8448V16.0448C15.5361 16.0448 16.6909 14.6263 16.6909 13.1327H13.4909ZM2.12153 9.1107C1.04176 9.1107 0.360235 10.0197 0.360235 10.8843H3.56024C3.56024 11.5611 3.02678 12.3107 2.12153 12.3107V9.1107ZM0.360235 10.8843V13.1327H3.56024V10.8843H0.360235ZM0.360235 13.1327C0.360235 13.9973 1.04175 14.9063 2.12153 14.9063V11.7063C3.0268 11.7063 3.56024 12.4559 3.56024 13.1327H0.360235ZM2.12153 14.9063H13.872V11.7063H2.12153V14.9063ZM13.872 14.9063C14.9518 14.9063 15.6333 13.9973 15.6333 13.1327H12.4333C12.4333 12.4559 12.9667 11.7063 13.872 11.7063V14.9063ZM15.6333 13.1327V10.8843H12.4333V13.1327H15.6333ZM15.6333 10.8843C15.6333 10.0197 14.9518 9.1107 13.872 9.1107V12.3107C12.9667 12.3107 12.4333 11.5611 12.4333 10.8843H15.6333ZM13.872 9.1107H2.12153V12.3107H13.872V9.1107Z" fill="#34BE5B" mask="url(#path-7-inside-4)"/>
<mask id="path-9-inside-5" fill="white">
<path d="M1.43246 12.5663C1.1892 12.5663 0.969737 12.3841 0.916855 12.1166L0.0945341 8.00116C-0.0852659 7.1701 -0.00858677 6.51265 0.324572 6.05728C0.707969 5.53645 1.26323 5.52222 1.32669 5.52222H3.00042C3.29127 5.52222 3.52924 5.77836 3.52924 6.09143C3.52924 6.4045 3.29127 6.66065 3.00042 6.66065H1.32669C1.32934 6.66065 1.21828 6.67203 1.14954 6.77449C1.09666 6.85134 0.985602 7.10464 1.12838 7.75355L1.95335 11.8775C2.01416 12.1849 1.83436 12.4866 1.5488 12.5549C1.50649 12.5606 1.46948 12.5663 1.43246 12.5663Z"/>
</mask>
<path d="M0.916855 12.1166L2.48649 11.8063L2.48584 11.8031L0.916855 12.1166ZM0.0945341 8.00116L1.66352 7.68765C1.66186 7.67936 1.66014 7.67108 1.65835 7.66282L0.0945341 8.00116ZM0.324572 6.05728L-0.963965 5.10876L-0.966732 5.11254L0.324572 6.05728ZM1.32669 5.06065C0.443038 5.06065 -0.273307 5.77699 -0.273307 6.66065C-0.273307 7.54431 0.443038 8.26065 1.32669 8.26065V5.06065ZM1.14954 6.77449L2.46759 7.68155C2.47115 7.67637 2.47467 7.67118 2.47817 7.66597L1.14954 6.77449ZM1.12838 7.75355L2.6973 7.4397C2.6953 7.42968 2.6932 7.41969 2.691 7.40971L1.12838 7.75355ZM1.95335 11.8775L3.52293 11.567L3.52227 11.5637L1.95335 11.8775ZM1.5488 12.5549L1.76215 14.1406C1.81557 14.1334 1.86859 14.1235 1.92101 14.111L1.5488 12.5549ZM1.43246 10.9663C2.01368 10.9663 2.40325 11.3852 2.48648 11.8063L-0.652775 12.4269C-0.463775 13.383 0.364714 14.1663 1.43246 14.1663V10.9663ZM2.48584 11.8031L1.66352 7.68765L-1.47445 8.31466L-0.652131 12.4301L2.48584 11.8031ZM1.65835 7.66282C1.52522 7.04746 1.66654 6.93278 1.61588 7.00202L-0.966732 5.11254C-1.68371 6.09253 -1.69575 7.29274 -1.46928 8.33949L1.65835 7.66282ZM1.6131 7.0058C1.59964 7.02409 1.57772 7.04645 1.54906 7.06644C1.52228 7.08511 1.49725 7.09647 1.4778 7.10333C1.44729 7.1141 1.40808 7.12222 1.32669 7.12222V3.92222C1.1015 3.92222 -0.119968 3.96223 -0.96396 5.10876L1.6131 7.0058ZM1.32669 7.12222H3.00042V3.92222H1.32669V7.12222ZM3.00042 7.12222C2.29875 7.12222 1.92924 6.54907 1.92924 6.09143H5.12924C5.12924 5.00766 4.2838 3.92222 3.00042 3.92222V7.12222ZM1.92924 6.09143C1.92924 5.6338 2.29875 5.06065 3.00042 5.06065V8.26065C4.2838 8.26065 5.12924 7.17521 5.12924 6.09143H1.92924ZM3.00042 5.06065H1.32669V8.26065H3.00042V5.06065ZM1.32669 8.26065C1.31179 8.26065 1.28215 8.26047 1.24478 8.25855C1.22558 8.25757 1.12525 8.25303 1.00038 8.22702C0.923653 8.20905 0.713214 8.13835 0.583448 8.07752C0.332378 7.91415 -0.171977 7.22088 -0.273254 6.66507C-0.196467 6.17092 0.185333 5.53941 0.367722 5.37992C0.466638 5.3115 0.631368 5.21966 0.69359 5.19126C0.798706 5.14597 0.885459 5.12258 0.904733 5.11731C0.938592 5.10806 0.965755 5.10185 0.979768 5.09873C1.0083 5.0924 1.03074 5.08826 1.03834 5.08687C1.06248 5.08245 1.08764 5.0786 1.07578 5.08047C1.07337 5.08085 1.06152 5.08272 1.04643 5.08536C1.01626 5.09065 0.978948 5.09799 0.936268 5.10824C0.852659 5.12832 0.745972 5.16011 0.627267 5.21169C0.391234 5.31425 0.0689449 5.51334 -0.179097 5.88302L2.47817 7.66597C2.29888 7.93319 2.06649 8.07536 1.90251 8.14661C1.81983 8.18253 1.74471 8.20508 1.68332 8.21982C1.65176 8.2274 1.62322 8.23305 1.59889 8.23731C1.59295 8.23835 1.58769 8.23924 1.58327 8.23996C1.57904 8.24066 1.57559 8.2412 1.57601 8.24113C1.57604 8.24113 1.57672 8.24102 1.57752 8.24089C1.57831 8.24077 1.57999 8.2405 1.5821 8.24016C1.58323 8.23997 1.59733 8.23772 1.61488 8.2345C1.62256 8.2331 1.64505 8.22895 1.67362 8.22261C1.68765 8.21949 1.71483 8.21327 1.74871 8.20401C1.76799 8.19874 1.85476 8.17535 1.95988 8.13006C2.02211 8.10165 2.18684 8.00982 2.28575 7.94139C2.46815 7.7819 2.84995 7.15039 2.92673 6.65624C2.82546 6.10043 2.3211 5.40716 2.07003 5.24378C1.94026 5.18296 1.72982 5.11226 1.65309 5.09429C1.52821 5.06827 1.42787 5.06374 1.40866 5.06275C1.37128 5.06083 1.34162 5.06065 1.32669 5.06065V8.26065ZM-0.168513 5.86744C-0.574896 6.45796 -0.624948 7.23064 -0.434235 8.09738L2.691 7.40971C2.64634 7.20673 2.66292 7.15993 2.65646 7.22016C2.64917 7.28814 2.61425 7.46843 2.46759 7.68155L-0.168513 5.86744ZM-0.440532 8.06739L0.384433 12.1914L3.52227 11.5637L2.6973 7.4397L-0.440532 8.06739ZM0.383775 12.1881C0.296672 11.7478 0.535403 11.1522 1.17659 10.9988L1.92101 14.111C3.13333 13.821 3.73166 12.622 3.52292 11.567L0.383775 12.1881ZM1.33545 10.9692C1.32834 10.9701 1.32139 10.9711 1.31687 10.9717C1.3117 10.9724 1.30876 10.9728 1.30637 10.9731C1.30135 10.9738 1.30457 10.9733 1.3116 10.9725C1.32521 10.971 1.37042 10.9663 1.43246 10.9663V14.1663C1.53152 14.1663 1.61374 14.1587 1.66569 14.1529C1.70899 14.1481 1.76063 14.1408 1.76215 14.1406L1.33545 10.9692Z" fill="#34BE5B" mask="url(#path-9-inside-5)"/>
<path d="M14.8311 12.0393L14.8315 12.0369L14.8311 12.0393Z" stroke="#34BE5B" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
<path d="M8.8 15.6C5.04 15.6 2 12.56 2 8.8C2 5.04 5.04 2 8.8 2C12.56 2 15.6 5.04 15.6 8.8C15.6 12.56 12.56 15.6 8.8 15.6ZM8.8 3.6C5.92 3.6 3.6 5.92 3.6 8.8C3.6 11.68 5.92 14 8.8 14C11.68 14 14 11.68 14 8.8C14 5.92 11.68 3.6 8.8 3.6Z" fill="currentColor"/>
<path d="M17.1999 18.0004C16.9599 18.0004 16.7999 17.9204 16.6399 17.7604L12.6399 13.7604C12.3199 13.4404 12.3199 12.9604 12.6399 12.6404C12.9599 12.3204 13.4399 12.3204 13.7599 12.6404L17.7599 16.6404C18.0799 16.9604 18.0799 17.4404 17.7599 17.7604C17.5999 17.9204 17.4399 18.0004 17.1999 18.0004Z" fill="currentColor"/>
</svg>
<svg width="32" height="32" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
<path d="M31 12.7603C31 12.4872 31 21.6064 31 21.5V9.552C31 8.69621 30.2821 8 29.3997 8H8.77233C7.88985 8 7.17199 8.69621 7.17199 9.55193V13.9647H1.63974C1.28639 13.9647 1 14.2426 1 14.5854C1 14.9282 1.28639 15.2061 1.63974 15.2061H7.17199V16.2479H3.34671C2.99336 16.2479 2.70697 16.5257 2.70697 16.8686C2.70697 17.2113 2.99336 17.4892 3.34671 17.4892H7.17199V18.531H4.93269C4.57934 18.531 4.29295 18.8089 4.29295 19.1517C4.29295 19.4946 4.57934 19.7724 4.93269 19.7724H7.17199V21.5C7.17199 21.6063 7.17199 21.8966 7.17199 22V22.5C7.17199 21.9888 7.17199 22.1148 7.17199 22.5C7.17199 23.5 7.5 23.9957 8.45147 23.9957H9.5H28.5L29.5 24C30.5 24 31 23.5 31 22.5C31 22.3394 31 12.9174 31 12.7603ZM29.7205 22.0649L21.9576 16.6963L29.7205 9.98814V22.0649ZM20.5209 16.2756C20.5101 16.2845 20.4992 16.2936 20.4889 16.3033L19.0837 17.5176L17.5602 16.2152C17.555 16.2106 17.5496 16.2061 17.5443 16.2017L9.40226 9.24138H28.6609L20.5209 16.2756ZM18.663 18.8125C18.7839 18.9158 18.9349 18.9674 19.0859 18.9674C19.2381 18.9674 19.3902 18.915 19.5114 18.8103L20.9777 17.5432L28.5129 22.7543H9.61544L17.0869 17.465L18.663 18.8125ZM11.1193 18.531H8.45147V17.4892H11.1193C11.4726 17.4892 11.759 17.2114 11.759 16.8686C11.759 16.5257 11.4726 16.2479 11.1193 16.2479H8.45147V15.2061H11.1193C11.4726 15.2061 11.759 14.9282 11.759 14.5854C11.759 14.2426 11.4726 13.9647 11.1193 13.9647H8.45147V10.0831L16.1035 16.6245L8.45147 22.0416V19.7724H11.1193C11.4726 19.7724 11.759 19.4946 11.759 19.1517C11.759 18.8089 11.4726 18.531 11.1193 18.531Z" fill="currentColor"/>
</svg>
<svg width="10" height="10" viewBox="0 0 10 10" xmlns="http://www.w3.org/2000/svg">
<path d="M4 10L5 10L5 4L4 4L4 10Z" fill="currentColor"/>
<path d="M8 4L4.5 -3.0598e-07L1 4L8 4Z" fill="currentColor"/>
</svg>
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M5 10C5 9.448 4.552 9 4 9H1C0.448 9 0 9.448 0 10C0 10.552 0.448 11 1 11H4C4.552 11 5 10.552 5 10ZM19 9H16C15.448 9 15 9.448 15 10C15 10.552 15.448 11 16 11H19C19.552 11 20 10.552 20 10C20 9.448 19.552 9 19 9ZM10 15C9.448 15 9 15.448 9 16V19C9 19.553 9.448 20 10 20C10.552 20 11 19.553 11 19V16C11 15.448 10.552 15 10 15ZM10 0C9.448 0 9 0.448 9 1V4C9 4.552 9.448 5 10 5C10.552 5 11 4.552 11 4V1C11 0.448 10.552 0 10 0ZM6.366 1.706C6.09 1.228 5.479 1.063 5 1.34C4.521 1.616 4.358 2.228 4.634 2.706L6.134 5.304C6.41 5.782 7.021 5.946 7.5 5.67C7.979 5.394 8.142 4.782 7.866 4.304L6.366 1.706ZM13.866 14.696C13.59 14.218 12.979 14.054 12.5 14.33C12.021 14.606 11.858 15.218 12.134 15.696L13.634 18.294C13.91 18.772 14.521 18.937 15 18.66C15.479 18.384 15.642 17.772 15.366 17.294L13.866 14.696ZM5.67 12.5C5.394 12.021 4.782 11.858 4.304 12.134L1.706 13.634C1.228 13.91 1.063 14.521 1.34 15C1.616 15.479 2.228 15.642 2.706 15.366L5.304 13.866C5.782 13.59 5.946 12.979 5.67 12.5ZM14.33 7.5C14.606 7.979 15.218 8.142 15.696 7.866L18.294 6.366C18.772 6.09 18.937 5.479 18.66 5C18.384 4.521 17.772 4.358 17.294 4.634L14.696 6.134C14.218 6.41 14.054 7.021 14.33 7.5ZM1.706 6.366L4.304 7.866C4.782 8.142 5.394 7.979 5.67 7.5C5.946 7.021 5.782 6.41 5.304 6.134L2.706 4.634C2.228 4.358 1.616 4.521 1.34 5C1.063 5.479 1.228 6.09 1.706 6.366ZM18.294 13.634L15.696 12.134C15.218 11.858 14.606 12.021 14.33 12.5C14.054 12.979 14.218 13.59 14.696 13.866L17.294 15.366C17.772 15.642 18.384 15.479 18.66 15C18.937 14.521 18.772 13.91 18.294 13.634ZM7.5 14.33C7.021 14.054 6.41 14.218 6.134 14.696L4.634 17.294C4.358 17.772 4.521 18.384 5 18.66C5.479 18.937 6.09 18.772 6.366 18.294L7.866 15.696C8.142 15.218 7.979 14.606 7.5 14.33ZM12.5 5.67C12.979 5.946 13.59 5.782 13.866 5.304L15.366 2.706C15.642 2.228 15.479 1.616 15 1.34C14.521 1.063 13.91 1.228 13.634 1.706L12.134 4.304C11.858 4.782 12.021 5.394 12.5 5.67Z" fill="url(#paint0_angular)"/>
<defs>
<radialGradient id="paint0_angular" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(10 10) scale(10)">
<stop offset="0.203111" stop-color="white"/>
<stop offset="0.703211" stop-color="#34BE5B"/>
</radialGradient>
</defs>
</svg>
<svg width="34" height="34" viewBox="0 0 34 34" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M18.1578 28.8951H23.5262C24.6841 28.8951 25.5262 27.9478 24.8946 26.8951C23.7367 25.2109 21.5262 23.4215 19.842 23.2109C19.6315 23.2109 19.4209 23.2109 19.2104 23.4215L17.2104 24.8951L15.2104 23.4215C14.9999 23.3162 14.7894 23.3162 14.5788 23.3162C12.8946 23.5267 10.6841 25.2109 9.5262 27.0004C8.89462 27.9478 9.73673 29.0004 10.8946 29.0004H16.263H18.1578V28.8951Z" fill="#C10A78"/>
<path d="M6.47368 1H27.5263C30.5789 1 33 3.52632 33 6.47368V27.5263C33 30.5789 30.4737 33 27.5263 33H6.47368C3.42105 33 1 30.4737 1 27.5263V6.47368C1 3.42105 3.42105 1 6.47368 1Z" stroke="#C10A78" stroke-width="1.5"/>
<path d="M17.0001 12.1582C14.7896 12.1582 12.7896 14.1582 12.7896 16.895C12.7896 19.6319 14.7896 21.6319 17.0001 21.6319C19.2106 21.6319 21.2106 19.6319 21.2106 16.895C21.2106 14.1582 19.2106 12.1582 17.0001 12.1582Z" fill="#C10A78"/>
<path d="M23.3158 7.52539C21.2106 7.52539 19.4211 9.10434 18.8948 11.2096C21.1053 12.0517 22.579 14.2622 22.579 16.8938C22.579 17.2096 22.579 17.4201 22.4737 17.7359C22.7895 17.8412 23 17.8412 23.3158 17.8412C25.9474 17.8412 27.9474 15.5254 27.9474 12.6833C27.9474 9.84118 25.9474 7.52539 23.3158 7.52539Z" fill="#D0A3BE"/>
<path d="M11.5264 16.8938C11.5264 14.3675 13.0001 12.0517 15.2106 11.2096C14.5791 9.10434 12.7896 7.52539 10.6843 7.52539C8.05273 7.52539 6.05273 9.84118 6.05273 12.6833C6.05273 15.5254 8.158 17.8412 10.6843 17.8412C11.0001 17.8412 11.2106 17.8412 11.5264 17.7359C11.5264 17.4201 11.5264 17.2096 11.5264 16.8938Z" fill="#D0A3BE"/>
<path d="M11.1052 23.2101C11.9473 22.5785 12.9999 22.0522 13.9473 21.8417C13.1052 21.2101 12.4736 20.368 12.0526 19.4206L10.6841 20.4733L8.57887 18.9996C8.36835 18.8943 8.15782 18.7891 7.94729 18.7891C6.26308 18.9996 4.05256 20.6838 2.89466 22.4733C2.36835 23.4206 3.21045 24.368 4.36835 24.368H9.73677C10.1578 23.947 10.5789 23.5259 11.1052 23.2101Z" fill="#D0A3BE"/>
<path d="M30.9999 22.3678C29.842 20.6836 27.6315 18.8941 25.9473 18.6836C25.7367 18.6836 25.5262 18.6836 25.3157 18.8941L23.2104 20.3678L21.842 19.4204C21.421 20.3678 20.7894 21.2099 19.9473 21.8415C20.8946 22.052 21.9473 22.5783 22.7894 23.2099C23.2104 23.5257 23.7367 23.9468 24.1578 24.3678H29.6315C30.7894 24.3678 31.6315 23.4204 30.9999 22.3678Z" fill="#D0A3BE"/>
</svg>
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M10.9999 26.9895H5.06652V21.0438C5.06652 20.3758 4.53319 19.8413 3.86651 19.8413C3.19984 19.8413 2.6665 20.3758 2.6665 21.0438V28.192C2.6665 28.8601 3.19984 29.3945 3.86651 29.3945H10.9999C11.6666 29.3945 12.1999 28.8601 12.1999 28.192C12.1999 27.524 11.6666 26.9895 10.9999 26.9895Z" fill="#4591A9"/>
<path d="M3.86651 12.2256C4.53319 12.2256 5.06652 11.6911 5.06652 11.0231V5.07737H10.9999C11.6666 5.07737 12.1999 4.54293 12.1999 3.87487C12.1999 3.20681 11.6666 2.67236 10.9999 2.67236H3.86651C3.19984 2.67236 2.6665 3.20681 2.6665 3.87487V11.0231C2.6665 11.6911 3.19984 12.2256 3.86651 12.2256Z" fill="#4591A9"/>
<path d="M20.9998 5.07737H26.9332V11.0231C26.9332 11.6911 27.4665 12.2256 28.1332 12.2256C28.7999 12.2256 29.3332 11.6911 29.3332 11.0231V3.87487C29.3332 3.20681 28.7999 2.67236 28.1332 2.67236H20.9998C20.3331 2.67236 19.7998 3.20681 19.7998 3.87487C19.7998 4.54293 20.3331 5.07737 20.9998 5.07737Z" fill="#4591A9"/>
<path d="M28.1332 19.8413C27.4665 19.8413 26.9332 20.3758 26.9332 21.0438V26.9895H20.9998C20.3331 26.9895 19.7998 27.524 19.7998 28.192C19.7998 28.8601 20.3331 29.3945 20.9998 29.3945H28.1332C28.7999 29.3945 29.3332 28.8601 29.3332 28.192V21.0438C29.3332 20.3758 28.7999 19.8413 28.1332 19.8413Z" fill="#4591A9"/>
<path d="M30.7333 14.7642H26.4C25.6666 14.7642 25.1333 15.3654 25.1333 16.0335C25.1333 16.7683 25.7333 17.3028 26.4 17.3028H30.7333C31.4667 17.3028 32 16.7015 32 16.0335C32 15.2986 31.4 14.7642 30.7333 14.7642Z" fill="#4591A9"/>
<path d="M6.93339 16.0335C6.93339 15.2986 6.33339 14.7642 5.66671 14.7642H1.26668C0.600005 14.7642 0 15.2986 0 16.0335C0 16.7683 0.600005 17.3028 1.26668 17.3028H5.60005C6.33339 17.3028 6.93339 16.7683 6.93339 16.0335Z" fill="#4591A9"/>
<path d="M16.0001 25.1191C15.2667 25.1191 14.7334 25.7204 14.7334 26.3885V30.7308C14.7334 31.4657 15.3334 32.0001 16.0001 32.0001C16.7334 32.0001 17.2668 31.3989 17.2668 30.7308V26.3885C17.2668 25.7204 16.7334 25.1191 16.0001 25.1191Z" fill="#4591A9"/>
<path d="M16.0001 6.9478C16.7334 6.9478 17.2668 6.34655 17.2668 5.67849V1.26931C17.2668 0.601252 16.7334 0 16.0001 0C15.2667 0 14.7334 0.601252 14.7334 1.26931V5.61169C14.7334 6.34655 15.2667 6.9478 16.0001 6.9478Z" fill="#4591A9"/>
<path d="M15.4446 10.6108L7.67444 13.7392C7.39693 13.8783 7.39693 14.2954 7.67444 14.3649L10.8658 15.6163L10.9351 15.1296C11.0045 14.3649 11.4902 13.7392 12.2533 13.4611L15.514 12.4183C15.7221 12.3488 15.8609 12.3488 16.069 12.3488C16.2771 12.3488 16.4159 12.3488 16.624 12.4183L18.4278 12.9745V11.445C18.4278 11.3755 18.4278 11.3755 18.4278 11.306L16.624 10.5413C16.2078 10.4717 15.7915 10.4717 15.4446 10.6108Z" fill="#4591A9"/>
<path d="M21.1342 15.6165L24.3255 14.3651C24.603 14.2261 24.603 13.8089 24.3255 13.7394L20.5098 12.21V13.948C20.8566 14.2261 21.0648 14.7127 21.0648 15.1298L21.1342 15.6165Z" fill="#4591A9"/>
<path d="M18.3592 13.7394L16.3473 13.1137C16.1392 13.0441 15.8617 13.0441 15.6535 13.1137L12.3928 14.1565C11.9072 14.2955 11.6297 14.7126 11.5603 15.1993L11.144 21.039C11.144 21.3866 11.4909 21.6647 11.8378 21.5257L15.5148 20.1353C15.7923 20.0657 16.1392 20.0657 16.4167 20.1353L20.0936 21.5257C20.4405 21.6647 20.7874 21.3866 20.7874 21.039L20.5793 18.1192H18.0817L18.2898 16.4507C18.1511 16.2421 18.0123 15.964 18.0123 15.6859C18.0123 15.4079 18.0817 15.0602 18.2898 14.8517V13.7394H18.3592Z" fill="#4591A9"/>
<path d="M19.0529 16.2422L18.8448 17.4241H20.0242L19.8854 16.2422C20.0242 16.1032 20.1629 15.8946 20.1629 15.686C20.1629 15.4775 20.0242 15.2689 19.8854 15.1299V11.5148C19.8854 11.3062 19.6773 11.0977 19.4692 11.0977C19.261 11.0977 19.0529 11.3062 19.0529 11.5148V15.1299C18.8448 15.2689 18.7754 15.4775 18.7754 15.686C18.7754 15.8946 18.8448 16.1032 19.0529 16.2422Z" fill="#4591A9"/>
</svg>
<svg width="90" height="90" viewBox="0 0 90 90" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="45" cy="45" r="43.5" fill="white" stroke="#006C43" stroke-width="3"/>
<path d="M40.4989 23.4947L69.333 32.264C70.1256 32.5051 70.5729 33.3431 70.3322 34.1357L59.2087 70.7602C58.968 71.5529 58.1303 72 57.3377 71.759L28.5036 62.9897C27.711 62.7486 27.2637 61.9106 27.5044 61.1179L38.6279 24.4935C38.8687 23.7008 39.7063 23.2536 40.4989 23.4947Z" fill="white" stroke="#006C43" stroke-width="3"/>
<path d="M30.0092 25.3322L61.724 25.1484C62.5524 25.1436 63.2281 25.8112 63.2332 26.6396L63.4815 66.8476C63.4866 67.676 62.8192 68.3515 61.9908 68.3563L30.276 68.5401C29.4476 68.5449 28.7719 67.8773 28.7668 67.0488L28.5185 26.8408C28.5134 26.0124 29.1808 25.337 30.0092 25.3322Z" fill="white" stroke="#006C43" stroke-width="3"/>
<path d="M50.6963 21.4771C50.5219 19.2139 48.6159 17.4461 46.2996 17.4621C43.9833 17.4781 42.111 19.268 41.962 21.5283L36.7345 21.5571L36.7911 26.9566L55.9804 26.8478L55.9238 21.4483L50.6963 21.4771ZM46.3363 23.0814C45.4563 23.09 44.7403 22.3852 44.7319 21.4958C44.7229 20.6192 45.4303 19.9064 46.3232 19.8984C47.2033 19.8897 47.9193 20.5946 47.9277 21.484C47.9367 22.3605 47.2293 23.0733 46.3363 23.0814Z" fill="#006C43"/>
<path d="M40.1242 37.29C40.8068 36.1591 40.4397 34.6905 39.3044 34.0097C38.1691 33.3289 36.6954 33.6937 36.0128 34.8245C35.3302 35.9553 35.6972 37.424 36.8325 38.1048C37.9679 38.7856 39.4416 38.4208 40.1242 37.29Z" fill="#D2E744"/>
<path d="M38.067 49.8364C39.3913 49.8812 40.501 48.8484 40.5455 47.5293C40.5901 46.2103 39.5526 45.1047 38.2283 45.0598C36.904 45.0149 35.7943 46.0478 35.7498 47.3668C35.7052 48.6858 36.7427 49.7915 38.067 49.8364Z" fill="#D2E744"/>
<path d="M40.5876 59.0009C40.7534 57.6916 39.8222 56.4959 38.5076 56.3302C37.193 56.1645 35.9929 57.0916 35.827 58.4008C35.6612 59.7101 36.5924 60.9058 37.907 61.0715C39.2216 61.2372 40.4217 60.3102 40.5876 59.0009Z" fill="#D2E744"/>
<path d="M38.0689 37.7922L36.2486 35.9946L37.2589 34.9774L38.0584 35.7546L40.6281 33.1593L41.6634 34.1667L38.0689 37.7922Z" fill="#006C43"/>
<path d="M38.139 49.0334L36.3186 47.2358L37.329 46.2187L38.1284 46.9958L40.6981 44.4005L41.7334 45.4079L38.139 49.0334Z" fill="#006C43"/>
<path d="M38.2092 60.2746L36.3882 58.4906L37.3992 57.4599L38.198 58.2507L40.7683 55.6417L41.803 56.6627L38.2092 60.2746Z" fill="#006C43"/>
<path d="M49.744 33.0628L44.3785 33.0939C44.0202 33.096 43.7317 33.388 43.7339 33.7463C43.7361 34.1045 44.0283 34.3932 44.3865 34.3911L49.7521 34.36C50.1103 34.3579 50.3989 34.0659 50.3967 33.7076C50.3944 33.3494 50.1023 33.0607 49.744 33.0628Z" fill="#006C43"/>
<path d="M55.8755 35.3125L44.3956 35.3791C44.0373 35.3811 43.7487 35.6732 43.751 36.0314C43.7532 36.3896 44.0453 36.6783 44.4036 36.6763L55.8836 36.6097C56.2418 36.6076 56.5304 36.3156 56.5282 35.9574C56.5259 35.5991 56.2338 35.3104 55.8755 35.3125Z" fill="#006C43"/>
<path d="M55.8882 37.5821L44.4082 37.6486C44.05 37.6507 43.7614 37.9427 43.7636 38.3009C43.7659 38.6592 44.058 38.9479 44.4163 38.9458L55.8962 38.8793C56.2545 38.8772 56.5431 38.5851 56.5408 38.2269C56.5386 37.8687 56.2464 37.58 55.8882 37.5821Z" fill="#006C43"/>
<path d="M49.8208 44.4534L44.4552 44.4845C44.097 44.4866 43.8084 44.7787 43.8106 45.1369C43.8129 45.4951 44.105 45.7838 44.4633 45.7817L49.8288 45.7506C50.1871 45.7486 50.4756 45.4565 50.4734 45.0983C50.4712 44.7401 50.179 44.4513 49.8208 44.4534Z" fill="#006C43"/>
<path d="M55.9388 46.6904L44.4588 46.757C44.1006 46.7591 43.812 47.0511 43.8142 47.4093C43.8164 47.7676 44.1086 48.0563 44.4668 48.0542L55.9468 47.9876C56.305 47.9856 56.5936 47.6935 56.5914 47.3353C56.5892 46.9771 56.297 46.6884 55.9388 46.6904Z" fill="#006C43"/>
<path d="M55.965 48.96L44.485 49.0265C44.1268 49.0286 43.8382 49.3207 43.8404 49.6789C43.8426 50.0371 44.1348 50.3258 44.493 50.3237L55.973 50.2572C56.3312 50.2551 56.6198 49.963 56.6176 49.6048C56.6154 49.2466 56.3232 48.9579 55.965 48.96Z" fill="#006C43"/>
<path d="M49.8899 55.7083L44.5243 55.7394C44.1661 55.7415 43.8775 56.0336 43.8797 56.3918C43.8819 56.75 44.1741 57.0387 44.5323 57.0366L49.8979 57.0055C50.2561 57.0034 50.5447 56.7114 50.5425 56.3531C50.5403 55.9949 50.2481 55.7062 49.8899 55.7083Z" fill="#006C43"/>
<path d="M56.0215 57.958L44.5415 58.0246C44.1833 58.0266 43.8947 58.3187 43.8969 58.6769C43.8992 59.0351 44.1913 59.3238 44.5496 59.3218L56.0295 59.2552C56.3878 59.2532 56.6764 58.9611 56.6741 58.6029C56.6719 58.2447 56.3798 57.956 56.0215 57.958Z" fill="#006C43"/>
<path d="M56.0339 60.2285L44.5539 60.2951C44.1957 60.2971 43.9071 60.5892 43.9093 60.9474C43.9115 61.3056 44.2037 61.5944 44.5619 61.5923L56.0419 61.5257C56.4001 61.5237 56.6887 61.2316 56.6865 60.8734C56.6843 60.5152 56.3921 60.2265 56.0339 60.2285Z" fill="#006C43"/>
</svg>
<svg width="34" height="30" viewBox="0 0 34 30" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M33 10.3659C33 9.11707 32.1805 8.06341 31.0488 7.75122C30.8927 4.00488 27.8098 1 24.0244 1H9.97561C6.1122 1 2.95122 4.16098 2.95122 8.02439V17.1171C1.81951 17.4683 1 18.4829 1 19.7317C1 20.9805 1.81951 22.0341 2.95122 22.3463C3.10732 26.0927 6.19024 29.0976 9.97561 29.0976H24.0244C27.8878 29.0976 31.0488 25.9366 31.0488 22.0732V12.9805C32.1805 12.6293 33 11.6146 33 10.3659ZM9.97561 2.56098H24.0244C26.9512 2.56098 29.3317 4.86341 29.4878 7.75122C28.3561 8.10244 27.5366 9.11707 27.5366 10.3659C27.5366 10.7561 27.6146 11.1073 27.7707 11.4585L23.9073 16.2195C23.4 15.5171 22.5805 15.0488 21.6829 15.0488C20.5902 15.0488 19.6537 15.7122 19.1854 16.6488L14.9707 14.5415C14.7756 13.2927 13.6439 12.3171 12.3171 12.3171C10.9122 12.3171 9.78049 13.3707 9.62439 14.6976L6.03415 18.2878C5.68293 17.7415 5.13659 17.3122 4.5122 17.1171V8.02439C4.51219 5.01951 6.97073 2.56098 9.97561 2.56098ZM12.3171 16.2195C11.6537 16.2195 11.1463 15.7122 11.1463 15.0488C11.1463 14.3854 11.6537 13.878 12.3171 13.878C12.9805 13.878 13.4878 14.3854 13.4878 15.0488C13.4878 15.7122 12.9805 16.2195 12.3171 16.2195ZM13.0976 17.6634C13.839 17.4293 14.4634 16.8829 14.8146 16.1805L19.0293 18.2878C19.2244 19.3024 19.9659 20.122 20.9415 20.3951V27.5366H13.0976V17.6634ZM21.6829 18.9512C21.0195 18.9512 20.5122 18.4439 20.5122 17.7805C20.5122 17.1171 21.0195 16.6098 21.6829 16.6098C22.3463 16.6098 22.8537 17.1171 22.8537 17.7805C22.8537 18.4439 22.3463 18.9512 21.6829 18.9512ZM2.56098 19.7317C2.56098 19.0683 3.06829 18.561 3.73171 18.561C4.39512 18.561 4.90244 19.0683 4.90244 19.7317C4.90244 20.3951 4.39512 20.9024 3.73171 20.9024C3.06829 20.9024 2.56098 20.3951 2.56098 19.7317ZM4.5122 22.3463C5.52683 22.0341 6.26829 21.1756 6.42439 20.0829L10.0146 16.4927C10.3659 17.039 10.9122 17.4683 11.5366 17.6634V27.5366H9.97561C7.04878 27.5366 4.66829 25.2341 4.5122 22.3463ZM24.0244 27.5366H22.4634V20.3951C23.5171 20.0829 24.2585 19.1854 24.4146 18.0927L28.8244 12.6683C29.0195 12.7854 29.2537 12.9024 29.5268 12.9805V22.0732C29.4878 25.078 27.0293 27.5366 24.0244 27.5366ZM30.2683 11.5366C29.6049 11.5366 29.0976 11.0293 29.0976 10.3659C29.0976 9.70244 29.6049 9.19512 30.2683 9.19512C30.9317 9.19512 31.439 9.70244 31.439 10.3659C31.439 11.0293 30.9317 11.5366 30.2683 11.5366Z" fill="#C10A78" stroke="#C10A78" stroke-width="0.6"/>
</svg>
<svg width="90" height="90" viewBox="0 0 90 90" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="45" cy="45" r="43.5" fill="white" stroke="#EC7B3F" stroke-width="3"/>
<path d="M45 46.5625C50.1781 46.5625 54.375 42.3656 54.375 37.1875C54.375 32.0094 50.1781 27.8125 45 27.8125C39.8219 27.8125 35.625 32.0094 35.625 37.1875C35.6795 42.3656 39.8765 46.5625 45 46.5625ZM45 30.3198C48.8154 30.3198 51.8677 33.4266 51.8677 37.1875C51.8677 41.0029 48.7609 44.0552 45 44.0552C41.2391 44.0552 38.1323 40.9484 38.1323 37.1875C38.1323 33.4266 41.2391 30.3198 45 30.3198Z" fill="#EC7B3F"/>
<path d="M43.9419 39.9782C44.1524 40.2539 44.4682 40.3642 44.8366 40.3642C45.1524 40.3642 45.4682 40.1988 45.7314 39.9782L49.0998 36.173C49.5735 35.6767 49.5208 34.8495 49.0471 34.4083C48.5735 33.912 47.784 33.9671 47.3629 34.4635L44.8366 37.276L43.9419 36.2282C43.4682 35.7318 42.7314 35.6767 42.2577 36.173C41.784 36.6693 41.7314 37.4414 42.205 37.9377L43.9419 39.9782Z" fill="#EC7B3F"/>
<path d="M67.7895 51.7831H59.7895V22.261C59.7895 21.0478 58.8421 20 57.6316 20H24.5263C23.3158 20 22.3158 21.0478 22.3158 22.261V29.8346H21.2105C20.5263 29.8346 20 30.386 20 31.1029C20 31.8199 20.5263 32.3713 21.2105 32.3713H22.3684V39.0993H21.2105C20.5263 39.0993 20 39.6507 20 40.3676C20 41.0846 20.5263 41.636 21.2105 41.636H22.3684V48.364H21.2105C20.5263 48.364 20 48.9154 20 49.6324C20 50.3493 20.5263 50.9007 21.2105 50.9007H22.3684V57.6287H21.2105C20.5263 57.6287 20 58.1801 20 58.8971C20 59.614 20.5263 60.1654 21.2105 60.1654H22.3684V67.6838C22.3684 68.9522 23.3684 70 24.5789 70H57.6316C58.8421 70 59.7895 68.9522 59.7895 67.6838V61.4338H67.7895C69 61.4338 70 60.386 70 59.1176V54.1544C70 52.8309 69 51.7831 67.7895 51.7831ZM42.3684 58.8419L38.9474 56.5809L42.3158 54.3199H44.1053V58.8971H42.3684V58.8419ZM46.5263 54.2647L62.2632 54.1544V58.8419H46.5263V54.2647ZM24.7368 60.0551H25.8947C26.5789 60.0551 27.1053 59.5037 27.1053 58.7868C27.1053 58.0699 26.5789 57.5184 25.8947 57.5184H24.7368V50.8456H25.8947C26.5789 50.8456 27.1053 50.2941 27.1053 49.5772C27.1053 48.8603 26.5789 48.3088 25.8947 48.3088H24.7368V41.5809H25.8947C26.5789 41.5809 27.1053 41.0294 27.1053 40.3125C27.1053 39.5956 26.5789 39.0441 25.8947 39.0441H24.7368V32.3162H25.8947C26.5789 32.3162 27.1053 31.7647 27.1053 31.0478C27.1053 30.3309 26.5789 29.7794 25.8947 29.7794H24.7368V22.4816H29.6842V67.3529H24.7368V60.0551ZM57.4211 67.4081H32.1579V22.4816H57.4211V51.7831H42.3158C41.8947 51.7831 41.4737 51.8934 41.1579 52.114L37.4211 54.5956C36.7895 55.0368 36.3684 55.7537 36.3684 56.5809C36.3684 57.4081 36.7368 58.125 37.4211 58.5662L41.1579 61.0478C41.5263 61.2684 41.8947 61.3787 42.3158 61.3787H57.3684V67.4081H57.4211ZM64.6842 58.8419V54.0993H67.5789L67.7895 58.8419H64.6842Z" fill="#EC7B3F"/>
</svg>
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M2 23V2H21.7276C22.4903 2 23.2237 2.32009 23.7752 2.89373L31.083 10.4939C32.3425 11.8038 32.2986 14.008 30.9882 15.2573L29.6863 13.638C30.1231 13.2216 30.1377 12.4869 29.7179 12.0502L22.4101 4.45008C22.2263 4.25887 21.9818 4.15217 21.7276 4.15217H3.97646V20.8478H21.7522C21.9917 20.8478 22.223 20.7531 22.4032 20.5814L29.6863 13.638L30.9882 15.2573L23.7051 22.2006C23.1646 22.7159 22.4706 23 21.7522 23H2Z" fill="#34BE5B"/>
<path d="M2 1.03125C2 0.461707 2.43372 0 2.96875 0H3.03125C3.56627 0 4 0.461706 4 1.03125V30H2L2 1.03125Z" fill="#34BE5B"/>
<path d="M0.0322266 30.0605C0.0322266 29.525 0.466375 29.0908 1.00192 29.0908H6.28834C6.82388 29.0908 7.25803 29.525 7.25803 30.0605C7.25803 30.5961 6.82388 31.0302 6.28834 31.0302H1.00192C0.466375 31.0302 0.0322266 30.5961 0.0322266 30.0605Z" fill="#34BE5B"/>
<path d="M0 31C0 30.4477 0.308426 30 0.688889 30H21.3111C21.6916 30 22 30.4477 22 31C22 31.5523 21.6916 32 21.3111 32H0.688887C0.308425 32 0 31.5523 0 31Z" fill="#34BE5B"/>
<path d="M15.5 19C19.0901 19 22 16.0901 22 12.5C22 8.90988 19.0901 6 15.5 6C11.9099 6 9 8.90988 9 12.5C9.03779 16.0901 11.9477 19 15.5 19ZM15.5 7.73837C18.1453 7.73837 20.2616 9.89244 20.2616 12.5C20.2616 15.1453 18.1076 17.2616 15.5 17.2616C12.8924 17.2616 10.7384 15.1076 10.7384 12.5C10.7384 9.89244 12.8924 7.73837 15.5 7.73837Z" fill="#34BE5B"/>
<path d="M14.3502 14.6215C14.4959 14.7926 14.7145 14.8611 14.9695 14.8611C15.1881 14.8611 15.4067 14.7584 15.5889 14.6215L17.9206 12.26C18.2485 11.952 18.212 11.4386 17.8841 11.1648C17.5562 10.8568 17.0098 10.891 16.7183 11.199L14.9695 12.9445L14.3502 12.2942C14.0223 11.9862 13.5122 11.952 13.1843 12.26C12.8564 12.568 12.82 13.0472 13.1479 13.3552L14.3502 14.6215Z" fill="#34BE5B"/>
</svg>
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M16 17C19.314 17 22 14.314 22 11C22 7.68605 19.314 5 16 5C12.686 5 10 7.68605 10 11C10.0349 14.314 12.7209 17 16 17ZM16 6.60465C18.4419 6.60465 20.3953 8.59302 20.3953 11C20.3953 13.4419 18.407 15.3953 16 15.3953C13.593 15.3953 11.6047 13.407 11.6047 11C11.6047 8.59302 13.593 6.60465 16 6.60465Z" fill="#EC7B3F"/>
<path d="M15.3228 12.786C15.4575 12.9625 15.6596 13.0331 15.8954 13.0331C16.0975 13.0331 16.2996 12.9272 16.4681 12.786L18.6239 10.3507C18.927 10.0331 18.8933 9.50368 18.5902 9.22132C18.287 8.90368 17.7818 8.93897 17.5123 9.25662L15.8954 11.0566L15.3228 10.386C15.0196 10.0684 14.5481 10.0331 14.2449 10.3507C13.9418 10.6684 13.9081 11.1625 14.2112 11.4801L15.3228 12.786Z" fill="#EC7B3F"/>
<path d="M30.5853 20.3412H25.4653V1.44706C25.4653 0.670588 24.8589 0 24.0842 0H2.89684C2.12211 0 1.48211 0.670588 1.48211 1.44706V6.29412H0.774737C0.336842 6.29412 0 6.64706 0 7.10588C0 7.56471 0.336842 7.91765 0.774737 7.91765H1.51579V12.2235H0.774737C0.336842 12.2235 0 12.5765 0 13.0353C0 13.4941 0.336842 13.8471 0.774737 13.8471H1.51579V18.1529H0.774737C0.336842 18.1529 0 18.5059 0 18.9647C0 19.4235 0.336842 19.7765 0.774737 19.7765H1.51579V24.0824H0.774737C0.336842 24.0824 0 24.4353 0 24.8941C0 25.3529 0.336842 25.7059 0.774737 25.7059H1.51579V30.5176C1.51579 31.3294 2.15579 32 2.93053 32H24.0842C24.8589 32 25.4653 31.3294 25.4653 30.5176V26.5176H30.5853C31.36 26.5176 32 25.8471 32 25.0353V21.8588C32 21.0118 31.36 20.3412 30.5853 20.3412ZM14.3158 24.8588L12.1263 23.4118L14.2821 21.9647H15.4274V24.8941H14.3158V24.8588ZM16.9768 21.9294L27.0484 21.8588V24.8588H16.9768V21.9294ZM3.03158 25.6353H3.77263C4.21053 25.6353 4.54737 25.2824 4.54737 24.8235C4.54737 24.3647 4.21053 24.0118 3.77263 24.0118H3.03158V19.7412H3.77263C4.21053 19.7412 4.54737 19.3882 4.54737 18.9294C4.54737 18.4706 4.21053 18.1176 3.77263 18.1176H3.03158V13.8118H3.77263C4.21053 13.8118 4.54737 13.4588 4.54737 13C4.54737 12.5412 4.21053 12.1882 3.77263 12.1882H3.03158V7.88235H3.77263C4.21053 7.88235 4.54737 7.52941 4.54737 7.07059C4.54737 6.61176 4.21053 6.25882 3.77263 6.25882H3.03158V1.58824H6.1979V30.3059H3.03158V25.6353ZM23.9495 30.3412H7.78105V1.58824H23.9495V20.3412H14.2821C14.0126 20.3412 13.7432 20.4118 13.5411 20.5529L11.1495 22.1412C10.7453 22.4235 10.4758 22.8824 10.4758 23.4118C10.4758 23.9412 10.7116 24.4 11.1495 24.6824L13.5411 26.2706C13.7768 26.4118 14.0126 26.4824 14.2821 26.4824H23.9158V30.3412H23.9495ZM28.5979 24.8588V21.8235H30.4505L30.5853 24.8588H28.5979Z" fill="#EC7B3F"/>
</svg>
<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg">
<path d="M15 30C23.2843 30 30 23.2843 30 15C30 6.71573 23.2843 0 15 0C6.71573 0 0 6.71573 0 15C0 23.2843 6.71573 30 15 30Z" fill="currentColor"/>
<path d="M13.2 9.4502C13.2 8.5502 13.95 7.9502 15 7.9502C16.05 7.9502 16.8 8.5502 16.8 9.4502C16.8 10.3502 16.05 11.1002 15 11.1002C13.95 11.1002 13.2 10.3502 13.2 9.4502ZM15 12.4502C15.75 12.4502 16.35 13.0502 16.35 13.8002V20.7002C16.35 21.4502 15.75 22.0502 15 22.0502C14.25 22.0502 13.65 21.4502 13.65 20.7002L13.65 13.8002C13.65 13.0502 14.25 12.4502 15 12.4502Z" fill="white"/>
</svg>
<svg width="32" height="32" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
<path d="M3.79811 23.1587L3.79866 23.1587L14.5005 23.1L14.6631 23.0991L14.589 22.9544L14.589 22.9544L14.589 22.9544L14.589 22.9544L14.589 22.9544L14.589 22.9544L14.589 22.9543L14.589 22.9543L14.589 22.9543L14.5889 22.9543L14.5889 22.9543L14.5889 22.9543L14.5889 22.9542L14.5889 22.9542L14.5889 22.9542L14.5889 22.9542L14.5889 22.9542L14.5889 22.9541L14.5888 22.9541L14.5888 22.9541L14.5888 22.954L14.5888 22.954L14.5888 22.954L14.5888 22.9539L14.5887 22.9539L14.5887 22.9539L14.5887 22.9538L14.5887 22.9538L14.5887 22.9537L14.5886 22.9537L14.5886 22.9536L14.5886 22.9536L14.5886 22.9535L14.5885 22.9535L14.5885 22.9534L14.5885 22.9534L14.5884 22.9533L14.5884 22.9532L14.5884 22.9532L14.5883 22.9531L14.5883 22.953L14.5883 22.9529L14.5882 22.9529L14.5882 22.9528L14.5881 22.9527L14.5881 22.9526L14.588 22.9525L14.588 22.9524L14.5879 22.9523L14.5879 22.9523L14.5878 22.9522L14.5878 22.9521L14.5877 22.9519L14.5877 22.9518L14.5876 22.9517L14.5876 22.9516L14.5875 22.9515L14.5874 22.9514L14.5874 22.9512L14.5873 22.9511L14.5873 22.951L14.5872 22.9509L14.5871 22.9507L14.587 22.9506L14.587 22.9504L14.5869 22.9503L14.5868 22.9501L14.5867 22.95L14.5866 22.9498L14.5866 22.9496L14.5865 22.9495L14.5864 22.9493L14.5863 22.9491L14.5862 22.949L14.5861 22.9488L14.586 22.9486L14.5859 22.9484L14.5858 22.9482L14.5857 22.948L14.5856 22.9478L14.5855 22.9476L14.5854 22.9474L14.5853 22.9472L14.5852 22.9469L14.5851 22.9467L14.5849 22.9465L14.5848 22.9463L14.5847 22.946L14.5846 22.9458L14.5845 22.9455L14.5843 22.9453L14.5842 22.945L14.5841 22.9448L14.5839 22.9445L14.5838 22.9442L14.5836 22.9439L14.5835 22.9437L14.5834 22.9434L14.5832 22.9431L14.5831 22.9428L14.5829 22.9425L14.5827 22.9422L14.5826 22.9419L14.5824 22.9415L14.5823 22.9412L14.5821 22.9409L14.5819 22.9406L14.5817 22.9402L14.5816 22.9399L14.5814 22.9395L14.5812 22.9392L14.581 22.9388L14.5808 22.9384L14.5806 22.9381L14.5805 22.9377L14.5803 22.9373L14.5801 22.9369L14.5799 22.9365L14.5796 22.9361L14.5794 22.9357L14.5792 22.9353L14.579 22.9349L14.5788 22.9345L14.5786 22.934L14.5784 22.9336L14.5781 22.9332L14.5779 22.9327L14.5777 22.9323L14.5774 22.9318L14.5772 22.9313L14.5769 22.9308L14.5767 22.9304L14.5764 22.9299L14.5762 22.9294L14.5759 22.9289L14.5757 22.9284L14.5754 22.9279L14.5751 22.9273L14.5749 22.9268L14.5746 22.9263L14.5743 22.9257L14.574 22.9252L14.5738 22.9246L14.5735 22.9241L14.5732 22.9235L14.5729 22.9229L14.5726 22.9223L14.5723 22.9217L14.572 22.9211L14.5717 22.9205L14.5714 22.9199L14.571 22.9193L14.5707 22.9187L14.5704 22.918L14.5701 22.9174L14.5697 22.9168L14.5694 22.9161L14.5691 22.9154L14.5687 22.9148L14.5684 22.9141L14.568 22.9134L14.5677 22.9127L14.5673 22.912L14.5669 22.9113L14.5666 22.9106L14.5662 22.9098L14.5658 22.9091L14.5654 22.9084L14.565 22.9076L14.5647 22.9068L14.5643 22.9061L14.5639 22.9053L14.5635 22.9045L14.5631 22.9037L14.5627 22.9029L14.5622 22.9021L14.5618 22.9013L14.5614 22.9005L14.561 22.8996L14.5605 22.8988L14.5601 22.8979L14.5597 22.8971L14.5592 22.8962L14.5588 22.8953L14.5583 22.8944L14.5579 22.8935L14.5574 22.8926L14.5569 22.8917L14.5565 22.8908L14.556 22.8899L14.5555 22.8889L14.555 22.888L14.5545 22.887L14.554 22.8861L14.5535 22.8851L14.553 22.8841L14.5525 22.8831L14.552 22.8821L14.5515 22.8811L14.551 22.8801L14.5504 22.879L14.5499 22.878L14.5494 22.8769L14.5488 22.8759L14.5483 22.8748L14.5477 22.8737L14.5471 22.8726L14.5466 22.8715L14.546 22.8704L14.5454 22.8693L14.5449 22.8682L14.5443 22.867L14.5437 22.8659L14.5431 22.8647L14.5425 22.8635L14.5419 22.8624L14.5413 22.8612L14.5407 22.86L14.5401 22.8588L14.5394 22.8575L14.5388 22.8563L14.5382 22.8551L14.5375 22.8538L14.5369 22.8526L14.5362 22.8513L14.5356 22.85L14.5349 22.8487L14.5342 22.8474L14.5336 22.8461L14.5329 22.8448L14.5322 22.8434L14.5315 22.8421L14.5308 22.8407L14.5301 22.8393L14.5294 22.838L14.5287 22.8366L14.528 22.8352L14.5272 22.8337L14.5265 22.8323L14.5258 22.8309L14.525 22.8294L14.5243 22.828L14.5235 22.8265L14.5228 22.825L14.522 22.8235L14.5213 22.822L14.5205 22.8205L14.5197 22.819L14.5189 22.8174L14.5181 22.8159L14.5173 22.8143L14.5165 22.8128L14.5157 22.8112L14.5149 22.8096L14.5141 22.808L14.5132 22.8063L14.5124 22.8047L14.5115 22.8031L14.5107 22.8014L14.5098 22.7997L14.509 22.798L14.5081 22.7964L14.5072 22.7947L14.5064 22.7929L14.5055 22.7912L14.5046 22.7895L14.5037 22.7877L14.5028 22.7859L14.5019 22.7842L14.501 22.7824L14.5 22.7806L14.4991 22.7787L14.4982 22.7769L14.4972 22.7751L14.4963 22.7732L14.4953 22.7713L14.4944 22.7695L14.4934 22.7676L14.4924 22.7657L14.4914 22.7637L14.4904 22.7618L14.4894 22.7599L14.4884 22.7579L14.4874 22.7559L14.4864 22.7539L14.4854 22.752L14.4844 22.7499L14.4833 22.7479L14.4823 22.7459L14.4812 22.7438L14.4802 22.7418L14.4791 22.7397L14.478 22.7376L14.477 22.7355L14.4759 22.7334L14.4748 22.7312L14.4737 22.7291L14.4726 22.7269L14.4715 22.7248L14.4704 22.7226L14.4692 22.7204L14.4681 22.7181L14.4669 22.7159L14.4658 22.7137L14.4646 22.7114L14.4635 22.7091L14.4623 22.7069L14.4611 22.7046L14.46 22.7022L14.4588 22.6999L14.4576 22.6976L14.4564 22.6952L14.4551 22.6929L14.4539 22.6905L14.4527 22.6881L14.4515 22.6857L14.4502 22.6832L14.449 22.6808L14.4477 22.6783L14.4464 22.6758L14.4452 22.6734L14.4439 22.6709L14.4426 22.6683L14.4413 22.6658L14.44 22.6633L14.4387 22.6607L14.4374 22.6581L14.436 22.6555L14.4347 22.6529L14.4334 22.6503L14.432 22.6477L14.4307 22.645L14.4293 22.6424L14.4279 22.6397L14.4265 22.637L14.4252 22.6343L14.4238 22.6315L14.4224 22.6288L14.4209 22.626L14.4195 22.6232L14.4181 22.6205L14.4167 22.6177L14.4152 22.6148L14.4138 22.612L14.4123 22.6091L14.4108 22.6063L14.4094 22.6034L14.4079 22.6005L14.4064 22.5976L14.4049 22.5946L14.4034 22.5917L14.4018 22.5887L14.4003 22.5857L14.3988 22.5827L14.3972 22.5797L14.3957 22.5767L14.3941 22.5736L14.3926 22.5706L14.391 22.5675L14.3894 22.5644L14.3878 22.5613L14.3862 22.5582L14.3846 22.555L14.383 22.5519L14.3814 22.5487L14.3797 22.5455L14.3781 22.5423L14.3764 22.539L14.3748 22.5358L14.3731 22.5325L14.3714 22.5293L14.3697 22.526L14.368 22.5227L14.3663 22.5193L14.3646 22.516L14.3629 22.5126L14.3612 22.5092L14.3594 22.5058L14.3577 22.5024L14.3559 22.499L14.3542 22.4955L14.3524 22.4921L14.3506 22.4886L14.3488 22.4851L14.347 22.4816L14.3452 22.478L14.3434 22.4745L14.3415 22.4709L14.3397 22.4673L14.3379 22.4637L14.336 22.4601L14.3341 22.4564L14.3323 22.4528L14.3304 22.4491L14.3285 22.4454L14.3266 22.4417L14.3247 22.4379L14.3228 22.4342L14.3208 22.4304L14.3189 22.4266L14.3169 22.4228L14.315 22.419L14.313 22.4151L14.311 22.4113L14.3091 22.4074L14.3071 22.4035L14.3051 22.3996L14.303 22.3957L14.301 22.3917L14.299 22.3877L14.2969 22.3837L14.2949 22.3797L14.2928 22.3757L14.2908 22.3717L14.2887 22.3676L14.2866 22.3635L14.2845 22.3594L14.2824 22.3553L14.2803 22.3511L14.2781 22.347L14.276 22.3428L14.2738 22.3386L14.2717 22.3344L14.2695 22.3301L14.2673 22.3259L14.2651 22.3216L14.263 22.3173L14.2607 22.313L14.2585 22.3087L14.2563 22.3043L14.2541 22.2999L14.2518 22.2955L14.2496 22.2911L14.2473 22.2867L14.245 22.2823L14.2427 22.2778L14.2404 22.2733L14.2381 22.2688L14.2358 22.2642L14.2335 22.2597L14.2311 22.2551L14.2288 22.2505L14.2264 22.2459L14.224 22.2413L14.2217 22.2366L14.2193 22.232L14.2169 22.2273L14.2145 22.2226L14.212 22.2178L14.2096 22.2131L14.2072 22.2083L14.2047 22.2035L14.2022 22.1987L14.1998 22.1939L14.1973 22.189L14.1948 22.1841L14.1923 22.1792L14.1898 22.1743L14.1872 22.1694L14.1847 22.1644L14.1822 22.1595L14.1796 22.1545L14.177 22.1494L14.1745 22.1444L14.1719 22.1393L14.1693 22.1342L14.1666 22.1291L14.164 22.124L14.1614 22.1189L14.1587 22.1137L14.1561 22.1085L14.1534 22.1033L14.1507 22.0981L14.1481 22.0928L14.1454 22.0875L14.1426 22.0822L14.1399 22.0769L14.1372 22.0716L14.1344 22.0662L14.1317 22.0608L14.1289 22.0554L14.1261 22.05L14.1234 22.0446L14.1206 22.0391L14.1177 22.0336L14.1149 22.0281L14.1121 22.0225L14.1092 22.017L14.1064 22.0114L14.1035 22.0058L14.1006 22.0002L14.0978 21.9945L14.0949 21.9889L14.0919 21.9832L14.089 21.9775L14.0612 21.923H14H3.79811C3.47455 21.923 3.27308 22.2323 3.27308 22.5409C3.27308 22.6945 3.3123 22.8467 3.39919 22.9631C3.48847 23.0828 3.62415 23.1587 3.79811 23.1587ZM13.2904 20.6386H13.4258L13.386 20.5091C13.2795 20.1631 13.1747 19.8225 13.105 19.4828L13.0886 19.4029H13.0071H3.83353C3.50997 19.4029 3.3085 19.7122 3.3085 20.0207C3.3085 20.184 3.37105 20.3359 3.46473 20.4475C3.55738 20.5579 3.68946 20.6386 3.83353 20.6386H13.2904ZM12.83 18.0839H12.93V17.9839V17.9837V17.9835V17.9833V17.9831V17.9829V17.9827V17.9825V17.9823V17.9821V17.9819V17.9817V17.9815V17.9813V17.9811V17.9809V17.9807V17.9805V17.9802V17.98V17.9798V17.9796V17.9794V17.9792V17.979V17.9788V17.9786V17.9784V17.9782V17.978V17.9778V17.9776V17.9774V17.9772V17.977V17.9768V17.9766V17.9764V17.9762V17.976V17.9758V17.9756V17.9754V17.9752V17.975V17.9748V17.9746V17.9744V17.9742V17.974V17.9738V17.9736V17.9734V17.9732V17.973V17.9728V17.9726V17.9724V17.9722V17.972V17.9718V17.9716V17.9713V17.9711V17.9709V17.9707V17.9705V17.9703V17.9701V17.9699V17.9697V17.9695V17.9693V17.9691V17.9689V17.9687V17.9685V17.9683V17.9681V17.9679V17.9677V17.9675V17.9673V17.9671V17.9669V17.9667V17.9665V17.9663V17.9661V17.9659V17.9657V17.9655V17.9653V17.9651V17.9649V17.9647V17.9645V17.9643V17.9641V17.9639V17.9637V17.9635V17.9633V17.9631V17.9629V17.9627V17.9624V17.9622V17.962V17.9618V17.9616V17.9614V17.9612V17.961V17.9608V17.9606V17.9604V17.9602V17.96V17.9598V17.9596V17.9594V17.9592V17.959V17.9588V17.9586V17.9584V17.9582V17.958V17.9578V17.9576V17.9574V17.9572V17.957V17.9568V17.9566V17.9564V17.9562V17.956V17.9558V17.9556V17.9554V17.9552V17.955V17.9548V17.9546V17.9544V17.9542V17.954V17.9537V17.9535V17.9533V17.9531V17.9529V17.9527V17.9525V17.9523V17.9521V17.9519V17.9517V17.9515V17.9513V17.9511V17.9509V17.9507V17.9505V17.9503V17.9501V17.9499V17.9497V17.9495V17.9493V17.9491V17.9489V17.9487V17.9485V17.9483V17.9481V17.9479V17.9477V17.9475V17.9473V17.9471V17.9469V17.9467V17.9465V17.9463V17.9461V17.9459V17.9457V17.9455V17.9453V17.9451V17.9448V17.9446V17.9444V17.9442V17.944V17.9438V17.9436V17.9434V17.9432V17.943V17.9428V17.9426V17.9424V17.9422V17.942V17.9418V17.9416V17.9414V17.9412V17.941V17.9408V17.9406V17.9404V17.9402V17.94V17.9398V17.9396V17.9394V17.9392V17.939V17.9388V17.9386V17.9384V17.9382V17.938V17.9378V17.9376V17.9374V17.9372V17.937V17.9368V17.9366V17.9364V17.9362V17.9359V17.9357V17.9355V17.9353V17.9351V17.9349V17.9347V17.9345V17.9343V17.9341V17.9339V17.9337V17.9335V17.9333V17.9331V17.9329V17.9327V17.9325V17.9323V17.9321V17.9319V17.9317V17.9315V17.9313V17.9311V17.9309V17.9307V17.9305V17.9303V17.9301V17.9299V17.9297V17.9295V17.9293V17.9291V17.9289V17.9287V17.9285V17.9283V17.9281V17.9279V17.9277V17.9275V17.9273V17.927V17.9268V17.9266V17.9264V17.9262V17.926V17.9258V17.9256V17.9254V17.9252V17.925V17.9248V17.9246V17.9244V17.9242V17.924V17.9238V17.9236V17.9234V17.9232V17.923V17.9228V17.9226V17.9224V17.9222V17.922V17.9218V17.9216V17.9214V17.9212V17.921V17.9208V17.9206V17.9204V17.9202V17.92V17.9198V17.9196V17.9194V17.9192V17.919V17.9188V17.9186V17.9184V17.9181V17.9179V17.9177V17.9175V17.9173V17.9171V17.9169V17.9167V17.9165V17.9163V17.9161V17.9159V17.9157V17.9155V17.9153V17.9151V17.9149V17.9147V17.9145V17.9143V17.9141V17.9139V17.9137V17.9135V17.9133V17.9131V17.9129V17.9127V17.9125V17.9123V17.9121V17.9119V17.9117V17.9115V17.9113V17.9111V17.9109V17.9107V17.9105V17.9103V17.9101V17.9099V17.9097V17.9095V17.9092V17.909V17.9088V17.9086V17.9084V17.9082V17.908V17.9078V17.9076V17.9074V17.9072V17.907V17.9068V17.9066V17.9064V17.9062V17.906V17.9058V17.9056V17.9054V17.9052V17.905V17.9048V17.9046V17.9044V17.9042V17.904V17.9038V17.9036V17.9034V17.9032V17.903V17.9028V17.9026V17.9024V17.9022V17.902V17.9018V17.9016V17.9014V17.9012V17.901V17.9008V17.9005V17.9003V17.9001V17.8999V17.8997V17.8995V17.8993V17.8991V17.8989V17.8987V17.8985V17.8983V17.8981V17.8979V17.8977V17.8975V17.8973V17.8971V17.8969V17.8967V17.8965V17.8963V17.8961V17.8959V17.8957V17.8955V17.8953V17.8951V17.8949V17.8947V17.8945V17.8943V17.8941V17.8939V17.8937V17.8935V17.8933V17.8931V17.8929V17.8927V17.8925V17.8923V17.8921V17.8919V17.8917V17.8914V17.8912V17.891V17.8908V17.8906V17.8904V17.8902V17.89V17.8898V17.8896V17.8894V17.8892V17.889V17.8888V17.8886V17.8884V17.8882V17.888V17.8878V17.8876V17.8874V17.8872V17.887V17.8868V17.8866V17.8864V17.8862V17.886V17.8858V17.8856V17.8854V17.8852V17.885V17.8848V17.8846V17.8844V17.8842V17.884V17.8838V17.8836V17.8834V17.8832V17.883V17.8827V17.8825V17.8823V17.8821V17.8819V17.8817V17.8815V17.8813V17.8811V17.8809V17.8807V17.8805V17.8803C12.93 17.5763 12.9647 17.2712 13.0002 16.9595L13.0129 16.8482H12.9008H3.83353C3.50997 16.8482 3.3085 17.1575 3.3085 17.4661C3.3085 17.6294 3.37105 17.7812 3.46473 17.8928C3.55738 18.0032 3.68946 18.0839 3.83353 18.0839H12.83ZM13.2904 15.5638H13.3663L13.3867 15.4907C13.491 15.118 13.6297 14.7805 13.8023 14.4776L13.8876 14.3281H13.7155H3.83353C3.50997 14.3281 3.3085 14.6374 3.3085 14.9459C3.3085 15.1092 3.37105 15.2611 3.46473 15.3727C3.55738 15.4831 3.68946 15.5638 3.83353 15.5638H13.2904ZM21.9094 27.0676L21.8446 27.0597L21.8113 27.1158C21.4408 27.7396 20.7307 28.1371 19.9492 28.1371H4.36482C3.14252 28.1371 2.16257 27.1783 2.16257 25.9931V5.27963C2.16257 4.09445 3.14252 3.13567 4.36482 3.13567H19.9492C21.1715 3.13567 22.1515 4.09445 22.1515 5.27963V9.35328V9.45328H22.2515C22.3449 9.45328 22.4375 9.44425 22.5246 9.43576L22.5268 9.43555C22.6162 9.42684 22.6999 9.41876 22.7828 9.41876C22.9614 9.41876 23.1288 9.41906 23.2949 9.45143L23.4141 9.47466V9.35328V5.27963C23.4141 3.42683 21.8438 1.9 19.9492 1.9H4.36482C2.47023 1.9 0.9 3.42683 0.9 5.27963V25.9931C0.9 27.8459 2.47023 29.3727 4.36482 29.3727H19.9492C21.4075 29.3727 22.6477 28.4843 23.1586 27.2393L23.2152 27.1014H23.0661H23.0655H23.0649H23.0643H23.0636H23.063H23.0624H23.0618H23.0612H23.0605H23.0599H23.0593H23.0587H23.0581H23.0575H23.0569H23.0563H23.0556H23.055H23.0544H23.0538H23.0532H23.0526H23.052H23.0514H23.0508H23.0502H23.0496H23.049H23.0484H23.0478H23.0472H23.0466H23.046H23.0454H23.0448H23.0442H23.0436H23.043H23.0424H23.0418H23.0412H23.0406H23.0401H23.0395H23.0389H23.0383H23.0377H23.0371H23.0365H23.0359H23.0353H23.0348H23.0342H23.0336H23.033H23.0324H23.0318H23.0313H23.0307H23.0301H23.0295H23.0289H23.0284H23.0278H23.0272H23.0266H23.0261H23.0255H23.0249H23.0243H23.0238H23.0232H23.0226H23.022H23.0215H23.0209H23.0203H23.0198H23.0192H23.0186H23.0181H23.0175H23.0169H23.0164H23.0158H23.0152H23.0147H23.0141H23.0135H23.013H23.0124H23.0119H23.0113H23.0107H23.0102H23.0096H23.0091H23.0085H23.0079H23.0074H23.0068H23.0063H23.0057H23.0052H23.0046H23.004H23.0035H23.0029H23.0024H23.0018H23.0013H23.0007H23.0002H22.9996H22.9991H22.9985H22.998H22.9974H22.9969H22.9963H22.9958H22.9952H22.9947H22.9941H22.9936H22.993H22.9925H22.992H22.9914H22.9909H22.9903H22.9898H22.9892H22.9887H22.9882H22.9876H22.9871H22.9865H22.986H22.9854H22.9849H22.9844H22.9838H22.9833H22.9828H22.9822H22.9817H22.9811H22.9806H22.9801H22.9795H22.979H22.9785H22.9779H22.9774H22.9769H22.9763H22.9758H22.9752H22.9747H22.9742H22.9736H22.9731H22.9726H22.9721H22.9715H22.971H22.9705H22.9699H22.9694H22.9689H22.9683H22.9678H22.9673H22.9667H22.9662H22.9657H22.9652H22.9646H22.9641H22.9636H22.963H22.9625H22.962H22.9615H22.9609H22.9604H22.9599H22.9594H22.9588H22.9583H22.9578H22.9573H22.9567H22.9562H22.9557H22.9552H22.9546H22.9541H22.9536H22.9531H22.9525H22.952H22.9515H22.951H22.9504H22.9499H22.9494H22.9489H22.9484H22.9478H22.9473H22.9468H22.9463H22.9457H22.9452H22.9447H22.9442H22.9437H22.9431H22.9426H22.9421H22.9416H22.9411H22.9405H22.94H22.9395H22.939H22.9385H22.9379H22.9374H22.9369H22.9364H22.9359H22.9353H22.9348H22.9343H22.9338H22.9333H22.9327H22.9322H22.9317H22.9312H22.9307H22.9301H22.9296H22.9291H22.9286H22.9281H22.9276H22.927H22.9265H22.926H22.9255H22.925H22.9244H22.9239H22.9234H22.9229H22.9224H22.9218H22.9213H22.9208H22.9203H22.9198H22.9193H22.9187H22.9182H22.9177H22.9172H22.9167H22.9161H22.9156H22.9151H22.9146H22.9141H22.9135H22.913H22.9125H22.912H22.9115H22.9109H22.9104H22.9099H22.9094H22.9089H22.9083H22.9078H22.9073H22.9068H22.9063H22.9057H22.9052H22.9047H22.9042H22.9037H22.9031H22.9026H22.9021H22.9016H22.901H22.9005H22.9H22.8995H22.899H22.8984H22.8979H22.8974H22.8969H22.8963H22.8958H22.8953H22.8948H22.8942H22.8937H22.8932H22.8927H22.8921H22.8916H22.8911H22.8906H22.89H22.8895H22.889H22.8885H22.8879H22.8874H22.8869H22.8864H22.8858H22.8853H22.8848H22.8842H22.8837H22.8832H22.8827H22.8821H22.8816H22.8811H22.8805H22.88H22.8795H22.879H22.8784H22.8779H22.8774H22.8768H22.8763H22.8758H22.8752H22.8747H22.8742H22.8736H22.8731H22.8726H22.872H22.8715H22.871H22.8704H22.8699H22.8694H22.8688H22.8683H22.8677H22.8672H22.8667H22.8661H22.8656H22.865H22.8645H22.864H22.8634H22.8629H22.8623H22.8618H22.8613H22.8607H22.8602H22.8596H22.8591H22.8586H22.858H22.8575H22.8569H22.8564H22.8558H22.8553H22.8547H22.8542H22.8536H22.8531H22.8526H22.852H22.8515H22.8509H22.8504H22.8498H22.8493H22.8487H22.8482H22.8476H22.847H22.8465H22.8459H22.8454H22.8448H22.8443H22.8437H22.8432H22.8426H22.8421H22.8415H22.8409H22.8404H22.8398H22.8393H22.8387H22.8381H22.8376H22.837H22.8365H22.8359H22.8353H22.8348H22.8342H22.8336H22.8331H22.8325H22.8319H22.8314H22.8308H22.8302H22.8297H22.8291H22.8285H22.828H22.8274H22.8268H22.8263H22.8257H22.8251H22.8245H22.824H22.8234H22.8228H22.8222H22.8217H22.8211H22.8205H22.8199H22.8194H22.8188H22.8182H22.8176H22.817H22.8165H22.8159H22.8153H22.8147H22.8141H22.8135H22.8129H22.8124H22.8118H22.8112H22.8106H22.81H22.8094H22.8088H22.8082H22.8076H22.8071H22.8065H22.8059H22.8053H22.8047H22.8041H22.8035H22.8029H22.8023H22.8017H22.8011H22.8005H22.7999H22.7993H22.7987H22.7981H22.7975H22.7969H22.7963H22.7957H22.7951H22.7944H22.7938H22.7932H22.7926H22.792H22.7914H22.7908H22.7902H22.7896H22.7889H22.7883H22.7877H22.7871H22.7865H22.7859H22.7852H22.7846H22.784H22.7834H22.7828V27.1008L22.772 27.102C22.4662 27.1351 22.1937 27.1022 21.9094 27.0676ZM22.7828 26.1276C27.3692 26.1276 31.1 22.4949 31.1 18.0184C31.1 13.5419 27.3692 9.90921 22.7828 9.90921C18.1963 9.90921 14.4655 13.5419 14.4655 18.0184C14.4655 22.4949 18.1963 26.1276 22.7828 26.1276ZM22.7828 11.0758C26.6976 11.0758 29.9437 14.2102 29.9437 18.0184C29.9437 21.8618 26.7323 24.9955 22.7828 24.9955C18.8335 24.9955 15.6218 21.8276 15.6218 18.0184C15.6218 14.2102 18.868 11.0758 22.7828 11.0758Z" fill="currentColor" stroke="currentColor" stroke-width="0.2"/>
<path d="M23 16.0967C23.5515 16.0967 24 15.6248 24 15.0522C24 14.472 23.5515 14 23 14C22.4485 14 22 14.472 22 15.0522C22 15.6248 22.4485 16.0967 23 16.0967ZM22.2132 23L23.7868 23L23.7868 17.5977L22.2132 17.5977L22.2132 23Z" fill="currentColor"/>
</svg>
<svg width="27" height="22" viewBox="0 0 27 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M19.7945 0C19.2585 0 18.7202 0.200689 18.3168 0.604112L14.8594 4.06149C14.7764 4.14449 14.7106 4.24302 14.6656 4.35145C14.6207 4.45989 14.5976 4.57612 14.5976 4.69349C14.5976 4.81086 14.6207 4.92708 14.6656 5.03552C14.7106 5.14396 14.7764 5.24249 14.8594 5.32548C15.027 5.4931 15.2543 5.58726 15.4914 5.58726C15.6088 5.58726 15.725 5.56414 15.8334 5.51923C15.9419 5.47431 16.0404 5.40848 16.1234 5.32548L19.5808 1.8681C19.7083 1.74055 19.8807 1.74054 20.0083 1.8681L24.8784 6.74747C25.0059 6.87501 25.0059 7.0475 24.8784 7.17499L16.0862 15.9672C15.9586 16.0947 15.7862 16.0947 15.6587 15.9672L10.7886 11.0878C10.6611 10.9603 10.6611 10.7878 10.7886 10.6603L11.6158 9.8238C11.7133 9.74522 11.7932 9.647 11.8502 9.53552C11.9073 9.42405 11.9402 9.30181 11.9469 9.17676C11.9536 9.05171 11.9339 8.92665 11.8891 8.80972C11.8443 8.69278 11.7754 8.58658 11.6868 8.49803C11.5983 8.40948 11.4921 8.34056 11.3752 8.29576C11.2582 8.25095 11.1332 8.23125 11.0081 8.23796C10.8831 8.24466 10.7608 8.27761 10.6493 8.33466C10.5379 8.39172 10.4396 8.47159 10.3611 8.5691L9.52461 9.40556C8.71773 10.2124 8.71774 11.5449 9.52461 12.3518L14.404 17.2311C15.2108 18.038 16.5433 18.038 17.3502 17.2311L26.1423 8.43898C26.9492 7.63214 26.9492 6.29034 26.1423 5.48348L21.263 0.604112C20.8595 0.200692 20.3305 0 19.7945 0ZM10.8722 4.16373C10.3363 4.16373 9.79792 4.36441 9.39449 4.76784L0.602336 13.5693C-0.198913 14.3767 -0.202642 15.7105 0.602336 16.5155L5.4817 21.3949C6.28856 22.2017 7.62106 22.2017 8.42791 21.3949L11.8853 17.9375C12.0529 17.7699 12.1471 17.5425 12.1471 17.3055C12.1471 17.0684 12.0529 16.8411 11.8853 16.6735C11.7177 16.5059 11.4903 16.4117 11.2533 16.4117C11.0163 16.4117 10.7889 16.5059 10.6213 16.6735L7.16392 20.1309C7.03637 20.2584 6.86396 20.2584 6.7364 20.1309L1.86632 15.2515C1.73878 15.124 1.73882 14.9515 1.86632 14.824L10.6585 6.03183C10.786 5.90427 10.9584 5.90427 11.086 6.03183L15.9561 10.9112C16.0836 11.0388 16.0836 11.2112 15.9561 11.3387L15.1289 12.1752C15.037 12.2554 14.9626 12.3536 14.9101 12.4638C14.8577 12.5739 14.8284 12.6936 14.8241 12.8155C14.8197 12.9374 14.8404 13.0589 14.8849 13.1725C14.9293 13.2861 14.9966 13.3894 15.0825 13.476C15.1685 13.5625 15.2712 13.6306 15.3845 13.6759C15.4978 13.7211 15.6191 13.7427 15.741 13.7393C15.863 13.7358 15.9829 13.7074 16.0934 13.6558C16.2039 13.6042 16.3027 13.5305 16.3836 13.4392L17.2201 12.6027C18.027 11.7959 18.0269 10.4541 17.2201 9.64721L12.3407 4.76784C11.9373 4.36442 11.4082 4.16373 10.8722 4.16373Z" fill="white" fill-opacity="0.7"/>
</svg>
<svg width="18" height="18" viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 2.93258C0 1.31296 1.31149 0 2.92929 0H9.08989C9.59253 0 10 0.407471 10 0.910112C10 1.41275 9.59253 1.82022 9.08989 1.82022H2.92929C2.31564 1.82022 1.81818 2.31825 1.81818 2.93258V15.0674C1.81818 15.6818 2.31564 16.1798 2.92929 16.1798H9.08989C9.59253 16.1798 10 16.5872 10 17.0899C10 17.5925 9.59253 18 9.08989 18H2.92929C1.31149 18 0 16.687 0 15.0674V2.93258ZM9 8.9C9 8.40294 9.36631 8 9.81818 8L14.8487 8L13.2939 6.57733C12.9362 6.25002 12.9 5.68143 13.213 5.30736C13.526 4.93329 14.0697 4.89538 14.4274 5.22269L17.7061 8.22269C17.8929 8.39359 18 8.64049 18 8.90001C18 9.15954 17.8929 9.40643 17.7061 9.57733L14.4274 12.5773C14.0697 12.9046 13.526 12.8667 13.213 12.4927C12.9 12.1186 12.9362 11.55 13.2939 11.2227L14.8488 9.8H9.81818C9.36631 9.8 9 9.39706 9 8.9Z" fill="currentColor"/>
</svg>
<svg width="8" height="12" viewBox="0 0 8 12" xmlns="http://www.w3.org/2000/svg">
<path d="M1.65127 0.241154C1.23217 -0.118533 0.600841 -0.0703691 0.241154 0.34873C-0.118533 0.767829 -0.0703691 1.39916 0.34873 1.75885L1.65127 0.241154ZM6.625 5.82759L7.30187 6.56369C7.5122 6.37028 7.62975 6.09615 7.62485 5.81046C7.61996 5.52478 7.49309 5.25483 7.27627 5.06874L6.625 5.82759ZM0.323127 10.2639C-0.0834098 10.6377 -0.109926 11.2703 0.2639 11.6769C0.637727 12.0834 1.27034 12.1099 1.67687 11.7361L0.323127 10.2639ZM0.34873 1.75885L5.97373 6.58643L7.27627 5.06874L1.65127 0.241154L0.34873 1.75885ZM5.94813 5.09149L0.323127 10.2639L1.67687 11.7361L7.30187 6.56369L5.94813 5.09149Z" fill="currentColor"/>
</svg>
<svg width="21" height="19" viewBox="0 0 21 19" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M4.66406 8.97656C7.19531 8.97656 8.68359 7.46484 8.68359 4.86328C8.68359 2.32031 7.16016 0.761719 4.66406 0.761719C2.17969 0.761719 0.644531 2.33203 0.644531 4.86328C0.644531 7.45312 2.13281 8.97656 4.66406 8.97656ZM6.39844 18L17.6367 1.08984H14.9297L3.69141 18H6.39844ZM4.66406 6.9375C3.80859 6.9375 3.31641 6.1875 3.31641 4.875C3.31641 3.59766 3.82031 2.8125 4.66406 2.8125C5.49609 2.8125 6 3.59766 6 4.875C6 6.17578 5.51953 6.9375 4.66406 6.9375ZM16.6641 18.1875C19.1953 18.1875 20.6836 16.6758 20.6836 14.0742C20.6836 11.5312 19.1602 9.97266 16.6641 9.97266C14.1797 9.97266 12.6445 11.543 12.6445 14.0742C12.6445 16.6641 14.1445 18.1875 16.6641 18.1875ZM16.6641 16.1484C15.8086 16.1484 15.3281 15.3984 15.3281 14.0859C15.3281 12.8086 15.8203 12.0234 16.6641 12.0234C17.5078 12.0234 18.0117 12.8086 18.0117 14.0859C18.0117 15.3867 17.5195 16.1484 16.6641 16.1484Z" fill="white" fill-opacity="0.67"/>
</svg>
<svg width="32" height="32" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
<circle cx="16" cy="16" r="16" fill="currentColor"/>
<path d="M22 24H10.0018C8.89651 24 8.06943 23.0697 8.66985 22.1417C9.7342 20.4967 11.8549 18.8866 13.4571 18.6873C13.6652 18.6614 13.8693 18.7326 14.0395 18.8552L16 20.2667L17.9605 18.8552C18.1307 18.7326 18.3348 18.6615 18.5429 18.6873C20.1456 18.8866 22.2679 20.4976 23.3318 22.143C23.9316 23.0706 23.1046 24 22 24Z" fill="white"/>
<ellipse cx="16.0001" cy="12.8889" rx="4.44444" ry="4.88889" fill="white"/>
</svg>
const Capitalize = function(str) {
return typeof str === 'string' && str.length > 0?str[0].toUpperCase()+str.substr(1):'';
};
if(!('capitalize' in String)){
String.capitalize = function() {
return Capitalize(this);
}
}
export {Capitalize}
\ No newline at end of file
var textCache = {};
const textFilter = function(where, what) {
var prepared = textCache[what];
if(!prepared){
var tokens = what.split(/\s/)
textCache[what] = prepared = tokens.map(token => token[0] === '-' ? {has: false, text: token.substr(1)}: {has: true, text: token});
}
var yep = true;
for( var i = 0, _i = prepared.length; i < _i; i++ ){
var preparedElement = prepared[ i ];
if(preparedElement.text === '')
continue;
var matched = where.indexOf(preparedElement.text)>-1;
if(preparedElement.has === false && matched){
return false
}else if(preparedElement.has === true && !matched)
yep = false;
}
return yep;
};
export {textFilter};
\ No newline at end of file
var textCache = {};
String.Typography = function(text, cfg) {
const {html} = cfg || {};
if(typeof text !== 'string')
return text;
text = text.trim();
if(text[0] === ',')text = text.substr(1);
if(text[text.length-1] === ',')text = text.substr(0, text.length - 1);
const income = text;
if(text.split(/[«"»]/).length % 2 === 0){
// odd count of quotes
text = text.replace(/[«»]/,'')
}
let valids = {}, id = 1, add = (val)=>{
const uid = '_!@#'+id+'#@!_';
id++;
valids[uid] = val;
return uid;
};
text = text
.trim()
.replace(/\n/g,'|||||')
.replace(/\s\s+/g,' ')
.replace(/ /g,' ')
.replace(/([а-я][-–—][0-9][-–—][а-я])/g, add)
.replace(/(\d)(руб)/g,'$1 $2')
//.replace(/([а-яА-Я])[—-]([а-яА-Я])/g, (full, a, b)=>add(a+'-'+b))
.replace(/([а-яА-Яa-zA-Z])[—-]([а-яА-Я])/g, (full, a, b)=>add(html?'<nobr>'+a+'-'+b+'</nobr>': a+'-'+b))
.replace(/([0-9])[,]([0-9])/g, (full, a, b)=>add(a+','+b))
.replace(/(ВкусВилл)/g, add)
.replace(/([^\s])[—-]/g, '$1 —')
.replace(/([,\.:])([а-яА-Я0-9\.,"])/g, '$1 $2')
.replace(/\s([,\.:])/g, '$1')
.replace(/([\(])\s/g, '$1')
.replace(/[^\s]([\(])/g, ' $1')
.replace(/[\s+]([\)])/g, '$1')
.replace(/([а-я\?\.])(\d+\.)/g, '$1 $2')
.replace(/ [-–—] /g, (html?'&nbsp;':' ')+'— ')
.replace(/-(\d)/g, '–$1')
.replace(/ (\d\. [а-яА-Я])/g, '\n$1')
.replace(/"([а-яА-Я][^"]+)\s+"([а-яА-Я\s][^"]+)"\s+([а-яА-Я][^"]+)"/g,'«$1 “$2” $3»')
.replace(/"([^"]+)"/g,'«$1»')
.replace(\s+/g,'«')
.replace(/\s+»/g,'»')
.replace(/([а-я])([А-Я])/g,(ful, a, b)=>a+' '+b.toLowerCase())
//.replace(/\. /g,'.&shy; ')
// phone
.replace(/(\+7|8)[\s\(]*(\d{3})[\s\)]*(\d{3})[\s\-—–]*(\d{2})[\s-—–]*(\d{2})/, html ?'+7&nbsp;($2)&nbsp;$3-$4-$5' : '+7 ($2) $3-$4-$5')
.replace(/свершении/g,'совершении')
[html?'replace':'trim'](/[А-Я]+/g, function(text) {
return text.length > 2 || text === 'НЕ' ? '<span class="important">'+text.toLowerCase()+'</span>': text;
})
[html?'replace':'trim'](/, ([А-Я])/g, (f, a)=>', '+a.toLowerCase())
.replace(/\|\|\|\|\|/g,'\n')
[html?'replace':'trim'](/\*\*([^*]+)\*\*/g,'<span class="notificate-text">$1</span>')
;
// HANGING
/*
text = text
.replace(/([«(])/g,'<span class="before-hanging-open"></span>&shy;<span class="hanging-open">$1</span>')
.replace(/([»)])/g,'<span class="hanging-close">$1</span>');
*/
//<span class="hanging-close">»</span>');
var lines = text.split('\n');
var numberStarting = 0;
var lastNumber = 0;
var remake = [];
lines.forEach(function(line) {
line.replace(/^(\d+)\.\s/, function(full, num) {
num = num-0;
if(lastNumber !== num - 1){
if(lastNumber>num){
// ok
}else{
var text = remake.pop();
while(lastNumber<num - 1){
if(text === void 0){
return full;
}
text.replace(new RegExp('[^\\d]'+(lastNumber+1)+'[^\\d]'), function(ful, pos,a){
remake.push(text.substr(0, pos).replace(lastNumber+1, lastNumber+1+'.'))
text = text.substr(pos+(lastNumber+1+'').length)
});
lastNumber++;
}
remake.push(text.replace(lastNumber, lastNumber+'.'));
}
}
lastNumber = num;
});
remake.push(line);
});
var longSentance = 200;
if(remake.length === 1 && remake[0].length>longSentance){
remake = remake[ 0 ].split( '. ' ).map( a => a + '.' ).reduce((store, sentance)=>{
var last = (store.pop()||'');
if(last.length+sentance.length< longSentance*1.3){
store.push([ last, sentance ].join( ' ' ));
}else{
if(last)
store.push(last);
store.push(sentance);
}
return store
},[]);
remake = [].concat.apply( [], remake.map( a => [ a, '' ] ));
}
let out = remake.length === 1 ? remake[0] : remake.map(a=>html?'<p>'+a+'</p>':a).join('\n');
out = out.replace(/_!@#(\d+)#@!_/g, (f, num)=>{
return valids[f]
});
out = out.trim();
if(out.length>70)
out = out[0].toUpperCase()+out.substr(1);
/*console.log(income);
console.log(out);*/
return out;
};
String.Search = function(string, search) {
var prepared = textCache[search];
if(!prepared){
var tokens = search.split(/\s/)
textCache[search] = prepared = tokens
.map(token => token[0] === '-' ? {has: false, text: token.substr(1)}: {has: true, text: token});
}
var yep = true;
for( var i = 0, _i = prepared.length; i < _i; i++ ){
var preparedElement = prepared[ i ];
if(preparedElement.text === '')
continue;
var matched = string.indexOf(preparedElement.text)>-1;
if(preparedElement.has === false && matched){
return false
}else if(preparedElement.has === true && !matched)
yep = false;
}
return yep;
};
export const Typography = String.Typography;
\ No newline at end of file
.field {
position: relative;
margin-bottom: 35px;
}
.field__label {
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
}
.field__label-text {
@include mainBodyText;
margin-bottom: 25px;
@media (max-width: $mobile) {
margin-bottom: 20px;
}
.login-page & {
@media (max-width: $mobile) {
min-height: 38px;
}
}
}
.field__input {
display: block;
box-sizing: border-box;
padding: 0 20px;
width: 300px;
max-width: 100%;
height: 50px;
font-family: inherit;
font-weight: 500;
text-align: center;
font-size: 17px;
line-height: 36px;
color: $text-main;
background-color: $bg-accent;
border: 1px solid rgba(208, 209, 209, 0.8);
border-radius: 25px;
transition: all 0.3s ease;
@media (max-width: $mobile) {
font-weight: 400;
font-size: 16px;
-webkit-appearance: none;
}
&::placeholder {
color: $gray-medium;
}
&:hover {
background-color: #F2F2F2;
border-color: #D7D8D7;
box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.1);
}
&:focus {
background-color: $bg-accent;
border-color: #D7D8D7;
box-shadow: none;
outline: none;
&::placeholder {
color: rgba(201, 199, 199, 0.5);
}
}
.field--invalid & {
color: $red;
background-color: rgba(255, 0, 0, 0.1);
border-color: $red;
}
}
.field__error-message {
position: absolute;
left: 50%;
top: 100%;
transform: translate(-50%, 5px);
display: flex;
flex-direction: column;
justify-content: center;
width: 800px;
max-width: calc(100% + 60px);
min-height: 32px;
font-size: 16px;
line-height: 1;
color: $red;
@media (max-width: $mobile) {
transform: translate(-50%, 9px);
font-size: 12px;
line-height: 17px;
letter-spacing: 0.01em;
}
}
export default D.declare('view.cmp.field.Input', (cfg)=> {
const dom = <input class="field__input" type={'text'} {...cfg}/>;
if(cfg.bind){
cfg.bind.sub(function (val) {
dom.value = val;
});
dom.addEventListener('input', function () {
cfg.bind.set(dom.value);
})
}
return dom;
})
import './Field.scss';
import Input from './Input.jsx';
const LabeledField = D.declare('view.cmp.field.LabeledField', (cfg, children)=> {
return <div class={D.cls( "field", cfg.cls, { "field--invalid": cfg.invalid } )}>
<label class="field__label">
<span class="field__label-text">{cfg.label}</span>
{cfg.Input ? cfg.Input :
<Input class="field__input" type={cfg.type} placeholder={cfg.placeholder} {...cfg}/>
}
</label>
{children}
</div>
});
export default LabeledField;
export {LabeledField};
\ No newline at end of file
import Input from './Input.jsx';
import './phoneField.scss';
function setCaretPosition(el, caretPos) {
el.value = el.value;
// ^ this is used to not only get "focus", but
// to make sure we don't have it everything -selected-
// (it causes an issue in chrome, and having it doesn't hurt any other browser)
if (el !== null) {
if (el.createTextRange) {
var range = el.createTextRange();
range.move('character', caretPos);
range.select();
return true;
}
else {
// (el.selectionStart === 0 added for Firefox bug)
if (el.selectionStart || el.selectionStart === 0) {
el.focus();
el.setSelectionRange(caretPos, caretPos);
return true;
}
else { // fail city, fortunately this never happens (as far as I've tested) :)
el.focus();
return false;
}
}
}
};
export default D.declare('view.cmp.field.PhoneInput', (cfg, children)=> {
let displayDOM,placeholderDOM, inputDOM,
dom = <div class={D.cls("phone-field", { "phone-field--invalid": cfg.invalid })}><div class='phone-field__input-wrapper field__phone-wrapper'>
{displayDOM = <div class={'phone-field__phone-display'}/>}
{placeholderDOM = <div class={'phone-field__phone-placeholder'}>{cfg.placeholder||'Ваш номер'}</div>}
<div class='phone-field__input'>
{inputDOM =
<input
class="phone-field__input phone-field__phone-hidden"
type={'tel'}
/>
}
</div>
</div></div>;
let focused = false;
if(cfg.bind){
var update = function (val) {
val = val+'';
inputDOM.value = val;
let built = [];
if((val !== '' && val !== '7' && val !== '8') || focused){
const pattern = '+0 (000) 000-00-00';
let pos = 0;
let filled = true;
for( let i = 0, _i = pattern.length; i < _i; i++ ){
const char = pattern[ i ];
if( char === '0' ){
filled = filled && val[ pos ] !== void 0;
built.push( val[ pos ] === void 0 ? (!focused||val[ pos-1 ] === void 0 ? '_': '|_') : val[ pos ] );
pos++;
}else{
built.push( char );
}
}
if(filled && focused)
built.push('|');
// console.log(pos,focused)
}
if(built.length === 0){
placeholderDOM.classList.add('phone-field__phone-placeholder__visible');
}else{
placeholderDOM.classList.remove('phone-field__phone-placeholder__visible');
}
displayDOM.innerText = built.join('');
};
cfg.bind.sub(update);
inputDOM.addEventListener('keypress', function (e) {
if(e.key === 'Enter'){
return;
}
if(inputDOM.value.length+(e.data!==null?e.key.length:0)>11 || !(e.key>='0' && e.key<='9')){
e.preventDefault()
}
valueGetter();
});
var valueGetter = function() {
cfg.bind.set((inputDOM.value+'').substr(0,11));
};
inputDOM.addEventListener('keyup', valueGetter);
inputDOM.addEventListener('input', valueGetter);
var focus = function(e) {
focused = true;
setTimeout(()=> setCaretPosition(inputDOM, inputDOM.value.length),0);
update(inputDOM.value);
};
inputDOM.addEventListener('focus', focus);
inputDOM.addEventListener('click', focus);
inputDOM.addEventListener('blur', function() {
focused = false;
update(inputDOM.value);
});
}
return dom;
})
.phone-field__input {
display: block;
box-sizing: border-box;
padding: 0 20px;
width: 300px;
max-width: 100%;
height: 50px;
font-family: inherit;
font-weight: 500;
text-align: center;
font-size: 17px;
line-height: 36px;
color: $text-main;
background-color: $bg-accent;
border: 1px solid rgba(208, 209, 209, 0.8);
border-radius: 25px;
transition: all 0.3s ease;
@media (max-width: $mobile) {
font-weight: 400;
font-size: 16px;
-webkit-appearance: none;
}
&::placeholder {
color: $gray-medium;
}
&:hover {
background-color: #F2F2F2;
border-color: #D7D8D7;
box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.1);
}
&:focus {
background-color: $bg-accent;
border-color: #D7D8D7;
box-shadow: none;
outline: none;
&::placeholder {
color: rgba(201, 199, 199, 0.5);
}
}
.phone-field--invalid & {
color: $red;
background-color: rgba(255, 0, 0, 0.1);
border-color: $red;
}
}
.phone-field__error-message {
position: absolute;
left: 50%;
top: 100%;
transform: translate(-50%, 5px);
display: flex;
flex-direction: column;
justify-content: center;
width: 800px;
max-width: calc(100% + 60px);
min-height: 32px;
font-size: 16px;
line-height: 1;
color: $red;
@media (max-width: $mobile) {
transform: translate(-50%, 9px);
font-size: 12px;
line-height: 17px;
letter-spacing: 0.01em;
}
}
.phone-field__phone-display, .phone-field__phone-hidden {
white-space: pre;
}
.phone-field__phone-hidden {
opacity: 0;
background: #27EF60;
}
.phone-field__phone-display, .phone-field__phone-placeholder {
position: absolute;
box-sizing: border-box;
padding: 0;
width: 300px;
max-width: 100%;
height: 50px;
font-weight: 500;
text-align: center;
font-size: 17px;
line-height: 36px;
color: #000000;
margin: 6px 0;
}
.phone-field__phone-placeholder {
font-weight: 500;
margin: 6px 0;
border: 0;
border-radius: 0;
background: transparent;
visibility: hidden;
color: $gray-medium
}
.phone-field__phone-placeholder__visible {
visibility: visible;
}
const Table = function(cfg){
Object.assign(this, cfg);
if(this.childrenEl && this.dom){
D.appendChild(this.dom, this.childrenEl);
}
if(this.childrenEl && !this.dom){
this.dom = this.childrenEl.parentNode;
if(!this.dom){
this.dom = this.childrenEl;
}
}
const children = this.childrenEl = this.childrenEl || D.div({
cls: 'cmp-table__children'
});
this.dom = this.dom || D.div({
cls: D.cls('cmp-table', cfg.cls)
}, children);
this.currentSlice = [];
this.childrenEls = [];
if(this.items instanceof Store.StoreBinding){
this.items.sub((items)=>{
this.items = items;
this.updateChildren();
});
}
if(this.action){
let actions = this.action;
delete this.action;
this.getActionDelegate((name, obj)=>{
if(name in actions){
actions[name].call(this, obj.data, obj)
}else{
console.warn('CMP.TABLE:error → action `'+name+'` is not specified!', obj);
}
});
}
setTimeout(()=>this.updateChildren(),0);
};
let regExpsCache = {};
Table.prototype = {
key: 'id',
currentSlice: [],
childrenEls: [],
sort: [{name: 'asc'}],
childrenEl: null,
filterText: '',
filterFn: () => true,
afterFilter: ()=>true,
emptyTpl: ()=><div class={'empty-table'}/>,
buildFilterRegExp: function(text) {
return new RegExp(text.replace(/[\[\]\(\)\?\*\.\+]/g,'').replace(/\s+/g,'|'), 'ig');
},
filter: function(text) {
this.filterText = text;
this.filterRegExp = this.buildFilterRegExp(text);
},
fetch: function() {
const sortFn = typeof this.sort === 'function';
const field = sortFn ? null :Object.keys(this.sort[0])[0]
this.currentSlice = (this.items || [])
.filter(item=>this.filterFn.call(item, this.filterText, this))
.sort(sortFn?this.sort:(a,b)=>a[field] > b[field] ? 1 : a[field] < b[field] ? -1 : 0)
.map(data=>({data, dom: null}));
this.afterFilter(this.getSelected());
},
updateChildren: function() {
this.fetch();
D.removeChildren(this.childrenEl);
this.currentSlice.forEach((item) => {
D.appendChild(this.childrenEl, item.dom = this.itemTpl(item.data, this, item));
});
if(this.currentSlice.length === 0){
D.appendChild(this.childrenEl, this.emptyTpl(this.items));
}
},
updateChild: function(item) {
if(item.dom){
const dom = this.itemTpl(item.data, this, item);
item.dom.parentNode.replaceChild(dom, item.dom);
item.dom = dom;
}
},
removeChild: function(item, full) {
if(item.dom){
item.dom.parentNode.removeChild(item.dom);
item.dom = null;
this.currentSlice = this.currentSlice.filter(i=>!(i.data===item.data));
if(full)
this.items = this.items.filter(i=>!(i===item.data));
}
},
removeChildByData: function(data, full) {
const match = this.currentSlice.filter(i=>i.data===data),
item = match[0];
if(!item)
return;
this.removeChild(item, full);
},
updateChildByData: function(data) {
const match = this.currentSlice.filter(i=>i.data===data),
item = match[0];
if(!item)
return;
if(item.dom){
const dom = this.itemTpl(item.data, this, item);
item.dom.parentNode.replaceChild(dom, item.dom);
item.dom = dom;
}
},
getSelected: function() {
return this.currentSlice.filter(i=>!i.hidden).map(i=>i.data)
},
highlight: function(text, filterText) {
if(!filterText)
return text;
let reg = regExpsCache[filterText] || (regExpsCache[filterText] = this.buildFilterRegExp(filterText))
const txts = [];
return D.join(text.replace(reg, function(match) {
txts.push(match);
return '|||||'
}).split('|||||'), (i)=>D.span({cls: 'highlighted'}, txts[i]))
},
preventAction: true,
getActionDelegate: function(fn) {
var me = this;
return this.action || (this.action = function(e) {
const [type, val] = this.getAttribute('data-action').split(':');
const match = me.currentSlice.filter(({data})=>data[me.key]+'' === val+'');
if(!match || !match.length){
debugger
return;
}
if(fn){
fn(type, match[0]);
}else{
if( type === 'hide' ){
if( match.length ){
match[ 0 ].hidden = true;
me.updateChild( match[ 0 ] )
me.afterFilter( me.getSelected() );
}
}
if( type === 'toggle' ){
if( match.length ){
match[ 0 ].full = !match[ 0 ].full;
me.updateChild( match[ 0 ] )
}
}
}
me.preventAction && e.stopPropagation();
});
},
};
export default Table;
export { Table };
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment